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;