mojentic 0.6.0__py3-none-any.whl → 0.6.2__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.
@@ -18,7 +18,7 @@ class DescribeTracerSystem:
18
18
  """
19
19
  Tests for the TracerSystem class.
20
20
  """
21
-
21
+
22
22
  def should_initialize_with_default_event_store(self):
23
23
  """
24
24
  Given no event store
@@ -27,12 +27,12 @@ class DescribeTracerSystem:
27
27
  """
28
28
  # Given / When
29
29
  tracer_system = TracerSystem()
30
-
30
+
31
31
  # Then
32
32
  assert tracer_system.event_store is not None
33
33
  assert isinstance(tracer_system.event_store, EventStore)
34
34
  assert tracer_system.enabled is True
35
-
35
+
36
36
  def should_initialize_with_provided_event_store(self):
37
37
  """
38
38
  Given an event store
@@ -41,13 +41,13 @@ class DescribeTracerSystem:
41
41
  """
42
42
  # Given
43
43
  event_store = EventStore()
44
-
44
+
45
45
  # When
46
46
  tracer_system = TracerSystem(event_store=event_store)
47
-
47
+
48
48
  # Then
49
49
  assert tracer_system.event_store is event_store
50
-
50
+
51
51
  def should_record_llm_call(self):
52
52
  """
53
53
  Given an enabled tracer system
@@ -56,11 +56,12 @@ class DescribeTracerSystem:
56
56
  """
57
57
  # Given
58
58
  tracer_system = TracerSystem()
59
-
59
+
60
60
  # When
61
61
  messages = [{"role": "system", "content": "You are a helpful assistant."}]
62
- tracer_system.record_llm_call("test-model", messages, 0.7)
63
-
62
+ correlation_id = "test-correlation-id"
63
+ tracer_system.record_llm_call("test-model", messages, 0.7, correlation_id=correlation_id)
64
+
64
65
  # Then
65
66
  events = tracer_system.get_events(event_type=LLMCallTracerEvent)
66
67
  assert len(events) == 1
@@ -68,7 +69,7 @@ class DescribeTracerSystem:
68
69
  assert event.model == "test-model"
69
70
  assert event.messages == messages
70
71
  assert event.temperature == 0.7
71
-
72
+
72
73
  def should_record_llm_response(self):
73
74
  """
74
75
  Given an enabled tracer system
@@ -77,14 +78,16 @@ class DescribeTracerSystem:
77
78
  """
78
79
  # Given
79
80
  tracer_system = TracerSystem()
80
-
81
+
81
82
  # When
83
+ correlation_id = "test-correlation-id"
82
84
  tracer_system.record_llm_response(
83
85
  "test-model",
84
86
  "This is a test response",
85
- call_duration_ms=150.5
87
+ call_duration_ms=150.5,
88
+ correlation_id=correlation_id
86
89
  )
87
-
90
+
88
91
  # Then
89
92
  events = tracer_system.get_events(event_type=LLMResponseTracerEvent)
90
93
  assert len(events) == 1
@@ -92,7 +95,7 @@ class DescribeTracerSystem:
92
95
  assert event.model == "test-model"
93
96
  assert event.content == "This is a test response"
94
97
  assert event.call_duration_ms == 150.5
95
-
98
+
96
99
  def should_record_tool_call(self):
97
100
  """
98
101
  Given an enabled tracer system
@@ -101,16 +104,18 @@ class DescribeTracerSystem:
101
104
  """
102
105
  # Given
103
106
  tracer_system = TracerSystem()
104
-
107
+
105
108
  # When
106
109
  arguments = {"query": "test query"}
110
+ correlation_id = "test-correlation-id"
107
111
  tracer_system.record_tool_call(
108
112
  "test-tool",
109
113
  arguments,
110
114
  "test result",
111
- "TestAgent"
115
+ "TestAgent",
116
+ correlation_id=correlation_id
112
117
  )
113
-
118
+
114
119
  # Then
115
120
  events = tracer_system.get_events(event_type=ToolCallTracerEvent)
116
121
  assert len(events) == 1
