mojentic 0.8.4__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.
Files changed (106) hide show
  1. _examples/async_dispatcher_example.py +12 -4
  2. _examples/async_llm_example.py +1 -2
  3. _examples/broker_as_tool.py +42 -17
  4. _examples/broker_examples.py +5 -7
  5. _examples/broker_image_examples.py +1 -1
  6. _examples/characterize_ollama.py +3 -3
  7. _examples/characterize_openai.py +1 -1
  8. _examples/chat_session.py +2 -2
  9. _examples/chat_session_with_tool.py +2 -2
  10. _examples/coding_file_tool.py +16 -18
  11. _examples/current_datetime_tool_example.py +2 -2
  12. _examples/embeddings.py +1 -1
  13. _examples/ephemeral_task_manager_example.py +15 -11
  14. _examples/fetch_openai_models.py +10 -3
  15. _examples/file_deduplication.py +6 -6
  16. _examples/file_tool.py +5 -5
  17. _examples/image_analysis.py +2 -3
  18. _examples/image_broker.py +1 -1
  19. _examples/image_broker_splat.py +1 -1
  20. _examples/iterative_solver.py +3 -3
  21. _examples/model_characterization.py +2 -0
  22. _examples/openai_gateway_enhanced_demo.py +15 -5
  23. _examples/raw.py +1 -1
  24. _examples/react/agents/decisioning_agent.py +173 -15
  25. _examples/react/agents/summarization_agent.py +89 -0
  26. _examples/react/agents/thinking_agent.py +84 -14
  27. _examples/react/agents/tool_call_agent.py +83 -0
  28. _examples/react/formatters.py +38 -4
  29. _examples/react/models/base.py +60 -11
  30. _examples/react/models/events.py +76 -8
  31. _examples/react.py +71 -21
  32. _examples/recursive_agent.py +2 -2
  33. _examples/simple_llm.py +3 -3
  34. _examples/simple_llm_repl.py +1 -1
  35. _examples/simple_structured.py +1 -1
  36. _examples/simple_tool.py +2 -2
  37. _examples/solver_chat_session.py +5 -11
  38. _examples/streaming.py +36 -18
  39. _examples/tell_user_example.py +4 -4
  40. _examples/tracer_demo.py +18 -20
  41. _examples/tracer_qt_viewer.py +49 -46
  42. _examples/working_memory.py +1 -1
  43. mojentic/__init__.py +3 -3
  44. mojentic/agents/__init__.py +26 -8
  45. mojentic/agents/{agent_broker.py → agent_event_adapter.py} +3 -3
  46. mojentic/agents/async_aggregator_agent_spec.py +32 -33
  47. mojentic/agents/async_llm_agent.py +9 -5
  48. mojentic/agents/async_llm_agent_spec.py +21 -22
  49. mojentic/agents/base_async_agent.py +2 -2
  50. mojentic/agents/base_llm_agent.py +6 -2
  51. mojentic/agents/iterative_problem_solver.py +11 -5
  52. mojentic/agents/simple_recursive_agent.py +11 -10
  53. mojentic/agents/simple_recursive_agent_spec.py +423 -0
  54. mojentic/async_dispatcher.py +0 -1
  55. mojentic/async_dispatcher_spec.py +1 -1
  56. mojentic/context/__init__.py +0 -2
  57. mojentic/dispatcher.py +7 -8
  58. mojentic/llm/__init__.py +5 -5
  59. mojentic/llm/gateways/__init__.py +19 -18
  60. mojentic/llm/gateways/anthropic.py +1 -0
  61. mojentic/llm/gateways/anthropic_messages_adapter.py +0 -1
  62. mojentic/llm/gateways/llm_gateway.py +1 -1
  63. mojentic/llm/gateways/ollama.py +23 -18
  64. mojentic/llm/gateways/openai.py +243 -44
  65. mojentic/llm/gateways/openai_message_adapter_spec.py +3 -3
  66. mojentic/llm/gateways/openai_model_registry.py +7 -6
  67. mojentic/llm/gateways/openai_model_registry_spec.py +1 -2
  68. mojentic/llm/gateways/openai_temperature_handling_spec.py +2 -2
  69. mojentic/llm/llm_broker.py +162 -2
  70. mojentic/llm/llm_broker_spec.py +76 -2
  71. mojentic/llm/message_composers.py +6 -3
  72. mojentic/llm/message_composers_spec.py +5 -1
  73. mojentic/llm/registry/__init__.py +0 -3
  74. mojentic/llm/registry/populate_registry_from_ollama.py +2 -2
  75. mojentic/llm/tools/__init__.py +0 -9
  76. mojentic/llm/tools/ask_user_tool.py +11 -5
  77. mojentic/llm/tools/current_datetime.py +9 -6
  78. mojentic/llm/tools/date_resolver.py +10 -4
  79. mojentic/llm/tools/date_resolver_spec.py +0 -1
  80. mojentic/llm/tools/ephemeral_task_manager/append_task_tool.py +4 -1
  81. mojentic/llm/tools/ephemeral_task_manager/ephemeral_task_list.py +1 -1
  82. mojentic/llm/tools/ephemeral_task_manager/insert_task_after_tool.py +4 -1
  83. mojentic/llm/tools/ephemeral_task_manager/prepend_task_tool.py +5 -2
  84. mojentic/llm/tools/file_manager.py +131 -28
  85. mojentic/llm/tools/file_manager_spec.py +0 -3
  86. mojentic/llm/tools/llm_tool.py +1 -1
  87. mojentic/llm/tools/llm_tool_spec.py +0 -2
  88. mojentic/llm/tools/organic_web_search.py +4 -2
  89. mojentic/llm/tools/tell_user_tool.py +6 -2
  90. mojentic/llm/tools/tool_wrapper.py +2 -2
  91. mojentic/tracer/__init__.py +1 -10
  92. mojentic/tracer/event_store.py +7 -8
  93. mojentic/tracer/event_store_spec.py +1 -2
  94. mojentic/tracer/null_tracer.py +37 -43
  95. mojentic/tracer/tracer_events.py +8 -2
  96. mojentic/tracer/tracer_events_spec.py +6 -7
  97. mojentic/tracer/tracer_system.py +37 -36
  98. mojentic/tracer/tracer_system_spec.py +21 -6
  99. mojentic/utils/__init__.py +1 -1
  100. mojentic/utils/formatting.py +1 -0
  101. {mojentic-0.8.4.dist-info → mojentic-1.0.0.dist-info}/METADATA +76 -27
  102. mojentic-1.0.0.dist-info/RECORD +149 -0
  103. mojentic-0.8.4.dist-info/RECORD +0 -146
  104. {mojentic-0.8.4.dist-info → mojentic-1.0.0.dist-info}/WHEEL +0 -0
  105. {mojentic-0.8.4.dist-info → mojentic-1.0.0.dist-info}/licenses/LICENSE.md +0 -0
  106. {mojentic-0.8.4.dist-info → mojentic-1.0.0.dist-info}/top_level.txt +0 -0
