Add Error variant to ConversationCreateResult [Stack 1/2] (#1784)
Switch ConversationCreateResult from a struct to a tagged enum (Ok | Error) Stack: Top: #1783 Bottom: #1784
This commit is contained in:
@@ -172,15 +172,22 @@ pub enum ToolCallResponseResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct ConversationCreateResult {
|
#[serde(untagged)]
|
||||||
pub conversation_id: ConversationId,
|
pub enum ConversationCreateResult {
|
||||||
pub model: String,
|
Ok {
|
||||||
|
conversation_id: ConversationId,
|
||||||
|
model: String,
|
||||||
|
},
|
||||||
|
Error {
|
||||||
|
message: String,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct ConversationStreamResult {}
|
pub struct ConversationStreamResult {}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
// TODO: remove this status because we have is_error field in the response.
|
||||||
#[serde(tag = "status", rename_all = "camelCase")]
|
#[serde(tag = "status", rename_all = "camelCase")]
|
||||||
pub enum ConversationSendMessageResult {
|
pub enum ConversationSendMessageResult {
|
||||||
Ok,
|
Ok,
|
||||||
@@ -491,7 +498,7 @@ mod tests {
|
|||||||
request_id: RequestId::Integer(1),
|
request_id: RequestId::Integer(1),
|
||||||
is_error: None,
|
is_error: None,
|
||||||
result: Some(ToolCallResponseResult::ConversationCreate(
|
result: Some(ToolCallResponseResult::ConversationCreate(
|
||||||
ConversationCreateResult {
|
ConversationCreateResult::Ok {
|
||||||
conversation_id: ConversationId(uuid!("d0f6ecbe-84a2-41c1-b23d-b20473b25eab")),
|
conversation_id: ConversationId(uuid!("d0f6ecbe-84a2-41c1-b23d-b20473b25eab")),
|
||||||
model: "o3".into(),
|
model: "o3".into(),
|
||||||
},
|
},
|
||||||
@@ -515,6 +522,35 @@ mod tests {
|
|||||||
assert_eq!(req_id, RequestId::Integer(1));
|
assert_eq!(req_id, RequestId::Integer(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn response_error_conversation_create_full_schema() {
|
||||||
|
let env = ToolCallResponse {
|
||||||
|
request_id: RequestId::Integer(2),
|
||||||
|
is_error: Some(true),
|
||||||
|
result: Some(ToolCallResponseResult::ConversationCreate(
|
||||||
|
ConversationCreateResult::Error {
|
||||||
|
message: "Failed to initialize session".into(),
|
||||||
|
},
|
||||||
|
)),
|
||||||
|
};
|
||||||
|
let req_id = env.request_id.clone();
|
||||||
|
let observed = to_val(&CallToolResult::from(env));
|
||||||
|
let expected = json!({
|
||||||
|
"content": [
|
||||||
|
{ "type": "text", "text": "{\"message\":\"Failed to initialize session\"}" }
|
||||||
|
],
|
||||||
|
"isError": true,
|
||||||
|
"structuredContent": {
|
||||||
|
"message": "Failed to initialize session"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assert_eq!(
|
||||||
|
observed, expected,
|
||||||
|
"error response (ConversationCreate) must match"
|
||||||
|
);
|
||||||
|
assert_eq!(req_id, RequestId::Integer(2));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn response_success_conversation_stream_empty_result_object() {
|
fn response_success_conversation_stream_empty_result_object() {
|
||||||
let env = ToolCallResponse {
|
let env = ToolCallResponse {
|
||||||
|
|||||||
Reference in New Issue
Block a user