File size: 1,277 Bytes
2edb151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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)