Initial commit: add .gitignore and README
This commit is contained in:
52
fusionagi/schemas/skill.py
Normal file
52
fusionagi/schemas/skill.py
Normal file
@@ -0,0 +1,52 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user