| from __future__ import annotations |
|
|
| from app.config import Settings |
| from app.schemas import LineItem, ReceiptExtract |
| from backends.base import EmbedBackend, InputType |
| from backends.openai_compat import apply_embed_prefix |
|
|
|
|
| def format_embed_input(text: str, input_type: InputType, *, enabled: bool = True) -> str: |
| return apply_embed_prefix(text, input_type, enabled=enabled) |
|
|
|
|
| def line_query_text(extract: ReceiptExtract, item: LineItem) -> str: |
| parts = [ |
| extract.vendor or "", |
| item.sku or "", |
| item.description, |
| f"qty {item.qty}" if item.qty is not None else "", |
| f"amount {item.amount}" if item.amount is not None else "", |
| ] |
| return " | ".join(p for p in parts if p) |
|
|
|
|
| def catalog_passage_text( |
| *, |
| vendor: str | None, |
| sku: str | None, |
| description: str, |
| size: str | None = None, |
| ) -> str: |
| parts = [vendor or "", sku or "", description, size or ""] |
| return " | ".join(p for p in parts if p) |
|
|
|
|
| def vendor_query_text(vendor: str) -> str: |
| return vendor.strip() |
|
|
|
|
| def embed_texts( |
| backend: EmbedBackend, |
| texts: list[str], |
| *, |
| input_type: InputType, |
| settings: Settings | None = None, |
| ) -> list[list[float]]: |
| del settings |
| return backend.embed(texts, input_type=input_type) |
|
|