from typing import Any, Literal PresetName = Literal["creative_draft", "editor", "brainstorm"] # Пресеты для Ollama (параметры, которые понимает Ollama API) OLLAMA_PRESETS: dict[str, dict[str, Any]] = { "creative_draft": { "temperature": 0.85, "top_p": 0.92, "top_k": 50, "repeat_penalty": 1.15, }, "editor": { "temperature": 0.3, "top_p": 0.85, "top_k": 40, "repeat_penalty": 1.0, }, "brainstorm": { "temperature": 1.0, "top_p": 0.95, "top_k": 80, "repeat_penalty": 1.2, }, } # Пресеты для OpenRouter (параметры OpenAI-совместимого API) OPENROUTER_PRESETS: dict[str, dict[str, Any]] = { "creative_draft": { "temperature": 0.85, "top_p": 0.92, "frequency_penalty": 0.3, "presence_penalty": 0.4, }, "editor": { "temperature": 0.3, "top_p": 0.85, "frequency_penalty": 0.0, "presence_penalty": 0.0, }, "brainstorm": { "temperature": 1.0, "top_p": 0.95, "frequency_penalty": 0.5, "presence_penalty": 0.6, }, } def get_preset(preset_name: str, provider: str) -> dict[str, Any]: """Получить параметры пресета для указанного провайдера. Args: preset_name: Название пресета (creative_draft, editor, brainstorm) provider: Провайдер ("ollama" или "openrouter") Returns: Параметры пресета как словарь Raises: ValueError: Если провайдер неизвестен или пресет не найден """ if provider == "ollama": return OLLAMA_PRESETS.get(preset_name, OLLAMA_PRESETS["creative_draft"]) elif provider == "openrouter": return OPENROUTER_PRESETS.get(preset_name, OPENROUTER_PRESETS["creative_draft"]) else: raise ValueError(f"Unknown provider: {provider}") def list_presets(provider: str | None = None) -> dict[str, dict[str, dict[str, Any]]]: """Вернуть все доступные пресеты. Args: provider: Опционально фильтровать по провайдеру Returns: Словарь всех доступных пресетов """ if provider == "ollama": return OLLAMA_PRESETS elif provider == "openrouter": return OPENROUTER_PRESETS else: return {"ollama": OLLAMA_PRESETS, "openrouter": OPENROUTER_PRESETS}