Skip to content

all-mute/openai2yandex_api_adapter

Repository files navigation

OpenAI SDK to Yandex GPT API Adapter

PRs Welcome Test Status Test Status Vercel

Это лаконичное fastapi приложение (прокси), которое транслирует запросы OpenAI<->Yandex Cloud Foundational Models, чтобы сервисы Yandex Cloud можно было использовать в сторонних фреймворках через OpenAI SDK.

Promo Image

Быстрый старт:

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, или пустым, то кредиты для работы с Yandex Cloud будут искаться в переменных окружения. Задайте их для работы с этим сценарием в .env или Dockerfile.

  • На стороне пользователя. Если в данную проксю будет ходит несколько пользователей, то в качестве OpenAI ключа указывайте folder_id и статический апи-ключ или IAM-ключ, разделяя их символом @ (например folder_id@iam_key).

Как получить folder_id и api_key?

Использование моделей gpt-4 как YandexGPT

Если вы ограничены в выборе моделей, но можете указать хотя-бы 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

Планы

  • Tests
  • Logging
  • Error handling
  • Стриминг
  • Синхронные батчи эмбеддинг-модели (для langchain)
  • Поддержка function calling
  • Поддержка OS моделей
  • Добавить поддержку классификаторов
  • Добавить поддержку дообученных эмбеддингов
  • Добавить поддержку YandexART

Деплой

Коммунальные трансляторы (без деплоя)

  1. Yandex Cloud, ru-central1-a. Stateless режим, запросы не логируются. https://apps.llmplay.space/translator Status: Yandex Offline

  2. Vercel, Stockholm, Sweden. Логирование на уровне INFO (персональные данные скрыты). https://openai2yandex-translator.vercel.app Status: Vercel Offline

Быстрый запуск на vercel:

Deploy with Vercel

  • Укажите в переменных окружения VERCEL=True, function max duration 60 секунд в настройках проекта и сделайте редеплой.
  • Для использования автоматической аутентификации, заполните FOLDER_ID & YANDEX_API_KEY на странице деплоя.

Локальный/облачный запуск

  1. Если вам нужен доступ к ресурсам с автоматической аутентификацией, заполните данные параметры (in .env file, Dockerfile or cloud environment):
    • FOLDER_ID: your Yandex Cloud folder id
    • YANDEX_API_KEY: your Yandex Cloud API key
  2. Запустите приложение:
    • 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: проблема на стороне облака. Мы фиксим данную проблему, но пока рекомендуется отправлять запросы с ретраями.