mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 07:20:44 +08:00
Introduce persisted cron/interval jobs, gateway scheduler loop, worker turns, and admin CRUD/edit UI. Route proactive reminders via the originating chat channel (WhatsApp vs WeChat), harden Weixin outbound with durable queue and PG-compatible polling, and fix chat UI to show each scheduled reminder separately. Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
from __future__ import annotations
|
||
|
||
from typing import Any
|
||
|
||
try:
|
||
import jsonschema
|
||
from jsonschema import validators
|
||
except Exception: # pragma: no cover
|
||
jsonschema = None
|
||
validators = None
|
||
|
||
|
||
def filter_arguments_to_schema(parameters: dict[str, Any], arguments: dict[str, Any]) -> dict[str, Any]:
|
||
"""Drop keys not declared in tool schema when additionalProperties is false."""
|
||
if not isinstance(arguments, dict):
|
||
return {}
|
||
schema = parameters or {}
|
||
props = schema.get("properties") if isinstance(schema.get("properties"), dict) else {}
|
||
if schema.get("additionalProperties") is False and props:
|
||
return {k: v for k, v in arguments.items() if k in props}
|
||
return dict(arguments)
|
||
|
||
|
||
def validate_tool_arguments(parameters: dict[str, Any], arguments: dict[str, Any]) -> tuple[bool, str | None]:
|
||
"""校验模型给出的 arguments 是否符合工具的 JSON Schema(OpenAI function parameters)。"""
|
||
if not isinstance(arguments, dict):
|
||
return False, "arguments must be an object"
|
||
|
||
schema = parameters or {}
|
||
if not schema:
|
||
return True, None
|
||
|
||
if jsonschema is None or validators is None:
|
||
# 依赖未安装时:不阻塞主流程(工具 handler 内仍可自行校验)。
|
||
return True, None
|
||
|
||
try:
|
||
cls = validators.validator_for(schema)
|
||
cls(schema).validate(arguments)
|
||
except jsonschema.ValidationError as e:
|
||
return False, e.message
|
||
except Exception as e:
|
||
return False, str(e)
|
||
return True, None
|
||
|
||
|
||
__all__ = ["filter_arguments_to_schema", "validate_tool_arguments"]
|
||
|