mojentic 0.5.1__tar.gz → 0.5.3__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.
- {mojentic-0.5.1/src/mojentic.egg-info → mojentic-0.5.3}/PKG-INFO +1 -1
- {mojentic-0.5.1 → mojentic-0.5.3}/pyproject.toml +1 -1
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/broker_examples.py +29 -10
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/message_composers.py +20 -6
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/date_resolver.py +4 -3
- {mojentic-0.5.1 → mojentic-0.5.3/src/mojentic.egg-info}/PKG-INFO +1 -1
- {mojentic-0.5.1 → mojentic-0.5.3}/LICENSE.md +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/README.md +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/setup.cfg +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/broker_as_tool.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/characterize_ollama.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/characterize_openai.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/chat_session.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/chat_session_with_tool.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/coding_file_tool.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/current_datetime_tool_example.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/design_analysis.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/embeddings.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/ensures_files_exist.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/file_deduplication.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/file_tool.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/image_analysis.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/image_broker.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/image_broker_splat.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/iterative_solver.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/list_models.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/raw.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/agents/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/agents/decisioning_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/agents/thinking_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/formatters.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/models/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/models/base.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react/models/events.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/react.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/recursive_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/routed_send_response.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/simple_llm.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/simple_llm_repl.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/simple_structured.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/simple_tool.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/solver_chat_session.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/streaming.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/_examples/working_memory.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/agent_broker.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/base_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/base_llm_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/base_llm_agent_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/correlation_aggregator_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/iterative_problem_solver.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/output_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/agents/simple_recursive_agent.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/audit/event_store.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/audit/event_store_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/context/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/context/shared_working_memory.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/dispatcher.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/event.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/chat_session.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/chat_session_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/anthropic.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/anthropic_messages_adapter.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/embeddings_gateway.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/file_gateway.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/llm_gateway.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/models.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/ollama.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/ollama_messages_adapter.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/ollama_messages_adapter_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/openai.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/openai_message_adapter_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/openai_messages_adapter.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/gateways/tokenizer_gateway.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/llm_broker.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/llm_broker_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/message_composers_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/registry/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/registry/llm_registry.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/registry/models.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/registry/populate_registry_from_ollama.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/ask_user_tool.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/current_datetime.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/date_resolver_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/file_manager.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/llm_tool.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/tool_wrapper.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/tool_wrapper_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/tools/web_search.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/router.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/router_spec.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/utils/__init__.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/utils/formatting.py +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic.egg-info/SOURCES.txt +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic.egg-info/dependency_links.txt +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic.egg-info/requires.txt +0 -0
- {mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mojentic
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
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/mojility/mojentic
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import os
|
|
3
|
+
|
|
4
|
+
logging.basicConfig(level=logging.WARN)
|
|
5
|
+
|
|
2
6
|
from pathlib import Path
|
|
3
7
|
|
|
4
8
|
from pydantic import BaseModel, Field
|
|
@@ -39,19 +43,34 @@ def check_tool_use(llm):
|
|
|
39
43
|
tools=[ResolveDateTool()])
|
|
40
44
|
print(result)
|
|
41
45
|
|
|
42
|
-
def check_image_analysis(llm):
|
|
46
|
+
def check_image_analysis(llm, image_path: Path = None):
|
|
47
|
+
if image_path is None:
|
|
48
|
+
image_path = Path.cwd() / 'images' / 'flash_rom.jpg'
|
|
43
49
|
result = llm.generate(messages=[
|
|
44
50
|
(LLMMessage(content='What is in this image?',
|
|
45
|
-
image_paths=[str(
|
|
51
|
+
image_paths=[str(image_path)]))
|
|
46
52
|
])
|
|
47
53
|
print(result)
|
|
48
54
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
models = ["gpt-4o", "gpt-4.1", "o3", "gpt-4.5-preview", "o4-mini"]
|
|
56
|
+
images = [
|
|
57
|
+
Path.cwd() / 'images' / 'flash_rom.jpg',
|
|
58
|
+
Path.cwd() / 'images' / 'screen_cap.png',
|
|
59
|
+
Path.cwd() / 'images' / 'xbox-one.jpg',
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
for image in images:
|
|
63
|
+
for model in models:
|
|
64
|
+
print(f"Checking {model} with {str(image)}")
|
|
65
|
+
check_image_analysis(openai_llm(model=model), image)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# check_simple_textgen(openai_llm(model="o4-mini"))
|
|
69
|
+
# check_structured_output(openai_llm(model="o4-mini"))
|
|
70
|
+
# check_tool_use(openai_llm(model="o4-mini"))
|
|
71
|
+
# check_image_analysis(openai_llm(model="gpt-4o"))
|
|
53
72
|
|
|
54
|
-
check_simple_textgen(ollama_llm())
|
|
55
|
-
check_structured_output(ollama_llm())
|
|
56
|
-
check_tool_use(ollama_llm())
|
|
57
|
-
check_image_analysis(ollama_llm(model="gemma3:27b"))
|
|
73
|
+
# check_simple_textgen(ollama_llm())
|
|
74
|
+
# check_structured_output(ollama_llm())
|
|
75
|
+
# check_tool_use(ollama_llm())
|
|
76
|
+
# check_image_analysis(ollama_llm(model="gemma3:27b"))
|
|
@@ -253,7 +253,7 @@ class MessageBuilder():
|
|
|
253
253
|
|
|
254
254
|
return self
|
|
255
255
|
|
|
256
|
-
def load_content(self, file_path: Union[str, Path], template_values: Optional[Dict[str, str]] = None) -> "MessageBuilder":
|
|
256
|
+
def load_content(self, file_path: Union[str, Path], template_values: Optional[Dict[str, Union[str, Path]]] = None) -> "MessageBuilder":
|
|
257
257
|
"""
|
|
258
258
|
Load content from a file into the content field of the MessageBuilder.
|
|
259
259
|
|
|
@@ -265,11 +265,14 @@ class MessageBuilder():
|
|
|
265
265
|
----------
|
|
266
266
|
file_path : Union[str, Path]
|
|
267
267
|
Path to the file to load content from. Can be a string or Path object.
|
|
268
|
-
template_values : Optional[Dict[str, str]], optional
|
|
268
|
+
template_values : Optional[Dict[str, Union[str, Path]]], optional
|
|
269
269
|
Dictionary of values used to replace placeholders in the content.
|
|
270
270
|
For example, if the content contains "{greeting}" and template_values is
|
|
271
271
|
{"greeting": "Hello, World!"}, then "{greeting}" will be replaced with
|
|
272
|
-
"Hello, World!".
|
|
272
|
+
"Hello, World!".
|
|
273
|
+
If a value is a Path object, it will be treated as a file reference and the
|
|
274
|
+
content of that file will be used to replace the placeholder.
|
|
275
|
+
Default is None.
|
|
273
276
|
|
|
274
277
|
Returns
|
|
275
278
|
-------
|
|
@@ -290,7 +293,15 @@ class MessageBuilder():
|
|
|
290
293
|
# Replace placeholders with template values if provided
|
|
291
294
|
if template_values:
|
|
292
295
|
for key, value in template_values.items():
|
|
293
|
-
|
|
296
|
+
if isinstance(value, Path):
|
|
297
|
+
# If value is a Path, read the content of the file
|
|
298
|
+
if not self.file_gateway.exists(value):
|
|
299
|
+
raise FileNotFoundError(f"Template file not found: {value}")
|
|
300
|
+
file_content = self.file_gateway.read(value).strip()
|
|
301
|
+
self.content = self.content.replace(f"{{{key}}}", file_content)
|
|
302
|
+
else:
|
|
303
|
+
# If value is a string, use it directly
|
|
304
|
+
self.content = self.content.replace(f"{{{key}}}", value)
|
|
294
305
|
|
|
295
306
|
return self
|
|
296
307
|
|
|
@@ -307,11 +318,14 @@ class MessageBuilder():
|
|
|
307
318
|
LLMMessage
|
|
308
319
|
An LLMMessage object containing the message content and image paths.
|
|
309
320
|
"""
|
|
321
|
+
parts = []
|
|
310
322
|
if self.file_paths:
|
|
311
323
|
file_contents = [self._file_content_partial(p) for p in self.file_paths]
|
|
312
|
-
|
|
324
|
+
parts.append("\n\n".join(file_contents))
|
|
325
|
+
if self.content is not None:
|
|
326
|
+
parts.append(self.content)
|
|
313
327
|
return LLMMessage(
|
|
314
328
|
role=self.role,
|
|
315
|
-
content=
|
|
329
|
+
content="\n\n".join(parts),
|
|
316
330
|
image_paths=[str(p) for p in self.image_paths]
|
|
317
331
|
)
|
|
@@ -21,7 +21,8 @@ class ResolveDateTool(LLMTool):
|
|
|
21
21
|
|
|
22
22
|
return {
|
|
23
23
|
"relative_date": relative_date_found,
|
|
24
|
-
"resolved_date": resolved_date.strftime('%Y-%m-%d')
|
|
24
|
+
"resolved_date": resolved_date.strftime('%Y-%m-%d'),
|
|
25
|
+
"summary": f"The date on '{relative_date_found}' is {resolved_date.strftime('%Y-%m-%d')}"
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
@property
|
|
@@ -30,7 +31,7 @@ class ResolveDateTool(LLMTool):
|
|
|
30
31
|
"type": "function",
|
|
31
32
|
"function": {
|
|
32
33
|
"name": "resolve_date",
|
|
33
|
-
"description": "Take text that specifies a relative date, and output an absolute date. If no reference date is
|
|
34
|
+
"description": "Take text that specifies a relative date, and output an absolute date. If no reference date is available, the current date is used.",
|
|
34
35
|
"parameters": {
|
|
35
36
|
"type": "object",
|
|
36
37
|
"properties": {
|
|
@@ -41,7 +42,7 @@ class ResolveDateTool(LLMTool):
|
|
|
41
42
|
"reference_date_in_iso8601": {
|
|
42
43
|
"type": "string",
|
|
43
44
|
"description": "The date from which the resolved date should be calculated, in YYYY-MM-DD"
|
|
44
|
-
" format.
|
|
45
|
+
" format. Do not provide if you weren't provided one, I will assume the current date."
|
|
45
46
|
}
|
|
46
47
|
},
|
|
47
48
|
"additionalProperties": False,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mojentic
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
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/mojility/mojentic
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mojentic-0.5.1 → mojentic-0.5.3}/src/mojentic/llm/registry/populate_registry_from_ollama.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|