Skip to main content

everruns_provider/
lib.rs

1//! Lean provider and LLM abstractions shared by the
2//! [Everruns Framework](https://docs.everruns.com/framework/) and provider crates.
3//!
4//! This crate owns credential-free model identity, the [`ChatDriver`] boundary,
5//! provider assembly, shared protocol drivers, stream/retry helpers, model
6//! profiles, typed IDs, credential schemas, and the LLM error taxonomy. It is a
7//! focused implementation crate in the [Everruns](https://everruns.com)
8//! ecosystem; application authors normally use its re-exports through
9//! `everruns`.
10//!
11//! # Example
12//!
13//! ```
14//! use everruns_provider::ModelSpec;
15//!
16//! let model = ModelSpec::on("company-gateway", "assistant-v2");
17//! assert_eq!(model.provider.as_str(), "company-gateway");
18//! assert_eq!(model.model, "assistant-v2");
19//! ```
20
21pub mod credential_schema;
22pub mod driver_helpers;
23pub mod driver_registry;
24pub mod error;
25pub mod execution_phase;
26pub mod llm_retry;
27pub mod model;
28pub mod model_discovery;
29pub mod model_profiles;
30pub mod model_spec;
31pub mod openai_protocol;
32pub mod openresponses_protocol;
33pub mod openresponses_types;
34pub mod provider;
35pub mod runtime_provider;
36pub mod stream_accumulator;
37pub mod stream_reconnect;
38pub mod tool_schema_compat;
39pub mod tool_types;
40pub mod typed_id;
41pub mod url_validation;
42pub mod user_facing_error;
43
44// ============================================================================
45// Convenience root re-exports
46//
47// Mirror the root-level re-exports `everruns-core` exposes for these modules,
48// so provider crates can use `everruns_provider::<Symbol>` exactly as they used
49// `everruns_core::<Symbol>`.
50// ============================================================================
51
52pub use credential_schema::{
53    CredentialFormSchema, assemble_credential_document, parse_credential_document,
54};
55pub use driver_registry::{
56    BoxedChatDriver, BoxedEmbeddingsDriver, ChatDriver, DiscoveredModel, DriverDescriptor,
57    DriverFactory, DriverId, DriverOAuthConfig, DriverOAuthFlow, DriverRegistry, EmbedRequest,
58    EmbedResponse, EmbeddingsDriver, EmbeddingsDriverError, EmbeddingsDriverFactory, LlmCallConfig,
59    LlmCallConfigBuilder, LlmCompletionMetadata, LlmContentPart, LlmMessage, LlmMessageContent,
60    LlmMessageRole, LlmResponse, LlmResponseStream, LlmStreamError, LlmStreamEvent, ProviderConfig,
61    ProviderMetadata, ProviderOpaqueContext, ServiceKind, fold_system_messages,
62};
63pub use error::{
64    AgentLoopError, FileSystemError, FileSystemErrorClass, LlmError, LlmErrorKind, Result,
65    StoreResultExt, classify_fs_error, from_json, json_val,
66};
67pub use execution_phase::ExecutionPhase;
68pub use llm_retry::{LlmRetryConfig, RateLimitInfo, RateLimitType, RetryMetadata};
69pub use model::{
70    CostTier, Modality, Model, ModelCost, ModelLimits, ModelModalities, ModelProfile, ModelSource,
71    ModelVendor, ModelWithProvider, ReasoningEffort, ReasoningEffortConfig, ReasoningEffortValue,
72};
73pub use model_discovery::{
74    DiscoveredProviderModel, ModelSearchMatch, ModelSearchResult, RankedDiscoveredModels,
75    discover_provider_models, enrich_with_profiles, list_openai_compatible_models, match_models,
76    normalize_and_enrich, rank_discovered_models, search_provider_models,
77};
78pub use model_profiles::{get_model_profile, get_model_vendor};
79pub use model_spec::{ModelSpec, UnknownProvider};
80pub use openai_protocol::OpenAIProtocolChatDriver;
81pub use openresponses_protocol::{
82    CompactContent, CompactContentPart, CompactInputItem, CompactOutputItem, CompactRequest,
83    CompactResponse, CompactUsage, OpenResponsesProtocolChatDriver, OpenResponsesRequestExtension,
84    messages_to_compact_input,
85};
86pub use provider::{Provider as ProviderRecord, ProviderStatus, ProviderTraceConfig};
87pub use runtime_provider::{
88    BearerAuth, Provider, ProviderAuth, ProviderAuthRequest, ProviderEndpoint, ProviderKey,
89    ProviderRegistry, ResolvedProviderRequest, RuntimeProvider, RuntimeProviderRegistry,
90    StaticHeaderAuth,
91};
92pub use tool_types::{
93    BuiltinTool, ClientSideTool, DeferrablePolicy, SideEffectClass, ToolCall, ToolDefinition,
94    ToolHints, ToolPolicy, ToolResult, ToolResultImage,
95};
96pub use url_validation::{
97    UrlValidationError, is_blocked_ip, validate_safe_url, validate_url_dns_pinned,
98};
99pub use user_facing_error::{
100    ErrorDisclosure, UserFacingError, UserFacingErrorContext, UserFacingErrorFields,
101    classify_runtime_error_message, codes as user_facing_error_codes, is_provider_quota_message,
102    is_usage_limit_message, metadata_keys as user_facing_error_metadata_keys,
103    parse_usage_limit_reset_at, trim_error_chain_prefixes,
104};