This is a sample demo repo to show how to have your own LLM plugged into Retell.
This repo currently uses OpenAI endpoint. Feel free to contribute to make
this demo more realistic.
- First install dependencies
pip3 install -r requirements.txt-
Fill out the API keys in
.env -
In another bash, use ngrok to expose this port to public network
ngrok http 8080- Start the websocket server
uvicorn app.server:app --reload --port=8080You should see a fowarding address like
https://dc14-2601-645-c57f-8670-9986-5662-2c9a-adbd.ngrok-free.app, and you
are going to take the hostname dc14-2601-645-c57f-8670-9986-5662-2c9a-adbd.ngrok-free.app, prepend it with wss://, postpend with
/llm-websocket (the route setup to handle LLM websocket connection in the code) to create the url to use in the dashboard to create a new agent. Now
the agent you created should connect with your localhost.
The custom LLM URL would look like
wss://dc14-2601-645-c57f-8670-9986-5662-2c9a-adbd.ngrok-free.app/llm-websocket
The twilio_server.py contains helper functions you could utilize to create phone numbers, tie agent to a number,
make a phone call with an agent, etc. Here we assume you already created agent from last step, and have agent id ready.
To ues these features, follow these steps:
-
Make sure twilio_client is initialized and
/twilio-voice-webhook/(agent_id_path)is inserver.pyfile to set up Twilio voice webhook. What this does is that every time a number of yours in Twilio get called, it would call this webhook which internally calls theregister-callAPI and sends the correct audio websocket address back to Twilio, so it can connects with Retell to start the call. -
Put your ngrok ip address into
.env, it would be something likehttps://dc14-2601-645-c57f-8670-9986-5662-2c9a-adbd.ngrok-free.app. -
(optional) Call
create_phone_numberto get a new number and associate with an agent id. This phone number now can handle inbound calls as long as this server is running. -
(optional) Call
register_inbound_agentto register your Twilio number and associate with an agent id. This phone number now can handle inbound calls as long as this server is running. -
(optional) Call
delete_phone_numberto release a number from your Twilio pool. -
(optional) Call
transfer_callto transfer this on-going call to a destination number. -
(optional) Call
end_callto end this on-going call. -
Call
create_phone_callto start a call with caller & callee number, and your agent Id. This call would use the agent id supplied, and ignore the agent id you set up in step 3 or 4. It automatically hang up if machine/voicemail/IVR is detected. To turn it off, remove "machineDetection, asyncAmd" params.
To run in prod, you probably want to customize your LLM solution, host the code in a cloud, and use that IP to create agent.