mod openai_compat;
use async_trait::async_trait;
use crate::error::TranslatorError;
pub use openai_compat::OpenAiCompatibleProvider;
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct ProviderCapabilities {
pub supports_json_output: bool,
pub max_batch_items: Option<usize>,
pub supports_reasoning_fallback: bool,
pub supports_thinking_control: bool,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TranslationBatchItem {
pub id: String,
pub text: String,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TranslationBatch {
pub source_language: Option<String>,
pub target_language: String,
pub system_prompt: Option<String>,
pub items: Vec<TranslationBatchItem>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TranslatedItem {
pub id: String,
pub text: String,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TranslationBatchOutput {
pub items: Vec<TranslatedItem>,
}
#[async_trait]
pub trait TranslationProvider: Send + Sync {
fn name(&self) -> &str;
fn capabilities(&self) -> ProviderCapabilities {
ProviderCapabilities::default()
}
async fn translate_batch(
&self,
batch: TranslationBatch,
) -> Result<TranslationBatchOutput, TranslatorError>;
}