training.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. """
  2. ML Training Command Classes
  3. This module implements commands for ML model training management.
  4. """
  5. from typing import Optional, Dict, Any
  6. from dataclasses import dataclass, field
  7. from .base import TrixyCommand, CommandResponse, ValidationError
  8. @dataclass
  9. class TrainingStartCommand(TrixyCommand):
  10. """Command to start ML training."""
  11. training_type: str = field(default="") # wakeword, voice_recognition
  12. model_name: str = field(default="")
  13. training_config: Dict[str, Any] = field(default_factory=dict)
  14. def validate(self) -> bool:
  15. if not self.training_type:
  16. raise ValidationError("TrainingStartCommand must have a training_type")
  17. return True
  18. def get_command_name(self) -> str:
  19. return "TrainingStartCommand"
  20. @dataclass
  21. class TrainingStopCommand(TrixyCommand):
  22. """Command to stop ML training."""
  23. training_id: str = field(default="")
  24. def validate(self) -> bool:
  25. return True
  26. def get_command_name(self) -> str:
  27. return "TrainingStopCommand"
  28. @dataclass
  29. class TrainingStatusCommand(TrixyCommand):
  30. """Command to get training status."""
  31. training_id: str = field(default="")
  32. def validate(self) -> bool:
  33. return True
  34. def get_command_name(self) -> str:
  35. return "TrainingStatusCommand"
  36. @dataclass
  37. class TrainingStartResponse(CommandResponse):
  38. """Response to training start command."""
  39. training_started: bool = field(default=False)
  40. training_id: str = field(default="")
  41. def validate(self) -> bool:
  42. return True
  43. def get_response_name(self) -> str:
  44. return "TrainingStartResponse"
  45. @dataclass
  46. class TrainingStopResponse(CommandResponse):
  47. """Response to training stop command."""
  48. training_stopped: bool = field(default=False)
  49. def validate(self) -> bool:
  50. return True
  51. def get_response_name(self) -> str:
  52. return "TrainingStopResponse"
  53. @dataclass
  54. class TrainingStatusResponse(CommandResponse):
  55. """Response to training status command."""
  56. training_status: str = field(default="unknown")
  57. progress_data: Dict[str, Any] = field(default_factory=dict)
  58. def validate(self) -> bool:
  59. return True
  60. def get_response_name(self) -> str:
  61. return "TrainingStatusResponse"
  62. __all__ = [
  63. "TrainingStartCommand", "TrainingStopCommand", "TrainingStatusCommand",
  64. "TrainingStartResponse", "TrainingStopResponse", "TrainingStatusResponse"
  65. ]