""" Data models for embedding services. """ from dataclasses import dataclass, field from typing import Any from .embedding_exceptions import EmbeddingError @dataclass class EmbeddingBatchResult: """Result of batch embedding creation with success/failure tracking.""" embeddings: list[list[float]] = field(default_factory=list) failed_items: list[dict[str, Any]] = field(default_factory=list) success_count: int = 0 failure_count: int = 0 texts_processed: list[str] = field(default_factory=list) # Successfully processed texts def add_success(self, embedding: list[float], text: str): """Add a successful embedding.""" self.embeddings.append(embedding) self.texts_processed.append(text) self.success_count += 1 def add_failure(self, text: str, error: Exception, batch_index: int | None = None): """Add a failed item with error details.""" error_dict = { "text": text[:200] if text else None, "error": str(error), "error_type": type(error).__name__, "batch_index": batch_index, } # Add extra context from EmbeddingError if available if isinstance(error, EmbeddingError): error_dict.update(error.to_dict()) self.failed_items.append(error_dict) self.failure_count += 1 @property def has_failures(self) -> bool: return self.failure_count > 0 @property def total_requested(self) -> int: return self.success_count + self.failure_count