omni_llm_kit/models/openai_provider/
provider.rs

1use crate::http_client::HttpClient;
2use crate::model::{
3    LanguageModel, LanguageModelProvider, LanguageModelProviderId, LanguageModelProviderName,
4};
5use crate::models::openai_provider::openai_model::{
6     OPEN_AI_PROVIDER_ID, OPEN_AI_PROVIDER_NAME, OpenAiLanguageModel,
7};
8use std::sync::{Arc, Mutex};
9use crate::openai;
10
11const PROVIDER_ID: LanguageModelProviderId = OPEN_AI_PROVIDER_ID;
12const PROVIDER_NAME: LanguageModelProviderName = OPEN_AI_PROVIDER_NAME;
13
14#[derive(Default, Clone, Debug, PartialEq)]
15pub struct OpenAiSettings {
16    pub api_url: String,
17    pub api_key: String,
18}
19pub struct OpenAiLanguageModelProvider {
20    http_client: Arc<dyn HttpClient>,
21}
22
23impl OpenAiLanguageModelProvider {
24    pub fn new(client: Arc<dyn HttpClient>) -> Self {
25        Self {
26            http_client: client,
27            // state: State::new(),
28        }
29    }
30    pub fn create_language_model(&self, model: openai::Model) -> Arc<dyn LanguageModel> {
31        Arc::new(OpenAiLanguageModel {
32            id: model.id().to_string().into(),
33            model,
34            http_client: self.http_client.clone(),
35            // state: self.state.clone(),
36        })
37    }
38}
39#[async_trait::async_trait]
40impl LanguageModelProvider for OpenAiLanguageModelProvider {
41    fn id(&self) -> LanguageModelProviderId {
42        PROVIDER_ID
43    }
44
45    fn name(&self) -> LanguageModelProviderName {
46        PROVIDER_NAME
47    }
48
49    fn default_model(&self) -> Option<Arc<dyn LanguageModel>> {
50        todo!()
51    }
52
53    fn provided_models(&self) -> Vec<Arc<dyn LanguageModel>> {
54        todo!()
55    }
56    fn default_fast_model(&self) -> Option<Arc<dyn LanguageModel>> {
57        todo!()
58    }
59
60    // async fn authenticate(&self) -> anyhow::Result<()> {
61    //     self.state.authenticate().await?;
62    //     Ok(())
63    // }
64}