synth-ai 0.2.8.dev7__py3-none-any.whl → 0.2.8.dev9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of synth-ai might be problematic. Click here for more details.

@@ -13,7 +13,19 @@ import textwrap
13
13
 
14
14
  from synth_ai.demos.demo_task_apps import core as demo_core
15
15
  from synth_ai.handshake import run_handshake, HandshakeError
16
- from synth_ai.demos.demo_task_apps.core import DemoEnv
16
+ from synth_ai.demos.demo_task_apps.core import DemoEnv, DEFAULT_TASK_APP_SECRET_NAME
17
+
18
+
19
+ def _key_preview(value: str, label: str) -> str:
20
+ """Return a short descriptor for a secret without leaking the full value."""
21
+ try:
22
+ text = value or ""
23
+ length = len(text)
24
+ prefix = text[:6] if length >= 6 else text
25
+ suffix = text[-5:] if length >= 5 else text
26
+ return f"{label} len={length} prefix={prefix} last5={suffix}"
27
+ except Exception:
28
+ return f"{label} len=0"
17
29
 
18
30
 
19
31
  def _is_modal_public_url(u: str) -> bool:
@@ -100,7 +112,6 @@ def cmd_setup(_args: argparse.Namespace) -> int:
100
112
  dotenv_values = {
101
113
  "TASK_APP_BASE_URL": new_url,
102
114
  "TASK_APP_NAME": env.task_app_name,
103
- "TASK_APP_SECRET_NAME": env.task_app_secret_name or f"{env.task_app_name}-secret",
104
115
  }
105
116
  demo_core.persist_dotenv_values(dotenv_values)
106
117
  os.environ["TASK_APP_BASE_URL"] = new_url
