Files
aitbc/examples/stubs/aitbc-ai/src/aitbc_ai/domain/jobs.py
aitbc bd08848e0d
Some checks failed
Cross-Node Transaction Testing / transaction-test (push) Has been cancelled
Deploy to Testnet / deploy-testnet (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
Documentation Validation / validate-policies-strict (push) Has been cancelled
Multi-Node Stress Testing / stress-test (push) Has been cancelled
Integration Tests / test-service-integration (push) Failing after 3s
Python Tests / test-python (push) Failing after 32s
Security Scanning / security-scan (push) Successful in 32s
refactor: rename packages to shorter names
- Renamed aitbc-ai-service to aitbc-ai
- Renamed aitbc-edge-api to aitbc-edge
- Updated pyproject.toml files with new package names
- Renamed directories and package modules
- Updated references in documentation and scripts
- Updated systemd service references
2026-05-20 08:30:51 +02:00

69 lines
2.4 KiB
Python

"""Domain models for AI job operations."""
from __future__ import annotations
from datetime import datetime, timezone
from enum import StrEnum
from uuid import uuid4
from sqlalchemy import JSON, Column
from sqlmodel import Field, SQLModel
class JobState(StrEnum):
"""Job execution states."""
PENDING = "pending"
RUNNING = "running"
COMPLETED = "completed"
FAILED = "failed"
CANCELED = "canceled"
EXPIRED = "expired"
class Job(SQLModel, table=True):
"""AI job model."""
__tablename__ = "jobs"
__table_args__ = {"extend_existing": True}
id: str = Field(default_factory=lambda: f"job_{uuid4().hex[:12]}", primary_key=True)
client_id: str = Field(index=True)
task_type: str = Field(index=True)
task_data: dict = Field(default_factory=dict, sa_column=Column(JSON, nullable=False))
state: JobState = Field(default=JobState.PENDING, index=True)
result: dict | None = Field(default=None, sa_column=Column(JSON, nullable=True))
error: str | None = Field(default=None)
# Payment information
payment_id: str | None = Field(default=None, index=True)
payment_amount: float = Field(default=0.0)
payment_status: str = Field(default="none", index=True)
# Timestamps
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), nullable=False, index=True)
requested_at: datetime | None = Field(default=None)
started_at: datetime | None = Field(default=None)
completed_at: datetime | None = Field(default=None)
expires_at: datetime | None = Field(default=None)
# Metadata
priority: int = Field(default=0)
assigned_miner_id: str | None = Field(default=None, index=True)
receipt: dict | None = Field(default=None, sa_column=Column(JSON, nullable=True))
receipt_id: str | None = Field(default=None)
class JobReceipt(SQLModel, table=True):
"""Job receipts for verification."""
__tablename__ = "job_receipts"
__table_args__ = {"extend_existing": True}
id: str = Field(default_factory=lambda: f"rcpt_{uuid4().hex[:12]}", primary_key=True)
job_id: str = Field(index=True)
miner_id: str = Field(index=True)
result: dict = Field(default_factory=dict, sa_column=Column(JSON, nullable=False))
metrics: dict = Field(default_factory=dict, sa_column=Column(JSON, nullable=False))
signature: str = Field(default="")
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), nullable=False, index=True)