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>