Skip to main content

Evolution LangChain with automatic token management

Project description

Evolution LangChain

License: MIT PyPI version Coverage

Полностью совместимая интеграция Evolution Inference API с LangChain, включающая автоматическое управление токенами доступа. Просто замените стандартные LLM на EvolutionInference и все будет работать!

🎯 Особенности

  • 100% совместимость с LangChain LLM интерфейсом
  • Автоматическое управление токенами Cloud.ru
  • Drop-in replacement - минимальные изменения в коде
  • Async/await поддержка с асинхронными методами
  • Streaming responses поддержка
  • Thread-safe token management
  • Автоматическое обновление токенов за 30 секунд до истечения
  • Retry логика при ошибках авторизации
  • Поддержка .env файлов для управления конфигурацией
  • Интеграционные тесты с реальным API

📦 Установка

Требования

  • Python 3.9+
  • Pydantic 2.7.4+ (автоматически устанавливается)
  • LangChain 0.3.25+ (автоматически устанавливается)
  • Poetry (рекомендуется)

Установка через pip

pip install evolution-langchain

Установка через Poetry (рекомендуется)

# Клонируйте репозиторий
git clone https://github.com/cloud-ru-tech/evolution-langchain.git
cd evolution-langchain

# Установите зависимости
poetry install

# Активируйте виртуальное окружение
poetry shell

Установка из исходного кода

# Клонируйте репозиторий
git clone https://github.com/cloud-ru-tech/evolution-langchain.git
cd evolution-langchain

# Установите в режиме разработки
pip install -e .

# Или установите обычным способом
pip install .

⚡ Быстрый старт

Миграция с стандартных LLM

# ❌ БЫЛО (стандартный LangChain LLM)
from langchain.llms import OpenAI

llm = OpenAI(api_key="sk-...")

# ✅ СТАЛО (Evolution LangChain)
from evolution_langchain import EvolutionInference

llm = EvolutionInference(
    model="your-model-name",
    key_id="your_key_id", 
    secret="your_secret", 
    base_url="https://your-model-endpoint.cloud.ru/v1"
)

# Все остальное работает ТОЧНО ТАК ЖЕ!
response = llm.invoke("Hello!")

Основное использование

from evolution_langchain import EvolutionInference

# Инициализация модели
llm = EvolutionInference(
    model="your-model-name",
    key_id="your-key-id",
    secret="your-secret",
    base_url="https://your-api-endpoint.com/v1",  # Обязательный параметр
    max_tokens=1000,
    temperature=0.7,
)

# Простой запрос
response = llm.invoke("Привет! Расскажи о себе.")
print(response)

# Пакетная обработка
prompts = [
    "Что такое машинное обучение?",
    "Объясни принцип работы нейронных сетей"
]
responses = llm.generate(prompts)

Интеграция с LangChain

from evolution_langchain import EvolutionInference
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# Создание шаблона промпта
template = "Ответь на вопрос: {question}"
prompt = PromptTemplate(template=template, input_variables=["question"])

# Создание цепочки с Evolution Inference
llm = EvolutionInference(
    model="your-model", 
    key_id="your-key-id", 
    secret="your-secret",
    base_url="https://your-api-endpoint.com/v1"
)
chain = LLMChain(llm=llm, prompt=prompt)

# Выполнение
result = chain.run("Что такое квантовые компьютеры?")
print(result)

🔧 Конфигурация

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

Создайте файл .env в корне вашего проекта:

# Скопируйте из env.example и заполните
cp env.example .env
# .env файл
EVOLUTION_KEY_ID=your_key_id_here
EVOLUTION_SECRET=your_secret_here
EVOLUTION_BASE_URL=https://your-model-endpoint.cloud.ru/v1
EVOLUTION_MODEL=your-model-name
ENABLE_INTEGRATION_TESTS=false
LOG_LEVEL=INFO
import os
from evolution_langchain import EvolutionInference
from dotenv import load_dotenv

# Загрузка переменных из .env файла
load_dotenv()