@@ -222,55 +233,6 @@ def _popen_stream_capture(cmd: list[str], cwd: str | None = None, env: dict | No
222
233
  return int(proc.returncode or 0), "\n".join(buf_lines)
223
234
 
224
235
 
225
- def _mask_secret_args(args: list[str]) -> list[str]:
226
- masked: list[str] = []
227
- for a in args:
228
- if "=" in a and any(a.startswith(prefix) for prefix in ("ENVIRONMENT_API_KEY=", "OPENAI_API_KEY=", "SYNTH_API_KEY=")):
229
- try:
230
- key, value = a.split("=", 1)
231
- tail = value[-5:] if len(value) >= 5 else value
232
- masked.append(f"{key}=***{tail}")
233
- except Exception:
234
- masked.append("<masked>")
235
- else:
236
- masked.append(a)
237
- return masked
238
-
239
-
240
- def _ensure_modal_secret(
241
- secret_name: str,
242
- *,
243
- values: dict[str, str],
244
- label: str = "deploy",
245
- replace: bool = False,
246
- ) -> bool:
247
- prefix = f"[{label}]"
248
- if not secret_name.strip():
249
- raise RuntimeError("Secret name is required")
250
-
251
- if not values:
252
- raise RuntimeError("No values provided to create Modal secret")
253
-
254
- create_args = [f"{k}={v}" for k, v in values.items()]
255
- create_cmd = ["uv", "run", "modal", "secret", "create", secret_name, *create_args]
256
-
257
- if replace:
258
- print(f"{prefix} Removing Modal secret '{secret_name}' (if present)…")
259
- delete_cmd = ["bash", "-lc", f"printf 'y\\n' | uv run modal secret delete {secret_name}"]
260
- print(f"{prefix} Command:", " ".join(delete_cmd))
261
- delete_code = _popen_stream(delete_cmd)
262
- if delete_code != 0:
263
- print(f"{prefix} Warning: delete command exited with {delete_code}; continuing to create")
264
-
265
- print(f"\n{prefix} Creating Modal secret '{secret_name}'…")
266
- print(f"{prefix} Command:", " ".join(_mask_secret_args(create_cmd)))
267
- code = _popen_stream(create_cmd)
268
- if code != 0:
269
- raise RuntimeError("Failed to provision Modal secret (see logs above)")
270
-
271
- return True
272
-
273
-
274
236
  def _fmt_float(value: float) -> str:
275
237
  return f"{value:.10g}"
276
238
 
@@ -639,30 +601,25 @@ def _ensure_task_app_ready(env: DemoEnv, synth_key: str, *, label: str) -> DemoE
639
601
  app_name = fallback
640
602
  demo_core.persist_task_url(task_url, name=app_name)
641
603
 
642
- secret_name = env.task_app_secret_name.strip() or f"{app_name}-secret"
643
604
  demo_core.persist_task_url(task_url, name=app_name)
644
605
  demo_core.persist_dotenv_values({
645
606
  "TASK_APP_BASE_URL": task_url,
646
607
  "TASK_APP_NAME": app_name,
647
- "TASK_APP_SECRET_NAME": secret_name,
608
+ "TASK_APP_SECRET_NAME": DEFAULT_TASK_APP_SECRET_NAME,
648
609
  })
649
610
 
650
- openai_key = (os.environ.get("OPENAI_API_KEY") or local_env.get("OPENAI_API_KEY") or "").strip()
651
- secret_values: dict[str, str] = {"ENVIRONMENT_API_KEY": env_key}
652
- if openai_key:
653
- secret_values["OPENAI_API_KEY"] = openai_key
654
611
  if synth_key:
655
- secret_values["SYNTH_API_KEY"] = synth_key
612
+ os.environ["SYNTH_API_KEY"] = synth_key
656
613
 
657
- _ensure_modal_secret(secret_name, values=secret_values, label=label, replace=True)
614
+ openai_key = (os.environ.get("OPENAI_API_KEY") or local_env.get("OPENAI_API_KEY") or "").strip()
615
+ if openai_key:
616
+ os.environ["OPENAI_API_KEY"] = openai_key
658
617
 
659
618
  rollout_url = task_url.rstrip("/") + "/health/rollout"
660
619
  print(f"[{label}] Verifying rollout health:")
661
620
  try:
662
621
  ek = (env_key or "").strip()
663
- ek_len = len(ek)
664
- ek_tail = ek[-5:] if ek_len >= 5 else ek
665
- print(f"[{label}] Using ENVIRONMENT_API_KEY len={ek_len} last5={ek_tail}")
622
+ print(f"[{label}] {_key_preview(ek, 'ENVIRONMENT_API_KEY')}")
666
623
  except Exception:
667
624
  pass
668
625
  health_base = task_url.rstrip("/")
@@ -685,21 +642,27 @@ def _ensure_task_app_ready(env: DemoEnv, synth_key: str, *, label: str) -> DemoE
685
642
  print(f"[{label}] body:", preview)
686
643
  if rc != 200:
687
644
  print(f"[{label}] Warning: rollout health check failed ({rc}). Response: {body}")
645
+ try:
646
+ print(f"[{label}] Sent header X-API-Key → {_key_preview(env_key, 'X-API-Key')}")
647
+ except Exception:
648
+ pass
688
649
  else:
689
650
  print(f"[{label}] Task app rollout health check OK.")
690
651
 
691
652
  os.environ["TASK_APP_BASE_URL"] = task_url
692
653
  os.environ["ENVIRONMENT_API_KEY"] = env_key
654
+ os.environ["TASK_APP_SECRET_NAME"] = DEFAULT_TASK_APP_SECRET_NAME
693
655
  updated_env = demo_core.load_env()
694
656
  updated_env.env_api_key = env_key
695
657
  updated_env.task_app_base_url = task_url
696
658
  updated_env.task_app_name = app_name
697
- updated_env.task_app_secret_name = secret_name
659
+ updated_env.task_app_secret_name = DEFAULT_TASK_APP_SECRET_NAME
698
660
  return updated_env
699
661
 
700
662
 
701
663
  def cmd_deploy(args: argparse.Namespace) -> int:
702
664
  env = demo_core.load_env()
665
+ os.environ["TASK_APP_SECRET_NAME"] = DEFAULT_TASK_APP_SECRET_NAME
703
666
  cwd_env_path = os.path.join(os.getcwd(), ".env")
704
667
  local_env = demo_core.load_dotenv_file(cwd_env_path)
705
668
  url = ""
@@ -777,11 +740,6 @@ def cmd_deploy(args: argparse.Namespace) -> int:
777
740
  print("Aborted by user.")
778
741
  return 1
779
742
 
780
- prev_secret = (env.task_app_secret_name or "").strip()
781
- default_secret = f"{name_in}-secret"
782
- secret_name = default_secret if not prev_secret else prev_secret
783
- if prev_secret and prev_secret != default_secret:
784
- secret_name = default_secret
785
743
  existing_env_key = (env.env_api_key or "").strip()
786
744
  env_key: str | None = existing_env_key or None
787
745
  if existing_env_key:
@@ -804,6 +762,8 @@ def cmd_deploy(args: argparse.Namespace) -> int:
804
762
  env.env_api_key = env_key
805
763
  local_env["ENVIRONMENT_API_KEY"] = env_key
806
764
  print("[deploy] Minted new ENVIRONMENT_API_KEY")
765
+ elif env_key:
766
+ os.environ["ENVIRONMENT_API_KEY"] = env_key
807
767
 
808
768
  # Optionally upload the new key to the backend using sealed box helper
809
769
  backend_base = (env.dev_backend_url or "").rstrip("/")
@@ -834,13 +794,14 @@ def cmd_deploy(args: argparse.Namespace) -> int:
834
794
 
835
795
  synth_key = (env.synth_api_key or os.environ.get("SYNTH_API_KEY") or local_env.get("SYNTH_API_KEY") or "").strip()
836
796
  if not synth_key:
837
- synth_key = input("Enter SYNTH_API_KEY for Modal secret (required): ").strip()
797
+ synth_key = input("Enter SYNTH_API_KEY for deployment (required): ").strip()
838
798
  if not synth_key:
839
- print("SYNTH_API_KEY is required to create the Modal secret.")
799
+ print("SYNTH_API_KEY is required for deployment.")
840
800
  return 1
841
801
  demo_core.persist_api_key(synth_key)
842
802
  demo_core.persist_dotenv_values({"SYNTH_API_KEY": synth_key})
843
803
  env.synth_api_key = synth_key
804
+ os.environ["SYNTH_API_KEY"] = synth_key
844
805
 
845
806
  openai_key = (os.environ.get("OPENAI_API_KEY") or local_env.get("OPENAI_API_KEY") or "").strip()
846
807
  if not openai_key:
@@ -848,22 +809,11 @@ def cmd_deploy(args: argparse.Namespace) -> int:
848
809
  "Enter your OpenAI API key, found at https://platform.openai.com/api-keys\n> "
849
810
  ).strip()
