Route all remaining ad-hoc auxiliary LLM call sites through
resolve_provider_client() so auth, headers, and API format (Chat
Completions vs Responses API) are handled consistently in one place.
Files changed:
- tools/openrouter_client.py: Replace manual AsyncOpenAI construction
with resolve_provider_client('openrouter', async_mode=True). The
shared client module now delegates entirely to the router.
- tools/skills_guard.py: Replace inline OpenAI client construction
(hardcoded OpenRouter base_url, manual api_key lookup, manual
headers) with resolve_provider_client('openrouter'). Remove unused
OPENROUTER_BASE_URL import.
- trajectory_compressor.py: Add _detect_provider() to map config
base_url to a provider name, then route through
resolve_provider_client. Falls back to raw construction for
unrecognized custom endpoints.
- mini_swe_runner.py: Route default case (no explicit api_key/base_url)
through resolve_provider_client('openrouter') with auto-detection
fallback. Preserves direct construction when explicit creds are
passed via CLI args.
- agent/auxiliary_client.py: Fix stale module docstring — vision auto
mode now correctly documents that Codex and custom endpoints are
tried (not skipped).
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
"""Shared OpenRouter API client for Hermes tools.
|
|
|
|
Provides a single lazy-initialized AsyncOpenAI client that all tool modules
|
|
can share. Routes through the centralized provider router in
|
|
agent/auxiliary_client.py so auth, headers, and API format are handled
|
|
consistently.
|
|
"""
|
|
|
|
import os
|
|
|
|
_client = None
|
|
|
|
|
|
def get_async_client():
|
|
"""Return a shared async OpenAI-compatible client for OpenRouter.
|
|
|
|
The client is created lazily on first call and reused thereafter.
|
|
Uses the centralized provider router for auth and client construction.
|
|
Raises ValueError if OPENROUTER_API_KEY is not set.
|
|
"""
|
|
global _client
|
|
if _client is None:
|
|
from agent.auxiliary_client import resolve_provider_client
|
|
client, _model = resolve_provider_client("openrouter", async_mode=True)
|
|
if client is None:
|
|
raise ValueError("OPENROUTER_API_KEY environment variable not set")
|
|
_client = client
|
|
return _client
|
|
|
|
|
|
def check_api_key() -> bool:
|
|
"""Check whether the OpenRouter API key is present."""
|
|
return bool(os.getenv("OPENROUTER_API_KEY"))
|