wizelit-sdk 0.1.28__py3-none-any.whl → 0.1.30__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.
@@ -3,7 +3,7 @@ import asyncio
3
3
  import inspect
4
4
  import logging
5
5
  import os
6
- from typing import Callable, Any, Optional, Literal, Dict, TYPE_CHECKING, Union
6
+ from typing import Callable, Any, Optional, Literal, Dict, TYPE_CHECKING, Union, cast
7
7
  from contextvars import ContextVar
8
8
  from fastmcp import FastMCP, Context
9
9
  from fastmcp.dependencies import CurrentContext
@@ -14,6 +14,9 @@ from wizelit_sdk.agent_wrapper.signature_validation import (
14
14
  ensure_type_hints,
15
15
  )
16
16
 
17
+ # Local Transport literal to avoid import issues when fastmcp.types is unavailable
18
+ Transport = Literal["stdio", "http", "sse", "streamable-http"]
19
+
17
20
  if TYPE_CHECKING:
18
21
  from wizelit_sdk.database import DatabaseManager
19
22
 
@@ -73,7 +76,7 @@ class WizelitAgent:
73
76
  self._tools = {}
74
77
  self._jobs: Dict[str, Job] = {} # Store jobs by job_id
75
78
  self._host = host
76
- self._transport = transport
79
+ self._transport: Transport = cast(Transport, transport)
77
80
  self._port = port
78
81
  self._db_manager = db_manager
79
82
  self._log_streamer = None
@@ -257,9 +260,9 @@ class WizelitAgent:
257
260
  )
258
261
 
259
262
  # Set the signature with ctx as last parameter with CurrentContext() default
260
- tool_wrapper.__signature__ = new_sig
261
- tool_wrapper.__name__ = tool_name
262
- tool_wrapper.__doc__ = tool_description
263
+ cast(Any, tool_wrapper).__signature__ = new_sig
264
+ cast(Any, tool_wrapper).__name__ = tool_name
265
+ cast(Any, tool_wrapper).__doc__ = tool_description
263
266
 
264
267
  # Copy annotations and add Context
265
268
  # Note: We don't add job annotation here since we use Any and exclude it from schema
@@ -271,7 +274,7 @@ class WizelitAgent:
271
274
  new_annotations["job"] = (
272
275
  Any # Use Any instead of Job to avoid Pydantic schema issues
273
276
  )
274
- tool_wrapper.__annotations__ = new_annotations
277
+ cast(Any, tool_wrapper).__annotations__ = new_annotations
275
278
 
276
279
  # Register with fast-mcp
277
280
  # Exclude ctx and job from schema generation since they're dependency-injected
@@ -392,7 +395,7 @@ class WizelitAgent:
392
395
 
