synth-ai 0.2.10__py3-none-any.whl → 0.2.12__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.

Files changed (38) hide show
  1. examples/multi_step/task_app_config_notes.md +488 -0
  2. examples/warming_up_to_rl/configs/eval_stepwise_complex.toml +33 -0
  3. examples/warming_up_to_rl/configs/eval_stepwise_consistent.toml +26 -0
  4. examples/warming_up_to_rl/configs/eval_stepwise_per_achievement.toml +36 -0
  5. examples/warming_up_to_rl/configs/eval_stepwise_simple.toml +30 -0
  6. examples/warming_up_to_rl/run_eval.py +142 -25
  7. examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py +146 -2
  8. synth_ai/api/train/builders.py +25 -14
  9. synth_ai/api/train/cli.py +29 -6
  10. synth_ai/api/train/env_resolver.py +18 -19
  11. synth_ai/api/train/supported_algos.py +8 -5
  12. synth_ai/api/train/utils.py +6 -1
  13. synth_ai/cli/__init__.py +4 -2
  14. synth_ai/cli/_storage.py +19 -0
  15. synth_ai/cli/balance.py +14 -2
  16. synth_ai/cli/calc.py +37 -22
  17. synth_ai/cli/legacy_root_backup.py +12 -14
  18. synth_ai/cli/recent.py +12 -7
  19. synth_ai/cli/status.py +4 -3
  20. synth_ai/cli/task_apps.py +143 -137
  21. synth_ai/cli/traces.py +4 -3
  22. synth_ai/cli/watch.py +3 -2
  23. synth_ai/jobs/client.py +15 -3
  24. synth_ai/task/server.py +14 -7
  25. synth_ai/tracing_v3/decorators.py +51 -26
  26. synth_ai/tracing_v3/examples/basic_usage.py +12 -7
  27. synth_ai/tracing_v3/llm_call_record_helpers.py +107 -53
  28. synth_ai/tracing_v3/replica_sync.py +8 -4
  29. synth_ai/tracing_v3/storage/utils.py +11 -9
  30. synth_ai/tracing_v3/turso/__init__.py +12 -0
  31. synth_ai/tracing_v3/turso/daemon.py +2 -1
  32. synth_ai/tracing_v3/turso/native_manager.py +28 -15
  33. {synth_ai-0.2.10.dist-info → synth_ai-0.2.12.dist-info}/METADATA +4 -2
  34. {synth_ai-0.2.10.dist-info → synth_ai-0.2.12.dist-info}/RECORD +38 -31
  35. {synth_ai-0.2.10.dist-info → synth_ai-0.2.12.dist-info}/WHEEL +0 -0
  36. {synth_ai-0.2.10.dist-info → synth_ai-0.2.12.dist-info}/entry_points.txt +0 -0
  37. {synth_ai-0.2.10.dist-info → synth_ai-0.2.12.dist-info}/licenses/LICENSE +0 -0
  38. {synth_ai-0.2.10.dist-info → synth_ai-0.2.12.dist-info}/top_level.txt +0 -0
@@ -11,18 +11,14 @@ import asyncio
11
11
  import json
12
12
  import logging
13
13
  import re
14
+ from collections.abc import Callable
14
15
  from dataclasses import asdict, dataclass
15
16
  from datetime import UTC, datetime
16
- from typing import Any
17
+ from typing import TYPE_CHECKING, Any, cast
17
18
 
18
19
  import libsql
19
20
  from sqlalchemy.engine import make_url
20
21
 
21
- try: # pragma: no cover - exercised only when pandas present
22
- import pandas as pd # type: ignore
23
- except Exception: # pragma: no cover
24
- pd = None # type: ignore[assignment]
25
-
26
22
  from ..abstractions import (
27
23
  EnvironmentEvent,
28
24
  LMCAISEvent,
@@ -34,6 +30,24 @@ from ..config import CONFIG
34
30
  from ..storage.base import TraceStorage
35
31
  from .models import analytics_views
36
32
 
33
+ if TYPE_CHECKING:
34
+ from sqlite3 import Connection as LibsqlConnection
35
+ else: # pragma: no cover - runtime fallback for typing only
36
+ LibsqlConnection = Any # type: ignore[assignment]
37
+
38
+ _LIBSQL_CONNECT_ATTR = getattr(libsql, "connect", None)
39
+ if _LIBSQL_CONNECT_ATTR is None: # pragma: no cover - defensive guard
40
+ raise RuntimeError("libsql.connect is required for NativeLibsqlTraceManager")
41
+ _libsql_connect: Callable[..., LibsqlConnection] = cast(
42
+ Callable[..., LibsqlConnection],
43
+ _LIBSQL_CONNECT_ATTR,
44
+ )
45
+
46
+ try: # pragma: no cover - exercised only when pandas present
47
+ import pandas as pd # type: ignore
48
+ except Exception: # pragma: no cover
49
+ pd = None # type: ignore[assignment]
50
+
37
51
  logger = logging.getLogger(__name__)
38
52
 
39
53
 
@@ -66,9 +80,8 @@ def _resolve_connection_target(db_url: str | None, auth_token: str | None) -> _C
66
80
  # Fallback to SQLAlchemy URL parsing for anything else we missed.
67
81
  try:
68
82
  parsed = make_url(url)
69
- if parsed.drivername.startswith("sqlite"):
70
- if parsed.database:
71
- return _ConnectionTarget(database=parsed.database, auth_token=auth_token)
83
+ if parsed.drivername.startswith("sqlite") and parsed.database:
84
+ return _ConnectionTarget(database=parsed.database, auth_token=auth_token)
72
85
  if parsed.drivername.startswith("libsql"):
73
86
  database = parsed.render_as_string(hide_password=False)
74
87
  return _ConnectionTarget(database=database, sync_url=database, auth_token=auth_token)
@@ -314,12 +327,12 @@ class NativeLibsqlTraceManager(TraceStorage):
314
327
  ):
315
328
  self._config_auth_token = auth_token
316
329
  self._target = _resolve_connection_target(db_url, auth_token)
317
- self._conn: libsql.Connection | None = None
330
+ self._conn: LibsqlConnection | None = None
318
331
  self._conn_lock = asyncio.Lock()
319
332
  self._op_lock = asyncio.Lock()
320
333
  self._initialized = False
321
334
 
322
- def _open_connection(self) -> libsql.Connection:
335
+ def _open_connection(self) -> LibsqlConnection:
323
336
  """Open a libsql connection for the resolved target."""
324
337
  kwargs: dict[str, Any] = {}
325
338
  if self._target.sync_url and self._target.sync_url.startswith("libsql://"):
@@ -329,7 +342,7 @@ class NativeLibsqlTraceManager(TraceStorage):
329
342
  # Disable automatic background sync; ReplicaSync drives this explicitly.
330
343
  kwargs.setdefault("sync_interval", 0)
331
344
  logger.debug("Opening libsql connection to %s", self._target.database)
332
- return libsql.connect(self._target.database, **kwargs)
345
+ return _libsql_connect(self._target.database, **kwargs)
333
346
 
334
347
  async def initialize(self):
335
348
  """Initialise the backend."""
@@ -493,7 +506,7 @@ class NativeLibsqlTraceManager(TraceStorage):
493
506
  return None
494
507
 
495
508
  session_columns = ["session_id", "created_at", "num_timesteps", "num_events", "num_messages", "metadata"]
496
- session_data = dict(zip(session_columns, session_row))
509
+ session_data = dict(zip(session_columns, session_row, strict=True))
497
510
 
498
511
  timestep_cursor = conn.execute(
499
512
  """
@@ -608,10 +621,10 @@ class NativeLibsqlTraceManager(TraceStorage):
608
621
 
609
622
  if not rows:
610
623
  if pd is not None:
611
- return pd.DataFrame(columns=[col for col in columns])
624
+ return pd.DataFrame(columns=list(columns))
612
625
  return []
613
626
 
614
- records = [dict(zip(columns, row)) for row in rows]
627
+ records = [dict(zip(columns, row, strict=True)) for row in rows]
615
628
  if pd is not None:
616
629
  return pd.DataFrame(records)
617
630
  return records
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.2.10
3
+ Version: 0.2.12
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
@@ -79,7 +79,7 @@ Dynamic: license-file
79
79
 
80
80
  [![Python](https://img.shields.io/badge/python-3.11+-blue)](https://www.python.org/)
81
81
  [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
82
- [![PyPI](https://img.shields.io/badge/PyPI-0.2.4.dev9-orange)](https://pypi.org/project/synth-ai/)
82
+ [![PyPI](https://img.shields.io/badge/PyPI-0.2.10-orange)](https://pypi.org/project/synth-ai/)
83
83
  ![Coverage](https://img.shields.io/badge/coverage-9.09%25-red)
84
84
  ![Tests](https://img.shields.io/badge/tests-37%2F38%20passing-brightgreen)
85
85
  ![Blacksmith CI](https://img.shields.io/badge/CI-Blacksmith%20Worker-blue)
@@ -88,6 +88,8 @@ Docs: [Synth‑AI Documentation](https://docs.usesynth.ai/welcome/introduction)
88
88
 
89
89
  Fast and effective reinforcement learning for agents, via an API
90
90
 
91
+ > Latest: 0.2.10 published to PyPI (uv publish)
92
+
91
93
  ## Highlights
92
94
 
93
95
  - Easily scale gpu topologies - train on 3 a10gs or 8 H100s (multi-node available upon request)
@@ -4,6 +4,7 @@ examples/crafter_debug_render.py,sha256=McPkX8z6ffANOfoR0Xw26h81HNHtT0F5y4bzUhwY
4
4
  examples/run_crafter_demo.sh,sha256=7FNvooSgq-ezccGy5j_h_uRXObiQtcnybPcTwaVGDpo,392
5
5
  examples/dev/qwen3_32b_qlora_4xh100.toml,sha256=YXLo1I_eHamUHMjIvsD9Tx3_HXcLfjlasd6X2BF7i5g,766
6
6
  examples/multi_step/crafter_rl_lora.md,sha256=yv7C7lyBELT8OWufi8PtG-Z7Hqxr5KxVTmK8XUxOAIw,1033
7
+ examples/multi_step/task_app_config_notes.md,sha256=nCyJYZwPI_5ifmuNw_cJATeRaO0aikk67tbG_J4WQns,21841
7
8
  examples/qwen_coder/README.md,sha256=xhoGKdIlRt8fO3F6HTpq6rzw3bs4ezDsGcRBNCz90Fs,3145
8
9
  examples/qwen_coder/_shared.py,sha256=oGUmx7gKkgkmToXHXAPocG72YKO9WGRjguVhmX3XE7s,3557
9
10
  examples/qwen_coder/generate_dataset.py,sha256=bfa1LMvV7jd2GmNkFE5rn2K1SETNEzMjv7SXD0C24K0,4484
@@ -84,7 +85,7 @@ examples/warming_up_to_rl/export_trace_sft.py,sha256=qcVOgZduYYImDv2xs-h_CoyMpX_
84
85
  examples/warming_up_to_rl/groq_test.py,sha256=vffVVTwQNypkqppxMLy17ySafoD2WKIK-Qf9w13lbyE,3138
85
86
  examples/warming_up_to_rl/manage_secrets.py,sha256=qLe_zglOLCd0dxPPCyQQ9CnhGkvtLOkBrZ0Xd4mmnIw,4372
86
87
  examples/warming_up_to_rl/readme.md,sha256=u2KX7grlDnOMRRrC3vzTej1K0OOmTdx5LHs2opTfLt4,6431
87
- examples/warming_up_to_rl/run_eval.py,sha256=iYoblB_3lQN7P_U4dEiSobPeVHCt5st65GHYMLmJu-Y,19925
88
+ examples/warming_up_to_rl/run_eval.py,sha256=-jd7_TtAyNKiHyH92slvDF-JzfCDH23M8q5CK-_usCo,26212
88
89
  examples/warming_up_to_rl/run_fft_and_save.py,sha256=RVbMuHUB0F7h_CO26hvAhEx5W3fqxVvokb4VlOiR6RQ,15095
89
90
  examples/warming_up_to_rl/run_local_rollout.py,sha256=uRfCR1E066fF6cQTajllb0Dzv0sU4iT6QOitZ_jRVHw,8783
90
91
  examples/warming_up_to_rl/run_local_rollout_modal.py,sha256=oGHqSCNUSAluJFlVkOKItONWh0wUu4UxRXmqnkD37E8,8948
@@ -97,6 +98,10 @@ examples/warming_up_to_rl/configs/crafter_fft_4b.toml,sha256=q_cnU3P-eGG_VFOepw9
97
98
  examples/warming_up_to_rl/configs/eval_fft_qwen4b.toml,sha256=YP4HLWDh6iIvw6McPXw5kK1RUFQF4dvKP4yH5bHT5nI,678
98
99
  examples/warming_up_to_rl/configs/eval_groq_qwen32b.toml,sha256=zQi31JYa83kW-ceEqDZi-7oajsCmEPrlJR57zN5ygO8,340
99
100
  examples/warming_up_to_rl/configs/eval_modal_qwen4b.toml,sha256=6eeU1GVvK1cYSEuGXk-AhOwJLgRcf74CTOI5XlqNYBc,817
101
+ examples/warming_up_to_rl/configs/eval_stepwise_complex.toml,sha256=sTfzF4z9IXFmReftdgHMw5k3aH78bdpSlF_ANyovsdo,941
102
+ examples/warming_up_to_rl/configs/eval_stepwise_consistent.toml,sha256=N5xt_9_AaVvJX6up90bSuXpF8Yt-cGJfmTA-Au3NY_4,591
103
+ examples/warming_up_to_rl/configs/eval_stepwise_per_achievement.toml,sha256=ly42h8kIeSX8Y9mygC8mx7G_0KypUcPB9vqx8P-6QmQ,825
104
+ examples/warming_up_to_rl/configs/eval_stepwise_simple.toml,sha256=ZNCryLgVCEkv8anP1pKkfNZ_X2kiloW4lmTqeJXtbxs,783
100
105
  examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml,sha256=MrcjPlR-5s7XayBXl087QcGuR6484HcdSgS9yYUE5uo,1868
101
106
  examples/warming_up_to_rl/configs/rl_from_ft.toml,sha256=d1cIoLeC80NgOjn0Wohk0a5IXE_ImHVgMsxWPkyAFKQ,1381
102
107
  examples/warming_up_to_rl/old/event_rewards.md,sha256=gHJd3ZeYOnj4xPXt-7sSJamgOaJQ-BpfdaF-CKJK3-0,13450
@@ -112,7 +117,7 @@ examples/warming_up_to_rl/task_app/synth_envs_hosted/hosted_app.py,sha256=hr1jbl
112
117
  examples/warming_up_to_rl/task_app/synth_envs_hosted/main.py,sha256=-GL__EH3Xr47vp3aD30XNXNrFPOj1bRLpOYQ-yvfwIU,2481
113
118
  examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py,sha256=6Wq62ni5qnW2fXuEuoGD0cMKAxjtNve_oG378Aqz1as,48568
114
119
  examples/warming_up_to_rl/task_app/synth_envs_hosted/registry.py,sha256=5dN2Z-qVU4T_UUflHC9XGiIdDqFUl03G7uejcrYRbTE,5480
115
- examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py,sha256=g-CCh0HaNsUabzbQEUB4woCl0JcbzKUDe_LXXY8Jksw,78850
120
+ examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py,sha256=8pzUbpdIYTmrfLPGxzwr0tgn7ng75ijEMY4_XONBMC4,84720
116
121
  examples/warming_up_to_rl/task_app/synth_envs_hosted/test_agents.py,sha256=-TDfCs-LSlRgyWHGvO_6YAmjauwi1x4618D8CA9d8aA,5600
117
122
  examples/warming_up_to_rl/task_app/synth_envs_hosted/test_service.py,sha256=jFEtE3UqVCq552MSPliS2eO0pDbAS3tSDRJL0A-edTA,5111
118
123
  examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py,sha256=8Rnp0NTKTD_kPXg8zfpIy_we2hfk2agKPUVH_aqMsE0,1994
@@ -136,30 +141,31 @@ synth_ai/http.py,sha256=ACzDOkwa7kIniZVOZngPc6Zfp05h6rQE1oNqsWG_FKo,1038
136
141
  synth_ai/http_client.py,sha256=5AkwvGf7HpvYUpxr_IIM1xdsDjLYois7xTht5ueHYkk,5058
137
142
  synth_ai/api/models/supported.py,sha256=vQu6Ahw1jn1X3-nL190pH_Z45tkQj8hdDyTTda8t5LQ,12671
138
143
  synth_ai/api/train/__init__.py,sha256=aBwlmrj1HWVwDcvUrX4TqpS0BgvkE7Pv7npoIZmtTFU,118
139
- synth_ai/api/train/builders.py,sha256=8TXHDDA2cyKYd7GmLeAMpocn1VS4LYQjNucF0f9674s,10378
140
- synth_ai/api/train/cli.py,sha256=WA3Tt2uYDFF55n8F-5pebCxzhG3slH00ZTuv_ZxKu0Q,22298
144
+ synth_ai/api/train/builders.py,sha256=k8EQSX2jYFbiePn2p-2sdG5rAbfxeeIOxrYI4UE6288,11026
145
+ synth_ai/api/train/cli.py,sha256=YZc_Scx-ClE6aJjVMEIzfsiBOlX7caSdg4mPGC-xPm0,23167
141
146
  synth_ai/api/train/config_finder.py,sha256=4touziSykzQ9YCYL2CjXUfojDcJdKO3vFnoWXQ1fOx8,7178
142
- synth_ai/api/train/env_resolver.py,sha256=fxl-tY6bjyZet29dXpDROz6wvZ9itwVQuBcXGBNwm8s,12208
147
+ synth_ai/api/train/env_resolver.py,sha256=X6ILO46UebkFJo0CDhzfVCb9y3HC-pOPIwkNhbGgvOo,11854
143
148
  synth_ai/api/train/pollers.py,sha256=-rcVrGMN7Rj2HrzJ1IAgphwcrsCzpwwTy0KDk76Sx2A,2341
144
- synth_ai/api/train/supported_algos.py,sha256=e5-NDEpsOExOhCYJrQPH_x6HAeGpKvco-xAwNWjh7xM,4846
149
+ synth_ai/api/train/supported_algos.py,sha256=AqCtrfiJkocULlDtTPppKWuvOOzQ4tBbh-k3e9MEDZk,5156
145
150
  synth_ai/api/train/task_app.py,sha256=MiJ0DLFjqdFNmgk-YHaHVQt31Kxl91Exh9IFfk7GSxM,6439
146
- synth_ai/api/train/utils.py,sha256=NraXlAk0QrR-q1GEh76r1vg1S-tfB6_Ux-vdJnxJyxo,5961
147
- synth_ai/cli/__init__.py,sha256=uGhlvSvQ36X8GL0FVaiZG7Wey5TyjSeMcr4UNGwR22A,2358
151
+ synth_ai/api/train/utils.py,sha256=_8C1uoXyXXuEmthquHH5XtowVQkf84Kde4jCdmfKnCk,6165
152
+ synth_ai/cli/__init__.py,sha256=WhaUb9_UNcQBM1c7W3VzeUKUaBBSV31C0cwvHI-9UFM,2423
148
153
  synth_ai/cli/_modal_wrapper.py,sha256=DHVP-wQi_gdxWyeEiA_DO0nRiMv7XpaOJ3T3-R2pVoI,599
154
+ synth_ai/cli/_storage.py,sha256=ABfpzyVnCNWFdAgzxvG0_6CGvEEl91BYNTcrTw_V3dY,680
149
155
  synth_ai/cli/_typer_patch.py,sha256=xBTshJadUQjtOr-PyGZUytpxyV28UvfU5DPWBCa_mTo,1562
150
- synth_ai/cli/balance.py,sha256=T-xcsRuIWVuoWJGPMu2ZEEpUSNlKtXQUDRJJBAPHyYQ,7977
151
- synth_ai/cli/calc.py,sha256=65vkAYIno0AWO8NZeoxqkB_s8-QpZrkY1sbDnFBYi94,2109
156
+ synth_ai/cli/balance.py,sha256=VTeJJ98JTA6Z7FujwNzRZAlTzO2BNcFueSnXJYV5f50,8432
157
+ synth_ai/cli/calc.py,sha256=cAED6qRzc9g_eKjk7o_ZQsGKw6TA4Dib7NNze8e8L2s,2740
152
158
  synth_ai/cli/demo.py,sha256=FCsohnKHzNmqT1wZ4PzJ2kLXOF7Mr0jS_ZZrEM_nFpM,5610
153
- synth_ai/cli/legacy_root_backup.py,sha256=KSMADyJ2g5OVpsq_CeBzqIeDC2Um-9GyINzsJH-75uw,15872
159
+ synth_ai/cli/legacy_root_backup.py,sha256=Ab3cVlOu3k3kLlrTc2SOtSTJTRxlwJ4JvZg9Ol2BbXg,15961
154
160
  synth_ai/cli/man.py,sha256=JQDon73ZkuKP9xr1_vRh5fjV9_b5xiUb7zNjny7ArB8,3765
155
- synth_ai/cli/recent.py,sha256=uvkrZHMSaccW2tK9rC_TW9hPC9Hxz2HyQSIAC8-Th6c,4207
161
+ synth_ai/cli/recent.py,sha256=iY7vwVH8T6YwEOEC0QLenZSZXpyedrYc_epbP8WORzE,4415
156
162
  synth_ai/cli/rl_demo.py,sha256=SBH5t5EnRgpq0nZm9LXlAunC8CprXwZkkTzjhWDrXaQ,9257
157
163
  synth_ai/cli/root.py,sha256=78oCkjtMaLSHEpHRbiaX-FEsdB3gieI7OrZcUMpqrSU,13740
158
- synth_ai/cli/status.py,sha256=ylz2idaMCkYwpZSY9-yXQrKW9KUWyrphxxT_vcc0HMY,4629
159
- synth_ai/cli/task_apps.py,sha256=NU0cRbbn3LD8U5FAuH9DmD9TKpW9AAb5DDQNhGraWTo,104700
160
- synth_ai/cli/traces.py,sha256=2ks84Orv91qgF6TQS2sZVtUUYEPGtjGMByaOCHl9NYs,6607
164
+ synth_ai/cli/status.py,sha256=vjr4ifL48pitKojBhuJdY4oIB8NnJ0RZF44fOzKS4SI,4635
165
+ synth_ai/cli/task_apps.py,sha256=d49vSAOqk-aKhQH1dWXwOhcEu3my-tRsjbdOBRQ3Mp8,105691
166
+ synth_ai/cli/traces.py,sha256=tyt2OUcREK82an9hc2Uq3H-xn0vWuTf_Pirt0CWkodg,6617
161
167
  synth_ai/cli/turso.py,sha256=y9aHehGA1VvaWkoZyBhu5fLulWUT65powrpvvVp7gpA,2301
162
- synth_ai/cli/watch.py,sha256=PhszGSNpJdPHb5D2Nh1FZc-gBt4aMioxdvggHdU-Lyo,17471
168
+ synth_ai/cli/watch.py,sha256=Wi5H2YdV3gsEVMd5YIte2LHMweWqLkGpsK3aopdjCQE,17481
163
169
  synth_ai/compound/cais.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
170
  synth_ai/config/base_url.py,sha256=c85LaABBrvsl8Fp8KH0LNtJJrpnUwlzA5Ywbuth8fHE,3454
165
171
  synth_ai/core/experiment.py,sha256=5ErxMLOMDHgBjWJjId-uViCyxwfx3Ns5NVrgMkPEpZk,234
@@ -404,7 +410,7 @@ synth_ai/environments/v0_observability/log.py,sha256=B4LvbPh0a1_E5dki2PlKAVHESB8
404
410
  synth_ai/evals/base.py,sha256=Pu_h3oJAAEqJxgj5eigqbVhrNjAGJnBtlxpacSbGXCI,353
405
411
  synth_ai/inference/__init__.py,sha256=5xwgFMKRfbLC7TX3lwMqGOZ8HHOEnXwlDqV_FLjsd5A,74
406
412
  synth_ai/inference/client.py,sha256=FA1h4rcMu7M0qCCCJ4yQTqC9dM1weVhDWylry8znnCc,1262
407
- synth_ai/jobs/client.py,sha256=MMtv8vEkfWJjBMrq-6TV7esZVYFl9o6ZXogVwa0Lla4,9546
413
+ synth_ai/jobs/client.py,sha256=_NtmBlm7LLZX22W6arfaa0DAq-0vsV-h_Ep2yHAiwnE,10125
408
414
  synth_ai/learning/__init__.py,sha256=Vk-5n8qAmGnNAIH-4LSU3vMD9CuX8_4ZFqwUJC9GDp4,1584
409
415
  synth_ai/learning/algorithms.py,sha256=N2sXJ-U5QfvmSCtB2KUkTMyg46_pibYXHdIrYSKGyxA,342
410
416
  synth_ai/learning/client.py,sha256=DdjCZZLch4SG9as019XZoq12OVC9ZSKJQk6D5WCjfIw,9526
@@ -439,7 +445,7 @@ synth_ai/task/health.py,sha256=wfNNLYlWLmwoPpHA8ahDdqb0YAZ8JTyHzs8bdIX-pOI,1139
439
445
  synth_ai/task/json.py,sha256=SB9XdHFloJha9WeClq4mvaL8B21-fRl9kb1d1JlNfIc,3612
440
446
  synth_ai/task/proxy.py,sha256=bUKPqc8IS94ToHzo7xZe2wzIODv3XW6dUIus3_OEpgE,9029
441
447
  synth_ai/task/rubrics.py,sha256=_qqAvl1NFGW6nJlzmI3UwjxuvWbOQeLcMwrZpmpMQGk,7180
442
- synth_ai/task/server.py,sha256=Z-06aEnK3Q3VZlGzv6VlQXnO0XwG2YrWODAcxIqvoVc,15952
448
+ synth_ai/task/server.py,sha256=lgDnFSxjMGdEWspibtoEeYAeQ3di1c3Bfvp7w7egdmU,16028
443
449
  synth_ai/task/tracing_utils.py,sha256=wk6Gl8JApZePLm_EBQc3EHNEvOdjQSa5mPa02IWQy5E,2505
444
450
  synth_ai/task/validators.py,sha256=OGPwdzoyoS8lMgq3nmzdUDEFwCDo2OC7ETQLWiE5Yao,360
445
451
  synth_ai/task/vendors.py,sha256=a5t_1HGwPnPUoPMbzNB87jOTCyA4S7W7eIgJ-E4Gfew,1626
@@ -448,25 +454,26 @@ synth_ai/tracing_v3/__init__.py,sha256=DRhOO-AFtCYSrQ_S-2gLTDCBZUVwy-NKgdAr9uh2K
448
454
  synth_ai/tracing_v3/abstractions.py,sha256=uja-8UMh-RWfpVBjsZwNw1UhNMpgsy4Zmd_pEq_qXjI,12865
449
455
  synth_ai/tracing_v3/config.py,sha256=mPX2P4ILv1ktoI8oGKO_LyLc0O6Lnr2jbHA3QE-y6N0,3241
450
456
  synth_ai/tracing_v3/db_config.py,sha256=t9yalucYHdna7kcIQB3aEM9MDThl2hvwbbJhqL_iIQs,6773
451
- synth_ai/tracing_v3/decorators.py,sha256=WAseqTnrsTKUXs0AGyspwbvoCM_Sba5bvd6tN6f86Q4,13546
457
+ synth_ai/tracing_v3/decorators.py,sha256=SPWBR2_FMFnlSQCDpIK8IF6h-27DMkqLEe-w8fnMQyw,14748
452
458
  synth_ai/tracing_v3/hooks.py,sha256=QUfVvE6H2HIkP-dED1ctBpxzJXpaM_7UU-XaU6043W4,7997
453
- synth_ai/tracing_v3/llm_call_record_helpers.py,sha256=yWDI3vewTr8qhfYszKZJZv4oABfREafHc8Ur1YwAM_U,12189
459
+ synth_ai/tracing_v3/llm_call_record_helpers.py,sha256=zZ0i6SB7l6WYud9mRLBTyZ4BJCgMmSDyhAZOg81T3k4,13633
454
460
  synth_ai/tracing_v3/lm_call_record_abstractions.py,sha256=j2RGuXVaV_EXmIosuXRDjptJSlrDXwb8x06k2fF6lqo,9195
455
461
  synth_ai/tracing_v3/migration_helper.py,sha256=izm7SNHtG3VDv_5ZmMk_mmwKitmShxUK3joNFOArZIY,4177
456
- synth_ai/tracing_v3/replica_sync.py,sha256=oDjlv7Z6fo8g-NrCwJEpcneIlTEOkTauqMvGBnFktpw,8671
462
+ synth_ai/tracing_v3/replica_sync.py,sha256=H3ReiULH3McnGxdrH9BWkSeIOFfUQ6enHk5SWeuRV6k,8843
457
463
  synth_ai/tracing_v3/session_tracer.py,sha256=z9-gt7SK68X_q0aOHwWOtGOaGClpoWkUkAxAOwTKpI8,18996
458
464
  synth_ai/tracing_v3/utils.py,sha256=t-ZEyP03j8k7jNxtLsOSvzQnq8SXBaRPdK7jCgPdVdI,3450
459
- synth_ai/tracing_v3/examples/basic_usage.py,sha256=z8Z4UscQJfxPW76cKEfGdUL4O_gEljgy2gxaQBrYIu0,7211
465
+ synth_ai/tracing_v3/examples/basic_usage.py,sha256=gSIWxeCYNe5WL38FjCaOCv0RvmxZ8SDiPWhA1-8XAeg,7342
460
466
  synth_ai/tracing_v3/storage/__init__.py,sha256=VPjBh180bcSPz1HsbqaqfnvguwqwomaEYKxkrhfGABY,332
461
467
  synth_ai/tracing_v3/storage/base.py,sha256=Ou-J_IINQqG2GgQfYcF3FIaAteoEfZZzmnTsDisa_II,5995
462
468
  synth_ai/tracing_v3/storage/config.py,sha256=l8XRSP8-WAUSLyGqkGVKsdmruDzPxn4JcdsoAM44x38,2572
463
469
  synth_ai/tracing_v3/storage/exceptions.py,sha256=zqfsjb4r8qcZGlId0h9-x0RpJq2_DRDfdlzW6_KIRCw,708
464
470
  synth_ai/tracing_v3/storage/factory.py,sha256=cgF6WGd6o7JUKhRxNpLC221ludB_YWL-wxwPecidOlQ,1303
465
471
  synth_ai/tracing_v3/storage/types.py,sha256=LevN8M12ilZ0EaiQ6Y3yONSMuLGEhSKNt0ir5wbVbek,613
466
- synth_ai/tracing_v3/storage/utils.py,sha256=0fbJNwAXVRfwkg_RM9nRAdSbQTDoDnt_AdR3aFZDHzg,6180
467
- synth_ai/tracing_v3/turso/daemon.py,sha256=cpHpuFjgbtUNby5dX0zVIIacPogr1lxu3zWy68LlDUc,4408
472
+ synth_ai/tracing_v3/storage/utils.py,sha256=yDjy6Uoz9PXYk-bGWVxG31MfGN3ncvea0R591lPxJ70,6461
473
+ synth_ai/tracing_v3/turso/__init__.py,sha256=hcwysYjh1_ckqrn2DW4QSc2l0jdfN-INrfWciOsTqdI,286
474
+ synth_ai/tracing_v3/turso/daemon.py,sha256=X4SF-ih3ETtJFxTXMxeEektQvRkI2Hz3wyMrjEFQKSA,4426
468
475
  synth_ai/tracing_v3/turso/models.py,sha256=BZg4bo-V9enr8R5pJ9mOTsfb6QdrULjj_jgMgnwzeqM,16362
469
- synth_ai/tracing_v3/turso/native_manager.py,sha256=aXP7YYSr3Lq7I2Ovf4979oWGJURGGOp-kiTfuwvbIRY,41513
476
+ synth_ai/tracing_v3/turso/native_manager.py,sha256=LFSghD9oD693U9mkidUgwWZvep-fZWB7R7IlQBBa35k,42091
470
477
  synth_ai/v0/api/__init__.py,sha256=wgz7K2rwVmxTRx0vy5abWclC2NTVjsM1buYQxXCnF3k,197
471
478
  synth_ai/v0/api/models/__init__.py,sha256=-VNJS0rSmrWaXnb2RkaBoDXc_9roO7ZgWVBe1vGKz-8,167
472
479
  synth_ai/v0/api/models/supported.py,sha256=aQCUi9xPn1Nt5Xd7yN42RyZVppsYaUdCADFoew_NhoE,246
@@ -569,9 +576,9 @@ synth_ai/v0/tracing_v3/abstractions.py,sha256=7IHKkzicFEJ4UXJbodK11Pi8YYq7Vt8Ev_
569
576
  synth_ai/v0/tracing_v3/decorators.py,sha256=fRyVBKEbxAPZoDsBH7t8OVLVixvgD_Lw_1ONF1TuZxU,108
570
577
  synth_ai/v0/tracing_v3/llm_call_record_helpers.py,sha256=JYSpGtW-RC-DnhUIPdVADNF3rK5x8Tl8DOymbmRI99I,121
571
578
  synth_ai/v0/tracing_v3/session_tracer.py,sha256=TSUzb_fUUlpwOqFE1X-Fs14nG2CNe7MZLKOvH7cV2kE,112
572
- synth_ai-0.2.10.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
573
- synth_ai-0.2.10.dist-info/METADATA,sha256=nOVXoLZrQApH5oJn0VJXmtE7LGkQpsccvXzDu5_AE2c,5379
574
- synth_ai-0.2.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
575
- synth_ai-0.2.10.dist-info/entry_points.txt,sha256=Neq-3bT7TAijjgOIR77pKL-WYg6TWBDeO8pp_nL4vGY,91
576
- synth_ai-0.2.10.dist-info/top_level.txt,sha256=1moNHgctEUJ3F3eH3V-7FSMb2iTTze1V13dj1R04oUY,18
577
- synth_ai-0.2.10.dist-info/RECORD,,
579
+ synth_ai-0.2.12.dist-info/licenses/LICENSE,sha256=ynhjRQUfqA_RdGRATApfFA_fBAy9cno04sLtLUqxVFM,1069
580
+ synth_ai-0.2.12.dist-info/METADATA,sha256=SOcZAekWv6vMdvP5lLzyVitE1zRdUZHGCN-YEZnsiP4,5424
581
+ synth_ai-0.2.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
582
+ synth_ai-0.2.12.dist-info/entry_points.txt,sha256=Neq-3bT7TAijjgOIR77pKL-WYg6TWBDeO8pp_nL4vGY,91
583
+ synth_ai-0.2.12.dist-info/top_level.txt,sha256=1moNHgctEUJ3F3eH3V-7FSMb2iTTze1V13dj1R04oUY,18
584
+ synth_ai-0.2.12.dist-info/RECORD,,