The compressed version of Lesson 02
messages.append(user)
if cached_system_prompt is None:
build_or_restore_system_prompt()
while budget_remaining:
api_messages = copy(messages)
inject_system_prompt(api_messages)
inject_ephemeral_context_into_current_user(api_messages)
sanitize_role_order_and_tool_json(api_messages)
assistant = call_model(api_messages, tools)
if assistant.tool_calls:
validate_names_and_json(assistant.tool_calls)
messages.append(assistant_with_tool_calls)
for call in assistant.tool_calls:
result = dispatch_tool(call.name, call.args)
messages.append(tool_result(call.id, result))
maybe_compress_context()
continue
if assistant.content:
messages.append(assistant_final)
persist_session(messages)
return assistant.content
recover_empty_response()
| Concern | Hermes file |
|---|---|
| Loop, tool dispatch, recovery | agent/conversation_loop.py |
| API error classification | agent/error_classifier.py |
| Jittered retry delay | agent/retry_utils.py |
| Context compression | agent/context_compressor.py |
| Prompt cache control | agent/prompt_caching.py |
| Tool router | model_tools.py |