mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-22 05:22:09 +00:00
fix(xai-http): preserve ~/.hermes/.env fallback and XAI_STT_BASE_URL precedence
The new resolve_xai_http_credentials() resolver was using os.getenv() for the XAI_API_KEY/XAI_BASE_URL fallback path, which dropped the ~/.hermes/.env contract guarded by PR #17140 / #17163. Users with XAI_API_KEY in dotenv only would see "No xAI credentials found" even though the key was configured. Separately, _transcribe_xai started consulting creds["base_url"] (which always returns at least the default https://api.x.ai/v1) ahead of the public XAI_STT_BASE_URL env override, so the per-tool override stopped working. - tools/xai_http.py: add module-level get_env_value() wrapper that reads ~/.hermes/.env first (via hermes_cli.config.get_env_value), then os.environ. Resolver uses it for the API-key/base-url fallback. - tools/transcription_tools.py: restore precedence so XAI_STT_BASE_URL wins over creds["base_url"]. - tests/tools/test_transcription_dotenv_fallback.py + tests/tools/test_tts_dotenv_fallback.py: repoint the per-call-site patches at the new resolution point (tools.xai_http.get_env_value). The end-to-end regression-guard test (which patches load_env) is unchanged and still passes.
This commit is contained in:
parent
9eef53b960
commit
e13c1b8060
4 changed files with 42 additions and 10 deletions
|
|
@ -57,7 +57,12 @@ class TestDotenvFallbackPerProvider:
|
|||
mock_import.return_value.assert_called_once_with(api_key="el-dotenv-key")
|
||||
|
||||
def test_xai_reads_dotenv_key(self, tmp_path):
|
||||
"""xAI TTS now resolves credentials through ``tools.xai_http``; the
|
||||
dotenv fallback contract from #17140 is preserved by patching the
|
||||
resolver's ``get_env_value`` rather than ``tts_tool.get_env_value``.
|
||||
"""
|
||||
from tools import tts_tool
|
||||
from tools import xai_http
|
||||
|
||||
captured: dict = {}
|
||||
|
||||
|
|
@ -69,7 +74,7 @@ class TestDotenvFallbackPerProvider:
|
|||
response.raise_for_status = MagicMock()
|
||||
return response
|
||||
|
||||
with patch.object(tts_tool, "get_env_value", return_value="xai-dotenv-key"), \
|
||||
with patch.object(xai_http, "get_env_value", return_value="xai-dotenv-key"), \
|
||||
patch("requests.post", side_effect=fake_post):
|
||||
tts_tool._generate_xai_tts("hi", str(tmp_path / "out.mp3"), {})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue