# Architektura przepływu audio → prompt

## Abstract

`server.py` odbiera nowe audio i przekazuje je do `next_prompt_manager.py`.  
`next_prompt_manager.py` zarządza kolejką zadań, uruchamia `speech_to_text.py` i odkłada gotowy tekst do kolejki wynikowej.  
`what_next()` w MCP pobiera z managera kolejny gotowy prompt.  
`config.py` trzyma wspólną konfigurację i ścieżki.

---

## 1. `server.py`

Odpowiada za wejście HTTP.

Jego zadania:
- przyjąć audio na endpoint,
- opcjonalnie przyjąć `xpath`,
- zapisać plik tymczasowo,
- przekazać zadanie do `next_prompt_manager.py`,
- zwrócić proste potwierdzenie techniczne.

Nie robi transkrypcji i nie zwraca gotowego tekstu.

---

## 2. `next_prompt_manager.py`

To centralny koordynator.

Jego zadania:
- przyjmować nowe nagrania od `server.py`,
- trzymać kolejkę wejściową audio,
- przetwarzać zadania w tle,
- wywoływać `speech_to_text.py`,
- odkładać gotowy prompt do kolejki wynikowej,
- udostępniać metodę, z której korzysta `what_next()`.

---

## 3. `speech_to_text.py`

To moduł wykonawczy do audio.

Jego zadania:
- przekonwertować `webm` do `mp3`,
- wykonać transkrypcję,
- opcjonalnie poprawić tekst,
- zwrócić gotowy wynik tekstowy,
- posprzątać pliki tymczasowe.

Nie zna MCP, endpointów ani kolejek.

---

## 4. `config.py`

To moduł wspólny.

Jego zadania:
- trzymać ścieżki lokalne,
- czytać `config.properties`,
- udostępniać prostą konfigurację `key=value`,
- trzymać wspólne wyjątki.

---

## 5. `what_next()` w MCP

To konsument gotowych promptów.

Jego zadania:
- przyjąć informację o poprzedniej operacji,
- poczekać na kolejny prompt od managera,
- zwrócić go dalej,
- obsłużyć timeout.

Nie pracuje bezpośrednio na audio.

---

## 6. Przepływ

1. `server.py` odbiera audio.  
2. `server.py` zapisuje plik tymczasowo.  
3. `server.py` przekazuje zadanie do `next_prompt_manager.py`.  
4. `next_prompt_manager.py` odkłada zadanie do kolejki wejściowej.  
5. Worker managera wywołuje `speech_to_text.py`.  
6. `speech_to_text.py` zwraca gotowy tekst.  
7. `next_prompt_manager.py` odkłada tekst do kolejki wynikowej.  
8. `what_next()` pobiera kolejny gotowy prompt.  

---

## 7. Podział w skrócie

- `server.py` — przyjmuje audio  
- `next_prompt_manager.py` — zarządza przepływem  
- `speech_to_text.py` — zamienia audio na tekst  
- `config.py` — konfiguracja  
- `what_next()` — odbiera gotowy prompt  
