fix
This commit is contained in:
@@ -13,6 +13,7 @@ from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.api.deps import get_current_user, get_settings_dict
|
||||
from app.config import get_settings
|
||||
from app.core.llm import LlmClient, MockLlmClient
|
||||
from app.core.logging import get_logger
|
||||
from app.db import get_db
|
||||
@@ -91,6 +92,39 @@ async def get_state(
|
||||
}
|
||||
|
||||
|
||||
@router.get("/worlds/{world_id}/history")
|
||||
async def get_history(
|
||||
world_id: uuid.UUID,
|
||||
before: int | None = None, # sequence_number to load before (for pagination)
|
||||
limit: int = 20,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
user=Depends(get_current_user),
|
||||
) -> dict:
|
||||
"""Return full chat history with pagination (for scroll-up loading)."""
|
||||
world = await _load_world(db, world_id, user)
|
||||
stmt = select(Step).where(
|
||||
Step.world_id == world.id, Step.deleted_at.is_(None)
|
||||
)
|
||||
if before is not None:
|
||||
stmt = stmt.where(Step.sequence_number < before)
|
||||
stmt = stmt.order_by(Step.sequence_number.desc()).limit(limit)
|
||||
rows = (await db.execute(stmt)).scalars().all()
|
||||
steps = [
|
||||
{
|
||||
"id": str(s.id), "sequence_number": s.sequence_number,
|
||||
"player_action": s.player_action, "scene_text": s.scene_text,
|
||||
"suggested_actions": s.suggested_actions, "created_at": s.created_at.isoformat(),
|
||||
}
|
||||
for s in reversed(rows) # oldest first
|
||||
]
|
||||
has_more = len(rows) == limit
|
||||
return {
|
||||
"steps": steps,
|
||||
"has_more": has_more,
|
||||
"oldest_sequence": steps[0]["sequence_number"] if steps else None,
|
||||
}
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------- #
|
||||
# World builder stream (SSE)
|
||||
# --------------------------------------------------------------------------- #
|
||||
@@ -107,7 +141,7 @@ async def builder_stream(
|
||||
preset = (
|
||||
await db.execute(select(WorldPreset).where(WorldPreset.id == world.preset_id))
|
||||
).scalar_one_or_none()
|
||||
emitter = SseEmitter()
|
||||
emitter = SseEmitter(debug=get_settings().debug)
|
||||
player_name = (world.environment or {}).get("player", {}).get("name", "Hero")
|
||||
notes = world.description
|
||||
llm = _llm_factory(settings)
|
||||
@@ -152,7 +186,7 @@ async def editor_stream(
|
||||
settings: dict = Depends(get_settings_dict),
|
||||
) -> StreamingResponse:
|
||||
world = await _load_world(db, world_id, user)
|
||||
emitter = SseEmitter()
|
||||
emitter = SseEmitter(debug=get_settings().debug)
|
||||
llm = _llm_factory(settings)
|
||||
|
||||
async def run_bg():
|
||||
@@ -234,7 +268,7 @@ async def iterate_stream(
|
||||
).scalar_one_or_none()
|
||||
if step is None:
|
||||
raise HTTPException(404, "step not found")
|
||||
emitter = SseEmitter()
|
||||
emitter = SseEmitter(debug=get_settings().debug)
|
||||
llm = _llm_factory(settings)
|
||||
|
||||
async def run_bg():
|
||||
@@ -349,7 +383,7 @@ async def intro_stream(
|
||||
settings: dict = Depends(get_settings_dict),
|
||||
) -> StreamingResponse:
|
||||
world = await _load_world(db, world_id, user)
|
||||
emitter = SseEmitter()
|
||||
emitter = SseEmitter(debug=get_settings().debug)
|
||||
llm = _llm_factory(settings)
|
||||
|
||||
async def run_bg():
|
||||
|
||||
Reference in New Issue
Block a user