Skip to content

Release v0.0.1#214

Merged
AnkushMalaker merged 12 commits intomainfrom
dev
Dec 18, 2025
Merged

Release v0.0.1#214
AnkushMalaker merged 12 commits intomainfrom
dev

Conversation

@AnkushMalaker
Copy link
Collaborator

@AnkushMalaker AnkushMalaker commented Dec 18, 2025

Starting releases with this. We can increment according to https://semver.org/
Lets make sure to not declare a v1.0 prematurely.

Summary by CodeRabbit

Release Notes

  • New Features

    • Added service restart functionality to restart all services or specific services
    • Added convenience scripts for quick service startup and restart
  • Documentation

    • Updated quick start guide with service management commands and expanded troubleshooting steps
    • Added guidance differentiating configuration versus code change workflows
  • Chores

    • Updated dependency management tooling
    • Enhanced testing infrastructure with provider-driven validation

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 18, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This PR migrates the codebase from an "offline" ASR provider model to an explicit "parakeet" provider naming convention, removing references to OFFLINE_ASR_TCP_URI in favor of PARAKEET_ASR_URL. It also adds service restart functionality via CLI and convenience scripts, updates GitHub Actions workflow to use uv package manager, and refactors test/script logic for improved environment validation and provider handling.

Changes

Cohort / File(s) Summary
GitHub Actions & Build Infrastructure
.github/workflows/robot-tests.yml
Added uv package manager setup and switched dependency installation to use uv pip instead of plain pip.
Documentation Updates
Docs/init-system.md, Docs/ports-and-access.md, quickstart.md
Added service restart commands, convenience scripts (start.sh, ./restart.sh), and updated guidance on when to use restart vs. stop/start workflows.
ASR Services Documentation
extras/asr-services/README.md, extras/asr-services/quickstart.md
Updated integration examples to use PARAKEET_ASR_URL and TRANSCRIPTION_PROVIDER=parakeet instead of OFFLINE_ASR_TCP_URI.
Configuration & Build
backends/advanced/docker-compose.yml, extras/asr-services/docker-compose-test.yml
Removed OFFLINE_ASR_TCP_URI from backend environment variables; added CUDA_VERSION build argument to parakeet-asr-test service.
Service & CLI Management
services.py
Added restart_services() function and new restart CLI command with validation and status reporting.
Service Initialization
backends/advanced/init.py
Changed transcription provider option "3" from "offline" to "parakeet" in setup flow.
Script Enhancements
backends/advanced/run-test.sh
Reworked environment precedence (CI > .env.test > .env), added provider-driven validation for API keys, introduced conditional config file generation, and improved test result capture with cleanup.
Worker & Service Startup
backends/advanced/start-workers.sh
Narrowed Parakeet worker startup condition to only trigger on PARAKEET_ASR_URL; updated logging terminology.
Transcription Provider Refactoring
backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py, backends/advanced/src/advanced_omi_backend/services/transcription/__init__.py, backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py, backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py
Removed support for "offline" provider alias and OFFLINE_ASR_TCP_URI fallback; now requires explicit PARAKEET_ASR_URL for Parakeet mode.
Test Updates
backends/advanced/tests/test_integration.py
Renamed TEST_AUDIO_PATH_OFFLINE to TEST_AUDIO_PATH_PARAKEET and updated phase labels and provider-specific audio selection logic.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Key areas requiring attention:
    • backends/advanced/run-test.sh: Contains substantial logic additions for environment validation, provider checks, and test cleanup workflows
    • services.py: New restart_services() function and CLI integration with service name validation
    • Transcription provider refactoring across four files: Verify consistency of OFFLINE_ASR_TCP_URI removal and PARAKEET_ASR_URL enforcement
    • backends/advanced/init.py: Confirm that provider option mapping change ("offline" → "parakeet") aligns with initialization flow

Possibly related PRs

  • Add restart functionality  #206: Adds identical restart functionality (restart CLI, restart_services(), convenience scripts) and shares overlapping service/provider configuration changes.
  • fixed deepgram worker script run #212: Modifies backends/advanced/start-workers.sh similarly; ensures compatibility with safety improvements for shell script execution.
  • Fix/init system clean #131: Updates setup/initialization code and adds python-dotenv dependency; may share similar environment variable handling patterns.

