feat: migrate eigent_server changes (#653)

This commit is contained in:
Wendong-Fan 2025-11-14 14:48:04 +08:00 committed by GitHub
commit e15ff83d49
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 38 additions and 1 deletions

View file

@ -0,0 +1,28 @@
"""add_timestamp_to_chat_step
Revision ID: add_timestamp_to_chat_step
Revises: eec7242b3a9b
Create Date: 2025-11-13 17:31:51.692506
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = "add_timestamp_to_chat_step"
down_revision: Union[str, None] = "eec7242b3a9b"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Add timestamp column to chat_step table."""
op.add_column("chat_step", sa.Column("timestamp", sa.Float(), nullable=True))
def downgrade() -> None:
"""Remove timestamp column from chat_step table."""
op.drop_column("chat_step", "timestamp")

View file

@ -4,6 +4,7 @@ from typing import List, Optional
from fastapi import Depends, HTTPException, Query, Response, APIRouter
from fastapi.responses import StreamingResponse
from sqlmodel import Session, asc, select
from sqlalchemy.sql.expression import case
from app.component.database import session
from app.component.auth import Auth, auth_must
from fastapi_babel import _
@ -46,7 +47,11 @@ async def share_playback(
async def event_generator():
try:
stmt = select(ChatStep).where(ChatStep.task_id == task_id).order_by(asc(ChatStep.id))
stmt = select(ChatStep).where(ChatStep.task_id == task_id).order_by(
asc(case((ChatStep.timestamp.is_(None), 1), else_=0)),
asc(ChatStep.timestamp),
asc(ChatStep.id)
)
steps = session.exec(stmt).all()
if not steps:
@ -101,6 +106,7 @@ async def create_chat_step(step: ChatStepIn, session: Session = Depends(session)
task_id=step.task_id,
step=step.step,
data=step.data,
timestamp=step.timestamp
)
session.add(chat_step)
session.commit()

View file

@ -11,6 +11,7 @@ class ChatStep(AbstractModel, DefaultTimes, table=True):
task_id: str = Field(index=True)
step: str
data: str = Field(sa_type=JSON)
timestamp: float | None = Field(default=None, nullable=True)
@field_validator("data", mode="before")
@classmethod
@ -34,6 +35,7 @@ class ChatStepIn(BaseModel):
task_id: str
step: str
data: Any
timestamp: float | None = None
class ChatStepOut(BaseModel):
@ -41,3 +43,4 @@ class ChatStepOut(BaseModel):
task_id: str
step: str
data: Any
timestamp: float | None = None