feat: add persistent chat agent and indexed batch workflows
This commit is contained in:
@@ -193,7 +193,8 @@ class ScoringBatch(Base):
|
||||
model_config_snapshot = Column(JSON, nullable=False)
|
||||
embedding_model_name = Column(String(200), nullable=False)
|
||||
embedding_model_version = Column(String(100), nullable=False)
|
||||
status = Column(String(40), default="queued")
|
||||
status = Column(String(40), default="created")
|
||||
project_ids = Column(JSON, nullable=True) # NULL identifies a legacy batch with unknown original membership.
|
||||
progress_done = Column(Integer, default=0)
|
||||
progress_total = Column(Integer, default=0)
|
||||
error = Column(Text, default="")
|
||||
@@ -273,3 +274,63 @@ class AuditLog(Base):
|
||||
entity_id = Column(Integer, nullable=True)
|
||||
details = Column(JSON, default=dict)
|
||||
created_at = Column(DateTime(timezone=True), default=now)
|
||||
|
||||
|
||||
class IndexTask(Base):
|
||||
__tablename__ = "index_tasks"
|
||||
id = Column(Integer, primary_key=True)
|
||||
course_version_id = Column(Integer, ForeignKey("course_versions.id"), nullable=False)
|
||||
submission_file_id = Column(Integer, ForeignKey("submission_files.id"), nullable=True)
|
||||
kind = Column(String(30), nullable=False)
|
||||
status = Column(String(30), nullable=False, default="queued")
|
||||
result = Column(JSON, nullable=False, default=dict)
|
||||
error = Column(Text, default="")
|
||||
created_at = Column(DateTime(timezone=True), default=now)
|
||||
updated_at = Column(DateTime(timezone=True), default=now, onupdate=now)
|
||||
|
||||
|
||||
class Conversation(Base):
|
||||
__tablename__ = "conversations"
|
||||
id = Column(Integer, primary_key=True)
|
||||
title = Column(String(200), nullable=False, default="新对话")
|
||||
course_version_id = Column(Integer, ForeignKey("course_versions.id"), nullable=True)
|
||||
batch_id = Column(Integer, ForeignKey("scoring_batches.id"), nullable=True)
|
||||
project_id = Column(Integer, ForeignKey("projects.id"), nullable=True)
|
||||
created_at = Column(DateTime(timezone=True), default=now)
|
||||
updated_at = Column(DateTime(timezone=True), default=now, onupdate=now)
|
||||
|
||||
|
||||
class ChatMessage(Base):
|
||||
__tablename__ = "chat_messages"
|
||||
id = Column(Integer, primary_key=True)
|
||||
conversation_id = Column(Integer, ForeignKey("conversations.id"), nullable=False)
|
||||
role = Column(String(20), nullable=False)
|
||||
content = Column(Text, nullable=False, default="")
|
||||
citations = Column(JSON, nullable=False, default=list)
|
||||
tool_calls = Column(JSON, nullable=False, default=list)
|
||||
created_at = Column(DateTime(timezone=True), default=now)
|
||||
|
||||
|
||||
class AgentRun(Base):
|
||||
__tablename__ = "agent_runs"
|
||||
id = Column(Integer, primary_key=True)
|
||||
conversation_id = Column(Integer, ForeignKey("conversations.id"), nullable=False)
|
||||
status = Column(String(30), nullable=False, default="running")
|
||||
error = Column(Text, default="")
|
||||
created_at = Column(DateTime(timezone=True), default=now)
|
||||
finished_at = Column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
|
||||
class PendingAction(Base):
|
||||
__tablename__ = "pending_actions"
|
||||
id = Column(Integer, primary_key=True)
|
||||
conversation_id = Column(Integer, ForeignKey("conversations.id"), nullable=False)
|
||||
kind = Column(String(40), nullable=False)
|
||||
payload = Column(JSON, nullable=False)
|
||||
preview = Column(JSON, nullable=False)
|
||||
expected = Column(JSON, nullable=False)
|
||||
idempotency_key = Column(String(64), nullable=False, unique=True)
|
||||
status = Column(String(30), nullable=False, default="pending")
|
||||
result = Column(JSON, nullable=True)
|
||||
created_at = Column(DateTime(timezone=True), default=now)
|
||||
expires_at = Column(DateTime(timezone=True), nullable=False)
|
||||
|
||||
Reference in New Issue
Block a user