use crate::client::OpenModex;
use crate::error::Error;
use crate::types::{CompletionRequest, CompletionResponse};
#[derive(Debug)]
pub struct CompletionService<'a> {
client: &'a OpenModex,
}
impl<'a> CompletionService<'a> {
pub(crate) fn new(client: &'a OpenModex) -> Self {
Self { client }
}
pub async fn create(
&self,
mut req: CompletionRequest,
) -> Result<CompletionResponse, Error> {
if req.model.is_empty() {
if let Some(ref default) = self.client.default_model {
req.model = default.clone();
}
}
req.stream = Some(false);
let model = req.model.clone();
self.client
.with_fallback(&model, |m| {
let mut r = req.clone();
r.model = m;
let client = self.client;
async move { client.post("/completions", &r).await }
})
.await
}
}