1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//! Provider integrations included in `rig-core`.
//!
//! - Anthropic
//! - Azure OpenAI
//! - ChatGPT and GitHub Copilot auth-backed clients
//! - Cohere
//! - DeepSeek
//! - Gemini
//! - Groq
//! - Hugging Face
//! - Hyperbolic
//! - Llamafile
//! - MiniMax
//! - Mira
//! - Mistral
//! - Moonshot
//! - Ollama
//! - OpenAI
//! - OpenRouter
//! - Perplexity
//! - Together
//! - Voyage AI
//! - xAI
//! - Xiaomi MiMo
//! - Z.ai
//!
//! Each provider module defines a `Client` type and model types for the
//! capabilities it supports. Capability traits such as
//! [`CompletionClient`](crate::client::CompletionClient) and
//! [`EmbeddingsClient`](crate::client::EmbeddingsClient) are implemented only
//! when the provider declares that capability.
//!
//! # Provider implementation checklist
//!
//! When adding or changing a provider, verify that the integration includes:
//!
//! - for OpenAI-chat-compatible APIs: completions driven by
//! [`GenericCompletionModel`](crate::providers::openai::completion::GenericCompletionModel)
//! via an
//! [`OpenAICompatibleProvider`](crate::providers::openai::completion::OpenAICompatibleProvider)
//! impl on the provider extension (never a hand-rolled completion model,
//! request struct, or message conversion — dialect differences go in the
//! trait's hooks);
//! - public `Client` and `ClientBuilder` aliases with the correct generics,
//! including a `ClientBuilder` API-key generic matching `ProviderBuilder::ApiKey`;
//! - the `Provider`, `ProviderBuilder`, `Capabilities`, and `ProviderClient`
//! implementations;
//! - explicit API-key marker/auth types with redacted debug behavior for
//! credential-bearing values;
//! - model constants where they are useful and current;
//! - request conversion from Rig request types, such as
//! [`CompletionRequest`](crate::completion::CompletionRequest), without
//! inventing unsupported provider API fields;
//! - response conversion into Rig response types, including usage and tool or
//! multimodal content where applicable;
//! - streaming support when the provider supports streaming;
//! - provider-response error preservation plus `ProviderResponseExt` and
//! telemetry fields consistent with nearby providers where applicable;
//! - unit, cassette, or live-test coverage appropriate to the changed behavior;
//! - root facade feature/docs updates for companion provider crates; and
//! - examples and documentation that match the actual API, feature flags, and
//! credential requirements.
//!
//! # Example
//! ```no_run
//! use rig_core::{
//! agent::AgentBuilder,
//! client::{CompletionClient, ProviderClient},
//! providers::openai,
//! };
//!
//! # fn run() -> Result<(), Box<dyn std::error::Error>> {
//! // Initialize the OpenAI client
//! let openai = openai::Client::from_env()?;
//!
//! // Create a model and initialize an agent
//! let model = openai.completion_model(openai::GPT_5_2);
//!
//! let agent = AgentBuilder::new(model)
//! .preamble("\
//! You are Gandalf the white and you will be conversing with other \
//! powerful beings to discuss the fate of Middle Earth.\
//! ")
//! .build();
//!
//! // Alternatively, you can initialize an agent directly
//! let agent = openai.agent(openai::GPT_5_2)
//! .preamble("\
//! You are Gandalf the white and you will be conversing with other \
//! powerful beings to discuss the fate of Middle Earth.\
//! ")
//! .build();
//! # Ok(())
//! # }
//! ```
pub