import os
from typing import Dict
import traceroot
import uvicorn
from dotenv import find_dotenv, load_dotenv
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
# Load environment variables
dotenv_path = find_dotenv()
if dotenv_path:
load_dotenv(dotenv_path)
# Initialize TraceRoot
traceroot.init()
from traceroot.integrations.fastapi import connect_fastapi
from traceroot.logger import get_logger
logger = get_logger()
# Create FastAPI app and connect TraceRoot
app = FastAPI(title="My TraceRoot App")
connect_fastapi(app)
class QueryRequest(BaseModel):
message: str
@app.post("/process")
@traceroot.trace()
async def process_request(request: QueryRequest) -> Dict[str, str]:
logger.info(f"Processing request: {request.message}")
try:
# Your business logic here
result = await process_message(request.message)
logger.info("Request processed successfully")
return {"status": "success", "response": result}
except Exception as e:
logger.error(f"Error processing request: {str(e)}")
raise HTTPException(status_code=500, detail=f"Processing failed: {str(e)}")
@traceroot.trace()
async def process_message(message: str) -> str:
logger.info(f"Processing message: {message}")
# Simulate some work
processed = f"Processed: {message}"
return processed
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)