In the project, one of the major challenges is the automatic identification of the beginning and end of radio chronicles (e.g., “France Inter’s 7/10”) within an uninterrupted audio stream.
Rather than relying on a single method, a research and development (R&D) framework was developed to find the best method:


To see the process in more detail:
Detection via audio or detection via text
To allow these methods to coexist, a standardized JSON output format was imposed. Each detector must provide:
[
{
"label": "7am News", // chronicle name
"start": 120.5, // Start of the chronicle (in seconds)
"end": 240.0, // End of the chronicle (in seconds)
"detected_at": 135.2, // Precise moment of confirmation by the AI
"confidence": 0.95 // Model confidence index
}
]
This format also allows for evaluating these methods, detailed in this article.
Since detection is done in real-time, a stream simulator is required. Instead of processing a static audio file, the audio is cut into buffers of a few seconds to simulate real-time reception. This allows for measuring not only the precision of the AI but also its responsiveness (latency), a crucial factor for an “instant” radio-on-demand service.
This architecture allows GroovyMorning to remain agnostic towards AI models: the integration of a new cutting-edge model is facilitated by adhering to this standard interface.

The DeepSeek API (deepseek-v4-flash) is called to detect phrases corresponding to the start of chronicles, from a list of chronicles to be detected (provided in order). The text is analyzed as it arrives, simulating a live stream.
Few-shot prompting is used to provide examples directly in the prompt (examples of chronicle start phrases).
Once the LLM detects a chronicle start in the stream, it notifies the recording module via HTTP of the start of the chronicle.
To avoid gross errors, chronicles are compared with their theoretical schedule. A detected chronicle whose schedule has already passed is ignored.
The solution is more detailed in this article.