use async_trait::async_trait;
use futures::stream::BoxStream;
use super::base::{BaseLLM, ChatCompletion, ChatCompletionChunk, LlmOpts, Message};
use super::config::GeminiConfig;
use crate::core::exceptions::OperonError;
pub struct GeminiLlm {
pub config: GeminiConfig,
}
impl GeminiLlm {
pub fn new(config: GeminiConfig) -> Self {
Self { config }
}
}
#[async_trait]
impl BaseLLM for GeminiLlm {
async fn generate(
&self,
_messages: Vec<Message>,
_opts: &LlmOpts,
) -> Result<ChatCompletion, OperonError> {
Err(OperonError::Provider(format!(
"GeminiLlm::generate not yet implemented (Phase 5b) — project={}, model={}",
self.config.project_id, self.config.model
)))
}
async fn stream(
&self,
_messages: Vec<Message>,
_opts: &LlmOpts,
) -> Result<BoxStream<'static, Result<ChatCompletionChunk, OperonError>>, OperonError> {
Err(OperonError::Provider(
"GeminiLlm::stream not yet implemented (Phase 5b)".into(),
))
}
}