Skip to content

HOST

Python

One client. Flask, Django, and FastAPI are route wrappers. start_host_session returns origin, token, expires_in, appearance.

1. Run sveda-server

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

export SVEDA_EMBED_ENABLED=true
export SVEDA_BIND=0.0.0.0:8787
export SVEDA_EMBED_HOST_API_KEY=replace-me
export SVEDA_CORS_ORIGINS=http://127.0.0.1:8000
export DEEPSEEK_API_KEY=sk-...
sveda-server

2. Install the Python SDK

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

pip install -e ./sveda-python

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.

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