argument-backend / aba /models.py
p2002814
horrible
23ecacd
from pydantic import BaseModel
from typing import List, Optional, Dict, Tuple, Any
# === Basic DTOs ===
class RuleDTO(BaseModel):
"""Represents a single inference rule in the ABA framework."""
id: str
head: str
body: List[str]
class FrameworkSnapshot(BaseModel):
"""Snapshot of an ABA framework at a specific stage (original or transformed)."""
language: List[str]
assumptions: List[str]
rules: List[RuleDTO]
contraries: List[Tuple[str, str]]
preferences: Optional[Dict[str, List[str]]] = None
# === Transformation tracking ===
class TransformationStep(BaseModel):
"""Represents one transformation step (non-circular, atomic, etc.)."""
step: str # 'non_circular' | 'atomic' | 'none'
applied: bool
reason: Optional[str] = None
description: Optional[str] = None
result_snapshot: Optional[FrameworkSnapshot] = None
# === ABA+ details ===
class ABAPlusAttacks(BaseModel):
"""Attacks in ABA+ with distinction between argument attacks and assumption set attacks."""
# Arguments attacks (classique ABA - entre les arguments)
argument_attacks: List[Tuple[str, str]] # [(attacker_arg, attacked_arg), ...]
# Assumption set attacks (ABA+ - entre les assumption sets)
assumption_set_attacks: List[Tuple[List[str], List[str]]] # [(attacking_set, attacked_set), ...]
class ABAPlusFrameworkResults(BaseModel):
"""ABA+ results for a specific framework state (before or after transformation)."""
assumption_sets: List[List[str]] # Liste des assumption sets
attacks: ABAPlusAttacks
class ABAPlusDTO(BaseModel):
"""Results specific to ABA+ semantics with before/after transformation."""
before_transformation: ABAPlusFrameworkResults
after_transformation: ABAPlusFrameworkResults
# === Meta info ===
class MetaInfo(BaseModel):
"""Metadata about the ABA computation process."""
request_id: str
timestamp: str
transformed: bool
transformations_applied: List[str]
warnings: Optional[List[str]] = []
errors: Optional[List[str]] = []
class FrameworkWithArgumentsAndAttacks(BaseModel):
"""Framework snapshot with its computed arguments and attacks."""
framework: FrameworkSnapshot
arguments: List[str]
attacks: List[Tuple[str, str]] # [(attacker, attacked), ...]
class TransformationResult(BaseModel):
"""Transformation results with before/after snapshots."""
before_transformation: FrameworkWithArgumentsAndAttacks
after_transformation: FrameworkWithArgumentsAndAttacks
transformations: List[TransformationStep]
# === Full API response ===
class ABAApiResponseModel(BaseModel):
"""
Represents the full backend response for an ABA/ABA+ computation request.
Includes original and transformed frameworks with before/after structure,
transformation steps, and computed results (arguments, attacks, ABA+ extensions).
"""
meta: MetaInfo
transformation: TransformationResult
aba_plus: Optional[ABAPlusDTO] = None # None if not ABA+, populated if ABA+