MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / convert_request

Method convert_request

crates/opencode-provider/src/vertex.rs:116–178  ·  view source on GitHub ↗
(&self, request: ChatRequest)

Source from the content-addressed store, hash-verified

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,

Callers 2

chatMethod · 0.45
chat_streamMethod · 0.45

Calls 3

newFunction · 0.85
content_to_partsMethod · 0.80
is_emptyMethod · 0.80

Tested by

no test coverage detected