Pretty tool inputs in eval output markdown + numbered assistant messages (#29082)

Release Notes:

- N/A
This commit is contained in:
Michael Sloan 2025-04-19 00:59:22 -06:00 committed by GitHub
parent bab28560ef
commit 98ceffe026
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 19 additions and 12 deletions

1
Cargo.lock generated
View file

@ -4918,7 +4918,6 @@ dependencies = [
"release_channel", "release_channel",
"reqwest_client", "reqwest_client",
"serde", "serde",
"serde_json",
"settings", "settings",
"shellexpand 2.1.2", "shellexpand 2.1.2",
"telemetry", "telemetry",

View file

@ -36,7 +36,6 @@ prompt_store.workspace = true
release_channel.workspace = true release_channel.workspace = true
reqwest_client.workspace = true reqwest_client.workspace = true
serde.workspace = true serde.workspace = true
serde_json.workspace = true
settings.workspace = true settings.workspace = true
shellexpand.workspace = true shellexpand.workspace = true
telemetry.workspace = true telemetry.workspace = true

View file

@ -29,6 +29,7 @@ use std::{
use unindent::Unindent as _; use unindent::Unindent as _;
use util::ResultExt as _; use util::ResultExt as _;
use util::command::new_smol_command; use util::command::new_smol_command;
use util::markdown::MarkdownString;
use util::serde::default_true; use util::serde::default_true;
use crate::AgentAppState; use crate::AgentAppState;
@ -879,6 +880,7 @@ impl RequestMarkdown {
fn new(request: &LanguageModelRequest) -> Self { fn new(request: &LanguageModelRequest) -> Self {
let mut tools = String::new(); let mut tools = String::new();
let mut messages = String::new(); let mut messages = String::new();
let mut assistant_message_number: u32 = 1;
// Print the tools // Print the tools
if !request.tools.is_empty() { if !request.tools.is_empty() {
@ -887,8 +889,8 @@ impl RequestMarkdown {
write!(&mut tools, "{}\n\n", tool.description).unwrap(); write!(&mut tools, "{}\n\n", tool.description).unwrap();
write!( write!(
&mut tools, &mut tools,
"```json\n{}\n```\n\n", "{}\n",
serde_json::to_string_pretty(&tool.input_schema).unwrap_or_default() MarkdownString::code_block("json", &format!("{:#}", tool.input_schema))
) )
.unwrap(); .unwrap();
} }
@ -896,14 +898,15 @@ impl RequestMarkdown {
// Print the messages // Print the messages
for message in &request.messages { for message in &request.messages {
let role_str = match message.role { match message.role {
Role::User => "👤 USER", Role::System => messages.push_str("# ⚙️ SYSTEM\n\n"),
Role::Assistant => "🤖 ASSISTANT", Role::User => messages.push_str("# 👤 USER\n\n"),
Role::System => "⚙️ SYSTEM", Role::Assistant => {
messages.push_str(&format!("# 🤖 ASSISTANT {assistant_message_number}\n\n"));
assistant_message_number += 1;
}
}; };
messages.push_str(&format!("# {}\n\n", role_str));
for content in &message.content { for content in &message.content {
match content { match content {
MessageContent::Text(text) => { MessageContent::Text(text) => {
@ -918,7 +921,10 @@ impl RequestMarkdown {
"**Tool Use**: {} (ID: {})\n", "**Tool Use**: {} (ID: {})\n",
tool_use.name, tool_use.id tool_use.name, tool_use.id
)); ));
messages.push_str(&format!("```json\n{}\n```\n\n", tool_use.input)); messages.push_str(&format!(
"{}\n",
MarkdownString::code_block("json", &format!("{:#}", tool_use.input))
));
} }
MessageContent::ToolResult(tool_result) => { MessageContent::ToolResult(tool_result) => {
messages.push_str(&format!( messages.push_str(&format!(
@ -977,7 +983,10 @@ fn response_events_to_markdown(
"**Tool Use**: {} (ID: {})\n", "**Tool Use**: {} (ID: {})\n",
tool_use.name, tool_use.id tool_use.name, tool_use.id
)); ));
response.push_str(&format!("```json\n{}\n```\n\n", tool_use.input)); response.push_str(&format!(
"{}\n",
MarkdownString::code_block("json", &format!("{:#}", tool_use.input))
));
} }
Ok( Ok(
LanguageModelCompletionEvent::UsageUpdate(_) LanguageModelCompletionEvent::UsageUpdate(_)