extern crate self as rstructor;
mod backend;
pub mod error;
#[cfg(feature = "logging")]
pub mod logging;
pub mod model;
pub mod schema;
pub use error::{ApiErrorKind, RStructorError, Result};
pub use model::Instructor;
pub use schema::{CustomTypeSchema, Schema, SchemaBuilder, SchemaType};
#[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};
pub use backend::{
ChatMessage, ChatRole, GenerateResult, MaterializeResult, MediaFile, 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};