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

Method complete

core/src/llm/perplexity.rs:168–231  ·  view source on GitHub ↗
(&self, request: LlmRequest)

Source from the content-addressed store, hash-verified

166 }
167
168 async fn complete(&self, request: LlmRequest) -> GraphBitResult<LlmResponse> {
169 let url = format!("{}/chat/completions", self.base_url);
170
171 let messages: Vec<PerplexityMessage> =
172 request.messages.iter().map(Self::convert_message).collect();
173
174 let tools: Option<Vec<PerplexityTool>> = if request.tools.is_empty() {
175 None
176 } else {
177 Some(request.tools.iter().map(Self::convert_tool).collect())
178 };
179
180 let body = PerplexityRequest {
181 model: self.model.clone(),
182 messages,
183 max_tokens: request.max_tokens,
184 temperature: request.temperature,
185 top_p: request.top_p,
186 tools: tools.clone(),
187 tool_choice: if tools.is_some() {
188 Some("auto".to_string())
189 } else {
190 None
191 },
192 };
193
194 // Add extra parameters
195 let mut request_json = serde_json::to_value(&body)?;
196 if let serde_json::Value::Object(ref mut map) = request_json {
197 for (key, value) in request.extra_params {
198 map.insert(key, value);
199 }
200 }
201
202 let response = self
203 .client
204 .post(&url)
205 .header("Authorization", format!("Bearer {}", self.api_key))
206 .header("Content-Type", "application/json")
207 .header("Accept", "application/json")
208 .json(&request_json)
209 .send()
210 .await
211 .map_err(|e| {
212 GraphBitError::llm_provider("perplexity", format!("Request failed: {e}"))
213 })?;
214
215 if !response.status().is_success() {
216 let error_text = response
217 .text()
218 .await
219 .unwrap_or_else(|_| "Unknown error".to_string());
220 return Err(GraphBitError::llm_provider(
221 "perplexity",
222 format!("API error: {error_text}"),
223 ));
224 }
225

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