From 19cafdace8fc87a1015f49198984fd1e4c66ddae Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Fri, 25 Sep 2026 16:27:23 +0530 Subject: [PATCH] fix: ground text tool continuations in latest request --- .../src/agent_loop/dialect.rs | 1 + .../src/agent_loop/dialect/test.rs | 39 +++++++++++++++++++ vendor/tinyinference | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/crates/tinyagents-harness/src/agent_loop/dialect.rs b/crates/tinyagents-harness/src/agent_loop/dialect.rs index 5a1627e70..7ffc21fd1 100644 --- a/crates/tinyagents-harness/src/agent_loop/dialect.rs +++ b/crates/tinyagents-harness/src/agent_loop/dialect.rs @@ -129,6 +129,7 @@ impl RunDialect { let tools = std::mem::take(&mut request.tools); let messages = prompt_tools::coalesce_tool_results(&request.messages); let messages = prompt_tools::ensure_resolvable_user_turn(&messages); + let messages = prompt_tools::anchor_user_request_after_tool_result(&messages); let had_leading_system = matches!(messages.first(), Some(Message::System(_))); if host_renders_catalogue { let mut block = String::new(); diff --git a/crates/tinyagents-harness/src/agent_loop/dialect/test.rs b/crates/tinyagents-harness/src/agent_loop/dialect/test.rs index 8f2505166..5506136e9 100644 --- a/crates/tinyagents-harness/src/agent_loop/dialect/test.rs +++ b/crates/tinyagents-harness/src/agent_loop/dialect/test.rs @@ -16,6 +16,45 @@ fn auto_uses_xml_when_the_model_disables_native_tool_calling() { assert!(matches!(dialect, RunDialect::Xml)); } +#[test] +fn text_dialect_keeps_latest_request_after_a_tool_search_result() { + use tinyinference_llm::message::Message; + use tinyinference_llm::model::ModelRequest; + use tinyinference_llm::tool::ToolSchema; + + let tool = ToolSchema::new("tool_search", "find tools", serde_json::json!({})); + let dialect = RunDialect::resolve( + ToolDispatcher::Xml, + std::slice::from_ref(&tool), + Some(false), + ); + let mut request = ModelRequest::new(vec![ + Message::system("system"), + Message::user("hey"), + Message::assistant("Hey! What's up?"), + Message::user("fetch my latest email"), + Message::assistant("searching"), + Message::tool("search-1", "GMAIL_FETCH_EMAILS schema"), + ]) + .with_tools(vec![tool]); + + dialect.apply_to_request(&mut request, true, &[]); + + assert!( + request.messages[request.messages.len() - 2] + .text() + .contains("GMAIL_FETCH_EMAILS") + ); + assert!( + request + .messages + .last() + .unwrap() + .text() + .contains("fetch my latest email") + ); +} + #[test] fn code_dialects_are_opt_in_and_share_the_positional_registry() { use tinyinference_llm::tool::ToolSchema; diff --git a/vendor/tinyinference b/vendor/tinyinference index 72d030db6..e39f8ab4b 160000 --- a/vendor/tinyinference +++ b/vendor/tinyinference @@ -1 +1 @@ -Subproject commit 72d030db6a5be9c0fbdefe5e3fef7adfe8737719 +Subproject commit e39f8ab4b2d051b61bced9428d9b2a4c6c4b7f25