From 447f9d360c92e9b2517dc33edb89722f64203878 Mon Sep 17 00:00:00 2001 From: remsky Date: Fri, 4 Apr 2025 16:50:46 -0600 Subject: [PATCH] Ruff check --- api/src/core/config.py | 2 +- api/src/inference/base.py | 3 ++- api/src/inference/kokoro_v1.py | 5 +++-- api/src/routers/debug.py | 2 +- api/src/routers/openai_compatible.py | 4 ++-- api/src/services/audio.py | 7 ++++--- api/src/services/streaming_audio_writer.py | 3 ++- api/src/services/text_processing/normalizer.py | 7 ++++--- api/src/services/text_processing/text_processor.py | 2 +- api/src/services/tts_service.py | 2 +- api/tests/test_audio_service.py | 4 +++- api/tests/test_development.py | 8 +++++--- api/tests/test_normalizer.py | 1 + api/tests/test_openai_endpoints.py | 5 ++--- dev/Test Threads.py | 5 +++-- dev/Test copy.py | 4 +++- dev/Test money.py | 3 ++- dev/Test num.py | 3 ++- dev/Test.py | 3 ++- scripts/fix_misaki.py | 2 +- scripts/update_badges.py | 4 +++- scripts/update_version.py | 3 ++- ui/depr_tests/conftest.py | 3 ++- ui/depr_tests/test_api.py | 2 +- ui/depr_tests/test_components.py | 2 +- ui/lib/api.py | 4 ++-- ui/lib/components/model.py | 2 +- ui/lib/files.py | 6 +++--- ui/lib/interface.py | 5 +++-- 29 files changed, 63 insertions(+), 43 deletions(-) diff --git a/api/src/core/config.py b/api/src/core/config.py index 596472c..00aa6da 100644 --- a/api/src/core/config.py +++ b/api/src/core/config.py @@ -1,5 +1,5 @@ -from pydantic_settings import BaseSettings import torch +from pydantic_settings import BaseSettings class Settings(BaseSettings): diff --git a/api/src/inference/base.py b/api/src/inference/base.py index 6b59fa9..306a7bb 100644 --- a/api/src/inference/base.py +++ b/api/src/inference/base.py @@ -1,11 +1,12 @@ """Base interface for Kokoro inference.""" from abc import ABC, abstractmethod -from typing import AsyncGenerator, Optional, Tuple, Union, List +from typing import AsyncGenerator, List, Optional, Tuple, Union import numpy as np import torch + class AudioChunk: """Class for audio chunks returned by model backends""" diff --git a/api/src/inference/kokoro_v1.py b/api/src/inference/kokoro_v1.py index 985c513..d8b5056 100644 --- a/api/src/inference/kokoro_v1.py +++ b/api/src/inference/kokoro_v1.py @@ -11,9 +11,10 @@ from loguru import logger from ..core import paths from ..core.config import settings from ..core.model_config import model_config -from .base import BaseModelBackend -from .base import AudioChunk from ..structures.schemas import WordTimestamp +from .base import AudioChunk, BaseModelBackend + + class KokoroV1(BaseModelBackend): """Kokoro backend with controlled resource management.""" diff --git a/api/src/routers/debug.py b/api/src/routers/debug.py index 9a3ca1d..7752ab0 100644 --- a/api/src/routers/debug.py +++ b/api/src/routers/debug.py @@ -3,8 +3,8 @@ import time from datetime import datetime import psutil -from fastapi import APIRouter import torch +from fastapi import APIRouter try: import GPUtil diff --git a/api/src/routers/openai_compatible.py b/api/src/routers/openai_compatible.py index 3106f3b..dd31532 100644 --- a/api/src/routers/openai_compatible.py +++ b/api/src/routers/openai_compatible.py @@ -10,18 +10,18 @@ from urllib import response import aiofiles import numpy as np -from ..services.streaming_audio_writer import StreamingAudioWriter import torch from fastapi import APIRouter, Depends, Header, HTTPException, Request, Response from fastapi.responses import FileResponse, StreamingResponse from loguru import logger -from ..structures.schemas import CaptionedSpeechRequest from ..core.config import settings from ..inference.base import AudioChunk from ..services.audio import AudioService +from ..services.streaming_audio_writer import StreamingAudioWriter from ..services.tts_service import TTSService from ..structures import OpenAISpeechRequest +from ..structures.schemas import CaptionedSpeechRequest # Load OpenAI mappings diff --git a/api/src/services/audio.py b/api/src/services/audio.py index 5e344ec..c3860b8 100644 --- a/api/src/services/audio.py +++ b/api/src/services/audio.py @@ -1,12 +1,12 @@ """Audio conversion service""" +import math import struct import time -from typing import Tuple from io import BytesIO +from typing import Tuple import numpy as np -import math import scipy.io.wavfile as wavfile import soundfile as sf from loguru import logger @@ -14,8 +14,9 @@ from pydub import AudioSegment from torch import norm from ..core.config import settings -from .streaming_audio_writer import StreamingAudioWriter from ..inference.base import AudioChunk +from .streaming_audio_writer import StreamingAudioWriter + class AudioNormalizer: """Handles audio normalization state for a single stream""" diff --git a/api/src/services/streaming_audio_writer.py b/api/src/services/streaming_audio_writer.py index 75d87b4..827ce6c 100644 --- a/api/src/services/streaming_audio_writer.py +++ b/api/src/services/streaming_audio_writer.py @@ -4,11 +4,12 @@ import struct from io import BytesIO from typing import Optional +import av import numpy as np import soundfile as sf from loguru import logger from pydub import AudioSegment -import av + class StreamingAudioWriter: """Handles streaming audio format conversions""" diff --git a/api/src/services/text_processing/normalizer.py b/api/src/services/text_processing/normalizer.py index 0acfe4d..c890158 100644 --- a/api/src/services/text_processing/normalizer.py +++ b/api/src/services/text_processing/normalizer.py @@ -6,12 +6,13 @@ Converts them into a format suitable for text-to-speech processing. import re from functools import lru_cache + import inflect from numpy import number -from torch import mul -from ...structures.schemas import NormalizationOptions - from text_to_num import text2num +from torch import mul + +from ...structures.schemas import NormalizationOptions # Constants VALID_TLDS = [ diff --git a/api/src/services/text_processing/text_processor.py b/api/src/services/text_processing/text_processor.py index 0bd4658..833c5a3 100644 --- a/api/src/services/text_processing/text_processor.py +++ b/api/src/services/text_processing/text_processor.py @@ -7,10 +7,10 @@ from typing import AsyncGenerator, Dict, List, Tuple from loguru import logger from ...core.config import settings +from ...structures.schemas import NormalizationOptions from .normalizer import normalize_text from .phonemizer import phonemize from .vocabulary import tokenize -from ...structures.schemas import NormalizationOptions # Pre-compiled regex patterns for performance CUSTOM_PHONEMES = re.compile(r"(\[([^\]]|\n)*?\])(\(\/([^\/)]|\n)*?\/\))") diff --git a/api/src/services/tts_service.py b/api/src/services/tts_service.py index 8a6bb42..6bc25c9 100644 --- a/api/src/services/tts_service.py +++ b/api/src/services/tts_service.py @@ -8,7 +8,6 @@ import time from typing import AsyncGenerator, List, Optional, Tuple, Union import numpy as np -from .streaming_audio_writer import StreamingAudioWriter import torch from kokoro import KPipeline from loguru import logger @@ -20,6 +19,7 @@ from ..inference.model_manager import get_manager as get_model_manager from ..inference.voice_manager import get_manager as get_voice_manager from ..structures.schemas import NormalizationOptions from .audio import AudioNormalizer, AudioService +from .streaming_audio_writer import StreamingAudioWriter from .text_processing import tokenize from .text_processing.text_processor import process_text_chunk, smart_split diff --git a/api/tests/test_audio_service.py b/api/tests/test_audio_service.py index 9351454..ed9649f 100644 --- a/api/tests/test_audio_service.py +++ b/api/tests/test_audio_service.py @@ -5,9 +5,11 @@ from unittest.mock import patch import numpy as np import pytest -from api.src.services.audio import AudioNormalizer, AudioService from api.src.inference.base import AudioChunk +from api.src.services.audio import AudioNormalizer, AudioService from api.src.services.streaming_audio_writer import StreamingAudioWriter + + @pytest.fixture(autouse=True) def mock_settings(): """Mock settings for all tests""" diff --git a/api/tests/test_development.py b/api/tests/test_development.py index 4760347..feb5d4d 100644 --- a/api/tests/test_development.py +++ b/api/tests/test_development.py @@ -1,8 +1,10 @@ -import pytest -from unittest.mock import patch, MagicMock -import requests import base64 import json +from unittest.mock import MagicMock, patch + +import pytest +import requests + def test_generate_captioned_speech(): """Test the generate_captioned_speech function with mocked responses""" diff --git a/api/tests/test_normalizer.py b/api/tests/test_normalizer.py index 6dd4342..a796ce7 100644 --- a/api/tests/test_normalizer.py +++ b/api/tests/test_normalizer.py @@ -5,6 +5,7 @@ import pytest from api.src.services.text_processing.normalizer import normalize_text from api.src.structures.schemas import NormalizationOptions + def test_url_protocols(): """Test URL protocol handling""" assert ( diff --git a/api/tests/test_openai_endpoints.py b/api/tests/test_openai_endpoints.py index 0f89a6c..f9b34d4 100644 --- a/api/tests/test_openai_endpoints.py +++ b/api/tests/test_openai_endpoints.py @@ -4,20 +4,19 @@ import os from typing import AsyncGenerator, Tuple from unittest.mock import AsyncMock, MagicMock, patch -from api.src.services.streaming_audio_writer import StreamingAudioWriter - -from api.src.inference.base import AudioChunk import numpy as np import pytest from fastapi.testclient import TestClient from api.src.core.config import settings +from api.src.inference.base import AudioChunk from api.src.main import app from api.src.routers.openai_compatible import ( get_tts_service, load_openai_mappings, stream_audio_chunks, ) +from api.src.services.streaming_audio_writer import StreamingAudioWriter from api.src.services.tts_service import TTSService from api.src.structures.schemas import OpenAISpeechRequest diff --git a/dev/Test Threads.py b/dev/Test Threads.py index 1b5f6c1..4a7f8d0 100644 --- a/dev/Test Threads.py +++ b/dev/Test Threads.py @@ -17,12 +17,13 @@ import base64 import concurrent.futures import json import os -import requests +import sys import time import wave -import sys from pathlib import Path +import requests + def setup_args(): """Parse command line arguments""" diff --git a/dev/Test copy.py b/dev/Test copy.py index c8e562e..94181ee 100644 --- a/dev/Test copy.py +++ b/dev/Test copy.py @@ -1,7 +1,9 @@ -import requests import base64 import json + import pydub +import requests + text="""Delving into the Abyss: A Deeper Exploration of Meaning in 5 Seconds of Summer's "Jet Black Heart" 5 Seconds of Summer, initially perceived as purveyors of upbeat, radio-friendly pop-punk, embarked on a significant artistic evolution with their album Sounds Good Feels Good. Among its tracks, "Jet Black Heart" stands out as a powerful testament to this shift, moving beyond catchy melodies and embracing a darker, more emotionally complex sound. Released in 2015, the song transcends the typical themes of youthful exuberance and romantic angst, instead plunging into the depths of personal turmoil and the corrosive effects of inner darkness on interpersonal relationships. "Jet Black Heart" is not merely a song about heartbreak; it is a raw and vulnerable exploration of internal struggle, self-destructive patterns, and the precarious flicker of hope that persists even in the face of profound emotional chaos. Through potent metaphors, starkly honest lyrics, and a sonic landscape that mirrors its thematic weight, the song offers a profound meditation on the human condition, grappling with the shadows that reside within us all and their far-reaching consequences. diff --git a/dev/Test money.py b/dev/Test money.py index 4956070..8a8f930 100644 --- a/dev/Test money.py +++ b/dev/Test money.py @@ -1,7 +1,8 @@ -import requests import base64 import json +import requests + text="""the administration has offered up a platter of repression for more than a year and is still slated to lose $400 million. Columbia is the largest private landowner in New York City and boasts an endowment of $14.8 billion;""" diff --git a/dev/Test num.py b/dev/Test num.py index 15bd4d7..403f5bb 100644 --- a/dev/Test num.py +++ b/dev/Test num.py @@ -1,6 +1,7 @@ -from text_to_num import text2num import re + import inflect +from text_to_num import text2num from torch import mul INFLECT_ENGINE = inflect.engine() diff --git a/dev/Test.py b/dev/Test.py index b1db365..396286e 100644 --- a/dev/Test.py +++ b/dev/Test.py @@ -1,7 +1,8 @@ -import requests import base64 import json +import requests + text="""Delving into the Abyss: A Deeper Exploration of Meaning in 5 Seconds of Summer's "Jet Black Heart" 5 Seconds of Summer, initially perceived as purveyors of upbeat, radio-friendly pop-punk, embarked on a significant artistic evolution with their album Sounds Good Feels Good. Among its tracks, "Jet Black Heart" stands out as a powerful testament to this shift, moving beyond catchy melodies and embracing a darker, more emotionally complex sound. Released in 2015, the song transcends the typical themes of youthful exuberance and romantic angst, instead plunging into the depths of personal turmoil and the corrosive effects of inner darkness on interpersonal relationships. "Jet Black Heart" is not merely a song about heartbreak; it is a raw and vulnerable exploration of internal struggle, self-destructive patterns, and the precarious flicker of hope that persists even in the face of profound emotional chaos. Through potent metaphors, starkly honest lyrics, and a sonic landscape that mirrors its thematic weight, the song offers a profound meditation on the human condition, grappling with the shadows that reside within us all and their far-reaching consequences. diff --git a/scripts/fix_misaki.py b/scripts/fix_misaki.py index 768065d..0747e21 100644 --- a/scripts/fix_misaki.py +++ b/scripts/fix_misaki.py @@ -2,9 +2,9 @@ Patch for misaki package to fix the EspeakWrapper.set_data_path issue. """ +import importlib.util import os import sys -import importlib.util # Find the misaki package try: diff --git a/scripts/update_badges.py b/scripts/update_badges.py index 27849be..1d3f634 100644 --- a/scripts/update_badges.py +++ b/scripts/update_badges.py @@ -1,8 +1,10 @@ import re import subprocess -import tomli from pathlib import Path +import tomli + + def extract_dependency_info(): """Extract version for kokoro and misaki from pyproject.toml""" with open("pyproject.toml", "rb") as f: diff --git a/scripts/update_version.py b/scripts/update_version.py index ddc1856..4143e1e 100755 --- a/scripts/update_version.py +++ b/scripts/update_version.py @@ -7,9 +7,10 @@ in pyproject.toml, the Helm chart, and README.md. """ import re -import yaml from pathlib import Path +import yaml + # Get the project root directory ROOT_DIR = Path(__file__).parent.parent diff --git a/ui/depr_tests/conftest.py b/ui/depr_tests/conftest.py index f0c2a2e..0aa7139 100644 --- a/ui/depr_tests/conftest.py +++ b/ui/depr_tests/conftest.py @@ -1,6 +1,7 @@ -import pytest from unittest.mock import AsyncMock, Mock +import pytest + from api.src.services.tts_service import TTSService diff --git a/ui/depr_tests/test_api.py b/ui/depr_tests/test_api.py index d682326..72c39de 100644 --- a/ui/depr_tests/test_api.py +++ b/ui/depr_tests/test_api.py @@ -1,4 +1,4 @@ -from unittest.mock import patch, mock_open +from unittest.mock import mock_open, patch import pytest import requests diff --git a/ui/depr_tests/test_components.py b/ui/depr_tests/test_components.py index 9e2b796..ddd831b 100644 --- a/ui/depr_tests/test_components.py +++ b/ui/depr_tests/test_components.py @@ -1,9 +1,9 @@ import gradio as gr import pytest -from ui.lib.config import AUDIO_FORMATS from ui.lib.components.model import create_model_column from ui.lib.components.output import create_output_column +from ui.lib.config import AUDIO_FORMATS def test_create_model_column_structure(): diff --git a/ui/lib/api.py b/ui/lib/api.py index ca0d7e8..8bb8b87 100644 --- a/ui/lib/api.py +++ b/ui/lib/api.py @@ -1,6 +1,6 @@ -import os import datetime -from typing import List, Tuple, Optional +import os +from typing import List, Optional, Tuple import requests diff --git a/ui/lib/components/model.py b/ui/lib/components/model.py index a659d2c..d3426bc 100644 --- a/ui/lib/components/model.py +++ b/ui/lib/components/model.py @@ -1,4 +1,4 @@ -from typing import Tuple, Optional +from typing import Optional, Tuple import gradio as gr diff --git a/ui/lib/files.py b/ui/lib/files.py index 1391e0a..f79b88f 100644 --- a/ui/lib/files.py +++ b/ui/lib/files.py @@ -1,8 +1,8 @@ -import os import datetime -from typing import List, Tuple, Optional +import os +from typing import List, Optional, Tuple -from .config import INPUTS_DIR, OUTPUTS_DIR, AUDIO_FORMATS +from .config import AUDIO_FORMATS, INPUTS_DIR, OUTPUTS_DIR def list_input_files() -> List[str]: diff --git a/ui/lib/interface.py b/ui/lib/interface.py index 1ae344c..b35bee8 100644 --- a/ui/lib/interface.py +++ b/ui/lib/interface.py @@ -1,9 +1,10 @@ -import gradio as gr import os +import gradio as gr + from . import api -from .handlers import setup_event_handlers from .components import create_input_column, create_model_column, create_output_column +from .handlers import setup_event_handlers def create_interface():