850
811
  if not openai_key:
851
- print("OPENAI_API_KEY is required to create the Modal secret.")
812
+ print("OPENAI_API_KEY is required for deployment.")
852
813
  return 1
853
814
  demo_core.persist_dotenv_values({"OPENAI_API_KEY": openai_key})
854
815
  local_env["OPENAI_API_KEY"] = openai_key
855
-
856
- values = {"SYNTH_API_KEY": synth_key, "OPENAI_API_KEY": openai_key}
857
- if env_key:
858
- values["ENVIRONMENT_API_KEY"] = env_key
859
-
860
- try:
861
- created = _ensure_modal_secret(secret_name, values=values, label="deploy", replace=True)
862
- except RuntimeError as secret_err:
863
- print(f"Failed to prepare Modal secret '{secret_name}': {secret_err}")
864
- return 2
865
- if created:
866
- print(f"[deploy] Modal secret '{secret_name}' provisioned.")
816
+ os.environ["OPENAI_API_KEY"] = openai_key
867
817
 
868
818
  deploy_cmd = ["uv", "run", "python", "-m", "modal", "deploy", "--name", name_in, app_path]
869
819
  print("\nStreaming Modal build/deploy logs (this can take several minutes on first run)…\n")
@@ -913,7 +863,7 @@ def cmd_deploy(args: argparse.Namespace) -> int:
913
863
  dotenv_values = {"TASK_APP_BASE_URL": url}
