Handling different session ids.

This commit is contained in:
Filipi Fuchter
2025-11-29 06:53:37 -03:00
parent ed17aab7dc
commit 7dd5a21b4b

View File

@@ -21,11 +21,7 @@ from fastapi import BackgroundTasks, FastAPI, HTTPException, Request, Response
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import RedirectResponse from fastapi.responses import RedirectResponse
from loguru import logger from loguru import logger
from pipecat.transports.smallwebrtc.request_handler import ( from pipecat_ai_small_webrtc_prebuilt.frontend import SmallWebRTCPrebuiltUI
IceCandidate,
SmallWebRTCPatchRequest,
SmallWebRTCRequest,
)
load_dotenv(override=True) load_dotenv(override=True)
@@ -34,7 +30,7 @@ app = FastAPI()
# Add CORS middleware # Add CORS middleware
app.add_middleware( app.add_middleware(
CORSMiddleware, CORSMiddleware,
allow_origins=["http://localhost:5173", "http://127.0.0.1:5173"], # Add your frontend URL allow_origins=["*"], # Add your frontend URL
allow_credentials=True, allow_credentials=True,
allow_methods=["*"], allow_methods=["*"],
allow_headers=["*"], allow_headers=["*"],
@@ -50,14 +46,16 @@ bedrock = boto3.client("bedrock-agentcore")
# You can find this inside .bedrock_agentcore.yaml # You can find this inside .bedrock_agentcore.yaml
AGENT_RUNTIME_ARN = os.getenv("AGENT_RUNTIME_ARN") AGENT_RUNTIME_ARN = os.getenv("AGENT_RUNTIME_ARN")
# Mount the frontend at /
app.mount("/client", SmallWebRTCPrebuiltUI)
@app.get("/", include_in_schema=False) @app.get("/", include_in_schema=False)
async def root_redirect(): async def root_redirect():
return RedirectResponse(url="/client/") return RedirectResponse(url="/client/")
@app.post("/api/offer") async def post_offer(request: Request, session_id: str):
async def offer(request: Request):
"""Handle WebRTC offer requests via SmallWebRTCRequestHandler.""" """Handle WebRTC offer requests via SmallWebRTCRequestHandler."""
data = await request.json() data = await request.json()
@@ -65,8 +63,7 @@ async def offer(request: Request):
agentRuntimeArn=AGENT_RUNTIME_ARN, agentRuntimeArn=AGENT_RUNTIME_ARN,
contentType="application/json", contentType="application/json",
payload=json.dumps(data), payload=json.dumps(data),
# TODO: create a custom randon id runtimeSessionId=session_id,
runtimeSessionId="user-123456-conversation-111115555",
) )
answer_sdp = None answer_sdp = None
@@ -103,6 +100,7 @@ async def offer(request: Request):
return answer_sdp return answer_sdp
@app.post("/start") @app.post("/start")
async def rtvi_start(request: Request): async def rtvi_start(request: Request):
"""Mimic Pipecat Cloud's /start endpoint.""" """Mimic Pipecat Cloud's /start endpoint."""
@@ -152,8 +150,8 @@ async def proxy_request(
if path.endswith("api/offer"): if path.endswith("api/offer"):
try: try:
if request.method == HTTPMethod.POST.value: if request.method == HTTPMethod.POST.value:
return await offer(request) return await post_offer(request, session_id)
except Exception as e: except Exception as e:
logger.error(f"Failed to parse WebRTC request: {e}") logger.error(f"Failed to parse WebRTC request: {e}")
return Response(content="Invalid WebRTC request", status_code=400) return Response(content="Invalid WebRTC request", status_code=400)