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}