(&self, request: ChatRequest)
| 98 | } |
| 99 | |
| 100 | fn convert_request(&self, request: ChatRequest) -> AnthropicRequest { |
| 101 | let max_tokens = request.max_tokens.unwrap_or(4096); |
| 102 | let mut messages = Vec::new(); |
| 103 | let mut system = None; |
| 104 | |
| 105 | for msg in request.messages { |
| 106 | match msg.role { |
| 107 | crate::Role::System => { |
| 108 | if let crate::Content::Text(text) = msg.content { |
| 109 | system = Some(text); |
| 110 | } |
| 111 | } |
| 112 | _ => { |
| 113 | messages.push(AnthropicMessage { |
| 114 | role: match msg.role { |
| 115 | crate::Role::User => "user".to_string(), |
| 116 | crate::Role::Assistant => "assistant".to_string(), |
| 117 | _ => "user".to_string(), |
| 118 | }, |
| 119 | content: match msg.content { |
| 120 | crate::Content::Text(text) => vec![AnthropicContent::Text { text }], |
| 121 | crate::Content::Parts(parts) => parts |
| 122 | .into_iter() |
| 123 | .filter_map(|p| { |
| 124 | if let Some(text) = p.text { |
| 125 | Some(AnthropicContent::Text { text }) |
| 126 | } else { |
| 127 | None |
| 128 | } |
| 129 | }) |
| 130 | .collect(), |
| 131 | }, |
| 132 | }); |
| 133 | } |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | AnthropicRequest { |
| 138 | model: request.model, |
| 139 | max_tokens, |
| 140 | messages, |
| 141 | system, |
| 142 | stream: request.stream, |
| 143 | thinking: anthropic_thinking_config(request.variant.as_deref(), max_tokens), |
| 144 | } |
| 145 | } |
| 146 | } |
| 147 | |
| 148 | #[async_trait] |
no test coverage detected