completion.rs

 1use anyhow::Result;
 2use futures::{future::BoxFuture, stream::BoxStream};
 3use gpui::AppContext;
 4
 5use crate::{
 6    auth::{CredentialProvider, ProviderCredential},
 7    models::LanguageModel,
 8};
 9
10pub trait CompletionRequest: Send + Sync {
11    fn data(&self) -> serde_json::Result<String>;
12}
13
14pub trait CompletionProvider {
15    fn base_model(&self) -> Box<dyn LanguageModel>;
16    fn credential_provider(&self) -> Box<dyn CredentialProvider>;
17    fn retrieve_credentials(&self, cx: &AppContext) -> ProviderCredential {
18        self.credential_provider().retrieve_credentials(cx)
19    }
20    fn save_credentials(&self, cx: &AppContext, credential: ProviderCredential) {
21        self.credential_provider().save_credentials(cx, credential);
22    }
23    fn delete_credentials(&self, cx: &AppContext) {
24        self.credential_provider().delete_credentials(cx);
25    }
26    fn complete(
27        &self,
28        prompt: Box<dyn CompletionRequest>,
29    ) -> BoxFuture<'static, Result<BoxStream<'static, Result<String>>>>;
30}