use crate::client::{Idempotency, Skailar};
use crate::error::Error;
use crate::streaming::ChatCompletionStream;
use crate::types::chat::{ChatCompletionRequest, ChatCompletionResponse};
#[derive(Debug, Clone, Copy)]
pub struct Chat<'a> {
client: &'a Skailar,
}
impl<'a> Chat<'a> {
pub(crate) fn new(client: &'a Skailar) -> Self {
Chat { client }
}
pub fn completions(&self) -> Completions<'a> {
Completions {
client: self.client,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct Completions<'a> {
client: &'a Skailar,
}
impl Completions<'_> {
pub async fn create(
&self,
request: ChatCompletionRequest,
) -> Result<ChatCompletionResponse, Error> {
self.client
.post_json("v1/chat/completions", &request, Idempotency::SideEffect)
.await
}
pub async fn create_stream(
&self,
mut request: ChatCompletionRequest,
) -> Result<ChatCompletionStream, Error> {
request.stream = Some(true);
self.client
.post_stream("v1/chat/completions", &request)
.await
}
}