|
@@ -4,8 +4,8 @@ use std::time::Duration;
|
|
|
|
|
|
|
|
use api::{
|
|
use api::{
|
|
|
AnthropicClient, ApiError, ContentBlockDelta, ContentBlockDeltaEvent, ContentBlockStartEvent,
|
|
AnthropicClient, ApiError, ContentBlockDelta, ContentBlockDeltaEvent, ContentBlockStartEvent,
|
|
|
- InputContentBlock, InputMessage, MessageDeltaEvent, MessageRequest, OutputContentBlock,
|
|
|
|
|
- StreamEvent, ToolChoice, ToolDefinition,
|
|
|
|
|
|
|
+ ImageSource, InputContentBlock, InputMessage, MessageDeltaEvent, MessageRequest,
|
|
|
|
|
+ OutputContentBlock, StreamEvent, ToolChoice, ToolDefinition,
|
|
|
};
|
|
};
|
|
|
use serde_json::json;
|
|
use serde_json::json;
|
|
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
|
@@ -75,6 +75,39 @@ async fn send_message_posts_json_and_parses_response() {
|
|
|
assert_eq!(body["tool_choice"]["type"], json!("auto"));
|
|
assert_eq!(body["tool_choice"]["type"], json!("auto"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+#[test]
|
|
|
|
|
+fn image_content_blocks_serialize_with_base64_source() {
|
|
|
|
|
+ let request = MessageRequest {
|
|
|
|
|
+ model: "claude-3-7-sonnet-latest".to_string(),
|
|
|
|
|
+ max_tokens: 64,
|
|
|
|
|
+ messages: vec![InputMessage {
|
|
|
|
|
+ role: "user".to_string(),
|
|
|
|
|
+ content: vec![InputContentBlock::Image {
|
|
|
|
|
+ source: ImageSource {
|
|
|
|
|
+ kind: "base64".to_string(),
|
|
|
|
|
+ media_type: "image/png".to_string(),
|
|
|
|
|
+ data: "AQID".to_string(),
|
|
|
|
|
+ },
|
|
|
|
|
+ }],
|
|
|
|
|
+ }],
|
|
|
|
|
+ system: None,
|
|
|
|
|
+ tools: None,
|
|
|
|
|
+ tool_choice: None,
|
|
|
|
|
+ stream: false,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ let json = serde_json::to_value(request).expect("request should serialize");
|
|
|
|
|
+ assert_eq!(json["messages"][0]["content"][0]["type"], json!("image"));
|
|
|
|
|
+ assert_eq!(
|
|
|
|
|
+ json["messages"][0]["content"][0]["source"],
|
|
|
|
|
+ json!({
|
|
|
|
|
+ "type": "base64",
|
|
|
|
|
+ "media_type": "image/png",
|
|
|
|
|
+ "data": "AQID"
|
|
|
|
|
+ })
|
|
|
|
|
+ );
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
#[tokio::test]
|
|
#[tokio::test]
|
|
|
async fn stream_message_parses_sse_events_with_tool_use() {
|
|
async fn stream_message_parses_sse_events_with_tool_use() {
|
|
|
let state = Arc::new(Mutex::new(Vec::<CapturedRequest>::new()));
|
|
let state = Arc::new(Mutex::new(Vec::<CapturedRequest>::new()));
|