chore: upgrade to rmcp 0.14.0 (#6674)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use crate::mcp_utils::ToolResult;
|
||||
use chrono::Utc;
|
||||
use rmcp::model::{
|
||||
AnnotateAble, CallToolRequestParam, CallToolResult, Content, ImageContent, JsonObject,
|
||||
AnnotateAble, CallToolRequestParams, CallToolResult, Content, ImageContent, JsonObject,
|
||||
PromptMessage, PromptMessageContent, PromptMessageRole, RawContent, RawImageContent,
|
||||
RawTextContent, ResourceContents, Role, TextContent,
|
||||
};
|
||||
@@ -64,7 +64,7 @@ pub struct ToolRequest {
|
||||
pub id: String,
|
||||
#[serde(with = "tool_result_serde")]
|
||||
#[schema(value_type = Object)]
|
||||
pub tool_call: ToolResult<CallToolRequestParam>,
|
||||
pub tool_call: ToolResult<CallToolRequestParams>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
#[schema(value_type = Object)]
|
||||
pub metadata: Option<ProviderMetadata>,
|
||||
@@ -156,7 +156,7 @@ pub struct FrontendToolRequest {
|
||||
pub id: String,
|
||||
#[serde(with = "tool_result_serde")]
|
||||
#[schema(value_type = Object)]
|
||||
pub tool_call: ToolResult<CallToolRequestParam>,
|
||||
pub tool_call: ToolResult<CallToolRequestParams>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ToSchema)]
|
||||
@@ -316,7 +316,7 @@ impl MessageContent {
|
||||
|
||||
pub fn tool_request<S: Into<String>>(
|
||||
id: S,
|
||||
tool_call: ToolResult<CallToolRequestParam>,
|
||||
tool_call: ToolResult<CallToolRequestParams>,
|
||||
) -> Self {
|
||||
MessageContent::ToolRequest(ToolRequest {
|
||||
id: id.into(),
|
||||
@@ -328,7 +328,7 @@ impl MessageContent {
|
||||
|
||||
pub fn tool_request_with_metadata<S: Into<String>>(
|
||||
id: S,
|
||||
tool_call: ToolResult<CallToolRequestParam>,
|
||||
tool_call: ToolResult<CallToolRequestParams>,
|
||||
metadata: Option<&ProviderMetadata>,
|
||||
) -> Self {
|
||||
MessageContent::ToolRequest(ToolRequest {
|
||||
@@ -414,7 +414,7 @@ impl MessageContent {
|
||||
|
||||
pub fn frontend_tool_request<S: Into<String>>(
|
||||
id: S,
|
||||
tool_call: ToolResult<CallToolRequestParam>,
|
||||
tool_call: ToolResult<CallToolRequestParams>,
|
||||
) -> Self {
|
||||
MessageContent::FrontendToolRequest(FrontendToolRequest {
|
||||
id: id.into(),
|
||||
@@ -748,7 +748,7 @@ impl Message {
|
||||
pub fn with_tool_request<S: Into<String>>(
|
||||
self,
|
||||
id: S,
|
||||
tool_call: ToolResult<CallToolRequestParam>,
|
||||
tool_call: ToolResult<CallToolRequestParams>,
|
||||
) -> Self {
|
||||
self.with_content(MessageContent::tool_request(id, tool_call))
|
||||
}
|
||||
@@ -756,7 +756,7 @@ impl Message {
|
||||
pub fn with_tool_request_with_metadata<S: Into<String>>(
|
||||
self,
|
||||
id: S,
|
||||
tool_call: ToolResult<CallToolRequestParam>,
|
||||
tool_call: ToolResult<CallToolRequestParams>,
|
||||
metadata: Option<&ProviderMetadata>,
|
||||
tool_meta: Option<serde_json::Value>,
|
||||
) -> Self {
|
||||
@@ -804,7 +804,7 @@ impl Message {
|
||||
pub fn with_frontend_tool_request<S: Into<String>>(
|
||||
self,
|
||||
id: S,
|
||||
tool_call: ToolResult<CallToolRequestParam>,
|
||||
tool_call: ToolResult<CallToolRequestParams>,
|
||||
) -> Self {
|
||||
self.with_content(MessageContent::frontend_tool_request(id, tool_call))
|
||||
}
|
||||
@@ -964,8 +964,8 @@ mod tests {
|
||||
use crate::conversation::message::{Message, MessageContent, MessageMetadata};
|
||||
use crate::conversation::*;
|
||||
use rmcp::model::{
|
||||
AnnotateAble, CallToolRequestParam, PromptMessage, PromptMessageContent, PromptMessageRole,
|
||||
RawEmbeddedResource, RawImageContent, ResourceContents,
|
||||
AnnotateAble, CallToolRequestParams, PromptMessage, PromptMessageContent,
|
||||
PromptMessageRole, RawEmbeddedResource, RawImageContent, ResourceContents,
|
||||
};
|
||||
use rmcp::model::{ErrorCode, ErrorData};
|
||||
use rmcp::object;
|
||||
@@ -991,7 +991,8 @@ mod tests {
|
||||
.with_text("Hello, I'll help you with that.")
|
||||
.with_tool_request(
|
||||
"tool123",
|
||||
Ok(CallToolRequestParam {
|
||||
Ok(CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: "test_tool".into(),
|
||||
arguments: Some(object!({"param": "value"})),
|
||||
@@ -1250,7 +1251,8 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_message_with_tool_request() {
|
||||
let tool_call = Ok(CallToolRequestParam {
|
||||
let tool_call = Ok(CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: "test_tool".into(),
|
||||
arguments: Some(object!({})),
|
||||
|
||||
@@ -503,7 +503,7 @@ pub fn debug_conversation_fix(
|
||||
mod tests {
|
||||
use crate::conversation::message::Message;
|
||||
use crate::conversation::{debug_conversation_fix, fix_conversation, Conversation};
|
||||
use rmcp::model::{CallToolRequestParam, Role};
|
||||
use rmcp::model::{CallToolRequestParams, Role};
|
||||
use rmcp::object;
|
||||
|
||||
macro_rules! assert_has_issues_unordered {
|
||||
@@ -550,7 +550,8 @@ mod tests {
|
||||
.with_text("I'll help you search.")
|
||||
.with_tool_request(
|
||||
"search_1",
|
||||
Ok(CallToolRequestParam {
|
||||
Ok(CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: "web_search".into(),
|
||||
arguments: Some(object!({"query": "rust programming"})),
|
||||
@@ -614,7 +615,8 @@ mod tests {
|
||||
Message::user()
|
||||
.with_tool_request(
|
||||
"bad_req",
|
||||
Ok(CallToolRequestParam {
|
||||
Ok(CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: "search".into(),
|
||||
arguments: Some(object!({})),
|
||||
@@ -654,7 +656,8 @@ mod tests {
|
||||
.with_text("I'll search for you")
|
||||
.with_tool_request(
|
||||
"search_1",
|
||||
Ok(CallToolRequestParam {
|
||||
Ok(CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: "search".into(),
|
||||
arguments: Some(object!({})),
|
||||
@@ -672,7 +675,8 @@ mod tests {
|
||||
),
|
||||
Message::assistant().with_tool_request(
|
||||
"search_2",
|
||||
Ok(CallToolRequestParam {
|
||||
Ok(CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: "search".into(),
|
||||
arguments: Some(object!({})),
|
||||
@@ -708,11 +712,11 @@ mod tests {
|
||||
|
||||
Message::assistant()
|
||||
.with_text("I'll help you run `ls` in the current directory and then perform a word count on the smallest file. Let me start by listing the directory contents.")
|
||||
.with_tool_request("toolu_bdrk_018adWbP4X26CfoJU5hkhu3i", Ok(CallToolRequestParam { task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "ls -la"})) })),
|
||||
.with_tool_request("toolu_bdrk_018adWbP4X26CfoJU5hkhu3i", Ok(CallToolRequestParams { meta: None, task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "ls -la"})) })),
|
||||
|
||||
Message::assistant()
|
||||
.with_text("Now I'll identify the smallest file by size. Looking at the output, I can see that both `slack.yaml` and `subrecipes.yaml` have a size of 0 bytes, making them the smallest files. I'll run a word count on one of them:")
|
||||
.with_tool_request("toolu_bdrk_01KgDYHs4fAodi22NqxRzmwx", Ok(CallToolRequestParam { task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "wc slack.yaml"})) })),
|
||||
.with_tool_request("toolu_bdrk_01KgDYHs4fAodi22NqxRzmwx", Ok(CallToolRequestParams { meta: None, task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "wc slack.yaml"})) })),
|
||||
|
||||
Message::user()
|
||||
.with_tool_response("toolu_bdrk_01KgDYHs4fAodi22NqxRzmwx", Ok(rmcp::model::CallToolResult {
|
||||
@@ -746,7 +750,8 @@ mod tests {
|
||||
.with_text("I'll search for you")
|
||||
.with_tool_request(
|
||||
"search_1",
|
||||
Ok(CallToolRequestParam {
|
||||
Ok(CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: "search".into(),
|
||||
arguments: Some(object!({})),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::mcp_utils::ToolResult;
|
||||
use rmcp::model::{CallToolRequestParam, ErrorCode, ErrorData, JsonObject};
|
||||
use rmcp::model::{CallToolRequestParams, ErrorCode, ErrorData, JsonObject};
|
||||
use serde::ser::SerializeStruct;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
use std::borrow::Cow;
|
||||
@@ -32,7 +32,7 @@ struct ToolCallWithValueArguments {
|
||||
}
|
||||
|
||||
impl ToolCallWithValueArguments {
|
||||
fn into_call_tool_request_param(self) -> CallToolRequestParam {
|
||||
fn into_call_tool_request_param(self) -> CallToolRequestParams {
|
||||
let arguments = match self.arguments {
|
||||
serde_json::Value::Object(map) => Some(map),
|
||||
serde_json::Value::Null => None,
|
||||
@@ -42,7 +42,8 @@ impl ToolCallWithValueArguments {
|
||||
Some(map)
|
||||
}
|
||||
};
|
||||
CallToolRequestParam {
|
||||
CallToolRequestParams {
|
||||
meta: None,
|
||||
task: None,
|
||||
name: Cow::Owned(self.name),
|
||||
arguments,
|
||||
@@ -50,16 +51,16 @@ impl ToolCallWithValueArguments {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn deserialize<'de, D>(deserializer: D) -> Result<ToolResult<CallToolRequestParam>, D::Error>
|
||||
pub fn deserialize<'de, D>(deserializer: D) -> Result<ToolResult<CallToolRequestParams>, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
#[derive(Deserialize)]
|
||||
#[serde(untagged)]
|
||||
enum ResultFormat {
|
||||
SuccessWithCallToolRequestParam {
|
||||
SuccessWithCallToolRequestParams {
|
||||
status: String,
|
||||
value: CallToolRequestParam,
|
||||
value: CallToolRequestParams,
|
||||
},
|
||||
SuccessWithToolCallValueArguments {
|
||||
status: String,
|
||||
@@ -74,7 +75,7 @@ where
|
||||
let format = ResultFormat::deserialize(deserializer)?;
|
||||
|
||||
match format {
|
||||
ResultFormat::SuccessWithCallToolRequestParam { status, value } => {
|
||||
ResultFormat::SuccessWithCallToolRequestParams { status, value } => {
|
||||
if status == "success" {
|
||||
Ok(Ok(value))
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user