* Неофициальная оболочка Python, python-gemini-api, доступна для пользователей, сталкивающихся с частыми проблемами аутентификации или не имеющих возможности использовать аутентификацию Google. Эта оболочка использует значения файлов cookie для взаимодействия с Google Gemini посредством обратного проектирования. Проект осуществлялся в сотрудничестве с Антонио Чеонгом.
Официально Google предоставляет частично бесплатные и чистые официальные API и SDK Gemini, к которым можно получить доступ и использовать их через пакеты Python, google-generativeai.
Кончик
| 2024-03-26 | [См. примеры кода]
Ознакомьтесь с временно бесплатными API-интерфейсами LLM с открытым исходным кодом с помощью Open Router. (Бесплатный лимит: 10 запросов в минуту)
| 20 мая 2024 г. | Есть некоторые изменения в логике в зависимости от региона/страны (IP) и аккаунта. Пользователям необходимо проверить следующее, чтобы найти для себя подходящую логику. Пакет по-прежнему подходит для наиболее распространенных случаев использования.
BOT_SERVER
в const.pyself._sid
в client.pyself._rcid
в client.py| Бумага | Официальный сайт | Официальный API | Документы API |
Gemini — это семейство генеративных моделей искусственного интеллекта, разработанное Google DeepMind и предназначенное для мультимодальных случаев использования. API Gemini предоставляет вам доступ к моделям Gemini Pro и Gemini Pro Vision. В феврале 2024 года сервис Google Bard был заменен на Gemini .
Модель | Тип | Доступ | Подробности |
---|---|---|---|
Близнецы | Собственный | API [13] | Запатентованный мультимодальный искусственный интеллект от Google DeepMind, включая продвинутые модели, такие как Gemini Pro и Gemini Pro Vision. Доступ ограничен использованием API; дополнительную информацию можно получить через этот документ и на веб-сайте. [1][2] |
Джемма | Открытый исходный код | Загружаемый Бесплатный API | Языковая модель преобразования текста в текст с открытым исходным кодом, подходящая для таких задач, как контроль качества и обобщение. Веса можно загрузить для локального использования, а подробная документация представлена в документе и на веб-сайте. [3][4] |
Код Джемма | Открытый исходный код | Загружаемый | Эта модель с открытым исходным кодом, разработанная специально для задач программирования, предлагает загружаемые веса, помогающие разработчикам генерировать код и выполнять аналогичные действия. Для получения дополнительной информации обратитесь к соответствующей статье, сообщению в блоге и коллекции Hugging Face. [5][6][7] |
Это оболочка Python, созданная на основе проекта Bard API, предназначенная для получения ответов от Gemini Web в формате REST. Синхронные клиенты для Gemini предпочтительнее асинхронных из-за проблем с ограничением скорости и блокировкой.
pip install python-gemini-api
pip install git+https://github.com/dsdanielpark/Gemini-API.git
Для обновленной версии используйте следующее:
pip install -q -U python-gemini-api
Посетите https://gemini.google.com/.
Открыв браузер, попробуйте сначала автоматически собрать файлы cookie.
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 )
(Вручную) F12
для консоли браузера → Session: Application
→ Cookies
→ Скопировать значение некоторых рабочих наборов файлов cookie. Если это не помогло, перейдите к шагу 3.
Сначала попробуйте только __Secure-1PSIDCC
. Если это не сработает, используйте __Secure-1PSID
и __Secure-1PSIDTS
. Все еще нет успеха? Попробуйте эти четыре файла cookie: __Secure-1PSIDCC
, __Secure-1PSID
, __Secure-1PSIDTS
, NID
. Если ничего не помогает, перейдите к шагу 3 и рассмотрите возможность отправки всего файла cookie.
(Рекомендуется) Экспортируйте файлы cookie сайта Gemini через расширение браузера. Например, используйте расширение Chrome ExportThisCookies, откройте и скопируйте содержимое текстового файла.
Важный
Поэкспериментируйте с различными учетными записями Google и настройками браузера, чтобы найти работающий файл cookie. Успех может зависеть от IP и статуса учетной записи. После подключения файл cookie обычно действует в течение месяца. Продолжайте тестирование до тех пор, пока оно не будет успешным.
Создать контент: возвращает проанализированный ответ.
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
Генерация контента из изображения: вы можете использовать изображение в качестве входных данных.
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
Примечание
Если методgenerate_content возвращает пустые полезные данные, попробуйте выполнить его еще раз без повторной инициализации объекта Gemini.
Установка языка и версии Gemini с помощью переменных среды:
Настройка языка ответа Gemini (необязательно): проверьте поддерживаемые языки здесь. По умолчанию английский.
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".
Пожалуйста, явно укажите cookies
в формате dict. Вы также можете ввести путь к файлу, содержащему файл cookie, с помощью cookie_fp
(поддерживается *.json, *.txt). Проверьте образцы файлов cookie в папке с ресурсами.
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
Чтобы для auto_cookie
было установлено значение True
, настройте target_cookies
. Gemini WebUI должен быть активен в браузере. Browser_cookie3 включает автоматический сбор файлов cookie, хотя обновления могут быть еще не завершены.
Возвращает ответ Gemini, но первый ответ может быть пустым.
from gemini import Gemini
cookies = {}
client = Gemini ( cookies = cookies )
prompt = "Tell me about Large Language Model."
response = client . generate_content ( prompt )
print ( response . payload )
Важный
НЕ отправляйте одно и то же приглашение повторно. Если сеанс успешно соединяется и generate_content
работает нормально, ЗАКРОЙТЕ веб-сайт Gemini. Если веб-сайт Gemini остается открытым в браузере, срок действия файлов cookie может истечь быстрее.
Результатом функцииgenerate_content является GeminiModelOutput
со следующей структурой:
Gemini-API/gemini/src/model/output.py
Строка 16 в fdf064c
Отправить запрос: возвращает полезные данные запроса и status_code, что упрощает отладку.
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 )
Вы можете отслеживать общее количество сделанных запросов, обратившись к свойству request_count
в классе Gemini
.
Возвращает текст, сгенерированный 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 )
Возвращает изображения, созданные Gemini.
Асинхронный загрузчик
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")
Отображение изображений в IPython. Вы можете отобразить изображение или передать его в другое приложение в байтовом формате.
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 )
Синхронизировать загрузчик
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
Оболочка асинхронного загрузчика
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 ))
Логика метода 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 ))
Примечание
Используйте GeminiImage для обработки изображений. web_images
работает без файлов cookie, но для таких изображений, generated_image
от Gemini, следует передавать файлы cookie. Файлы cookie необходимы для загрузки изображений из хранилища Google. Проверьте ответ или используйте существующую переменную cookie.
Возвращает изображения в ответ Близнецов.
Асинхронный загрузчик
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")
Синхронизировать загрузчик
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
Оболочка асинхронного загрузчика
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" ))
Логика метода 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" ))
Принимает изображение в качестве входных данных и возвращает ответ.
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 )
Для начала вам необходимо связать Google Workspace, чтобы активировать это расширение через веб-расширение Gemini. Пожалуйста, обратитесь к официальному уведомлению и ознакомьтесь с политикой конфиденциальности для получения более подробной информации.
флаги расширения
@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
Google Рабочая область
Карты Google
Google Авиабилеты
Google Отели
Ютуб
Вы можете указать конкретный ответ, задав его идентификатор кандидата на ответ (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
В Gemini функцияgenerate_content возвращает первый ответ. Это может варьироваться в зависимости от длины или сортировки. Следовательно, вы можете указать индекс выбранного ответа от 0 до n следующим образом. Однако, если есть только один ответ, верните его обратно в 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
Проанализируйте текст ответа, чтобы извлечь нужные значения.
Используя Gemini.generate_custom_content
, укажите собственный синтаксический анализ для извлечения определенных значений. По умолчанию используйте ParseMethod1 и ParseMethod2, и при желании вы можете передавать собственные методы синтаксического анализа в качестве аргументов. Обратитесь к 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 )
Gemini-API/gemini/client.py
Строка 323 в 31b8424
Если вы хотите избежать заблокированных запросов и банов, используйте Smart Proxy от Crawlbase. Он перенаправляет ваши запросы на подключение на случайно меняющийся IP-адрес в пуле прокси-серверов, прежде чем они достигнут целевого веб-сайта. Сочетание искусственного интеллекта и машинного обучения позволяет более эффективно избегать CAPTCHA и блоков. Возможно, в заголовок потребуется добавить аргумент на уровне Secure Sockets Layer (SSL). Используйте его вместе 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." )
В стандартных случаях используйте класс Gemini; для исключений используйте объекты сеанса. При создании нового сервера бота Gemini настройте 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." )
Изучите дополнительные возможности в этом документе.
Если вы хотите разработать собственный простой код, вы можете начать с этого простого примера кода.
Подготовьте необходимые элементы и получите ключ API в Google AI Studio. Установите Python 3.9 или выше и введите выданный ключ API. Подробности смотрите в руководстве.
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 )
Если у вас достаточно ресурсов графического процессора, вы можете загружать веса напрямую, а не использовать API Gemini для создания контента. Рассмотрим Gemma и Code Gemma — модели с открытым исходным кодом, доступные для локального использования .
Модели Gemma — это облегченные, усовершенствованные языковые модели Google для преобразования текста в текст, предназначенные только для декодера, разработанные в результате исследования Gemini. Доступные на английском языке, они предлагают открытые веса и варианты, идеально подходящие для таких задач, как ответы на вопросы и подведение итогов. Для получения дополнительной информации посетите карточку модели 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, официальный выпуск Google для программ LLM по коду, был выпущен 9 апреля 2024 года. Он предоставляет три модели, специально разработанные для генерации кода и взаимодействия с ним. Вы можете изучить модели Code Gemma и просмотреть карточку модели для получения более подробной информации.
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 предлагает временный бесплатный вывод для некоторых моделей. Получите ключ API от API Open Router и проверьте бесплатные модели на моделях Open Router. В первую очередь используйте модели со стоимостью токена 0 долларов; за использование других моделей может взиматься плата. Дополнительную информацию см. в бесплатном руководстве по API LLM с открытым исходным кодом.
Клиент синхронизации предпочтительнее асинхронного для Gemini из-за проблем с ограничением скорости и блокировкой , но OpenRouter предлагает надежные LLM с открытым исходным кодом для асинхронной реализации. (Бесплатный лимит: 10 запросов в минуту)
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())
В список бесплатных моделей входят:
google/gemma-7b-it:free
– google/gemma-7b от Google ***mistralai/mistral-7b-instruct:free
- mistralai/Mistral-7B-Instruct-v0.1 для инструкции от Mistral AI ****huggingfaceh4/zephyr-7b-beta:free
- HuggingFaceH4/zephyr-7b-beta ***openchat/openchat-7b:free
— openchat/openchat для чата **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 от Nous Research Используйте Crawlbase API для эффективного сбора данных для обучения моделей искусственного интеллекта. Уровень успеха составляет 98 %, а время безотказной работы — 99,9 %. Он быстро запускается, соответствует требованиям GDPR/CCPA, поддерживает массовое извлечение данных и пользуется доверием более 70 тысяч разработчиков.
Прежде чем использовать этот пакет, сначала ознакомьтесь с HanaokaYuzu/Gemini-API и официальным API Google Gemini. Большую часть помощи можно найти на страницах часто задаваемых вопросов и проблем.
Искренне благодарен за любые сообщения о новых функциях или ошибках. Мы очень ценим ваши ценные отзывы о коде. Частые ошибки могут возникать из-за изменений в интерфейсе API сервиса Google. Всегда приветствуются как отчеты о проблемах, так и запросы на включение, способствующие улучшениям. Мы стремимся поддерживать активное и вежливое открытое сообщество.
выкопайте колодец, прежде чем вы почувствуете жажду.
Мы хотели бы выразить нашу искреннюю благодарность всем участникам.
Целью этого пакета является повторная реализация функциональности Bard API, которая была заархивирована за вклад любимого сообщества разработчиков открытого исходного кода, несмотря на то, что официальный API Gemini уже доступен.
Участники Bard API и Gemini API.
Необходимы модификации асинхронного клиента с использованием моей логики, а также автоматический сбор файлов cookie через браузер_cookie3 и реализация других функций Bard API (таких как извлечение кода, экспорт в Replit, рисование графиков и т. д.).
Обратите внимание, что при проверке автоматического сбора файлов cookie выясняется, что срок действия файлов cookie истекает сразу после отправки запроса на сбор. Попытки сделать его более удобным для пользователя не увенчались успехом. Кроме того, значение _sid, похоже, работает нормально, даже если оно возвращается как None.
Наконец, если алгоритмы CustomParser и ResponseParser не работают должным образом, новые методы анализа можно обновить с помощью условных операторов в соответствующих разделах.
Я не планирую активно курировать этот репозиторий. Пожалуйста, сначала просмотрите HanaokaYuzu/Gemini-API.
Спасибо и хорошего вам дня.
Лицензия MIT, 2024 г. Настоящим мы категорически отказываемся от любой явной или неявной юридической ответственности, связанной с нашими работами. Пользователи обязаны использовать этот пакет ответственно и на свой страх и риск. Этот проект является личной инициативой и не связан с Google и не одобрен ею. Рекомендуется использовать официальный API Google.
Предупреждение. Пользователи принимают на себя полную юридическую ответственность за GeminiAPI. Не одобрено Google. Чрезмерное использование может привести к ограничениям учетной записи. Изменения в политиках или статусе учетной записи могут повлиять на функциональность. Используйте страницы проблем и обсуждений.
Python 3.7 или выше.