synth-ai 0.1.0.dev15__tar.gz → 0.1.0.dev49__tar.gz

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.
Files changed (62) hide show
  1. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/PKG-INFO +9 -10
  2. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/pyproject.toml +8 -10
  3. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/setup.py +1 -1
  4. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/synth_ai/__init__.py +0 -1
  5. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/synth_ai.egg-info/PKG-INFO +9 -10
  6. synth_ai-0.1.0.dev49/synth_ai.egg-info/SOURCES.txt +13 -0
  7. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/synth_ai.egg-info/requires.txt +6 -8
  8. synth_ai-0.1.0.dev49/synth_ai.egg-info/top_level.txt +1 -0
  9. synth_ai-0.1.0.dev15/private_tests/try_synth_sdk.py +0 -1
  10. synth_ai-0.1.0.dev15/public_tests/test_all_structured_outputs.py +0 -201
  11. synth_ai-0.1.0.dev15/public_tests/test_synth_sdk.py +0 -389
  12. synth_ai-0.1.0.dev15/synth_ai/zyk/__init__.py +0 -3
  13. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/__init__.py +0 -0
  14. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/caching/__init__.py +0 -0
  15. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/caching/constants.py +0 -1
  16. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/caching/dbs.py +0 -0
  17. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/caching/ephemeral.py +0 -50
  18. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/caching/handler.py +0 -92
  19. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/caching/initialize.py +0 -13
  20. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/caching/persistent.py +0 -55
  21. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/config.py +0 -8
  22. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/core/__init__.py +0 -0
  23. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/core/all.py +0 -47
  24. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/core/exceptions.py +0 -9
  25. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/core/main.py +0 -249
  26. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/core/vendor_clients.py +0 -84
  27. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/cost/__init__.py +0 -0
  28. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/cost/monitor.py +0 -1
  29. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/cost/statefulness.py +0 -1
  30. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/structured_outputs/__init__.py +0 -0
  31. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/structured_outputs/handler.py +0 -388
  32. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/structured_outputs/inject.py +0 -314
  33. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/structured_outputs/rehabilitate.py +0 -186
  34. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/__init__.py +0 -0
  35. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/base.py +0 -15
  36. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/constants.py +0 -5
  37. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/core/__init__.py +0 -0
  38. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/core/anthropic_api.py +0 -191
  39. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/core/gemini_api.py +0 -146
  40. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/core/mistral_api.py +0 -221
  41. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/core/openai_api.py +0 -145
  42. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/local/__init__.py +0 -0
  43. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/local/ollama.py +0 -0
  44. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/openai_standard.py +0 -144
  45. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/retries.py +0 -3
  46. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/supported/__init__.py +0 -0
  47. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/supported/deepseek.py +0 -18
  48. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/supported/groq.py +0 -16
  49. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/supported/ollama.py +0 -14
  50. synth_ai-0.1.0.dev15/synth_ai/zyk/lms/vendors/supported/together.py +0 -11
  51. synth_ai-0.1.0.dev15/synth_ai.egg-info/SOURCES.txt +0 -58
  52. synth_ai-0.1.0.dev15/synth_ai.egg-info/top_level.txt +0 -6
  53. synth_ai-0.1.0.dev15/tests/test_agent.py +0 -538
  54. synth_ai-0.1.0.dev15/tests/test_recursive_structured_outputs.py +0 -180
  55. synth_ai-0.1.0.dev15/tests/test_structured_outputs.py +0 -100
  56. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/LICENSE +0 -0
  57. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/README.md +0 -0
  58. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/setup.cfg +0 -0
  59. {synth_ai-0.1.0.dev15 → synth_ai-0.1.0.dev49}/synth_ai.egg-info/dependency_links.txt +0 -0
  60. {synth_ai-0.1.0.dev15/public_tests → synth_ai-0.1.0.dev49/tests}/test_agent.py +0 -0
  61. {synth_ai-0.1.0.dev15/public_tests → synth_ai-0.1.0.dev49/tests}/test_recursive_structured_outputs.py +0 -0
  62. {synth_ai-0.1.0.dev15/public_tests → synth_ai-0.1.0.dev49/tests}/test_structured_outputs.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.1.0.dev15
3
+ Version: 0.1.0.dev49
4
4
  Summary: Software for aiding the best and multiplying the will.
5
5
  Home-page: https://github.com/synth-laboratories/synth-ai
6
6
  Author: Josh Purtell
@@ -35,24 +35,23 @@ Classifier: Programming Language :: Python :: 3
35
35
  Requires-Python: >=3.10
36
36
  Description-Content-Type: text/markdown
37
37
  License-File: LICENSE
