Это лаконичное fastapi приложение (прокси), которое транслирует запросы OpenAI<->Yandex Cloud Foundational Models, чтобы сервисы Yandex Cloud можно было использовать в сторонних фреймворках через OpenAI SDK.
Быстрый старт:
import openai
proxy_url = "https://openai2yandex-translator.vercel.app"
# С аутентификацией запроса
client = openai.Client(api_key=f"{FOLDER_ID}@{API_KEY_OR_IAM_KEY}", base_url=f"{proxy_url}/v1/")
# Или с автоматической аутентификацией
client = openai.Client(api_key=f"sk-my", base_url=f"{proxy_url}/v1/")
Вы можете использовать SDK на любом языке, в том числе js, go, и т.д.
Сценарии использования:
- 🚀 работа с yandexGPT из no-code фреймворков широкого профиля (n8n, langflow, flowise и т.д.)
- 🧰 разработка на Open Source фреймворках (langchain, llamaindex)
- 🧩 работа с пользовательскими приложениями (например, различные плагины для Obsidian, Notion и т.д.)
Приносите свои примеры удачных и неудачных интеграций в issues!
# генерация текста
client.chat.completions.create(
messages=[
{
"role": "user",
"content": 'В каком году был основан Яндекс?',
}
],
model="yandexgpt/latest",
# или f'gpt://{FOLDER_ID}/yandexgpt/latest'
# или f'ds://{MODEL_ID}'
max_tokens=2000,
temperature=0.1,
)
# эмбеддинги текста
client.embeddings.create(input = ['В каком году был основан Яндекс?'], model='text-search-doc/latest').data[0].embedding # или model=f'emb://{FOLDER_ID}/text-search-doc/latest'
Подробные примеры содержатся в файлах example.py и example.js.
- Все модели генерации текста, uri которых начинаются с
gpt://
- Все Embedding модели, uri которых начинаются с
emb://
- Все дообученные модели генерации текста, uri которых начинаются с
ds://
- Все дообученные Embedding модели, uri которых начинаются с
ds://
(пока такого функционала нет в Yandex Cloud)
Фичи из SDK OpenAI: стриминг для генерации и синхронные батчи для эмбеддинг модели.
Классификаторы, function calling, logprobs не поддерживаются.
-
На стороне прокси. Если опенаи ключ в запросе указать
sk-my
,.env
илиDockerfile
. -
На стороне пользователя. Если в данную проксю будет ходит несколько пользователей, то в качестве OpenAI ключа указывайте folder_id и статический апи-ключ или IAM-ключ, разделяя их символом
@
(напримерfolder_id@iam_key
).
Если вы ограничены в выборе моделей, но можете указать хотя-бы api-ключ и base_url, то можете обращаться к моделям OpenAI - запросы будут мапиться на модели YandexGPT:
- gpt-4o -> yandexgpt/latest
- gpt-4o-mini -> yandexgpt-lite/latest
- text-embedding-3-large, text-embedding-3-small, text-embedding-ada-002 -> text-search-doc/latest
TestsLoggingError handlingСтримингСинхронные батчи эмбеддинг-модели (для langchain)- Поддержка function calling
- Поддержка OS моделей
- Добавить поддержку классификаторов
- Добавить поддержку дообученных эмбеддингов
- Добавить поддержку YandexART
-
Yandex Cloud,
ru-central1-a
. Stateless режим, запросы не логируются. https://apps.llmplay.space/translator Status: -
Vercel,
Stockholm, Sweden
. Логирование на уровне INFO (персональные данные скрыты). https://openai2yandex-translator.vercel.app Status:
- Укажите в переменных окружения
VERCEL=True
, function max duration 60 секунд в настройках проекта и сделайте редеплой. - Для использования автоматической аутентификации, заполните
FOLDER_ID
&YANDEX_API_KEY
на странице деплоя.
- Если вам нужен доступ к ресурсам с автоматической аутентификацией, заполните данные параметры (in
.env
file, Dockerfile or cloud environment):FOLDER_ID
: your Yandex Cloud folder idYANDEX_API_KEY
: your Yandex Cloud API key
- Запустите приложение:
docker-compose up -d --build
. Приложение будет доступно по адресу 127.0.0.1:9041- или (команды аналогичны для
podman
)docker build -t image_name .
, затемdocker run -d -p 127.0.0.1:9041:9041 --name container_name image_name
- или (для локального тестирования)
pip install -r requirements.txt
, затемpython main.py
Может быть полезно: Запуск контейнерного приложения в Yandex Serverless Containers
curl -X POST <PROXY_URL>/v1/chat/completions \
-H "Authorization: Bearer <FOLDER>@<IAM_OR_API>" \
-H "Content-Type: application/json" \
-d '{
"model": "yandexgpt/latest",
"messages": [
{"role": "user", "content": "В каком году Гагарин полетел в космос?"},
{"role": "assistant", "content": "В 1961."},
{"role": "user", "content": "Как назывался корабль?"}
]
}'
Если у вас возникли проблемы по работе с этим приложением, пожалуйста, создайте issue в этом репозитории, он активно поддерживается. Оперативно по проблемам писать tg @nongilgameshj
- Чтобы ходить в дообученную gpt, пользователь/сервисный аккаунт должны быть участниками проекта DataShpere с ролью
developer
- При деплое через serverless платформы (vervel, yc functions) не забудьте выставить timeout 60 секунд
- Ошибка 429: проблема на стороне облака. Мы фиксим данную проблему, но пока рекомендуется отправлять запросы с ретраями.