Skip to main content

serdes_ai_core/
lib.rs

1//! # serdes-ai-core
2//!
3//! Core types, messages, and error handling for the serdes-ai framework.
4//!
5//! This crate provides the foundational types used throughout the serdes-ai ecosystem:
6//!
7//! - **Messages**: Request/response message types for LLM interactions
8//! - **Errors**: Comprehensive error types with context
9//! - **Usage**: Token usage tracking and limits
10//! - **Settings**: Model configuration options
11//! - **Identifiers**: Type-safe IDs for conversations, messages, runs
12//!
13//! ## Feature Flags
14//!
15//! - `tracing-integration`: Enable tracing instrumentation
16//! - `otel`: Enable OpenTelemetry integration
17//! - `full`: Enable all optional features
18//!
19//! ## Example
20//!
21//! ```rust
22//! use serdes_ai_core::{
23//!     messages::{ModelRequest, ModelResponse, UserContent},
24//!     usage::{RequestUsage, RunUsage, UsageLimits},
25//!     settings::ModelSettings,
26//!     identifier::{generate_run_id, now_utc},
27//! };
28//!
29//! // Build a request
30//! let mut request = ModelRequest::new();
31//! request.add_system_prompt("You are a helpful assistant.");
32//! request.add_user_prompt("Hello!");
33//!
34//! // Configure settings
35//! let settings = ModelSettings::new()
36//!     .max_tokens(1000)
37//!     .temperature(0.7);
38//!
39//! // Track usage
40//! let mut usage = RunUsage::new();
41//! usage.add_request(RequestUsage::with_tokens(100, 50));
42//!
43//! // Check limits
44//! let limits = UsageLimits::new().max_total_tokens(10000);
45//! limits.check(&usage).expect("Within limits");
46//! ```
47
48#![warn(missing_docs)]
49#![warn(rustdoc::missing_crate_level_docs)]
50#![deny(unsafe_code)]
51#![cfg_attr(docsrs, feature(doc_cfg))]
52
53pub mod errors;
54pub mod format;
55pub mod identifier;
56pub mod messages;
57pub mod settings;
58pub mod usage;
59
60// Re-exports for convenience
61pub use errors::{Result, SerdesAiError};
62pub use format::{format_as_xml, format_as_xml_with_options, XmlFormatError, XmlFormatOptions};
63pub use identifier::{now_utc, ConversationId, RunId, ToolCallId};
64pub use messages::{
65    BinaryContent,
66    // Builtin tools (web search, code execution, file search)
67    BuiltinToolCallPart,
68    BuiltinToolReturnContent,
69    BuiltinToolReturnPart,
70    CodeExecutionResult,
71    // File and binary content
72    FilePart,
73    FileSearchResult,
74    FileSearchResults,
75    FinishReason,
76    // Core request/response
77    ModelRequest,
78    ModelRequestPart,
79    ModelResponse,
80    ModelResponsePart,
81    ModelResponsePartDelta,
82    // Streaming events
83    ModelResponseStreamEvent,
84    PartDeltaEvent,
85    PartEndEvent,
86    PartStartEvent,
87    SystemPromptPart,
88    // Text and thinking
89    TextPart,
90    ThinkingPart,
91    // Tool calls and returns
92    ToolCallPart,
93    ToolReturnPart,
94    UserContent,
95    UserContentPart,
96    UserPromptPart,
97    WebSearchResult,
98    WebSearchResults,
99};
100pub use settings::ModelSettings;
101pub use usage::{RequestUsage, RunUsage, UsageLimits};
102
103/// Prelude module for common imports.
104///
105/// ```rust
106/// use serdes_ai_core::prelude::*;
107/// ```
108pub mod prelude {
109    pub use crate::errors::{Result, SerdesAiError};
110    pub use crate::format::{format_as_xml, format_as_xml_with_options, XmlFormatOptions};
111    pub use crate::identifier::{
112        generate_run_id, generate_tool_call_id, now_utc, ConversationId, RunId, ToolCallId,
113    };
114    pub use crate::messages::{
115        BinaryContent,
116        // Builtin tools
117        BuiltinToolCallPart,
118        BuiltinToolReturnContent,
119        BuiltinToolReturnPart,
120        CodeExecutionResult,
121        // File and binary content
122        FilePart,
123        FileSearchResult,
124        FileSearchResults,
125        // Core request/response
126        FinishReason,
127        ModelRequest,
128        ModelRequestPart,
129        ModelResponse,
130        ModelResponsePart,
131        ModelResponsePartDelta,
132        // Streaming
133        ModelResponseStreamEvent,
134        SystemPromptPart,
135        TextPart,
136        ThinkingPart,
137        ToolCallArgs,
138        ToolCallPart,
139        ToolReturnPart,
140        UserContent,
141        UserContentPart,
142        UserPromptPart,
143        WebSearchResult,
144        WebSearchResults,
145    };
146    pub use crate::settings::ModelSettings;
147    pub use crate::usage::{RequestUsage, RunUsage, UsageLimits};
148}