Introduce LanguageModelToolUse::raw_input (#29322)

This is to enable alternative streaming solutions at the application
layer. I'm not sure we really should have performed parsing of the input
at this layer. Either way I want to experiment with streaming approaches
in a separate crate on a branch, and this will help.

/cc @maxdeviant @bennetbo @rtfeldman

Closes #ISSUE

Release Notes:

- N/A
This commit is contained in:
Nathan Sobo 2025-04-23 20:30:48 -06:00 committed by GitHub
parent f125353b6f
commit 8836c6fb42
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 13 additions and 0 deletions

View file

@ -72,6 +72,7 @@ impl ToolUseState {
.map(|tool_use| LanguageModelToolUse {
id: tool_use.id.clone(),
name: tool_use.name.clone().into(),
raw_input: tool_use.input.to_string(),
input: tool_use.input.clone(),
is_input_complete: true,
})

View file

@ -338,6 +338,7 @@ pub struct CountTokensResponse {
#[derive(Debug, Serialize, Deserialize)]
pub struct FunctionCall {
pub name: String,
pub raw_args: String,
pub args: serde_json::Value,
}

View file

@ -186,6 +186,7 @@ where
pub struct LanguageModelToolUse {
pub id: LanguageModelToolUseId,
pub name: Arc<str>,
pub raw_input: String,
pub input: serde_json::Value,
pub is_input_complete: bool,
}

View file

@ -727,6 +727,7 @@ pub fn map_to_language_model_completion_events(
id: tool_use.id.clone().into(),
name: tool_use.name.clone().into(),
is_input_complete: false,
raw_input: tool_use.input_json.clone(),
input,
},
))],
@ -757,6 +758,7 @@ pub fn map_to_language_model_completion_events(
)
.map_err(|err| anyhow!("Error parsing tool call input JSON: {err:?} - JSON string was: {input_json:?}"))?
},
raw_input: tool_use.input_json.clone(),
},
))
})],

View file

@ -894,6 +894,7 @@ pub fn map_to_language_model_completion_events(
id: tool_use.id.into(),
name: tool_use.name.into(),
is_input_complete: true,
raw_input: tool_use.input_json.clone(),
input: if tool_use.input_json.is_empty() {
Value::Null
} else {

View file

@ -368,6 +368,7 @@ pub fn map_to_language_model_completion_events(
id: tool_call.id.into(),
name: tool_call.name.as_str().into(),
is_input_complete: true,
raw_input: tool_call.arguments.clone(),
input: serde_json::Value::from_str(
&tool_call.arguments,
)?,

View file

@ -396,6 +396,7 @@ pub fn into_google(
Some(Part::FunctionCallPart(google_ai::FunctionCallPart {
function_call: google_ai::FunctionCall {
name: tool_use.name.to_string(),
raw_args: tool_use.raw_input,
args: tool_use.input,
},
}))
@ -537,6 +538,10 @@ pub fn map_to_language_model_completion_events(
id,
name,
is_input_complete: true,
raw_input: function_call_part
.function_call
.raw_args
.clone(),
input: function_call_part.function_call.args,
},
)));

View file

@ -491,6 +491,7 @@ pub fn map_to_language_model_completion_events(
id: tool_call.id.into(),
name: tool_call.name.as_str().into(),
is_input_complete: true,
raw_input: tool_call.arguments.clone(),
input: serde_json::Value::from_str(
&tool_call.arguments,
)?,