portkey_sdk/service/completions.rs
1//! Completions API service.
2//!
3//! Provides access to the legacy completions endpoint.
4
5use std::future::Future;
6
7use crate::client::PortkeyClient;
8use crate::error::Result;
9use crate::model::{CompletionResponse, CreateCompletionRequest};
10
11/// Service trait for completions operations.
12pub trait CompletionsService {
13 /// Create a completion for the provided prompt and parameters.
14 ///
15 /// # Arguments
16 ///
17 /// * `request` - The completion request parameters
18 ///
19 /// # Example
20 ///
21 /// ```no_run
22 /// # use portkey_sdk::{PortkeyConfig, PortkeyClient, Result};
23 /// # use portkey_sdk::service::CompletionsService;
24 /// # use portkey_sdk::model::{CreateCompletionRequest, CompletionPrompt};
25 /// # async fn example() -> Result<()> {
26 /// let config = PortkeyConfig::from_env()?;
27 /// let client = PortkeyClient::new(config)?;
28 ///
29 /// let request = CreateCompletionRequest {
30 /// model: "gpt-3.5-turbo-instruct".to_string(),
31 /// prompt: Some(CompletionPrompt::String("Say this is a test".to_string())),
32 /// max_tokens: Some(100),
33 /// temperature: Some(0.7),
34 /// ..Default::default()
35 /// };
36 ///
37 /// let response = client.create_completion(request).await?;
38 /// println!("Completion: {}", response.choices[0].text);
39 /// # Ok(())
40 /// # }
41 /// ```
42 fn create_completion(
43 &self,
44 request: CreateCompletionRequest,
45 ) -> impl Future<Output = Result<CompletionResponse>>;
46}
47
48impl CompletionsService for PortkeyClient {
49 #[cfg_attr(
50 feature = "tracing",
51 tracing::instrument(skip(self, request), fields(model = %request.model))
52 )]
53 async fn create_completion(
54 &self,
55 request: CreateCompletionRequest,
56 ) -> Result<CompletionResponse> {
57 #[cfg(feature = "tracing")]
58 tracing::debug!(
59 target: crate::TRACING_TARGET_SERVICE,
60 "Creating completion"
61 );
62
63 let response = self
64 .send_json(reqwest::Method::POST, "/completions", &request)
65 .await?
66 .error_for_status()?
67 .json::<CompletionResponse>()
68 .await?;
69
70 #[cfg(feature = "tracing")]
71 tracing::info!(
72 target: crate::TRACING_TARGET_SERVICE,
73 id = %response.id,
74 choices = response.choices.len(),
75 "Completion created successfully"
76 );
77
78 Ok(response)
79 }
80}
81
82// Add Default impl for CreateCompletionRequest
83impl Default for CreateCompletionRequest {
84 fn default() -> Self {
85 Self {
86 model: String::new(),
87 prompt: None,
88 max_tokens: Some(16),
89 temperature: Some(1.0),
90 top_p: Some(1.0),
91 n: Some(1),
92 stream: Some(false),
93 logprobs: None,
94 echo: Some(false),
95 stop: None,
96 frequency_penalty: Some(0.0),
97 presence_penalty: Some(0.0),
98 best_of: Some(1),
99 logit_bias: None,
100 user: None,
101 suffix: None,
102 seed: None,
103 }
104 }
105}