hermes-agent/tests/hermes_cli
Teknium 88643a1ba9
feat: overhaul context length detection with models.dev and provider-aware resolution (#2158)
Replace the fragile hardcoded context length system with a multi-source
resolution chain that correctly identifies context windows per provider.

Key changes:

- New agent/models_dev.py: Fetches and caches the models.dev registry
  (3800+ models across 100+ providers with per-provider context windows).
  In-memory cache (1hr TTL) + disk cache for cold starts.

- Rewritten get_model_context_length() resolution chain:
  0. Config override (model.context_length)
  1. Custom providers per-model context_length
  2. Persistent disk cache
  3. Endpoint /models (local servers)
  4. Anthropic /v1/models API (max_input_tokens, API-key only)
  5. OpenRouter live API (existing, unchanged)
  6. Nous suffix-match via OpenRouter (dot/dash normalization)
  7. models.dev registry lookup (provider-aware)
  8. Thin hardcoded defaults (broad family patterns)
  9. 128K fallback (was 2M)

- Provider-aware context: same model now correctly resolves to different
  context windows per provider (e.g. claude-opus-4.6: 1M on Anthropic,
  128K on GitHub Copilot). Provider name flows through ContextCompressor.

- DEFAULT_CONTEXT_LENGTHS shrunk from 80+ entries to ~16 broad patterns.
  models.dev replaces the per-model hardcoding.

- CONTEXT_PROBE_TIERS changed from [2M, 1M, 512K, 200K, 128K, 64K, 32K]
  to [128K, 64K, 32K, 16K, 8K]. Unknown models no longer start at 2M.

- hermes model: prompts for context_length when configuring custom
  endpoints. Supports shorthand (32k, 128K). Saved to custom_providers
  per-model config.

- custom_providers schema extended with optional models dict for
  per-model context_length (backward compatible).

- Nous Portal: suffix-matches bare IDs (claude-opus-4-6) against
  OpenRouter's prefixed IDs (anthropic/claude-opus-4.6) with dot/dash
  normalization. Handles all 15 current Nous models.

- Anthropic direct: queries /v1/models for max_input_tokens. Only works
  with regular API keys (sk-ant-api*), not OAuth tokens. Falls through
  to models.dev for OAuth users.

Tests: 5574 passed (18 new tests for models_dev + updated probe tiers)
Docs: Updated configuration.md context length section, AGENTS.md

Co-authored-by: Test <test@test.com>
2026-03-20 06:04:33 -07:00
..
__init__.py test: reorganize test structure and add missing unit tests 2026-02-26 03:20:08 +03:00
test_banner.py fix(banner): normalize toolset labels and use skin colors 2026-03-18 03:22:58 -07:00
test_banner_skills.py fix: disabled skills respected across banner, system prompt, slash commands, and skill_view (#1897) 2026-03-18 03:17:37 -07:00
test_chat_skills_flag.py feat: preload CLI skills on launch (#1359) 2026-03-14 19:33:59 -07:00
test_claw.py feat: add 'hermes claw migrate' command + migration docs 2026-03-12 08:20:12 -07:00
test_cmd_update.py fix(cli): fall back to main when current branch has no remote counterpart 2026-03-14 12:16:00 -07:00
test_coalesce_session_args.py fix(cli): handle unquoted multi-word session names in -c/--continue and -r/--resume 2026-03-09 21:36:29 -07:00
test_commands.py feat(cli): two-stage /model autocomplete with ghost text suggestions (#1641) 2026-03-17 01:47:32 -07:00
test_config.py feat(web): add Tavily as web search/extract/crawl backend (#1731) 2026-03-17 04:28:03 -07:00
test_copilot_auth.py fix: correct Copilot API mode selection to match opencode 2026-03-18 03:54:50 -07:00
test_cron.py feat: add multi-skill cron editing and docs 2026-03-14 19:18:10 -07:00
test_doctor.py fix(gateway): surface missing linger in status and doctor (#1296) 2026-03-14 06:11:33 -07:00
test_env_loader.py fix(config): reload .env over stale shell overrides 2026-03-15 06:46:28 -07:00
test_gateway.py fix(gateway): PID-based wait with force-kill for gateway restart 2026-03-18 02:54:18 -07:00
test_gateway_linger.py feat(gateway): scope systemd service name to HERMES_HOME 2026-03-16 04:42:46 -07:00
test_gateway_runtime_health.py fix(gateway): harden Telegram polling conflict handling 2026-03-14 12:11:23 -07:00
test_gateway_service.py Merge pull request #1767 from sai-samarth/fix/systemd-node-path-whatsapp 2026-03-17 09:41:39 -07:00
test_mcp_tools_config.py feat: interactive MCP tool configuration in hermes tools (#1694) 2026-03-17 03:48:44 -07:00
test_model_validation.py fix: correct Copilot API mode selection to match opencode 2026-03-18 03:54:50 -07:00
test_models.py feat: auto-detect provider when switching models via /model (#1506) 2026-03-16 04:34:45 -07:00
test_path_completion.py feat(cli): add file path autocomplete in the input prompt (#1545) 2026-03-16 06:07:45 -07:00
test_placeholder_usage.py fix: cover remaining config placeholder help text 2026-03-14 10:35:14 -07:00
test_session_browse.py feat: interactive session browser with search filtering (#718) 2026-03-08 17:42:50 -07:00
test_sessions_delete.py fix(cli): accept session ID prefixes for session actions 2026-03-15 04:01:56 -07:00
test_set_config_value.py fix(docker): gate cwd workspace mount behind config 2026-03-16 05:20:56 -07:00
test_setup.py feat: overhaul context length detection with models.dev and provider-aware resolution (#2158) 2026-03-20 06:04:33 -07:00
test_setup_model_provider.py feat: overhaul context length detection with models.dev and provider-aware resolution (#2158) 2026-03-20 06:04:33 -07:00
test_setup_noninteractive.py fix: cover headless first-run setup flow 2026-03-14 02:37:29 -07:00
test_setup_openclaw_migration.py fix: cover headless first-run setup flow 2026-03-14 02:37:29 -07:00
test_setup_prompt_menus.py fix(cli): prefer curses over simple_term_menu in setup.py (#1487) 2026-03-15 21:16:21 -07:00
test_skills_config.py refactor: extract shared curses checklist, fix skill discovery perf 2026-03-11 03:06:15 -07:00
test_skills_hub.py fix(skills): honor policy table for dangerous verdicts 2026-03-14 11:27:02 -07:00
test_skills_install_flags.py fix: add --yes flag to bypass confirmation in /skills install and uninstall (#1647) 2026-03-17 01:59:07 -07:00
test_skills_skip_confirm.py fix: add --yes flag to bypass confirmation in /skills install and uninstall (#1647) 2026-03-17 01:59:07 -07:00
test_skills_subparser.py fix(cli): resolve duplicate 'skills' subparser crash on Python 3.11+ 2026-03-11 00:50:39 -07:00
test_skin_engine.py Revert "feat(cli): skin-aware light/dark theme mode with terminal auto-detection" 2026-03-17 10:04:53 -07:00
test_status.py feat(web): add Tavily as web search/extract/crawl backend (#1731) 2026-03-17 04:28:03 -07:00
test_status_model_provider.py Show configured model and provider in status output 2026-03-14 03:35:37 -07:00
test_tools_config.py fix(tools): preserve MCP toolsets when saving platform tool config 2026-03-15 03:28:20 -07:00
test_tools_disable_enable.py feat: add /tools disable/enable/list slash commands with session reset (#1652) 2026-03-17 02:05:26 -07:00
test_update_autostash.py fix(update): use .[all] extras with fallback in hermes update (#1728) 2026-03-17 04:22:37 -07:00
test_update_check.py fix(cli): non-blocking startup update check and banner deduplication 2026-03-14 21:45:50 -07:00
test_update_gateway_restart.py fix: hermes update causes dual gateways on macOS (launchd) (#1567) 2026-03-16 12:36:29 -07:00