pub trait LanguageModel: Send + Sync {
    // Required methods
    fn provider(&self) -> &'static str;
    fn model_id(&self) -> String;
    fn metadata(&self) -> Option<&LanguageModelMetadata>;
    fn generate(
        &self,
        input: LanguageModelInput,
    ) -> BoxFuture<'_, LanguageModelResult<ModelResponse>>;
    fn stream(
        &self,
        input: LanguageModelInput,
    ) -> BoxFuture<'_, LanguageModelResult<LanguageModelStream>>;
}