Trans_for_doctors / corrector /OPENROUTER.md
Mintik24's picture
🎉 Полный рефакторинг проекта Medical Transcriber
e275025

OpenRouter Integration

Модуль для работы с OpenRouter.ai API, предоставляющий доступ к различным LLM моделям (Google Gemini, OpenAI, Anthropic и др.).

Возможности

  • ✅ Универсальный клиент для OpenRouter API
  • ✅ Поддержка различных моделей (Gemini, GPT, Claude и др.)
  • ✅ Автоматические повторные попытки при ошибках
  • ✅ Поддержка режима reasoning для совместимых моделей
  • ✅ Интеграция с существующей системой коррекции
  • ✅ Примеры использования через Python и curl

Установка

Добавьте необходимую зависимость:

pip install requests

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

Добавьте в файл .env:

# OpenRouter Configuration
OPENROUTER_API_KEY=your-openrouter-api-key-here
OPENROUTER_MODEL=google/gemini-3-flash-preview
OPENROUTER_TEMPERATURE=0.1
OPENROUTER_MAX_TOKENS=4000

Получение API ключа

  1. Зарегистрируйтесь на OpenRouter.ai
  2. Перейдите в раздел Keys
  3. Создайте новый API ключ
  4. Скопируйте ключ в .env файл

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

Python API

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

from corrector.openrouter_client import OpenRouterClient

# Инициализация клиента
client = OpenRouterClient()

# Простой запрос
messages = [
    {"role": "user", "content": "How many r's are in strawberry?"}
]

response = client.chat_completion(messages=messages)
print(response)

Коррекция медицинского текста

from corrector.openrouter_client import OpenRouterClient

client = OpenRouterClient()

transcription = "Пациент жалуется на боль в животе"
system_prompt = "Ты медицинский помощник. Исправь ошибки в транскрипции."

corrected_text = client.correct_text(
    text=transcription,
    system_prompt=system_prompt,
    temperature=0.1
)

print(f"Исправленный текст: {corrected_text}")

Использование через MedicalLLMCorrector

from corrector import MedicalLLMCorrector
from knowledge_base import MedicalTermManager

# Загрузка медицинских терминов
term_manager = MedicalTermManager("medical_terms.txt")

# Инициализация корректора
corrector = MedicalLLMCorrector(term_manager=term_manager)

# Коррекция транскрипции
transcription = "Пациент жалуется на боль в животе"
corrected_text, corrections = corrector.correct_transcription(transcription)

print(f"Исправленный текст: {corrected_text}")
print(f"Количество исправлений: {len(corrections)}")

Curl (командная строка)

Базовый запрос

# Установите переменную окружения
export OPENROUTER_API_KEY="your-key-here"

# Выполните запрос
curl https://openrouter.ai/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -d '{
  "model": "google/gemini-3-flash-preview",
  "messages": [
    {
      "role": "user",
      "content": "How many r'\''s are in the word strawberry?"
    }
  ],
  "reasoning": {
    "enabled": true
  }
}'

Коррекция медицинского текста

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -d '{
  "model": "google/gemini-3-flash-preview",
  "messages": [
    {
      "role": "system",
      "content": "Ты медицинский помощник. Исправь ошибки в транскрипции."
    },
    {
      "role": "user",
      "content": "Пациент жалуется на боль в животе"
    }
  ],
  "temperature": 0.1,
  "reasoning": {
    "enabled": true
  }
}'

Использование тестового скрипта

# Сделайте скрипт исполняемым
chmod +x test_openrouter_curl.sh

# Запустите с дефолтным текстом
./test_openrouter_curl.sh

# Или передайте свой текст
./test_openrouter_curl.sh "Пациент жалуется на сильную головную боль"

Тестирование

Python тесты

# Запустите тестовый скрипт
python test_openrouter.py

Этот скрипт выполнит:

  • ✅ Базовый тест chat completion
  • ✅ Тест коррекции медицинского текста
  • ✅ Тест с медицинскими терминами
  • ✅ Вывод информации о модели

Curl тесты

# Базовый тест
./test_openrouter_curl.sh

# Тест с кастомным текстом
./test_openrouter_curl.sh "Пациент с диагнозом апендицит"

Поддерживаемые модели

OpenRouter поддерживает множество моделей:

Google

  • google/gemini-3-flash-preview (рекомендуется)
  • google/gemini-pro
  • google/gemini-pro-1.5

OpenAI

  • openai/gpt-4o
  • openai/gpt-4-turbo
  • openai/gpt-3.5-turbo

Anthropic

  • anthropic/claude-3.5-sonnet
  • anthropic/claude-3-opus
  • anthropic/claude-3-sonnet

Другие

  • meta-llama/llama-3.1-405b-instruct
  • mistralai/mixtral-8x22b-instruct

Полный список: OpenRouter Models

API клиент

Основные методы

__init__(api_key, model, base_url, timeout, max_retries, retry_delay)

