mod call_options;
mod content;
mod finish_reason;
mod prompt;
mod result;
mod stream_part;
mod tool;
mod usage;
pub use call_options::{CallOptions, ReasoningEffort, ResponseFormat};
pub use content::{
Content, ReasoningPart, Source, ToolApprovalRequest, ToolOutputPart, ToolResult,
ToolResultOutput,
};
pub use finish_reason::{FinishReason, FinishReasonKind};
pub use prompt::{
AssistantPart, FilePart, Message, Prompt, TextPart, ToolApprovalResponsePart, ToolCallPart,
ToolMessagePart, ToolResultPart, UserPart,
};
pub use result::{
GenerateResponse, GenerateResult, ResponseMetadata, StreamResponse, StreamResult,
SupportedUrls, UrlPattern,
};
pub use stream_part::StreamPart;
pub use tool::{FunctionTool, ProviderTool, Tool, ToolChoice, ToolInputExample};
pub use usage::{InputTokenUsage, OutputTokenUsage, Usage};
use std::pin::Pin;
use async_trait::async_trait;
use futures::Stream;
use crate::error::Result;
pub type BoxStream<T> = Pin<Box<dyn Stream<Item = T> + Send>>;
#[async_trait]
pub trait LanguageModel: Send + Sync + std::fmt::Debug {
fn provider(&self) -> &str;
fn model_id(&self) -> &str;
fn specification_version(&self) -> &'static str {
"v4"
}
async fn supported_urls(&self) -> SupportedUrls {
SupportedUrls::default()
}
async fn do_generate(&self, options: CallOptions) -> Result<GenerateResult>;
async fn do_stream(&self, options: CallOptions) -> Result<StreamResult>;
}