extern crate self as rstructor;
mod backend;
#[cfg(any(feature = "_client", feature = "mock"))]
mod decode;
pub mod error;
#[cfg(feature = "logging")]
pub mod logging;
pub mod model;
pub mod schema;
#[cfg(feature = "schemars")]
mod schemars_bridge;
pub use error::{ApiErrorKind, RStructorError, Result, StreamErrorKind};
pub use model::Instructor;
pub use schema::{CustomTypeSchema, Schema, SchemaBuilder, SchemaType};
#[cfg(feature = "schemars")]
pub use schemars_bridge::Schemars;
#[cfg(feature = "openai")]
pub use backend::openai::{Model as OpenAIModel, OpenAIClient};
#[cfg(feature = "anthropic")]
pub use backend::anthropic::{AnthropicClient, AnthropicModel};
#[cfg(feature = "gemini")]
pub use backend::gemini::{GeminiClient, Model as GeminiModel};
#[cfg(feature = "grok")]
pub use backend::grok::{GrokClient, Model as GrokModel};
#[cfg(feature = "derive")]
pub use rstructor_derive::Instructor;
pub use backend::LLMClient;
pub use backend::ModelInfo;
pub use backend::ThinkingLevel;
#[cfg(feature = "_client")]
pub use backend::{
AnyClient, Provider, Request, RequestExt, client, client_from_env, parse_client_spec,
};
pub use backend::{
AttemptKind, AttemptOutcome, AttemptRecord, ChatMessage, ChatRole, GenerateResult,
MaterializeFailure, MaterializeReport, MaterializeResult, MediaFile, RetryDisposition,
RunUsage, TokenUsage,
};
#[cfg(feature = "_client")]
pub use backend::{DEFAULT_CONNECT_TIMEOUT, DEFAULT_REQUEST_TIMEOUT};
#[cfg(feature = "tools")]
pub use backend::{DynTool, FnTool, Tool, ToolRunner, Toolbox};
#[cfg(feature = "streaming")]
pub use backend::{ItemStream, ObjectStream, StreamedObject, TextStream};
#[cfg(feature = "mock")]
pub use backend::{MockClient, MockRequestView, MockResponse, RecordedRequest, RequestKind};