flashmind_types/lib.rs
1//! Shared types for the Flashmind AI agent framework.
2//!
3//! This crate defines the traits, wire types, and event structures shared by all
4//! Flashmind crates. It is the foundation that both library consumers and provider
5//! implementations depend on.
6//!
7//! # Core traits
8//!
9//! | Trait | Purpose |
10//! |-------|---------|
11//! | [`LlmProvider`] | Streaming completions from any LLM backend |
12//! | [`Tool`] | Function-calling tools the agent can invoke |
13//! | [`MemoryProvider`] | Store/search/forget long-term memories |
14//!
15//! # Modules
16//!
17//! | Module | Types |
18//! |--------|-------|
19//! | [`event`] | [`AgentEvent`], [`AgentInput`], [`TurnStatus`], [`TurnUsage`] — telemetry |
20//! | [`llm`] | [`LlmProvider`], [`CompletionRequest`], [`StreamEvent`], [`FinishReason`] |
21//! | [`memory`] | [`MemoryEntry`], [`MemoryMetadata`], [`MemoryProvider`] |
22//! | [`message`] | [`Message`], [`Role`], [`ToolCall`], [`ContentPart`] — LLM wire format |
23//! | [`model`] | [`Model`], [`Provider`], [`SamplingParams`], [`ReasoningLevel`] |
24//! | [`tool`] | [`Tool`], [`ToolRegistry`], [`ToolContext`], [`ToolResult`](tool::ToolResult) |
25//! | [`stream`] | [`AgentStream`], [`Outcome`] — stream-with-final-result pattern |
26//! | [`utils`] | UTF-8-safe string truncation helpers |
27//!
28//! # Example: implementing a provider
29//!
30//! ```rust
31//! use async_trait::async_trait;
32//! use flashmind_types::{
33//! CompletionRequest, CompletionStream, LlmProvider, Provider, StreamEvent, FinishReason,
34//! };
35//!
36//! struct MyProvider;
37//!
38//! #[async_trait]
39//! impl LlmProvider for MyProvider {
40//! fn name(&self) -> &str { "my-provider" }
41//! fn provider(&self) -> Provider { Provider::OpenAi }
42//!
43//! fn complete(&self, _request: CompletionRequest) -> CompletionStream {
44//! Box::pin(async_stream::stream! {
45//! yield Ok(StreamEvent::ContentDelta("Hello!".into()));
46//! yield Ok(StreamEvent::Finished(FinishReason::Stop));
47//! })
48//! }
49//! }
50//! ```
51
52pub mod error;
53pub mod event;
54pub mod humanize;
55pub mod interaction_mode;
56pub mod llm;
57pub mod memory;
58pub mod message;
59pub mod model;
60pub mod session;
61pub mod stream;
62pub mod tool;
63pub mod utils;
64pub use error::{LlmError, LlmErrorKind, ParseError};
65pub use event::{
66 AgentEvent, AgentInput, CompactionReason, Source, TurnResult, TurnStatus, TurnUsage,
67};
68pub use interaction_mode::InteractionMode;
69pub use llm::{
70 AudioFormat, AudioOutputConfig, CompletionRequest, CompletionResponse, CompletionStream,
71 FinishReason, FrameImage, ImageGenConfig, ImageGenRequest, LlmProvider, Modality,
72 ModelCapabilities, ModelCategory, ModelInfo, ModelPricing, ProviderRegistry, StreamEvent,
73 SttRequest, TokenUsage, ToolDefinition, TtsRequest, VideoGenRequest, Voice,
74 mime_from_extension,
75};
76pub use memory::{MemoryEntry, MemoryMetadata, MemoryProvider};
77pub use message::{ContentPart, Message, Role, ToolCall, ToolResult};
78pub use model::{
79 AgentLlmConfig, AliasedModel, Model, Provider, ProviderPreferences, ProviderSort, Quantization,
80 ReasoningLevel, SamplingParams,
81};
82pub use session::{SessionId, SessionIdError, SessionUsage};
83pub use stream::{AgentStream, Outcome};
84pub use tool::{ForbiddenCmd, Tool, ToolContext, ToolRegistry};
85
86/// Minimum length for a secret value to be redacted from output.
87///
88/// Secrets shorter than this are left as-is to avoid false positives.
89pub const MIN_SECRET_REDACT_LEN: usize = 8;