初始化提交

This commit is contained in:
chenxin committed 2026-08-21 16:00:13 +08:00
commit 887c1f449e
963 files changed
+166869

No files matched your search

Whitespace-only changes.
@@ -0,0 +1,41 @@
from pathlib import Path
import pytest
from app.ai_provider.config.loader import load_models_config, load_providers_config
class TestLoader:
def test_load_models_config(self, tmp_path: Path):
yaml_content = """
version: 1
models:
- name: test-model
provider: deepseek
model: deepseek-v4-flash
format: openai
"""
config_file = tmp_path / "models.yaml"
config_file.write_text(yaml_content)
models = load_models_config(config_file)
assert len(models) == 1
assert models[0].name == "test-model"
def test_load_providers_config(self, tmp_path: Path):
yaml_content = """
version: 1
providers:
deepseek:
format: openai
base_url_env: DEEPSEEK_BASE_URL
api_key_env: DEEPSEEK_API_KEY
"""
config_file = tmp_path / "providers.yaml"
config_file.write_text(yaml_content)
providers = load_providers_config(config_file)
assert "deepseek" in providers
assert providers["deepseek"].format == "openai"
def test_missing_file(self):
with pytest.raises(FileNotFoundError):
load_models_config(Path("/nonexistent/models.yaml"))
@@ -0,0 +1,69 @@
import pytest
from app.ai_provider.config.models import (
ModelConfig,
ProviderConfig,
derive_capabilities,
)
class TestModelConfig:
def test_minimal_config(self):
cfg = ModelConfig(
name="deepseek-v4-flash",
provider="deepseek",
model="deepseek-v4-flash",
format="openai",
)
assert cfg.name == "deepseek-v4-flash"
assert cfg.format == "openai"
assert not cfg.supports_vision # defaulted
def test_capability_override(self):
cfg = ModelConfig(
name="claude-sonnet",
provider="anthropic",
model="claude-sonnet-4-6",
format="anthropic",
supports_vision=True,
supports_tools=True,
)
assert cfg.supports_vision
assert cfg.supports_tools
def test_capability_auto_derive(self):
caps = derive_capabilities(provider="anthropic", model="claude-fable-5")
assert "chat" in caps
assert "tool_use" in caps
assert "vision" in caps
assert "reasoning" in caps
class TestProviderConfig:
def test_minimal(self):
cfg = ProviderConfig(
name="deepseek",
format="openai",
base_url_env="DEEPSEEK_BASE_URL",
api_key_env="DEEPSEEK_API_KEY",
)
assert cfg.name == "deepseek"
def test_with_parameter_mapping(self):
cfg = ProviderConfig(
name="deepseek",
format="openai",
base_url_env="DEEPSEEK_BASE_URL",
api_key_env="DEEPSEEK_API_KEY",
parameter_mappings={
"max_tokens": {"provider_param": "max_tokens"},
"temperature": {"provider_param": "temperature", "min": 0, "max": 2},
},
)
mapping = cfg.parameter_mappings["temperature"]
assert mapping.min == 0
assert mapping.max == 2
def test_format_validation(self):
with pytest.raises(ValueError, match="format"):
ProviderConfig(name="bad", format="unknown", base_url_env="X", api_key_env="Y")