Skip to main content

everruns_provider/
lib.rs

1//! `everruns-provider` — the provider/LLM abstraction foundation.
2//!
3//! This crate holds the driver-facing types and traits shared by
4//! `everruns-core` and the individual provider crates (OpenAI, Anthropic,
5//! Gemini, …): the `ChatDriver` interface, the shared OpenAI/OpenResponses
6//! protocol drivers, model profiles, retry/stream helpers, typed IDs, the
7//! credential form schema, and the LLM error taxonomy.
8//!
9//! The goal is that provider crates depend on this crate instead of on
10//! `everruns-core`, so a provider is a pure `ChatDriver` implementation with no
11//! dependency on core's agent-loop runtime.
12//!
13//! `everruns-core` depends on this crate and re-exports these modules at their
14//! original paths, so existing `everruns_core::…` imports keep working. The
15//! adapters that convert core's agent-loop domain types (`Message`,
16//! `RuntimeAgent`, `ResolvedModel`) into these driver types live in
17//! `everruns-core` (`llm_conversions`), keeping the dependency one-directional.
18
19pub mod credential_schema;
20pub mod driver_helpers;
21pub mod driver_registry;
22pub mod error;
23pub mod execution_phase;
24pub mod llm_retry;
25pub mod model;
26pub mod model_discovery;
27pub mod model_profiles;
28pub mod openai_protocol;
29pub mod openresponses_protocol;
30pub mod openresponses_types;
31pub mod provider;
32pub mod stream_accumulator;
33pub mod stream_reconnect;
34pub mod tool_schema_compat;
35pub mod tool_types;
36pub mod typed_id;
37pub mod url_validation;
38pub mod user_facing_error;
39
40// ============================================================================
41// Convenience root re-exports
42//
43// Mirror the root-level re-exports `everruns-core` exposes for these modules,
44// so provider crates can use `everruns_provider::<Symbol>` exactly as they used
45// `everruns_core::<Symbol>`.
46// ============================================================================
47
48pub use credential_schema::{
49    CredentialFormSchema, assemble_credential_document, parse_credential_document,
50};
51pub use driver_registry::{
52    BoxedChatDriver, BoxedEmbeddingsDriver, ChatDriver, DiscoveredModel, DriverDescriptor,
53    DriverFactory, DriverId, DriverOAuthConfig, DriverOAuthFlow, DriverRegistry, EmbedRequest,
54    EmbedResponse, EmbeddingsDriver, EmbeddingsDriverError, EmbeddingsDriverFactory, LlmCallConfig,
55    LlmCallConfigBuilder, LlmCompletionMetadata, LlmContentPart, LlmMessage, LlmMessageContent,
56    LlmMessageRole, LlmResponse, LlmResponseStream, LlmStreamError, LlmStreamEvent, ProviderConfig,
57    ProviderOpaqueContext, ServiceKind, fold_system_messages,
58};
59pub use error::{
60    AgentLoopError, FileSystemError, FileSystemErrorClass, LlmError, LlmErrorKind, Result,
61    StoreResultExt, classify_fs_error, from_json, json_val,
62};
63pub use execution_phase::ExecutionPhase;
64pub use llm_retry::{LlmRetryConfig, RateLimitInfo, RateLimitType, RetryMetadata};
65pub use model::{
66    CostTier, Modality, Model, ModelCost, ModelLimits, ModelModalities, ModelProfile, ModelSource,
67    ModelVendor, ModelWithProvider, ReasoningEffort, ReasoningEffortConfig, ReasoningEffortValue,
68};
69pub use model_discovery::{
70    DiscoveredProviderModel, ModelSearchMatch, ModelSearchResult, RankedDiscoveredModels,
71    discover_provider_models, enrich_with_profiles, list_openai_compatible_models, match_models,
72    normalize_and_enrich, rank_discovered_models, search_provider_models,
73};
74pub use model_profiles::{get_model_profile, get_model_vendor};
75pub use openai_protocol::{AuthHeaderProvider, OpenAIProtocolChatDriver};
76pub use openresponses_protocol::{
77    CompactContent, CompactContentPart, CompactInputItem, CompactOutputItem, CompactRequest,
78    CompactResponse, CompactUsage, OpenResponsesProtocolChatDriver, OpenResponsesRequestExtension,
79    messages_to_compact_input,
80};
81pub use provider::{Provider, ProviderStatus, ProviderTraceConfig};
82pub use tool_types::{
83    BuiltinTool, ClientSideTool, DeferrablePolicy, SideEffectClass, ToolCall, ToolDefinition,
84    ToolHints, ToolPolicy, ToolResult, ToolResultImage,
85};
86pub use url_validation::{
87    UrlValidationError, is_blocked_ip, validate_safe_url, validate_url_dns_pinned,
88};
89pub use user_facing_error::{
90    ErrorDisclosure, UserFacingError, UserFacingErrorContext, UserFacingErrorFields,
91    classify_runtime_error_message, codes as user_facing_error_codes, is_provider_quota_message,
92    is_usage_limit_message, metadata_keys as user_facing_error_metadata_keys,
93    parse_usage_limit_reset_at, trim_error_chain_prefixes,
94};