Mac-Worker: - /api/summarize, /api/protocol, /api/preload akzeptieren optionales model-Feld → überschreibt den .env-Default pro Call, kein Restart nötig - /api/models listet die lokal verfügbaren Ollama-Modelle + Default LXC: - User.default_model + Job.model (Migration für SQLite) - /api/auth/me liefert default_model, PATCH speichert ihn sofort - /api/mac/models proxiet die Liste an die UI - Pipeline reicht job.model an Mac-Worker durch; leer = Worker-Default - create_job & reprocess akzeptieren model-Override - Snapshot-Meta nutzt job.model (genauer als /health-Snapshot) UI: - Header-Dropdown "Modell:" neben "Profil:" — sofort-speichert User-Default - Jeder Job zeigt sein Modell als Tag (lila); leer bedeutet Worker-Default - Reprocess öffnet einen Modal-Picker (statt simplem confirm), Auswahl aller verfügbaren Modelle inkl. "Worker-Default" Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
from datetime import datetime, timezone
|
|
from typing import Optional
|
|
from sqlmodel import SQLModel, Field
|
|
|
|
|
|
class JobStatus:
|
|
QUEUED = "queued"
|
|
TRANSCRIBING = "transcribing"
|
|
SUMMARIZING = "summarizing"
|
|
PROTOCOLLING = "protocolling"
|
|
EXPORTING = "exporting"
|
|
DONE = "done"
|
|
FAILED = "failed"
|
|
|
|
|
|
class Job(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
owner_id: Optional[int] = Field(default=None, foreign_key="user.id", index=True)
|
|
profile: str = Field(default="meeting")
|
|
filename: str
|
|
original_name: str
|
|
title: str = ""
|
|
status: str = JobStatus.QUEUED
|
|
progress: int = 0
|
|
error: str = ""
|
|
transcript_path: str = ""
|
|
summary_path: str = ""
|
|
protocol_path: str = ""
|
|
docx_path: str = ""
|
|
pdf_path: str = ""
|
|
# LLM-Modell für diesen Job — leer = Worker-Default. Wird beim Erstellen
|
|
# aus dem Upload-Form oder dem User-Default gefüllt; bleibt auch nach
|
|
# Reprocess als Audit-Spur erhalten (mit dem aktuell gewählten Modell).
|
|
model: str = ""
|
|
step_started_at: Optional[datetime] = Field(default=None)
|
|
last_heartbeat_at: Optional[datetime] = Field(default=None)
|
|
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
|
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|