OpenRouter is used when no provider flag is set. Claude is selected with .cl, and GLM stays available via .glm.
103 lines
4.4 KiB
Python
103 lines
4.4 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
from app.config import _parse_ai_config, _parse_elevenlabs_config
|
|
|
|
|
|
class ConfigElevenLabsTests(unittest.TestCase):
|
|
def test_elevenlabs_config_parses_values(self) -> None:
|
|
with patch.dict("os.environ", {}, clear=True):
|
|
config = _parse_elevenlabs_config(
|
|
{
|
|
"api_key": "config-key",
|
|
"model_id": "scribe_v2",
|
|
"language_code": "ru",
|
|
"request_timeout_seconds": 120,
|
|
}
|
|
)
|
|
|
|
self.assertEqual(config.api_key, "config-key")
|
|
self.assertEqual(config.model_id, "scribe_v2")
|
|
self.assertEqual(config.language_code, "ru")
|
|
self.assertEqual(config.request_timeout_seconds, 120)
|
|
|
|
def test_elevenlabs_env_overrides(self) -> None:
|
|
env = {
|
|
"ELEVENLABS_API_KEY": "env-key",
|
|
"ELEVENLABS_MODEL_ID": "scribe_v2",
|
|
"ELEVENLABS_LANGUAGE_CODE": "en",
|
|
"ELEVENLABS_REQUEST_TIMEOUT_SECONDS": "45",
|
|
}
|
|
with patch.dict("os.environ", env, clear=True):
|
|
config = _parse_elevenlabs_config({"api_key": "config-key"})
|
|
|
|
self.assertEqual(config.api_key, "env-key")
|
|
self.assertEqual(config.language_code, "en")
|
|
self.assertEqual(config.request_timeout_seconds, 45)
|
|
|
|
|
|
class ConfigAiTests(unittest.TestCase):
|
|
def test_ai_config_parses_both_providers(self) -> None:
|
|
with patch.dict("os.environ", {}, clear=True):
|
|
config = _parse_ai_config(
|
|
{
|
|
"glm": {"api_key": "glm-key", "model": "glm-model"},
|
|
"deepseek": {"api_key": "ds-key", "model": "ds-model"},
|
|
"claude": {"api_key": "claude-key", "model": "claude-haiku-5-5"},
|
|
"openrouter": {"api_key": "or-key", "model": "anthropic/claude-haiku-5.5"},
|
|
"web_page_timeout_seconds": 20,
|
|
"web_page_max_chars": 12345,
|
|
}
|
|
)
|
|
|
|
self.assertEqual(config.glm.api_key, "glm-key")
|
|
self.assertEqual(config.glm.model, "glm-model")
|
|
self.assertEqual(config.deepseek.api_key, "ds-key")
|
|
self.assertEqual(config.deepseek.model, "ds-model")
|
|
self.assertEqual(config.claude.api_url, "https://api.anthropic.com")
|
|
self.assertEqual(config.claude.api_key, "claude-key")
|
|
self.assertEqual(config.claude.model, "claude-haiku-5-5")
|
|
self.assertEqual(config.openrouter.api_url, "https://openrouter.ai/api/v1")
|
|
self.assertEqual(config.openrouter.api_key, "or-key")
|
|
self.assertEqual(config.openrouter.model, "anthropic/claude-haiku-5.5")
|
|
self.assertEqual(config.web_page_timeout_seconds, 20)
|
|
self.assertEqual(config.web_page_max_chars, 12345)
|
|
|
|
def test_ai_provider_env_overrides(self) -> None:
|
|
env = {
|
|
"GLM_API_KEY": "env-glm",
|
|
"GLM_MODEL": "env-glm-model",
|
|
"DEEPSEEK_API_KEY": "env-ds",
|
|
"DEEPSEEK_MODEL": "env-ds-model",
|
|
"CLAUDE_API_KEY": "env-claude",
|
|
"CLAUDE_MODEL": "claude-haiku-5-5",
|
|
"OPENROUTER_API_KEY": "env-or",
|
|
"OPENROUTER_MODEL": "anthropic/claude-haiku-5.5",
|
|
"AI_WEB_PAGE_TIMEOUT_SECONDS": "30",
|
|
"AI_WEB_PAGE_MAX_CHARS": "54321",
|
|
"AI_PROMPT_DIR": "alternate-prompts",
|
|
}
|
|
with patch.dict("os.environ", env, clear=True):
|
|
config = _parse_ai_config({})
|
|
|
|
self.assertEqual(config.glm.api_key, "env-glm")
|
|
self.assertEqual(config.glm.model, "env-glm-model")
|
|
self.assertEqual(config.deepseek.api_key, "env-ds")
|
|
self.assertEqual(config.deepseek.model, "env-ds-model")
|
|
self.assertEqual(config.claude.api_key, "env-claude")
|
|
self.assertEqual(config.claude.model, "claude-haiku-5-5")
|
|
self.assertEqual(config.claude.api_url, "https://api.anthropic.com")
|
|
self.assertEqual(config.openrouter.api_key, "env-or")
|
|
self.assertEqual(config.openrouter.model, "anthropic/claude-haiku-5.5")
|
|
self.assertEqual(config.openrouter.api_url, "https://openrouter.ai/api/v1")
|
|
self.assertEqual(config.web_page_timeout_seconds, 30)
|
|
self.assertEqual(config.web_page_max_chars, 54321)
|
|
self.assertEqual(config.prompt_dir, Path("alternate-prompts"))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|