Skip to Content
Mélodium 0.10.1 is now available!
DocsExemplesChat vision

Chat vision

Source: 12_vision_chat

Envoie une URL d’image avec une question à un LLM capable de vision (GPT-4o) et retourne la description. Deux points d’entrée : main pour un appel CLI unique, et server pour un serveur HTTP acceptant des requêtes JSON.

Exécution

CLI one-shot :

melodium run 12_vision_chat/Compo.toml \ --image_url "https://example.com/photo.jpg" \ --question "What do you see?" \ --openai_key sk-...

Serveur HTTP :

melodium run 12_vision_chat/Compo.toml server -- --openai_key sk-... --port 8080
$ curl -X POST http://127.0.0.1:8080/describe \ -H "Content-Type: application/json" \ -d '{"url":"https://example.com/photo.jpg","question":"Describe this image."}' L'image montre un…

Fonctionnement

Les deux points d’entrée instancient le même modèle Vision :

model Vision(const openai_key: string) : RemoteLlm { backend = "openai" model = "gpt-4o" system = "You are an expert image analyst. Describe images clearly and in detail." }

main — point d’entrée CLI

See in Compositeur Studio

describeUrl reçoit l’URL de l’image et la question comme paramètres const, émet une StringMap, et utilise format pour construire la chaîne du prompt — pas de concaténation de chaînes dans le dataflow. La réponse est envoyée en fan-out au journal et à un fichier local simultanément.

server — point d’entrée HTTP

See in Compositeur Studio

Le sous-traitement handleDescribe utilise un modèle JavaScriptEngine (PromptBuilder) pour parser le corps JSON et construire le prompt dynamiquement. C’est plus flexible qu’une chaîne de format fixe quand la structure d’entrée peut varier.

decode() -> toJson() -> unwrapBody -> buildPrompt[engine=promptBuilder] -> unwrapPrompt -> promptStr -> promptOr -> chat[llm=llm]

tryToString<Json>() extrait une chaîne simple du résultat JSON avec un retour Option<string>, que unwrapOr<string>(default="") résout ensuite en repli sûr.

Dépendances

[dependencies] std = "0.10.1" # flux de base, journalisation, structures de données fs = "0.10.1" # lecture/écriture de fichiers locaux http = "0.10.1" # serveur et client HTTP net = "0.10.1" # utilitaires d'adresses IP json = "0.10.1" # parsing et sérialisation JSON encoding = "0.10.1" # encodage / décodage UTF-8 javascript = "0.10.1" # moteur JavaScript embarqué ml = "0.10.1" # inférence LLM, STT, TTS et modèles locaux