mojentic 0.9.0__py3-none-any.whl → 1.0.0__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.
- _examples/async_dispatcher_example.py +12 -4
- _examples/async_llm_example.py +1 -2
- _examples/broker_as_tool.py +39 -14
- _examples/broker_examples.py +4 -6
- _examples/characterize_ollama.py +1 -1
- _examples/characterize_openai.py +1 -1
- _examples/chat_session.py +1 -1
- _examples/chat_session_with_tool.py +1 -1
- _examples/coding_file_tool.py +1 -3
- _examples/current_datetime_tool_example.py +1 -1
- _examples/embeddings.py +1 -1
- _examples/ephemeral_task_manager_example.py +13 -9
- _examples/fetch_openai_models.py +10 -3
- _examples/file_deduplication.py +6 -6
- _examples/image_analysis.py +2 -3
- _examples/image_broker.py +1 -1
- _examples/image_broker_splat.py +1 -1
- _examples/iterative_solver.py +2 -2
- _examples/model_characterization.py +2 -0
- _examples/openai_gateway_enhanced_demo.py +15 -5
- _examples/raw.py +1 -1
- _examples/react/agents/decisioning_agent.py +173 -15
- _examples/react/agents/summarization_agent.py +89 -0
- _examples/react/agents/thinking_agent.py +84 -14
- _examples/react/agents/tool_call_agent.py +83 -0
- _examples/react/formatters.py +38 -4
- _examples/react/models/base.py +60 -11
- _examples/react/models/events.py +76 -8
- _examples/react.py +71 -21
- _examples/recursive_agent.py +1 -1
- _examples/solver_chat_session.py +1 -7
- _examples/streaming.py +7 -4
- _examples/tell_user_example.py +3 -3
- _examples/tracer_demo.py +15 -17
- _examples/tracer_qt_viewer.py +49 -46
- mojentic/__init__.py +3 -3
- mojentic/agents/__init__.py +26 -8
- mojentic/agents/{agent_broker.py → agent_event_adapter.py} +3 -3
- mojentic/agents/async_aggregator_agent_spec.py +32 -33
- mojentic/agents/async_llm_agent.py +9 -5
- mojentic/agents/async_llm_agent_spec.py +21 -22
- mojentic/agents/base_async_agent.py +2 -2
- mojentic/agents/base_llm_agent.py +6 -2
- mojentic/agents/iterative_problem_solver.py +11 -5
- mojentic/agents/simple_recursive_agent.py +11 -10
- mojentic/agents/simple_recursive_agent_spec.py +423 -0
- mojentic/async_dispatcher.py +0 -1
- mojentic/async_dispatcher_spec.py +1 -1
- mojentic/context/__init__.py +0 -2
- mojentic/dispatcher.py +7 -8
- mojentic/llm/__init__.py +5 -5
- mojentic/llm/gateways/__init__.py +19 -18
- mojentic/llm/gateways/anthropic.py +1 -0
- mojentic/llm/gateways/anthropic_messages_adapter.py +0 -1
- mojentic/llm/gateways/llm_gateway.py +1 -1
- mojentic/llm/gateways/ollama.py +2 -0
- mojentic/llm/gateways/openai.py +62 -58
- mojentic/llm/gateways/openai_message_adapter_spec.py +3 -3
- mojentic/llm/gateways/openai_model_registry.py +7 -6
- mojentic/llm/gateways/openai_model_registry_spec.py +1 -2
- mojentic/llm/gateways/openai_temperature_handling_spec.py +2 -2
- mojentic/llm/llm_broker.py +7 -5
- mojentic/llm/llm_broker_spec.py +7 -2
- mojentic/llm/message_composers.py +6 -3
- mojentic/llm/message_composers_spec.py +5 -1
- mojentic/llm/registry/__init__.py +0 -3
- mojentic/llm/tools/__init__.py +0 -9
- mojentic/llm/tools/ask_user_tool.py +11 -5
- mojentic/llm/tools/current_datetime.py +9 -6
- mojentic/llm/tools/date_resolver.py +10 -4
- mojentic/llm/tools/date_resolver_spec.py +0 -1
- mojentic/llm/tools/ephemeral_task_manager/append_task_tool.py +4 -1
- mojentic/llm/tools/ephemeral_task_manager/ephemeral_task_list.py +1 -1
- mojentic/llm/tools/ephemeral_task_manager/insert_task_after_tool.py +4 -1
- mojentic/llm/tools/ephemeral_task_manager/prepend_task_tool.py +5 -2
- mojentic/llm/tools/file_manager.py +131 -28
- mojentic/llm/tools/file_manager_spec.py +0 -3
- mojentic/llm/tools/llm_tool.py +1 -1
- mojentic/llm/tools/llm_tool_spec.py +0 -2
- mojentic/llm/tools/organic_web_search.py +4 -2
- mojentic/llm/tools/tell_user_tool.py +6 -2
- mojentic/llm/tools/tool_wrapper.py +2 -2
- mojentic/tracer/__init__.py +1 -10
- mojentic/tracer/event_store.py +7 -8
- mojentic/tracer/event_store_spec.py +1 -2
- mojentic/tracer/null_tracer.py +37 -43
- mojentic/tracer/tracer_events.py +8 -2
- mojentic/tracer/tracer_events_spec.py +6 -7
- mojentic/tracer/tracer_system.py +37 -36
- mojentic/tracer/tracer_system_spec.py +21 -6
- mojentic/utils/__init__.py +1 -1
- mojentic/utils/formatting.py +1 -0
- {mojentic-0.9.0.dist-info → mojentic-1.0.0.dist-info}/METADATA +44 -26
- mojentic-1.0.0.dist-info/RECORD +149 -0
- mojentic-0.9.0.dist-info/RECORD +0 -146
- {mojentic-0.9.0.dist-info → mojentic-1.0.0.dist-info}/WHEEL +0 -0
- {mojentic-0.9.0.dist-info → mojentic-1.0.0.dist-info}/licenses/LICENSE.md +0 -0
- {mojentic-0.9.0.dist-info → mojentic-1.0.0.dist-info}/top_level.txt +0 -0
mojentic/tracer/null_tracer.py
CHANGED
|
@@ -32,15 +32,14 @@ class NullTracer:
|
|
|
32
32
|
The tracer event to record (will be ignored).
|
|
33
33
|
"""
|
|
34
34
|
# Do nothing
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
correlation_id: str = None) -> None:
|
|
35
|
+
|
|
36
|
+
def record_llm_call(self,
|
|
37
|
+
model: str,
|
|
38
|
+
messages: List[Dict],
|
|
39
|
+
temperature: float = 1.0,
|
|
40
|
+
tools: Optional[List[Dict]] = None,
|
|
41
|
+
source: Any = None,
|
|
42
|
+
correlation_id: str = None) -> None:
|
|
44
43
|
"""
|
|
45
44
|
Do nothing implementation of record_llm_call.
|
|
46
45
|
|
|
@@ -60,15 +59,14 @@ class NullTracer:
|
|
|
60
59
|
UUID string that is copied from cause-to-affect for tracing events.
|
|
61
60
|
"""
|
|
62
61
|
# Do nothing
|
|
63
|
-
pass
|
|
64
62
|
|
|
65
|
-
def record_llm_response(self,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
63
|
+
def record_llm_response(self,
|
|
64
|
+
model: str,
|
|
65
|
+
content: str,
|
|
66
|
+
tool_calls: Optional[List[Dict]] = None,
|
|
67
|
+
call_duration_ms: Optional[float] = None,
|
|
68
|
+
source: Any = None,
|
|
69
|
+
correlation_id: str = None) -> None:
|
|
72
70
|
"""
|
|
73
71
|
Do nothing implementation of record_llm_response.
|
|
74
72
|
|
|
@@ -88,16 +86,15 @@ class NullTracer:
|
|
|
88
86
|
UUID string that is copied from cause-to-affect for tracing events.
|
|
89
87
|
"""
|
|
90
88
|
# Do nothing
|
|
91
|
-
pass
|
|
92
89
|
|
|
93
90
|
def record_tool_call(self,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
tool_name: str,
|
|
92
|
+
arguments: Dict[str, Any],
|
|
93
|
+
result: Any,
|
|
94
|
+
caller: Optional[str] = None,
|
|
95
|
+
call_duration_ms: Optional[float] = None,
|
|
96
|
+
source: Any = None,
|
|
97
|
+
correlation_id: str = None) -> None:
|
|
101
98
|
"""
|
|
102
99
|
Do nothing implementation of record_tool_call.
|
|
103
100
|
|
|
@@ -119,15 +116,15 @@ class NullTracer:
|
|
|
119
116
|
UUID string that is copied from cause-to-affect for tracing events.
|
|
120
117
|
"""
|
|
121
118
|
# Do nothing
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
119
|
+
|
|
120
|
+
def record_agent_interaction(
|
|
121
|
+
self,
|
|
122
|
+
from_agent: str,
|
|
123
|
+
to_agent: str,
|
|
124
|
+
event_type: str,
|
|
125
|
+
event_id: Optional[str] = None,
|
|
126
|
+
source: Any = None,
|
|
127
|
+
correlation_id: str = None) -> None:
|
|
131
128
|
"""
|
|
132
129
|
Do nothing implementation of record_agent_interaction.
|
|
133
130
|
|
|
@@ -147,13 +144,13 @@ class NullTracer:
|
|
|
147
144
|
UUID string that is copied from cause-to-affect for tracing events.
|
|
148
145
|
"""
|
|
149
146
|
# Do nothing
|
|
150
|
-
pass
|
|
151
147
|
|
|
152
|
-
def get_events(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
148
|
+
def get_events(
|
|
149
|
+
self,
|
|
150
|
+
event_type: Optional[Type[TracerEvent]] = None,
|
|
151
|
+
start_time: Optional[float] = None,
|
|
152
|
+
end_time: Optional[float] = None,
|
|
153
|
+
filter_func: Optional[Callable[[TracerEvent], bool]] = None) -> List[TracerEvent]:
|
|
157
154
|
"""
|
|
158
155
|
Return an empty list for any get_events request.
|
|
159
156
|
|
|
@@ -195,12 +192,9 @@ class NullTracer:
|
|
|
195
192
|
|
|
196
193
|
def clear(self) -> None:
|
|
197
194
|
"""Do nothing implementation of clear method."""
|
|
198
|
-
pass
|
|
199
195
|
|
|
200
196
|
def enable(self) -> None:
|
|
201
197
|
"""No-op method for interface compatibility."""
|
|
202
|
-
pass
|
|
203
198
|
|
|
204
199
|
def disable(self) -> None:
|
|
205
200
|
"""No-op method for interface compatibility."""
|
|
206
|
-
pass
|
mojentic/tracer/tracer_events.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Defines tracer event types for tracking system interactions.
|
|
3
3
|
"""
|
|
4
|
-
from typing import Any, Dict, List, Optional
|
|
4
|
+
from typing import Any, Dict, List, Optional
|
|
5
5
|
from datetime import datetime
|
|
6
6
|
import uuid
|
|
7
7
|
|
|
@@ -18,7 +18,13 @@ class TracerEvent(Event):
|
|
|
18
18
|
They are distinct from regular events which are used for agent communication.
|
|
19
19
|
"""
|
|
20
20
|
timestamp: float = Field(..., description="Timestamp when the event occurred")
|
|
21
|
-
correlation_id: str = Field(
|
|
21
|
+
correlation_id: str = Field(
|
|
22
|
+
default_factory=lambda: str(uuid.uuid4()),
|
|
23
|
+
description=(
|
|
24
|
+
"UUID string that is copied from cause-to-affect "
|
|
25
|
+
"for tracing events"
|
|
26
|
+
)
|
|
27
|
+
)
|
|
22
28
|
|
|
23
29
|
def printable_summary(self) -> str:
|
|
24
30
|
"""
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import time
|
|
2
|
-
from typing import Dict, List
|
|
3
2
|
|
|
4
3
|
from mojentic.tracer.tracer_events import (
|
|
5
4
|
TracerEvent,
|
|
@@ -24,7 +23,7 @@ class DescribeTracerEvents:
|
|
|
24
23
|
source=DescribeTracerEvents,
|
|
25
24
|
timestamp=time.time()
|
|
26
25
|
)
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
# Then
|
|
29
28
|
assert isinstance(event, TracerEvent)
|
|
30
29
|
assert isinstance(event.timestamp, float)
|
|
@@ -44,7 +43,7 @@ class DescribeTracerEvents:
|
|
|
44
43
|
temperature=0.7,
|
|
45
44
|
tools=None
|
|
46
45
|
)
|
|
47
|
-
|
|
46
|
+
|
|
48
47
|
# Then
|
|
49
48
|
assert isinstance(event, LLMCallTracerEvent)
|
|
50
49
|
assert event.model == "test-model"
|
|
@@ -64,7 +63,7 @@ class DescribeTracerEvents:
|
|
|
64
63
|
content="This is a test response",
|
|
65
64
|
call_duration_ms=150.5
|
|
66
65
|
)
|
|
67
|
-
|
|
66
|
+
|
|
68
67
|
# Then
|
|
69
68
|
assert isinstance(event, LLMResponseTracerEvent)
|
|
70
69
|
assert event.model == "test-model"
|
|
@@ -86,7 +85,7 @@ class DescribeTracerEvents:
|
|
|
86
85
|
result="test result",
|
|
87
86
|
caller="TestAgent"
|
|
88
87
|
)
|
|
89
|
-
|
|
88
|
+
|
|
90
89
|
# Then
|
|
91
90
|
assert isinstance(event, ToolCallTracerEvent)
|
|
92
91
|
assert event.tool_name == "test-tool"
|
|
@@ -107,10 +106,10 @@ class DescribeTracerEvents:
|
|
|
107
106
|
event_type="RequestEvent",
|
|
108
107
|
event_id="12345"
|
|
109
108
|
)
|
|
110
|
-
|
|
109
|
+
|
|
111
110
|
# Then
|
|
112
111
|
assert isinstance(event, AgentInteractionTracerEvent)
|
|
113
112
|
assert event.from_agent == "AgentA"
|
|
114
113
|
assert event.to_agent == "AgentB"
|
|
115
114
|
assert event.event_type == "RequestEvent"
|
|
116
|
-
assert event.event_id == "12345"
|
|
115
|
+
assert event.event_id == "12345"
|
mojentic/tracer/tracer_system.py
CHANGED
|
@@ -4,19 +4,18 @@ TracerSystem module for coordinating tracer events.
|
|
|
4
4
|
This provides a central system for recording, filtering, and querying tracer events.
|
|
5
5
|
"""
|
|
6
6
|
import time
|
|
7
|
-
from typing import Any, Callable, Dict, List, Optional, Type
|
|
7
|
+
from typing import Any, Callable, Dict, List, Optional, Type
|
|
8
8
|
|
|
9
9
|
import structlog
|
|
10
10
|
|
|
11
11
|
from mojentic.tracer.tracer_events import (
|
|
12
|
-
TracerEvent,
|
|
12
|
+
TracerEvent,
|
|
13
13
|
LLMCallTracerEvent,
|
|
14
14
|
LLMResponseTracerEvent,
|
|
15
15
|
ToolCallTracerEvent,
|
|
16
16
|
AgentInteractionTracerEvent
|
|
17
17
|
)
|
|
18
18
|
from mojentic.tracer.event_store import EventStore
|
|
19
|
-
from mojentic.event import Event
|
|
20
19
|
|
|
21
20
|
logger = structlog.get_logger()
|
|
22
21
|
|
|
@@ -58,13 +57,13 @@ class TracerSystem:
|
|
|
58
57
|
|
|
59
58
|
self.event_store.store(event)
|
|
60
59
|
|
|
61
|
-
def record_llm_call(self,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
def record_llm_call(self,
|
|
61
|
+
model: str,
|
|
62
|
+
messages: List[Dict],
|
|
63
|
+
temperature: float = 1.0,
|
|
64
|
+
tools: Optional[List[Dict]] = None,
|
|
65
|
+
source: Any = None,
|
|
66
|
+
correlation_id: str = None) -> None:
|
|
68
67
|
"""
|
|
69
68
|
Record an LLM call event.
|
|
70
69
|
|
|
@@ -97,13 +96,13 @@ class TracerSystem:
|
|
|
97
96
|
)
|
|
98
97
|
self.event_store.store(event)
|
|
99
98
|
|
|
100
|
-
def record_llm_response(self,
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
def record_llm_response(self,
|
|
100
|
+
model: str,
|
|
101
|
+
content: str,
|
|
102
|
+
tool_calls: Optional[List[Dict]] = None,
|
|
103
|
+
call_duration_ms: Optional[float] = None,
|
|
104
|
+
source: Any = None,
|
|
105
|
+
correlation_id: str = None) -> None:
|
|
107
106
|
"""
|
|
108
107
|
Record an LLM response event.
|
|
109
108
|
|
|
@@ -137,13 +136,13 @@ class TracerSystem:
|
|
|
137
136
|
self.event_store.store(event)
|
|
138
137
|
|
|
139
138
|
def record_tool_call(self,
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
139
|
+
tool_name: str,
|
|
140
|
+
arguments: Dict[str, Any],
|
|
141
|
+
result: Any,
|
|
142
|
+
caller: Optional[str] = None,
|
|
143
|
+
call_duration_ms: Optional[float] = None,
|
|
144
|
+
source: Any = None,
|
|
145
|
+
correlation_id: str = None) -> None:
|
|
147
146
|
"""
|
|
148
147
|
Record a tool call event.
|
|
149
148
|
|
|
@@ -179,13 +178,14 @@ class TracerSystem:
|
|
|
179
178
|
)
|
|
180
179
|
self.event_store.store(event)
|
|
181
180
|
|
|
182
|
-
def record_agent_interaction(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
181
|
+
def record_agent_interaction(
|
|
182
|
+
self,
|
|
183
|
+
from_agent: str,
|
|
184
|
+
to_agent: str,
|
|
185
|
+
event_type: str,
|
|
186
|
+
event_id: Optional[str] = None,
|
|
187
|
+
source: Any = None,
|
|
188
|
+
correlation_id: str = None) -> None:
|
|
189
189
|
"""
|
|
190
190
|
Record an agent interaction event.
|
|
191
191
|
|
|
@@ -218,11 +218,12 @@ class TracerSystem:
|
|
|
218
218
|
)
|
|
219
219
|
self.event_store.store(event)
|
|
220
220
|
|
|
221
|
-
def get_events(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
def get_events(
|
|
222
|
+
self,
|
|
223
|
+
event_type: Optional[Type[TracerEvent]] = None,
|
|
224
|
+
start_time: Optional[float] = None,
|
|
225
|
+
end_time: Optional[float] = None,
|
|
226
|
+
filter_func: Optional[Callable[[TracerEvent], bool]] = None) -> List[TracerEvent]:
|
|
226
227
|
"""
|
|
227
228
|
Get tracer events from the store, optionally filtered.
|
|
228
229
|
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import time
|
|
2
|
-
from typing import Dict, List, Optional, Type, Union
|
|
3
2
|
|
|
4
|
-
import pytest
|
|
5
3
|
|
|
6
4
|
from mojentic.tracer.tracer_events import (
|
|
7
|
-
TracerEvent,
|
|
8
5
|
LLMCallTracerEvent,
|
|
9
6
|
LLMResponseTracerEvent,
|
|
10
7
|
ToolCallTracerEvent,
|
|
@@ -185,13 +182,31 @@ class DescribeTracerSystem:
|
|
|
185
182
|
now = time.time()
|
|
186
183
|
correlation_id = "test-correlation-id"
|
|
187
184
|
tracer_system.event_store.store(
|
|
188
|
-
LLMCallTracerEvent(
|
|
185
|
+
LLMCallTracerEvent(
|
|
186
|
+
source=DescribeTracerSystem,
|
|
187
|
+
timestamp=now - 100,
|
|
188
|
+
model="model1",
|
|
189
|
+
messages=[],
|
|
190
|
+
correlation_id=correlation_id
|
|
191
|
+
)
|
|
189
192
|
)
|
|
190
193
|
tracer_system.event_store.store(
|
|
191
|
-
LLMCallTracerEvent(
|
|
194
|
+
LLMCallTracerEvent(
|
|
195
|
+
source=DescribeTracerSystem,
|
|
196
|
+
timestamp=now - 50,
|
|
197
|
+
model="model2",
|
|
198
|
+
messages=[],
|
|
199
|
+
correlation_id=correlation_id
|
|
200
|
+
)
|
|
192
201
|
)
|
|
193
202
|
tracer_system.event_store.store(
|
|
194
|
-
LLMCallTracerEvent(
|
|
203
|
+
LLMCallTracerEvent(
|
|
204
|
+
source=DescribeTracerSystem,
|
|
205
|
+
timestamp=now,
|
|
206
|
+
model="model3",
|
|
207
|
+
messages=[],
|
|
208
|
+
correlation_id=correlation_id
|
|
209
|
+
)
|
|
195
210
|
)
|
|
196
211
|
|
|
197
212
|
# When
|
mojentic/utils/__init__.py
CHANGED
mojentic/utils/formatting.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mojentic
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
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
|
|
@@ -11,32 +11,32 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.11
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE.md
|
|
14
|
-
Requires-Dist: pydantic
|
|
15
|
-
Requires-Dist: structlog
|
|
16
|
-
Requires-Dist: numpy
|
|
17
|
-
Requires-Dist: ollama
|
|
18
|
-
Requires-Dist: openai
|
|
19
|
-
Requires-Dist: anthropic
|
|
20
|
-
Requires-Dist: tiktoken
|
|
21
|
-
Requires-Dist: parsedatetime
|
|
22
|
-
Requires-Dist: pytz
|
|
23
|
-
Requires-Dist: serpapi
|
|
24
|
-
Requires-Dist: colorama
|
|
14
|
+
Requires-Dist: pydantic>=2.8.0
|
|
15
|
+
Requires-Dist: structlog>=25.5.0
|
|
16
|
+
Requires-Dist: numpy>=2.3.5
|
|
17
|
+
Requires-Dist: ollama>=0.1.6
|
|
18
|
+
Requires-Dist: openai>=2.8.1
|
|
19
|
+
Requires-Dist: anthropic>=0.74.1
|
|
20
|
+
Requires-Dist: tiktoken>=0.12.0
|
|
21
|
+
Requires-Dist: parsedatetime>=2.6
|
|
22
|
+
Requires-Dist: pytz>=2025.2
|
|
23
|
+
Requires-Dist: serpapi>=0.1.5
|
|
24
|
+
Requires-Dist: colorama>=0.4.6
|
|
25
25
|
Provides-Extra: dev
|
|
26
|
-
Requires-Dist: pytest>=
|
|
27
|
-
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
28
|
-
Requires-Dist: pytest-spec; extra == "dev"
|
|
29
|
-
Requires-Dist: pytest-cov; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest>=9.0.1; extra == "dev"
|
|
27
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == "dev"
|
|
28
|
+
Requires-Dist: pytest-spec>=5.2.0; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == "dev"
|
|
30
30
|
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
31
|
-
Requires-Dist: flake8>=
|
|
31
|
+
Requires-Dist: flake8>=7.3.0; extra == "dev"
|
|
32
32
|
Requires-Dist: bandit>=1.7.0; extra == "dev"
|
|
33
33
|
Requires-Dist: pip-audit>=2.0.0; extra == "dev"
|
|
34
|
-
Requires-Dist: mkdocs; extra == "dev"
|
|
35
|
-
Requires-Dist: mkdocs-material; extra == "dev"
|
|
36
|
-
Requires-Dist: mkdocs-llmstxt; extra == "dev"
|
|
37
|
-
Requires-Dist: mkdocstrings[python]; extra == "dev"
|
|
38
|
-
Requires-Dist: griffe-fieldz; extra == "dev"
|
|
39
|
-
Requires-Dist: pymdown-extensions; extra == "dev"
|
|
34
|
+
Requires-Dist: mkdocs>=1.5.2; extra == "dev"
|
|
35
|
+
Requires-Dist: mkdocs-material>=9.6.10; extra == "dev"
|
|
36
|
+
Requires-Dist: mkdocs-llmstxt>=0.4.0; extra == "dev"
|
|
37
|
+
Requires-Dist: mkdocstrings[python]>=0.21.0; extra == "dev"
|
|
38
|
+
Requires-Dist: griffe-fieldz>=0.3.0; extra == "dev"
|
|
39
|
+
Requires-Dist: pymdown-extensions>=10.3; extra == "dev"
|
|
40
40
|
Dynamic: license-file
|
|
41
41
|
|
|
42
42
|
# Mojentic
|
|
@@ -66,16 +66,26 @@ Mojentic is a framework that provides a simple and flexible way to interact with
|
|
|
66
66
|
|
|
67
67
|
## 🔧 Installation
|
|
68
68
|
|
|
69
|
+
We recommend using [uv](https://docs.astral.sh/uv/) for fast, reliable Python project management.
|
|
70
|
+
|
|
69
71
|
```bash
|
|
70
|
-
# Install from PyPI
|
|
72
|
+
# Install from PyPI using uv
|
|
73
|
+
uv pip install mojentic
|
|
74
|
+
|
|
75
|
+
# Or with pip
|
|
71
76
|
pip install mojentic
|
|
72
77
|
```
|
|
73
78
|
|
|
74
|
-
Or install from source
|
|
79
|
+
Or install from source:
|
|
75
80
|
|
|
76
81
|
```bash
|
|
77
82
|
git clone https://github.com/svetzal/mojentic.git
|
|
78
83
|
cd mojentic
|
|
84
|
+
|
|
85
|
+
# Using uv (recommended)
|
|
86
|
+
uv sync
|
|
87
|
+
|
|
88
|
+
# Or with pip
|
|
79
89
|
pip install -e .
|
|
80
90
|
```
|
|
81
91
|
|
|
@@ -194,11 +204,19 @@ Visit [the documentation](https://svetzal.github.io/mojentic/) for comprehensive
|
|
|
194
204
|
git clone https://github.com/svetzal/mojentic.git
|
|
195
205
|
cd mojentic
|
|
196
206
|
|
|
197
|
-
#
|
|
207
|
+
# Using uv (recommended)
|
|
208
|
+
uv sync --extra dev
|
|
209
|
+
|
|
210
|
+
# Or with pip
|
|
198
211
|
pip install -e ".[dev]"
|
|
199
212
|
|
|
200
213
|
# Run tests
|
|
201
214
|
pytest
|
|
215
|
+
|
|
216
|
+
# Quality checks
|
|
217
|
+
flake8 src # Linting
|
|
218
|
+
bandit -r src # Security scan
|
|
219
|
+
pip-audit # Dependency vulnerabilities
|
|
202
220
|
```
|
|
203
221
|
|
|
204
222
|
## ✅ Project Status
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
_examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
_examples/async_dispatcher_example.py,sha256=Iy01lFd3NTKdgeFc6wMRGFD9FTNH7LEd9nGMtzrbXVo,8592
|
|
3
|
+
_examples/async_llm_example.py,sha256=WPb6ML_xXCSuRMbYWs-w2X28tzj9EosFiQv31gAAPBo,8627
|
|
4
|
+
_examples/broker_as_tool.py,sha256=ixcz8wuhdTZS-0OR9L1CeBMsrKz6SBBAaDhwAoD60e4,3195
|
|
5
|
+
_examples/broker_examples.py,sha256=eheXbzoslI9x_sPEt399hkxpDRI_VkscHL-br1LJqD4,2388
|
|
6
|
+
_examples/broker_image_examples.py,sha256=NGuZQ0x28winv0Sxw7ClBvqj8oD1tdbADITVjXIF0yk,1126
|
|
7
|
+
_examples/characterize_ollama.py,sha256=1XxV6SOoDQXBpRRH2kvres7_gpl1nGoEBRcsf7lplIg,2498
|
|
8
|
+
_examples/characterize_openai.py,sha256=4SDvfzOWfZkMQQdpoEFdR7cj38s1rh1jBJ55PBAbPV0,551
|
|
9
|
+
_examples/chat_session.py,sha256=bg1xFSVCHheDKPs4O4HWiZMRuzVfehpTpcpbG37fXSI,282
|
|
10
|
+
_examples/chat_session_with_tool.py,sha256=4v32BaLtE5y--goPEf_WjAjx9I19WSrRs6tzPaN29Dg,370
|
|
11
|
+
_examples/coding_file_tool.py,sha256=uyN4fA1rfOpkJ0jzgnQ9ZVfUGNAyXyrLHsAXuYDnchI,7140
|
|
12
|
+
_examples/current_datetime_tool_example.py,sha256=-MviImD6D_77YZUVmoOQu-VvFHeqMaae8N-c7wNDszE,918
|
|
13
|
+
_examples/design_analysis.py,sha256=66JxvnA065QV__WXpxJX_eTBDan34nGcKvao75UPLlw,1321
|
|
14
|
+
_examples/embeddings.py,sha256=Wj5H_rf5czv6f8Lwfx20t3GmOHDFouT1JyHp16vSPdg,268
|
|
15
|
+
_examples/ensures_files_exist.py,sha256=LAwX9YtUZGI6NT254PY7oC5yg6q-b9Q_Dez9gGrabQM,2009
|
|
16
|
+
_examples/ephemeral_task_manager_example.py,sha256=DPniyqb4KfRWx-HqxvmZum2SkXqgfXE_MHLfAZeIA-o,1490
|
|
17
|
+
_examples/fetch_openai_models.py,sha256=bLa6ADHy-ntxAy_JZnEc2FvndxsDlVuIaRBf_yzyEKs,3591
|
|
18
|
+
_examples/file_deduplication.py,sha256=wlkG5-TFuBjZTEUrc7DzgNGS_2CaOixCMD3V0LXTWbs,1659
|
|
19
|
+
_examples/file_tool.py,sha256=KomRhY_bRnfhj96BIdxDKncU56r9xoXRHM7GMi8IV-c,2321
|
|
20
|
+
_examples/image_analysis.py,sha256=d45xW9TeMsyqZqJqUy5e7UQ1vig-awVLRwLzlR5UyrQ,479
|
|
21
|
+
_examples/image_broker.py,sha256=YCPeIxAdUzxUYjp9V-VokJxTJFWmbWZNZUjLxdI9rTY,338
|
|
22
|
+
_examples/image_broker_splat.py,sha256=BNwR0ZrA8ajLorDSsPFMup-KGlpsyZ1DjsxhOOp5NYU,1935
|
|
23
|
+
_examples/iterative_solver.py,sha256=QFEwT1aTNW9CViSTSftf6AdSMEz4AS3uWY912VSX2Bw,1324
|
|
24
|
+
_examples/list_models.py,sha256=8noMpGeXOdX5Pf0NXCt_CRurOKEg_5luhWveGntBhe8,578
|
|
25
|
+
_examples/model_characterization.py,sha256=UnF5tXPRSsZKxvZncFD5breVdPufukZS6MyT_w5e5zw,2573
|
|
26
|
+
_examples/openai_gateway_enhanced_demo.py,sha256=VyaCpWdSFxvCL2izyhqn7PvGk-luxfXICzVLhL6J97o,6042
|
|
27
|
+
_examples/oversized_embeddings.py,sha256=_z2JoqZn0g7VtRsFVWIkngVqzjhQQvCEUYWVxs1I7MM,284
|
|
28
|
+
_examples/raw.py,sha256=Y9OR1Tq8NtpQZr7O5dfaa2BN2oKpEMgQVN_9-aleFpo,443
|
|
29
|
+
_examples/react.py,sha256=bGnTxF8PyV0qouDBDenUhpcYm8HrhwrXDbKsvh-47MA,2581
|
|
30
|
+
_examples/recursive_agent.py,sha256=s36FksfaRiUq7t7_GVEpDQ6R115ZLbFIdAZ0NjDhvdE,2997
|
|
31
|
+
_examples/routed_send_response.py,sha256=FHhTy7y2f7GY_WAWZYqOnFqF1xeJTBuS5EjfJGsJ3S8,4146
|
|
32
|
+
_examples/simple_llm.py,sha256=y-maBN5eKDQZOsaEK4uYq0KnU1x_-et0mpzWELPhFX0,1211
|
|
33
|
+
_examples/simple_llm_repl.py,sha256=l3Ul67AttvLrteC4Eikos2562ujxH9RAfJbr2WNkx2A,1391
|
|
34
|
+
_examples/simple_structured.py,sha256=V5c1RfhHb8ay8q7Xek_l8A2KEaIugKd0QHOePny6cQY,1312
|
|
35
|
+
_examples/simple_tool.py,sha256=Yr4y7q4-GyvvHEiRPFqVWcAe14IFHcatqVw5ypuaNZs,1279
|
|
36
|
+
_examples/solver_chat_session.py,sha256=uVBsqXRmyj3Vh0JrfZeCw5GzgwrL3-CR_xZOVTnYXGU,2015
|
|
37
|
+
_examples/streaming.py,sha256=XV9v0FkrE8eI5e4Nilq5-OM0Oox0kBpNaz9eLqWnCXI,1451
|
|
38
|
+
_examples/tell_user_example.py,sha256=l3nYYyKh45e4wbMtHONnwmYPPlkSFv5Erh1dEukyUL4,1268
|
|
39
|
+
_examples/tracer_demo.py,sha256=KfHr0mpC3G97tIKo470OVDwYWYE7jRLAj0Bp_gZ1D4M,6984
|
|
40
|
+
_examples/tracer_qt_viewer.py,sha256=AOxupJGzkVyNZ_1LATKFz0s9VN-cdiwJ1waJGtVfUtA,14988
|
|
41
|
+
_examples/working_memory.py,sha256=EuUXMQbJyquXmYUl63keQ8uI_suq8hq15Apn_kB-Ex8,1936
|
|
42
|
+
_examples/react/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
+
_examples/react/formatters.py,sha256=uL4s0tJaD4cvZKP37UY_xV742wuONOmbXeYgAc1pBiE,2402
|
|
44
|
+
_examples/react/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
+
_examples/react/agents/decisioning_agent.py,sha256=-xaow3ohl1WABsolg-UXaHZ3Gaz6Tg3CS61kho6n0SE,6481
|
|
46
|
+
_examples/react/agents/summarization_agent.py,sha256=WBafMCvlf6mPpvcXz1HQT6mxrB243cCH6lZJtJHeSXI,2750
|
|
47
|
+
_examples/react/agents/thinking_agent.py,sha256=cPxsqTTqWorF1_mejpI5OVb8xJIyNTvycSyNd-uXQrM,3550
|
|
48
|
+
_examples/react/agents/tool_call_agent.py,sha256=nxiEfQwF5TDZCbW_GonzyHthqTe5Y8jHqwdLcJvPwN4,2742
|
|
49
|
+
_examples/react/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
_examples/react/models/base.py,sha256=yC94y5er04Z_5ZVqmEdMUY4YwnnGPggOIWnhrf_KnDg,2238
|
|
51
|
+
_examples/react/models/events.py,sha256=P8B1Arqv7vPK6X4wH99l1T4voxATQJwA_9izQ7SJbSs,2649
|
|
52
|
+
mojentic/__init__.py,sha256=hGAX3qaP6_Pf6wF-rpUmMprPUw3Rne1LKb7kgCMq4bY,1015
|
|
53
|
+
mojentic/async_dispatcher.py,sha256=8mAxjX-5YrriQeKbQ4sAWllJP7SYRVoffHkY85lh8GM,4701
|
|
54
|
+
mojentic/async_dispatcher_spec.py,sha256=UanNiy-torD1_-yHoXH1tnlTFo5fZ0kC7PJoZ_e0tY0,7268
|
|
55
|
+
mojentic/dispatcher.py,sha256=gqQAQPo9HTsVxwLTqXKoyx1IYvfVqyeY1NNEqFz_S80,2654
|
|
56
|
+
mojentic/event.py,sha256=P0kgI0Si41ifCTLNtpfkks0OktlK4wuAj3oMCDtdUyo,330
|
|
57
|
+
mojentic/router.py,sha256=7z2xqgpsuHmA32HfH3rAgDk3zLhUBxz8DHPt2vDlVOU,377
|
|
58
|
+
mojentic/router_spec.py,sha256=CRYeKEa7dz_yN8ABAi5DgY5C0mJW7she3Kw0NzxoHx4,876
|
|
59
|
+
mojentic/agents/__init__.py,sha256=msLtfyCzBEPv3ydPQkKQ_MZ1S6tQfn9_CGZirrZUxG4,1065
|
|
60
|
+
mojentic/agents/agent_event_adapter.py,sha256=Vgia6oIzTRayx2swrGYM3rzKBlJCPy5tOy5fVYWQu80,934
|
|
61
|
+
mojentic/agents/async_aggregator_agent.py,sha256=mv4iFND6krvZQjnBmR9Z9Quu6a_b1zl_opSquKIjqFk,5355
|
|
62
|
+
mojentic/agents/async_aggregator_agent_spec.py,sha256=WRszNGpVdYLNz31Q0noD6co2CttLs7eqyiV643j2RCw,8166
|
|
63
|
+
mojentic/agents/async_llm_agent.py,sha256=CMEjdbVQ71BBcVL8pvS5Duh2mvSlrLVM6vWstRsbM5w,6533
|
|
64
|
+
mojentic/agents/async_llm_agent_spec.py,sha256=b-HyakHEhjKobd0idpTsdHVXs4uMHwcAuKJC-TwtZGM,5248
|
|
65
|
+
mojentic/agents/base_agent.py,sha256=m1SRyzY9ou4tesFDszonC4Y8moQMg9eofvJeuhoXmM0,722
|
|
66
|
+
mojentic/agents/base_async_agent.py,sha256=n5Cuw0t-D10YQONa4bbq4-NRzC12nAAL5J2NB7j3DLk,888
|
|
67
|
+
mojentic/agents/base_llm_agent.py,sha256=HSHnheWJ4H4FRLFPVAWt7xivXUNi3FSBbWw5MgwcCeg,3178
|
|
68
|
+
mojentic/agents/base_llm_agent_spec.py,sha256=1kzayCtAZY7oWloaFMh7-NkTtiKihDCLD3i9HwH3_Uc,2571
|
|
69
|
+
mojentic/agents/correlation_aggregator_agent.py,sha256=okdq92rMNwIXTgnuwwn3zp4JzSxTh05vGWzTGocOgbU,1134
|
|
70
|
+
mojentic/agents/iterative_problem_solver.py,sha256=WDs40oQkxlZN9zyVKONzVY6QBb2PVGFOEJLDqJqCl74,4360
|
|
71
|
+
mojentic/agents/output_agent.py,sha256=I9GHcWvQhWxEcvjzj47scKo_QF8_6yR17ZUEHhwC94Y,231
|
|
72
|
+
mojentic/agents/simple_recursive_agent.py,sha256=nNUzamDzBL7AU79mCb_NZsVQazAxSTnKXh9s5g_A8Ls,9856
|
|
73
|
+
mojentic/agents/simple_recursive_agent_spec.py,sha256=rcIT2BWjT-sc2WevZ0ts9qi9Feh-ypNjeKYfULZmqo8,14945
|
|
74
|
+
mojentic/context/__init__.py,sha256=RKDcfejikUZMDuFYIfJpmLnoXoRCOCfLjOTiicjq1Yo,80
|
|
75
|
+
mojentic/context/shared_working_memory.py,sha256=Zt9MNGErEkDIUAaHvyhEOiTaEobI9l0MV4Z59lQFBr0,396
|
|
76
|
+
mojentic/llm/__init__.py,sha256=pHWdS6XRdPKhEWv1YpXaD5B5mUPojWM9ncYB-bXI2Qo,484
|
|
77
|
+
mojentic/llm/chat_session.py,sha256=0lhCZDxGfq3ma4m-SmJqfQYdyxPQElSFPQOcqAacFlQ,4005
|
|
78
|
+
mojentic/llm/chat_session_spec.py,sha256=8-jj-EHV2WwWuvo3t8I75kSEAYiG1nR-OEwkkLTi_z0,3872
|
|
79
|
+
mojentic/llm/llm_broker.py,sha256=d59MvUBNgVAZbL4T6GUp-tMroTwwmcTJfyOzJSvejAw,16924
|
|
80
|
+
mojentic/llm/llm_broker_spec.py,sha256=N0wSAIakWXn-4cxwG3dPR0MycZNTW-lQl9jWHlchC2w,8662
|
|
81
|
+
mojentic/llm/message_composers.py,sha256=8_5fA-J1I3BZ_0YlgZkQhsn_u7H8yMGEVNYHUPYW1X8,12142
|
|
82
|
+
mojentic/llm/message_composers_spec.py,sha256=pR-npU5KL7lzYpAl0gWTJIP6obcnMxMpkEudoZs5-0M,12133
|
|
83
|
+
mojentic/llm/gateways/__init__.py,sha256=y8zI9dGVhFkwDPSVU5NFFyaTTDWOkCfQYMzlFN72Ihg,786
|
|
84
|
+
mojentic/llm/gateways/anthropic.py,sha256=DfaNgCrx33O4KfPrP5za_yKXlncIMexBnVKxOYk2Bew,1813
|
|
85
|
+
mojentic/llm/gateways/anthropic_messages_adapter.py,sha256=FtDJMyeDOIei0Ign83C_jpWG06c73VAo6pXxk0zI3nI,2991
|
|
86
|
+
mojentic/llm/gateways/embeddings_gateway.py,sha256=kcOhiyHzOyQgKgwPDQJD5oVvfwk71GsBgMYJOIDv5NU,1347
|
|
87
|
+
mojentic/llm/gateways/file_gateway.py,sha256=3bZpalSyl_R4016WzCmmjUBDtAgPsmx19eVGv6p1Ufk,1418
|
|
88
|
+
mojentic/llm/gateways/llm_gateway.py,sha256=1J-FWKlFNxqd9_YP8Ul6J0cORYQoF_czgEfpAUaWFtQ,2677
|
|
89
|
+
mojentic/llm/gateways/models.py,sha256=OyIaMHKrrx6dHo5FbC8qOFct7PRql9wqbe_BJlgDSDE,3015
|
|
90
|
+
mojentic/llm/gateways/ollama.py,sha256=9DhNRC2sjBwnzyZplS3kd8-s3famxHUf4WfBycFH0GE,7737
|
|
91
|
+
mojentic/llm/gateways/ollama_messages_adapter.py,sha256=kUN_p2FyN88_trXMcL-Xsn9xPBU7pGKlJwTUEUCf6G4,1404
|
|
92
|
+
mojentic/llm/gateways/ollama_messages_adapter_spec.py,sha256=gVRbWDrHOa1EiZ0CkEWe0pGn-GKRqdGb-x56HBQeYSE,4981
|
|
93
|
+
mojentic/llm/gateways/openai.py,sha256=S19AIooYoBZYELVPrSeOwKslpYc7jrhu-sLjDXUFF3w,23161
|
|
94
|
+
mojentic/llm/gateways/openai_message_adapter_spec.py,sha256=3nObWsf6cPuWuCK_IhrQoRdQdz7gndqeSSvJIxtQkp8,6609
|
|
95
|
+
mojentic/llm/gateways/openai_messages_adapter.py,sha256=Scal68JKKdBHB35ok1c5DeWYdD6Wra5oXSsPxJyyXSQ,3947
|
|
96
|
+
mojentic/llm/gateways/openai_model_registry.py,sha256=0_X7YE48Hri9Sp8Ao440-2gqUoPl9xY5M0wMn733u2U,14041
|
|
97
|
+
mojentic/llm/gateways/openai_model_registry_spec.py,sha256=p7eiGZrgX7NIkRkraqFXA3WODnGAsIhqq9rVM98Z5qA,6698
|
|
98
|
+
mojentic/llm/gateways/openai_spec.py,sha256=eazIk8bLQ2d9CNPGhcw0WedX7CZz-TEkmwGz74c39CM,4161
|
|
99
|
+
mojentic/llm/gateways/openai_temperature_handling_spec.py,sha256=9KU4L9Zqdvot0yBfGPNREOsSIAOjvR7v88s_f_bq1kw,9928
|
|
100
|
+
mojentic/llm/gateways/tokenizer_gateway.py,sha256=ztuqfunlJ6xmyUPPHcC_69-kegiNJD6jdSEde7hDh2w,485
|
|
101
|
+
mojentic/llm/registry/__init__.py,sha256=FFokdoVYhtHslv-hZekONfG8ZdNA11Tto9chFLFVImE,71
|
|
102
|
+
mojentic/llm/registry/llm_registry.py,sha256=beyrgGrkXx5ZckUJzC1nQ461vra0fF6s_qRaEdi5bsg,2508
|
|
103
|
+
mojentic/llm/registry/models.py,sha256=XOZ0ElTL5mEicpcUk9lrVr0GRFgR1uFmDm7GGWm7yYg,2043
|
|
104
|
+
mojentic/llm/registry/populate_registry_from_ollama.py,sha256=4Pk_2t5WI8IbyMBoeIvl5Jd1hGom_OSQHZVZmhWjjqE,2606
|
|
105
|
+
mojentic/llm/tools/__init__.py,sha256=fFxqYgjzenR4DSULMlkNp6W5FCs2x-CklKKUjVO0JvA,124
|
|
106
|
+
mojentic/llm/tools/ask_user_tool.py,sha256=fJNUtqrp1VSJ7qvkQcsYur88-FMLn1wRABTB_z1_bfw,1145
|
|
107
|
+
mojentic/llm/tools/current_datetime.py,sha256=NDZuvcsvNoDGItXQX_ut1O2FUtlRpKrJ3nBUIJir8EY,1653
|
|
108
|
+
mojentic/llm/tools/date_resolver.py,sha256=lo2wlTOPEA0gNm4J_vyc9f3lnLq6Uxy_sFgmzgf86tU,2388
|
|
109
|
+
mojentic/llm/tools/date_resolver_spec.py,sha256=RF-1YRBgwPKe-nQYJThWxc1HuH6Y1yRBOm0vpJ6VquA,1184
|
|
110
|
+
mojentic/llm/tools/file_manager.py,sha256=7U_JtiRWyNjfZF-i43tKfV5Q5-VraWXAAvgHpbWANP0,33170
|
|
111
|
+
mojentic/llm/tools/file_manager_spec.py,sha256=gb3f9AlKbwuy2XJGQJYjq8Vu4J0BA2qERpKiEvbVmNA,25838
|
|
112
|
+
mojentic/llm/tools/llm_tool.py,sha256=7m-bwqtejC3c-445IB237UV1GHBBMkWLLt76mQsSDYs,1684
|
|
113
|
+
mojentic/llm/tools/llm_tool_spec.py,sha256=rgbRmun0mz9OhV3mnD5DZKxTlMEvrcRtbtpwZ6AJMQY,2047
|
|
114
|
+
mojentic/llm/tools/organic_web_search.py,sha256=JbzNCSePjFLoV2uoz_oAtu4_JxMMquvxtcWFmwNR1Jc,1344
|
|
115
|
+
mojentic/llm/tools/tell_user_tool.py,sha256=AVA915lVVEvv3gPjwki3lZ7-y5fbFuQyh0sDeabaJ_4,1086
|
|
116
|
+
mojentic/llm/tools/tool_wrapper.py,sha256=huVubOEDnrM4crCL07_PB1vkb6qxVnNA3r6HcIEw7pY,1460
|
|
117
|
+
mojentic/llm/tools/tool_wrapper_spec.py,sha256=LGqtre-g8SzOy3xtpbMdgTnw2EdYutmFOsMpediE8_0,2543
|
|
118
|
+
mojentic/llm/tools/ephemeral_task_manager/__init__.py,sha256=kqJjgm0WhgANWxgpji474xz19ee6Y0BeiZ5LxwIOp-Q,865
|
|
119
|
+
mojentic/llm/tools/ephemeral_task_manager/append_task_tool.py,sha256=Yzg_aKwXlXdpcMiqCb-ZwkBoF34rsHEs91KLiFiOtNc,2380
|
|
120
|
+
mojentic/llm/tools/ephemeral_task_manager/append_task_tool_spec.py,sha256=cqJ2HSAgBge3S76-hC6T8Bv1Ox3buWeSdsEpVbMjNPs,1159
|
|
121
|
+
mojentic/llm/tools/ephemeral_task_manager/clear_tasks_tool.py,sha256=GCBGVVlRnYS3llZwMUgNgsKBkZKu4FFTaKTb95F9b10,1476
|
|
122
|
+
mojentic/llm/tools/ephemeral_task_manager/clear_tasks_tool_spec.py,sha256=-MMHdu1e8CVfyDeKIpxfI5wyi26Uob3weDPR9rNPEe0,948
|
|
123
|
+
mojentic/llm/tools/ephemeral_task_manager/complete_task_tool.py,sha256=ZW_7DYRLruErdeuBUBuEfgKgE4Hlf-p5lY3W14D5Au8,2454
|
|
124
|
+
mojentic/llm/tools/ephemeral_task_manager/complete_task_tool_spec.py,sha256=qFTJHwLAASyo89kVGX2ATb-2x2hbkxz9hRALMUsZ8RE,1549
|
|
125
|
+
mojentic/llm/tools/ephemeral_task_manager/ephemeral_task_list.py,sha256=PQIEAKbo1eFdEcurRtmXwSoJeBQG5855qv2wPvQhP9A,5420
|
|
126
|
+
mojentic/llm/tools/ephemeral_task_manager/ephemeral_task_list_spec.py,sha256=TmaQCsPoZ7IYSnaRiMj8Y7wuaZEzEuGK1n8aSjZQORg,4740
|
|
127
|
+
mojentic/llm/tools/ephemeral_task_manager/insert_task_after_tool.py,sha256=4_stC3f_iOD_83OP4HXGb-Mud9M9c0iF9CrQz2xDqKA,3010
|
|
128
|
+
mojentic/llm/tools/ephemeral_task_manager/insert_task_after_tool_spec.py,sha256=8UrjnLlEjF28RLPnsg5CESuSmaVUGULMdUjtYu5KW9w,1791
|
|
129
|
+
mojentic/llm/tools/ephemeral_task_manager/list_tasks_tool.py,sha256=jnkmmxOcytygDDvqEZT8cdqDZCedyC54FI2Gee7igrA,2103
|
|
130
|
+
mojentic/llm/tools/ephemeral_task_manager/list_tasks_tool_spec.py,sha256=xwPAhx5ix7In8NFMm6VVbxoYG1iwLHcn_7wqMHE6HH8,1162
|
|
131
|
+
mojentic/llm/tools/ephemeral_task_manager/prepend_task_tool.py,sha256=CDQa8LdNJTaSS0sAFzmFPFsVt2umW6Adn8JW7A6gj5c,2413
|
|
132
|
+
mojentic/llm/tools/ephemeral_task_manager/prepend_task_tool_spec.py,sha256=lUCnejAON9g0DDNS64EVHwapPjF8b87RsXPUVvvG0b4,1174
|
|
133
|
+
mojentic/llm/tools/ephemeral_task_manager/start_task_tool.py,sha256=VH8Wa4-ZmkMIsyLuLXJx4pGidiT0KeT55DnujFpK-0o,2414
|
|
134
|
+
mojentic/llm/tools/ephemeral_task_manager/start_task_tool_spec.py,sha256=oDeVPPfquM2ojwG0aaNnbWCB_LRgm8runtG-CumZkLg,1490
|
|
135
|
+
mojentic/tracer/__init__.py,sha256=41xivQN9c0GJTtFIuHChL1zl2MS2o68sEdFM6yd9nlQ,252
|
|
136
|
+
mojentic/tracer/event_store.py,sha256=a8Iwg31oJaM5aa-d_-5F2SixbbflbYRXSm7RqTgXOpI,3618
|
|
137
|
+
mojentic/tracer/event_store_spec.py,sha256=FG2XpY55dvOhyDqQ6ulkkgSNCfH31dgReHhJy2smRD4,6449
|
|
138
|
+
mojentic/tracer/null_tracer.py,sha256=R7nl3FC808ia0p0ag--FtyyFponyb4huPlT90FtbBeE,6861
|
|
139
|
+
mojentic/tracer/tracer_events.py,sha256=ZLlzd-kZKTb4B2ggxJcwjBPydcMr6KYD1Us-Jk_lBqU,5687
|
|
140
|
+
mojentic/tracer/tracer_events_spec.py,sha256=EKh1K55ipIapbhjTqScKBSQUaIC09cO1VviYb0WTRZo,3480
|
|
141
|
+
mojentic/tracer/tracer_system.py,sha256=KPSVIfGVOjSx6Vj_SvrisqJXKT6ddwBc_UCMQC6DQU8,10088
|
|
142
|
+
mojentic/tracer/tracer_system_spec.py,sha256=8hpQlmAWyjUvk7ihy339L0buQ-eH5rluaFvyMl-mSH4,8830
|
|
143
|
+
mojentic/utils/__init__.py,sha256=WvNYbtVeliMZn2sMX53CrOQlQLJBXi4mJNoocG7s_kI,116
|
|
144
|
+
mojentic/utils/formatting.py,sha256=YtXh0aYzLB9GKP8ZD6u1By1OBqPOXUtHirtq0GmHNag,948
|
|
145
|
+
mojentic-1.0.0.dist-info/licenses/LICENSE.md,sha256=txSgV8n5zY1W3NiF5HHsCwlaW0e8We1cSC6TuJUqxXA,1060
|
|
146
|
+
mojentic-1.0.0.dist-info/METADATA,sha256=DSiDA6rxRnPJ_v6VNpjn5_ebXgphpDBzAWgWhgc2kig,8709
|
|
147
|
+
mojentic-1.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
148
|
+
mojentic-1.0.0.dist-info/top_level.txt,sha256=Q-BvPQ8Eu1jnEqK8Xkr6A9C8Xa1z38oPZRHuA5MCTqg,19
|
|
149
|
+
mojentic-1.0.0.dist-info/RECORD,,
|