use crate::client::{self, BearerAuth, DebugExt, Provider};
use crate::model::Model;
pub const VENICE_API_BASE_URL: &str = "https://api.venice.ai/api/v1";
#[derive(Debug, Default, Clone, Copy)]
pub struct VeniceExt;
#[derive(Debug, Default, Clone, Copy)]
pub struct VeniceBuilder;
type VeniceApiKey = BearerAuth;
pub type Client<H = reqwest::Client> = client::Client<VeniceExt, H>;
pub type ClientBuilder<H = crate::markers::Missing> =
client::ClientBuilder<VeniceBuilder, VeniceApiKey, H>;
impl Provider for VeniceExt {
type Builder = VeniceBuilder;
const VERIFY_PATH: &'static str = "/models";
}
impl DebugExt for VeniceExt {}
impl crate::providers::openai::completion::OpenAICompatibleProvider for VeniceExt {
const PROVIDER_NAME: &'static str = "venice";
type StreamingUsage = crate::providers::openai::Usage;
type Response = super::completion::CompletionResponse;
}
client::impl_capabilities!(
VeniceExt,
completion = super::completion::CompletionModel<H>,
embeddings = super::embedding::EmbeddingModel<H>,
transcription = super::transcription::TranscriptionModel<H>,
model_listing = VeniceModelLister<H>,
image_generation = super::image_generation::ImageGenerationModel<H>,
audio_generation = super::audio_generation::AudioGenerationModel<H>,
);
client::impl_default_provider_builder!(
VeniceBuilder => VeniceExt,
api_key = VeniceApiKey,
base_url = VENICE_API_BASE_URL,
);
client::impl_provider_client!(
Client,
input = String,
api_key_env = "VENICE_API_KEY",
base_url_env_first = "VENICE_BASE_URL",
);
#[derive(Debug, serde::Deserialize)]
struct ListModelEntry {
id: String,
#[serde(default)]
owned_by: Option<String>,
}
impl From<ListModelEntry> for Model {
fn from(value: ListModelEntry) -> Self {
let mut model = Model::from_id(value.id);
model.owned_by = value.owned_by;
model
}
}
crate::providers::internal::model_listing::impl_model_lister!(
VeniceModelLister,
Client<H>,
ListModelEntry,
"Venice",
"/models"
);
#[cfg(test)]
mod tests {
#[test]
fn test_client_initialization() {
let _client =
crate::providers::venice::Client::new("dummy-key").expect("Client::new() failed");
let _client_from_builder = crate::providers::venice::Client::builder()
.api_key("dummy-key")
.build()
.expect("Client::builder() failed");
}
}