Serveur de chat LLM
Un serveur HTTP qui accepte des prompts en texte brut via POST /chat et renvoie la réponse du LLM token par token en streaming. La connexion au LLM est déclarée comme modèle et partagée entre toutes les requêtes concurrentes.
Exécution
melodium run 01_text_llm_chat/Compo.toml --api_key sk-... --model claude-sonnet-4-6$ curl -X POST http://127.0.0.1:8080/chat -d "What is Mélodium?"
Mélodium is a dataflow programming language…Fonctionnement
Deux modèles sont instanciés au démarrage :
model server: HttpServer(host=|from_ipv4(|localhost_ipv4()), port=port)
model llm: ChatLlm(api_key=api_key, model=model)ChatLlm encapsule RemoteLlm avec un system prompt fixe et une limite de tokens. Le champ backend sélectionne le fournisseur ("anthropic", "openai", etc.) ; changer de fournisseur revient uniquement à modifier backend et model dans la définition du modèle — le reste du pipeline n’est pas affecté.
Le sous-traitement chat
Chaque connexion entrante est traitée par le sous-traitement chat, qui est un pipeline direct en trois étapes :
Self.data -> decode.data,text -> llmStream.prompt,token -> encode.text,data -> Self.datadecodeconvertit les octets bruts de la requête en texte UTF-8llmStreamenvoie le texte comme prompt et émet les tokens sous forme deStream<string>à mesure qu’ils arriventencodeconvertit chaque token en octets et les transmet directement dansconnection.data
Comme llmStream émet les tokens en flux, ils atteignent la réponse HTTP au fur et à mesure de leur production — sans tampon, sans logique asynchrone explicite.
Le texte du prompt et les erreurs LLM sont transmis indépendamment aux loggers via des connexions séparées, sans interrompre le flux de tokens.
Explication vidéo
Dépendances
[dependencies]
std = "0.10.1" # flux de base, journalisation, structures de données
http = "0.10.1" # serveur et client HTTP
net = "0.10.1" # utilitaires d'adresses IP
encoding = "0.10.1" # encodage / décodage UTF-8
ml = "0.10.1" # inférence LLM, STT, TTS et modèles locaux