Files
defiQUG c052b07662
Some checks failed
Tests / test (3.10) (push) Has been cancelled
Tests / test (3.11) (push) Has been cancelled
Tests / test (3.12) (push) Has been cancelled
Tests / lint (push) Has been cancelled
Tests / docker (push) Has been cancelled
Initial commit: add .gitignore and README
2026-02-09 21:51:42 -08:00

53 lines
1.7 KiB
Python

"""Skill schemas for AGI skill library and compilation."""
from datetime import datetime, timezone
from enum import Enum
from typing import Any
from pydantic import BaseModel, Field, field_validator
def _utc_now() -> datetime:
return datetime.now(timezone.utc)
class SkillKind(str, Enum):
"""Type of skill."""
WORKFLOW = "workflow"
PROCEDURE = "procedure"
TOOL_NATIVE = "tool_native"
COMPOSITE = "composite"
class Skill(BaseModel):
"""Reusable skill: declarative description + executable steps."""
skill_id: str = Field(..., min_length=1)
name: str = Field(..., min_length=1)
description: str = Field(default="")
kind: SkillKind = Field(default=SkillKind.WORKFLOW)
steps: list[dict[str, Any]] = Field(default_factory=list, description="Declarative steps (plan-like)")
tool_names: list[str] = Field(default_factory=list, description="Tools this skill uses")
version: int = Field(default=1, ge=1)
metadata: dict[str, Any] = Field(default_factory=dict)
created_at: datetime = Field(default_factory=_utc_now)
@field_validator("skill_id", "name")
@classmethod
def validate_non_whitespace(cls, v: str) -> str:
if not v.strip():
raise ValueError("Field cannot be empty or whitespace")
return v
class SkillVersionInfo(BaseModel):
"""Version and performance tracking for a skill."""
skill_id: str = Field(..., min_length=1)
version: int = Field(..., ge=1)
success_count: int = Field(default=0, ge=0)
failure_count: int = Field(default=0, ge=0)
last_success_at: datetime | None = Field(default=None)
regression_test_ids: list[str] = Field(default_factory=list)