Suggested reviewers

  • thestumonkey
  • 0xrushi

Poem

🐰 Hops through docs with tales of "Parakeet,"
Off with "offline"—naming's now discrete!
Restart commands bloom, convenience scripts gleam,
Services restart with a uv-powered dream!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Title check ⚠️ Warning The title 'Release v0.0.1' does not meaningfully describe the actual changes in the changeset, which include workflow updates, service restart functionality, transcription provider changes, and documentation improvements. Use a more descriptive title that summarizes the main technical changes, such as 'Migrate offline ASR to Parakeet and add service restart functionality' or provide release notes in the description if this is purely a version bump PR.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 90.91% which is sufficient. The required threshold is 80.00%.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
.github/workflows/robot-tests.yml (3)

66-69: Good addition of uv package manager.

The integration of uv aligns with modern Python tooling practices and the project's adoption of uv-based workflows.

Consider pinning the uv version instead of using "latest" for reproducible builds:

🔎 Suggested change
     - name: Install uv
       uses: astral-sh/setup-uv@v4
       with:
-        version: "latest"
+        version: "0.5.11"

269-281: Use uv run python3 for consistency.

Based on learnings, direct python3 calls should be replaced with uv run python3 for consistency with the project's Python execution standard.

🔎 Apply these changes

For the test summary generation step:

         # Parse test results
-        python3 << 'PYTHON_SCRIPT' > test_summary.txt
+        uv run python3 << 'PYTHON_SCRIPT' > test_summary.txt
         import xml.etree.ElementTree as ET

For the display test results step:

           echo "Test results generated successfully"
           echo "========================================"
-          python3 << 'PYTHON_SCRIPT'
+          uv run python3 << 'PYTHON_SCRIPT'
         import xml.etree.ElementTree as ET

Also applies to: 360-371


66-69: Consider adding caching for uv.

Adding cache configuration for uv could improve workflow performance, similar to the existing Docker and pip caching.

🔎 Example cache configuration
     - name: Install uv
       uses: astral-sh/setup-uv@v4
       with:
         version: "latest"
+        enable-cache: true

Or use a manual cache step:

     - name: Cache uv
       uses: actions/cache@v4
       with:
         path: ~/.cache/uv
         key: ${{ runner.os }}-uv-${{ hashFiles('**/pyproject.toml') }}
         restore-keys: |
           ${{ runner.os }}-uv-
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8868591 and 9a2b3f9.

⛔ Files ignored due to path filters (1)
  • backends/advanced/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (17)
  • .github/workflows/robot-tests.yml (1 hunks)
  • Docs/init-system.md (1 hunks)
  • Docs/ports-and-access.md (2 hunks)
  • backends/advanced/docker-compose.yml (0 hunks)
  • backends/advanced/init.py (1 hunks)
  • backends/advanced/run-test.sh (2 hunks)
  • backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py (1 hunks)
  • backends/advanced/src/advanced_omi_backend/services/transcription/__init__.py (0 hunks)
  • backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py (1 hunks)
  • backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py (1 hunks)
  • backends/advanced/start-workers.sh (2 hunks)
  • backends/advanced/tests/test_integration.py (3 hunks)
  • extras/asr-services/README.md (1 hunks)
  • extras/asr-services/docker-compose-test.yml (1 hunks)
  • extras/asr-services/quickstart.md (1 hunks)
  • quickstart.md (2 hunks)
  • services.py (3 hunks)
💤 Files with no reviewable changes (2)
  • backends/advanced/docker-compose.yml
  • backends/advanced/src/advanced_omi_backend/services/transcription/init.py
🧰 Additional context used
📓 Path-based instructions (4)
**/docker-compose*.{yml,yaml}

📄 CodeRabbit inference engine (CLAUDE.md)

Check if src/ is volume mounted. If not, run docker compose build so that code changes are reflected. Do not simply run docker compose restart as it will not rebuild the image.

Files:

  • extras/asr-services/docker-compose-test.yml
