forked from Zakaria/hermes-agent
Feature: Digital pet
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
"""FastAPI routes for the Hermes digital pet dashboard plugin."""
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict
|
||||
|
||||
from fastapi import APIRouter
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
_PLUGIN_ROOT = Path(__file__).resolve().parents[1]
|
||||
_STATE_PATH = _PLUGIN_ROOT / "state.py"
|
||||
_SPEC = importlib.util.spec_from_file_location("hermes_digital_pet_state", _STATE_PATH)
|
||||
if _SPEC is None or _SPEC.loader is None: # pragma: no cover
|
||||
raise RuntimeError("Unable to load digital pet state module")
|
||||
_state_mod = importlib.util.module_from_spec(_SPEC)
|
||||
sys.modules.setdefault("hermes_digital_pet_state", _state_mod)
|
||||
_SPEC.loader.exec_module(_state_mod)
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
class PetEvent(BaseModel):
|
||||
type: str = Field(..., min_length=1, max_length=64)
|
||||
metadata: Dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
|
||||
@router.get("/state")
|
||||
async def get_state():
|
||||
return {"ok": True, "state": _state_mod.load_state().public()}
|
||||
|
||||
|
||||
@router.post("/event")
|
||||
async def post_event(event: PetEvent):
|
||||
state = _state_mod.apply_event(event.type, metadata=event.metadata, persist=True)
|
||||
return {"ok": True, "state": state.public()}
|
||||
Reference in New Issue
Block a user