models.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from __future__ import annotations
  2. from dataclasses import dataclass, field
  3. @dataclass(frozen=True)
  4. class Subsystem:
  5. name: str
  6. path: str
  7. file_count: int
  8. notes: str
  9. @dataclass(frozen=True)
  10. class PortingModule:
  11. name: str
  12. responsibility: str
  13. source_hint: str
  14. status: str = 'planned'
  15. @dataclass(frozen=True)
  16. class PermissionDenial:
  17. tool_name: str
  18. reason: str
  19. @dataclass(frozen=True)
  20. class UsageSummary:
  21. input_tokens: int = 0
  22. output_tokens: int = 0
  23. def add_turn(self, prompt: str, output: str) -> 'UsageSummary':
  24. return UsageSummary(
  25. input_tokens=self.input_tokens + len(prompt.split()),
  26. output_tokens=self.output_tokens + len(output.split()),
  27. )
  28. @dataclass
  29. class PortingBacklog:
  30. title: str
  31. modules: list[PortingModule] = field(default_factory=list)
  32. def summary_lines(self) -> list[str]:
  33. return [
  34. f'- {module.name} [{module.status}] — {module.responsibility} (from {module.source_hint})'
  35. for module in self.modules
  36. ]