Source code for mmirage.core.process.batch.adapter
"""Provider-agnostic batch submission adapter contracts.
Adapters implement translation from internal request payloads into provider
request formats and normalize submission responses into a shared result shape.
"""
import abc
from dataclasses import dataclass, field
from typing import Any, Dict, Sequence, Tuple
from mmirage.config.batch_provider import BatchProviderConfig
[docs]
@dataclass
class BatchSubmissionResult:
"""Normalized result returned by any provider adapter after chunk submission.
Attributes:
provider_batch_id: Provider-side identifier for the submitted job/batch.
status: Provider status mapped to 'completed', 'failed', 'in_progress'
or 'unknown', so generic code never reads a provider vocabulary.
raw_response: Original provider response payload for traceability.
"""
provider_batch_id: str
status: str
raw_response: Dict[str, Any] = field(default_factory=dict)
[docs]
class BatchSubmissionAdapter(abc.ABC):
"""Abstract interface for provider-specific batch submission adapters.
Implementations should be deterministic for request building and byte
estimation so chunk boundaries can be reproduced across retries.
"""
required_credentials: Tuple[str, ...] = tuple()
[docs]
@abc.abstractmethod
def build_request(
self,
custom_id: str,
payload: Dict[str, Any],
config: BatchProviderConfig,
) -> Dict[str, Any]:
"""Build a single provider-ready request object.
Args:
custom_id: Stable request identifier used to map async results back
to source rows.
payload: Provider-neutral request payload assembled by the core
processing layer.
config: Provider configuration contract that may influence request
shaping.
Returns:
A provider-specific request object represented as a mapping.
"""
raise NotImplementedError()
[docs]
@abc.abstractmethod
def estimate_request_bytes(self, request: Dict[str, Any]) -> int:
"""Estimate serialized UTF-8 bytes for a request payload.
The estimate must match or safely upper-bound the size produced by the
serializer used for submission so chunk boundaries are enforced
correctly.
Args:
request: Provider request object returned by ``build_request``.
Returns:
Estimated byte size for the serialized request.
"""
raise NotImplementedError()
[docs]
@abc.abstractmethod
def submit_chunk(
self,
chunk_id: str,
requests: Sequence[Dict[str, Any]],
config: BatchProviderConfig,
) -> Dict[str, Any]:
"""Submit one pre-chunked request group to the provider.
Args:
chunk_id: Internal chunk identifier generated by orchestration.
requests: Provider-ready request objects belonging to this chunk.
config: Provider config containing credentials and submission knobs.
Returns:
Raw provider response payload as a mapping.
"""
raise NotImplementedError()
[docs]
@abc.abstractmethod
def parse_submission_result(
self,
raw_result: Dict[str, Any],
) -> BatchSubmissionResult:
"""Normalize provider submission output into a shared result model.
Args:
raw_result: Raw payload returned by ``submit_chunk``.
Returns:
A normalized ``BatchSubmissionResult`` for provider-neutral
orchestration and metadata persistence.
"""
raise NotImplementedError()
[docs]
@abc.abstractmethod
def check_batch_status(
self,
provider_batch_id: str,
config: BatchProviderConfig,
) -> BatchSubmissionResult:
"""Retrieve and normalize the latest status for a provider batch job.
Args:
provider_batch_id: Provider-side batch/job identifier to query.
config: Provider configuration containing credentials and endpoint
overrides.
Returns:
A normalized ``BatchSubmissionResult`` where ``status`` reflects the
latest provider-reported lifecycle state for the batch.
"""
raise NotImplementedError()
[docs]
@abc.abstractmethod
def retrieve_results(
self,
provider_batch_id: str,
config: BatchProviderConfig,
) -> Sequence[Dict[str, Any]]:
"""Download and parse completed batch results from the provider.
Implementations should normalize each returned row into a plain mapping
and, when a text payload is available, expose it as ``generated_text``
so downstream collectors can consume a provider-agnostic result shape.
Reported usage should likewise be exposed as ``input_tokens`` and
``output_tokens``, omitted when the provider reports none.
Args:
provider_batch_id: Provider-side batch/job identifier.
config: Provider configuration containing credentials and endpoint
overrides.
Returns:
Sequence of parsed result rows (provider JSONL records normalized to
dictionaries) preserving provider output order.
"""
raise NotImplementedError()