feat: Add LangGraph streaming with real-time UI updates
- Add streaming schemas and events - Implement run_review_stream in ReviewerAgent - Update task_worker to broadcast streaming events via WebSocket - Create ReviewStream component for real-time progress visualization - Integrate ReviewStream into ReviewDetail page - Show agent steps, LLM messages, and progress in real-time
This commit is contained in:
@@ -159,14 +159,45 @@ class ReviewTaskWorker:
|
||||
await db.commit()
|
||||
await db.refresh(review)
|
||||
|
||||
# Run review agent
|
||||
# Run review agent with streaming
|
||||
logger.info(f" 🤖 Запуск AI review для PR #{pull_request.pr_number}")
|
||||
|
||||
# Import broadcast function
|
||||
from app.main import manager
|
||||
from datetime import datetime as dt
|
||||
|
||||
# Create event handler
|
||||
async def on_review_event(event: dict):
|
||||
"""Handle review events and broadcast to clients"""
|
||||
try:
|
||||
# Prepare event data
|
||||
event_data = {
|
||||
"type": event.get("type", "agent_update"),
|
||||
"review_id": review.id,
|
||||
"pr_number": pull_request.pr_number,
|
||||
"timestamp": dt.utcnow().isoformat(),
|
||||
"data": event
|
||||
}
|
||||
|
||||
# Broadcast to all connected clients
|
||||
await manager.broadcast(event_data)
|
||||
|
||||
# Log the event
|
||||
if event.get("type") == "agent_step":
|
||||
step = event.get("step", "unknown")
|
||||
logger.info(f" 📍 Step: {step}")
|
||||
elif event.get("type") == "llm_message":
|
||||
message = event.get("message", "")[:100]
|
||||
logger.debug(f" 💬 LLM: {message}...")
|
||||
except Exception as e:
|
||||
logger.error(f" ❌ Ошибка broadcast события: {e}")
|
||||
|
||||
agent = ReviewerAgent(db)
|
||||
await agent.run_review(
|
||||
await agent.run_review_stream(
|
||||
review_id=review.id,
|
||||
pr_number=pull_request.pr_number,
|
||||
repository_id=repository.id
|
||||
repository_id=repository.id,
|
||||
on_event=on_review_event
|
||||
)
|
||||
|
||||
logger.info(f" ✅ Review завершен для PR #{pull_request.pr_number}")
|
||||
|
||||
Reference in New Issue
Block a user