Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ Web インターフェースは、リアルタイムストリーミング、コ
┌─────────────────┐
│ モデル選択器 │──► deepseek-chat / deepseek-reasoner / gpt-4o / claude / gemini / llama
│ モデル選択器 │──► deepseek-v4-flash / deepseek-v4-pro / gpt-4o / claude / gemini / llama
└────────┬────────┘
Expand Down Expand Up @@ -257,7 +257,7 @@ export KYROZEN_MODEL_COMPLEX=deepseek-v4-pro

| プロバイダー | 簡単なタスク(デフォルト) | 複雑なタスク(デフォルト) |
|-------------|------------------------|--------------------------|
| DeepSeek | `deepseek-chat` | `deepseek-reasoner` |
| DeepSeek | `deepseek-v4-flash` | `deepseek-v4-pro` |
| OpenAI | `gpt-4o` | `gpt-4o` |
| Anthropic | `claude-sonnet-4-20250514` | `claude-sonnet-4-20250514` |
| Google | `gemini-2.5-flash` | `gemini-2.5-pro` |
Expand Down Expand Up @@ -614,8 +614,8 @@ def register():
{
"provider": "deepseek",
"api_key": "<暗号化>",
"model_simple": "deepseek-chat",
"model_complex": "deepseek-reasoner",
"model_simple": "deepseek-v4-flash",
"model_complex": "deepseek-v4-pro",
"encrypted": true
}
```
Expand Down
8 changes: 4 additions & 4 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ docker run -p 8000:8000 \
┌─────────────────┐
│ 모델 선택기 │──► deepseek-chat / deepseek-reasoner / gpt-4o / claude / gemini / llama
│ 모델 선택기 │──► deepseek-v4-flash / deepseek-v4-pro / gpt-4o / claude / gemini / llama
└────────┬────────┘
Expand Down Expand Up @@ -257,7 +257,7 @@ export KYROZEN_MODEL_COMPLEX=deepseek-v4-pro

| 제공자 | 간단한 작업 (기본값) | 복잡한 작업 (기본값) |
|--------|-------------------|---------------------|
| DeepSeek | `deepseek-chat` | `deepseek-reasoner` |
| DeepSeek | `deepseek-v4-flash` | `deepseek-v4-pro` |
| OpenAI | `gpt-4o` | `gpt-4o` |
| Anthropic | `claude-sonnet-4-20250514` | `claude-sonnet-4-20250514` |
| Google | `gemini-2.5-flash` | `gemini-2.5-pro` |
Expand Down Expand Up @@ -612,8 +612,8 @@ def register():
{
"provider": "deepseek",
"api_key": "<암호화됨>",
"model_simple": "deepseek-chat",
"model_complex": "deepseek-reasoner",
"model_simple": "deepseek-v4-flash",
"model_complex": "deepseek-v4-pro",
"encrypted": true
}
```
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ User Input
┌─────────────────┐
│ Model Selector │──► deepseek-chat / deepseek-reasoner / gpt-4o / claude / gemini / llama
│ Model Selector │──► deepseek-v4-flash / deepseek-v4-pro / gpt-4o / claude / gemini / llama
└────────┬────────┘
Expand Down Expand Up @@ -860,8 +860,8 @@ example.
{
"provider": "deepseek",
"api_key": "<encrypted>",
"model_simple": "deepseek-chat",
"model_complex": "deepseek-reasoner",
"model_simple": "deepseek-v4-flash",
"model_complex": "deepseek-v4-pro",
"encrypted": true,
"encryption": "fernet"
}
Expand Down
8 changes: 4 additions & 4 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ Web 界面提供暗色主题的聊天 UI,支持实时流式输出、费用追
┌─────────────────┐
│ 模型选择器 │──► deepseek-chat / deepseek-reasoner / gpt-4o / claude / gemini / llama
│ 模型选择器 │──► deepseek-v4-flash / deepseek-v4-pro / gpt-4o / claude / gemini / llama
└────────┬────────┘
Expand Down Expand Up @@ -253,7 +253,7 @@ export KYROZEN_MODEL_COMPLEX=deepseek-v4-pro

