""" Gradio Interface for Vector operations. """ import gradio as gr import numpy as np import json from typing import Union def parse_vector(vector_str: str) -> np.ndarray: try: v = json.loads(vector_str) arr = np.array(v, dtype=float) if arr.ndim != 1: raise ValueError("Vector must be 1-dimensional.") if arr.shape[0] == 0: raise ValueError("Vector cannot be empty.") return arr except (json.JSONDecodeError, TypeError, ValueError) as e_json: try: if not vector_str.strip(): raise ValueError("Vector input is empty.") arr = np.array([float(x.strip()) for x in vector_str.split(',') if x.strip()], dtype=float) if arr.shape[0] == 0: raise ValueError("Vector cannot be empty after parsing.") return arr except ValueError as e_csv: raise gr.Error(f"Invalid vector format. Use JSON (e.g., [1,2,3]) or comma-separated (e.g., 1,2,3). Error: {e_csv} (Original JSON error: {e_json})") except Exception as e_gen: raise gr.Error(f"General error parsing vector: {e_gen}") def format_output(data: Union[np.ndarray, float, str]) -> str: if isinstance(data, np.ndarray): return str(data.tolist()) elif isinstance(data, (float, int, str)): return str(data) return "Output type not recognized."