**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.py: Use Black formatter with 100-character line length for Python code
Use isort for import sorting in Python code
ALL imports must be at the top of the file after the docstring. NEVER import modules in the middle of functions or files. Use lazy imports sparingly and only when absolutely necessary for circular import issues.
Group imports in order: standard library, third-party, local imports
Always raise errors, never silently ignore. Use explicit error handling with proper exceptions rather than silent failures.
Do not add defensive hasattr() checks. Research and understand input/response or class structure instead.
Use uv run python or uv run python3 instead of direct python or python3 commands for Python execution

Files:

  • backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py
  • backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py
  • backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py
  • services.py
  • backends/advanced/init.py
  • backends/advanced/tests/test_integration.py
**/{websocket,ws,audio,streaming}*.py

📄 CodeRabbit inference engine (CLAUDE.md)

Use Wyoming protocol (JSONL + binary) for WebSocket communication with structured audio sessions

Files:

  • backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py
  • backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py
**/{conversation,audio,memory,processing}*.py

📄 CodeRabbit inference engine (CLAUDE.md)

Only create conversations when speech is detected, eliminating noise-only sessions. Store all audio sessions in audio_chunks collection, conversations only in conversations collection when speech is detected.

Files:

  • backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py
🧠 Learnings (2)
📚 Learning: 2025-12-08T23:52:34.959Z
Learnt from: AnkushMalaker
Repo: chronicler-ai/chronicle PR: 178
File: backends/advanced/src/advanced_omi_backend/services/memory/providers/mycelia.py:218-223
Timestamp: 2025-12-08T23:52:34.959Z
Learning: In Python code (chronicle project), prefer logging.exception() inside except blocks to automatically log the full stack trace. When re-raising exceptions, always chain with 'raise ... from e' to preserve the original context; use 'raise ... from None' only if you explicitly want to suppress the context. This improves debuggability across Python files.

Applied to files:

  • backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py
  • backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py
  • backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py
  • services.py
  • backends/advanced/init.py
  • backends/advanced/tests/test_integration.py
