@startuml dynamo

package "Inference Pipeline (1)" as inference {
    object "Audio I/O" as audio_io
    package "Speech to Text (1.1)" as asr {
        object "ASR model" as asr_model
    }
    package "NLU (1.2)" as nlu {
        object "NLU model" as nlu_model
    }
    package "Dialog Manager (1.3)" as dialog {

    }
    package "Text to Speech (1.4)" as tts {
        object "TTS model" as tts_model
        object "Speech prompts" as prompts
    }
    object "Robot Output" as out
}

audio_io -down-> asr
asr --> nlu
nlu --> dialog
dialog --> tts
tts_model -> prompts
tts --> audio_io
dialog --> out

package "Training Pipeline (2)" as training {
    package "NLU Training (2.1)" as nlu_training {
        object "NLU Training Data" as nlu_data
    }
    object "LLM (2.2)" as llm
    package "Config Manager (2.3)" as config_manager {

    }
}

nlu_training -> nlu_model : "Provide / Update"
config_manager -down-> llm: "Prompt"
llm -> nlu_data : "Generate"
config_manager -up-> nlu_training: "Trigger"
config_manager -> tts_model : "Trigger"

@enduml