| 服务商 | 简单任务(默认) | 复杂任务(默认) |
|--------|-----------------|-----------------|
| DeepSeek | `deepseek-chat` | `deepseek-reasoner` |
| DeepSeek | `deepseek-v4-flash` | `deepseek-v4-pro` |
| OpenAI | `gpt-4o` | `gpt-4o` |
| Anthropic | `claude-sonnet-4-20250514` | `claude-sonnet-4-20250514` |
| Google | `gemini-2.5-flash` | `gemini-2.5-pro` |
Expand Down Expand Up @@ -624,8 +624,8 @@ def register():
{
"provider": "deepseek",
"api_key": "<加密>",
"model_simple": "deepseek-chat",
"model_complex": "deepseek-reasoner",
"model_simple": "deepseek-v4-flash",
"model_complex": "deepseek-v4-pro",
"encrypted": true,
"encryption": "fernet"
}
Expand Down
2 changes: 1 addition & 1 deletion docs/self-evolution.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Historical verification snapshot: `51be33361422e55e1f2f00c33a0e0f8c56132a91`
(the post-#54 `main` revision, captured before this #55 documentation-only
update). Snapshot date: 2026-09-04.

Current repository test count at this snapshot: **187 unittest cases**.
Current repository test count at this snapshot: **188 unittest cases**.

## Verified surface

Expand Down
18 changes: 18 additions & 0 deletions scripts/check_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
"paired_evidence_status: insufficient",
"public_superiority_claim_supported: false",
)
STALE_DEEPSEEK_MODELS = re.compile(r"\bdeepseek-(?:chat|reasoner)\b", re.IGNORECASE)


def _command_blocks(text: str) -> list[str]:
Expand Down Expand Up @@ -220,6 +221,21 @@ def _check_readme_endpoint_table(path: Path, text: str, routes: set[tuple[str, s
return errors


def _check_provider_defaults(path: Path, text: str, defaults: dict[str, tuple[str, str]]) -> list[str]:
"""Keep README model examples tied to the provider's current defaults."""
simple, complex_model = defaults["deepseek"]
errors: list[str] = []
if STALE_DEEPSEEK_MODELS.search(text):
errors.append(f"{path.name}: README contains a retired DeepSeek model name")
simple_match = re.search(r'"model_simple"\s*:\s*"([^"]+)"', text)
complex_match = re.search(r'"model_complex"\s*:\s*"([^"]+)"', text)
if not simple_match or simple_match.group(1) != simple:
errors.append(f"{path.name}: model_simple example must match provider default '{simple}'")
if not complex_match or complex_match.group(1) != complex_model:
errors.append(f"{path.name}: model_complex example must match provider default '{complex_model}'")
return errors


def _check_verification_record() -> list[str]:
if not VERIFICATION_DOC.exists():
return ["docs/self-evolution.md is missing"]
Expand Down Expand Up @@ -254,6 +270,7 @@ def _check_verification_record() -> list[str]:
def main() -> int:
expected_inventory = render_inventory()
import main as agent_main
from providers import PROVIDER_DEFAULT_MODELS

runtime_tool_count = len(agent_main.AVAILABLE_TOOLS)
git_tool_count = sum(name.startswith("git_") for name in agent_main.AVAILABLE_TOOLS)
Expand All @@ -268,6 +285,7 @@ def main() -> int:
errors.extend(_check_verification_record())
for readme in README_FILES:
text = readme.read_text(encoding="utf-8")
errors.extend(_check_provider_defaults(readme, text, PROVIDER_DEFAULT_MODELS))
if readme.name == "README.md":
errors.extend(_check_readme_endpoint_table(readme, text, set(routes)))
for pattern in STALE_TOOL_PATTERNS:
Expand Down
10 changes: 10 additions & 0 deletions tests/test_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from providers import (
FallbackProvider,
LLMProvider,
PROVIDER_DEFAULT_MODELS,
ProviderConfig,
_get_encryption_key,
decrypt_api_key,
Expand Down Expand Up @@ -72,6 +73,15 @@ def test_legacy_xor_ciphertext_remains_readable(self):
ciphertext = base64.b64encode(encrypted).decode()
self.assertEqual(decrypt_api_key(ciphertext), plaintext)

def test_readmes_use_current_deepseek_defaults(self):
simple, complex_model = PROVIDER_DEFAULT_MODELS["deepseek"]
root = Path(__file__).resolve().parents[1]
for readme in sorted(root.glob("README*.md")):
text = readme.read_text(encoding="utf-8")
self.assertNotRegex(text, r"\bdeepseek-(?:chat|reasoner)\b")
self.assertIn(f'"model_simple": "{simple}"', text)
self.assertIn(f'"model_complex": "{complex_model}"', text)


class FallbackModelTests(unittest.TestCase):
def _fallback(self, primary, fallback):
Expand Down
Loading