completion.rs

 1use anyhow::Result;
 2use futures::{future::BoxFuture, stream::BoxStream};
 3
 4use crate::{auth::CredentialProvider, models::LanguageModel};
 5
 6pub trait CompletionRequest: Send + Sync {
 7    fn data(&self) -> serde_json::Result<String>;
 8}
 9
10pub trait CompletionProvider: CredentialProvider {
11    fn base_model(&self) -> Box<dyn LanguageModel>;
12    fn complete(
13        &self,
14        prompt: Box<dyn CompletionRequest>,
15    ) -> BoxFuture<'static, Result<BoxStream<'static, Result<String>>>>;
16    fn box_clone(&self) -> Box<dyn CompletionProvider>;
17}
18
19impl Clone for Box<dyn CompletionProvider> {
20    fn clone(&self) -> Box<dyn CompletionProvider> {
21        self.box_clone()
22    }
23}