Files
hkuds--vimax/tests/test_agent_config.py
2026-07-13 12:23:54 +08:00

106 lines
5.5 KiB
Python

import os
import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch
import yaml
from agent_runtime.config import (
api_provider_from_base_url,
embedding_api_key,
embedding_base_url,
embedding_model,
embedding_model_provider,
image_api_key,
image_base_url,
image_model,
llm_api_key,
llm_base_url,
llm_model,
llm_model_provider,
load_agent_config,
reranker_api_key,
reranker_base_url,
reranker_model,
video_api_key,
video_base_url,
video_model,
video_provider,
)
class AgentConfigTests(unittest.TestCase):
def setUp(self):
load_agent_config.cache_clear()
def tearDown(self):
load_agent_config.cache_clear()
def test_reads_agent_local_config(self):
with tempfile.TemporaryDirectory() as tmp:
config_dir = Path(tmp) / "configs"
config_dir.mkdir()
(config_dir / "agent.local.yaml").write_text(yaml.safe_dump({
"llm": {"model_provider": "openai", "model": "config-llm", "base_url": "https://config.test/v1", "api_key": "config-key"},
"image": {"model": "config-image", "base_url": "https://image.test", "api_key": "image-key"},
"video": {"model": "config-video", "base_url": "https://openrouter.ai/api/v1", "api_key": "video-key"},
"embedding": {"model_provider": "openai", "model": "config-embedding", "base_url": "https://embedding.test/v1", "api_key": "embedding-key"},
"reranker": {"model": "config-reranker", "base_url": "https://reranker.test", "api_key": "reranker-key"},
}), encoding="utf-8")
with patch.dict(os.environ, {}, clear=True):
self.assertEqual(llm_model(tmp), "config-llm")
self.assertEqual(llm_model_provider(tmp), "openai")
self.assertEqual(llm_base_url(tmp), "https://config.test/v1")
self.assertEqual(llm_api_key(tmp), "config-key")
self.assertEqual(image_model(tmp), "config-image")
self.assertEqual(image_base_url(tmp), "https://image.test")
self.assertEqual(image_api_key(tmp), "image-key")
self.assertEqual(video_model(tmp), "config-video")
self.assertEqual(video_provider(tmp), "openrouter")
self.assertEqual(video_base_url(tmp), "https://openrouter.ai/api/v1")
self.assertEqual(video_api_key(tmp), "video-key")
self.assertEqual(embedding_model_provider(tmp), "openai")
self.assertEqual(embedding_model(tmp), "config-embedding")
self.assertEqual(embedding_base_url(tmp), "https://embedding.test/v1")
self.assertEqual(embedding_api_key(tmp), "embedding-key")
self.assertEqual(reranker_model(tmp), "config-reranker")
self.assertEqual(reranker_base_url(tmp), "https://reranker.test")
self.assertEqual(reranker_api_key(tmp), "reranker-key")
def test_environment_overrides_agent_local_config(self):
with tempfile.TemporaryDirectory() as tmp:
config_dir = Path(tmp) / "configs"
config_dir.mkdir()
(config_dir / "agent.local.yaml").write_text(yaml.safe_dump({"llm": {"model": "config-llm", "api_key": "config-key"}}), encoding="utf-8")
with patch.dict(os.environ, {"VIMAX_LLM_MODEL": "env-llm", "VIMAX_LLM_MODEL_PROVIDER": "openai", "VIMAX_LLM_API_KEY": "env-key", "VIMAX_VIDEO_BASE_URL": "https://openrouter.ai/api/v1", "VIMAX_EMBEDDING_MODEL": "env-embedding", "VIMAX_EMBEDDING_BASE_URL": "https://env-embedding.test/v1", "VIMAX_EMBEDDING_API_KEY": "env-embedding-key", "VIMAX_RERANKER_MODEL": "env-reranker", "VIMAX_RERANKER_BASE_URL": "https://env-reranker.test", "VIMAX_RERANKER_API_KEY": "env-reranker-key"}, clear=True):
self.assertEqual(llm_model(tmp), "env-llm")
self.assertEqual(llm_model_provider(tmp), "openai")
self.assertEqual(llm_api_key(tmp), "env-key")
self.assertEqual(video_provider(tmp), "openrouter")
self.assertEqual(video_base_url(tmp), "https://openrouter.ai/api/v1")
self.assertEqual(embedding_model(tmp), "env-embedding")
self.assertEqual(embedding_base_url(tmp), "https://env-embedding.test/v1")
self.assertEqual(embedding_api_key(tmp), "env-embedding-key")
self.assertEqual(reranker_model(tmp), "env-reranker")
self.assertEqual(reranker_base_url(tmp), "https://env-reranker.test")
self.assertEqual(reranker_api_key(tmp), "env-reranker-key")
def test_image_and_video_keys_fall_back_to_llm_key(self):
with tempfile.TemporaryDirectory() as tmp:
config_dir = Path(tmp) / "configs"
config_dir.mkdir()
(config_dir / "agent.local.yaml").write_text(yaml.safe_dump({"llm": {"api_key": "shared-key"}}), encoding="utf-8")
with patch.dict(os.environ, {}, clear=True):
self.assertEqual(image_api_key(tmp), "shared-key")
self.assertEqual(video_api_key(tmp), "shared-key")
def test_video_provider_is_inferred_from_base_url(self):
self.assertEqual(api_provider_from_base_url("https://openrouter.ai/api/v1"), "openrouter")
self.assertEqual(api_provider_from_base_url("https://yunwu.ai/v1"), "yunwu")
self.assertEqual(api_provider_from_base_url("https://example.com/v1"), "")
if __name__ == "__main__":
unittest.main()