chore: initialize monorepo with project scaffolding, configs, and CI setup

This commit is contained in:
oib
2025-09-27 06:05:25 +02:00
commit fe29631a86
170 changed files with 13708 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
"""Domain models for the coordinator API."""
from .job import Job
from .miner import Miner
from .job_receipt import JobReceipt
__all__ = ["Job", "Miner", "JobReceipt"]

View File

@@ -0,0 +1,30 @@
from __future__ import annotations
from datetime import datetime
from typing import Optional
from uuid import uuid4
from sqlalchemy import Column, JSON
from sqlmodel import Field, SQLModel
from ..models import JobState
class Job(SQLModel, table=True):
id: str = Field(default_factory=lambda: uuid4().hex, primary_key=True, index=True)
client_id: str = Field(index=True)
state: JobState = Field(default=JobState.queued, sa_column_kwargs={"nullable": False})
payload: dict = Field(sa_column=Column(JSON, nullable=False))
constraints: dict = Field(default_factory=dict, sa_column=Column(JSON, nullable=False))
ttl_seconds: int = Field(default=900)
requested_at: datetime = Field(default_factory=datetime.utcnow)
expires_at: datetime = Field(default_factory=datetime.utcnow)
assigned_miner_id: Optional[str] = Field(default=None, index=True)
result: Optional[dict] = Field(default=None, sa_column=Column(JSON, nullable=True))
receipt: Optional[dict] = Field(default=None, sa_column=Column(JSON, nullable=True))
receipt_id: Optional[str] = Field(default=None, index=True)
error: Optional[str] = None

View File

@@ -0,0 +1,15 @@
from __future__ import annotations
from datetime import datetime
from uuid import uuid4
from sqlalchemy import Column, JSON
from sqlmodel import Field, SQLModel
class JobReceipt(SQLModel, table=True):
id: str = Field(default_factory=lambda: uuid4().hex, primary_key=True, index=True)
job_id: str = Field(index=True, foreign_key="job.id")
receipt_id: str = Field(index=True)
payload: dict = Field(sa_column=Column(JSON, nullable=False))
created_at: datetime = Field(default_factory=datetime.utcnow, index=True)

View File

@@ -0,0 +1,25 @@
from __future__ import annotations
from datetime import datetime
from typing import Optional
from sqlalchemy import Column, JSON
from sqlmodel import Field, SQLModel
class Miner(SQLModel, table=True):
id: str = Field(primary_key=True, index=True)
region: Optional[str] = Field(default=None, index=True)
capabilities: dict = Field(default_factory=dict, sa_column=Column(JSON, nullable=False))
concurrency: int = Field(default=1)
status: str = Field(default="ONLINE", index=True)
inflight: int = Field(default=0)
extra_metadata: dict = Field(default_factory=dict, sa_column=Column(JSON, nullable=False))
last_heartbeat: datetime = Field(default_factory=datetime.utcnow, index=True)
session_token: Optional[str] = None
last_job_at: Optional[datetime] = Field(default=None, index=True)
jobs_completed: int = Field(default=0)
jobs_failed: int = Field(default=0)
total_job_duration_ms: int = Field(default=0)
average_job_duration_ms: float = Field(default=0.0)
last_receipt_id: Optional[str] = Field(default=None, index=True)