Skip to content

feat: allow custom endpoints to use responses API via api_mode override#1651

Merged
teknium1 merged 1 commit into
mainfrom
hermes/hermes-f685e964
Mar 17, 2026
Merged

feat: allow custom endpoints to use responses API via api_mode override#1651
teknium1 merged 1 commit into
mainfrom
hermes/hermes-f685e964

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

What this PR does

Reimplementation of PR #1041 by @mxyhi onto current main.

Adds HERMES_API_MODE env var and model.api_mode config field so custom OpenAI-compatible endpoints can opt into codex_responses mode without going through the OpenAI Codex OAuth provider path.

Changes

hermes_cli/runtime_provider.py

  • New _get_configured_api_mode() — reads HERMES_API_MODE env var (takes precedence) then model.api_mode from config.yaml. Only allows chat_completions or codex_responses.
  • Applied in both _resolve_openrouter_runtime() AND _resolve_named_custom_runtime() (original PR only covered the openrouter path)

run_agent.py

  • _dump_api_request_debug() now shows /responses URL when in codex_responses mode instead of always hardcoding /chat/completions

Usage

# config.yaml
model:
  provider: custom
  base_url: http://127.0.0.1:9208/v1
  api_mode: codex_responses

Or via env: HERMES_API_MODE=codex_responses

Improvements over original PR

  • Also applies to named custom providers (_resolve_named_custom_runtime), not just the openrouter path
  • Test for invalid api_mode values falling back to chat_completions
  • Test for named custom provider api_mode override
  • Tests for both /responses and /chat/completions debug dump URLs

Tests

4850 passed, 0 new failures (8 pre-existing).

Closes #1041

Add HERMES_API_MODE env var and model.api_mode config field to let
custom OpenAI-compatible endpoints opt into codex_responses mode
without requiring the OpenAI Codex OAuth provider path.

- _get_configured_api_mode() reads HERMES_API_MODE env (precedence)
  then model.api_mode from config.yaml; validates against whitelist
- Applied in both _resolve_openrouter_runtime() and
  _resolve_named_custom_runtime() (original PR only covered openrouter)
- Fix _dump_api_request_debug() to show /responses URL when in
  codex_responses mode instead of always showing /chat/completions
- Tests for config override, env override, invalid values, named
  custom providers, and debug dump URL for both API modes

Inspired by PR #1041 by @mxyhi.
@teknium1 teknium1 merged commit f2414bf into main Mar 17, 2026
1 check failed
angelburgosrosado pushed a commit to angelburgosrosado/hermes-agent that referenced this pull request Apr 27, 2026
…de (NousResearch#1651)

Add HERMES_API_MODE env var and model.api_mode config field to let
custom OpenAI-compatible endpoints opt into codex_responses mode
without requiring the OpenAI Codex OAuth provider path.

- _get_configured_api_mode() reads HERMES_API_MODE env (precedence)
  then model.api_mode from config.yaml; validates against whitelist
- Applied in both _resolve_openrouter_runtime() and
  _resolve_named_custom_runtime() (original PR only covered openrouter)
- Fix _dump_api_request_debug() to show /responses URL when in
  codex_responses mode instead of always showing /chat/completions
- Tests for config override, env override, invalid values, named
  custom providers, and debug dump URL for both API modes

Inspired by PR NousResearch#1041 by @mxyhi.

Co-authored-by: mxyhi <mxyhi@users.noreply.github.com>
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…de (NousResearch#1651)

Add HERMES_API_MODE env var and model.api_mode config field to let
custom OpenAI-compatible endpoints opt into codex_responses mode
without requiring the OpenAI Codex OAuth provider path.

- _get_configured_api_mode() reads HERMES_API_MODE env (precedence)
  then model.api_mode from config.yaml; validates against whitelist
- Applied in both _resolve_openrouter_runtime() and
  _resolve_named_custom_runtime() (original PR only covered openrouter)
- Fix _dump_api_request_debug() to show /responses URL when in
  codex_responses mode instead of always showing /chat/completions
- Tests for config override, env override, invalid values, named
  custom providers, and debug dump URL for both API modes

Inspired by PR NousResearch#1041 by @mxyhi.

Co-authored-by: mxyhi <mxyhi@users.noreply.github.com>
olympus-terminal pushed a commit to olympus-terminal/hermes-agent that referenced this pull request May 16, 2026
…de (NousResearch#1651)

Add HERMES_API_MODE env var and model.api_mode config field to let
custom OpenAI-compatible endpoints opt into codex_responses mode
without requiring the OpenAI Codex OAuth provider path.

- _get_configured_api_mode() reads HERMES_API_MODE env (precedence)
  then model.api_mode from config.yaml; validates against whitelist
- Applied in both _resolve_openrouter_runtime() and
  _resolve_named_custom_runtime() (original PR only covered openrouter)
- Fix _dump_api_request_debug() to show /responses URL when in
  codex_responses mode instead of always showing /chat/completions
- Tests for config override, env override, invalid values, named
  custom providers, and debug dump URL for both API modes

Inspired by PR NousResearch#1041 by @mxyhi.

Co-authored-by: mxyhi <mxyhi@users.noreply.github.com>
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…de (NousResearch#1651)

Add HERMES_API_MODE env var and model.api_mode config field to let
custom OpenAI-compatible endpoints opt into codex_responses mode
without requiring the OpenAI Codex OAuth provider path.

- _get_configured_api_mode() reads HERMES_API_MODE env (precedence)
  then model.api_mode from config.yaml; validates against whitelist
- Applied in both _resolve_openrouter_runtime() and
  _resolve_named_custom_runtime() (original PR only covered openrouter)
- Fix _dump_api_request_debug() to show /responses URL when in
  codex_responses mode instead of always showing /chat/completions
- Tests for config override, env override, invalid values, named
  custom providers, and debug dump URL for both API modes

Inspired by PR NousResearch#1041 by @mxyhi.

Co-authored-by: mxyhi <mxyhi@users.noreply.github.com>
Egavasyug pushed a commit to Egavasyug/hermes-agent that referenced this pull request Jun 10, 2026
…de (NousResearch#1651)

Add HERMES_API_MODE env var and model.api_mode config field to let
custom OpenAI-compatible endpoints opt into codex_responses mode
without requiring the OpenAI Codex OAuth provider path.

- _get_configured_api_mode() reads HERMES_API_MODE env (precedence)
  then model.api_mode from config.yaml; validates against whitelist
- Applied in both _resolve_openrouter_runtime() and
  _resolve_named_custom_runtime() (original PR only covered openrouter)
- Fix _dump_api_request_debug() to show /responses URL when in
  codex_responses mode instead of always showing /chat/completions
- Tests for config override, env override, invalid values, named
  custom providers, and debug dump URL for both API modes

Inspired by PR NousResearch#1041 by @mxyhi.

Co-authored-by: mxyhi <mxyhi@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants