llm_sdk/
language_model.rs1use crate::{
2    boxed_stream::BoxedStream, LanguageModelCapability, LanguageModelInput, LanguageModelPricing,
3    LanguageModelResult, ModelResponse, PartialModelResponse,
4};
5use futures::future::BoxFuture;
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Serialize, Deserialize, Default)]
9pub struct LanguageModelMetadata {
10    pub pricing: Option<LanguageModelPricing>,
11    pub capabilities: Option<Vec<LanguageModelCapability>>,
12}
13
14pub trait LanguageModel: Send + Sync {
15    fn provider(&self) -> &'static str;
16    fn model_id(&self) -> String;
17    fn metadata(&self) -> Option<&LanguageModelMetadata>;
18    fn generate(
19        &self,
20        input: LanguageModelInput,
21    ) -> BoxFuture<'_, LanguageModelResult<ModelResponse>>;
22    fn stream(
23        &self,
24        input: LanguageModelInput,
25    ) -> BoxFuture<'_, LanguageModelResult<LanguageModelStream>>;
26}
27
28pub type LanguageModelStream = BoxedStream<'static, LanguageModelResult<PartialModelResponse>>;