Spaces:
Sleeping
Sleeping
Anthony Liang commited on
Commit ·
f368e2d
1
Parent(s): 8c5e6cc
update
Browse files
app.py
CHANGED
|
@@ -38,24 +38,41 @@ def discover_available_models(
|
|
| 38 |
base_url: str = "http://localhost",
|
| 39 |
port_range: Tuple[int, int] = (8000, 8010),
|
| 40 |
) -> List[Tuple[str, str]]:
|
| 41 |
-
"""Discover trace eval servers by pinging /health
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
available = []
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
try:
|
| 48 |
-
r = requests.get(f"{server_url}/health", timeout=
|
| 49 |
if r.status_code == 200:
|
| 50 |
try:
|
| 51 |
-
info = requests.get(
|
| 52 |
-
|
| 53 |
-
|
|
|
|
| 54 |
except Exception:
|
| 55 |
-
name =
|
| 56 |
available.append((server_url, name))
|
| 57 |
-
except requests.exceptions.RequestException:
|
| 58 |
-
|
| 59 |
continue
|
| 60 |
return available
|
| 61 |
|
|
@@ -64,8 +81,9 @@ def get_model_info_for_url(server_url: str) -> Optional[str]:
|
|
| 64 |
"""Get formatted model info for a trace eval server."""
|
| 65 |
if not server_url:
|
| 66 |
return None
|
|
|
|
| 67 |
try:
|
| 68 |
-
r = requests.get(f"{server_url.rstrip('/')}/model_info", timeout=5.0)
|
| 69 |
if r.status_code == 200:
|
| 70 |
return format_trace_model_info(r.json())
|
| 71 |
except Exception as e:
|
|
@@ -90,8 +108,9 @@ def check_server_health(server_url: str) -> Tuple[str, Optional[dict], Optional[
|
|
| 90 |
"""Check trace eval server health. Returns (status_msg, health_data, model_info_text)."""
|
| 91 |
if not server_url:
|
| 92 |
return "Please provide a server URL.", None, None
|
|
|
|
| 93 |
try:
|
| 94 |
-
r = requests.get(f"{server_url.rstrip('/')}/health", timeout=5.0)
|
| 95 |
r.raise_for_status()
|
| 96 |
data = r.json()
|
| 97 |
info = get_model_info_for_url(server_url)
|
|
@@ -109,10 +128,12 @@ def run_inference_via_server(
|
|
| 109 |
"""Run inference via trace eval server. Returns (prediction, overlay_path, trace_points_text)."""
|
| 110 |
with open(image_path, "rb") as f:
|
| 111 |
image_b64 = base64.b64encode(f.read()).decode("utf-8")
|
|
|
|
| 112 |
r = requests.post(
|
| 113 |
f"{server_url.rstrip('/')}/predict",
|
| 114 |
json={"image_base64": image_b64, "instruction": instruction},
|
| 115 |
timeout=120.0,
|
|
|
|
| 116 |
)
|
| 117 |
r.raise_for_status()
|
| 118 |
data = r.json()
|
|
|
|
| 38 |
base_url: str = "http://localhost",
|
| 39 |
port_range: Tuple[int, int] = (8000, 8010),
|
| 40 |
) -> List[Tuple[str, str]]:
|
| 41 |
+
"""Discover trace eval servers by pinging /health. Returns [(server_url, model_name), ...].
|
| 42 |
+
For ngrok or https URLs, uses the URL as-is. For localhost, scans ports."""
|
| 43 |
+
base_url = base_url.strip().rstrip("/")
|
| 44 |
+
urls_to_check: List[Tuple[str, str]] = []
|
| 45 |
+
|
| 46 |
+
# Single URL mode: ngrok, https, or URL that already has a port
|
| 47 |
+
if "ngrok" in base_url or base_url.startswith("https://"):
|
| 48 |
+
urls_to_check = [(base_url, "Trace (ngrok/external)")]
|
| 49 |
+
elif ":" in base_url.split("//")[-1].split("/")[0]:
|
| 50 |
+
# Already has port (e.g. http://localhost:8000)
|
| 51 |
+
urls_to_check = [(base_url, "Trace")]
|
| 52 |
+
else:
|
| 53 |
+
# Scan ports for localhost
|
| 54 |
+
start_port, end_port = port_range
|
| 55 |
+
for port in range(start_port, end_port + 1):
|
| 56 |
+
urls_to_check.append((f"{base_url}:{port}", f"Trace @ port {port}"))
|
| 57 |
+
|
| 58 |
available = []
|
| 59 |
+
headers = {}
|
| 60 |
+
if "ngrok" in base_url:
|
| 61 |
+
headers["ngrok-skip-browser-warning"] = "true"
|
| 62 |
+
for server_url, label in urls_to_check:
|
| 63 |
try:
|
| 64 |
+
r = requests.get(f"{server_url}/health", timeout=5.0, headers=headers)
|
| 65 |
if r.status_code == 200:
|
| 66 |
try:
|
| 67 |
+
info = requests.get(
|
| 68 |
+
f"{server_url}/model_info", timeout=5.0, headers=headers
|
| 69 |
+
).json()
|
| 70 |
+
name = info.get("model_id", label)
|
| 71 |
except Exception:
|
| 72 |
+
name = label
|
| 73 |
available.append((server_url, name))
|
| 74 |
+
except requests.exceptions.RequestException as e:
|
| 75 |
+
logger.debug(f"Could not reach {server_url}/health: {e}")
|
| 76 |
continue
|
| 77 |
return available
|
| 78 |
|
|
|
|
| 81 |
"""Get formatted model info for a trace eval server."""
|
| 82 |
if not server_url:
|
| 83 |
return None
|
| 84 |
+
headers = {"ngrok-skip-browser-warning": "true"} if "ngrok" in server_url else {}
|
| 85 |
try:
|
| 86 |
+
r = requests.get(f"{server_url.rstrip('/')}/model_info", timeout=5.0, headers=headers)
|
| 87 |
if r.status_code == 200:
|
| 88 |
return format_trace_model_info(r.json())
|
| 89 |
except Exception as e:
|
|
|
|
| 108 |
"""Check trace eval server health. Returns (status_msg, health_data, model_info_text)."""
|
| 109 |
if not server_url:
|
| 110 |
return "Please provide a server URL.", None, None
|
| 111 |
+
headers = {"ngrok-skip-browser-warning": "true"} if "ngrok" in server_url else {}
|
| 112 |
try:
|
| 113 |
+
r = requests.get(f"{server_url.rstrip('/')}/health", timeout=5.0, headers=headers)
|
| 114 |
r.raise_for_status()
|
| 115 |
data = r.json()
|
| 116 |
info = get_model_info_for_url(server_url)
|
|
|
|
| 128 |
"""Run inference via trace eval server. Returns (prediction, overlay_path, trace_points_text)."""
|
| 129 |
with open(image_path, "rb") as f:
|
| 130 |
image_b64 = base64.b64encode(f.read()).decode("utf-8")
|
| 131 |
+
headers = {"ngrok-skip-browser-warning": "true"} if "ngrok" in server_url else {}
|
| 132 |
r = requests.post(
|
| 133 |
f"{server_url.rstrip('/')}/predict",
|
| 134 |
json={"image_base64": image_b64, "instruction": instruction},
|
| 135 |
timeout=120.0,
|
| 136 |
+
headers=headers,
|
| 137 |
)
|
| 138 |
r.raise_for_status()
|
| 139 |
data = r.json()
|