86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
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}
|