914
864
  if app_name:
915
865
  dotenv_values["TASK_APP_NAME"] = app_name
916
- dotenv_values["TASK_APP_SECRET_NAME"] = f"{app_name}-secret"
866
+ dotenv_values["TASK_APP_SECRET_NAME"] = DEFAULT_TASK_APP_SECRET_NAME
917
867
  dotenv_path = demo_core.persist_dotenv_values(dotenv_values)
918
868
  print(f"TASK_APP_BASE_URL={url}")
919
869
  if app_name:
@@ -922,7 +872,6 @@ def cmd_deploy(args: argparse.Namespace) -> int:
922
872
  print(f" export TASK_APP_BASE_URL={url}")
923
873
  if app_name:
924
874
  print(f" export TASK_APP_NAME={app_name}")
925
- print(f" export TASK_APP_SECRET_NAME={app_name}-secret")
926
875
  print(f"Persisted to {dotenv_path}")
927
876
  print("\nNext step:\n$ uvx synth-ai run")
928
877
  return 0
@@ -1195,10 +1144,10 @@ def cmd_run(args: argparse.Namespace) -> int:
1195
1144
  ek = (env.env_api_key or "").strip()
1196
1145
  print("Hint: If backend responded 401, verify SYNTH_API_KEY for:", base_url)
1197
1146
  if sk:
1198
- print(f" SYNTH_API_KEY len={len(sk)} last5={sk[-5:]}")
1147
+ print(f" {_key_preview(sk, 'SYNTH_API_KEY')}")
1199
1148
  if ek:
1200
- print(f" ENVIRONMENT_API_KEY len={len(ek)} last5={ek[-5:]}")
1201
- print("Also ensure your Modal secret contains ENVIRONMENT_API_KEY and matches the task app.")
1149
+ print(f" {_key_preview(ek, 'ENVIRONMENT_API_KEY')}")
1150
+ print("Ensure the ENVIRONMENT_API_KEY you deployed with matches the task app and remains exported.")
1202
1151
  return code
1203
1152
 
1204
1153
  # Fallback: legacy jobs API flow
@@ -1218,7 +1167,7 @@ def cmd_run(args: argparse.Namespace) -> int:
1218
1167
  sk_len = len(sk)
1219
1168
  sk_tail = sk[-5:] if sk_len >= 5 else sk
1220
1169
  print(f"[run] Backend API: {api}")
1221
- print(f"[run] Using SYNTH_API_KEY len={sk_len} last5={sk_tail}")
1170
+ print(f"[run] {_key_preview(sk, 'SYNTH_API_KEY')}")
1222
1171
  except Exception:
1223
1172
  pass
