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

Method do_generate

crates/opencode-provider/src/responses.rs:1274–1391  ·  view source on GitHub ↗
(
        &self,
        options: GenerateOptions,
    )

Source from the content-addressed store, hash-verified

1272 }
1273
1274 pub async fn do_generate(
1275 &self,
1276 options: GenerateOptions,
1277 ) -> Result<ResponsesGenerateResult, ProviderError> {
1278 let prepared = self.get_args(&options).await?;
1279 let url = (self.config.url)("/responses", &self.model_id);
1280 let headers = self.build_headers("application/json");
1281 let request_body = serde_json::to_string(&prepared.body)
1282 .map_err(|e| ProviderError::InvalidRequest(format!("failed to encode body: {}", e)))?;
1283
1284 let (status_code, raw) = if let Some(proxy) = get_custom_fetch_proxy(&self.config.provider)
1285 {
1286 let response = proxy
1287 .fetch(CustomFetchRequest {
1288 url,
1289 method: "POST".to_string(),
1290 headers: headers.clone(),
1291 body: Some(request_body),
1292 })
1293 .await?;
1294 (response.status, response.body)
1295 } else {
1296 let client = self.config.client.clone().unwrap_or_default();
1297 let mut request = client.post(url);
1298 for (k, v) in &headers {
1299 request = request.header(k, v);
1300 }
1301 let response = request
1302 .body(request_body)
1303 .send()
1304 .await
1305 .map_err(|e| ProviderError::NetworkError(e.to_string()))?;
1306 let status = response.status().as_u16();
1307 let body = response
1308 .text()
1309 .await
1310 .map_err(|e| {
1311 let mut msg = e.to_string();
1312 let mut source = std::error::Error::source(&e);
1313 while let Some(cause) = source {
1314 msg.push_str(": ");
1315 msg.push_str(&cause.to_string());
1316 source = cause.source();
1317 }
1318 ProviderError::ApiError(msg)
1319 })?;
1320 (status, body)
1321 };
1322 if status_code >= 400 {
1323 return Err(ProviderError::ApiErrorWithStatus {
1324 message: raw,
1325 status_code,
1326 });
1327 }
1328
1329 let body: Value = serde_json::from_str(&raw)
1330 .map_err(|e| ProviderError::ApiError(format!("invalid responses payload: {}", e)))?;
1331

Callers 3

chatMethod · 0.80
chatMethod · 0.80

Calls 14

get_custom_fetch_proxyFunction · 0.85
parse_output_itemsFunction · 0.85
newFunction · 0.85
get_argsMethod · 0.80
is_emptyMethod · 0.80
ApiErrorEnum · 0.50
build_headersMethod · 0.45
fetchMethod · 0.45
cloneMethod · 0.45
sendMethod · 0.45
statusMethod · 0.45