Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| from .schemas import RoleName, RoleResult, TaskResolution | |
| class IntegratedRoleResult: | |
| resolutions: tuple[TaskResolution, ...] | |
| missing_task_ids: tuple[str, ...] | |
| contradiction_task_ids: tuple[str, ...] | |
| risks: tuple[str, ...] | |
| uncertainties: tuple[str, ...] | |
| evidence_ids: tuple[str, ...] | |
| def as_dict(self) -> dict[str, object]: | |
| return {"resolutions":[r.model_dump(mode="json") for r in self.resolutions],"missing_task_ids":list(self.missing_task_ids),"contradiction_task_ids":list(self.contradiction_task_ids),"risks":list(self.risks),"uncertainties":list(self.uncertainties),"evidence_ids":list(self.evidence_ids)} | |
| class DialogueIntegrator: | |
| def integrate(self, results: list[RoleResult]) -> IntegratedRoleResult: | |
| by_role = {result.role: result for result in results} | |
| if set(by_role) != set(RoleName): | |
| raise ValueError("three_role_result_required") | |
| constructive = by_role[RoleName.CONSTRUCTIVE] | |
| missing = set().union(*(r.missing_needs for r in results)) | |
| contradictions = set().union(*(r.contradictions for r in results)) | |
| return IntegratedRoleResult( | |
| resolutions=tuple(constructive.task_resolutions), | |
| missing_task_ids=tuple(sorted(missing)), | |
| contradiction_task_ids=tuple(sorted(contradictions)), | |
| risks=tuple(dict.fromkeys(item for r in results for item in r.risks)), | |
| uncertainties=tuple(dict.fromkeys(item for r in results for item in r.uncertainties)), | |
| evidence_ids=tuple(dict.fromkeys(item for r in results for item in r.evidence_ids)), | |
| ) | |