1224
1173
  data_fragment: Dict[str, Any] = {
@@ -1274,8 +1223,8 @@ def cmd_run(args: argparse.Namespace) -> int:
1274
1223
  base_url = env.dev_backend_url
1275
1224
  print("Hint: HTTP 401 Unauthorized from backend. Verify SYNTH_API_KEY for:", base_url)
1276
1225
  if sk:
1277
- print(f" SYNTH_API_KEY len={len(sk)} last5={sk[-5:]}")
1278
- print("Also ensure your Modal secret contains a valid ENVIRONMENT_API_KEY.")
1226
+ print(f" {_key_preview(sk, 'SYNTH_API_KEY')}")
1227
+ print("Ensure the ENVIRONMENT_API_KEY and OPENAI_API_KEY used for deployment remain valid.")
1279
1228
  except Exception:
1280
1229
  pass
1281
1230
  return 2
@@ -4,7 +4,6 @@ import json
4
4
  import os
5
5
  import subprocess
6
6
  import sys
7
- import time
8
7
  from dataclasses import dataclass
9
8
  from typing import Any, Dict, Optional, Tuple
10
9
 
@@ -13,6 +12,9 @@ import urllib.request
13
12
  from synth_ai.config.base_url import PROD_BASE_URL_DEFAULT
14
13
 
15
14
 
15
+ DEFAULT_TASK_APP_SECRET_NAME = "hendrycks-math-task-app-secret"
16
+
17
+
16
18
  @dataclass
17
19
  class DemoEnv:
18
20
  dev_backend_url: str = ""
@@ -20,8 +22,7 @@ class DemoEnv:
20
22
  env_api_key: str = ""
21
23
  task_app_base_url: str = ""
22
24
  task_app_name: str = ""
23
- task_app_secret_name: str = ""
24
-
25
+ task_app_secret_name: str = DEFAULT_TASK_APP_SECRET_NAME
25
26
 
26
27
  def _mask(value: str, keep: int = 4) -> str:
27
28
  if not value:
@@ -285,7 +286,7 @@ def load_env() -> DemoEnv:
285
286
  )
286
287
 
287
288
  task_app_name = str(state.get("TASK_APP_NAME") or "")
288
- task_app_secret_name = str(state.get("TASK_APP_SECRET_NAME") or "")
289
+ task_app_secret_name = str(state.get("TASK_APP_SECRET_NAME") or DEFAULT_TASK_APP_SECRET_NAME)
289
290
 
290
291
  env.dev_backend_url = dev_url.rstrip("/")
291
292
  env.synth_api_key = synth_api_key
@@ -367,16 +368,17 @@ def persist_task_url(url: str, *, name: str | None = None) -> None:
367
368
  if data.get("TASK_APP_NAME") != name:
368
369
  data["TASK_APP_NAME"] = name
369
370
  changed.append("TASK_APP_NAME")
370
- secret_name = f"{name}-secret"
371
- if data.get("TASK_APP_SECRET_NAME") != secret_name:
372
- data["TASK_APP_SECRET_NAME"] = secret_name
373
- if "TASK_APP_NAME" not in changed:
374
- changed.append("TASK_APP_SECRET_NAME")
371
+ if data.get("TASK_APP_SECRET_NAME") != DEFAULT_TASK_APP_SECRET_NAME:
372
+ data["TASK_APP_SECRET_NAME"] = DEFAULT_TASK_APP_SECRET_NAME
373
+ changed.append("TASK_APP_SECRET_NAME")
374
+ elif data.get("TASK_APP_SECRET_NAME") != DEFAULT_TASK_APP_SECRET_NAME:
375
+ data["TASK_APP_SECRET_NAME"] = DEFAULT_TASK_APP_SECRET_NAME
376
+ changed.append("TASK_APP_SECRET_NAME")
375
377
  _write_state(data)
376
378
  if changed:
377
379
  print(f"Saved {', '.join(changed)} to {_state_path()}")
378
- if "TASK_APP_NAME" in changed or "TASK_APP_SECRET_NAME" in changed:
379
- print(f"TASK_APP_SECRET_NAME={data.get('TASK_APP_SECRET_NAME', '')}")
380
+ if "TASK_APP_SECRET_NAME" in changed:
381
+ print(f"TASK_APP_SECRET_NAME={DEFAULT_TASK_APP_SECRET_NAME}")
380
382
 
381
383
 
382
384
  def persist_api_key(key: str) -> None:
@@ -8,6 +8,11 @@ from pathlib import Path
8
8
  from modal import App, Image, Secret, asgi_app
9
9
  from functools import lru_cache
10
10
 
11
+ try: # Backward compatibility with older installed SDKs
12
+ from synth_ai.demos.demo_task_apps.core import DEFAULT_TASK_APP_SECRET_NAME
13
+ except Exception: # pragma: no cover - occurs on older deployments
14
+ DEFAULT_TASK_APP_SECRET_NAME = "hendrycks-math-task-app-secret"
15
+
11
16
  # Self-contained: no external problem bank installer required
