Un contenedor * no oficial de Python, python-gemini-api, está disponible para los usuarios que enfrentan problemas frecuentes de autenticación o que no pueden usar la autenticación de Google. Este contenedor utiliza valores de cookies para interactuar con Google Gemini mediante ingeniería inversa. El proyecto implicó una colaboración con Antonio Cheong.
En el lado oficial, Google proporciona API y SDK de Gemini oficiales limpios y parcialmente gratuitos, a los que se puede acceder y utilizar perfectamente a través de paquetes de Python, google-generativeai.
Consejo
| 2024-03-26 | [Ver ejemplos de código]
Consulte las API LLM de código abierto temporalmente gratuitas con Open Router. (Límite gratuito: 10 solicitudes/minuto)
| 2024-05-20 | Hay algunos cambios en la lógica según la región/país (IP) y la cuenta. Los usuarios deben comprobar lo siguiente para encontrar la lógica adecuada para ellos. El paquete sigue siendo adecuado para los casos de uso más comunes.
BOT_SERVER
en const.pyself._sid
en cliente.pyself._rcid
en cliente.py| Papel | Sitio web oficial | API oficial | Documentos API |
Gemini es una familia de modelos de IA generativa desarrollados por Google DeepMind que está diseñado para casos de uso multimodal. La API de Gemini le brinda acceso a los modelos Gemini Pro y Gemini Pro Vision. En febrero de 2024, el servicio Bard de Google se cambió a Gemini .
Modelo | Tipo | Acceso | Detalles |
---|---|---|---|
Géminis | Propiedad | API [13] | Una IA multimodal patentada por Google DeepMind, que incluye modelos avanzados como Gemini Pro y Gemini Pro Vision. El acceso está restringido al uso de API; Se pueden obtener ideas adicionales a través del documento y el sitio web. [1][2] |
Gema | Código abierto | Descargable API gratuita | Un modelo de lenguaje de texto a texto de código abierto adecuado para tareas como control de calidad y resumen. Los pesos se pueden descargar para uso local y se proporciona documentación detallada a través del documento y el sitio web. [3][4] |
Código Gemma | Código abierto | Descargable | Diseñado específicamente para tareas de programación, este modelo de código abierto ofrece pesos descargables para ayudar a los desarrolladores con la generación de código y actividades similares. Consulte el artículo asociado, la publicación del blog y la colección Hugging Face para obtener más información. [5][6][7] |
Este es un contenedor de Python derivado del proyecto Bard API, diseñado para recuperar respuestas de Gemini Web en formato REST. Se prefieren los clientes síncronos a los asíncronos para Gemini debido a preocupaciones de limitación y bloqueo de velocidad.
pip install python-gemini-api
pip install git+https://github.com/dsdanielpark/Gemini-API.git
Para la versión actualizada, utilice lo siguiente:
pip install -q -U python-gemini-api
Visita https://gemini.google.com/
Con el navegador abierto, intente primero recopilar cookies automáticamente.
from gemini import Gemini
client = Gemini ( auto_cookies = True )
# Testing needed as cookies vary by region.
# client = Gemini(auto_cookies=True, target_cookies=["__Secure-1PSID", "__Secure-1PSIDTS"])
# client = Gemini(auto_cookies=True, target_cookies="all") # You can pass whole cookies
response = client . generate_content ( "Hello, Gemini. What's the weather like in Seoul today?" )
print ( response . payload )
(Manualmente) F12
para la consola del navegador → Session: Application
→ Cookies
→ Copie el valor de algunos conjuntos de cookies que funcionan. Si no funciona, vaya al paso 3.
Primero intente __Secure-1PSIDCC
solo. Si no funciona, utilice __Secure-1PSID
y __Secure-1PSIDTS
. ¿Aún no has tenido éxito? Pruebe estas cuatro cookies: __Secure-1PSIDCC
, __Secure-1PSID
, __Secure-1PSIDTS
, NID
. Si ninguno funciona, continúe con el paso 3 y considere enviar el archivo de cookies completo.
(Recomendado) Exporte las cookies del sitio Gemini a través de una extensión del navegador. Por ejemplo, utilice la extensión de Chrome ExportThisCookies, abra y copie el contenido del archivo txt.
Importante
Experimente con diferentes cuentas de Google y configuraciones del navegador para encontrar una cookie que funcione. El éxito puede variar según la IP y el estado de la cuenta. Una vez conectada, una cookie suele permanecer efectiva durante un mes. Siga probando hasta que tenga éxito.
Generar contenido: devuelve una respuesta analizada.
from gemini import Gemini cookies = { "" : "" } # Cookies may vary by account or region. Consider sending the entire cookie file. client = Gemini ( cookies = cookies ) # You can use various args response = client . generate_content ( "Hello, Gemini. What's the weather like in Seoul today?" ) response . payload
Generar contenido a partir de una imagen: puedes usar la imagen como entrada.
from gemini import Gemini cookies = { "" : "" } client = Gemini ( cookies = cookies ) # You can use various args response = client . generate_content ( "What does the text in this image say?" , image = 'folder/image.jpg' ) response . payload
Nota
Si el método generate_content devuelve una carga útil vacía, intente ejecutarlo nuevamente sin reinicializar el objeto Gemini.
Configuración del idioma y la versión de Gemini mediante variables de entorno:
Configuración del idioma de respuesta de Gemini (opcional): consulte los idiomas admitidos aquí. El valor predeterminado es el inglés.
import os
os . environ [ "GEMINI_LANGUAGE" ] = "KR" # Setting Gemini response language (Optional)
os . environ [ "GEMINI_ULTRA" ] = "1" # Switch to Gemini-advanced response (Experimental, Optional)
# In some accounts, access to Gemini Ultra may not be available. If that's the case, please revert it back to "0".
Declare explícitamente cookies
en formato dict. También puede ingresar la ruta al archivo que contiene la cookie con cookie_fp
(*.json, *.txt compatible). Consulte los archivos de cookies de muestra en la carpeta de activos.
from gemini import Gemini
cookies = {
"__Secure-1PSIDCC" : "value" ,
"__Secure-1PSID" : "value" ,
"__Secure-1PSIDTS" : "value" ,
"NID" : "value" ,
# Cookies may vary by account or region. Consider sending the entire cookie file.
}
client = Gemini ( cookies = cookies )
# client = Gemini(cookie_fp="folder/cookie_file.json") # (*.json, *.txt) are supported.
# client = Gemini(auto_cookies=True) # Or use auto_cookies paprameter
Para que auto_cookie
se establezca en True
y ajuste target_cookies
. Gemini WebUI debe estar activo en el navegador. browser_cookie3 permite la recopilación automática de cookies, aunque es posible que las actualizaciones aún no estén completas.
Devuelve la respuesta de Géminis, pero la primera puede estar vacía.
from gemini import Gemini
cookies = {}
client = Gemini ( cookies = cookies )
prompt = "Tell me about Large Language Model."
response = client . generate_content ( prompt )
print ( response . payload )
Importante
NO envíe el mismo mensaje repetidamente. Si la sesión se conecta correctamente y generate_content
funciona bien, CIERRE el sitio web de Gemini. Si la web de Gemini permanece abierta en el navegador, las cookies pueden caducar más rápido.
La salida de la función generate_content es GeminiModelOutput
, con la siguiente estructura:
API de Géminis/gemini/src/model/output.py
Línea 16 en fdf064c
Enviar solicitud: devuelve la carga útil y el código de estado de la solicitud, lo que facilita la depuración.
from gemini import Gemini
cookies = {}
client = Gemini ( cookies = cookies )
response_text , response_status = client . send_request ( "Hello, Gemini. Tell me about Large Language Models." )
print ( response_text )
Puede realizar un seguimiento del número total de solicitudes realizadas accediendo a la propiedad request_count
dentro de la clase Gemini
.
Devuelve texto generado por Gemini.
from gemini import Gemini
cookies = {}
client = Gemini ( cookies = cookies )
prompt = "Hello, Gemini. Tell me about Large Language Models."
response = client . generate_content ( prompt )
print ( response . text )
Devuelve imágenes generadas por Gemini.
Descargador asíncrono
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Hello, Gemini. Tell me about Large Language Models." )
generated_images = response . generated_images # Check generated images [Dict]
await GeminiImage . save ( generated_images , "output" , cookies )
# image_data_dict = await GeminiImage.fetch_images_dict(generated_images, cookies)
# await GeminiImage.save_images(image_data_dict, "output")
Mostrar imágenes en IPython Puede mostrar la imagen o transmitirla a otra aplicación en formato byte.
import io
from gemini import Gemini , GeminiImage
from IPython . display import display , Image
cookies = {}
client = Gemini ( cookies = cookies )
bytes_images_dict = GeminiImage . fetch_images_dict_sync ( generated_images , cookies ) # Get bytes images dict
for image_name , image_bytes in bytes_images_dict . items ():
print ( image_name )
image = Image ( data = image_bytes )
display ( image )
Descargador de sincronización
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Create illustrations of Seoul, South Korea." )
generated_images = response . generated_images # Check generated images [Dict]
GeminiImage . save_sync ( generated_images , save_path = "output" , cookies = cookies )
# You can use byte type image dict for printing images as follow:
# bytes_images_dict = GeminiImage.fetch_images_dict_sync(generated_images, cookies) # Get bytes images dict
# GeminiImage.save_images_sync(bytes_images_dict, path="output") # Save to dir
Envoltorio de descarga asíncrono
import asyncio
from gemini import GeminiImage
async def save_generated_images ( generated_images , save_path = "output" , cookies = cookies ):
await GeminiImage . save ( generated_images , save_path = save_path , cookies = cookies )
# Run the async function
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Create illustrations of Seoul, South Korea." )
generated_images = response . generated_images
asyncio . run ( save_generated_images ( generated_images , save_path = "output" , cookies = cookies ))
Lógica del método GeminiImage.save
import asyncio
from gemini import Gemini , GeminiImage
async def save_generated_images ( generated_images , save_path = "output" , cookies = cookies ):
image_data_dict = await GeminiImage . fetch_images_dict ( generated_images , cookies ) # Get bytes images dict asynchronously
await GeminiImage . save_images ( image_data_dict , save_path = save_path )
# Run the async function
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Create illustrations of Seoul, South Korea." )
generated_images = response . generated_images
asyncio . run ( save_generated_images ( generated_images , save_path = "output" , cookies = cookies ))
Nota
Utilice GeminiImage para el procesamiento de imágenes. web_images
funciona sin cookies, pero para imágenes como generated_image
de Gemini, pase cookies. Se necesitan cookies para descargar imágenes del almacenamiento de Google. Verifique la respuesta o use la variable de cookies existente.
Devuelve imágenes en respuesta de Géminis.
Descargador asíncrono
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images # Check generated images
await GeminiImage . save ( response_images , "output" )
# image_data_dict = await GeminiImage.fetch_images_dict(response_images)
# await GeminiImage.save_images(image_data_dict, "output")
Descargador de sincronización
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images # Check response images
GeminiImage . save_sync ( response_images , save_path = "output" )
# You can use byte type image dict as follow:
# bytes_images_dict = GeminiImage.fetch_bytes_sync(response_images) # Get bytes images dict
# GeminiImage.save_images_sync(bytes_images_dict, save_path="output") # Save to path
Envoltorio de descarga asíncrono
import asyncio
from gemini import Gemini , GeminiImage
async def save_response_web_imagse ( response_images , save_path = "output" ):
await GeminiImage . save ( response_images , save_path = save_path )
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images
asyncio . run ( save_response_web_imagse ( response_images , save_path = "output" ))
Lógica del método GeminiImage.save
import asyncio
from gemini import Gemini , GeminiImage
async def save_response_web_imagse ( response_images , save_path = "output" ):
image_data_dict = await GeminiImage . fetch_images_dict ( response_images ) # Get bytes images dict asynchronously
await GeminiImage . save_images ( image_data_dict , save_path = save_path )
# Run the async function
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images
asyncio . run ( save_response_web_imagse ( response_images , save_path = "output" ))
Toma una imagen como entrada y devuelve una respuesta.
image = 'folder/image.jpg'
# image = open('folder/image.jpg', 'rb').read() # (jpg, jpeg, png, webp) are supported.
# Image file path or Byte-formatted image array
response = client . generate_content ( "What does the text in this image say?" , image = image )
print ( response )
Para comenzar, debes vincular Google Workspace para activar esta extensión a través de la extensión web Gemini. Consulte el aviso oficial y revise las políticas de privacidad para obtener más detalles.
banderas de extensión
@Gmail, @Google Drive, @Google Docs, @Google Maps, @Google Flights, @Google Hotels, @YouTube
response = client . generate_content ( "@YouTube Search clips related with Google Gemini" )
response . response_dict
Espacio de trabajo de Google
mapas de google
Vuelos de Google
Hoteles de Google
YouTube
Puede especificar una respuesta particular configurando su ID de candidato de respuesta (RCID).
# Generate content for the prompt "Give me some information about the USA."
response1 = client . generate_content ( "Give me some information about the USA." )
# After reviewing the responses, choose the one you prefer and copy its RCID.
client . rcid = "rc_xxxx"
# Now, generate content for the next prompt "How long does it take from LA to New York?"
response2 = client . generate_content ( "How long does it take from LA to New York?" )
# However, RCID may not persist. If parsing fails, reset `client.rcid` to None.
# client.rcid = None
En Gemini, generate_content devuelve la primera respuesta. Esto puede variar según la longitud o la clasificación. Por lo tanto, puede especificar el índice de la respuesta elegida de 0 an de la siguiente manera. Sin embargo, si solo hay una respuesta, revertirla a 0.
from gemini import GeminiModelOutput
GeminiModelOutput . chosen = 1 # default is 0
response_choice_1 = client . generate_content ( "Give me some information about the USA." )
# If not all Gemini returns are necessarily plural, revert back to 0 in case of errors.
# GeminiModelOutput.chosen = 0
Analice el texto de respuesta para extraer los valores deseados.
Utilizando Gemini.generate_custom_content
, especifique el análisis personalizado para extraer valores específicos. Utilice ParseMethod1 y ParseMethod2 de forma predeterminada y puede pasar métodos de análisis personalizados como argumentos si lo desea. Consulte custom_parser.py.
# You can create a parser method that takes response_text as the input for custom_parser.
response_text , response_status = client . send_request ( "Give me some information about the USA." )
# Use custom_parser function or class inheriting from BaseParser
response = client . generate_custom_content ( "Give me some information about the USA." , * custom_parser )
Géminis-API/gemini/client.py
Línea 323 en 31b8424
Si desea evitar solicitudes bloqueadas y prohibiciones, utilice Smart Proxy de Crawlbase. Reenvía sus solicitudes de conexión a una dirección IP que rota aleatoriamente en un grupo de servidores proxy antes de llegar al sitio web de destino. La combinación de IA y ML hace que sea más eficaz evitar CAPTCHA y bloqueos. Es posible que sea necesario agregar al encabezado el argumento en el nivel de Secure Sockets Layer (SSL). Úselo junto con verify=False
.
# Get your proxy url at crawlbase https://crawlbase.com/docs/smart-proxy/get/
proxy_url = "http://xxxxx:@smartproxy.crawlbase.com:8012"
proxies = { "http" : proxy_url , "https" : proxy_url }
client = Gemini ( cookies = cookies , proxies = proxies , timeout = 30 , verify = False )
client . session . header [ "crawlbaseAPI-Parameters" ] = "country=US"
client . generate_content ( "Hello, Gemini. Give me a beautiful photo of Seoul's scenery." )
Para casos estándar, utilice la clase Gemini; para excepciones, utilice objetos de sesión. Al crear un nuevo servidor bot Gemini, ajuste Headers.MAIN.
import requests
from gemini import Gemini , Headers
cookies = {}
session = requests . Session ()
session . headers = Headers . MAIN
for key , value in cookies . items ():
session . cookies . update ({ key : value })
client = Gemini ( session = session ) # You can use various args
response = client . generate_content ( "Hello, Gemini. Tell me about Large Language Model." )
Explore características adicionales en este documento.
Si desea desarrollar su propio código simple, puede comenzar con este ejemplo de código simple.
Prepare los elementos necesarios y obtenga una clave API en Google AI Studio. Instálelo en Python 3.9 o superior e ingrese la clave API emitida. Consulte el tutorial para obtener más detalles.
pip install -q -U google-generativeai
import google . generativeai as genai
GOOGLE_API_KEY = ""
genai . configure ( api_key = GOOGLE_API_KEY )
model = genai . GenerativeModel ( 'gemini-pro' )
response = model . generate_content ( "Write me a poem about Machine Learning." )
print ( response . text )
Si tiene suficientes recursos de GPU, puede descargar pesos directamente en lugar de utilizar la API de Gemini para generar contenido. Considere Gemma y Code Gemma, modelos de código abierto disponibles para uso local .
Los modelos Gemma son los modelos de lenguaje ligeros, avanzados de texto a texto y de solo descodificador de Google, derivados de la investigación de Gemini. Disponibles en inglés, ofrecen pesos abiertos y variantes, ideales para tareas como respuesta a preguntas y resúmenes. Para obtener más información, visite la ficha del modelo Gemma-7b.
from transformers import AutoTokenizer , AutoModelForCausalLM
tokenizer = AutoTokenizer . from_pretrained ( "google/gemma-7b" )
model = AutoModelForCausalLM . from_pretrained ( "google/gemma-7b" )
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer ( input_text , return_tensors = "pt" )
outputs = model . generate ( ** input_ids )
print ( tokenizer . decode ( outputs [ 0 ]))
CodeGemma, que es un lanzamiento oficial de Google para LLM de código, se lanzó el 9 de abril de 2024. Proporciona tres modelos diseñados específicamente para generar código e interactuar con él. Puede explorar los modelos de Code Gemma y ver la tarjeta del modelo para obtener más detalles.
from transformers import GemmaTokenizer , AutoModelForCausalLM
tokenizer = GemmaTokenizer . from_pretrained ( "google/codegemma-7b-it" )
model = AutoModelForCausalLM . from_pretrained ( "google/codegemma-7b-it" )
input_text = "Write me a Python function to calculate the nth fibonacci number."
input_ids = tokenizer ( input_text , return_tensors = "pt" )
outputs = model . generate ( ** input_ids )
print ( tokenizer . decode ( outputs [ 0 ]))
OpenRouter ofrece inferencia temporal gratuita para modelos seleccionados. Obtenga una clave API de Open Router API y consulte los modelos gratuitos en Modelos de Open Router. Utilice principalmente modelos con un coste simbólico de 0 dólares; otros modelos pueden generar cargos. Vea más en la guía API LLM gratuita de código abierto.
Se prefiere el cliente de sincronización sobre el asíncrono para Gemini debido a problemas de limitación y bloqueo de velocidad , pero OpenRouter ofrece LLM de código abierto confiables para la implementación asíncrona. (Límite gratuito: 10 solicitudes/minuto)
from gemini import OpenRouter
OPENROUTER_API_KEY = ""
gemma_client = OpenRouter ( api_key = OPENROUTER_API_KEY , model = "google/gemma-7b-it:free" )
prompt = "Do you know UCA academy in Korea? https://blog.naver.com/ulsancoding"
response = gemma_client . create_chat_completion ( prompt )
print ( response )
# payload = gemma_client.generate_content(prompt)
# print(payload.json())
La lista de modelos gratuitos incluye:
google/gemma-7b-it:free
- google/gemma-7b de Google ***mistralai/mistral-7b-instruct:free
- mistralai/Mistral-7B-Instruct-v0.1 para instrucciones de Mistral AI ****huggingfaceh4/zephyr-7b-beta:free
- HuggingFaceH4/zephyr-7b-beta ***openchat/openchat-7b:free
- openchat/openchat para chatear **openrouter/cinematika-7b:free
- jondurbin/cinematika-7b-v0.1undi95/toppy-m-7b:free
- Undi95/Toppy-M-7Bgryphe/mythomist-7b:free
- Gryphe/MythoMist-7bnousresearch/nous-capybara-7b:free
- NousResearch/Nous-Capybara-7B-V1 de Nous Research Utilice la API Crawlbase para una extracción de datos eficiente para entrenar modelos de IA, con una tasa de éxito del 98 % y un tiempo de actividad del 99,9 %. Es rápido de comenzar, cumple con GDPR/CCPA, admite extracción masiva de datos y cuenta con la confianza de más de 70.000 desarrolladores.
Primero revise HanaokaYuzu/Gemini-API y la API oficial de Google Gemini antes de usar este paquete. Puede encontrar más ayuda en las páginas de Preguntas frecuentes y Problemas.
Sinceramente agradecido por cualquier informe sobre nuevas funciones o errores. Se agradecen mucho sus valiosos comentarios sobre el código. Pueden ocurrir errores frecuentes debido a cambios en la interfaz API del servicio de Google. Tanto los informes de problemas como las solicitudes de extracción que contribuyen a las mejoras siempre son bienvenidos. Nos esforzamos por mantener una comunidad abierta, activa y cortés.
cava el pozo antes de que tengas sed.
Nos gustaría expresar nuestro más sincero agradecimiento a todos los contribuyentes.
Este paquete tiene como objetivo volver a implementar la funcionalidad de la API de Bard, que ha sido archivada por las contribuciones de la querida comunidad de código abierto, a pesar de que la API oficial de Gemini ya está disponible.
Colaboradores de Bard API y Gemini API.
Se necesitan modificaciones en el cliente asíncrono usando mi lógica, junto con la recopilación automática de cookies a través de browser_cookie3 y la implementación de otras funciones de la API de Bard (como extracción de código, exportación a Replit, dibujo de gráficos, etc.).
Tenga en cuenta que al revisar la recopilación automática de cookies, parece que las cookies caducan inmediatamente después de enviar una solicitud de recopilación. Los esfuerzos por hacerlo más fácil de usar fueron infructuosos. Además, el valor _sid parece funcionar normalmente incluso cuando se devuelve como Ninguno.
Por último, si los algoritmos CustomParser y ResponseParser no funcionan correctamente, se pueden actualizar nuevos métodos de análisis mediante declaraciones condicionales en las secciones correspondientes.
No planeo curar activamente este repositorio. Revise primero HanaokaYuzu/Gemini-API.
Gracias y que tengas un gran día.
Licencia MIT, 2024. Por la presente renunciamos enérgicamente a cualquier responsabilidad legal explícita o implícita relacionada con nuestros trabajos. Los usuarios deben utilizar este paquete de forma responsable y bajo su propio riesgo. Este proyecto es una iniciativa personal y no está afiliado ni respaldado por Google. Se recomienda utilizar la API oficial de Google.
Advertencia Los usuarios asumen total responsabilidad legal por GeminiAPI. No respaldado por Google. El uso excesivo puede generar restricciones en la cuenta. Los cambios en las políticas o el estado de la cuenta pueden afectar la funcionalidad. Utilice páginas de temas y debates.
Python 3.7 o superior.