90 lines
2.4 KiB
Python
90 lines
2.4 KiB
Python
import os
|
|
import argparse
|
|
import uvicorn
|
|
|
|
from typing import Optional
|
|
from pathlib import Path
|
|
|
|
from fastapi import FastAPI, Request, HTTPException
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.staticfiles import StaticFiles
|
|
from fastapi.responses import FileResponse, JSONResponse
|
|
|
|
from dotenv import load_dotenv
|
|
load_dotenv(override=True)
|
|
|
|
|
|
# ------------ Configuration ------------ #
|
|
|
|
MAX_SESSION_TIME = 5 * 1000
|
|
BOT_CAN_IDLE = True
|
|
SERVE_STATIC = True
|
|
STATIC_DIR = "client/dist"
|
|
STATIC_ROUTE = "/static"
|
|
STATIC_INDEX = "index.html"
|
|
|
|
|
|
# ----------------- API ----------------- #
|
|
|
|
app = FastAPI()
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"]
|
|
)
|
|
|
|
# Optionally serve client static files
|
|
if SERVE_STATIC:
|
|
app.mount(STATIC_ROUTE, StaticFiles(
|
|
directory=STATIC_DIR, html=True), name="static")
|
|
|
|
@app.get("/{path_name:path}", response_class=FileResponse)
|
|
async def catch_all(path_name: Optional[str] = ""):
|
|
if path_name == "":
|
|
return FileResponse(f"{STATIC_DIR}/{STATIC_INDEX}")
|
|
|
|
file_path = Path(STATIC_DIR) / (path_name or "")
|
|
|
|
if file_path.is_file():
|
|
return file_path
|
|
|
|
html_file_path = file_path.with_suffix(".html")
|
|
if html_file_path.is_file():
|
|
return FileResponse(html_file_path)
|
|
|
|
raise HTTPException(
|
|
status_code=404, detail="Page not found")
|
|
|
|
|
|
@app.post("/start_bot")
|
|
async def start_bot(request: Request):
|
|
return JSONResponse({"bot_id": 123, "user_token": "abc", "room_url": "https://jpt.daily.co/hello"})
|
|
|
|
|
|
# ----------------- Main ----------------- #
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Pipecat Bot Runner")
|
|
parser.add_argument("--host", type=str,
|
|
default=os.getenv("HOST", "localhost"), help="Host address")
|
|
parser.add_argument("--port", type=int,
|
|
default=os.getenv("PORT", 7860), help="Port number")
|
|
parser.add_argument("--reload", action="store_true",
|
|
default=True, help="Reload code on change")
|
|
|
|
config = parser.parse_args()
|
|
|
|
try:
|
|
uvicorn.run(
|
|
"pipecat:app",
|
|
host=config.host,
|
|
port=config.port,
|
|
reload=config.reload
|
|
)
|
|
|
|
except KeyboardInterrupt:
|
|
print("Pipecat runner shutting down...")
|