mojentic 0.5.2__tar.gz → 0.5.4__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.2/src/mojentic.egg-info → mojentic-0.5.4}/PKG-INFO +2 -1
- {mojentic-0.5.2 → mojentic-0.5.4}/pyproject.toml +2 -1
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/broker_examples.py +29 -10
- mojentic-0.5.4/src/_examples/oversized_embeddings.py +9 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/iterative_problem_solver.py +5 -2
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/simple_recursive_agent.py +2 -2
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/openai.py +29 -6
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/message_composers.py +5 -2
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/date_resolver.py +4 -3
- {mojentic-0.5.2 → mojentic-0.5.4/src/mojentic.egg-info}/PKG-INFO +2 -1
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic.egg-info/SOURCES.txt +1 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic.egg-info/requires.txt +1 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/LICENSE.md +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/README.md +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/setup.cfg +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/broker_as_tool.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/characterize_ollama.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/characterize_openai.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/chat_session.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/chat_session_with_tool.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/coding_file_tool.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/current_datetime_tool_example.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/design_analysis.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/embeddings.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/ensures_files_exist.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/file_deduplication.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/file_tool.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/image_analysis.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/image_broker.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/image_broker_splat.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/iterative_solver.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/list_models.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/raw.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/agents/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/agents/decisioning_agent.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/agents/thinking_agent.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/formatters.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/models/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/models/base.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react/models/events.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/react.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/recursive_agent.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/routed_send_response.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/simple_llm.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/simple_llm_repl.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/simple_structured.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/simple_tool.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/solver_chat_session.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/streaming.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/_examples/working_memory.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/agent_broker.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/base_agent.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/base_llm_agent.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/base_llm_agent_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/correlation_aggregator_agent.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/agents/output_agent.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/audit/event_store.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/audit/event_store_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/context/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/context/shared_working_memory.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/dispatcher.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/event.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/chat_session.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/chat_session_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/anthropic.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/anthropic_messages_adapter.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/embeddings_gateway.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/file_gateway.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/llm_gateway.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/models.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/ollama.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/ollama_messages_adapter.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/ollama_messages_adapter_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/openai_message_adapter_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/openai_messages_adapter.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/gateways/tokenizer_gateway.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/llm_broker.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/llm_broker_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/message_composers_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/registry/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/registry/llm_registry.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/registry/models.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/registry/populate_registry_from_ollama.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/ask_user_tool.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/current_datetime.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/date_resolver_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/file_manager.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/llm_tool.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/tool_wrapper.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/tool_wrapper_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/llm/tools/web_search.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/router.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/router_spec.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/utils/__init__.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic/utils/formatting.py +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/src/mojentic.egg-info/dependency_links.txt +0 -0
- {mojentic-0.5.2 → mojentic-0.5.4}/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.4
|
|
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
|
|
@@ -13,6 +13,7 @@ Description-Content-Type: text/markdown
|
|
|
13
13
|
License-File: LICENSE.md
|
|
14
14
|
Requires-Dist: pydantic
|
|
15
15
|
Requires-Dist: structlog
|
|
16
|
+
Requires-Dist: numpy
|
|
16
17
|
Requires-Dist: ollama
|
|
17
18
|
Requires-Dist: openai
|
|
18
19
|
Requires-Dist: anthropic
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mojentic"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.4"
|
|
4
4
|
authors = [
|
|
5
5
|
{ name = "Stacey Vetzal", email = "stacey@vetzal.com" },
|
|
6
6
|
]
|
|
@@ -16,6 +16,7 @@ classifiers = [
|
|
|
16
16
|
dependencies = [
|
|
17
17
|
"pydantic",
|
|
18
18
|
"structlog",
|
|
19
|
+
"numpy",
|
|
19
20
|
"ollama",
|
|
20
21
|
"openai",
|
|
21
22
|
"anthropic",
|
|
@@ -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"))
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from mojentic.llm.gateways import OllamaGateway, OpenAIGateway
|
|
4
|
+
|
|
5
|
+
ollama = OllamaGateway()
|
|
6
|
+
print(len(ollama.calculate_embeddings("Hello, world! " * 5000)))
|
|
7
|
+
|
|
8
|
+
openai = OpenAIGateway(os.environ["OPENAI_API_KEY"])
|
|
9
|
+
print(len(openai.calculate_embeddings("Hello, world! " * 5000)))
|
|
@@ -26,7 +26,8 @@ class IterativeProblemSolver:
|
|
|
26
26
|
max_iterations: int
|
|
27
27
|
chat: ChatSession
|
|
28
28
|
|
|
29
|
-
def __init__(self, llm: LLMBroker, available_tools: Optional[List[LLMTool]] = None, max_iterations: int = 3
|
|
29
|
+
def __init__(self, llm: LLMBroker, available_tools: Optional[List[LLMTool]] = None, max_iterations: int = 3,
|
|
30
|
+
system_prompt: Optional[str] = None):
|
|
30
31
|
"""Initialize the IterativeProblemSolver.
|
|
31
32
|
|
|
32
33
|
Parameters
|
|
@@ -42,7 +43,9 @@ class IterativeProblemSolver:
|
|
|
42
43
|
self.available_tools = available_tools or []
|
|
43
44
|
self.chat = ChatSession(
|
|
44
45
|
llm=llm,
|
|
45
|
-
system_prompt="You are a
|
|
46
|
+
system_prompt=system_prompt or "You are a problem-solving assistant that can solve complex problems step by step. "
|
|
47
|
+
"You analyze problems, break them down into smaller parts, and solve them systematically. "
|
|
48
|
+
"If you cannot solve a problem completely in one step, you make progress and identify what to do next.",
|
|
46
49
|
tools=self.available_tools,
|
|
47
50
|
)
|
|
48
51
|
|
|
@@ -140,7 +140,7 @@ class SimpleRecursiveAgent:
|
|
|
140
140
|
emitter: EventEmitter
|
|
141
141
|
chat: ChatSession
|
|
142
142
|
|
|
143
|
-
def __init__(self, llm: LLMBroker, available_tools: Optional[List[LLMTool]] = None, max_iterations: int = 5):
|
|
143
|
+
def __init__(self, llm: LLMBroker, available_tools: Optional[List[LLMTool]] = None, max_iterations: int = 5, system_prompt: Optional[str] = None):
|
|
144
144
|
"""
|
|
145
145
|
Initialize the SimpleRecursiveAgent.
|
|
146
146
|
|
|
@@ -161,7 +161,7 @@ class SimpleRecursiveAgent:
|
|
|
161
161
|
# Initialize the chat session
|
|
162
162
|
self.chat = ChatSession(
|
|
163
163
|
llm=llm,
|
|
164
|
-
system_prompt="You are a problem-solving assistant that can solve complex problems step by step. "
|
|
164
|
+
system_prompt=system_prompt or "You are a problem-solving assistant that can solve complex problems step by step. "
|
|
165
165
|
"You analyze problems, break them down into smaller parts, and solve them systematically. "
|
|
166
166
|
"If you cannot solve a problem completely in one step, you make progress and identify what to do next.",
|
|
167
167
|
tools=self.available_tools
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import json
|
|
2
|
-
from
|
|
2
|
+
from itertools import islice
|
|
3
|
+
from typing import Type, List, Iterable
|
|
3
4
|
|
|
5
|
+
import numpy as np
|
|
4
6
|
import structlog
|
|
5
7
|
from openai import OpenAI
|
|
6
8
|
|
|
7
9
|
from mojentic.llm.gateways.llm_gateway import LLMGateway
|
|
8
10
|
from mojentic.llm.gateways.models import LLMToolCall, LLMGatewayResponse
|
|
9
11
|
from mojentic.llm.gateways.openai_messages_adapter import adapt_messages_to_openai
|
|
12
|
+
from mojentic.llm.gateways.tokenizer_gateway import TokenizerGateway
|
|
10
13
|
|
|
11
14
|
logger = structlog.get_logger()
|
|
12
15
|
|
|
@@ -121,8 +124,28 @@ class OpenAIGateway(LLMGateway):
|
|
|
121
124
|
The embeddings for the text.
|
|
122
125
|
"""
|
|
123
126
|
logger.debug("calculate_embeddings", text=text, model=model)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
)
|
|
128
|
-
|
|
127
|
+
|
|
128
|
+
embeddings = [self.client.embeddings.create(model=model, input=chunk).data[0].embedding
|
|
129
|
+
for chunk in self._chunked_tokens(text, 8191)]
|
|
130
|
+
lengths = [len(embedding) for embedding in embeddings]
|
|
131
|
+
|
|
132
|
+
average = np.average(embeddings, axis=0, weights=lengths)
|
|
133
|
+
average = average / np.linalg.norm(average)
|
|
134
|
+
average = average.tolist()
|
|
135
|
+
|
|
136
|
+
return average
|
|
137
|
+
|
|
138
|
+
def _batched(self, iterable: Iterable, n: int):
|
|
139
|
+
"""Batch data into tuples of length n. The last batch may be shorter."""
|
|
140
|
+
# batched('ABCDEFG', 3) --> ABC DEF G
|
|
141
|
+
if n < 1:
|
|
142
|
+
raise ValueError('n must be at least one')
|
|
143
|
+
it = iter(iterable)
|
|
144
|
+
while batch := tuple(islice(it, n)):
|
|
145
|
+
yield batch
|
|
146
|
+
|
|
147
|
+
def _chunked_tokens(self, text, chunk_length):
|
|
148
|
+
tokenizer = TokenizerGateway()
|
|
149
|
+
tokens = tokenizer.encode(text)
|
|
150
|
+
chunks_iterator = self._batched(tokens, chunk_length)
|
|
151
|
+
yield from chunks_iterator
|
|
@@ -318,11 +318,14 @@ class MessageBuilder():
|
|
|
318
318
|
LLMMessage
|
|
319
319
|
An LLMMessage object containing the message content and image paths.
|
|
320
320
|
"""
|
|
321
|
+
parts = []
|
|
321
322
|
if self.file_paths:
|
|
322
323
|
file_contents = [self._file_content_partial(p) for p in self.file_paths]
|
|
323
|
-
|
|
324
|
+
parts.append("\n\n".join(file_contents))
|
|
325
|
+
if self.content is not None:
|
|
326
|
+
parts.append(self.content)
|
|
324
327
|
return LLMMessage(
|
|
325
328
|
role=self.role,
|
|
326
|
-
content=
|
|
329
|
+
content="\n\n".join(parts),
|
|
327
330
|
image_paths=[str(p) for p in self.image_paths]
|
|
328
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.4
|
|
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
|
|
@@ -13,6 +13,7 @@ Description-Content-Type: text/markdown
|
|
|
13
13
|
License-File: LICENSE.md
|
|
14
14
|
Requires-Dist: pydantic
|
|
15
15
|
Requires-Dist: structlog
|
|
16
|
+
Requires-Dist: numpy
|
|
16
17
|
Requires-Dist: ollama
|
|
17
18
|
Requires-Dist: openai
|
|
18
19
|
Requires-Dist: anthropic
|
|
@@ -21,6 +21,7 @@ src/_examples/image_broker.py
|
|
|
21
21
|
src/_examples/image_broker_splat.py
|
|
22
22
|
src/_examples/iterative_solver.py
|
|
23
23
|
src/_examples/list_models.py
|
|
24
|
+
src/_examples/oversized_embeddings.py
|
|
24
25
|
src/_examples/raw.py
|
|
25
26
|
src/_examples/react.py
|
|
26
27
|
src/_examples/recursive_agent.py
|
|
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.2 → mojentic-0.5.4}/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
|