@@ -119,7 +124,7 @@ class DescribeTracerSystem:
119
124
  assert event.arguments == arguments
120
125
  assert event.result == "test result"
121
126
  assert event.caller == "TestAgent"
122
-
127
+
123
128
  def should_record_agent_interaction(self):
124
129
  """
125
130
  Given an enabled tracer system
@@ -128,15 +133,17 @@ class DescribeTracerSystem:
128
133
  """
129
134
  # Given
130
135
  tracer_system = TracerSystem()
131
-
136
+
132
137
  # When
138
+ correlation_id = "test-correlation-id"
133
139
  tracer_system.record_agent_interaction(
134
140
  "AgentA",
135
141
  "AgentB",
136
142
  "RequestEvent",
137
- "12345"
143
+ "12345",
144
+ correlation_id=correlation_id
138
145
  )
139
-
146
+
140
147
  # Then
141
148
  events = tracer_system.get_events(event_type=AgentInteractionTracerEvent)
142
149
  assert len(events) == 1
@@ -145,7 +152,7 @@ class DescribeTracerSystem:
145
152
  assert event.to_agent == "AgentB"
146
153
  assert event.event_type == "RequestEvent"
147
154
  assert event.event_id == "12345"
148
-
155
+
149
156
  def should_not_record_when_disabled(self):
150
157
  """
151
158
  Given a disabled tracer system
@@ -154,16 +161,17 @@ class DescribeTracerSystem:
154
161
  """
155
162
  # Given
156
163
  tracer_system = TracerSystem(enabled=False)
157
-
164
+
158
165
  # When
159
- tracer_system.record_llm_call("test-model", [])
160
- tracer_system.record_llm_response("test-model", "response")
161
- tracer_system.record_tool_call("test-tool", {}, "result")
162
- tracer_system.record_agent_interaction("AgentA", "AgentB", "Event")
163
-
166
+ correlation_id = "test-correlation-id"
167
+ tracer_system.record_llm_call("test-model", [], correlation_id=correlation_id)
168
+ tracer_system.record_llm_response("test-model", "response", correlation_id=correlation_id)
169
+ tracer_system.record_tool_call("test-tool", {}, "result", correlation_id=correlation_id)
170
+ tracer_system.record_agent_interaction("AgentA", "AgentB", "Event", correlation_id=correlation_id)
171
+
164
172
  # Then
165
173
  assert len(tracer_system.get_events()) == 0
166
-
174
+
167
175
  def should_filter_events_by_time_range(self):
168
176
  """
169
177
  Given several tracer events with different timestamps
@@ -172,26 +180,27 @@ class DescribeTracerSystem:
172
180
  """
173
181
  # Given
174
182
  tracer_system = TracerSystem()
175
-
183
+
176
184
  # Create events with specific timestamps
177
185
  now = time.time()
186
+ correlation_id = "test-correlation-id"
178
187
  tracer_system.event_store.store(
179
- LLMCallTracerEvent(source=DescribeTracerSystem, timestamp=now - 100, model="model1", messages=[])
188
+ LLMCallTracerEvent(source=DescribeTracerSystem, timestamp=now - 100, model="model1", messages=[], correlation_id=correlation_id)
180
189
  )
181
190
  tracer_system.event_store.store(
182
- LLMCallTracerEvent(source=DescribeTracerSystem, timestamp=now - 50, model="model2", messages=[])
191
+ LLMCallTracerEvent(source=DescribeTracerSystem, timestamp=now - 50, model="model2", messages=[], correlation_id=correlation_id)
183
192
  )
184
193
  tracer_system.event_store.store(
185
- LLMCallTracerEvent(source=DescribeTracerSystem, timestamp=now, model="model3", messages=[])
194
+ LLMCallTracerEvent(source=DescribeTracerSystem, timestamp=now, model="model3", messages=[], correlation_id=correlation_id)
186
195
  )
187
-
196
+
188
197
  # When
189
198
  result = tracer_system.get_events(start_time=now - 75, end_time=now - 25)
190
-
199
+
191
200
  # Then
192
201
  assert len(result) == 1
193
202
  assert result[0].model == "model2"
