assistant2: Add ability to open the active thread as Markdown (#26690)

This PR adds a new `assistant2: open active thread as markdown` action
that opens up the active thread in a Markdown representation:

<img width="1394" alt="Screenshot 2025-03-13 at 12 25 33 PM"
src="https://github.com/user-attachments/assets/363baaaa-c74b-4e93-af36-a3e04a114af0"
/>

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-03-13 12:39:01 -04:00 committed by GitHub
parent 95208a6576
commit 79874872cb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 117 additions and 3 deletions

View file

@ -1,3 +1,4 @@
use std::io::Write;
use std::sync::Arc;
use anyhow::{Context as _, Result};
@ -794,6 +795,50 @@ impl Thread {
false
}
}
pub fn to_markdown(&self) -> Result<String> {
let mut markdown = Vec::new();
for message in self.messages() {
writeln!(
markdown,
"## {role}\n",
role = match message.role {
Role::User => "User",
Role::Assistant => "Assistant",
Role::System => "System",
}
)?;
writeln!(markdown, "{}\n", message.text)?;
for tool_use in self.tool_uses_for_message(message.id) {
writeln!(
markdown,
"**Use Tool: {} ({})**",
tool_use.name, tool_use.id
)?;
writeln!(markdown, "```json")?;
writeln!(
markdown,
"{}",
serde_json::to_string_pretty(&tool_use.input)?
)?;
writeln!(markdown, "```")?;
}
for tool_result in self.tool_results_for_message(message.id) {
write!(markdown, "**Tool Results: {}", tool_result.tool_use_id)?;
if tool_result.is_error {
write!(markdown, " (Error)")?;
}
writeln!(markdown, "**\n")?;
writeln!(markdown, "{}", tool_result.content)?;
}
}
Ok(String::from_utf8_lossy(&markdown).to_string())
}
}
#[derive(Debug, Clone)]