MCPcopy Create free account
hub / github.com/InfinitiBit/graphbit / complete

Method complete

core/src/llm/openai.rs:197–265  ·  view source on GitHub ↗
(&self, request: LlmRequest)

Source from the content-addressed store, hash-verified

195 }
196
197 async fn complete(&self, request: LlmRequest) -> GraphBitResult<LlmResponse> {
198 let url = format!("{}/chat/completions", self.base_url);
199
200 let messages: Vec<OpenAiMessage> =
201 request.messages.iter().map(Self::convert_message).collect();
202
203 let tools: Option<Vec<OpenAiTool>> = if request.tools.is_empty() {
204 None
205 } else {
206 Some(request.tools.iter().map(Self::convert_tool).collect())
207 };
208
209 let body = OpenAiRequest {
210 model: self.model.clone(),
211 messages,
212 max_completion_tokens: request.max_tokens,
213 temperature: request.temperature,
214 top_p: request.top_p,
215 tools: tools.clone(),
216 tool_choice: if tools.is_some() {
217 Some("auto".to_string())
218 } else {
219 None
220 },
221 stream: None, // Disable streaming for complete method
222 stream_options: None,
223 };
224
225 // Add extra parameters
226 let mut request_json = serde_json::to_value(&body)?;
227 if let serde_json::Value::Object(ref mut map) = request_json {
228 for (key, value) in request.extra_params {
229 map.insert(key, value);
230 }
231 }
232
233 let mut req_builder = self
234 .client
235 .post(&url)
236 .header("Authorization", format!("Bearer {}", self.api_key))
237 .header("Content-Type", "application/json")
238 .json(&request_json);
239
240 if let Some(org) = &self.organization {
241 req_builder = req_builder.header("OpenAI-Organization", org);
242 }
243
244 let response = req_builder
245 .send()
246 .await
247 .map_err(|e| GraphBitError::llm_provider("openai", format!("Request failed: {e}")))?;
248
249 if !response.status().is_success() {
250 let error_text = response
251 .text()
252 .await
253 .unwrap_or_else(|_| "Unknown error".to_string());
254 return Err(GraphBitError::llm_provider(

Callers

nothing calls this directly

Calls 6

cloneMethod · 0.80
to_stringMethod · 0.80
insertMethod · 0.80
is_emptyMethod · 0.45
is_successMethod · 0.45
parse_responseMethod · 0.45

Tested by

no test coverage detected