12
17
 
13
18
 
@@ -42,16 +47,40 @@ if _SYNTH_HOSTED is not None:
42
47
 
43
48
  # No extra local dirs required; app is self-contained
44
49
 
50
+
51
+ def _build_inline_secret() -> Secret:
52
+ required = ("ENVIRONMENT_API_KEY",)
53
+ optional = ("SYNTH_API_KEY", "OPENAI_API_KEY")
54
+ payload: dict[str, str] = {}
55
+ missing: list[str] = []
56
+
57
+ for key in required:
58
+ value = (os.environ.get(key) or "").strip()
59
+ if not value:
60
+ missing.append(key)
61
+ else:
62
+ payload[key] = value
63
+
64
+ for key in optional:
65
+ value = (os.environ.get(key) or "").strip()
66
+ if value:
67
+ payload[key] = value
68
+
69
+ if missing:
70
+ raise RuntimeError(
71
+ "Missing required environment values for inline secret: " + ", ".join(missing)
72
+ )
73
+
74
+ previews = ", ".join(f"{k}:len={len(v)}" for k, v in payload.items())
75
+ print(f"[startup] TASK_APP_SECRET_NAME={DEFAULT_TASK_APP_SECRET_NAME}")
76
+ print(f"[startup] inline secret prepared ({previews})")
77
+
78
+ return Secret.from_dict(payload)
79
+
80
+
81
+ INLINE_SECRET = _build_inline_secret()
82
+
45
83
  app = App("hendrycks-math-task-app")
46
- _SECRET_NAME = (
47
- os.getenv("TASK_APP_SECRET_NAME")
48
- or os.getenv("MATH_TASK_APP_SECRET")
49
- or os.getenv("TASK_APP_NAME", "").strip()
50
- )
51
- if not _SECRET_NAME:
52
- _SECRET_NAME = "synth-math-demo-secret"
53
- elif not _SECRET_NAME.endswith("-secret"):
54
- _SECRET_NAME = f"{_SECRET_NAME}-secret"
55
84
 
56
85
 
57
86
  @app.function(
@@ -60,7 +89,7 @@ elif not _SECRET_NAME.endswith("-secret"):
60
89
  memory=16384,
61
90
  cpu=4,
62
91
  min_containers=1,
63
- secrets=[Secret.from_name(_SECRET_NAME)],
92
+ secrets=[INLINE_SECRET],
64
93
  )
65
94
  @asgi_app()
66
95
  def fastapi_app():
@@ -112,6 +141,23 @@ def fastapi_app():
112
141
  allow_headers=["*"],
113
142
  )
114
143
 
