diff --git a/services/asr/Dockerfile b/services/asr/Dockerfile new file mode 100644 index 0000000..bad8a0b --- /dev/null +++ b/services/asr/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/services/asr/app.py b/services/asr/app.py new file mode 100644 index 0000000..197ae9e --- /dev/null +++ b/services/asr/app.py @@ -0,0 +1,15 @@ +from fastapi import FastAPI +import redis +import os + +app = FastAPI() + +redis_host = os.getenv("REDIS_HOST", "localhost") +redis_port = int(os.getenv("REDIS_PORT", 6379)) +r = redis.Redis(host=redis_host, port=redis_port, decode_responses=True) + +@app.get("/health") +async def health(): + return {"status": "ok", "service": "asr"} + +# Позже здесь будут эндпоинты для приёма аудио и возврата текста diff --git a/services/asr/requirements.txt b/services/asr/requirements.txt new file mode 100644 index 0000000..69de3dc --- /dev/null +++ b/services/asr/requirements.txt @@ -0,0 +1,5 @@ +fastapi==0.115.0 +uvicorn[standard]==0.30.1 +redis==5.0.4 +pydantic==2.8.2 +python-dotenv==1.0.1 diff --git a/services/speaker-id/Dockerfile b/services/speaker-id/Dockerfile new file mode 100644 index 0000000..bad8a0b --- /dev/null +++ b/services/speaker-id/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/services/speaker-id/app.py b/services/speaker-id/app.py new file mode 100644 index 0000000..db216c1 --- /dev/null +++ b/services/speaker-id/app.py @@ -0,0 +1,16 @@ +from fastapi import FastAPI +import redis +import os +import json + +app = FastAPI() + +redis_host = os.getenv("REDIS_HOST", "localhost") +redis_port = int(os.getenv("REDIS_PORT", 6379)) +r = redis.Redis(host=redis_host, port=redis_port, decode_responses=True) + +@app.get("/health") +async def health(): + return {"status": "ok", "service": "speaker-id"} + +# Позже здесь будут эндпоинты для регистрации и идентификации diff --git a/services/speaker-id/embeddings.json b/services/speaker-id/embeddings.json new file mode 100644 index 0000000..56db55d --- /dev/null +++ b/services/speaker-id/embeddings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/services/speaker-id/requirements.txt b/services/speaker-id/requirements.txt new file mode 100644 index 0000000..69de3dc --- /dev/null +++ b/services/speaker-id/requirements.txt @@ -0,0 +1,5 @@ +fastapi==0.115.0 +uvicorn[standard]==0.30.1 +redis==5.0.4 +pydantic==2.8.2 +python-dotenv==1.0.1 diff --git a/services/tts/Dockerfile b/services/tts/Dockerfile new file mode 100644 index 0000000..bad8a0b --- /dev/null +++ b/services/tts/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/services/tts/app.py b/services/tts/app.py new file mode 100644 index 0000000..38d5ec4 --- /dev/null +++ b/services/tts/app.py @@ -0,0 +1,15 @@ +from fastapi import FastAPI +import redis +import os + +app = FastAPI() + +redis_host = os.getenv("REDIS_HOST", "localhost") +redis_port = int(os.getenv("REDIS_PORT", 6379)) +r = redis.Redis(host=redis_host, port=redis_port, decode_responses=True) + +@app.get("/health") +async def health(): + return {"status": "ok", "service": "tts"} + +# Позже здесь будет эндпоинт /synthesize diff --git a/services/tts/requirements.txt b/services/tts/requirements.txt new file mode 100644 index 0000000..69de3dc --- /dev/null +++ b/services/tts/requirements.txt @@ -0,0 +1,5 @@ +fastapi==0.115.0 +uvicorn[standard]==0.30.1 +redis==5.0.4 +pydantic==2.8.2 +python-dotenv==1.0.1 diff --git a/services/vad/Dockerfile b/services/vad/Dockerfile new file mode 100644 index 0000000..bad8a0b --- /dev/null +++ b/services/vad/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/services/vad/app.py b/services/vad/app.py new file mode 100644 index 0000000..fb2b4f5 --- /dev/null +++ b/services/vad/app.py @@ -0,0 +1,26 @@ +from fastapi import FastAPI +import redis +import os + +app = FastAPI() + +redis_host = os.getenv("REDIS_HOST", "localhost") +redis_port = int(os.getenv("REDIS_PORT", 6379)) +r = redis.Redis(host=redis_host, port=redis_port, decode_responses=True) + +@app.get("/health") +async def health(): + return {"status": "ok", "service": "vad"} + +@app.websocket("/audio-stream") +async def audio_stream(websocket): + await websocket.accept() + print("Client connected to VAD") + try: + while True: + data = await websocket.receive_bytes() + # Пока ничего не делаем с данными + # В будущем здесь будет VAD-обработка + pass + except Exception as e: + print(f"VAD connection closed: {e}") diff --git a/services/vad/requirements.txt b/services/vad/requirements.txt new file mode 100644 index 0000000..b0bf70d --- /dev/null +++ b/services/vad/requirements.txt @@ -0,0 +1,6 @@ +fastapi==0.115.0 +uvicorn[standard]==0.30.1 +redis==5.0.4 +pydantic==2.8.2 +python-dotenv==1.0.1 +# Позже добавим silero-vad, numpy, torch и т.д.