Initial commit: breakpilot-core - Shared Infrastructure
Docker Compose with 24+ services: - PostgreSQL (PostGIS), Valkey, MinIO, Qdrant - Vault (PKI/TLS), Nginx (Reverse Proxy) - Backend Core API, Consent Service, Billing Service - RAG Service, Embedding Service - Gitea, Woodpecker CI/CD - Night Scheduler, Health Aggregator - Jitsi (Web/XMPP/JVB/Jicofo), Mailpit Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
11
docs-src/ai-content-generator/app/models/__init__.py
Normal file
11
docs-src/ai-content-generator/app/models/__init__.py
Normal file
@@ -0,0 +1,11 @@
|
||||
"""
|
||||
Models Package
|
||||
Data Models for AI Content Generator
|
||||
"""
|
||||
|
||||
from .generation_job import GenerationJob, JobStatus
|
||||
|
||||
__all__ = [
|
||||
"GenerationJob",
|
||||
"JobStatus"
|
||||
]
|
||||
101
docs-src/ai-content-generator/app/models/generation_job.py
Normal file
101
docs-src/ai-content-generator/app/models/generation_job.py
Normal file
@@ -0,0 +1,101 @@
|
||||
"""
|
||||
Generation Job Model
|
||||
Tracking für Content-Generierungs-Jobs
|
||||
"""
|
||||
|
||||
from enum import Enum
|
||||
from datetime import datetime
|
||||
from typing import Optional, Dict, Any
|
||||
import uuid
|
||||
|
||||
|
||||
class JobStatus(str, Enum):
|
||||
"""Job Status"""
|
||||
PENDING = "pending"
|
||||
PROCESSING = "processing"
|
||||
COMPLETED = "completed"
|
||||
FAILED = "failed"
|
||||
|
||||
|
||||
class GenerationJob:
|
||||
"""Content-Generierungs-Job"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
topic: str,
|
||||
description: Optional[str] = None,
|
||||
target_grade: Optional[str] = None,
|
||||
material_count: int = 0
|
||||
):
|
||||
self.job_id = str(uuid.uuid4())
|
||||
self.topic = topic
|
||||
self.description = description
|
||||
self.target_grade = target_grade
|
||||
self.material_count = material_count
|
||||
|
||||
self.status = JobStatus.PENDING
|
||||
self.progress = 0
|
||||
self.message = "Job created"
|
||||
self.result: Optional[Dict[str, Any]] = None
|
||||
self.error: Optional[str] = None
|
||||
|
||||
self.created_at = datetime.utcnow()
|
||||
self.updated_at = datetime.utcnow()
|
||||
|
||||
def update_progress(self, progress: int, message: str):
|
||||
"""Update Job Progress"""
|
||||
self.progress = progress
|
||||
self.message = message
|
||||
self.status = JobStatus.PROCESSING
|
||||
self.updated_at = datetime.utcnow()
|
||||
|
||||
def complete(self, result: Dict[str, Any]):
|
||||
"""Mark Job as Completed"""
|
||||
self.status = JobStatus.COMPLETED
|
||||
self.progress = 100
|
||||
self.message = "Content generation completed"
|
||||
self.result = result
|
||||
self.updated_at = datetime.utcnow()
|
||||
|
||||
def fail(self, error: str):
|
||||
"""Mark Job as Failed"""
|
||||
self.status = JobStatus.FAILED
|
||||
self.message = "Content generation failed"
|
||||
self.error = error
|
||||
self.updated_at = datetime.utcnow()
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
"""Convert to dict"""
|
||||
return {
|
||||
"job_id": self.job_id,
|
||||
"topic": self.topic,
|
||||
"description": self.description,
|
||||
"target_grade": self.target_grade,
|
||||
"material_count": self.material_count,
|
||||
"status": self.status.value,
|
||||
"progress": self.progress,
|
||||
"message": self.message,
|
||||
"result": self.result,
|
||||
"error": self.error,
|
||||
"created_at": self.created_at.isoformat(),
|
||||
"updated_at": self.updated_at.isoformat()
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: Dict[str, Any]) -> "GenerationJob":
|
||||
"""Create from dict"""
|
||||
job = cls(
|
||||
topic=data["topic"],
|
||||
description=data.get("description"),
|
||||
target_grade=data.get("target_grade"),
|
||||
material_count=data.get("material_count", 0)
|
||||
)
|
||||
job.job_id = data["job_id"]
|
||||
job.status = JobStatus(data["status"])
|
||||
job.progress = data["progress"]
|
||||
job.message = data["message"]
|
||||
job.result = data.get("result")
|
||||
job.error = data.get("error")
|
||||
job.created_at = datetime.fromisoformat(data["created_at"])
|
||||
job.updated_at = datetime.fromisoformat(data["updated_at"])
|
||||
return job
|
||||
Reference in New Issue
Block a user