@@ -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"
@@ -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, Union
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
- model: str,
63
- messages: List[Dict],
64
- temperature: float = 1.0,
65
- tools: Optional[List[Dict]] = None,
66
- source: Any = None,
67
- correlation_id: str = None) -> None:
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
- model: str,
102
- content: str,
103
- tool_calls: Optional[List[Dict]] = None,
104
- call_duration_ms: Optional[float] = None,
105
- source: Any = None,
106
- correlation_id: str = None) -> None:
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
- tool_name: str,
141
- arguments: Dict[str, Any],
142
- result: Any,
143
- caller: Optional[str] = None,
144
- call_duration_ms: Optional[float] = None,
145
- source: Any = None,
146
- correlation_id: str = None) -> None:
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(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:
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(self,
222
- event_type: Optional[Type[TracerEvent]] = None,
223
- start_time: Optional[float] = None,
224
- end_time: Optional[float] = None,
225
- filter_func: Optional[Callable[[TracerEvent], bool]] = None) -> List[TracerEvent]:
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(source=DescribeTracerSystem, timestamp=now - 100, model="model1", messages=[], correlation_id=correlation_id)
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(source=DescribeTracerSystem, timestamp=now - 50, model="model2", messages=[], correlation_id=correlation_id)
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(source=DescribeTracerSystem, timestamp=now, model="model3", messages=[], correlation_id=correlation_id)
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
@@ -2,4 +2,4 @@
2
2
 
3
3
  from .formatting import format_block
4
4
 
5
- __all__ = ['format_block']
5
+ __all__ = ['format_block']
@@ -8,6 +8,7 @@ from colorama import init, Fore, Style
8
8
  # Initialize colorama
9
9
  init()
10
10
 
11
+
11
12
  def format_block(content: str, separator: str = "#" * 39) -> str:
12
13
  """Format a block of text with separator lines for clear console output.
13
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mojentic
3
- Version: 0.8.4
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,30 +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>=7.0.0; extra == "dev"
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>=6.0.0; extra == "dev"
32
- Requires-Dist: mkdocs; extra == "dev"
33
- Requires-Dist: mkdocs-material; extra == "dev"
34
- Requires-Dist: mkdocs-llmstxt; extra == "dev"
35
- Requires-Dist: mkdocstrings[python]; extra == "dev"
36
- Requires-Dist: griffe-fieldz; extra == "dev"
37
- Requires-Dist: pymdown-extensions; extra == "dev"
31
+ Requires-Dist: flake8>=7.3.0; extra == "dev"
32
+ Requires-Dist: bandit>=1.7.0; extra == "dev"
33
+ Requires-Dist: pip-audit>=2.0.0; 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"
38
40
  Dynamic: license-file
39
41
 
40
42
  # Mojentic
@@ -64,16 +66,26 @@ Mojentic is a framework that provides a simple and flexible way to interact with
64
66
 
65
67
  ## 🔧 Installation
66
68
 
69
+ We recommend using [uv](https://docs.astral.sh/uv/) for fast, reliable Python project management.
70
+
67
71
  ```bash
68
- # Install from PyPI
72
+ # Install from PyPI using uv
73
+ uv pip install mojentic
74
+
75
+ # Or with pip
69
76
  pip install mojentic
70
77
  ```
71
78
 
72
- Or install from source
79
+ Or install from source:
73
80
 
74
81
  ```bash
75
82
  git clone https://github.com/svetzal/mojentic.git
76
83
  cd mojentic
84
+
85
+ # Using uv (recommended)
86
+ uv sync
87
+
88
+ # Or with pip
77
89
  pip install -e .
78
90
  ```
79
91
 
@@ -91,7 +103,7 @@ openai_llm = LLMBroker(model="gpt-5", gateway=OpenAIGateway(api_key="your_api_ke
91
103
  # Or use other models: "gpt-4o", "gpt-4.1", "o1-mini", "o3-mini", etc.
92
104
 
93
105
  # Or use Ollama for local LLMs
94
- ollama_llm = LLMBroker(model="llama3")
106
+ ollama_llm = LLMBroker(model="qwen3:32b")
95
107
 
96
108
  # Simple text generation
97
109
  result = openai_llm.generate(messages=[LLMMessage(content='Hello, how are you?')])
@@ -121,6 +133,35 @@ result = openai_llm.generate(messages=[
121
133
  print(result)
122
134
  ```
123
135
 
136
+ ## 🔑 OpenAI configuration
137
+
138
+ OpenAIGateway now supports environment-variable defaults so you can get started without hardcoding secrets:
139
+
140
+ - If you omit `api_key`, it will use the `OPENAI_API_KEY` environment variable.
141
+ - If you omit `base_url`, it will use the `OPENAI_API_ENDPOINT` environment variable (useful for custom endpoints like Azure/OpenAI-compatible proxies).
142
+ - Precedence: values you pass explicitly to `OpenAIGateway(api_key=..., base_url=...)` always override environment variables.
143
+
144
+ Examples:
145
+
146
+ ```python
147
+ from mojentic.llm import LLMBroker
148
+ from mojentic.llm.gateways import OpenAIGateway
149
+
150
+ # 1) Easiest: rely on environment variables
151
+ # export OPENAI_API_KEY=sk-...
152
+ # export OPENAI_API_ENDPOINT=https://api.openai.com/v1 # optional
153
+ llm = LLMBroker(
154
+ model="gpt-4o-mini",
155
+ gateway=OpenAIGateway() # picks up OPENAI_API_KEY/OPENAI_API_ENDPOINT automatically
156
+ )
157
+
158
+ # 2) Explicitly override one or both values
159
+ llm = LLMBroker(
160
+ model="gpt-4o-mini",
161
+ gateway=OpenAIGateway(api_key="your_key", base_url="https://api.openai.com/v1")
162
+ )
163
+ ```
164
+
124
165
  ## 🤖 OpenAI Model Support
125
166
 
126
167
  The framework automatically handles parameter differences between model types, so you can switch between any models without code changes.
@@ -163,11 +204,19 @@ Visit [the documentation](https://svetzal.github.io/mojentic/) for comprehensive
163
204
  git clone https://github.com/svetzal/mojentic.git
164
205
  cd mojentic
165
206
 
166
- # Install dependencies
207
+ # Using uv (recommended)
208
+ uv sync --extra dev
209
+
210
+ # Or with pip
167
211
  pip install -e ".[dev]"
168
212
 
169
213
  # Run tests
170
214
  pytest
215
+
216
+ # Quality checks
217
+ flake8 src # Linting
218
+ bandit -r src # Security scan
219
+ pip-audit # Dependency vulnerabilities
171
220
  ```
172
221
 
173
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,,