root e39829fc4e feat(ai-rule-engine): 完成 MVP 所有批次实现
批次1: 项目结构 + SQLite 存储层 + 数据模型
批次2: REST API (http.server)
批次3: LLM 编译器 (支持 OpenAI/Anthropic)
批次4: RestrictedPython 规则执行器
批次5: 规则匹配器 + LLM Callback 兜底
批次6: 冲突检测器

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 22:19:42 +08:00

71 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Data models for rule engine - pure Python implementation."""
from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional, Dict, Any
@dataclass
class CreateRuleRequest:
"""创建规则的请求模型。"""
name: str
condition_template: str
description: Optional[str] = None
priority: int = 0
facts_schema: Optional[Dict] = None
@dataclass
class Rule:
"""规则模型。"""
id: str
name: str
condition_template: str
code: str
description: Optional[str] = None
priority: int = 0
version: int = 1
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
is_active: bool = True
def to_dict(self) -> Dict[str, Any]:
return {
"id": self.id,
"name": self.name,
"description": self.description,
"condition_template": self.condition_template,
"code": self.code,
"priority": self.priority,
"version": self.version,
"created_at": self.created_at.isoformat() if self.created_at else None,
"updated_at": self.updated_at.isoformat() if self.updated_at else None,
"is_active": self.is_active
}
@dataclass
class RuleExecution:
"""规则执行记录模型。"""
id: str
rule_id: str
facts: Dict
result: Optional[Dict] = None
matched: bool = False
executed_at: Optional[datetime] = None
@dataclass
class EvaluateRequest:
"""校验事实的请求模型。"""
facts: Dict
rule_id: Optional[str] = None # 指定规则ID为空则匹配所有
@dataclass
class EvaluateResponse:
"""校验事实的响应模型。"""
matched: bool
rule_id: Optional[str] = None
result: Optional[Dict] = None
conflict_warning: Optional[str] = None