NeonClary
Add Cybersecurity Advisor Canvas on FEAT_CybersecurityCanvas
cc7440f
Raw
History Blame Contribute Delete
1.97 kB
"""Return the current date and time for orchestrator context."""
from __future__ import annotations
from datetime import datetime, timezone as dt_timezone
from typing import Any, Dict
try:
from zoneinfo import ZoneInfo
except ImportError: # pragma: no cover
ZoneInfo = None # type: ignore
TOOL_DEFINITION = {
"type": "function",
"function": {
"name": "get_current_datetime",
"description": (
"Get the current date and time in UTC and in a configured local timezone. "
"Use when the user asks about today, deadlines, timelines, schedules, "
"or when accurate temporal context improves security guidance."
),
"parameters": {
"type": "object",
"properties": {
"timezone": {
"type": "string",
"description": (
"IANA timezone name (e.g. America/Los_Angeles). "
"Optional; defaults to the app-configured timezone."
),
},
},
"required": [],
},
},
}
async def execute(name: str = "", timezone: str | None = None, **_: Any) -> Dict[str, Any]:
from app.config import get_settings
cfg = get_settings().tools.get_tool_config("current_datetime")
tz_name = timezone or cfg.get("default_timezone") or "UTC"
tz = dt_timezone.utc
if ZoneInfo is not None:
try:
tz = ZoneInfo(tz_name)
except Exception:
tz_name = "UTC"
tz = dt_timezone.utc
now_utc = datetime.now(dt_timezone.utc)
now_local = now_utc.astimezone(tz)
return {
"utc_iso": now_utc.isoformat(),
"local_iso": now_local.isoformat(),
"local_timezone": tz_name,
"local_weekday": now_local.strftime("%A"),
"local_date": now_local.strftime("%Y-%m-%d"),
"local_time": now_local.strftime("%H:%M:%S"),
}