Image-Retrieval-System / src /ui /formatters.py
s1ngledoge's picture
upd
1c8d1ba
Raw
History Blame Contribute Delete
2.77 kB
from __future__ import annotations
from pathlib import Path
from src.search_service import SearchResult
from src.ui.constants import (
DEFAULT_CATEGORY_FILTER,
DEFAULT_MIN_SIMILARITY,
DEFAULT_TOP_K,
IMAGE_QUERY_EMPTY_PREVIEW,
TEXT_QUERY_EMPTY_PREVIEW,
)
from src.ui.types import FavoriteState, GalleryItem, ResultState
def initial_overview(
top_k: int = DEFAULT_TOP_K,
category_filter: str = DEFAULT_CATEGORY_FILTER,
min_similarity: float = DEFAULT_MIN_SIMILARITY,
) -> str:
return (
"### Results Overview\n\n"
"Enter a description or upload a reference image, then click **Search**.\n\n"
"- Current query: None\n"
"- Returned results: 0 images"
)
def error_overview(title: str, message: str) -> str:
return f"### {title}\n\n{message}"
def search_overview(
*,
current_query: str,
returned_results: int,
message: str | None = None,
) -> str:
lines = [
"### Results Overview",
"",
f"- Current query: {current_query}",
f"- Returned results: {returned_results} images",
]
if message:
lines.extend(["", message])
return "\n".join(lines)
def result_to_state(result: SearchResult) -> ResultState:
return {
"id": result.id,
"path": result.path,
"filename": result.filename,
"category": result.category,
"score": result.score,
"choice_label": f"{result.filename} | {result.category} | {result.score:.4f}",
}
def result_gallery(results: list[ResultState]) -> list[GalleryItem]:
gallery: list[GalleryItem] = []
for result in results:
caption = (
f"File: {result['filename']}\n"
f"Category: {result['category']}\n"
f"Similarity: {float(result['score']):.4f}"
)
gallery.append((str(result["path"]), caption))
return gallery
def favorite_gallery(favorites: list[FavoriteState] | None) -> list[GalleryItem]:
gallery: list[GalleryItem] = []
for favorite in favorites or []:
favorite_path = Path(str(favorite.get("favorite_path", "")))
if not favorite_path.exists():
continue
caption = (
f"File: {favorite.get('filename', favorite_path.name)}\n"
f"Category: {favorite.get('category', 'Unknown')}"
)
gallery.append((str(favorite_path), caption))
return gallery
def text_query_preview(text: str) -> str:
text = (text or "").strip()
if not text:
return TEXT_QUERY_EMPTY_PREVIEW
return f"Current query: {text}"
def image_query_preview(image_present: bool) -> str:
uploaded = "Yes" if image_present else "No"
return f"Current query mode: image search\n\nImage uploaded: {uploaded}"