194
-
203
+
195
204
  def should_get_last_n_tracer_events(self):
196
205
  """
197
206
  Given several tracer events of different types
@@ -200,20 +209,21 @@ class DescribeTracerSystem:
200
209
  """
201
210
  # Given
202
211
  tracer_system = TracerSystem()
203
-
204
- tracer_system.record_llm_call("model1", [])
205
- tracer_system.record_tool_call("tool1", {}, "result1")
206
- tracer_system.record_llm_call("model2", [])
207
- tracer_system.record_llm_call("model3", [])
208
-
212
+
213
+ correlation_id = "test-correlation-id"
214
+ tracer_system.record_llm_call("model1", [], correlation_id=correlation_id)
215
+ tracer_system.record_tool_call("tool1", {}, "result1", correlation_id=correlation_id)
216
+ tracer_system.record_llm_call("model2", [], correlation_id=correlation_id)
217
+ tracer_system.record_llm_call("model3", [], correlation_id=correlation_id)
218
+
209
219
  # When
210
220
  result = tracer_system.get_last_n_tracer_events(2, event_type=LLMCallTracerEvent)
211
-
221
+
212
222
  # Then
213
223
  assert len(result) == 2
214
224
  assert result[0].model == "model2"
215
225
  assert result[1].model == "model3"
216
-
226
+
217
227
  def should_enable_and_disable(self):
218
228
  """
219
229
  Given a tracer system
@@ -223,19 +233,19 @@ class DescribeTracerSystem:
223
233
  # Given
224
234
  tracer_system = TracerSystem(enabled=False)
225
235
  assert not tracer_system.enabled
226
-
236
+
227
237
  # When
228
238
  tracer_system.enable()
229
-
239
+
230
240
  # Then
231
241
  assert tracer_system.enabled
232
-
242
+
233
243
  # When
234
244
  tracer_system.disable()
235
-
245
+
236
246
  # Then
237
247
  assert not tracer_system.enabled
238
-
248
+
239
249
  def should_clear_events(self):
240
250
  """
241
251
  Given a tracer system with events
