(&self, request: ChatRequest)
| 114 | } |
| 115 | |
| 116 | fn convert_request(&self, request: ChatRequest) -> VertexRequest { |
| 117 | let mut contents = Vec::new(); |
| 118 | let mut system_instruction = None; |
| 119 | |
| 120 | for msg in request.messages { |
| 121 | match msg.role { |
| 122 | Role::System => { |
| 123 | if let Content::Text(text) = msg.content { |
| 124 | system_instruction = Some(VertexContent { |
| 125 | parts: vec![VertexPart::text(&text)], |
| 126 | role: "user".to_string(), |
| 127 | }); |
| 128 | } |
| 129 | } |
| 130 | Role::User => { |
| 131 | let parts = self.content_to_parts(&msg.content); |
| 132 | contents.push(VertexContent { |
| 133 | parts, |
| 134 | role: "user".to_string(), |
| 135 | }); |
| 136 | } |
| 137 | Role::Assistant => { |
| 138 | let parts = self.content_to_parts(&msg.content); |
| 139 | contents.push(VertexContent { |
| 140 | parts, |
| 141 | role: "model".to_string(), |
| 142 | }); |
| 143 | } |
| 144 | Role::Tool => { |
| 145 | // Tool messages are handled as user messages with function response |
| 146 | if let Content::Parts(parts) = msg.content { |
| 147 | let vertex_parts: Vec<VertexPart> = parts |
| 148 | .into_iter() |
| 149 | .filter_map(|p| { |
| 150 | p.tool_result.map(|tr| { |
| 151 | VertexPart::function_response(&tr.tool_use_id, &tr.content) |
| 152 | }) |
| 153 | }) |
| 154 | .collect(); |
| 155 | if !vertex_parts.is_empty() { |
| 156 | contents.push(VertexContent { |
| 157 | parts: vertex_parts, |
| 158 | role: "user".to_string(), |
| 159 | }); |
| 160 | } |
| 161 | } |
| 162 | } |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | let generation_config = VertexGenerationConfig { |
| 167 | max_output_tokens: request.max_tokens, |
| 168 | temperature: request.temperature, |
| 169 | top_p: request.top_p, |
| 170 | }; |
| 171 | |
| 172 | VertexRequest { |
| 173 | contents, |
no test coverage detected