Saltar al contenido

HOST

Python

Un cliente. Flask, Django, FastAPI son wrappers de ruta.

Python

Un cliente. Flask, Django, FastAPI son wrappers de ruta.

sveda-python-sdk, start_host_session, POST /sveda/session en Flask, Django, FastAPI o stdlib.

AGENT PROMPT

Paste into Cursor

Copy this into Cursor, Claude Code, or any coding agent. It installs Sveda against this stack using public packages.

Install Sveda into this Python project.

Read:
- https://sveda.dev/docs/hosts/python
- https://sveda.dev/docs/client
- https://sveda.dev/docs/deploy
- https://sveda.dev/llms.txt

Follow the numbered steps on the Python page. If unsure which frontend this repo uses, ask the user.

1. Run sveda-server

CORS origin is the Flask / Django / FastAPI URL (8012–8014 in the playground).

# ghcr.io/neresson/sveda-server:latest
# curl -fsSL https://raw.githubusercontent.com/neresson/sveda/main/deploy/compose.yaml -o compose.yaml && curl -fsSL https://raw.githubusercontent.com/neresson/sveda/main/deploy/compose.env -o .env && # Edit .env: a model key, SVEDA_EMBED_HOST_API_KEY, SVEDA_CORS_ORIGINS &&  && docker compose up -d && curl -s http://127.0.0.1:8787/sveda/ready

services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: sveda
      POSTGRES_PASSWORD: sveda
      POSTGRES_DB: sveda
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U sveda -d sveda"]
      interval: 5s
      timeout: 3s
      retries: 10
    volumes:
      - sveda-postgres:/var/lib/postgresql/data
  redis:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 10
  sveda-server:
    image: ghcr.io/neresson/sveda-server:latest
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    ports:
      - "8787:8787"
    environment:
      SVEDA_BIND: 0.0.0.0:8787
      SVEDA_EMBED_ENABLED: "true"
      SVEDA_DATABASE_URL: postgres://sveda:sveda@postgres:5432/sveda
      SVEDA_REDIS_URL: redis://redis:6379
      SVEDA_APP_KEY: ${SVEDA_APP_KEY:-dev-app-key-change-me}
      SVEDA_ADMIN_API_KEY: ${SVEDA_ADMIN_API_KEY:-dev-admin-key-change-me}
      SVEDA_EMBED_HOST_API_KEY: ${SVEDA_EMBED_HOST_API_KEY:-dev-host-key-change-me}
      SVEDA_CORS_ORIGINS: ${SVEDA_CORS_ORIGINS:-*}
      DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
volumes:
  sveda-postgres:

2. Install the Python SDK

Package name sveda-python-sdk (import sveda, httpx). Until it is on PyPI, install from the checkout next to your app.

pip install sveda-python-sdk

3. Env

SVEDA_CLIENT_BASE_URL=http://127.0.0.1:8787
SVEDA_CLIENT_HOST_API_KEY=replace-me

4. Mint helper

start_host_session is the whole host contract. Frameworks only wrap it in a POST route. Without Flask/Django/FastAPI, call it from any WSGI/ASGI handler. Map the authenticated user to a named policy on mint when you need capability limits — embed policies.

import os
from sveda import start_host_session

payload = start_host_session(
    os.environ["SVEDA_CLIENT_BASE_URL"],
    os.environ["SVEDA_CLIENT_HOST_API_KEY"],
    "python-host",
)
# origin, token, expires_in, appearance

5. Flask

Inject sveda_origin in a context processor. Hide chat buttons when it is empty.

@app.post("/sveda/session")
def sveda_session():
    origin = os.environ.get("SVEDA_CLIENT_BASE_URL", "").rstrip("/")
    key = os.environ.get("SVEDA_CLIENT_HOST_API_KEY", "")
    if not origin or not key:
        return jsonify({"message": "Set SVEDA_CLIENT_BASE_URL and SVEDA_CLIENT_HOST_API_KEY"}), 503
    return jsonify(start_host_session(origin, key, "flask-playground"))

6. Django

Mark the session view csrf_exempt unless the layout already ships a CSRF meta tag (the host script will send X-CSRF-TOKEN when present).

# urls.py
path("sveda/session", views.sveda_session),

# views.py
@csrf_exempt
def sveda_session(request):
    if request.method != "POST":
        return HttpResponseNotAllowed(["POST"])
    origin = os.environ.get("SVEDA_CLIENT_BASE_URL", "").rstrip("/")
    key = os.environ.get("SVEDA_CLIENT_HOST_API_KEY", "")
    if not origin or not key:
        return JsonResponse(
            {"message": "Set SVEDA_CLIENT_BASE_URL and SVEDA_CLIENT_HOST_API_KEY"},
            status=503,
        )
    return JsonResponse(start_host_session(origin, key, "django-playground"))

7. FastAPI

Jinja context processor can pass sveda_origin the same way Flask does.

@app.post("/sveda/session")
def sveda_session():
    origin = os.environ.get("SVEDA_CLIENT_BASE_URL", "").rstrip("/")
    key = os.environ.get("SVEDA_CLIENT_HOST_API_KEY", "")
    if not origin or not key:
        return JSONResponse(
            {"message": "Set SVEDA_CLIENT_BASE_URL and SVEDA_CLIENT_HOST_API_KEY"},
            status_code=503,
        )
    return JSONResponse(start_host_session(origin, key, "fastapi-playground"))

8. Page markup

Same buttons and module script on every Python host.

<html
  lang="en"
  data-sveda-origin="http://127.0.0.1:8787"
  data-sveda-session="/sveda/session"
>
  <body>
    <button type="button" data-sveda-open="js">Open JS chat</button>
    <button type="button" data-sveda-open="iframe">Open iframe chat</button>
    <script type="module" src="/sveda-host.js"></script>
  </body>
</html>

Mint from the host.

Install the language SDK. Expose POST /sveda/session. Open JS chat or an iframe.

Host SDKs