feat: save account model and thinking settings for Hermes
Rebuild & Deploy / rebuild (push) Successful in 1m9s
Rebuild & Deploy / rebuild (push) Successful in 1m9s
This commit is contained in:
1 parent
a45569f8c1
commit
6cb4427210
13 files changed
+798
-16
No files matched your search
@@ -99,7 +99,7 @@ class HermesLLMTests(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertEqual(request.headers["x-hermes-session-id"], "stable-room")
|
||||
self.assertEqual(request.headers["x-hermes-session-key"], "hope:alice")
|
||||
self.assertEqual(json.loads(request.content), {
|
||||
"model": "hermes-agent", "stream": True,
|
||||
"model": "auto", "provider": "custom:hope-upstream", "stream": True,
|
||||
"messages": [
|
||||
{"role": "system", "content": "EXACT system prompt\nDo not alter."},
|
||||
{"role": "user", "content": "hello\nworld"},
|
||||
@@ -347,6 +347,32 @@ class HermesLLMTests(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertEqual(result.text, "Done")
|
||||
self.assertEqual(len(self.requests), 1)
|
||||
|
||||
async def test_saved_model_and_thinking_refreshed_per_turn(self):
|
||||
selected = {'model': 'openai/gpt-example', 'thinking_level': 'high'}
|
||||
async def settings():
|
||||
return dict(selected)
|
||||
bridge = self.bridge(FakeSSE([data({'content': 'Done'}), b'data: [DONE]\n\n']), get_model_settings=settings)
|
||||
for effort in ('high', 'none', 'low'):
|
||||
selected['thinking_level'] = effort
|
||||
await bridge.chat(chat_ctx=self.context(), extra_kwargs={'provider': 'evil', 'model': 'evil'}).collect()
|
||||
body = json.loads(self.requests[-1].content)
|
||||
self.assertEqual(body['model'], 'openai/gpt-example')
|
||||
self.assertEqual(body['provider'], 'custom:hope-upstream')
|
||||
expected = {'enabled': False} if effort == 'none' else {'enabled': True, 'effort': effort}
|
||||
self.assertEqual(body['model_options']['reasoning'], expected)
|
||||
selected['model'] = 'intel-b70-1/Qwen3.8-27b'
|
||||
await bridge.chat(chat_ctx=self.context()).collect()
|
||||
self.assertEqual(json.loads(self.requests[-1].content)['model'], selected['model'])
|
||||
|
||||
async def test_settings_failure_does_not_call_hermes_or_leak(self):
|
||||
async def broken():
|
||||
raise RuntimeError('private-key')
|
||||
with self.assertRaises(HermesLLMError) as caught:
|
||||
await self.bridge(FakeSSE([]), get_model_settings=broken).chat(chat_ctx=self.context()).collect()
|
||||
self.assertEqual(caught.exception.code, 'settings_unavailable')
|
||||
self.assertNotIn('private-key', str(caught.exception))
|
||||
self.assertEqual(self.requests, [])
|
||||
|
||||
async def test_transport_exception_redacted(self):
|
||||
def broken(request):
|
||||
self.requests.append(request)
|
||||
|
||||
Reference in new issue
Block a user