llm_kit_openai_compatible/lib.rs
1//! OpenAI-compatible provider implementation for the LLM Kit.
2//!
3//! This crate provides a provider implementation for OpenAI-compatible APIs,
4//! including OpenAI, Azure OpenAI, and other compatible services.
5//!
6//! # Examples
7//!
8//! ## Basic Usage with Client Builder (Recommended)
9//!
10//! ```no_run
11//! use llm_kit_openai_compatible::OpenAICompatibleClient;
12//!
13//! // Create a provider using the client builder
14//! let provider = OpenAICompatibleClient::new()
15//! .base_url("https://api.openai.com/v1")
16//! .api_key("your-api-key")
17//! .build();
18//!
19//! let model = provider.chat_model("gpt-4");
20//! ```
21//!
22//! ## Alternative: Using Settings Directly
23//!
24//! ```no_run
25//! use llm_kit_openai_compatible::{OpenAICompatibleProvider, OpenAICompatibleProviderSettings};
26//!
27//! // Create a provider using settings
28//! let provider = OpenAICompatibleProvider::new(
29//! OpenAICompatibleProviderSettings::new(
30//! "https://api.openai.com/v1",
31//! "openai"
32//! )
33//! .with_api_key("your-api-key")
34//! );
35//!
36//! let model = provider.chat_model("gpt-4");
37//! ```
38//!
39//! ## Chained Usage
40//!
41//! ```no_run
42//! use llm_kit_openai_compatible::OpenAICompatibleClient;
43//!
44//! let model = OpenAICompatibleClient::new()
45//! .base_url("https://api.example.com/v1")
46//! .name("example")
47//! .api_key("your-api-key")
48//! .build()
49//! .chat_model("meta-llama/Llama-3-70b-chat-hf");
50//! ```
51//!
52//! ## Custom Headers and Query Parameters
53//!
54//! ```no_run
55//! use llm_kit_openai_compatible::OpenAICompatibleClient;
56//!
57//! let provider = OpenAICompatibleClient::new()
58//! .base_url("https://api.example.com/v1")
59//! .name("custom")
60//! .api_key("your-api-key")
61//! .header("X-Custom-Header", "value")
62//! .query_param("version", "2024-01")
63//! .build();
64//!
65//! let model = provider.chat_model("gpt-4");
66//! ```
67//!
68//! ## Azure OpenAI Example
69//!
70//! ```no_run
71//! use llm_kit_openai_compatible::OpenAICompatibleClient;
72//!
73//! let provider = OpenAICompatibleClient::new()
74//! .base_url("https://my-resource.openai.azure.com/openai")
75//! .name("azure-openai")
76//! .api_key("your-api-key")
77//! .query_param("api-version", "2024-02-15-preview")
78//! .build();
79//!
80//! let model = provider.chat_model("gpt-4");
81//! ```
82//!
83//! ## Text Embeddings
84//!
85//! ```no_run
86//! use llm_kit_openai_compatible::OpenAICompatibleClient;
87//! use llm_kit_provider::EmbeddingModel;
88//! use llm_kit_provider::embedding_model::call_options::EmbeddingModelCallOptions;
89//!
90//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
91//! let provider = OpenAICompatibleClient::new()
92//! .base_url("https://api.openai.com/v1")
93//! .api_key("your-api-key")
94//! .build();
95//!
96//! let model = provider.text_embedding_model("text-embedding-3-small");
97//!
98//! let options = EmbeddingModelCallOptions {
99//! values: vec!["The capital of France is Paris.".to_string()],
100//! headers: None,
101//! provider_options: None,
102//! abort_signal: None,
103//! };
104//!
105//! let result = model.do_embed(options).await?;
106//! println!("Embeddings: {:?}", result.embeddings);
107//! # Ok(())
108//! # }
109//! ```
110//!
111//! ## Image Generation
112//!
113//! ```no_run
114//! use llm_kit_openai_compatible::OpenAICompatibleClient;
115//! use llm_kit_provider::ImageModel;
116//! use llm_kit_provider::image_model::call_options::ImageModelCallOptions;
117//!
118//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
119//! let provider = OpenAICompatibleClient::new()
120//! .base_url("https://api.openai.com/v1")
121//! .api_key("your-api-key")
122//! .build();
123//!
124//! let model = provider.image_model("dall-e-3");
125//!
126//! let options = ImageModelCallOptions {
127//! prompt: "A beautiful sunset over the ocean".to_string(),
128//! n: 1,
129//! size: None,
130//! aspect_ratio: None,
131//! seed: None,
132//! headers: None,
133//! provider_options: None,
134//! abort_signal: None,
135//! };
136//!
137//! let result = model.do_generate(options).await?;
138//!
139//! println!("Generated {} image(s)", result.images.len());
140//! # Ok(())
141//! # }
142//! ```
143
144/// Chat completion implementation for OpenAI-compatible APIs.
145pub mod chat;
146/// Client builder for creating OpenAI-compatible providers.
147pub mod client;
148/// Text completion implementation for OpenAI-compatible APIs.
149pub mod completion;
150/// Embedding model implementation for OpenAI-compatible APIs.
151pub mod embedding;
152/// Error types for OpenAI-compatible provider operations.
153pub mod error;
154/// Image generation implementation for OpenAI-compatible APIs.
155pub mod image;
156/// Provider implementation and creation functions.
157pub mod provider;
158/// Settings and configuration for OpenAI-compatible providers.
159pub mod settings;
160mod utils;
161
162// Re-export main types from chat
163pub use chat::{
164 MetadataExtractor, OpenAICompatibleChatConfig, OpenAICompatibleChatLanguageModel,
165 OpenAICompatibleChatModelId, OpenAICompatibleProviderOptions as ChatProviderOptions,
166 convert_to_openai_compatible_chat_messages, prepare_tools,
167};
168
169// Re-export main types from completion
170pub use completion::{
171 OpenAICompatibleCompletionConfig, OpenAICompatibleCompletionLanguageModel,
172 OpenAICompatibleCompletionModelId, OpenAICompatibleCompletionPrompt,
173 OpenAICompatibleCompletionProviderOptions as CompletionProviderOptions,
174 convert_to_openai_compatible_completion_prompt,
175};
176
177// Re-export main types from embedding
178pub use embedding::{
179 OpenAICompatibleEmbeddingConfig, OpenAICompatibleEmbeddingModel,
180 OpenAICompatibleEmbeddingModelId,
181 OpenAICompatibleEmbeddingProviderOptions as EmbeddingProviderOptions,
182};
183
184// Re-export main types from image
185pub use image::{
186 OpenAICompatibleImageModel, OpenAICompatibleImageModelConfig, OpenAICompatibleImageModelId,
187};
188
189pub use client::OpenAICompatibleClient;
190pub use error::*;
191pub use provider::OpenAICompatibleProvider;
192pub use settings::OpenAICompatibleProviderSettings;