Anthony Liang commited on
Commit
f368e2d
·
1 Parent(s): 8c5e6cc
Files changed (1) hide show
  1. app.py +35 -14
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 on ports. Returns [(server_url, model_name), ...]."""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  available = []
43
- start_port, end_port = port_range
44
- for port in range(start_port, end_port + 1):
45
- server_url = f"{base_url.rstrip('/')}:{port}"
46
- print(f"Checking {server_url}/health")
47
  try:
48
- r = requests.get(f"{server_url}/health", timeout=2.0)
49
  if r.status_code == 200:
50
  try:
51
- info = requests.get(f"{server_url}/model_info", timeout=2.0).json()
52
- print(info)
53
- name = info.get("model_id", f"Trace @ port {port}")
 
54
  except Exception:
55
- name = f"Trace @ port {port}"
56
  available.append((server_url, name))
57
- except requests.exceptions.RequestException:
58
- print(f"Error checking {server_url}/health")
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()