llm = EvolutionInference(
    model=os.getenv("EVOLUTION_MODEL"),
    key_id=os.getenv("EVOLUTION_KEY_ID"),
    secret=os.getenv("EVOLUTION_SECRET"),
    base_url=os.getenv("EVOLUTION_BASE_URL")
)

Параметры конфигурации

Параметр Тип Описание По умолчанию
model str Название модели ""
key_id str ID ключа для аутентификации обязательный
secret str Секрет для аутентификации обязательный
base_url str URL API Evolution Inference обязательный
auth_url str URL сервера аутентификации предустановлен
max_tokens int Максимальное количество токенов 512
temperature float Контроль случайности (0.0-2.0) 1.0
top_p float Nucleus sampling (0.0-1.0) 1.0
frequency_penalty float Штраф за частоту (-2.0-2.0) 0.0
presence_penalty float Штраф за присутствие (-2.0-2.0) 0.0
stop List[str] Стоп-последовательности None
request_timeout int Таймаут запроса в секундах 60

🔍 Управление токенами

Класс автоматически управляет жизненным циклом токенов:

  • ✅ Автоматическое получение токена при первом запросе
  • ✅ Кэширование токена в памяти
  • ✅ Автоматическое обновление за 30 секунд до истечения
  • ✅ Thread-safe операции с токенами
  • ✅ Обработка ошибок аутентификации

📋 Полная совместимость

Поддерживаются ВСЕ методы LangChain LLM интерфейса:

# Основные методы
llm.invoke("Hello world")
llm.generate(["prompt1", "prompt2"])

# Асинхронные методы
await llm.ainvoke("Hello world")
await llm.agenerate(["prompt1", "prompt2"])

# Стриминг
for chunk in llm.stream("Tell me a story"):
    print(chunk, end="")

# Интеграция с цепочками
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run("Your question here")

🧪 Примеры

Запуск всех примеров

# Запуск всех примеров с детальной отчетностью
make run-all-examples

Запуск отдельных примеров

# Базовые примеры использования
make run-examples

# Демонстрация возможностей
make run-demo

# Примеры стриминга
make run-streaming

Доступные примеры

  • demo.py - Демонстрация основных возможностей и интеграции с LangChain
  • example_usage.py - Базовое использование API с простыми и пакетными запросами
  • streaming_examples.py - Примеры использования стриминга для длинных ответов

Настройка окружения для примеров

  1. Создайте файл .env:
cp env.example .env
  1. Заполните переменные окружения:
EVOLUTION_KEY_ID=your_key_id_here
EVOLUTION_SECRET=your_secret_here
EVOLUTION_BASE_URL=https://your-endpoint.cloud.ru/v1
  1. Запустите примеры:
make run-all-examples

Обработка ошибок

from evolution_langchain import EvolutionInference

try:
    llm = EvolutionInference(
        model="your-model",
        key_id="invalid-key",
        secret="invalid-secret",
        base_url="https://your-api-endpoint.com/v1"
    )
    response = llm.invoke("Test")
except ValueError as e:
    print(f"Ошибка конфигурации: {e}")
except RuntimeError as e:
    print(f"Ошибка API: {e}")

🆘 Support

🔗 Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evolution_langchain-1.0.0.tar.gz (28.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evolution_langchain-1.0.0-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file evolution_langchain-1.0.0.tar.gz.

File metadata

  • Download URL: evolution_langchain-1.0.0.tar.gz
  • Upload date:
  • Size: 28.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.9

File hashes

Hashes for evolution_langchain-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e553fdff3dc8a1fe026199847a4e3eb4bed8f9b420266c9a19e66bcd1ad1495d
MD5 46d2ad4c2131ec08bd4b80c3c4615200
BLAKE2b-256 082c0c56649b675b1381641af7d4241507742ba6f0ac5eb7c01be0992862f7fe

See more details on using hashes here.

File details

Details for the file evolution_langchain-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for evolution_langchain-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f4631634e9d3e7d7a703861374e7bb3cb54635bfe80300d7f16f0b35f044eebd
MD5 f15834b25274b9869513106b2b9deba9
BLAKE2b-256 a1faba70068358a12f0d20d7a56c37289e0e5f77669c0fa88d01ff63950d3ce1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page