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>>;