38
- Requires-Dist: openai
39
- Requires-Dist: pydantic
40
- Requires-Dist: diskcache
38
+ Requires-Dist: openai>=1.0.0
39
+ Requires-Dist: pydantic>=2.0.0
40
+ Requires-Dist: diskcache>=5.0.0
41
41
  Requires-Dist: backoff>=2.2.1
42
42
  Requires-Dist: anthropic>=0.34.2
43
43
  Requires-Dist: google>=3.0.0
44
- Requires-Dist: google-generativeai>=0.8.1
44
+ Requires-Dist: google-api-core
45
+ Requires-Dist: google-generativeai
45
46
  Requires-Dist: together>=1.2.12
46
47
  Requires-Dist: langfuse>=2.56.1
47
- Requires-Dist: synth-sdk>=0.3.1.dev4
48
48
  Requires-Dist: datasets>=3.2.0
49
49
  Requires-Dist: groq>=0.18.0
50
50
  Requires-Dist: pytest-timeout>=2.3.1
51
- Requires-Dist: lock>=2018.3.25.2110
52
- Requires-Dist: ollama>=0.4.7
53
- Requires-Dist: mistralai>=1.5.0
51
+ Requires-Dist: mistralai
54
52
  Dynamic: author
55
53
  Dynamic: home-page
54
+ Dynamic: license-file
56
55
 
57
56
  AI Infra used by the Synth AI Team
58
57
  ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "synth-ai"
3
- version = "0.1.0.dev15"
3
+ version = "0.1.0.dev49"
4
4
  description = "Software for aiding the best and multiplying the will."
5
5
  readme = "README.md"
6
6
  authors = [{ name = "Josh Purtell", email = "josh@usesynth.ai" }]
@@ -12,22 +12,20 @@ classifiers = [
12
12
  ]
13
13
  keywords = ["synth-ai"]
14
14
  dependencies = [
15
- "openai",
16
- "pydantic",
17
- "diskcache",
15
+ "openai>=1.0.0",
16
+ "pydantic>=2.0.0",
17
+ "diskcache>=5.0.0",
18
18
  "backoff>=2.2.1",
19
19
  "anthropic>=0.34.2",
20
20
  "google>=3.0.0",
21
- "google-generativeai>=0.8.1",
21
+ "google-api-core",
22
+ "google-generativeai",
22
23
  "together>=1.2.12",
23
24
  "langfuse>=2.56.1",
24
- "synth-sdk>=0.3.1.dev4",
25
25
  "datasets>=3.2.0",
26
26
  "groq>=0.18.0",
27
27
  "pytest-timeout>=2.3.1",
28
- "lock>=2018.3.25.2110",
29
- "ollama>=0.4.7",
30
- "mistralai>=1.5.0",
28
+ "mistralai",
31
29
  ]
32
30
  requires-python = ">=3.10"
33
31
 
@@ -39,7 +37,7 @@ requires = ["setuptools>=61.0"]
39
37
  build-backend = "setuptools.build_meta"
40
38
 
41
39
  [tool.setuptools]
42
- packages.find = {namespaces = true}
40
+ packages = ["synth_ai"]
43
41
  package-dir = {"synth_ai" = "synth_ai"}
44
42
 
45
43
  # Explicitly exclude test directories and files
@@ -2,7 +2,7 @@ from setuptools import find_packages, setup
2
2
 
