feat: add reports table and report status enum for generated Markdown reports

This commit is contained in:
Anish Sarkar 2026-02-11 16:28:56 +05:30
parent 1d1e2c6b48
commit b6c0406d10
2 changed files with 135 additions and 0 deletions

View file

@ -100,6 +100,11 @@ class PodcastStatus(str, Enum):
FAILED = "failed"
class ReportStatus(str, Enum):
READY = "ready"
FAILED = "failed"
class DocumentStatus:
"""
Helper class for document processing status (stored as JSONB).
@ -1031,6 +1036,42 @@ class Podcast(BaseModel, TimestampMixin):
thread = relationship("NewChatThread")
class Report(BaseModel, TimestampMixin):
"""Report model for storing generated Markdown reports."""
__tablename__ = "reports"
title = Column(String(500), nullable=False)
content = Column(Text, nullable=True) # Markdown body
report_metadata = Column(JSONB, nullable=True) # section headings, word count, etc.
status = Column(
SQLAlchemyEnum(
ReportStatus,
name="report_status",
create_type=False,
values_callable=lambda x: [e.value for e in x],
),
nullable=False,
default=ReportStatus.READY,
server_default="ready",
index=True,
)
report_style = Column(String(100), nullable=True) # e.g. "executive_summary", "deep_research"
search_space_id = Column(
Integer, ForeignKey("searchspaces.id", ondelete="CASCADE"), nullable=False
)
search_space = relationship("SearchSpace", back_populates="reports")
thread_id = Column(
Integer,
ForeignKey("new_chat_threads.id", ondelete="SET NULL"),
nullable=True,
index=True,
)
thread = relationship("NewChatThread")
class ImageGenerationConfig(BaseModel, TimestampMixin):
"""
Dedicated configuration table for image generation models.
@ -1185,6 +1226,12 @@ class SearchSpace(BaseModel, TimestampMixin):
order_by="Podcast.id.desc()",
cascade="all, delete-orphan",
)
reports = relationship(
"Report",
back_populates="search_space",
order_by="Report.id.desc()",
cascade="all, delete-orphan",
)
image_generations = relationship(
"ImageGeneration",
back_populates="search_space",