# Open-LLM-VTuber AI Coding Assistant: Context & Guidelines `version: 2025.08.05-1` ## 1. Core Project Context - **Project:** Open-LLM-VTuber, a low-latency voice-based LLM interaction tool. - **Language:** Python >= 3.10 - **Core Tech Stack:** - **Backend:** FastAPI, Pydantic v2, Uvicorn, fully async - **Real-time Communication:** WebSockets - **Package Management:** `uv` (version ~= 0.8, as of 2025 August) (always use `uv run`, `uv sync`, `uv add`, `uv remove` to do stuff instead of `pip`) - **Primary Goal:** Achieve end-to-end latency below 500ms (user speaks -> AI voice heard). Performance is critical. - **Key Principles:** - **Offline-Ready:** Core functionality MUST work without an internet connection. - **Separation of Concerns:** Strict frontend-backend separation. - **Clean code:** Clean, testable, maintainable code, follows best practices of python 3.10+ and does not write deprecated code. Some key files and directories: ``` doc/ # A deprecated directory frontend/ # Compiled web frontend artifacts (from git submodule) config_templates/ conf.default.yaml # Configuration template for English users conf.ZH.default.yaml # Configuration template for Chinese users src/open_llm_vtuber/ # Project source code config_manager/ main.py # Pydantic models for configuration validation run_server.py # Entrypoint to start the application conf.yaml # User's configuration file, generated from a template ``` ### 1.1. Repository Structure - Frontend Repository: The frontend is a React application developed in a separate repository: `Open-LLM-VTuber-Web`. Its built artifacts are integrated into the `frontend/` directory of this backend repository via a git submodule. - Documentation Repository: The official documentation site is hosted in the `open-llm-vtuber.github.io` repository. When asked to generate documentation, create Markdown files in the project root. The user will be responsible for migrating them to the documentation site. ### 1.2. Configuration Files - Configuration templates are located in the `config_templates/` directory: - `conf.default.yaml`: Template for English-speaking users. - `conf.ZH.default.yaml`: Template for Chinese-speaking users. - When modifying the configuration structure, both template files MUST be updated accordingly. - Configuration is validated on load using the Pydantic models defined in `src/open_llm_vtuber/config_manager/main.py`. Any changes to configuration options must be reflected in these models. ## 2. Overarching Coding Philosophy - **Simplicity and Readability:** Write code that is simple, clear, and easy to understand. Avoid unnecessary complexity or premature optimization. Follow the Zen of Python. - **Single Responsibility:** Each function, class, and module should do one thing and do it well. - **Performance-Aware:** Be mindful of performance. Avoid blocking operations in async contexts. Use efficient data structures and algorithms where it matters. - **Adherence to Best Practices**: Write clean, testable, and robust code that follows modern Python 3.10+ idioms. Adhere to the best practices of our core libraries (FastAPI, Pydantic v2). ## 3. Detailed Coding Standards ### 3.1. Formatting & Linting (Ruff) - All Python code **MUST** be formatted with `uv run ruff format`. - All Python code **MUST** pass `uv run ruff check` without errors. - Import statements should be grouped by standard library, third-party, and local modules and sorted alphabetically (PEP 8). ### 3.2. Naming Conventions (PEP 8) - Use `snake_case` for all variables, functions, methods, and module names. - Use `PascalCase` for class names. - Choose descriptive names. Avoid single-letter names except for loop counters or well-known initialisms. ### 3.3. Type Hints (CRITICAL) - Target Python 3.10+. Use modern type hint syntax. - **DO:** Use `|` for unions (e.g., `str | None`). - **DON'T:** Use `Optional` from `typing` (e.g., `Optional[str]`). - **DO:** Use built-in generics (e.g., `list[int]`, `dict[str, float]`). - **DON'T:** Use capitalized types from `typing` (e.g., `List[int]`, `Dict[str, float]`). - All function and method signatures (arguments and return values) **MUST** have accurate type hints. If third party libraries made it impossible to fix type errors, suppress the type checker. ### 3.4. Docstrings & Comments (CRITICAL) - All public modules, functions, classes, and methods **MUST** have a docstring in English. - Use the **Google Python Style** for docstrings. - Docstrings **MUST** include: 1. Summary. 2. `Args:` section describing each parameter, its type, and its purpose. 3. `Returns:` section describing the return value, its type, and its meaning. 4. (Optional but encouraged) `Raises:` section for any exceptions thrown. - All other code comments must also be in English. ### 3.5. Logging - Use the `loguru` module for all informational or error output. - Log messages should be in English, clear, and informative. Use emoji when appropriate. ## 4. Architectural Principles ### 4.1. Dependency Management - First, try to solve the problem using the Python standard library or existing project dependencies defined in `pyproject.toml`. - If a new dependency is required, it must have a compatible license and be well-maintained. - Use `uv add`, `uv remove`, `uv run` instead of pip to manage dependencies. If user uses conda, install uv with pip then. - After adding a new dependency, in addition to `pyproject.toml`, you must add the dependency to `requirements.txt` as well. ### 4.2. Cross-Platform Compatibility - All core logic **MUST** run on macOS, Windows, and Linux. - If a feature is platform-specific (e.g., uses a Windows-only API) or hardware-specific (e.g., CUDA), it **MUST** be an optional component. The application should start and run core features even if that component is not available. Use graceful fallbacks or clear error messages.