393
396
  def run(
394
397
  self,
395
- transport: Optional[str] = None,
398
+ transport: Optional[Transport] = None,
396
399
  host: Optional[str] = None,
397
400
  port: Optional[int] = None,
398
401
  **kwargs,
@@ -406,7 +409,7 @@ class WizelitAgent:
406
409
  port: Port to bind to (for HTTP transports)
407
410
  **kwargs: Additional arguments passed to fast-mcp
408
411
  """
409
- transport = transport or self._transport
412
+ transport = cast(Transport, transport or self._transport)
410
413
  host = host or self._host
411
414
  port = port or self._port
412
415
  print(f"🚀 Starting {self._name} MCP Server")
@@ -516,12 +519,12 @@ class WizelitAgent:
516
519
  "error": job_model.error,
517
520
  "created_at": (
518
521
  job_model.created_at.isoformat()
519
- if job_model.created_at
522
+ if job_model.created_at is not None
520
523
  else None
521
524
  ),
522
525
  "updated_at": (
523
526
  job_model.updated_at.isoformat()
524
- if job_model.updated_at
527
+ if job_model.updated_at is not None
525
528
  else None
526
529
  ),
527
530
  }
@@ -6,7 +6,7 @@ import asyncio
6
6
  import uuid
7
7
  import time
8
8
  from datetime import datetime, UTC
9
- from typing import List, Optional, Awaitable, Any, TYPE_CHECKING
9
+ from typing import Optional, Awaitable, Any, TYPE_CHECKING
10
10
  from fastmcp import Context
11
11
 
12
12
  if TYPE_CHECKING:
@@ -19,7 +19,7 @@ class MemoryLogHandler(logging.Handler):
19
19
  Custom logging handler that stores log messages in a list.
20
20
  """
21
21
 
22
- def __init__(self, logs_list: List[str]):
22
+ def __init__(self, logs_list: list[str]):
23
23
  super().__init__()
24
24
  self.logs_list = logs_list
25
25
  self.setFormatter(logging.Formatter('%(message)s'))
@@ -156,7 +156,7 @@ class Job:
156
156
  self._ctx = ctx
157
157
  self._id = job_id or f"JOB-{str(uuid.uuid4())[:8]}"
158
158
  self._status = "running"
159
- self._logs: List[str] = []
159
+ self._logs: list[str] = []
160
160
  self._result: Optional[str] = None
161
161
  self._error: Optional[str] = None
162
162
  self._db_manager = db_manager
@@ -176,7 +176,7 @@ class Job:
176
176
  return self._logger
177
177
 
178
178
  @property
179
- def logs(self) -> List[str]:
179
+ def logs(self) -> list[str]:
180
180
  """List of log messages (timestamped strings)."""
181
181
  return self._logs
182
182
 
@@ -196,11 +196,11 @@ class LogStreamer:
196
196
  self._redis = None
197
197
  logger.info("Redis connection closed")
198
198
 
199
- async def __aenter__(self):
199
+ async def __aenter__(self) -> 'LogStreamer':
200
200
  """Async context manager entry."""
201
201
  await self._ensure_connected()
202
202
  return self
203
203
 
204
- async def __aexit__(self, exc_type, exc_val, exc_tb):
204
+ async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
205
205
  """Async context manager exit."""
206
206
  await self.close()
wizelit_sdk/database.py CHANGED
@@ -132,7 +132,7 @@ class DatabaseManager:
132
132
  finally:
133
133
  await session.close()
134
134
 
135
- async def close(self):
135
+ async def close(self) -> None:
136
136
  """Dispose of the engine and close all connections."""
137
137
  await self.engine.dispose()
138
138
  logger.info("Database connections closed")
@@ -3,6 +3,7 @@ from sqlalchemy import Column
3
3
  from sqlalchemy.dialects.postgresql import UUID
4
4
  import uuid
5
5
  from datetime import datetime
6
+ from typing import Dict, Any
6
7
 
7
8
  Base = declarative_base()
8
9
 
@@ -10,7 +11,7 @@ class TimestampMixin:
10
11
  """Mixin for models that need timestamp functionality."""
11
12
 
12
13
  @staticmethod
13
- def get_timestamp():
14
+ def get_timestamp() -> str:
14
15
  return datetime.utcnow().isoformat()
15
16
 
16
17
 
@@ -20,6 +21,6 @@ class BaseModel(Base):
20
21
 
21
22
  id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
22
23
 
23
- def to_dict(self):
24
+ def to_dict(self) -> Dict[str, Any]:
24
25
  """Convert model to dictionary."""
25
26
  return {c.name: getattr(self, c.name) for c in self.__table__.columns}
wizelit_sdk/models/job.py CHANGED
@@ -41,7 +41,7 @@ class JobModel(BaseModel):
41
41
  Index('idx_job_created_at', 'created_at'),
42
42
  )
43
43
 
44
- def __repr__(self):
44
+ def __repr__(self) -> str:
45
45
  return f"<JobModel(id={self.id}, status={self.status})>"
46
46
 
47
47
 
@@ -68,5 +68,5 @@ class JobLogModel(BaseModel):
68
68
  Index('idx_job_log_job_id_timestamp', 'job_id', 'timestamp'),
69
69
  )
70
70
 
71
- def __repr__(self):
71
+ def __repr__(self) -> str:
72
72
  return f"<JobLogModel(id={self.id}, job_id={self.job_id}, level={self.level})>"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wizelit-sdk
3
- Version: 0.1.28
3
+ Version: 0.1.30
4
4
  Summary: Wizelit Agent Wrapper - Internal utility package
5
5
  Author-email: Your Name <your.email@company.com>
6
6
  Requires-Python: >=3.10
