shinkai-translator 0.1.3

CLI tool for translating video subtitles with LLMs through OpenAI-compatible APIs, with native PGS OCR
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>;
}