| """ |
| 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) |
|
|
| 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, |
| } |
|
|
| |
| 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 |
|
|