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 MELODIUMFonctionnement
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.
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.dataL’enveloppement/désenveloppement JSON est nécessaire car JavaScriptEngine.process échange des valeurs Json, pas des chaînes brutes.
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