@@ -0,0 +1,13 @@
1
+ wizelit_sdk/__init__.py,sha256=76Dt-WxNbEJwOCPqu2P9AooVSQoGmc8-CH1fxIWJ5Lo,471
2
+ wizelit_sdk/database.py,sha256=HzvMY-KZQBkGs-Ey_wKAIPOJEb5BqGjEi98Tip7CQBo,4830
3
+ wizelit_sdk/agent_wrapper/__init__.py,sha256=srVcHZfvpf3q8m2nzIST6Ofl2V8Vv5GRtcNXudOLiD8,333
4
+ wizelit_sdk/agent_wrapper/agent_wrapper.py,sha256=qkskmRRjhIooXVeyZHbH5q1OIp30zw29bBRUoqTPYLE,23476
5
+ wizelit_sdk/agent_wrapper/job.py,sha256=jW2Cl7QvSgZDUqWqZSND-V1XphGdISJuh9ViHgCn7iU,13770
6
+ wizelit_sdk/agent_wrapper/signature_validation.py,sha256=Njplwofw36jXoWgBooaZCbwhkf72pR-UoRQ3Q6-biro,3729
7
+ wizelit_sdk/agent_wrapper/streaming.py,sha256=l7SbvPuQYMdGO38t1upyI5wTVdd5eB-2BSwU-BQSlvc,6673
8
+ wizelit_sdk/models/__init__.py,sha256=UB7nfHoE6hGcjfzy7w8AmuKVmYrTg9wIgGjG8GWziJ0,143
9
+ wizelit_sdk/models/base.py,sha256=11XyxLUG0VjdiNxe4zmzGDUjKEOsjSvUjA8yaQgfCa0,758
10
+ wizelit_sdk/models/job.py,sha256=HD8ohVqzakC8J7VAwmh8UCi_BLLiqx85TbR0FjO2rlg,2494
11
+ wizelit_sdk-0.1.30.dist-info/METADATA,sha256=zCb8i8TbnbAVCtHzcBxhgvQOlNIyNehCKQUWVCYpeqA,3297
12
+ wizelit_sdk-0.1.30.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
13
+ wizelit_sdk-0.1.30.dist-info/RECORD,,
@@ -1,13 +0,0 @@
1
- wizelit_sdk/__init__.py,sha256=76Dt-WxNbEJwOCPqu2P9AooVSQoGmc8-CH1fxIWJ5Lo,471
2
- wizelit_sdk/database.py,sha256=6F2Nyt-sr5U5GkAB9OeSCU-iv2byZBDsg7aXqCl-ntk,4822
3
- wizelit_sdk/agent_wrapper/__init__.py,sha256=srVcHZfvpf3q8m2nzIST6Ofl2V8Vv5GRtcNXudOLiD8,333
4
- wizelit_sdk/agent_wrapper/agent_wrapper.py,sha256=LiSYpnKF-RTx_9UnVgW9KqyfTWtilK_Gft1yCuxujus,23204
5
- wizelit_sdk/agent_wrapper/job.py,sha256=Gk2CyLBQFzIosYuGrqUj6_rZ9kDIO6YLYQ7Pxk6ASuM,13776
6
- wizelit_sdk/agent_wrapper/signature_validation.py,sha256=Njplwofw36jXoWgBooaZCbwhkf72pR-UoRQ3Q6-biro,3729
7
- wizelit_sdk/agent_wrapper/streaming.py,sha256=f0VV3IzGAlfQY_cw2OHgxWjvM16Hs42_b700EUX2QpY,6633
8
- wizelit_sdk/models/__init__.py,sha256=UB7nfHoE6hGcjfzy7w8AmuKVmYrTg9wIgGjG8GWziJ0,143
9
- wizelit_sdk/models/base.py,sha256=aEPGMZVczKnlWz4Ps99e_xI5TcuSV3DxCigRMU5BnhE,704
10
- wizelit_sdk/models/job.py,sha256=P68Vb1k77Z_Tha4dE0GzrLPa0LJrnMCxyYMENZyD7Kc,2480
11
- wizelit_sdk-0.1.28.dist-info/METADATA,sha256=wBU5HBbuQBXynPvt_L2blH-JzArvPpDgU2jkRZ2kOWQ,3297
12
- wizelit_sdk-0.1.28.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
13
- wizelit_sdk-0.1.28.dist-info/RECORD,,