FastAPI (Python)
Add NjiraAI middleware to FastAPI apps for automatic context and tracing.
Install
pip install njiraai
Middleware
from fastapi import FastAPI
from pydantic import BaseModel
from njiraai import NjiraAI
from njiraai.middleware import create_middleware
app = FastAPI()
njira = NjiraAI(
api_key="your-api-key",
project_id="your-project-id",
mode="active",
)
# Add middleware
app.add_middleware(create_middleware(njira))
class ChatRequest(BaseModel):
message: str
@app.post("/chat")
async def chat(request: ChatRequest):
# Enforce before processing
decision = await njira.enforce_pre(
input_data=request.message,
metadata={"endpoint": "/chat"},
)
if decision["verdict"] == "block":
return {
"error": "Blocked",
"reasons": decision["reasons"],
"traceId": decision["traceId"],
}
# Your LLM logic here
response = f"Echo: {request.message}"
return {"response": response, "traceId": decision["traceId"]}
What the middleware does
- Creates/propagates
request_idfromx-request-idheader - Sets up per-request trace context via
contextvars - Adds
x-njira-trace-idandx-njira-request-idresponse headers - Flushes traces after the response
Custom user/tags extraction
def get_user(request):
return request.headers.get("x-user-id")
def get_tags(request):
return {"tenant": request.headers.get("x-tenant", "")}
app.add_middleware(create_middleware(njira, get_user=get_user, get_tags=get_tags))