Skip to main content

rpi_ai/
lib.rs

1//! Mirrors `packages/ai/src` — the unified, multi-provider LLM layer.
2//!
3//! Provider-agnostic types (`Content`, `Message`, `AssistantMessage`,
4//! `AssistantMessageEvent`, `Context`, `Tool`, `Usage`) live in [`types`];
5//! model-layer configuration (`Model`, compat structs) lives in [`model`].
6//! Schema validation + LLM-sloppy-JSON coercion (mirroring `validation.ts`) is
7//! in [`schema`]; the SPSC streaming queue mirroring `event-stream.ts` is in
8//! [`event_stream`]; the `Provider` trait seam is in [`provider`]; concrete
9//! providers live under [`providers`] (faux now, anthropic in M3).
10//!
11//! Every module's doc comment names the TS file it mirrors.
12
13#![forbid(unsafe_code)]
14
15pub mod constrained;
16pub mod error;
17pub mod event_stream;
18pub mod frames;
19#[cfg(feature = "providers")]
20pub mod http;
21#[cfg(feature = "providers")]
22pub mod images;
23pub mod json_parse;
24pub mod model;
25pub mod provider;
26pub mod providers;
27pub mod schema;
28pub(crate) mod strict_schema;
29pub mod types;
30
31// Flat re-exports — consumers do `use rpi_ai::Message` not `rpi_ai::types::Message`.
32pub use error::AiError;
33pub use event_stream::{AssistantMessageEventStream, AssistantMessageEventStreamProducer};
34pub use model::{Model, StreamingProtocolCompat};
35pub use provider::{
36    CacheRetention, ContextPatch, NoopProviderHooks, Provider, ProviderHooks, SimpleStreamOptions,
37    SimpleStreamOptionsPatch, DEFAULT_LLM_API_TIMEOUT,
38};
39pub use schema::validate_tool_arguments;
40pub use types::{
41    Api, AssistantMessage, AssistantMessageEvent, Content, Context, DeferredHandle, DoneReason,
42    ErrorReason, ImageContent, InputModality, Message, ModelCost, ModelCostRates, ModelCostTier,
43    ProviderId, Schema, StopReason, TextContent, ThinkingBudgets, ThinkingContent, ThinkingLevel,
44    ThinkingLevelMap, Tool, ToolCall, ToolCallType, ToolResultMessage, Usage, UsageCost,
45    UserContent, UserMessage,
46};