Skip to content

Latest commit

 

History

History
218 lines (188 loc) · 8.55 KB

README.ru.md

File metadata and controls

218 lines (188 loc) · 8.55 KB

Транслятор YandexGPT API в OpenAI API

FastAPI сервер, который преобразует запросы OpenAI API в запросы YandexGPT и YandexART API. Это позволяет использовать инструменты и приложения, разработанные для API OpenAI, с языковыми моделями и моделями генерации изображений от Яндекса.

Навигация

English | Russian

Возможности

  • Генерация текста: Преобразует запросы чат-комплишенов OpenAI в YandexGPT
    • ✅ Поддержка потоковой передачи
    • ✅ Tools (Вызов функций) - с моделями YandexGPT 4 (на данный момент только yandexgpt/rc)
    • ⬜ Vision (не поддерживается)
  • Текстовые эмбеддинги: Конвертирует запросы эмбеддингов в модели векторизации текста Яндекса
    • ✅ Поддерживает форматы кодирования float и base64
  • Генерация изображений: Преобразует запросы в стиле DALL-E в YandexART
    • ✅ Поддерживает форматы ответа base64 и URL
    • ✅ Настраиваемые соотношения сторон
    • ❌ Несколько изображений за запрос (ограничено 1)

Предварительные требования

  1. Аккаунт в Яндекс Облаке
  2. API ключ и ID каталога из Яндекс Облака
  3. Необходимые роли IAM:
    • ai.languageModels.user (для YandexGPT)
    • ai.imageGeneration.user (для YandexART)

Установка

1. Клонирование репозитория

git clone https://github.com/sazonovanton/YandexGPT_to_OpenAI
cd YandexGPT_to_OpenAI

2. Выбор метода аутентификации

Сервер поддерживает два метода аутентификации:

А. Сгенерированные токены

Генерация токенов, которые пользователи могут использовать для доступа к API:

python utils/tokens.py

Токены будут сохранены в data/tokens.json

Б. Собственный ключ (BYOK)

Позволяет пользователям предоставлять свои собственные учетные данные Яндекс Облака в формате:

<CatalogID>:<SecretKey>

3. Варианты развертывания

Использование Docker (Рекомендуется)

  1. Настройте переменные окружения в docker-compose.yml:
environment:
  - Y2O_SecretKey=your_secret_key
  - Y2O_CatalogID=your_catalog_id
  - Y2O_BringYourOwnKey=false
  - Y2O_ServerURL=http://127.0.0.1:8520
  - Y2O_LogFile=logs/y2o.log
  - Y2O_LogLevel=INFO
  1. Запустите сервер:
docker-compose up -d

Ручная установка

  1. Установите зависимости:
pip install -r requirements.txt
  1. Создайте файл .env с конфигурацией:
Y2O_SecretKey=your_secret_key
Y2O_CatalogID=your_catalog_id
Y2O_BringYourOwnKey=false
Y2O_Host=127.0.0.1
Y2O_Port=8520
Y2O_ServerURL=http://127.0.0.1:8520
Y2O_LogFile=logs/y2o.log
Y2O_LogLevel=INFO
  1. Запустите сервер:
python app.py

4. Настройка SSL (Опционально)

Для включения SSL установите следующие переменные окружения:

Y2O_SSL_Key=ssl/private.key
Y2O_SSL_Cert=ssl/cert.pem

Примеры использования

Вы можете протестировать API со своими ключами (см. BYOK) используя базовый URL https://sazonovanton.online:8520/v1.
Уровень логирования установлен на INFO, ключи не сохраняются.

Чат-комплишены

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("TOKEN"),
    base_url="http://<your_host>:<your_port>/v1",
)
chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Say this is a test",
        }
    ],
    model="yandexgpt/latest",
)

cURL

curl http://<your_host>:<your_port>/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "model": "yandexgpt/latest",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "Hello!"
      }
    ]
  }'

Генерация изображений

Python

response = client.images.generate(
    model="yandex-art/latest",
    prompt="A painting of a cat",
    response_format="b64_json"  
)

cURL

curl http://<your_host>:<your_port>/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "model": "yandex-art/latest",
    "prompt": "A painting of a cat",
    "response_format": "url"
  }'
curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -O http://<your_host>:<your_port>/images/<id>.jpg

Текстовые эмбеддинги

response = client.embeddings.create(
    model="text-search-query/latest",
    input=["Your text here"],
    encoding_format="float" 
)

Переменные окружения

Переменная Описание По умолчанию
Y2O_SecretKey API ключ Яндекс Облака None
Y2O_CatalogID ID каталога Яндекс Облака None
Y2O_BringYourOwnKey Разрешить пользователям предоставлять свои учетные данные False
Y2O_Host Хост сервера 127.0.0.1
Y2O_Port Порт сервера 8520
Y2O_ServerURL Публичный URL сервера для скачивания изображений http://127.0.0.1:8520
Y2O_LogFile Путь к файлу логов logs/y2o.log
Y2O_LogLevel Уровень логирования INFO
Y2O_SSL_Key Путь к приватному ключу SSL None
Y2O_SSL_Cert Путь к сертификату SSL None
Y2O_CORS_Origins Разрешенные CORS источники *
Y2O_TestToken Тестовый токен для utils/test.py (для разработки) None

Синонимы моделей OpenAI

Транслятор поддерживает автоматическое сопоставление имен моделей от OpenAI к моделям Yandex Foundation Models. Однако эти модели могут не иметь прямых эквивалентов, поэтому данный функционал поддерживается "на всякий случай". Лучше использовать имена моделей Яндекса напрямую (например, yandexgpt/latest).
Поддерживаются следующие псевдонимы:

Чат-модели

  • gpt-3.5*yandexgpt-lite/latest
  • *mini*yandexgpt-lite/latest
  • gpt-4*yandexgpt/latest

Модели эмбеддингов

  • text-embedding-3-largetext-search-doc/latest
  • text-embedding-3-smalltext-search-query/latest
  • text-embedding-ada-002text-search-query/latest

Модели изображений

  • dall-e*yandex-art/latest