89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
import unittest
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
|
|
from ai_daily_report.env import resolve_blog_token, resolve_llm_config
|
|
|
|
|
|
class EnvConfigTests(unittest.TestCase):
|
|
def test_resolve_llm_config_prefers_generic_values(self):
|
|
config = resolve_llm_config(
|
|
{
|
|
"LLM_API_KEY": "generic-key",
|
|
"LLM_BASE_URL": "https://generic.example/v1",
|
|
"LLM_MODEL": "generic-model",
|
|
"SUB2API_API_KEY": "sub-key",
|
|
"SUB2API_BASE_URL": "https://sub.example/v1",
|
|
"SUB2API_MODEL": "sub-model",
|
|
}
|
|
)
|
|
|
|
self.assertEqual(
|
|
config,
|
|
{
|
|
"api_key": "generic-key",
|
|
"base_url": "https://generic.example/v1",
|
|
"model": "generic-model",
|
|
},
|
|
)
|
|
|
|
def test_resolve_llm_config_reports_missing_fields(self):
|
|
with TemporaryDirectory() as temp_dir:
|
|
with self.assertRaisesRegex(ValueError, "missing_llm_config: LLM_BASE_URL,LLM_MODEL"):
|
|
resolve_llm_config({"LLM_API_KEY": "key"}, hermes_dir=Path(temp_dir))
|
|
|
|
def test_resolve_llm_config_follows_hermes_provider_config(self):
|
|
with TemporaryDirectory() as temp_dir:
|
|
hermes_dir = Path(temp_dir)
|
|
(hermes_dir / "config.yaml").write_text(
|
|
"""
|
|
model:
|
|
provider: sub2api
|
|
default: findmini/gpt-5.5
|
|
base_url: http://sub2api.example/v1
|
|
""".strip(),
|
|
encoding="utf-8",
|
|
)
|
|
(hermes_dir / ".env").write_text("SUB2API_API_KEY=hermes-key\n", encoding="utf-8")
|
|
|
|
config = resolve_llm_config({}, hermes_dir=hermes_dir)
|
|
|
|
self.assertEqual(
|
|
config,
|
|
{
|
|
"api_key": "hermes-key",
|
|
"base_url": "http://sub2api.example/v1",
|
|
"model": "findmini/gpt-5.5",
|
|
},
|
|
)
|
|
|
|
def test_resolve_llm_config_uses_hermes_auth_json_env_source(self):
|
|
with TemporaryDirectory() as temp_dir:
|
|
hermes_dir = Path(temp_dir)
|
|
(hermes_dir / "config.yaml").write_text(
|
|
"""
|
|
model:
|
|
provider: sub2api
|
|
default: findmini/gpt-5.5
|
|
base_url: http://sub2api.example/v1
|
|
""".strip(),
|
|
encoding="utf-8",
|
|
)
|
|
(hermes_dir / "auth.json").write_text(
|
|
'{"credential_pool": {"sub2api": [{"source": "env:SUB2API_API_KEY"}]}}',
|
|
encoding="utf-8",
|
|
)
|
|
|
|
config = resolve_llm_config({"SUB2API_API_KEY": "auth-env-key"}, hermes_dir=hermes_dir)
|
|
|
|
self.assertEqual(config["api_key"], "auth-env-key")
|
|
self.assertEqual(config["base_url"], "http://sub2api.example/v1")
|
|
self.assertEqual(config["model"], "findmini/gpt-5.5")
|
|
|
|
def test_resolve_blog_token_uses_supported_names(self):
|
|
self.assertEqual(resolve_blog_token({"EPHRON_SERVICE_TOKEN": "token"}), "token")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|