Инициализация клиента.

Параметры:

  • api_key: API ключ (по умолчанию из OPENROUTER_API_KEY)
  • model: Модель (по умолчанию из OPENROUTER_MODEL)
  • base_url: URL API (по умолчанию https://openrouter.ai/api/v1)
  • timeout: Таймаут запроса в секундах (по умолчанию 120)
  • max_retries: Максимальное количество попыток (по умолчанию 3)
  • retry_delay: Задержка между попытками (по умолчанию 2 сек)

chat_completion(messages, model, temperature, max_tokens, reasoning_enabled, stream, **kwargs)

Выполнение chat completion запроса.

Параметры:

  • messages: Список сообщений с 'role' и 'content'
  • model: Переопределить модель по умолчанию
  • temperature: Температура сэмплирования (0-2)
  • max_tokens: Максимальное количество токенов
  • reasoning_enabled: Включить режим reasoning (для Gemini)
  • stream: Включить потоковую передачу
  • **kwargs: Дополнительные параметры API

Возвращает: Словарь с ответом API

correct_text(text, system_prompt, model, temperature)

Исправление текста с использованием LLM.

Параметры:

  • text: Текст для исправления
  • system_prompt: Системный промпт
  • model: Переопределить модель
  • temperature: Температура

Возвращает: Исправленный текст

get_model_info()

Получение информации о текущей конфигурации.

Возвращает: Словарь с информацией о модели

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

Клиент автоматически обрабатывает:

  • ⏱️ Таймауты
  • 🔄 Rate limiting (429 ошибки)
  • 🔁 Автоматические повторные попытки
  • 📝 Детальное логирование

Пример:

try:
    response = client.chat_completion(messages)
except Exception as e:
    print(f"Ошибка API: {e}")

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

Для использования OpenRouter в полном pipeline:

from pipeline import MedicalTranscriptionPipeline
from pipeline.pipeline_config import PipelineConfig

```python
from pipeline import MedicalTranscriptionPipeline
from pipeline.pipeline_config import PipelineConfig

# Создайте pipeline
config = PipelineConfig()
pipeline = MedicalTranscriptionPipeline(config)

# Обработайте аудио
result = pipeline.process_audio("audio.wav")

Преимущества OpenRouter

  • 🌐 Множество моделей - доступ к GPT, Claude, Gemini и др. через единый API
  • 💰 Гибкое ценообразование - платите только за использованные токены
  • 🚀 Reasoning mode - расширенные возможности для Gemini
  • 🔄 Автоматический retry - встроенная обработка ошибок
  • 📊 Статистика использования - отслеживание расходов на OpenRouter.ai

Логирование

Клиент использует стандартное логирование Python:

import logging

# Настройте логирование
logging.basicConfig(level=logging.DEBUG)

# Клиент будет логировать:
# - Инициализацию
# - API запросы
# - Ошибки и повторные попытки
# - Успешные ответы

Troubleshooting

Ошибка: "OpenRouter API key not found"

Решение: Установите OPENROUTER_API_KEY в .env файле или передайте в конструктор.

Ошибка: Rate limit (429)

Решение: Клиент автоматически повторяет запрос с задержкой. Проверьте свой план на OpenRouter.

Ошибка: Model not found

Решение: Проверьте название модели на OpenRouter Models.

Медленные ответы

Решение:

  • Уменьшите max_tokens
  • Используйте более быструю модель (например, gemini-3-flash-preview)
  • Увеличьте timeout если нужно

Дополнительные ресурсы

Примеры кода

Пример 1: Простая коррекция

from corrector.openrouter_client import OpenRouterClient

client = OpenRouterClient(model="google/gemini-3-flash-preview")

text = "Пациент жалуется на боль в животе, тошнота и рвота"
system = "Исправь грамматические ошибки в медицинском тексте"

corrected = client.correct_text(text, system)
print(corrected)

Пример 2: Batch обработка

from corrector.openrouter_client import OpenRouterClient

client = OpenRouterClient()

transcriptions = [
    "Пациент 1: боль в животе",
    "Пациент 2: высокая температура",
    "Пациент 3: кашель и насморк"
]

for i, text in enumerate(transcriptions, 1):
    corrected = client.correct_text(
        text=text,
        system_prompt="Исправь медицинский текст"
    )
    print(f"{i}. {corrected}")

Пример 3: Кастомные параметры

from corrector.openrouter_client import OpenRouterClient

client = OpenRouterClient(
    model="google/gemini-3-flash-preview",
    timeout=180,
    max_retries=5,
    retry_delay=3
)

messages = [
    {"role": "system", "content": "Ты врач-терапевт"},
    {"role": "user", "content": "Какие симптомы у гриппа?"}
]

response = client.chat_completion(
    messages=messages,
    temperature=0.3,
    max_tokens=1000
)

print(client._extract_content(response))

Лицензия

Этот модуль является частью проекта Trans_for_doctors.