mbxai 0.5.22__tar.gz → 0.5.23__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.
Files changed (25) hide show
  1. {mbxai-0.5.22 → mbxai-0.5.23}/PKG-INFO +1 -1
  2. {mbxai-0.5.22 → mbxai-0.5.23}/pyproject.toml +1 -1
  3. {mbxai-0.5.22 → mbxai-0.5.23}/setup.py +1 -1
  4. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/__init__.py +1 -1
  5. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/mcp/server.py +1 -1
  6. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/openrouter/client.py +19 -52
  7. {mbxai-0.5.22 → mbxai-0.5.23}/uv.lock +7 -7
  8. {mbxai-0.5.22 → mbxai-0.5.23}/.vscode/PythonImportHelper-v2-Completion.json +0 -0
  9. {mbxai-0.5.22 → mbxai-0.5.23}/LICENSE +0 -0
  10. {mbxai-0.5.22 → mbxai-0.5.23}/README.md +0 -0
  11. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/core.py +0 -0
  12. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/mcp/__init__.py +0 -0
  13. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/mcp/client.py +0 -0
  14. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/mcp/example.py +0 -0
  15. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/openrouter/__init__.py +0 -0
  16. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/openrouter/config.py +0 -0
  17. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/openrouter/models.py +0 -0
  18. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/tools/__init__.py +0 -0
  19. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/tools/client.py +0 -0
  20. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/tools/example.py +0 -0
  21. {mbxai-0.5.22 → mbxai-0.5.23}/src/mbxai/tools/types.py +0 -0
  22. {mbxai-0.5.22 → mbxai-0.5.23}/tests/test_core.py +0 -0
  23. {mbxai-0.5.22 → mbxai-0.5.23}/tests/test_mcp.py +0 -0
  24. {mbxai-0.5.22 → mbxai-0.5.23}/tests/test_openrouter.py +0 -0
  25. {mbxai-0.5.22 → mbxai-0.5.23}/tests/test_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mbxai
3
- Version: 0.5.22
3
+ Version: 0.5.23
4
4
  Summary: MBX AI SDK
5
5
  Project-URL: Homepage, https://www.mibexx.de
6
6
  Project-URL: Documentation, https://www.mibexx.de
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mbxai"
7
- version = "0.5.22"
7
+ version = "0.5.23"
8
8
  authors = [
9
9
  { name = "MBX AI" }
10
10
  ]
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="mbxai",
5
- version="0.5.22",
5
+ version="0.5.23",
6
6
  author="MBX AI",
7
7
  description="MBX AI SDK",
8
8
  long_description=open("README.md").read(),
@@ -2,4 +2,4 @@
2
2
  MBX AI package.
3
3
  """
4
4
 
5
- __version__ = "0.5.22"
5
+ __version__ = "0.5.23"
@@ -31,7 +31,7 @@ class MCPServer:
31
31
  self.app = FastAPI(
32
32
  title=self.name,
33
33
  description=self.description,
34
- version="0.5.22",
34
+ version="0.5.23",
35
35
  )
36
36
 
37
37
  # Initialize MCP server
@@ -115,74 +115,41 @@ class OpenRouterClient:
115
115
  self,
116
116
  messages: list[dict[str, Any]],
117
117
  *,
118
- model: Optional[Union[str, OpenRouterModel]] = None,
118
+ model: str | None = None,
119
119
  stream: bool = False,
120
120
  **kwargs: Any,
121
121
  ) -> Any:
122
- """Create a chat completion.
123
-
124
- Args:
125
- messages: list of messages
126
- model: Optional model override
127
- stream: Whether to stream the response
128
- **kwargs: Additional parameters
129
-
130
- Returns:
131
- Completion response
132
-
133
- Raises:
134
- OpenRouterConnectionError: For connection issues
135
- OpenRouterAPIError: For API errors
136
- OpenRouterError: For other errors
137
- """
122
+ """Get a chat completion from OpenRouter."""
138
123
  try:
139
- # Remove any incompatible parameters
140
- kwargs.pop("parse", None) # Remove parse parameter if present
141
-
142
- logger.debug(f"Making chat completion request with model {model or self.model}")
143
- logger.debug(f"Request messages: {messages}")
144
- logger.debug(f"Request kwargs: {kwargs}")
124
+ # Log the request details
125
+ logger.info(f"Sending chat completion request to OpenRouter with model: {model}")
126
+ logger.info(f"Message count: {len(messages)}")
145
127
 
146
128
  response = self._client.chat.completions.create(
147
- model=str(model or self.model),
148
129
  messages=messages,
130
+ model=model or self.model,
149
131
  stream=stream,
150
132
  **kwargs,
151
133
  )
152
134
 
153
- # Log response structure for debugging
154
- logger.debug(f"Response type: {type(response)}")
155
- logger.debug(f"Response attributes: {dir(response)}")
156
- logger.debug(f"Raw response: {response}")
157
-
158
- # Handle streaming response differently
159
- if stream:
160
- return response
161
-
162
- # Validate response structure
163
- if response is None:
164
- logger.error("Received None response from API")
165
- raise OpenRouterError("Received None response from API")
166
-
167
- if not hasattr(response, 'choices'):
168
- logger.error(f"Invalid response: missing choices attribute. Response: {response}")
169
- raise OpenRouterError("Invalid response: missing choices attribute")
170
-
171
- if not response.choices:
172
- logger.error(f"Invalid response: empty choices list. Response: {response}")
173
- raise OpenRouterError("Invalid response: empty choices list")
174
-
175
- if not hasattr(response.choices[0], 'message'):
176
- logger.error(f"Invalid response: missing message in first choice. Response: {response}")
177
- raise OpenRouterError("Invalid response: missing message in first choice")
135
+ # Log response details
136
+ logger.info("Received response from OpenRouter")
137
+ if hasattr(response, 'choices') and response.choices:
138
+ logger.info(f"Response has {len(response.choices)} choices")
139
+ if hasattr(response.choices[0], 'message'):
140
+ logger.info(f"First choice has message with content length: {len(response.choices[0].message.content) if response.choices[0].message.content else 0}")
178
141
 
179
- logger.debug(f"Response message: {response.choices[0].message}")
180
142
  return response
181
143
 
182
144
  except Exception as e:
183
145
  logger.error(f"Error in chat completion: {str(e)}")
184
- if isinstance(e, OpenRouterError):
185
- raise
146
+ if hasattr(e, 'response') and e.response is not None:
147
+ logger.error(f"Response status: {e.response.status_code}")
148
+ logger.error(f"Response headers: {e.response.headers}")
149
+ try:
150
+ logger.error(f"Response content: {e.response.text[:1000]}...")
151
+ except:
152
+ logger.error("Could not read response content")
186
153
  self._handle_api_error("chat completion", e)
187
154
 
188
155
  def chat_completion_parse(
@@ -292,11 +292,11 @@ wheels = [
292
292
 
293
293
  [[package]]
294
294
  name = "httpx-sse"
295
- version = "0.5.22"
295
+ version = "0.5.23"
296
296
  source = { registry = "https://pypi.org/simple" }
297
- sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.5.22.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721", size = 12624 }
297
+ sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.5.23.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721", size = 12624 }
298
298
  wheels = [
299
- { url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.5.22-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 },
299
+ { url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.5.23-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.22"
449
+ version = "0.5.23"
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.22"
983
+ version = "0.5.23"
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.22.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 }
988
+ sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.5.23.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 }
989
989
  wheels = [
990
- { url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.5.22-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 },
990
+ { url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.5.23-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