use serde::{Deserialize, Serialize};
use super::ModelEndpointType;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LlmConfig {
pub model: String,
pub model_endpoint_type: ModelEndpointType,
pub context_window: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_category: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_wrapper: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_p: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub frequency_penalty: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub presence_penalty: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub n: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub seed: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_retries: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_timeout: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_reasoning: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_effort: Option<ReasoningEffort>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_k: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repetition_penalty: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub endpoint_url: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ReasoningEffort {
Low,
Medium,
High,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbeddingModel {
pub embedding_endpoint_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub embedding_endpoint: Option<String>,
pub embedding_model: String,
pub embedding_dim: u32,
pub embedding_chunk_size: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub handle: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub azure_endpoint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub azure_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub azure_deployment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ListModelsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_category: Option<Vec<ProviderCategory>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_type: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ProviderCategory {
#[serde(rename = "base")]
Base,
#[serde(rename = "byok")]
Byok,
}
impl std::fmt::Display for ProviderCategory {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ProviderCategory::Base => f.write_str("base"),
ProviderCategory::Byok => f.write_str("byok"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ListEmbeddingModelsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_category: Option<Vec<ProviderCategory>>,
}