mbxai 0.5.18__tar.gz → 0.5.19__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.
- {mbxai-0.5.18 → mbxai-0.5.19}/PKG-INFO +1 -1
- {mbxai-0.5.18 → mbxai-0.5.19}/pyproject.toml +1 -1
- {mbxai-0.5.18 → mbxai-0.5.19}/setup.py +1 -1
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/__init__.py +1 -1
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/mcp/server.py +1 -1
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/tools/client.py +14 -19
- {mbxai-0.5.18 → mbxai-0.5.19}/uv.lock +7 -7
- {mbxai-0.5.18 → mbxai-0.5.19}/.vscode/PythonImportHelper-v2-Completion.json +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/LICENSE +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/README.md +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/core.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/mcp/__init__.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/mcp/client.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/mcp/example.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/openrouter/__init__.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/openrouter/client.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/openrouter/config.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/openrouter/models.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/tools/__init__.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/tools/example.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/src/mbxai/tools/types.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/tests/test_core.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/tests/test_mcp.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/tests/test_openrouter.py +0 -0
- {mbxai-0.5.18 → mbxai-0.5.19}/tests/test_tools.py +0 -0
@@ -147,17 +147,7 @@ class ToolClient:
|
|
147
147
|
stream: bool = False,
|
148
148
|
**kwargs: Any,
|
149
149
|
) -> Any:
|
150
|
-
"""Chat with the model, handling tool calls.
|
151
|
-
|
152
|
-
Args:
|
153
|
-
messages: The conversation messages
|
154
|
-
model: Optional model override
|
155
|
-
stream: Whether to stream the response
|
156
|
-
**kwargs: Additional parameters for the chat completion
|
157
|
-
|
158
|
-
Returns:
|
159
|
-
The final response from the model
|
160
|
-
"""
|
150
|
+
"""Chat with the model, handling tool calls."""
|
161
151
|
tools = [tool.to_openai_function() for tool in self._tools.values()]
|
162
152
|
|
163
153
|
if tools:
|
@@ -166,9 +156,6 @@ class ToolClient:
|
|
166
156
|
kwargs["tool_choice"] = "auto"
|
167
157
|
|
168
158
|
while True:
|
169
|
-
# Log messages before sending to OpenRouter, but don't validate responses yet
|
170
|
-
self._log_messages(messages, validate_responses=False)
|
171
|
-
|
172
159
|
# Get the model's response
|
173
160
|
response = self._client.chat_completion(
|
174
161
|
messages=messages,
|
@@ -205,7 +192,8 @@ class ToolClient:
|
|
205
192
|
if not message.tool_calls:
|
206
193
|
return response
|
207
194
|
|
208
|
-
#
|
195
|
+
# Process all tool calls first
|
196
|
+
tool_responses = []
|
209
197
|
for tool_call in message.tool_calls:
|
210
198
|
tool = self._tools.get(tool_call.function.name)
|
211
199
|
if not tool:
|
@@ -231,18 +219,25 @@ class ToolClient:
|
|
231
219
|
if not isinstance(result, str):
|
232
220
|
result = json.dumps(result)
|
233
221
|
|
234
|
-
# Create
|
222
|
+
# Create the tool response
|
235
223
|
tool_response = {
|
236
224
|
"role": "tool",
|
237
225
|
"tool_call_id": tool_call.id,
|
238
226
|
"content": result,
|
239
227
|
}
|
240
|
-
|
241
|
-
logger.info(f"
|
228
|
+
tool_responses.append(tool_response)
|
229
|
+
logger.info(f"Created tool response for call ID {tool_call.id}")
|
230
|
+
|
231
|
+
# Add all tool responses to the messages
|
232
|
+
messages.extend(tool_responses)
|
233
|
+
logger.info(f"Added {len(tool_responses)} tool responses to messages")
|
242
234
|
|
243
|
-
#
|
235
|
+
# Validate the message sequence
|
244
236
|
self._validate_message_sequence(messages, validate_responses=True)
|
245
237
|
|
238
|
+
# Log the messages we're about to send
|
239
|
+
self._log_messages(messages, validate_responses=False)
|
240
|
+
|
246
241
|
# Get a new response from the model with all tool results
|
247
242
|
response = self._client.chat_completion(
|
248
243
|
messages=messages,
|
@@ -292,11 +292,11 @@ wheels = [
|
|
292
292
|
|
293
293
|
[[package]]
|
294
294
|
name = "httpx-sse"
|
295
|
-
version = "0.5.
|
295
|
+
version = "0.5.19"
|
296
296
|
source = { registry = "https://pypi.org/simple" }
|
297
|
-
sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.5.
|
297
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.5.19.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721", size = 12624 }
|
298
298
|
wheels = [
|
299
|
-
{ url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.5.
|
299
|
+
{ url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.5.19-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 },
|
300
300
|
]
|
301
301
|
|
302
302
|
[[package]]
|
@@ -446,7 +446,7 @@ wheels = [
|
|
446
446
|
|
447
447
|
[[package]]
|
448
448
|
name = "mbxai"
|
449
|
-
version = "0.5.
|
449
|
+
version = "0.5.19"
|
450
450
|
source = { editable = "." }
|
451
451
|
dependencies = [
|
452
452
|
{ name = "fastapi" },
|
@@ -980,14 +980,14 @@ wheels = [
|
|
980
980
|
|
981
981
|
[[package]]
|
982
982
|
name = "typing-inspection"
|
983
|
-
version = "0.5.
|
983
|
+
version = "0.5.19"
|
984
984
|
source = { registry = "https://pypi.org/simple" }
|
985
985
|
dependencies = [
|
986
986
|
{ name = "typing-extensions" },
|
987
987
|
]
|
988
|
-
sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.5.
|
988
|
+
sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.5.19.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 }
|
989
989
|
wheels = [
|
990
|
-
{ url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.5.
|
990
|
+
{ url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.5.19-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 },
|
991
991
|
]
|
992
992
|
|
993
993
|
[[package]]
|
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
|