74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
"""
|
|
AI generation run model.
|
|
|
|
Represents one admin generation request that can produce one or many variants.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import DateTime, ForeignKey, Integer, String, Text, func
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class AIGenerationRun(Base):
|
|
__tablename__ = "ai_generation_runs"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
basis_item_id: Mapped[int] = mapped_column(
|
|
ForeignKey("items.id", ondelete="CASCADE", onupdate="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
comment="Basis item ID",
|
|
)
|
|
source_snapshot_question_id: Mapped[Optional[int]] = mapped_column(
|
|
ForeignKey("tryout_snapshot_questions.id", ondelete="SET NULL", onupdate="CASCADE"),
|
|
nullable=True,
|
|
index=True,
|
|
comment="Source snapshot question ID",
|
|
)
|
|
target_level: Mapped[str] = mapped_column(
|
|
String(50),
|
|
nullable=False,
|
|
comment="Target level (mudah/sulit)",
|
|
)
|
|
requested_count: Mapped[int] = mapped_column(
|
|
Integer,
|
|
nullable=False,
|
|
default=1,
|
|
comment="Requested output count",
|
|
)
|
|
model: Mapped[str] = mapped_column(
|
|
String(255),
|
|
nullable=False,
|
|
comment="Model identifier",
|
|
)
|
|
prompt_version: Mapped[str] = mapped_column(
|
|
String(50),
|
|
nullable=False,
|
|
default="v1",
|
|
comment="Prompt template version",
|
|
)
|
|
operator_notes: Mapped[Optional[str]] = mapped_column(
|
|
Text,
|
|
nullable=True,
|
|
comment="Optional admin notes",
|
|
)
|
|
created_by: Mapped[str] = mapped_column(
|
|
String(255),
|
|
nullable=False,
|
|
comment="Admin username",
|
|
)
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), nullable=False, server_default=func.now()
|
|
)
|
|
|
|
generated_items: Mapped[list["Item"]] = relationship(
|
|
"Item",
|
|
back_populates="generation_run",
|
|
foreign_keys="Item.generation_run_id",
|
|
lazy="selectin",
|
|
)
|