Skip to main content

ferrin_message/
lib.rs

1//! Ferrin application-level messages.
2//!
3//! - [`Message`] and its role structs: the conversation model applications
4//!   build and persist. Content may be a plain string or a list of parts.
5//! - Part types: [`UserPart`], [`AssistantPart`], [`ToolPart`] and the
6//!   application-only parts [`ImagePart`], [`FilePart`],
7//!   [`ReasoningFilePart`], [`ToolApprovalRequest`],
8//!   [`ToolApprovalResponse`]. Parts whose shape equals the provider
9//!   specification (`TextPart`, `ReasoningPart`, `CustomPart`,
10//!   `ToolCallPart`, `ToolResultPart`, `ToolResultOutput`) are re-exported
11//!   from `ferrin_spec`.
12//! - [`FileSource`]: application file payloads (bytes, base64, URL, provider
13//!   reference, inline text, local path) plus [`data_url`] parsing.
14//! - [`prune`]: removal of reasoning, tool calls and empty messages from a
15//!   history.
16//!
17//! Conversion to the provider `Prompt` (downloads, media type detection)
18//! lives in the core crate.
19//!
20//! Design: `docs/01-architecture/03-core-data-model.md` ยง7,
21//! `docs/01-architecture/05-prompt-conversion.md`.
22//!
23//! # Attribution
24//!
25//! Portions of this crate are derived from the Vercel AI SDK (Apache-2.0,
26//! Copyright 2023 Vercel, Inc.), translated from TypeScript to Rust and
27//! modified. See the `NOTICE` file in the crate root.
28
29pub mod data_url;
30mod error;
31mod file_source;
32mod message;
33mod part;
34pub mod prune;
35
36pub use data_url::DataUrl;
37pub use error::FileSourceError;
38pub use error::InvalidDataContentError;
39pub use ferrin_spec::ApprovalId;
40pub use ferrin_spec::FileData;
41pub use ferrin_spec::MediaType;
42pub use ferrin_spec::ProviderOptions;
43pub use ferrin_spec::ProviderReference;
44pub use ferrin_spec::ToolCallId;
45pub use ferrin_spec::ToolName;
46pub use ferrin_spec::language_model::prompt::CustomPart;
47pub use ferrin_spec::language_model::prompt::ReasoningPart;
48pub use ferrin_spec::language_model::prompt::TextPart;
49pub use ferrin_spec::language_model::prompt::ToolCallPart;
50pub use ferrin_spec::language_model::prompt::ToolResultContentPart;
51pub use ferrin_spec::language_model::prompt::ToolResultOutput;
52pub use ferrin_spec::language_model::prompt::ToolResultPart;
53pub use file_source::FileSource;
54pub use message::AssistantContent;
55pub use message::AssistantMessage;
56pub use message::Message;
57pub use message::MessagesExt;
58pub use message::Role;
59pub use message::SystemMessage;
60pub use message::ToolMessage;
61pub use message::UserContent;
62pub use message::UserMessage;
63pub use part::AssistantPart;
64pub use part::FilePart;
65pub use part::ImagePart;
66pub use part::ReasoningFilePart;
67pub use part::ToolApprovalRequest;
68pub use part::ToolApprovalResponse;
69pub use part::ToolPart;
70pub use part::UserPart;
71pub use prune::PruneOptions;