144
+ import logging
145
+
146
+ logger = logging.getLogger("hendrycks_math_task_app")
147
+ if not logger.handlers:
148
+ logger.addHandler(logging.StreamHandler())
149
+ logger.setLevel(logging.INFO)
150
+
151
+ def _log_env_key_prefix(source: str, env_key: str | None) -> str | None:
152
+ if not env_key:
153
+ return None
154
+ half = max(1, len(env_key) // 2)
155
+ prefix = env_key[:half]
156
+ msg = f"[{source}] expected ENVIRONMENT_API_KEY prefix: {prefix}"
157
+ print(msg)
158
+ logger.info(msg)
159
+ return prefix
160
+
115
161
  @app.get("/info")
116
162
  async def info():
117
163
  return {
@@ -125,7 +171,14 @@ def fastapi_app():
125
171
  if not env_key:
126
172
  return JSONResponse(status_code=503, content={"status": "unhealthy", "detail": "Missing ENVIRONMENT_API_KEY"})
127
173
  if x_api_key is not None and x_api_key != env_key:
128
- return JSONResponse(status_code=401, content={"status": "unauthorized", "detail": "Invalid API key"})
174
+ prefix = _log_env_key_prefix("health", env_key)
175
+ content = {"status": "unauthorized", "detail": "Invalid API key"}
176
+ headers = None
177
+ if prefix:
178
+ content["detail"] = f"Invalid API key (expected prefix: {prefix})"
179
+ content["expected_api_key_prefix"] = prefix
180
+ headers = {"X-Expected-API-Key-Prefix": prefix}
181
+ return JSONResponse(status_code=401, content=content, headers=headers)
129
182
  return {"status": "healthy"}
130
183
 
131
184
  # Optional rollout-specific health for CLI compatibility
@@ -135,7 +188,14 @@ def fastapi_app():
135
188
  if not env_key:
136
189
  return JSONResponse(status_code=503, content={"status": "unhealthy", "detail": "Missing ENVIRONMENT_API_KEY"})
137
190
  if not x_api_key or x_api_key != env_key:
138
- return JSONResponse(status_code=401, content={"status": "unauthorized", "detail": "Invalid or missing API key"})
191
+ prefix = _log_env_key_prefix("health/rollout", env_key)
192
+ content = {"status": "unauthorized", "detail": "Invalid or missing API key"}
193
+ headers = None
194
+ if prefix:
195
+ content["detail"] = f"Invalid or missing API key (expected prefix: {prefix})"
196
+ content["expected_api_key_prefix"] = prefix
197
+ headers = {"X-Expected-API-Key-Prefix": prefix}
198
+ return JSONResponse(status_code=401, content=content, headers=headers)
139
199
  return {"ok": True}
140
200
 
141
201
  # _load_hendrycks_problem is defined at fastapi_app scope
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.2.8.dev7
3
+ Version: 0.2.8.dev9
4
4
  Summary: RL as a service SDK - Core AI functionality and tracing
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
@@ -21,16 +21,16 @@ synth_ai/config/base_url.py,sha256=c85LaABBrvsl8Fp8KH0LNtJJrpnUwlzA5Ywbuth8fHE,3
21
21
  synth_ai/core/experiment.py,sha256=hLkPtzUFA7iY3-QpeJ5K8YjvQeyfqnjab5P2CFaojys,236
22
22
  synth_ai/core/system.py,sha256=s-Z7np2ISYmYc1r9YN-y2yb3cgRlOalrh0iaqnxeo84,206
23
23
  synth_ai/demos/core/__init__.py,sha256=A2FjhY7KXGtyzdQXqeTPCkEhHfrH-eQg6bvP8HaYhZM,36
24
- synth_ai/demos/core/cli.py,sha256=lwkW1j638pOaLpmo6vPtDvEjsWdtLDCTwjbHoSHOdA8,56220
24
+ synth_ai/demos/core/cli.py,sha256=3yQSyygbK6Ix2UZCbVepVrSQF4LnI4E2TARLlyuhVF4,54009
25
25
  synth_ai/demos/demo_task_apps/__init__.py,sha256=8aUGEGpWUw11GRb3wQXRAmQ99yjAt5qd5FCTDJpXWjI,44
26
- synth_ai/demos/demo_task_apps/core.py,sha256=ifKxxRKqC-y43MaqLHNuerXAlBHO8MI8ZBo2CzYcOoU,14563
26
+ synth_ai/demos/demo_task_apps/core.py,sha256=Eu7gp0VtZ9tE1HPLG14-pkjC1cD_7brsdl2IRbdSBts,14764
27
27
  synth_ai/demos/demo_task_apps/math/__init__.py,sha256=WBzpZwSn7pRarBmhopQi34i9bEm05-71eM3siboOavY,43
28
28
  synth_ai/demos/demo_task_apps/math/_common.py,sha256=SgtVW1pne4pgwGS2gYYQWkmG9BvU2sQTYzlncmUJ0NM,533
29
29
  synth_ai/demos/demo_task_apps/math/app.py,sha256=gNopoAhwM0vzdKuCa7AwQqSwiV2xagrjMxMH9YIniv4,1160
30
30
  synth_ai/demos/demo_task_apps/math/config.toml,sha256=Kxrzuyj7Az5mvzXaipPIyngKTDqphohf6uSWOHCF5cw,2105
31
31
  synth_ai/demos/demo_task_apps/math/deploy_modal.py,sha256=O4745sFuGEZTsygl-mz6ZOFJ7mog8CquXMgMyjFKr_c,2288
32
32
  synth_ai/demos/demo_task_apps/math/deploy_task_app.sh,sha256=qVffbAmsiCAxzFDzcxNVF4f7yyLWnmqPc1cNydHT5BQ,791
33
- synth_ai/demos/demo_task_apps/math/modal_task_app.py,sha256=PE6LtRmz-56nbMT0tCInSr5IRUIpq-jVOrhZMTmMna4,19026
33
+ synth_ai/demos/demo_task_apps/math/modal_task_app.py,sha256=JKSlBxl5BetTx8211PomHvqPibj6bglx-iXFYYmO87s,21313
34
34
  synth_ai/environments/__init__.py,sha256=BQW0Nc_BFQq_N-pcqTyJVjW56kSEXu7XZyaSer-U95Q,1032
35
35
  synth_ai/environments/environment/__init__.py,sha256=EBol9AKxPTIPXWcbH9Tja-l3yL-N2kB8e5atyf6F66c,31
36
36
  synth_ai/environments/environment/core.py,sha256=0jd0CZ88_s_qqA3d1lOgVsnv-ucw_1lJDAIUj1gTSt0,2201
@@ -412,9 +412,9 @@ synth_ai/v0/tracing_v1/events/manage.py,sha256=ZDXXP-ZwLH9LCsmw7Ru9o55d7bl_diPtJ
412
412
  synth_ai/v0/tracing_v1/events/scope.py,sha256=BuBkhSpVHUJt8iGT9HJZF82rbb88mQcd2vM2shg-w2I,2550
413
413
  synth_ai/v0/tracing_v1/events/store.py,sha256=0342lvAcalyJbVEIzQFaPuMQGgwiFm7M5rE6gr-G0E8,9041
414
414
  synth_ai/zyk/__init__.py,sha256=htVLnzTYQ5rxzYpzSYBm7_o6uNKZ3pB_PrqkBrgTRS4,771
415
- synth_ai-0.2.8.dev7.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
416
- synth_ai-0.2.8.dev7.dist-info/METADATA,sha256=NhVDsnnUZ2UYfMURfhfdl_ukMaeyB3Zo3xtuvjQlnms,5152
417
- synth_ai-0.2.8.dev7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
418
- synth_ai-0.2.8.dev7.dist-info/entry_points.txt,sha256=Neq-3bT7TAijjgOIR77pKL-WYg6TWBDeO8pp_nL4vGY,91
419
- synth_ai-0.2.8.dev7.dist-info/top_level.txt,sha256=fBmtZyVHuKaGa29oHBaaUkrUIWTqSpoVMPiVdCDP3k8,9
420
- synth_ai-0.2.8.dev7.dist-info/RECORD,,
415
+ synth_ai-0.2.8.dev9.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
416
+ synth_ai-0.2.8.dev9.dist-info/METADATA,sha256=GhbfwG2ZggpD4GgfnWfSc4DoRG1OKktoRQL4XBKJ1gw,5152
417
+ synth_ai-0.2.8.dev9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
418
+ synth_ai-0.2.8.dev9.dist-info/entry_points.txt,sha256=Neq-3bT7TAijjgOIR77pKL-WYg6TWBDeO8pp_nL4vGY,91
419
+ synth_ai-0.2.8.dev9.dist-info/top_level.txt,sha256=fBmtZyVHuKaGa29oHBaaUkrUIWTqSpoVMPiVdCDP3k8,9
420
+ synth_ai-0.2.8.dev9.dist-info/RECORD,,