Skip to main content

TranslationEngine

Struct TranslationEngine 

Source
pub struct TranslationEngine { /* private fields */ }
Expand description

Orchestrates subtitle translation through an AIProvider.

The engine is deliberately thin: it is composed of an AI provider, a FormatManager for parsing/serialization, and a configurable batch size. Constructors are provided so crate::core::factory::ComponentFactory can wire the engine from runtime configuration without leaking provider details.

Implementations§

Source§

impl TranslationEngine

Source

pub fn new(ai_provider: Arc<dyn AIProvider>, batch_size: usize) -> Result<Self>

Create an engine with a custom batch size.

§Errors

Returns SubXError::config when batch_size is zero.

Source

pub fn batch_size(&self) -> usize

Get the configured AI batch size.

Source

pub fn format_manager(&self) -> &FormatManager

Borrow the underlying FormatManager.

Source

pub async fn translate_subtitle( &self, subtitle: Subtitle, request: &TranslationRequest, ) -> Result<TranslationResult>

Translate a subtitle that has already been parsed into the shared Subtitle data model.

This is the primary entry point used by the translate command and integration tests. It does not perform any filesystem I/O.

The order of operations matches the OpenSpec design:

  1. Generate UUIDv7 cue IDs with strict 1ms spacing.
  2. Run a terminology extraction pass (single AI request) and merge the result with the user glossary.
  3. Translate cues in configurable batches, validating each response against the requested cue IDs before applying any text changes.
  4. Reapply translated text to the parsed subtitle while preserving timing, ordering, cue counts, and styling metadata.
Source

pub async fn translate_content( &self, content: &str, request: &TranslationRequest, ) -> Result<TranslationResult>

Parse subtitle text content and translate it.

Convenience wrapper that detects the format using FormatManager::parse_auto before delegating to Self::translate_subtitle.

Source

pub async fn extract_terminology( &self, cue_texts: &[String], request: &TranslationRequest, ) -> Result<TerminologyMap>

Run only the terminology extraction pass.

Exposed so callers can preview the terminology map before issuing translation requests.

Trait Implementations§

Source§

impl Debug for TranslationEngine

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more