hermes-agent/agent
Teknium 8a5f8379ed fix(agent): honor custom-provider extra_body for multi-model catalogs
_custom_provider_model_matches() only compared the session model
against the entry's single 'model' field. A custom provider declaring
a multi-model catalog (providers.<name>.models mapping / models list)
whose default model differed from the session model silently failed to
match — dropping the entry's extra_body entirely. Real impact: an
OpenAI custom provider pinning service_tier=flex via extra_body ran
every request at STANDARD tier (~2.3x billing) with zero signal.

- Model matching now accepts the session model when it appears in the
  entry's models catalog (dict keys or list), case-insensitive;
  single-model 'model' field behavior unchanged; entries with neither
  still match everything.
- Usage report ('hermes -z --usage-file') now carries service_tier
  (the tier requested via request_overrides.extra_body) so batch
  pipelines can audit the billed tier per run.

Validation: 8 new tests; live E2E via real 'hermes -p sweeper -z'
with httpx-level wire capture — service_tier=flex present in the
outgoing /v1/responses body and in the usage report.
2026-07-12 23:30:52 -07:00
..
lsp refactor(setup): route dependency installs through the canonical uv→pip→ensurepip ladder 2026-07-07 04:09:35 -07:00
pet fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
secret_sources feat(secrets): adapt 1Password onto the SecretSource interface 2026-07-06 04:58:07 -07:00
transports feat(reasoning): add max and ultra effort levels (#62650) 2026-07-12 00:26:49 -07:00
__init__.py
account_usage.py fix(usage): scope Codex usage pool fallback to AuthError, keep singleton token on account_id read failure 2026-07-07 12:01:33 +05:30
agent_init.py fix(agent): honor custom-provider extra_body for multi-model catalogs 2026-07-12 23:30:52 -07:00
agent_runtime_helpers.py fix(agent): restore primary credential pool after fallback (#62417) 2026-07-11 03:44:02 -07:00
anthropic_adapter.py feat(reasoning): add max and ultra effort levels (#62650) 2026-07-12 00:26:49 -07:00
async_utils.py
auxiliary_client.py fix(codex): also guard the auxiliary Copilot Responses adapter 2026-07-11 12:09:27 +05:30
azure_identity_adapter.py
background_review.py fix(runtime): preserve resolved fork metadata 2026-07-10 18:32:32 +05:30
bedrock_adapter.py
billing_view.py
bounded_response.py fix(agents): bound streaming error-response body reads 2026-07-05 14:00:20 -07:00
browser_provider.py
browser_registry.py
chat_completion_helpers.py fix(cron): scope inline calls to reported transport 2026-07-11 11:07:34 +05:30
codex_responses_adapter.py fix(codex): enforce Copilot replay policy at dispatch 2026-07-11 12:09:27 +05:30
codex_runtime.py fix(codex): evaluate native compaction usage 2026-07-11 22:59:49 +05:30
coding_context.py test: deflake CI and dev-machine flaky tests in bulk (11 tests, 10 files) (#61816) 2026-07-09 20:03:11 -07:00
context_breakdown.py
context_compressor.py fix(compaction): clear stale anti-thrash verdicts 2026-07-11 22:59:49 +05:30
context_engine.py
context_references.py
conversation_compression.py fix(codex): reject interrupted manual compaction 2026-07-11 22:59:49 +05:30
conversation_loop.py fix(compaction): clear stale anti-thrash verdicts 2026-07-11 22:59:49 +05:30
copilot_acp_client.py
credential_persistence.py feat(auth): make xAI Grok OAuth device-code-only, drop loopback login 2026-07-02 13:17:41 -07:00
credential_pool.py fix: reject empty credential pool leases (#63620) 2026-07-12 23:07:02 -07:00
credential_sources.py feat(auth): make xAI Grok OAuth device-code-only, drop loopback login 2026-07-02 13:17:41 -07:00
credits_tracker.py
curator.py fix(runtime): preserve resolved fork metadata 2026-07-10 18:32:32 +05:30
curator_backup.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
display.py fix(display): harden fallback label formatting 2026-07-10 19:14:06 +05:30
error_classifier.py fix(xai): recover legacy encrypted replay failures (#62420) 2026-07-11 03:51:38 -07:00
errors.py
file_safety.py fix(image-gen): route local-input credential guard through one shared chokepoint + cover xai (#57698) 2026-07-03 18:47:53 +05:30
gemini_native_adapter.py fix(agents): bound streaming error-response body reads 2026-07-05 14:00:20 -07:00
gemini_schema.py
i18n.py
image_gen_provider.py
image_gen_registry.py
image_routing.py Guard native image routing with file safety 2026-07-05 03:15:03 -07:00
insights.py fix(insights): harden per-route usage attribution 2026-07-11 05:59:42 -07:00
iteration_budget.py
jiter_preload.py
learn_prompt.py
learning_graph.py fix(learning_graph): guard non-dict metadata so /journey can't crash 2026-07-01 16:25:48 -05:00
learning_graph_render.py fix: cover remaining GNU-only %-d strftime site in learning graph render 2026-07-05 00:59:35 -07:00
learning_mutations.py
lmstudio_reasoning.py
manual_compression_feedback.py
markdown_tables.py
memory_manager.py refactor: address Phase-2 review findings on /new boundary handoff 2026-07-09 03:21:54 +05:30
memory_provider.py
message_content.py
message_sanitization.py
moa_loop.py fix: widen None-deref guards to config-derived sibling sites + tests 2026-07-09 21:10:07 -07:00
moa_trace.py
model_metadata.py fix(agent): handle YAML null value in context_length_cache 2026-07-09 19:57:43 -07:00
models_dev.py
moonshot_schema.py
nous_rate_guard.py
onboarding.py fix(config): close unreadable-overwrite bug class at a single chokepoint 2026-07-05 23:00:34 +05:30
oneshot.py
plugin_llm.py
portal_tags.py
process_bootstrap.py fix(agent): apply pool-level keepalive to the process_bootstrap sibling builder 2026-07-05 03:14:55 -07:00
prompt_builder.py perf(skills): speed up snapshot prompt builds 2026-07-09 02:41:24 +05:30
prompt_caching.py refactor(salvage): scope #40632 to the two live copy-on-write sites 2026-07-09 14:35:14 +05:30
rate_limit_tracker.py
reactions.py feat(agent): core affection reaction detector + reaction_callback 2026-07-10 05:41:59 -05:00
reasoning_timeouts.py fix(reasoning): add deepseek-v4-flash and deepseek-v4-pro to reasoning timeout floor 2026-07-09 15:04:14 +05:30
redact.py fix(redact): skip env-lookup exception for JSON/YAML config field redaction 2026-07-05 13:58:19 -07:00
replay_cleanup.py fix(agent): preserve none vs unknown tool effects (#61783) 2026-07-11 05:41:58 -07:00
retry_utils.py refactor(retry): single-source Z.AI overload short-attempts + drop change-detector assert 2026-07-07 11:57:01 +05:30
runtime_cwd.py
secret_scope.py
shell_hooks.py fix(cli): safe mode also skips shell-hook registration 2026-07-07 02:32:32 -07:00
skill_bundles.py fix(gateway): apply platform-disabled skill gate to bundle invocations (#59156) 2026-07-05 14:48:11 -07:00
skill_commands.py fix(cron): normalize absolute skill paths before skill_view (#59824) 2026-07-07 14:40:56 +05:30
skill_preprocessing.py
skill_utils.py perf(skills): speed up snapshot prompt builds 2026-07-09 02:41:24 +05:30
ssl_guard.py
ssl_verify.py fix(agent): honor custom CA certs on aux client + harden TLS resolution 2026-07-02 04:51:56 +05:30
stream_diag.py
subdirectory_hints.py
system_prompt.py fix(agent): tag desktop chat sessions as desktop 2026-07-08 06:18:18 -07:00
think_scrubber.py
thinking_timeout_guidance.py
thread_scoped_output.py
title_generator.py
tool_dispatch_helpers.py fix(agent): preserve none vs unknown tool effects (#61783) 2026-07-11 05:41:58 -07:00
tool_executor.py fix(agent): preserve none vs unknown tool effects (#61783) 2026-07-11 05:41:58 -07:00
tool_guardrails.py
tool_result_classification.py fix(agent): preserve none vs unknown tool effects (#61783) 2026-07-11 05:41:58 -07:00
trace_upload.py feat(sessions): trace export + HF upload via 'sessions export --format trace' (#60507) 2026-07-07 15:12:49 -07:00
trajectory.py
transcription_provider.py
transcription_registry.py
tts_provider.py
tts_registry.py
turn_context.py feat(agent): core affection reaction detector + reaction_callback 2026-07-10 05:41:59 -05:00
turn_finalizer.py fix(agent): honor custom-provider extra_body for multi-model catalogs 2026-07-12 23:30:52 -07:00
turn_retry_state.py
usage_pricing.py feat(openai): cover gpt-5.6 -pro variants (PR #61587 complement) 2026-07-10 00:47:51 +05:30
verification_evidence.py
verification_stop.py fix(approval): allow verifier temp cleanup 2026-07-12 04:32:52 -07:00
verify_hooks.py
vertex_adapter.py security(vertex): route credential/project/region resolution through the profile secret scope 2026-07-02 06:07:56 +05:30
video_gen_provider.py
video_gen_registry.py
web_search_provider.py fix(web): widen config-aware env resolution to exa/parallel/tavily/brave-free providers 2026-07-06 02:42:24 -07:00
web_search_registry.py fix(web): correct 'disabled plugin' diagnosis for web backends (#59573) 2026-07-06 04:38:17 -07:00