3
3
  setup(
4
4
  name="synth-ai",
5
- version="0.1.0.dev15",
5
+ version="0.0.0.dev1",
6
6
  packages=find_packages(),
7
7
  install_requires=[
8
8
  "openai",
@@ -4,5 +4,4 @@ Synth AI - Software for aiding the best and multiplying the will.
4
4
 
5
5
  from importlib.metadata import version
6
6
 
7
-
8
7
  __version__ = version("synth-ai") # Gets version from installed package metadata
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.1.0.dev15
3
+ Version: 0.1.0.dev49
4
4
  Summary: Software for aiding the best and multiplying the will.
5
5
  Home-page: https://github.com/synth-laboratories/synth-ai
6
6
  Author: Josh Purtell
@@ -35,24 +35,23 @@ Classifier: Programming Language :: Python :: 3
35
35
  Requires-Python: >=3.10
36
36
  Description-Content-Type: text/markdown
37
37
  License-File: LICENSE
38
- Requires-Dist: openai
39
- Requires-Dist: pydantic
40
- Requires-Dist: diskcache
38
+ Requires-Dist: openai>=1.0.0
39
+ Requires-Dist: pydantic>=2.0.0
40
+ Requires-Dist: diskcache>=5.0.0
41
41
  Requires-Dist: backoff>=2.2.1
42
42
  Requires-Dist: anthropic>=0.34.2
43
43
  Requires-Dist: google>=3.0.0
44
- Requires-Dist: google-generativeai>=0.8.1
44
+ Requires-Dist: google-api-core
45
+ Requires-Dist: google-generativeai
45
46
  Requires-Dist: together>=1.2.12
46
47
  Requires-Dist: langfuse>=2.56.1
47
- Requires-Dist: synth-sdk>=0.3.1.dev4
48
48
  Requires-Dist: datasets>=3.2.0
49
49
  Requires-Dist: groq>=0.18.0
50
50
  Requires-Dist: pytest-timeout>=2.3.1
51
- Requires-Dist: lock>=2018.3.25.2110
52
- Requires-Dist: ollama>=0.4.7
53
- Requires-Dist: mistralai>=1.5.0
51
+ Requires-Dist: mistralai
54
52
  Dynamic: author
55
53
  Dynamic: home-page
54
+ Dynamic: license-file
56
55
 
57
56
  AI Infra used by the Synth AI Team
58
57
  ```
@@ -0,0 +1,13 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ setup.py
5
+ synth_ai/__init__.py
6
+ synth_ai.egg-info/PKG-INFO
7
+ synth_ai.egg-info/SOURCES.txt
8
+ synth_ai.egg-info/dependency_links.txt
9
+ synth_ai.egg-info/requires.txt
10
+ synth_ai.egg-info/top_level.txt
11
+ tests/test_agent.py
12
+ tests/test_recursive_structured_outputs.py
13
+ tests/test_structured_outputs.py
@@ -1,16 +1,14 @@
1
- openai
2
- pydantic
3
- diskcache
1
+ openai>=1.0.0
2
+ pydantic>=2.0.0
3
+ diskcache>=5.0.0
4
4
  backoff>=2.2.1
5
5
  anthropic>=0.34.2
6
6
  google>=3.0.0
7
- google-generativeai>=0.8.1
7
+ google-api-core
8
+ google-generativeai
8
9
  together>=1.2.12
9
10
  langfuse>=2.56.1
10
- synth-sdk>=0.3.1.dev4
11
11
  datasets>=3.2.0
12
12
  groq>=0.18.0
13
13
  pytest-timeout>=2.3.1
14
- lock>=2018.3.25.2110
15
- ollama>=0.4.7
16
- mistralai>=1.5.0
14
+ mistralai
@@ -0,0 +1 @@
1
+ synth_ai
@@ -1 +0,0 @@
1
- import synth_sdk.tracing
@@ -1,201 +0,0 @@
1
- from typing import Any, Dict, Optional
2
-
3
- import pytest
4
- from pydantic import BaseModel
5
-
6
- from synth_ai.zyk.lms.core.main import LM
7
-
8
-
9
- class StateUpdate(BaseModel):
10
- """Response model for state updates from LLM"""
11
-
12
- short_term_plan: Optional[str] = None
13
- objective: Optional[str] = None
14
- final_results: Optional[Dict[str, Any]] = None
15
-
16
- def model_post_init(self, __context):
17
- super().model_post_init(__context)
18
- # Ensure no protected fields are present
19
- protected_fields = ["message_history", "step_summaries"]
20
- for field in protected_fields:
21
- if hasattr(self, field):
22
- raise ValueError(f"Cannot modify protected field: {field}")
23
-
24
-
25
- @pytest.fixture(scope="module")
26
- def models():
27
- """Initialize LMs for different vendors"""
28
- return {
29
- "gpt-4o-mini": LM(
30
- model_name="gpt-4o-mini",
31
- formatting_model_name="gpt-4o-mini",
32
- temperature=0.1,
33
- structured_output_mode="forced_json",
34
- ),
35
- "o3-mini": LM(
36
- model_name="o3-mini",
37
- formatting_model_name="gpt-4o-mini",
38
- temperature=0.1,
39
- structured_output_mode="forced_json",
40
- ),
41
- "gemini-1.5-flash": LM(
42
- model_name="gemini-1.5-flash",
43
- formatting_model_name="gpt-4o-mini",
44
- temperature=0.1,
45
- structured_output_mode="stringified_json",
46
- ),
47
- "claude-3-haiku-20240307": LM(
48
- model_name="claude-3-haiku-20240307",
49
- formatting_model_name="gpt-4o-mini",
50
- temperature=0.1,
51
- structured_output_mode="stringified_json",
52
- ),
53
- "deepseek-chat": LM(
54
- model_name="deepseek-chat",
55
- formatting_model_name="gpt-4o-mini",
56
- temperature=0.1,
57
- structured_output_mode="stringified_json",
58
- ),
59
- "deepseek-reasoner": LM(
60
- model_name="deepseek-reasoner",
61
- formatting_model_name="gpt-4o-mini",
62
- temperature=1,
63
- structured_output_mode="stringified_json",
64
- ),
65
- "llama-3.1-8b-instant": LM(
66
- model_name="llama-3.1-8b-instant",
67
- formatting_model_name="gpt-4o-mini",
68
- temperature=0.1,
69
- structured_output_mode="stringified_json",
70
- ),
71
- "mistral-small-latest": LM(
72
- model_name="mistral-small-latest",
73
- formatting_model_name="gpt-4o-mini",
74
- temperature=0.1,
75
- structured_output_mode="stringified_json",
76
- ),
77
- }
78
-
79
-
80
- @pytest.fixture
81
- def system_message():
82
- """System message for state updates"""
83
- return """You are helping update the agent's state. Look at the current state and state_delta_instructions and update the state.
84
-
85
- Available fields you can modify:
86
- {
87
- "short_term_plan": "str",
88
- "objective": "str",
89
- "final_results": "Dict[str, Any]"
90
- }
91
-
92
- Protected fields (do not modify):
93
- {
94
- "message_history": "Cannot directly edit message history - it is managed internally",
95
- "step_summaries": "Cannot directly edit step summaries - they are generated automatically"
96
- }
97
-
98
- Please be brief, the state ought not be too long."""
99
-
100
-
101
- @pytest.fixture
102
- def current_state():
103
- """Initial state for testing"""
104
- return {
105
- "short_term_plan": "Current plan: Review code changes",
106
- "objective": "Review pull request",
107
- "final_results": {
108
- "findings": [],
109
- "recommendations": [],
110
- "analysis": {},
111
- "status": "IN_PROGRESS",
112
- },
113
- }
114
-
115
-
116
- @pytest.mark.timeout(15)
117
- @pytest.mark.parametrize(
118
- "model_name",
119
- [
120
- "gpt-4o-mini",
121
- "gemini-1.5-flash",
122
- "claude-3-haiku-20240307",
123
- "deepseek-chat",
124
- "llama-3.1-8b-instant",
125
- ],
126
- )
127
- def test_state_delta_handling(
128
- model_name: str, models: Dict[str, LM], system_message: str, current_state: Dict
129
- ):
130
- """Test that each model correctly handles state updates"""
131
-
132
- state_delta_instructions = """Update the final_results to include findings about code quality issues. Add a recommendation to improve error handling."""
133
- user_message = f"Current state: {current_state}\nState delta instructions: {state_delta_instructions}\n\nHow should the state be updated?"
134
-
135
- try:
136
- result = models[model_name].respond_sync(
137
- system_message=system_message,
138
- user_message=user_message,
139
- response_model=StateUpdate,
140
- )
141
-
142
- # Verify response structure
143
- assert isinstance(result, StateUpdate)
144
-
145
- # Verify only allowed fields are present and have correct types
146
- if result.short_term_plan is not None:
147
- assert isinstance(result.short_term_plan, str)
148
- if result.objective is not None:
149
- assert isinstance(result.objective, str)
150
- if result.final_results is not None:
151
- assert isinstance(result.final_results, dict)
152
-
153
- except Exception as e:
154
- pytest.fail(f"Model {model_name} failed: {str(e)}")
155
-
156
-
157
- @pytest.mark.timeout(15)
158
- @pytest.mark.parametrize(
159
- "model_name",
160
- [
161
- "gpt-4o-mini",
162
- "gemini-1.5-flash",
163
- "claude-3-haiku-20240307",
164
- "deepseek-chat",
165
- "llama-3.1-8b-instant",
166
- ],
167
- )
168
- def test_state_delta_protected_fields(
169
- model_name: str, models: Dict[str, LM], system_message: str
170
- ):
171
- """Test that models respect protected fields"""
172
-
173
- current_state = {
174
- "short_term_plan": "Current plan: Review code changes",
175
- "objective": "Review pull request",
176
- "message_history": ["Previous message 1", "Previous message 2"],
177
- "step_summaries": ["Step 1 summary", "Step 2 summary"],
178
- "final_results": {
179
- "findings": [],
180
- "recommendations": [],
181
- "analysis": {},
182
- "status": "IN_PROGRESS",
183
- },
184
- }
185
-
186
- state_delta_instructions = """Update the message history to include new findings and update step summaries with recent progress."""
187
- user_message = f"Current state: {current_state}\nState delta instructions: {state_delta_instructions}\n\nHow should the state be updated?"
188
-
189
- try:
190
- result = models[model_name].respond_sync(
191
- system_message=system_message,
192
- user_message=user_message,
193
- response_model=StateUpdate,
194
- )
195
-
196
- # Verify no protected fields are present
197
- assert not hasattr(result, "message_history")
198
- assert not hasattr(result, "step_summaries")
199
-
200
- except Exception as e:
201
- pytest.fail(f"Model {model_name} failed: {str(e)}")