Skip to Content
Mélodium 0.10.1 is now available!
DocsExemplesTraitement de texte distribué

Traitement de texte distribué

Source: 13_distributed_text_processing

Un serveur HTTP qui reçoit du texte brut en entrée et le retourne en majuscules. La transformation s’exécute sur un runner Mélodium cloud provisionné à la demande — le package javascript n’a besoin d’être disponible que sur le runner, pas sur la machine front-end.

Exécution

melodium run 13_distributed_text_processing/Compo.toml \ --api_token "my-api-token"
$ curl -X POST http://127.0.0.1:8080/process -d "hello world from melodium" HELLO WORLD FROM MELODIUM

Fonctionnement

Le modèle Uppercaser et le traitement processText sont tous deux définis dans le même fichier main.mel, mais processText s’exécute à distance :

model distributor: DistributionEngine( treatment = "distributed_text_processing/main::processText", version = "0.1.0" )

Le DistributionEngine référence le traitement par son chemin complet. Lorsque le runner l’exécute, processText instancie son propre modèle Uppercaser localement côté distant.

See in Compositeur Studio

Le traitement distant

processText convertit le flux d’octets brut en chaîne via decode, l’enveloppe en JSON avec fromString<string>(), le traite via le moteur JavaScript, puis désenveloppe le résultat JSON en chaîne simple :

Self.data -> decode.data,text -> wrapStr.value,json -> jsUpper.value,result -> unwrapResult.option,value -> resultStr.value,into -> unwrapStr.option,value -> encode.text,data -> Self.data

L’enveloppement/désenveloppement JSON est nécessaire car JavaScriptEngine.process échange des valeurs Json, pas des chaînes brutes.

See in Compositeur Studio

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 javascript = "0.10.1" # moteur JavaScript embarqué json = "0.10.1" # parsing et sérialisation JSON work = "0.10.1" # provisionnement de runners cloud distrib = "0.10.1" # distribution de flux entre runners