https://retellai.com/?utm_source=discord&utm_medium=seo logo
est ce que tu as des discussions de personnes qui ...
# ❓・ai-evy-support
s
@AI Evy est ce que tu as des discussions de personnes qui ont utilisés leur propres models llm dans le chat doscord ?
a
Thanks for tagging me @so16. I'll look through relevant sources and get back to you shortly.
### Answer Oui, il y a des discussions sur Discord au sujet de l'utilisation de Custom LLM. Dans une discussion, un utilisateur demandait si le repo
retell-custom-llm-node-demo
contenait un exemple d'intégration du multi-prompt LLM. La réponse de l'équipe Retell AI a été que la fonctionnalité multi-prompt est exclusive au Retell LLM et ne sera pas incluse dans le repo de démo [(1) ]() . Il a aussi été précisé que la connexion à l'URL du Retell LLM est nécessaire pour utiliser la fonctionnalité multi-prompt, plutôt que de connecter son propre modèle . Il y a également une discussion sur les agents multilingues via Custom LLM, où un utilisateur demandait comment implémenter des appels multilingues sur un même agent sans affecter les autres appels. Une réponse suggérait simplement de dupliquer l'agent pour chaque langue [(2) ]() . Un autre utilisateur a précisé que les agents multilingues natifs ne sont supportés que pour l'espagnol et l'anglais . Enfin, une discussion aborde comment détecter le moment où l'utilisateur décroche avec un Custom LLM, étant donné que l'événement "call started" survient avant que l'utilisateur ne décroche [(3) ]() .
​ To learn more, see the sources I considered: [[1] Is there an example on integrating the multi-prompt LLM in the retell-custom-llm-node-demo repo?](https://discord.com/channels/1186424376300679209/1227474142010282044) [[2] MultiLingual Agents Via Custom LLM](https://discord.com/channels/1186424376300679209/1338725533009182791) [[3] How to know when the user pick up with Custom LLM and not with event call started as it comes before the user pick up](https://community.retellai.com/t/how-to-know-when-the-user-pick-up-with-custom-llm-and-not-with-event-call-started-as-it-comes-before-the-user-pick-up/742) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
s
@AI Evy est ce que les repo de gothub dans lesquels nous avons des example de custom models sont des codes complets ?
a
Thanks for the follow-up, @so16. I'll get back to you soon.
### Answer Oui, ce sont des implémentations de référence exécutables (« runnable reference implementations ») , toutes deux avec function calling : - Node.js (Express) — OpenAI, Azure OpenAI, OpenRouter [(1) ]() - Python (FastAPI) — OpenAI, Claude À noter cependant : ces repos peuvent déjà être obsolètes. Il faut suivre les guides de la documentation lorsque les deux diffèrent .
​ To learn more, see the sources I considered: [[1] Custom LLM overview](https://docs.retellai.com/integrate-llm/overview) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
s
@AI Evy que dois je prendre en compte avant d'implementer custom model llm ? Est ce que je dois ajouter/connecter: - vad - turn detection - stt - tts Ou autre ? Ou bien je peux uniwuement connecter llm au reste
a
Thanks for the follow-up, @so16. I'll get back to you soon.
### Answer Avec un Custom LLM, vous n'avez besoin de connecter que la génération de réponses (le LLM) . Retell gère le reste de l'appel : téléphonie, transcription, et turn-taking [(1) ]() . Retell ouvre une connexion WebSocket vers votre serveur pour chaque appel, vous envoie la transcription en direct et vous demande des réponses ; vous n'avez qu'à streamer en retour ce que l'agent doit dire . Concrètement, vous n'avez pas à implémenter vous-même : - VAD (Voice Activity Detection) - Turn-taking / détection de fin de tour - STT (transcription) - TTS (synthèse vocale) Ces éléments sont gérés par Retell, puisque Retell "handles the call itself (telephony, transcription, turn-taking, speech synthesis) " . Ce que vous devez implémenter côté serveur, c'est la logique de réponse aux différents types de messages envoyés par Retell via le protocole WebSocket [(2) ]() : -
response_required
: répondre avec un
response
(Retell attend que l'agent parle) -
reminder_required
: répondre avec un
response
(l'appelant est silencieux, Retell veut une relance) -
update_only
: rien à faire (transcription et changements de
turntaking
) -
call_details
: rien à faire (objet complet de l'appel, seulement si demandé dans
config
) -
ping_pong
: renvoyer l'écho (keepalive, seulement si
auto_reconnect
est activé) Et vous devez taguer tout ce que vous envoyez avec un
response_type
: -
response
: le contenu que l'agent doit dire -
config
: envoyé une fois à la connexion pour activer les keepalives, les call details, et les transcriptions d'appels d'outils -
ping_pong
: si
auto_reconnect
est actif -
agent_interrupt
: fait parler l'agent immédiatement -
tool_call_invocation
/
tool_call_result
: enregistre vos appels d'outils dans la transcription - `
update_agent` : change la réactivité, la sensibilité aux interruptions, ou le timing des relances en cours d'appel -
metadata
: transfère des données arbitraires à un frontend d'appel web Points importants à prendre en compte avant de choisir un Custom LLM [(1) ]() : - Vous prenez en charge la latence, l'uptime, et la gestion des reconnexions - Le LLM playground ne peut pas tester un agent Custom LLM, et les tests par simulation/batch les rejettent — seuls les appels web et téléphoniques permettent de tester - Le transfert d'agent ne peut pas cibler un agent Custom LLM - Vos propres appels d'outils n'apparaissent dans la transcription que si vous les reportez vous-même ; Retell enregistre automatiquement seulement ses propres actions (
end_call
,
transfer_call
,
press_digit
) Exemple de message de configuration à envoyer à la connexion [(2) ]() :
Copy code
python
await websocket.send_json(
 {
 "response_type": "config",
 "config": {
 "auto_reconnect": True,
 "call_details": True,
 },
 }
)
await websocket.send_json(
 {
 "response_type": "response",
 "response_id": 0,
 "content": BEGIN_MESSAGE,
 "content_complete": True,
 }
)
Notez que
auto_reconnect: true
vous oblige à échoer les événements
ping_pong
— si Retell ne reçoit rien après 5 secondes, la connexion est fermée et reconnectée, et après 2 reconnexions l'appel se termine avec
error_llm_websocket_lost_connection
.
​ To learn more, see the sources I considered: [[1] Custom LLM overview](https://docs.retellai.com/integrate-llm/overview) [[2] Set up your server](https://docs.retellai.com/integrate-llm/setup-websocket-server) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
s
@AI Evy quels sont les elements a prendre en compte avant de me lancer dans custom models? Quels sont les inconvenients ?
a
Thanks for the follow-up, @so16. I'll get back to you soon.
### Answer Avant de vous lancer dans un Custom LLM, plusieurs éléments sont à considérer. Quand utiliser un Custom LLM Single prompt et conversation flow sont recommandés pour la plupart des agents : ils bénéficient des dernières fonctionnalités et sont déjà optimisés pour la latence [(1) ]() . Un Custom LLM est justifié seulement dans ces cas : - Contraintes de conformité : les prompts et transcriptions doivent être traités dans votre propre infrastructure, ou par un modèle que vous hébergez - Un modèle que Retell n'offre pas : un modèle fine-tuné, un modèle open-weights auto-hébergé, ou un fournisseur hors des options supportées - Logique de réponse au-delà de ce que les frameworks de Retell supportent : votre propre pipeline de retrieval, une boucle d'agent multi-étapes qui s'exécute avant que l'agent parle, ou une orchestration déjà présente dans votre propre code Inconvénients En choisissant un Custom LLM, vous prenez en charge la latence, l'uptime, et la gestion des reconnexions . Vous perdez aussi les fonctionnalités qui supposent que Retell génère les réponses : - Le LLM playground ne peut pas tester un agent Custom LLM, et les tests de simulation et batch le rejettent — seuls les appels web et téléphoniques permettent de le tester - Le transfert d'agent (Agent Transfer) ne peut pas cibler un agent Custom LLM - Vos propres appels d'outils n'apparaissent dans la transcription que si vous les reportez vous-même ; Retell enregistre automatiquement seulement ses propres actions (
end_call
,
transfer_call
,
press_digit
) Points de vigilance opérationnels une fois lancé - Time to first sentence : Retell commence à parler dès qu'il a votre première phrase complète, donc le temps qui compte est le temps jusqu'au premier token plus le temps pour finir cette première phrase, pas
le temps total de génération [(2) ]() . Il faut streamer plutôt que buffer, héberger son serveur proche de l'infrastructure de Retell (principalement aux US) , et surveiller le preprocessing côté fournisseur (ex. le content filtering synchrone d'Azure OpenAI ralentit les réponses) - Prompts pour la voix : tout ce que le modèle écrit est lu à voix haute, donc il faut bannir le formatage (markdown, listes, emoji) , limiter la longueur des tours, et prévoir les erreurs de transcription - Précision des outils : décrire quand ne pas appeler un outil, donner un paramètre
message
aux outils, et limiter le nombre d'outils exposés à un moment donné - Robustesse face aux pannes : activer
auto_reconnect
, toujours fermer une réponse avec
content_complete: true
dans un bloc
finally
, prévoir un fallback en cas de panne du fournisseur, et rendre les effets de bord idempotents puisque Retell peut redemander une réponse et donc déclencher un outil deux fois pour une même requête
​ To learn more, see the sources I considered: [[1] Custom LLM overview](https://docs.retellai.com/integrate-llm/overview) [[2] Best practices](https://docs.retellai.com/integrate-llm/llm-best-practice) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.