ローカルLLMにワークフローを作らせる
This commit is contained in:
57
autonomous_windmill/validator.py
Normal file
57
autonomous_windmill/validator.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""LLM 出力の JSON 構文・スキーマ検証。"""
|
||||
import json
|
||||
import jsonschema
|
||||
|
||||
# LLM が出力すべき JSON の最小スキーマ
|
||||
_FLOW_SCHEMA = {
|
||||
"type": "object",
|
||||
"required": ["summary", "value"],
|
||||
"additionalProperties": False,
|
||||
"properties": {
|
||||
"summary": {"type": "string", "minLength": 1},
|
||||
"value": {
|
||||
"type": "object",
|
||||
"required": ["modules"],
|
||||
"properties": {
|
||||
"modules": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "value"],
|
||||
"properties": {
|
||||
"id": {"type": "string"},
|
||||
"value": {
|
||||
"type": "object",
|
||||
"required": ["type", "language", "content"],
|
||||
"properties": {
|
||||
"type": {"type": "string"},
|
||||
"language": {"type": "string"},
|
||||
"content": {"type": "string"},
|
||||
"input_transforms": {"type": "object"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def validate(raw: str) -> dict:
|
||||
"""JSON 文字列を構文・スキーマ検証して dict を返す。失敗時は ValueError を投げる。"""
|
||||
# 構文チェック
|
||||
try:
|
||||
data = json.loads(raw)
|
||||
except json.JSONDecodeError as e:
|
||||
raise ValueError(f"JSON構文エラー: {e}")
|
||||
|
||||
# スキーマチェック
|
||||
try:
|
||||
jsonschema.validate(data, _FLOW_SCHEMA)
|
||||
except jsonschema.ValidationError as e:
|
||||
raise ValueError(f"JSONスキーマ不正: {e.message}")
|
||||
|
||||
return data
|
||||
Reference in New Issue
Block a user