feat(ai): surface tool invocations in chat history

load_history now groups preceding tool_call + tool_result scaffolding
under each assistant reply as `tools: [{name, arguments, result}]`.
Result bodies over 2000 chars are truncated for payload size with a
`result_truncated` flag; the full value remains in training_messages.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Cameron
2026-04-21 16:03:53 -04:00
parent 65ab10e9a8
commit c2bd3c08e1
2 changed files with 102 additions and 1 deletions

View File

@@ -704,6 +704,17 @@ pub struct RenderedHistoryMessage {
pub role: String,
pub content: String,
pub is_initial: bool,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub tools: Vec<HistoryToolInvocation>,
}
#[derive(Debug, Serialize)]
pub struct HistoryToolInvocation {
pub name: String,
pub arguments: serde_json::Value,
pub result: String,
#[serde(skip_serializing_if = "std::ops::Not::not")]
pub result_truncated: bool,
}
#[derive(Debug, Deserialize)]
@@ -787,6 +798,16 @@ pub async fn chat_history_handler(
role: m.role,
content: m.content,
is_initial: m.is_initial,
tools: m
.tools
.into_iter()
.map(|t| HistoryToolInvocation {
name: t.name,
arguments: t.arguments,
result: t.result,
result_truncated: t.result_truncated,
})
.collect(),
})
.collect(),
turn_count: view.turn_count,