@@ -244,12 +254,13 @@ class DescribeTracerSystem:
244
254
  """
245
255
  # Given
246
256
  tracer_system = TracerSystem()
247
- tracer_system.record_llm_call("model1", [])
248
- tracer_system.record_tool_call("tool1", {}, "result1")
257
+ correlation_id = "test-correlation-id"
258
+ tracer_system.record_llm_call("model1", [], correlation_id=correlation_id)
259
+ tracer_system.record_tool_call("tool1", {}, "result1", correlation_id=correlation_id)
249
260
  assert len(tracer_system.get_events()) == 2
250
-
261
+
251
262
  # When
252
263
  tracer_system.clear()
253
-
264
+
254
265
  # Then
255
- assert len(tracer_system.get_events()) == 0
266
+ assert len(tracer_system.get_events()) == 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mojentic
3
- Version: 0.6.0
3
+ Version: 0.6.2
4
4
  Summary: Mojentic is an agentic framework that aims to provide a simple and flexible way to assemble teams of agents to solve complex problems.
5
5
  Author-email: Stacey Vetzal <stacey@vetzal.com>
6
6
  Project-URL: Homepage, https://github.com/svetzal/mojentic
@@ -22,7 +22,7 @@ _examples/list_models.py,sha256=8noMpGeXOdX5Pf0NXCt_CRurOKEg_5luhWveGntBhe8,578
22
22
  _examples/oversized_embeddings.py,sha256=_z2JoqZn0g7VtRsFVWIkngVqzjhQQvCEUYWVxs1I7MM,284
23
23
  _examples/raw.py,sha256=Y2wvgynFuoUs28agE4ijsLYec8VRjiReklqlCH2lERs,442
24
24
  _examples/react.py,sha256=VQ-5MmjUXoHzBFPTV_JrocuOkDzZ8oyUUSYLlEToJ_0,939
25
- _examples/recursive_agent.py,sha256=lFmGXpAeNYmKZSCBsGgnKd8wptzFnDLcjFNcdDNUImU,3018
25
+ _examples/recursive_agent.py,sha256=ZDQ9Ts35JdxK6-LfO5GNmXZM2ru9w3Wpa1HXsmzbmqw,3016
26
26
  _examples/routed_send_response.py,sha256=FHhTy7y2f7GY_WAWZYqOnFqF1xeJTBuS5EjfJGsJ3S8,4146
27
27
  _examples/simple_llm.py,sha256=Cpjj1S8wXLovta1OcutTqp-fls-zVY4l5TAkbEqpA0s,1231
28
28
  _examples/simple_llm_repl.py,sha256=bpk7S1-yQ-oZdRD_0ICV37NQxntgvgjiFD5KdIU40Ig,1406
@@ -31,7 +31,7 @@ _examples/simple_tool.py,sha256=9hRo2YZk7NmprTIkLmEyueCbZ0Ls1Ey4l4eDvvgoWy8,1288
31
31
  _examples/solver_chat_session.py,sha256=4mTsgQVJWwujDFX6NUIK6kKr45E09Q4yIkZF-FdoTtg,2148
32
32
  _examples/streaming.py,sha256=P1CGvm11yi_tojnha2Qmp_OFB5A3T-F5dWIzxEclNhM,1137
33
33
  _examples/tell_user_example.py,sha256=gPGS_3KAHUIFsnvkDXX6u1mVqlsB67zsyNdGuEho60o,1274
34
- _examples/tracer_demo.py,sha256=IG9llYs9ARFbjkK-acW091S73z0jr2ZS_0GWps88dAQ,3994
34
+ _examples/tracer_demo.py,sha256=X4nZtMX4yPDLF0i-pb0gXDHvjUwgCDJ6Q6RS7lNRlVs,7101
35
35
  _examples/working_memory.py,sha256=xbCHb6Y0Um6ai5T9fWAX4oQOcCQJDinsn902qm8q48E,1935
36
36
  _examples/react/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  _examples/react/formatters.py,sha256=nbgWve0YGKaRY6P4tXV84PYw8YDN4neefiq7mR2I_tI,1065
@@ -54,13 +54,13 @@ mojentic/agents/base_llm_agent_spec.py,sha256=1kzayCtAZY7oWloaFMh7-NkTtiKihDCLD3
54
54
  mojentic/agents/correlation_aggregator_agent.py,sha256=okdq92rMNwIXTgnuwwn3zp4JzSxTh05vGWzTGocOgbU,1134
55
55
  mojentic/agents/iterative_problem_solver.py,sha256=RLt8MCM99d-Z26EhC5UnmE0M97EM475VGBVsNio8DSA,4329
56
56
  mojentic/agents/output_agent.py,sha256=I9GHcWvQhWxEcvjzj47scKo_QF8_6yR17ZUEHhwC94Y,231
57
- mojentic/agents/simple_recursive_agent.py,sha256=DcJFttTAYurRIObTL8kfbHUs5uvuqh6prEgA5nmxCLo,9950
57
+ mojentic/agents/simple_recursive_agent.py,sha256=B3QcOeIuamoLp0MsAwCjJLgVCaODsEi03xAAfpMWFRM,9846
58
58
  mojentic/context/__init__.py,sha256=MKMP7ViQg8gMtLFvn9pf47XMc5beA5Wx95K4dEw93z8,55
59
59
  mojentic/context/shared_working_memory.py,sha256=Zt9MNGErEkDIUAaHvyhEOiTaEobI9l0MV4Z59lQFBr0,396
60
60
  mojentic/llm/__init__.py,sha256=mwdPpTRofw7_KSlW6ZQmcM-GSpyISWyI2bxphKpV7A0,180
61
61
  mojentic/llm/chat_session.py,sha256=H2gY0mZYVym8jC69VHsmKaRZ9T87Suyw0-TW5r850nA,3992
62
62
  mojentic/llm/chat_session_spec.py,sha256=8-jj-EHV2WwWuvo3t8I75kSEAYiG1nR-OEwkkLTi_z0,3872
63
- mojentic/llm/llm_broker.py,sha256=8h1J6Avue_iJhGzMTVuF3Zmgek--P_Q4iVRJT8-_b14,8823
63
+ mojentic/llm/llm_broker.py,sha256=DFi0zgFYgdOKrJx7DomktnbBQKppi4mB_RcDvXTf9-4,9170
64
64
  mojentic/llm/llm_broker_spec.py,sha256=40lzmYm_6Zje6z5MQ7_o3gSBThLsNW_l_1mZTUVll6A,5342
65
65
  mojentic/llm/message_composers.py,sha256=Fo9o7UGZOOIYoGI_DyOfP_oMiEiCMQz-zdWdTKtozVk,12108
66
66
  mojentic/llm/message_composers_spec.py,sha256=RNW14Zb-kIBWT5Wy9cZQyxHPrcRIaBFjBYCR9N-m0kE,12109
@@ -74,7 +74,7 @@ mojentic/llm/gateways/models.py,sha256=lnGvr3E4C5n15v0aI8Cc0FMOH6GBCrk5_XaEEe3vK
74
74
  mojentic/llm/gateways/ollama.py,sha256=629fpZhC0zVCYqj360-PKTT4mQOLec5nzzvfMtS_mLQ,7581
75
75
  mojentic/llm/gateways/ollama_messages_adapter.py,sha256=kUN_p2FyN88_trXMcL-Xsn9xPBU7pGKlJwTUEUCf6G4,1404
76
76
  mojentic/llm/gateways/ollama_messages_adapter_spec.py,sha256=gVRbWDrHOa1EiZ0CkEWe0pGn-GKRqdGb-x56HBQeYSE,4981
77
- mojentic/llm/gateways/openai.py,sha256=NQECA41PS21RhXjwQdbH3DAP15WqkEl22UlS1ka_lLM,5434
77
+ mojentic/llm/gateways/openai.py,sha256=G5bdQ0AkMlG-nOCvsw1gziyIerCiA1__RPfFK4M6fXI,5475
78
78
  mojentic/llm/gateways/openai_message_adapter_spec.py,sha256=ITBSV5njldV_x0NPgjmg8Okf9KzevQJ8dTXM-t6ubcg,6612
79
79
  mojentic/llm/gateways/openai_messages_adapter.py,sha256=9Btcr77RzlqZIdkNuGDGitk9D7SQTv4GsdKXaN2Fuv4,3863
80
80
  mojentic/llm/gateways/tokenizer_gateway.py,sha256=ztuqfunlJ6xmyUPPHcC_69-kegiNJD6jdSEde7hDh2w,485
@@ -88,7 +88,7 @@ mojentic/llm/tools/current_datetime.py,sha256=JkIFlBBnvE4CMcgZizqITVTtNfL7zeeLxD
88
88
  mojentic/llm/tools/date_resolver.py,sha256=VDxX59PTHo0PstDxaJUo3SF7vkvQoG92bo6j8ABq8y4,2185
89
89
  mojentic/llm/tools/date_resolver_spec.py,sha256=OaRvJyhSN8sgi75euk4E5ImaqUmvQdgZKY8u_NOiPWE,1185
90
90
  mojentic/llm/tools/file_manager.py,sha256=X8Uw4XtdH_Ol2EB3SN11-GYlC1diJ1cAywU9_EuCjCg,3788
91
- mojentic/llm/tools/llm_tool.py,sha256=MhPkRkM0GihZ8_82Y7Xn3zhfuA_Ic0zmC9ouHXMWTT0,1660
91
+ mojentic/llm/tools/llm_tool.py,sha256=MV1aexLjiPhcm1B1lvIkSJlokpPfuhF_Amqg7zCa6VQ,1695
92
92
  mojentic/llm/tools/llm_tool_spec.py,sha256=OPudmuqSxkJBUaL0-qABri-tvrAyb6QI9Ac5B5iTo3I,2112
93
93
  mojentic/llm/tools/organic_web_search.py,sha256=X_WQSSFgeMp5jlm0tnqGOHDIZ2KHDvz3k6GF-XqsuN4,1301
94
94
  mojentic/llm/tools/tell_user_tool.py,sha256=bF_PTfF0-skCi_Exw6EPpdfoNUZRJ4MWg-XCe4VYd6s,999
@@ -114,15 +114,15 @@ mojentic/llm/tools/ephemeral_task_manager/start_task_tool_spec.py,sha256=oDeVPPf
114
114
  mojentic/tracer/__init__.py,sha256=075nYiRvYTzkzombGY-31Gy0JMPM7Zn645F6_j5-k6I,445
115
115
  mojentic/tracer/event_store.py,sha256=eqbze4YRuiMDr8TCtMNHi-U_6-CLgstOHkLmtM5hc6Q,3691
116
116
  mojentic/tracer/event_store_spec.py,sha256=OWXWbeMCYU9dfySmbpmDA4KmwLlSaFy4ZpRt6BsTkFE,6522
117
- mojentic/tracer/null_tracer.py,sha256=nBVs3CiVdbFXoiwtth6eh3m3z1Gggs6yEIBqX4QbW-U,6338
118
- mojentic/tracer/tracer_events.py,sha256=DWv2PEU1CiUC1UnDScu9_DESEiTRIwpw0EMymFg4FJw,5383
117
+ mojentic/tracer/null_tracer.py,sha256=zvNLKjQSu3na6SWoFa16k9fFyjmSD3Ihw5rTjRUXrSs,6872
118
+ mojentic/tracer/tracer_events.py,sha256=mtONmApybFmbbt_4xN6h-wGrcZZneI3sJJ_8Z68V-tA,5405
119
119
  mojentic/tracer/tracer_events_spec.py,sha256=v84P3IjVr0_TGjwJD1w2SSNlTDJj0a4P8tMkDrsbOTA,3549
120
- mojentic/tracer/tracer_system.py,sha256=iBU4aHNYMSaIMh1q5CHcItufzYE6GXdw2wNtXu4NQRk,9415
121
- mojentic/tracer/tracer_system_spec.py,sha256=r5_GYEN78t0nJFawKvya8eyIUbmSgenyflPld-7Y448,7968
120
+ mojentic/tracer/tracer_system.py,sha256=7CPy_2tlsHtXQ4DcO5oo52N9a9WS0GH-mjeINzu62ls,9989
121
+ mojentic/tracer/tracer_system_spec.py,sha256=TNm0f9LV__coBx0JGEKyzzNN9mFjCSG_SSrRISO8Xeg,8632
122
122
  mojentic/utils/__init__.py,sha256=lqECkkoFvHFttDnafRE1vvh0Dmna_lwupMToP5VvX5k,115
123
123
  mojentic/utils/formatting.py,sha256=bPrwwdluXdQ8TsFxfWtHNOeMWKNvAfABSoUnnA1g7c8,947
124
- mojentic-0.6.0.dist-info/licenses/LICENSE.md,sha256=txSgV8n5zY1W3NiF5HHsCwlaW0e8We1cSC6TuJUqxXA,1060
125
- mojentic-0.6.0.dist-info/METADATA,sha256=jZvs5Umlb93eIs366WDSch4GYJ2x_p6a038wLS7EreY,5383
126
- mojentic-0.6.0.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
127
- mojentic-0.6.0.dist-info/top_level.txt,sha256=Q-BvPQ8Eu1jnEqK8Xkr6A9C8Xa1z38oPZRHuA5MCTqg,19
128
- mojentic-0.6.0.dist-info/RECORD,,
124
+ mojentic-0.6.2.dist-info/licenses/LICENSE.md,sha256=txSgV8n5zY1W3NiF5HHsCwlaW0e8We1cSC6TuJUqxXA,1060
125
+ mojentic-0.6.2.dist-info/METADATA,sha256=VEeadz_96qq1APeO0zg-Nc2U5nBErrr2q6R1WfmEUlQ,5383
126
+ mojentic-0.6.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
127
+ mojentic-0.6.2.dist-info/top_level.txt,sha256=Q-BvPQ8Eu1jnEqK8Xkr6A9C8Xa1z38oPZRHuA5MCTqg,19
128
+ mojentic-0.6.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5