hermes-agent/agent
brooklyn! 43717123ca
fix(models): a model id missing its vendor prefix says so instead of 404ing (#78856)
Selecting an NVIDIA NIM model whose id reached config without the nvidia/
prefix produced a bare "HTTP 404: 404 page not found" — retried three times,
never naming the model. It reads exactly like an outage or an auth failure,
which is where the Discord thread spent its time before the id was spotted.

normalize_model_for_provider() had no branch for nvidia, so a bare id passed
straight through to the API. Repair it from the provider's curated catalogue:
a bare name that matches exactly one entry modulo the prefix gets it back.
That's a lookup, not a guess — build.nvidia.com also fronts local NIM
containers and third-party models, and anything absent from the catalogue is
left alone. Because the repair runs on every runtime setup, an already-broken
config self-heals on the next turn and prints what it changed.

If a bare id still reaches the wire, the 404 now explains itself. The
classifier consults the same catalogue: a prefix-less id the provider only
serves as vendor/model is a deterministic failure, so it classifies as
model_not_found instead of burning three retries on a retryable "unknown",
and the error trace names the id to use.

Fixes #78796
2026-08-04 19:35:57 +00:00
..
lsp fix(runtime): resolve Hermes-managed Node and uv before bare PATH 2026-08-01 21:17:51 -04:00
monitoring
pet
proxy_sources
secret_sources fix(gateway): hydrate cold profile secret sources 2026-08-02 00:11:50 -07:00
transports refactor(xai): simplify _xai_prefers_native_web_search to use registry 2026-08-04 15:44:15 +05:30
__init__.py
account_usage.py
agent_init.py fix(agent): keep context_length pin for named custom providers 2026-08-04 11:00:04 +05:30
agent_runtime_helpers.py fix(credential-pool): bench a billing 403 fully, even as the sole key 2026-08-04 23:33:39 +05:30
anthropic_adapter.py fix: prefer explicit anthropic api key 2026-08-04 00:12:45 +05:30
async_utils.py
aux_accounting.py
auxiliary_client.py Merge branch 'main' into feat/hermes-relay-model-metrics 2026-08-04 12:07:51 -04:00
azure_identity_adapter.py fix(secrets): scope-aware Azure credential presence reads in identity diagnostics 2026-08-02 10:02:33 -07:00
backend_identity.py
background_review.py fix(background-review): inherit prefill messages + OpenRouter provider pins on non-routed forks 2026-08-02 23:48:42 +05:30
battery.py
bedrock_adapter.py
billing_links.py
billing_usage.py
billing_view.py
bounded_response.py
browser_provider.py fix(browser): replace expired cloud sessions 2026-08-02 11:18:41 +05:30
browser_registry.py
chat_completion_helpers.py fix(backoff): keep 60s first-hit cooldown, escalate only on consecutive rate-limits 2026-08-03 22:54:54 +05:30
codex_responses_adapter.py fix(codex): defang reserved Harmony tokens in requests 2026-07-31 22:53:20 -07:00
codex_runtime.py
coding_context.py
context_breakdown.py
context_compressor.py perf(compressor): release allocator pages after successful compaction 2026-08-03 22:55:36 +05:30
context_engine.py
context_references.py
conversation_compression.py feat(agent): emit pool_saturated compression-attempt telemetry (re-review #6) 2026-08-02 16:16:36 -07:00
conversation_loop.py fix(models): a model id missing its vendor prefix says so instead of 404ing (#78856) 2026-08-04 19:35:57 +00:00
copilot_acp_client.py
credential_persistence.py
credential_pool.py fix(credential-pool): bench a billing 403 fully, even as the sole key 2026-08-04 23:33:39 +05:30
credential_sources.py
credits_tracker.py
curator.py perf(curator): trim dead tool-schema from the LLM review fork 2026-08-03 18:21:17 +05:30
curator_backup.py fix(curator): restore the real skills tree when a rollback extract dies part-way 2026-07-31 22:34:57 -07:00
delegation_context.py fix(delegation): prevent child HERMES_SESSION_ID leak into parent process env 2026-07-31 22:32:55 -07:00
display.py refactor(discord): simplify tool preview links 2026-08-02 21:48:06 -07:00
error_classifier.py fix(models): a model id missing its vendor prefix says so instead of 404ing (#78856) 2026-08-04 19:35:57 +00:00
errors.py
file_safety.py
gemini_native_adapter.py
gemini_schema.py
i18n.py
image_gen_provider.py
image_gen_registry.py
image_routing.py
insights.py refactor(insights): drop consumer-less get_skill_breakdown alias (simplify-pass) 2026-08-03 18:45:43 +05:30
interrupt_compat.py fix(compression): let explicit interrupts cancel safely 2026-08-02 22:15:20 +05:30
iteration_budget.py
jiter_preload.py
kanban_stop.py
learn_prompt.py
learning_graph.py
learning_graph_render.py
learning_mutations.py
lmstudio_reasoning.py
manual_compression_feedback.py
markdown_tables.py
memory_manager.py
memory_provider.py fix(openviking): integrate reliability and configuration hardening 2026-08-03 20:35:47 +05:30
message_content.py
message_sanitization.py
moa_loop.py perf(moa): cache resolved preset + per-slot runtime to cut cold-start latency (#66793) 2026-08-03 22:43:15 +05:30
moa_trace.py
model_metadata.py fix(model_metadata): read llama.cpp context from meta.n_ctx + accept sole model 2026-08-04 11:08:32 +05:30
models_dev.py
moonshot_schema.py
nous_rate_guard.py
onboarding.py
oneshot.py
outbound_webhooks.py fix(hooks): flush outbound queue at interpreter exit 2026-08-02 15:01:11 -07:00
plugin_llm.py
portal_tags.py
process_bootstrap.py
prompt_builder.py feat(terminal): raise Docker sandbox /dev/shm to 1g by default (configurable) 2026-07-31 21:31:51 -07:00
prompt_caching.py perf(prompt-caching): make PromptCachePlan.marker_count lazy 2026-08-01 15:39:58 +05:30
rate_limit_tracker.py
reactions.py
reasoning_timeouts.py
redact.py perf(redact): eliminate exponential backtracking in config-key patterns 2026-08-01 15:58:25 +05:30
relay_llm.py Merge upstream main into model metrics 2026-08-02 20:10:47 -07:00
relay_runtime.py fix(relay): preserve skipped turn context 2026-08-03 13:43:17 -06:00
relay_tools.py
replay_cleanup.py
retry_utils.py
runtime_cwd.py
secret_scope.py fix(secrets): allowlist API_SERVER listener settings as global deployment env 2026-08-02 09:59:52 -07:00
session_activity.py refactor(agent): pin session activity heartbeat cadence + harden best-effort write 2026-08-02 16:16:36 -07:00
shell_hooks.py feat(hooks): outbound webhooks — push signed lifecycle events to external HTTP endpoints 2026-08-02 15:01:11 -07:00
skill_bundles.py
skill_commands.py
skill_preprocessing.py
skill_utils.py
ssl_guard.py
ssl_verify.py
stream_diag.py
stream_single_writer.py
subagent_lifecycle.py fix(compression): let explicit interrupts cancel safely 2026-08-02 22:15:20 +05:30
subdirectory_hints.py fix(context): dedupe subdirectory hints by content digest and skip backup/vendor dirs 2026-08-03 20:43:34 +05:30
subscription_view.py
system_prompt.py docs(system_prompt): fix stale reconstruct_static_prefix docstring example 2026-08-03 23:23:39 +05:30
think_scrubber.py
thinking_timeout_guidance.py
thread_scoped_output.py
title_generator.py
tool_dispatch_helpers.py feat(image): parallelize image_generate batches 2026-08-03 22:53:32 +05:30
tool_executor.py Merge branch 'main' into feat/hermes-relay-tool-metrics 2026-08-04 12:43:38 -04:00
tool_guardrails.py
tool_result_classification.py
trace_upload.py
trajectory.py
transcription_provider.py
transcription_registry.py
tts_provider.py
tts_registry.py
turn_context.py refactor(memory): single shared trivial-prompt classifier + gate tests 2026-08-03 17:53:55 +05:30
turn_finalizer.py fix(agent): invalidate flush-scan cursor at the defrag marker-pop sibling site 2026-07-31 23:18:12 -07:00
turn_retry_state.py fix(copilot): recover from stale/degraded token 400 AND expired IDE-token 401 2026-07-31 22:31:09 -07:00
turn_summary.py
usage_pricing.py
verification_evidence.py
verification_stop.py
verify_hooks.py
vertex_adapter.py
video_gen_provider.py
video_gen_registry.py
web_search_provider.py
web_search_registry.py