techprotrade's picture
Deploy ATOM FastAPI command center runtime (part 9)
81e3673 verified
Raw
History Blame Contribute Delete
3.92 kB
"""
Minimal test server for testing the streaming and canvas implementation.
This bypasses existing backend issues to test only the new functionality.
"""
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
# Create minimal FastAPI app
app = FastAPI(title="Atom Test Server")
# Add CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Import and include ONLY the routes we created/tested
try:
print("Importing canvas routes...")
from api.canvas_routes import router as canvas_router
app.include_router(canvas_router)
print("✓ Canvas routes loaded")
except Exception as e:
print(f"✗ Canvas routes failed: {e}")
try:
print("Importing atom agent routes (for streaming endpoint)...")
# We'll create a minimal streaming endpoint inline since the full module has dependencies
from typing import Any, Dict, List, Optional
from pydantic import BaseModel
class ChatRequest(BaseModel):
message: str
user_id: str
session_id: Optional[str] = None
workspace_id: Optional[str] = None
current_page: Optional[str] = None
conversation_history: Optional[List[Dict]] = None
@app.post("/api/atom-agent/chat/stream")
async def chat_stream(request: ChatRequest):
"""Test streaming endpoint"""
import uuid
from core.websockets import manager as ws_manager
message_id = str(uuid.uuid4())
user_channel = f"user:{request.user_id}"
# Simulate streaming
test_response = "This is a test streaming response. The implementation is working correctly!"
# Send tokens
for i, char in enumerate(test_response):
await ws_manager.broadcast(user_channel, {
"type": "streaming:update",
"id": message_id,
"delta": char,
"complete": False
})
# Send completion
await ws_manager.broadcast(user_channel, {
"type": "streaming:complete",
"id": message_id,
"content": test_response,
"complete": True
})
return {
"success": True,
"message_id": message_id,
"streamed": True
}
print("✓ Streaming endpoint loaded (inline)")
except Exception as e:
print(f"✗ Streaming endpoint failed: {e}")
# WebSocket endpoint
from fastapi import WebSocket
from core.websockets import manager as ws_manager
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
"""WebSocket endpoint for testing"""
user = await ws_manager.connect(websocket, token="dev-token")
if user:
print(f"✓ User {user.id} connected via WebSocket")
try:
while True:
await websocket.receive_text()
except:
pass
finally:
ws_manager.disconnect(websocket, user.id)
else:
await websocket.close()
@app.get("/")
async def root():
return {"status": "ok", "message": "Atom Test Server - Streaming & Canvas Implementation"}
@app.get("/health")
async def health():
return {"status": "healthy", "implementation": "streaming + canvas"}
if __name__ == "__main__":
print("\n" + "="*60)
print("ATOM TEST SERVER")
print("="*60)
print("Testing Implementation:")
print(" - Phase 1: LLM Token Streaming")
print(" - Phase 2: Canvas Chart Components")
print(" - Phase 3: Interactive Form System")
print("="*60)
print("\nStarting server on http://localhost:8000")
print("WebSocket: ws://localhost:8000/ws?token=dev-token")
print("\nPress Ctrl+C to stop\n")
uvicorn.run(app, host="0.0.0.0", port=8000, log_level="info")