in search/web-app/main.py [0:0]
def imagesearch_vais() -> str:
"""
Handle Image Search Vertex AI Search Request
"""
search_query = request.form.get("search_query", "")
image_file = request.files["image"]
image_content = None
image_bytes = None
# Check if POST Request includes search query
if not search_query and not image_file:
return render_template(
"image-search.html",
nav_links=NAV_LINKS,
message_error="No query provided",
)
if image_file:
image_content = image_file.read()
elif search_query:
# Check if text is a url
image_url = urlparse(search_query)
if all([image_url.scheme, image_url.netloc, image_url.path]):
image_response = requests.get(
image_url.geturl(), allow_redirects=True, timeout=5
)
mime_type = image_response.headers["Content-Type"]
if mime_type not in VALID_IMAGE_MIMETYPES:
return render_template(
"image-search.html",
nav_links=NAV_LINKS,
message_error=f"Invalid image format - {mime_type}. Valid types {VALID_IMAGE_MIMETYPES}",
)
image_content = image_response.content
if image_content:
search_query = None
image_bytes = base64.b64encode(image_content)
try:
results, _, request_url, raw_request, raw_response = search_enterprise_search(
project_id=PROJECT_ID,
location=LOCATION,
engine_id=IMAGE_SEARCH_ENGINE_IDs[0]["engine_id"],
search_query=search_query,
image_bytes=image_bytes,
params={"search_type": 1},
)
except Exception as e:
return render_template(
"image-search.html",
nav_links=NAV_LINKS,
message_error=e.args[0],
)
return render_template(
"image-search.html",
title=NAV_LINKS[2]["name"],
nav_links=NAV_LINKS,
message_success="Success",
results=results,
request_url=request_url,
raw_request=raw_request,
raw_response=raw_response,
)