📚 Learning: 2025-12-16T14:24:28.301Z
Learnt from: CR
Repo: chronicler-ai/chronicle PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T14:24:28.301Z
Learning: Applies to **/*.py : Use `uv run python` or `uv run python3` instead of direct `python` or `python3` commands for Python execution

Applied to files:

  • Docs/ports-and-access.md
  • .github/workflows/robot-tests.yml
  • Docs/init-system.md
🧬 Code graph analysis (1)
backends/advanced/run-test.sh (2)
backends/advanced/setup-https.sh (4)
  • print_info (15-17)
  • print_error (27-29)
  • print_warning (23-25)
  • print_success (19-21)
run-test.sh (4)
  • print_info (17-19)
  • print_error (29-31)
  • print_warning (25-27)
  • print_success (21-23)
🪛 markdownlint-cli2 (0.18.1)
Docs/init-system.md

153-153: Bare URL used

(MD034, no-bare-urls)


154-154: Bare URL used

(MD034, no-bare-urls)


154-154: Bare URL used

(MD034, no-bare-urls)


155-155: Bare URL used

(MD034, no-bare-urls)


156-156: Bare URL used

(MD034, no-bare-urls)


157-157: Bare URL used

(MD034, no-bare-urls)

🪛 Ruff (0.14.8)
backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py

40-40: Avoid specifying long messages outside the exception class

(TRY003)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: integration-tests
  • GitHub Check: robot-tests
🔇 Additional comments (22)
.github/workflows/robot-tests.yml (1)

73-73: Correct usage of uv for dependency installation.

The --system flag is appropriate for CI environments where system-wide package installation is required.

extras/asr-services/docker-compose-test.yml (1)

38-41: Code changes require rebuild - src/ not volume mounted.

The src/ directory is not volume mounted in this test configuration. Code changes will require rebuilding the image rather than just restarting the service.

As per coding guidelines, when making code changes to the parakeet-asr service, use:

docker compose -f extras/asr-services/docker-compose-test.yml build parakeet-asr-test
docker compose -f extras/asr-services/docker-compose-test.yml up -d parakeet-asr-test

Instead of:

docker compose -f extras/asr-services/docker-compose-test.yml restart parakeet-asr-test

This ensures code changes are properly reflected in the test environment.

backends/advanced/src/advanced_omi_backend/services/transcription/parakeet_stream_consumer.py (1)

38-40: LGTM - Clean migration from offline to Parakeet naming.

The removal of the OFFLINE_ASR_TCP_URI fallback correctly enforces explicit Parakeet URL configuration, aligning with the PR's migration objectives.

Note: The static analysis hint (TRY003) about the error message is a false positive here - the message is concise and appropriate for this ValueError.

extras/asr-services/README.md (1)

107-111: LGTM - Clear documentation update.

The updated configuration example correctly reflects the migration to explicit Parakeet provider naming and provides helpful guidance for users.

quickstart.md (2)

197-202: LGTM - User-friendly service startup documentation.

Providing both the convenience script and direct command options gives users flexibility while maintaining consistency with the uv-based execution guidelines.


291-305: LGTM - Comprehensive troubleshooting guidance.

The new service management and troubleshooting sections provide clear, actionable commands that align with the newly implemented restart functionality.

Docs/ports-and-access.md (1)

104-121: LGTM - Excellent operational guidance.

The distinction between restart for configuration changes and stop + start --build for code changes is clearly documented and helps users avoid common pitfalls.

Note: The static analysis warnings about bare URLs are false positives - these URLs are appropriately formatted within code blocks.

Docs/init-system.md (2)

151-177: LGTM - Comprehensive restart documentation.

The restart functionality is well-documented with clear operational guidance. The distinction between restart (configuration changes) and rebuild (code changes) is particularly helpful.

Note: Static analysis warnings about bare URLs in command examples are false positives.


183-193: LGTM - Standardized manual service commands.

The explicit use of --build -d flags provides clarity and consistency across all manual service management examples.

services.py (3)

221-238: LGTM - Minor formatting consistency improvements.

The whitespace adjustments maintain code consistency without affecting functionality.


240-262: LGTM - Well-implemented restart functionality.

The restart_services function follows established patterns and correctly uses docker compose restart for configuration changes without rebuilding. This aligns with the documented behavior where restart is for .env updates, while stop + start --build is for code changes.


304-309: LGTM - Consistent CLI integration.

The restart command is properly integrated with argument parsing and validation that mirrors the existing start/stop commands, ensuring a consistent user experience.

Also applies to: 357-372

backends/advanced/init.py (1)

194-194: LGTM - Critical migration to explicit Parakeet provider naming.

This change correctly updates the transcription provider value from "offline" to "parakeet", aligning with the PR's migration objectives and ensuring consistency across the codebase.

backends/advanced/src/advanced_omi_backend/workers/audio_stream_parakeet_worker.py (1)

31-35: LGTM - Consistent migration to explicit Parakeet configuration.

The removal of the OFFLINE_ASR_TCP_URI fallback with clear warning messages ensures users explicitly configure PARAKEET_ASR_URL. The early return prevents misconfiguration issues.

backends/advanced/start-workers.sh (1)

65-75: LGTM: Parakeet worker startup condition correctly updated.

The startup condition now relies solely on PARAKEET_ASR_URL, removing the OFFLINE_ASR_TCP_URI fallback. This aligns with the PR's migration to explicit Parakeet naming.

backends/advanced/src/advanced_omi_backend/controllers/websocket_controller.py (1)

306-320: LGTM: Provider auto-detection logic improved.

The transcription provider detection has been refined to:

  • Remove support for the generic "offline" provider
  • Auto-detect based on PARAKEET_ASR_URL (prefer Parakeet) or DEEPGRAM_API_KEY (fallback to Deepgram)
  • Raise a clear error when neither provider is configured

This makes the provider selection more explicit and easier to understand.

backends/advanced/tests/test_integration.py (2)

112-112: LGTM: Test audio path renamed to match Parakeet naming.

The test audio constant has been renamed from TEST_AUDIO_PATH_OFFLINE to TEST_AUDIO_PATH_PARAKEET, and uses a shorter 10-second clip instead of the 4-minute audio file. This is a reasonable optimization for faster Parakeet provider testing.


718-720: LGTM: Provider-specific audio path selection.

The audio upload logic now correctly selects the Parakeet-specific audio file when using the parakeet provider, falling back to the default audio file otherwise.

backends/advanced/run-test.sh (3)

42-60: LGTM: Environment loading precedence improved.

The explicit priority order (CI environment > .env.test > .env) makes the configuration loading predictable and easier to debug. The clear error messages guide users when environment configuration is missing.


163-182: LGTM: Test execution and cleanup improved.

The test runner now:

  • Captures and reports test results with proper exit codes
  • Ensures cleanup happens on both success and failure
  • Provides clear feedback about test status

This is a solid improvement for both local development and CI/CD environments.


86-88: This case statement validation is correct. Both "offline" and "parakeet" remain valid transcription providers in the codebase (as evidenced by ongoing support in backends/advanced/init.py:519), and they share the same requirement of no API key. The case statement accurately reflects current provider support.

Likely an incorrect or invalid review comment.

extras/asr-services/quickstart.md (1)

44-48: Verify port 8765 actually serves HTTP for Parakeet ASR.

The environment variable protocol change from tcp:// to http:// is valid—Parakeet ASR supports HTTP as a standard transport protocol. However, port 8765 is non-standard for Parakeet deployments. Confirm this custom port is configured to serve HTTP endpoints for the Parakeet ASR service in your Chronicle backend.

Comment on lines 33 to 34
args:
CUDA_VERSION: ${CUDA_VERSION:-cu126}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

# Find docker-compose-test.yml and examine its full content
find . -name "docker-compose-test.yml" -type f 2>/dev/null | head -5

Repository: chronicler-ai/chronicle

Length of output: 209


🏁 Script executed:

#!/bin/bash

# Read the docker-compose-test.yml file for the asr-services
cat -n ./extras/asr-services/docker-compose-test.yml

Repository: chronicler-ai/chronicle

Length of output: 1956


🏁 Script executed:

#!/bin/bash

# Find and read Dockerfile_Parakeet to verify CUDA_VERSION usage
find ./extras/asr-services -name "Dockerfile_Parakeet" -type f | xargs cat -n

Repository: chronicler-ai/chronicle

Length of output: 1463


Fix build argument name mismatch: use PYTORCH_CUDA_VERSION instead of CUDA_VERSION.

The Dockerfile_Parakeet declares ARG PYTORCH_CUDA_VERSION on line 7 and uses it in the uv sync command, but the docker-compose file passes CUDA_VERSION as the build argument. The argument name must match. Update lines 33-34 to:

      args:
        PYTORCH_CUDA_VERSION: ${PYTORCH_CUDA_VERSION:-cu126}

Additionally, src/ is not volume mounted in this test configuration. Per the coding guidelines, run docker compose build so that code changes are reflected, not just docker compose restart.

🤖 Prompt for AI Agents
In extras/asr-services/docker-compose-test.yml around lines 33-34, the build arg
name is mismatched: replace the CUDA_VERSION arg with PYTORCH_CUDA_VERSION so it
matches ARG PYTORCH_CUDA_VERSION in Dockerfile_Parakeet (i.e., set
PYTORCH_CUDA_VERSION: ${PYTORCH_CUDA_VERSION:-cu126}); also note src/ is not
volume-mounted in this test compose so changes won’t be picked up by restart
alone — run docker compose build (then docker compose up/restart) to ensure code
changes are included.

@github-actions
Copy link

⚠️ Robot Framework Test Results

Status: ❌ Some tests failed

Metric Count
✅ Passed 89
❌ Failed 2
📊 Total 91

📊 View Reports

GitHub Pages (Live Reports):

Download Artifacts:


View full workflow run

Update Docker configuration to use PYTORCH_CUDA_VERSION instead of CU…
@github-actions
Copy link

⚠️ Robot Framework Test Results

Status: ❌ Some tests failed

Metric Count
✅ Passed 90
❌ Failed 1
📊 Total 91

📊 View Reports

GitHub Pages (Live Reports):

Download Artifacts:


View full workflow run

@AnkushMalaker AnkushMalaker merged commit 8f22daf into main Dec 18, 2025
4 of 5 checks passed
@coderabbitai coderabbitai bot mentioned this pull request Dec 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants