mbxai 0.6.3__py3-none-any.whl → 0.6.4__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.
mbxai/__init__.py CHANGED
@@ -2,4 +2,4 @@
2
2
  MBX AI package.
3
3
  """
4
4
 
5
- __version__ = "0.6.3"
5
+ __version__ = "0.6.4"
mbxai/mcp/server.py CHANGED
@@ -31,7 +31,7 @@ class MCPServer:
31
31
  self.app = FastAPI(
32
32
  title=self.name,
33
33
  description=self.description,
34
- version="0.6.3",
34
+ version="0.6.4",
35
35
  )
36
36
 
37
37
  # Initialize MCP server
mbxai/tools/client.py CHANGED
@@ -267,78 +267,28 @@ class ToolClient:
267
267
  Returns:
268
268
  The parsed response from the model
269
269
  """
270
- tools = [tool.to_openai_function() for tool in self._tools.values()]
271
-
272
- if tools:
273
- logger.info(f"Available tools: {[tool['function']['name'] for tool in tools]}")
274
- kwargs["tools"] = tools
275
- kwargs["tool_choice"] = "auto"
276
-
277
- while True:
278
- # Log messages before sending to OpenRouter
279
- self._log_messages(messages)
280
-
281
- # Get the model's response
282
- response = await self._openrouter_client.chat_completion_parse(
270
+ # First use the chat function to handle any tool calls
271
+ response = await self.chat(
272
+ messages=messages,
273
+ model=model,
274
+ stream=stream,
275
+ **kwargs,
276
+ )
277
+
278
+ if stream:
279
+ return response
280
+
281
+ # Now that we have the final response, parse it into the desired format
282
+ try:
283
+ final_response = await self._openrouter_client.chat_completion_parse(
283
284
  messages=messages,
284
285
  response_format=response_format,
285
286
  model=model,
286
287
  stream=stream,
288
+ tools=None, # No tools for the final parse
287
289
  **kwargs,
288
290
  )
289
-
290
- if stream:
291
- return response
292
-
293
- if not response or not response.choices:
294
- raise ValueError("No response received from OpenRouter")
295
-
296
- choice = response.choices[0]
297
- if not choice:
298
- raise ValueError("Empty choice in response")
299
-
300
- message = choice.message
301
- if not message:
302
- raise ValueError("Choice missing message")
303
-
304
- # Check for tool calls first
305
- if message.tool_calls:
306
- # Add the assistant's message with tool calls
307
- assistant_message = {
308
- "role": "assistant",
309
- "content": None,
310
- "tool_calls": [
311
- {
312
- "id": tool_call.id,
313
- "type": "function",
314
- "function": {
315
- "name": tool_call.function.name,
316
- "arguments": tool_call.function.arguments,
317
- },
318
- }
319
- for tool_call in message.tool_calls
320
- ]
321
- }
322
- messages.append(assistant_message)
323
- logger.info(f"Message count: {len(messages)}, Added assistant message with tool calls: {[tc.function.name for tc in message.tool_calls]}")
324
-
325
- # Process all tool calls
326
- await self._process_tool_calls(message, messages)
327
-
328
- # Continue the loop to get the next response
329
- continue
330
-
331
- # If we have a parsed response, return it
332
- if hasattr(message, "parsed") and message.parsed:
333
- return response
334
-
335
- # If we have content but no tool calls, try to parse it
336
- if message.content:
337
- try:
338
- return response
339
- except Exception as e:
340
- logger.error(f"Failed to parse response: {e}")
341
- raise ValueError(f"Failed to parse response as {response_format.__name__}: {str(e)}")
342
-
343
- # If we have neither parsed content nor tool calls, something is wrong
344
- raise ValueError("Response has neither parsed content nor tool calls")
291
+ return final_response
292
+ except Exception as e:
293
+ logger.error(f"Failed to parse response: {e}")
294
+ raise ValueError(f"Failed to parse response as {response_format.__name__}: {str(e)}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mbxai
3
- Version: 0.6.3
3
+ Version: 0.6.4
4
4
  Summary: MBX AI SDK
5
5
  Project-URL: Homepage, https://www.mibexx.de
6
6
  Project-URL: Documentation, https://www.mibexx.de
@@ -1,18 +1,18 @@
1
- mbxai/__init__.py,sha256=BMqoY5xamu9yHHw49edZO3PXPMjy_-oXovlRNf-sU78,47
1
+ mbxai/__init__.py,sha256=VUrUuLr8MZYb-vl76YFDkrPwXUdeqUgt9qpYFCWD4pU,47
2
2
  mbxai/core.py,sha256=WMvmU9TTa7M_m-qWsUew4xH8Ul6xseCZ2iBCXJTW-Bs,196
3
3
  mbxai/mcp/__init__.py,sha256=_ek9iYdYqW5saKetj4qDci11jxesQDiHPJRpHMKkxgU,175
4
4
  mbxai/mcp/client.py,sha256=B8ZpH-uecmTCgoDw65LwwVxsFWVoX-08t5ff0hOEPXk,6011
5
5
  mbxai/mcp/example.py,sha256=oaol7AvvZnX86JWNz64KvPjab5gg1VjVN3G8eFSzuaE,2350
6
- mbxai/mcp/server.py,sha256=Ecapt1_yeR4ROmCSF8C0Jn7DHjLM506YLW2vv_MrbbI,3462
6
+ mbxai/mcp/server.py,sha256=QFx8o8DqnH8MYMNu1mGoj-QWTRfwLXOQ9DaNNEZunv8,3462
7
7
  mbxai/openrouter/__init__.py,sha256=Ito9Qp_B6q-RLGAQcYyTJVWwR2YAZvNqE-HIYXxhtD8,298
8
8
  mbxai/openrouter/client.py,sha256=RO5tbF42vkcjxjvC-QFB8DGA0gQLljH3KPBn3HgZV8I,13662
9
9
  mbxai/openrouter/config.py,sha256=Ia93s-auim9Sq71eunVDbn9ET5xX2zusXpV4JBdHAzs,3251
10
10
  mbxai/openrouter/models.py,sha256=b3IjjtZAjeGOf2rLsdnCD1HacjTnS8jmv_ZXorc-KJQ,2604
11
11
  mbxai/tools/__init__.py,sha256=QUFaXhDm-UKcuAtT1rbKzhBkvyRBVokcQIOf9cxIuwc,160
12
- mbxai/tools/client.py,sha256=prubkDWakvM_jhbI0dlEO2NRDxPN7kBdglQPoJecqMI,13563
12
+ mbxai/tools/client.py,sha256=lRrVoaGwcnKUkwONVYXNGG9ao4vXgX-fsniPjlXWUZo,11445
13
13
  mbxai/tools/example.py,sha256=1HgKK39zzUuwFbnp3f0ThyWVfA_8P28PZcTwaUw5K78,2232
14
14
  mbxai/tools/types.py,sha256=fo5t9UbsHGynhA88vD_ecgDqL8iLvt2E1h1ym43Rrgk,745
15
- mbxai-0.6.3.dist-info/METADATA,sha256=OSzpwF2znzDZUtsyN0TN1_zZYe44i83MUNZ9B1Mg-I8,4107
16
- mbxai-0.6.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
- mbxai-0.6.3.dist-info/licenses/LICENSE,sha256=hEyhc4FxwYo3NQ40yNgZ7STqwVk-1_XcTXOnAPbGJAw,1069
18
- mbxai-0.6.3.dist-info/RECORD,,
15
+ mbxai-0.6.4.dist-info/METADATA,sha256=dz-ZLvT6BoU95BV9TcN483JJO91n9SRJpn6XVdEp2w8,4107
16
+ mbxai-0.6.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
+ mbxai-0.6.4.dist-info/licenses/LICENSE,sha256=hEyhc4FxwYo3NQ40yNgZ7STqwVk-1_XcTXOnAPbGJAw,1069
18
+ mbxai-0.6.4.dist-info/RECORD,,
File without changes