visualref_docker / client /retrieval_client_visual.py
bulatkh
Recsys demo based on VLMs + visual embeddings (#4)
5ae5072 unverified
Raw
History Blame Contribute Delete
2.24 kB
from typing import Any, Dict, List, Optional, Union
import httpx
from utils.image_utils import base64_to_image
class RemoteRetrievalClientVisual:
def __init__(self, server_url: str = "http://localhost:8000"):
self.server_url = server_url
self.client = httpx.AsyncClient(timeout=60.0)
async def search_images(self, query: str, top_k: int = 5):
try:
response = await self.client.post(
f"{self.server_url}/search",
json={"query": query, "top_k": top_k}
)
response.raise_for_status()
data = response.json()
# Load images from paths
images = [base64_to_image(image) for image in data["images"]]
return images, data["scores"], data["image_paths"]
except Exception as e:
raise Exception(f"Remote search failed: {str(e)}")
async def apply_feedback(
self,
query: str,
top_k: int,
relevant_image_paths: List[str],
annotator_json_boxes_list: List[Optional[List[Dict[str, Any]]]],
fuse_initial_query: bool = False
):
try:
response = await self.client.post(
f"{self.server_url}/apply_feedback",
json={
"query": query,
"top_k": top_k,
"relevant_image_paths": relevant_image_paths,
"annotator_json_boxes_list": annotator_json_boxes_list,
"fuse_initial_query": fuse_initial_query
}
)
response.raise_for_status()
data = response.json()
images = [base64_to_image(image) for image in data["images"]]
return images, data["scores"], data["image_paths"]
except Exception as e:
raise Exception(f"Remote feedback failed: {str(e)}")
async def health(self):
try:
response = await self.client.get(f"{self.server_url}/health")
response.raise_for_status()
return response.json()
except Exception as e:
raise Exception(f"Remote health check failed: {str(e)}")
async def close(self):
await self.client.aclose()