Palantyra

Framework Integration

Integrate Palantyra with popular Python frameworks

Framework Integration

FastAPI

from fastapi import FastAPI, Request
import palantyra

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    palantyra.initialize(
        project_api_key="your-api-key",
        service_name="fastapi-ai-service"
    )

@app.middleware("http")
async def trace_requests(request: Request, call_next):
    with palantyra.start_as_current_span(
        name=f"{request.method} {request.url.path}",
        metadata={
            "method": request.method,
            "path": request.url.path,
            "client_ip": request.client.host
        }
    ):
        response = await call_next(request)
        palantyra.set_span_attributes({
            "status_code": response.status_code
        })
        return response

@app.post("/chat")
async def chat_endpoint(message: str):
    with palantyra.start_as_current_span(name="Chat Handler"):
        response = await async_client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": message}]
        )
        return {"response": response.choices[0].message.content}

Django

# settings.py
MIDDLEWARE = [
    'myapp.middleware.PalantyraMiddleware',
    # ... other middleware
]

# middleware.py
import palantyra
from django.utils.deprecation import MiddlewareMixin

class PalantyraMiddleware(MiddlewareMixin):
    def __init__(self, get_response):
        self.get_response = get_response
        palantyra.initialize(
            project_api_key="your-api-key",
            service_name="django-ai-app"
        )
    
    def __call__(self, request):
        with palantyra.start_as_current_span(
            name=f"{request.method} {request.path}",
            metadata={
                "method": request.method,
                "path": request.path,
                "user": str(request.user) if request.user else None
            }
        ):
            response = self.get_response(request)
            palantyra.set_span_attributes({
                "status_code": response.status_code
            })
            return response

# views.py
from django.http import JsonResponse
import palantyra

@palantyra.observe(name="Chat View")
def chat_view(request):
    message = request.POST.get('message')
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": message}]
    )
    return JsonResponse({
        "response": response.choices[0].message.content
    })

Flask

from flask import Flask, request, jsonify, g
import palantyra

app = Flask(__name__)

# Initialize on startup
palantyra.initialize(
    project_api_key="your-api-key",
    service_name="flask-ai-service"
)

@app.before_request
def before_request():
    g.trace_span = palantyra.start_as_current_span(
        name=f"{request.method} {request.path}",
        metadata={
            "method": request.method,
            "path": request.path
        }
    ).__enter__()

@app.after_request
def after_request(response):
    if hasattr(g, 'trace_span'):
        palantyra.set_span_attributes({
            "status_code": response.status_code
        })
        g.trace_span.__exit__(None, None, None)
    return response

@app.route('/chat', methods=['POST'])
@palantyra.observe(name="Chat Endpoint")
def chat():
    message = request.json.get('message')
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": message}]
    )
    return jsonify({
        "response": response.choices[0].message.content
    })