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-0.0.1.tar.gz (28.1 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-0.0.1-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for evolution_langchain-0.0.1.tar.gz
Algorithm Hash digest
SHA256 4691d036efe37f0bc99a4099b7117370f323227cb82d771ea2cc2e9adfe3f7d2
MD5 b4ec6baf79a9620b4a28e419c582067c
BLAKE2b-256 bfc624308a12b013f79499aa7fa767e3e44bd3647e3e663cc386097d0284fbfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for evolution_langchain-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 59343323abdae9e4c82145bd513ff1b187a47fee62c070d399cae941645f297b
MD5 0c633e86a37225b37f13fcb9e0536706
BLAKE2b-256 4061883bb48bbc033acaf029f51cc140c38aef5d5e04cd75407abcd13691854e

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