Hosting kani Online
===================
What if you want to host a web service that allows its users to chat with kani? In this example, we show how you can
allow users to connect to a kani hosted on a webserver using a WebSocket connection. Since kani supports asyncio and
is built with parallelization in mind, you can have as many people as you want connect at once!
We'll use `FastAPI `_ to run this webserver. To connect to it, you can use any client
that supports WebSockets, like `Insomnia `_.
.. code-block:: python
engine = OpenAIEngine(api_key, model="gpt-4o-mini")
app = FastAPI()
@app.websocket("/chat")
async def kani_chat(websocket: WebSocket):
# accept the websocket and initialize a kani for the connection
await websocket.accept()
ai = Kani(engine)
# take string messages and send string responses
while True:
try:
data = await websocket.receive_text()
resp = await ai.chat_round_str(data)
await websocket.send_text(resp)
# until the client disconnects
except WebSocketDisconnect:
return
@app.on_event("shutdown")
async def cleanup_kani():
"""When the application shuts down, cleanly close the kani engine."""
await engine.close()
Now, you can run the service and connect to it (by default, ``uvicorn`` binds to ``127.0.0.1:8000``).
.. code-block:: pycon
>>> uvicorn.run(app)
.. image:: /_static/5_advanced_api.png
:align: center
:width: 600
.. tip::
In a real production environment, you might want to send JSON payloads over the WebSocket rather than raw strings.