Skip to Content
Mélodium 0.10.1 is now available!
DocsExamplesMeeting Summary Service

Meeting Summary Service

Source: 10_meeting_summary_service

An HTTP server that accepts raw audio uploads, transcribes them with the ElevenLabs Scribe API, generates a structured meeting summary with Claude Sonnet, and streams the summary back as the HTTP response. Each request is handled in its own track — the server processes multiple simultaneous uploads without any explicit thread management.

Running

melodium run 10_meeting_summary_service/Compo.toml \ --anthropic_key sk-ant-... \ --elevenlabs_key el-...
$ curl -X POST http://127.0.0.1:8080/summarise \ --data-binary @meeting.wav \ -H "Content-Type: audio/wav" ## Meeting Summary **Overview:** **Key decisions:** - **Action items:** -

How it works

Three models are instantiated at startup:

model server: HttpServer(…) model stt: Stt(elevenlabs_key=elevenlabs_key) model llm: Llm(anthropic_key=anthropic_key)

Stt uses the ElevenLabs scribe_v1 model. Llm uses Claude Sonnet with a structured summarisation system prompt and a lower temperature (0.4) to produce focused, consistent output.

See in Compositeur Studio

Per-request pipeline

The summariseRequest sub-treatment handles everything for one request:

transcribe returns a Block<string>. The stream<string>() adapter converts it to a Stream<string> so it can flow into buildSummaryPrompt, which wraps the raw transcript in a prompt template using entry + format.

chat returns a Stream<string> of response tokens, which are encoded and forwarded directly into connection.data — summary tokens appear in the HTTP response as they are generated.

See in Compositeur Studio

Video Explanation

Dependencies

[dependencies] std = "0.10.1" # core flows, logging, data structures http = "0.10.1" # HTTP server and client net = "0.10.1" # IP address helpers encoding = "0.10.1" # UTF-8 encode / decode ml = "0.10.1" # LLM, STT, TTS and local model inference