{
  "issues": [
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/76",
      "id": 3665447942,
      "node_id": "I_kwDOP6-jPc7aekwG",
      "number": 76,
      "title": "vllm serving",
      "user": {
        "login": "thucth-qt",
        "id": 58243011,
        "node_id": "MDQ6VXNlcjU4MjQzMDEx",
        "avatar_url": "https://avatars.githubusercontent.com/u/58243011?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/thucth-qt",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-11-26T02:42:49Z",
      "updated_at": "2025-11-30T09:27:37Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Can this model be served by vllm like other LLM based models?",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/76/reactions",
        "total_count": 2,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 2
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/74",
      "id": 3640080127,
      "node_id": "I_kwDOP6-jPc7Y9zb_",
      "number": 74,
      "title": "[Discussion] Is there any information on on-mobile-device behavior?",
      "user": {
        "login": "wes-kay",
        "id": 40011470,
        "node_id": "MDQ6VXNlcjQwMDExNDcw",
        "avatar_url": "https://avatars.githubusercontent.com/u/40011470?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/wes-kay",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-11-18T21:27:24Z",
      "updated_at": "2025-11-18T21:27:24Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I know there's no definitive answer but hoping to get some experience with users and their devices. I've looked for something but wasn't able to find it. \n\nUltimately looking for insight on what to expect.\n\n• Model disk footprint on older devices vs newer devices\n• Requirements during load and inference\n• Expected performance degradation on low-end hardware (What models work)\n• Any compression, quantization, or pruning options that affect on-device size\n• Platform-specific limits for iOS and Android\n• Known constraints on background execution, thermal throttling, and sustained performance\n• Guidance on target device tiers to ensure stable operation",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/74/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/71",
      "id": 3610372683,
      "node_id": "I_kwDOP6-jPc7XMepL",
      "number": 71,
      "title": "Intonation between sentences",
      "user": {
        "login": "hdd69",
        "id": 131535268,
        "node_id": "U_kgDOB9cRpA",
        "avatar_url": "https://avatars.githubusercontent.com/u/131535268?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/hdd69",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-11-11T01:59:58Z",
      "updated_at": "2025-11-11T01:59:58Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Hi everyone 👋 \n\nI'm playing with the model and feed sentence by sentence into it. Works good so far, but I notice little intonation glitches between the sentences from time to time. \n\nIs there any way to improve that part? I am open to any ideas, what I've tried is to feed some output tokens from previous sentence into current sentence, inside assistant part of the prompt. However, it does not seem to work. \n\nThank you in advance!",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/71/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/69",
      "id": 3586450466,
      "node_id": "I_kwDOP6-jPc7VxOQi",
      "number": 69,
      "title": "Error when launching a CPU-based model on Windows",
      "user": {
        "login": "kgboyko",
        "id": 10330397,
        "node_id": "MDQ6VXNlcjEwMzMwMzk3",
        "avatar_url": "https://avatars.githubusercontent.com/u/10330397?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kgboyko",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-11-04T12:49:26Z",
      "updated_at": "2025-11-04T15:31:57Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "### Error when launching the model on Windows on the CPU. \n\nWhen installing WSL2 and Ubuntu-24 on Windows, everything works, even though the pytorch library with cuda is installed by default. I don't have an Nvidia card on my computer.\n\n# Installation sequence.\n\nREM Install espeak-ng https://github.com/espeak-ng/\nespeak-ng.msi\n\nGit-2.51.2-64-bit.exe\n\npython-manager-25.0.msix\n$>> Python3.14\n\npy install 3.11\n\n## Create venv\npy -3.11 -m venv C:\\Users\\Hor\\venv\\py311-neutts-air\n\n## Activate venv\nC:\\Users\\Hor\\venv\\py311-neutts-air\\Scripts\\Activate.ps1\npython --version\n$>> Python 3.11.9\n\n## Upgrade Pip\npy -m pip install --upgrade pip\npy -m pip --version\n\n## Cloning a project\ngit clone https://github.com/neuphonic/neutts-air.git\ncd neutts-air\npip install -r requirements.txt\n\n## Execution\npython -m examples.basic_example \\\n  --input_text \"My name is Dave, and um, I'm from London\" \\\n  --ref_audio samples/dave.wav \\\n  --ref_text samples/dave.txt \\\n  --backbone \"c:/Users/Hor/models/neuphonic/neutts-air\"\n\n# Log\nTraceback (most recent call last):\n  File \"<frozen runpy>\", line 198, in _run_module_as_main\n  File \"<frozen runpy>\", line 88, in _run_code\n  File \"C:\\Users\\Hor\\neutts-air\\examples\\basic_example.py\", line 3, in <module>\n    from neuttsair.neutts import NeuTTSAir\n  File \"C:\\Users\\Hor\\neutts-air\\neuttsair\\neutts.py\", line 7, in <module>\n    import perth\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\perth\\__init__.py\", line 13, in <module>\n    from .perth_net.perth_net_implicit.perth_watermarker import PerthImplicitWatermarker\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\perth\\perth_net\\__init__.py\", line 4, in <module>\n    from .perth_net_implicit.perth_watermarker import PerthImplicitWatermarker\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\perth\\perth_net\\perth_net_implicit\\perth_watermarker.py\", line 5, in <module>\n    from .model.perth_net import PerthNet\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\perth\\perth_net\\perth_net_implicit\\model\\perth_net.py\", line 7, in <module>\n    from ..audio_processor import AudioProcessor\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\perth\\perth_net\\perth_net_implicit\\audio_processor.py\", line 3, in <module>\n    from torchaudio.transforms import Spectrogram, InverseSpectrogram, TimeStretch\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\torchaudio\\__init__.py\", line 4, in <module>\n    from . import _extension  # noqa  # usort: skip\n    ^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\torchaudio\\_extension\\__init__.py\", line 38, in <module>\n    _load_lib(\"libtorchaudio\")\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\torchaudio\\_extension\\utils.py\", line 60, in _load_lib\n    torch.ops.load_library(path)\n  File \"C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\torch\\_ops.py\", line 1478, in load_library\n    ctypes.CDLL(path)\n  File \"C:\\Users\\Hor\\AppData\\Local\\Python\\pythoncore-3.11-64\\Lib\\ctypes\\__init__.py\", line 376, in __init__\n    self._handle = _dlopen(self._name, mode)\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: Could not find module 'C:\\Users\\Hor\\venv\\py311-neutts-air\\Lib\\site-packages\\torchaudio\\lib\\libtorchaudio.pyd' (or one of its dependencies). Try using the full path with constructor syntax.\n\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/69/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/68",
      "id": 3580697047,
      "node_id": "I_kwDOP6-jPc7VbRnX",
      "number": 68,
      "title": "Startup error if no internet connection",
      "user": {
        "login": "onakatomi",
        "id": 145947039,
        "node_id": "U_kgDOCLL5nw",
        "avatar_url": "https://avatars.githubusercontent.com/u/145947039?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/onakatomi",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-11-03T06:09:02Z",
      "updated_at": "2025-11-04T13:08:51Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "This should be fully local and not requiring an internet connection, yet on starting up the model I get the error:\n```\n  File \"/opt/anaconda3/envs/biometry-tc/lib/python3.11/site-packages/requests/adapters.py\", line 677, in send\n    raise ConnectionError(e, request=request)\nrequests.exceptions.ConnectionError: (MaxRetryError('HTTPSConnectionPool(host=\\'huggingface.co\\', port=443): Max retries exceeded with url: /api/models/neuphonic/neutts-air-q8-gguf (Caused by NameResolutionError(\"<urllib3.connection.HTTPSConnection object at 0x34e55d8d0>: Failed to resolve \\'huggingface.co\\' ([Errno 8] nodename nor servname provided, or not known)\"))'), '(Request ID: 0562b745-c40e-4f81-aa04-1a6f943cca02)')\n```\n\nFull logs: https://pastebin.com/fAVqZTmy\n\n\n\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/68/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/67",
      "id": 3569035889,
      "node_id": "I_kwDOP6-jPc7Uuypx",
      "number": 67,
      "title": "OpenAI-compatible endpoint not working properly with LiveKit Agent integration",
      "user": {
        "login": "muhammad-asif78",
        "id": 220368764,
        "node_id": "U_kgDODSKPfA",
        "avatar_url": "https://avatars.githubusercontent.com/u/220368764?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/muhammad-asif78",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 2,
      "created_at": "2025-10-30T05:50:52Z",
      "updated_at": "2025-11-14T13:57:55Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "When using the repository’s OpenAI-compatible API mode, integration with LiveKit Agent (which expects full OpenAI API compatibility) fails due to endpoint and schema mismatches.\n\nThe issue occurs when trying to use this implementation as a drop-in replacement for OpenAI’s chat/completions and realtime endpoints.\n\nSteps to Reproduce\n\nSet up a LiveKit Agent using the OpenAI-compatible configuration:\n\n```\nfrom livekit.agents import AgentSession\nfrom livekit.plugins import openai\n\nsession = AgentSession(\n    llm=openai.LLM(model=\"gpt-4o-mini\", base_url=\"http://localhost:8000/v1\"),\n    tts=openai.TTS(model=\"neuphonic\"),\n)\n\n```\n\nRun the agent and attempt to connect via WebSocket or HTTP streaming.\n\nExpected Behavior\n\nThe endpoint should respond identically to OpenAI’s official API (/v1/chat/completions and /v1/realtime),\n\nStreaming (chunked or server-sent events) should work seamlessly,\n\nJSON response schema should match OpenAI’s format.\n\nActual Behavior\n\nConnection fails or returns schema validation errors.\n\nSome endpoints do not support streaming.\n\nToken and message structure deviate from OpenAI’s expected schema.\n\nEnvironment\n\nServer version: nephinic/openai-compatible (latest commit)\n\nPython: 3.10+\n\nLiveKit Agent: 1.2.x\n\nPlatform: Ubuntu 22.04 / GPU instance\n\nAdditional Context\n\nIt would be great if this repo could provide full compatibility with OpenAI’s schema so that frameworks like LiveKit Agents, Fixie UltraVox, or Cartesia can work out of the box.\nHappy to help test or contribute fixes once schema alignment is clear.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/67/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/64",
      "id": 3558351816,
      "node_id": "I_kwDOP6-jPc7UGCPI",
      "number": 64,
      "title": "Pause time between sentences",
      "user": {
        "login": "LesNovell",
        "id": 10461041,
        "node_id": "MDQ6VXNlcjEwNDYxMDQx",
        "avatar_url": "https://avatars.githubusercontent.com/u/10461041?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/LesNovell",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 3,
      "created_at": "2025-10-27T19:45:47Z",
      "updated_at": "2025-11-12T19:21:58Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Hi, Is there any way to modify the pause time between sentences?\n\nI'm cloning a voice that speaks fairly fast.  When generating speech with NeuTTS, the pauses between sentences are too long to be realistic.  I've tried removing punctuation, but then there is no pause and that sounds also sounds unrealistic.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/64/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/63",
      "id": 3544186140,
      "node_id": "I_kwDOP6-jPc7TP_0c",
      "number": 63,
      "title": "Missing Words in Generated Audios",
      "user": {
        "login": "sabbasi-1",
        "id": 139857123,
        "node_id": "U_kgDOCFYM4w",
        "avatar_url": "https://avatars.githubusercontent.com/u/139857123?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/sabbasi-1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-10-23T10:58:14Z",
      "updated_at": "2025-10-23T10:58:14Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I have done testing of the model with different reference audios and texts, in some cases the generated audio has some words skipped. I have tried finding the reason behind it but still confused as to why this happens. Could it be the reference audios and texts, the input text? Any one else who has seen similar problems. Any help would be appreciated.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/63/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/62",
      "id": 3539196746,
      "node_id": "I_kwDOP6-jPc7S89tK",
      "number": 62,
      "title": "Support large context window or efficient chunked TTS generation for large text files",
      "user": {
        "login": "ThomasChan06",
        "id": 239522365,
        "node_id": "U_kgDODkbSPQ",
        "avatar_url": "https://avatars.githubusercontent.com/u/239522365?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/ThomasChan06",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 2,
      "created_at": "2025-10-22T05:39:18Z",
      "updated_at": "2025-11-04T00:43:22Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "## Feature Request\n\nI would like to use the neutts-air repository for converting large text files to speech on a Mac M1 Pro (16GB RAM, CPU-only) via terminal. Currently, it seems difficult to process large texts due to:\n- Limited context window size for the TTS model (making long-form TTS impractical)\n- The need to repeatedly unload and reload the phonemizer, codec, and backbone when chunking TTS generation, which adds overhead\n\n### Requested features:\n- **Option 1:** Increase the TTS model's context window size, while ensuring it can still run efficiently on a 16GB RAM, CPU-only Mac M1 Pro\n- **Option 2:** Implement an efficient chunking mechanism for TTS generation that does not require unloading and reloading phonemizer, codec, and backbone between chunks\n- Enable the system to process and convert very large text files by chunking internally and then concatenating all generated audio into a single .wav file at the end\n\n### Motivation\n- Enable efficient long-form TTS generation on consumer hardware\n- Reduce memory and compute overhead for large text conversion\n- Improve usability for batch processing of large documents or books\n\n### Example Workflow\n1. User provides a large text file via command line\n2. System splits text into chunks, processes each without reloading models/components\n3. All audio chunks are concatenated automatically into one .wav output\n\nThis will make the repo much more practical for large-scale TTS tasks on modest hardware.\n\n#### Hardware Target\n- Mac M1 Pro, 16GB RAM, CPU only\n\n#### Additional context\n- Please provide guidance or configuration options for users to tune chunk size/context window based on memory constraints.\n\nThank you!\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/62/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/59",
      "id": 3535704990,
      "node_id": "I_kwDOP6-jPc7SvpOe",
      "number": 59,
      "title": "How to export a finetune safetensors model to gguf",
      "user": {
        "login": "kaniosm",
        "id": 28901791,
        "node_id": "MDQ6VXNlcjI4OTAxNzkx",
        "avatar_url": "https://avatars.githubusercontent.com/u/28901791?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kaniosm",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 4,
      "created_at": "2025-10-21T09:19:13Z",
      "updated_at": "2025-10-30T22:02:31Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I tried the below script from llama.cpp but the inference output of the gguf model is not the same as the output from safetensors...\n\npython convert_hf_to_gguf.py checkpoint-5000/ --outfile neuTtsAir-Q8.gguf --outtype q8_0\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/59/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/47",
      "id": 3513101449,
      "node_id": "I_kwDOP6-jPc7RZayJ",
      "number": 47,
      "title": "本地加载neuphonic/neucodec模型提示config.json not found",
      "user": {
        "login": "Hasen-dc",
        "id": 9958766,
        "node_id": "MDQ6VXNlcjk5NTg3NjY=",
        "avatar_url": "https://avatars.githubusercontent.com/u/9958766?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Hasen-dc",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 7,
      "created_at": "2025-10-14T09:24:20Z",
      "updated_at": "2025-10-28T06:55:08Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "由于某些原因，远程服务器无法访问huggingface，我下载了模型 \"neuphonic/neutts-air\" 和 \"neuphonic/neucodec\"，并传输保存到远程服务器该项目的根目录下，路径如下：\n\n- neuphonic\n   - neutts-air\n   - neucodec\n\n但是当我运行下面测试生成音频的命令时， \"neuphonic/neutts-air\" 模型能够成功加载，但 \"neuphonic/neucodec\" 模型却提示“config.json not found in /data/dc/neutts-air/neuphonic/neucodec”，我在huggingface的模型仓库中并没有看到“config.json”文件。 出现上述提醒后程序又尝试从huggingface下载模型，请问是什么原因？\n\n\npython -m examples.basic_example   --input_text \"你好，这是NeuTTS Air生 成的语音\"   --ref_audio samples/dave.wav   --ref_text samples/dave.txt\n/data/anaconda3/envs/neutts/lib/python3.12/site-packages/perth/perth_net/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n  from pkg_resources import resource_filename\nSkipping import of cpp extensions due to incompatible torch version 2.8.0+cu128 for torchao version 0.14.0         Please see GitHub issue #2919 for more info\nLoading phonemizer...\nLoading backbone from: neuphonic/neutts-air on cpu ...\nLoading codec from: neuphonic/neucodec on cpu ...\nconfig.json not found in /data/dc/neutts-air/neuphonic/neucodec\n'(MaxRetryError(\"HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /neuphonic/neucodec/resolve/main/pytorch_model.bin (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x146ab955e6f0>, 'Connection to huggingface.co timed out. (connect timeout=10)'))\"), '(Request ID: fcb5edd9-f782-4390-acab-c0805a7858b3)')' thrown while requesting HEAD https://huggingface.co/neuphonic/neucodec/resolve/main/pytorch_model.bin\nRetrying in 1s [Retry 1/5].\n'(MaxRetryError(\"HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /neuphonic/neucodec/resolve/main/pytorch_model.bin (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x146ab2e0cbf0>, 'Connection to huggingface.co timed out. (connect timeout=10)'))\"), '(Request ID: e9a53697-7b22-41ac-85e6-56e3912462ba)')' thrown while requesting HEAD https://huggingface.co/neuphonic/neucodec/resolve/main/pytorch_model.bin\nRetrying in 2s [Retry 2/5].",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/47/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/41",
      "id": 3499294476,
      "node_id": "I_kwDOP6-jPc7Qkv8M",
      "number": 41,
      "title": "real-time performance",
      "user": {
        "login": "FlowRibe",
        "id": 45217657,
        "node_id": "MDQ6VXNlcjQ1MjE3NjU3",
        "avatar_url": "https://avatars.githubusercontent.com/u/45217657?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/FlowRibe",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 9,
      "created_at": "2025-10-09T13:54:53Z",
      "updated_at": "2025-10-30T16:07:15Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Hi again,\n\nIn the description, you indicate that this TTS system should operate in real-time (even on edge devices such as RaspberryPi).\nTherefore, I'm trying to run it on my PC using the CPU. I've tried all the possible combinations (8-bit gguf, 4-bit, onnxruntime decoder, etc), even with your latest update (streaming), but the best performance I have been able to achieve is about 4 seconds to generate 1 second of speech. I also tried using the GPU, but even if it was faster, that wasn't enough (but I have an old GPU).\n\nIs this expected? Do you have a faster version of this model that is not open-source? Do you get real-time performance using the GPU? \n\nTo give you some context, I use:\nOS: Ubuntu 24.04.3 LTS\nCPU: Intel(R) Core(TM) i9-9900KF CPU @ 3.60GHz (16 cores)\nRAM: 64GB\nGPU: NVIDIA GeForce RTX 2080 Ti (12GB)",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/41/reactions",
        "total_count": 5,
        "+1": 4,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 1,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/37",
      "id": 3497730371,
      "node_id": "I_kwDOP6-jPc7QeyFD",
      "number": 37,
      "title": "steps to run it on iphone or android",
      "user": {
        "login": "prateek110790",
        "id": 169421190,
        "node_id": "U_kgDOChkphg",
        "avatar_url": "https://avatars.githubusercontent.com/u/169421190?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/prateek110790",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-10-09T05:50:35Z",
      "updated_at": "2025-11-16T23:11:15Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "can anyone tell how to actually test this model on iphone or android?",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/37/reactions",
        "total_count": 4,
        "+1": 4,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/36",
      "id": 3497094083,
      "node_id": "I_kwDOP6-jPc7QcWvD",
      "number": 36,
      "title": "remove torch dependency as other leaner inference backends are available",
      "user": {
        "login": "aguaviva",
        "id": 5200915,
        "node_id": "MDQ6VXNlcjUyMDA5MTU=",
        "avatar_url": "https://avatars.githubusercontent.com/u/5200915?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aguaviva",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-10-08T22:42:28Z",
      "updated_at": "2025-10-09T07:58:47Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "This will help people who want to install it on edge devices.\n\nMany thanks!",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/36/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/35",
      "id": 3496100695,
      "node_id": "I_kwDOP6-jPc7QYkNX",
      "number": 35,
      "title": "TypeError: 'NoneType' object is not callable",
      "user": {
        "login": "lorenzocesconetto",
        "id": 25406331,
        "node_id": "MDQ6VXNlcjI1NDA2MzMx",
        "avatar_url": "https://avatars.githubusercontent.com/u/25406331?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/lorenzocesconetto",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 0,
      "created_at": "2025-10-08T16:19:42Z",
      "updated_at": "2025-10-08T16:22:26Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I came across this error when running a simple script.\nThe problem was having the `NeuTTSAir` object instance as a \"global variable\" (i.e. defined at the root).\nSo when the script was over, and tried to call `NeuTTSAir.__del__()` the python interpreter had already set the `llama_cpp` module entries to `None`, then calling a `llama_cpp` function to free up the resources raised an exception.\n\nThe fix was simple, just wrapping the logic in a `main()` function worked for me.\n\n```\npython -m examples.simple \n/Users/.../Developer/neutts-air/.venv/lib/python3.13/site-packages/perth/perth_net/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n  from pkg_resources import resource_filename\nW1008 13:07:20.323000 86163 .venv/lib/python3.13/site-packages/torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.\nLoading phonemizer...\nLoading backbone from: neuphonic/neutts-air-q8-gguf on mps ...\nllama_context: n_ctx_per_seq (2048) < n_ctx_train (32768) -- the full capacity of the model will not be utilized\nggml_metal_init: skipping kernel_get_rows_bf16                     (not supported)\nggml_metal_init: skipping kernel_set_rows_bf16                     (not supported)\nggml_metal_init: skipping kernel_mul_mv_bf16_f32                   (not supported)\nggml_metal_init: skipping kernel_mul_mv_bf16_f32_c4                (not supported)\nggml_metal_init: skipping kernel_mul_mv_bf16_f32_1row              (not supported)\nggml_metal_init: skipping kernel_mul_mv_bf16_f32_l4                (not supported)\nggml_metal_init: skipping kernel_mul_mv_bf16_bf16                  (not supported)\nggml_metal_init: skipping kernel_mul_mv_id_bf16_f32                (not supported)\nggml_metal_init: skipping kernel_mul_mm_bf16_f32                   (not supported)\nggml_metal_init: skipping kernel_mul_mm_id_bf16_f16                (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_h64           (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_h80           (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_h96           (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_h112          (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_h128          (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_h192          (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_hk192_hv128   (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_h256          (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_bf16_hk576_hv512   (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_vec_bf16_h64       (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_vec_bf16_h96       (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_vec_bf16_h128      (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_vec_bf16_h192      (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_vec_bf16_hk192_hv128 (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_vec_bf16_h256      (not supported)\nggml_metal_init: skipping kernel_flash_attn_ext_vec_bf16_hk576_hv512 (not supported)\nggml_metal_init: skipping kernel_cpy_f32_bf16                      (not supported)\nggml_metal_init: skipping kernel_cpy_bf16_f32                      (not supported)\nggml_metal_init: skipping kernel_cpy_bf16_bf16                     (not supported)\nLoading codec from: neuphonic/neucodec on mps ...\nFetching 1 files: 100%|█████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1422.28it/s]\n/Users/lorenzocesconetto/Developer/neutts-air/.venv/lib/python3.13/site-packages/torch/nn/utils/weight_norm.py:144: FutureWarning: `torch.nn.utils.weight_norm` is deprecated in favor of `torch.nn.utils.parametrizations.weight_norm`.\n  WeightNorm.apply(module, name, dim)\nloaded PerthNet (Implicit) at step 250,000\nException ignored in: <function Llama.__del__ at 0x1660b3b00>\nTraceback (most recent call last):\n  File \"/Users/lorenzocesconetto/Developer/neutts-air/.venv/lib/python3.13/site-packages/llama_cpp/llama.py\", line 2209, in __del__\n  File \"/Users/lorenzocesconetto/Developer/neutts-air/.venv/lib/python3.13/site-packages/llama_cpp/llama.py\", line 2206, in close\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 627, in close\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 619, in __exit__\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 604, in __exit__\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 364, in __exit__\n  File \"/Users/lorenzocesconetto/Developer/neutts-air/.venv/lib/python3.13/site-packages/llama_cpp/_internals.py\", line 83, in close\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 627, in close\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 619, in __exit__\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 604, in __exit__\n  File \"/Users/lorenzocesconetto/.local/share/uv/python/cpython-3.13.3-macos-aarch64-none/lib/python3.13/contextlib.py\", line 482, in _exit_wrapper\n  File \"/Users/lorenzocesconetto/Developer/neutts-air/.venv/lib/python3.13/site-packages/llama_cpp/_internals.py\", line 72, in free_model\nTypeError: 'NoneType' object is not callable\n```\n\nBefore:\n```python\nfrom phonemizer.backend.espeak.wrapper import EspeakWrapper\n\n_ESPEAK_LIBRARY = \"/opt/homebrew/Cellar/espeak/1.48.04_1/lib/libespeak.1.1.48.dylib\"\nEspeakWrapper.set_library(_ESPEAK_LIBRARY)\n\nimport soundfile as sf\nfrom neuttsair.neutts import NeuTTSAir\n\ndevice = \"cpu\"\ntts = NeuTTSAir(\n    backbone_repo=\"neuphonic/neutts-air-q8-gguf\",\n    backbone_device=device,\n    codec_repo=\"neuphonic/neucodec\",\n    codec_device=device,\n)\ninput_text = \"Hi, who are you? I am Dave! Nice to meet you\"\n\nref_text = \"samples/dave.txt\"\nref_audio_path = \"samples/dave.wav\"\n\nref_text = open(ref_text, \"r\").read().strip()\nref_codes = tts.encode_reference(ref_audio_path)\n\nwav = tts.infer(input_text, ref_codes, ref_text)\nsf.write(\"test.wav\", wav, 24000)\n```\n\nAfter:\n```python\nfrom phonemizer.backend.espeak.wrapper import EspeakWrapper\n\n_ESPEAK_LIBRARY = \"/opt/homebrew/Cellar/espeak/1.48.04_1/lib/libespeak.1.1.48.dylib\"\nEspeakWrapper.set_library(_ESPEAK_LIBRARY)\n\nimport soundfile as sf\n\nfrom neuttsair.neutts import NeuTTSAir\n\n\ndef main():\n    device = \"cpu\"\n    tts = NeuTTSAir(\n        backbone_repo=\"neuphonic/neutts-air-q8-gguf\",\n        backbone_device=device,\n        codec_repo=\"neuphonic/neucodec\",\n        codec_device=device,\n    )\n    input_text = \"Hi, who are you? I am Dave! Nice to meet you\"\n\n    ref_text = \"samples/dave.txt\"\n    ref_audio_path = \"samples/dave.wav\"\n\n    ref_text = open(ref_text, \"r\").read().strip()\n    ref_codes = tts.encode_reference(ref_audio_path)\n\n    wav = tts.infer(input_text, ref_codes, ref_text)\n    sf.write(\"test.wav\", wav, 24000)\n\n\nif __name__ == \"__main__\":\n    main()\n\n```",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/35/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/28",
      "id": 3492589351,
      "node_id": "I_kwDOP6-jPc7QLK8n",
      "number": 28,
      "title": "[Feature request] Wyoming Protocol Support",
      "user": {
        "login": "ocueye2",
        "id": 157711490,
        "node_id": "U_kgDOCWZ8gg",
        "avatar_url": "https://avatars.githubusercontent.com/u/157711490?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/ocueye2",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-10-07T18:33:39Z",
      "updated_at": "2025-10-08T13:51:50Z",
      "closed_at": null,
      "author_association": "CONTRIBUTOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Wyoming Protocol Support would make it easy to use in a voice assistant pipeline. ",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/28/reactions",
        "total_count": 3,
        "+1": 3,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": [
        32
      ]
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/24",
      "id": 3491032943,
      "node_id": "I_kwDOP6-jPc7QFO9v",
      "number": 24,
      "title": "NeuTTS Air fails with \"Illegal instruction\" on Raspberry Pi 4 (Debian Trixie)",
      "user": {
        "login": "Ahmed-algoryc",
        "id": 207663082,
        "node_id": "U_kgDODGCv6g",
        "avatar_url": "https://avatars.githubusercontent.com/u/207663082?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Ahmed-algoryc",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 5,
      "created_at": "2025-10-07T11:07:41Z",
      "updated_at": "2025-10-09T17:25:56Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "NeuTTS Air fails to run on Raspberry Pi 4 with \"Illegal instruction\" error when attempting to load the neucodec module. The documentation claims the model is \"ready to run on phones, laptops, or even Raspberry Pis,\" but no specific Pi models, OS versions, or tested configurations are documented.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/24/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/23",
      "id": 3490139165,
      "node_id": "I_kwDOP6-jPc7QB0wd",
      "number": 23,
      "title": "ValueError: numpy.dtype size changed",
      "user": {
        "login": "Tahirc1",
        "id": 83111631,
        "node_id": "MDQ6VXNlcjgzMTExNjMx",
        "avatar_url": "https://avatars.githubusercontent.com/u/83111631?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Tahirc1",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 2,
      "created_at": "2025-10-07T06:30:04Z",
      "updated_at": "2025-10-29T15:18:01Z",
      "closed_at": null,
      "author_association": "CONTRIBUTOR",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "I am trying to run this on kaggle on cpu with/without accelerator gpu\n\n### clone repo\n`!git clone https://github.com/neuphonic/neutts-air.git`\n\n### install espeak\n`!sudo apt install espeak`\n\n### install requirement\n`!pip install -r /kaggle/working/neutts-air/requirements.txt`\n\n### install llamacpp\n`!pip install llama-cpp-python`\n\n### Change directory\n`cd neutts-air`\n\n### Run code\n`\nfrom neuttsair.neutts import NeuTTSAir\nimport soundfile as sf\n\ntts = NeuTTSAir( backbone_repo=\"neuphonic/neutts-air-q4-gguf\", backbone_device=\"cpu\", codec_repo=\"neuphonic/neucodec\", codec_device=\"cpu\")\ninput_text = \"My name is Dave, and um, I'm from London.\"\n\nref_text = \"/kaggle/working/neutts-air/samples/dave.txt\"\nref_audio_path = \"/kaggle/working/neutts-air/samples/dave.wav\"\n\nref_text = open(ref_text, \"r\").read().strip()\nref_codes = tts.encode_reference(ref_audio_path)\n\nwav = tts.infer(input_text, ref_codes, ref_text)\nsf.write(\"test.wav\", wav, 24000)\n`\n\n\n### when i run the code block i get error\n\n\n---------------------------------------------------------------------------\nValueError                                Traceback (most recent call last)\n/tmp/ipykernel_214/3132562133.py in <cell line: 0>()\n----> 1 from neuttsair.neutts import NeuTTSAir\n      2 import soundfile as sf\n      3 \n      4 tts = NeuTTSAir( backbone_repo=\"neuphonic/neutts-air-q4-gguf\", backbone_device=\"cpu\", codec_repo=\"neuphonic/neucodec\", codec_device=\"cpu\")\n      5 input_text = \"My name is Dave, and um, I'm from London.\"\n\n/kaggle/working/neutts-air/neuttsair/neutts.py in <module>\n      5 import re\n      6 import perth\n----> 7 from neucodec import NeuCodec, DistillNeuCodec\n      8 from phonemizer.backend import EspeakBackend\n      9 from transformers import AutoTokenizer, AutoModelForCausalLM\n\n/usr/local/lib/python3.11/dist-packages/neucodec/__init__.py in <module>\n----> 1 from .model import NeuCodec, DistillNeuCodec, NeuCodecOnnxDecoder\n\n/usr/local/lib/python3.11/dist-packages/neucodec/model.py in <module>\n      8 from torchaudio import transforms as T\n      9 from huggingface_hub import PyTorchModelHubMixin, ModelHubMixin, hf_hub_download\n---> 10 from transformers import AutoFeatureExtractor, HubertModel, Wav2Vec2BertModel\n     11 \n     12 from .codec_encoder import CodecEncoder\n\n/usr/lib/python3.11/importlib/_bootstrap.py in _handle_fromlist(module, fromlist, import_, recursive)\n\n/usr/local/lib/python3.11/dist-packages/transformers/utils/import_utils.py in __getattr__(self, name)\n   2300         elif name in self._class_to_module:\n   2301             try:\n-> 2302                 module = self._get_module(self._class_to_module[name])\n   2303                 value = getattr(module, name)\n   2304             except (ModuleNotFoundError, RuntimeError) as e:\n\n/usr/local/lib/python3.11/dist-packages/transformers/utils/import_utils.py in _get_module(self, module_name)\n   2330             return importlib.import_module(\".\" + module_name, self.__name__)\n   2331         except Exception as e:\n-> 2332             raise e\n   2333 \n   2334     def __reduce__(self):\n\n/usr/local/lib/python3.11/dist-packages/transformers/utils/import_utils.py in _get_module(self, module_name)\n   2328     def _get_module(self, module_name: str):\n   2329         try:\n-> 2330             return importlib.import_module(\".\" + module_name, self.__name__)\n   2331         except Exception as e:\n   2332             raise e\n\n/usr/lib/python3.11/importlib/__init__.py in import_module(name, package)\n    124                 break\n    125             level += 1\n--> 126     return _bootstrap._gcd_import(name[level:], package, level)\n    127 \n    128 \n\n/usr/local/lib/python3.11/dist-packages/transformers/models/auto/feature_extraction_auto.py in <module>\n     27 from ...feature_extraction_utils import FeatureExtractionMixin\n     28 from ...utils import CONFIG_NAME, FEATURE_EXTRACTOR_NAME, cached_file, logging\n---> 29 from .auto_factory import _LazyAutoMapping\n     30 from .configuration_auto import (\n     31     CONFIG_MAPPING_NAMES,\n\n/usr/local/lib/python3.11/dist-packages/transformers/models/auto/auto_factory.py in <module>\n     41 \n     42 if is_torch_available():\n---> 43     from ...generation import GenerationMixin\n     44 \n     45 \n\n/usr/lib/python3.11/importlib/_bootstrap.py in _handle_fromlist(module, fromlist, import_, recursive)\n\n/usr/local/lib/python3.11/dist-packages/transformers/utils/import_utils.py in __getattr__(self, name)\n   2300         elif name in self._class_to_module:\n   2301             try:\n-> 2302                 module = self._get_module(self._class_to_module[name])\n   2303                 value = getattr(module, name)\n   2304             except (ModuleNotFoundError, RuntimeError) as e:\n\n/usr/local/lib/python3.11/dist-packages/transformers/utils/import_utils.py in _get_module(self, module_name)\n   2330             return importlib.import_module(\".\" + module_name, self.__name__)\n   2331         except Exception as e:\n-> 2332             raise e\n   2333 \n   2334     def __reduce__(self):\n\n/usr/local/lib/python3.11/dist-packages/transformers/utils/import_utils.py in _get_module(self, module_name)\n   2328     def _get_module(self, module_name: str):\n   2329         try:\n-> 2330             return importlib.import_module(\".\" + module_name, self.__name__)\n   2331         except Exception as e:\n   2332             raise e\n\n/usr/lib/python3.11/importlib/__init__.py in import_module(name, package)\n    124                 break\n    125             level += 1\n--> 126     return _bootstrap._gcd_import(name[level:], package, level)\n    127 \n    128 \n\n/usr/local/lib/python3.11/dist-packages/transformers/generation/utils.py in <module>\n     56 from .beam_constraints import DisjunctiveConstraint, PhrasalConstraint\n     57 from .beam_search import BeamScorer, BeamSearchScorer, ConstrainedBeamSearchScorer\n---> 58 from .candidate_generator import (\n     59     AssistantVocabTranslatorCache,\n     60     AssistedCandidateGenerator,\n\n/usr/local/lib/python3.11/dist-packages/transformers/generation/candidate_generator.py in <module>\n     27 \n     28 if is_sklearn_available():\n---> 29     from sklearn.metrics import roc_curve\n     30 \n     31 from ..pytorch_utils import isin_mps_friendly\n\n/usr/local/lib/python3.11/dist-packages/sklearn/__init__.py in <module>\n     80     from . import _distributor_init  # noqa: F401\n     81     from . import __check_build  # noqa: F401\n---> 82     from .base import clone\n     83     from .utils._show_versions import show_versions\n     84 \n\n/usr/local/lib/python3.11/dist-packages/sklearn/base.py in <module>\n     15 from . import __version__\n     16 from ._config import get_config\n---> 17 from .utils import _IS_32BIT\n     18 from .utils._set_output import _SetOutputMixin\n     19 from .utils._tags import (\n\n/usr/local/lib/python3.11/dist-packages/sklearn/utils/__init__.py in <module>\n     17 from scipy.sparse import issparse\n     18 \n---> 19 from .murmurhash import murmurhash3_32\n     20 from .class_weight import compute_class_weight, compute_sample_weight\n     21 from . import _joblib\n\nsklearn/utils/murmurhash.pyx in init sklearn.utils.murmurhash()\n\nValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject\n",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/23/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/17",
      "id": 3484121472,
      "node_id": "I_kwDOP6-jPc7Pq3mA",
      "number": 17,
      "title": "Is it possible to get phonemes with timestamps?",
      "user": {
        "login": "Reuben1987AI",
        "id": 212804958,
        "node_id": "U_kgDODK8lXg",
        "avatar_url": "https://avatars.githubusercontent.com/u/212804958?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Reuben1987AI",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 8,
      "created_at": "2025-10-04T20:45:14Z",
      "updated_at": "2025-11-01T08:52:23Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": null,
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/17/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/12",
      "id": 3481720619,
      "node_id": "I_kwDOP6-jPc7Phtcr",
      "number": 12,
      "title": "Support for Onnxruntime",
      "user": {
        "login": "Shannu1220",
        "id": 112781875,
        "node_id": "U_kgDOBrjqMw",
        "avatar_url": "https://avatars.githubusercontent.com/u/112781875?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Shannu1220",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 1,
      "created_at": "2025-10-03T16:31:14Z",
      "updated_at": "2025-10-03T18:00:51Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "can we remove the dependency of pytorch and run the complete encoder + decoder with ORT.",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/12/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/7",
      "id": 3478458644,
      "node_id": "I_kwDOP6-jPc7PVREU",
      "number": 7,
      "title": "Training code",
      "user": {
        "login": "jpgallegoar",
        "id": 65631402,
        "node_id": "MDQ6VXNlcjY1NjMxNDAy",
        "avatar_url": "https://avatars.githubusercontent.com/u/65631402?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/jpgallegoar",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 61,
      "created_at": "2025-10-02T18:14:19Z",
      "updated_at": "2025-11-07T12:26:25Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Hello, thanks for the amazing release, will you release training code for this model?",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/7/reactions",
        "total_count": 0,
        "+1": 0,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": [
        77
      ]
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/2",
      "id": 3477779406,
      "node_id": "I_kwDOP6-jPc7PSrPO",
      "number": 2,
      "title": "feature request: wasm release",
      "user": {
        "login": "eschmidbauer",
        "id": 7139998,
        "node_id": "MDQ6VXNlcjcxMzk5OTg=",
        "avatar_url": "https://avatars.githubusercontent.com/u/7139998?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/eschmidbauer",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "labels": {},
      "state": "open",
      "locked": false,
      "assignee": null,
      "assignees": {},
      "milestone": null,
      "comments": 2,
      "created_at": "2025-10-02T14:36:37Z",
      "updated_at": "2025-10-02T15:37:00Z",
      "closed_at": null,
      "author_association": "NONE",
      "type": null,
      "active_lock_reason": null,
      "sub_issues_summary": {
        "total": 0,
        "completed": 0,
        "percent_completed": 0
      },
      "issue_dependencies_summary": {
        "blocked_by": 0,
        "total_blocked_by": 0,
        "blocking": 0,
        "total_blocking": 0
      },
      "body": "Thank you for sharing this project, I found it to be fast, reliable with decent accuracy for zeroshot. Do you think a wasm version could be released to run in browser? ",
      "closed_by": null,
      "reactions": {
        "url": "https://api.github.com/repos/neuphonic/neutts-air/issues/2/reactions",
        "total_count": 1,
        "+1": 1,
        "-1": 0,
        "laugh": 0,
        "hooray": 0,
        "confused": 0,
        "heart": 0,
        "rocket": 0,
        "eyes": 0
      },
      "performed_via_github_app": null,
      "state_reason": null,
      "linked_prs": [
        32
      ]
    }
  ],
  "pulls": [
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/77",
      "id": 3056228733,
      "node_id": "PR_kwDOP6-jPc62Kll9",
      "number": 77,
      "state": "open",
      "locked": false,
      "title": "Add support for inference with vLLM or other OpenAI-compatible server",
      "user": {
        "login": "AbrahamSanders",
        "id": 29312744,
        "node_id": "MDQ6VXNlcjI5MzEyNzQ0",
        "avatar_url": "https://avatars.githubusercontent.com/u/29312744?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/AbrahamSanders",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Addresses #76 by adding support for inference where the backend is an OpenAI client. This allows vLLM or any other OpenAI-compatible server to be used, since `neuphonic/neutts-air` is a standard `Qwen2ForCausalLM` backbone supported by most inference engines today out of the box.\r\n\r\nFirst run vLLM to serve the desired backbone model:\r\n```bash\r\nvllm serve neuphonic/neutts-air\r\n```\r\n\r\nThen run the streaming example script:\r\n```bash\r\npython -m examples.vllm_streaming_example \\\r\n  --input_text \"My name is Dave, and um, I'm from London\" \\\r\n  --ref_codes samples/dave.pt \\\r\n  --ref_text samples/dave.txt \\\r\n  --backbone neuphonic/neutts-air \\\r\n  --vllm_url http://localhost:8000/v1 \\\r\n  --vllm_api_key empty\r\n```",
      "created_at": "2025-11-30T09:18:42Z",
      "updated_at": "2025-12-07T06:31:46Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "4db6e12aa3fbd417d0c2462d1b2c7a7ce3eea37a",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "AbrahamSanders:main",
        "ref": "main",
        "sha": "e74e171364ea7ee3d0b7c3577dc53392bad3bb1f",
        "user": {
          "login": "AbrahamSanders",
          "id": 29312744,
          "node_id": "MDQ6VXNlcjI5MzEyNzQ0",
          "avatar_url": "https://avatars.githubusercontent.com/u/29312744?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/AbrahamSanders",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1106924868,
          "node_id": "R_kgDOQfpVRA",
          "name": "neutts-air",
          "full_name": "AbrahamSanders/neutts-air",
          "private": false,
          "owner": {
            "login": "AbrahamSanders",
            "id": 29312744,
            "node_id": "MDQ6VXNlcjI5MzEyNzQ0",
            "avatar_url": "https://avatars.githubusercontent.com/u/29312744?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/AbrahamSanders",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/AbrahamSanders/neutts-air",
          "created_at": "2025-11-30T08:19:28Z",
          "updated_at": "2025-11-30T09:13:19Z",
          "pushed_at": "2025-11-30T09:13:14Z",
          "homepage": null,
          "size": 1887,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "30da85bc139a64305416793b5b1a971f6b9c10af",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/77"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/77"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/77"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/77/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/77/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/77/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/e74e171364ea7ee3d0b7c3577dc53392bad3bb1f"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        7
      ]
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/75",
      "id": 3026853013,
      "node_id": "PR_kwDOP6-jPc60ahyV",
      "number": 75,
      "state": "open",
      "locked": false,
      "title": "fix: offloading model layers to gpu and using flash_attn for gpu",
      "user": {
        "login": "HeisenberG2575",
        "id": 68988062,
        "node_id": "MDQ6VXNlcjY4OTg4MDYy",
        "avatar_url": "https://avatars.githubusercontent.com/u/68988062?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/HeisenberG2575",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "### Context:\r\nThe `_load_backbone` functions loads the neutts-air backbone for inference. While this function works as intended for CPU inference, GPU inference is slowed down due to faults in code\r\n\r\n### Problem:\r\nConsidering that `backbone_device` is used to export the model to the appropriate device, \"gpu\" isn't a valid string for `.to()` hence users resort to the standard \"cuda\" or strings having \"cuda\" such as \"cuda:0\" as a prefix. The current if conditions\r\n\r\n`n_gpu_layers=-1 if backbone_device == \"gpu\" else 0`\r\nand\r\n`flash_attn=True if backbone_device == \"gpu\" else False`\r\ndo not have the intended effect of offloading the model to GPU and using flash-attention since the string is checked for \"gpu\"\r\n\r\n### Fix:\r\n- check string for \"cuda\" and \"gpu\" using python's inbuilt `startswith` method for strings ensures usage of \"cuda\" as `backbone_device` leads to intended behaviour \r\n- checking for \"gpu\" alongside \"cuda\" ensures the change is not code-breaking for existing users\r\n\r\n### TODOs:\r\n- include other device strings that may be utilized for GPU inference and support usage of `flash_attn` and use of `n_gpu_layers` with gguf",
      "created_at": "2025-11-19T18:07:31Z",
      "updated_at": "2025-11-19T18:24:20Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "4cec34f0911516707a0e1aaa9bdfefcebf1adfec",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "HeisenberG2575:main",
        "ref": "main",
        "sha": "c6aee2386f953d3b393bffa2bec1ac7da73dfec0",
        "user": {
          "login": "HeisenberG2575",
          "id": 68988062,
          "node_id": "MDQ6VXNlcjY4OTg4MDYy",
          "avatar_url": "https://avatars.githubusercontent.com/u/68988062?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/HeisenberG2575",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1099989013,
          "node_id": "R_kgDOQZCAFQ",
          "name": "neutts-air",
          "full_name": "HeisenberG2575/neutts-air",
          "private": false,
          "owner": {
            "login": "HeisenberG2575",
            "id": 68988062,
            "node_id": "MDQ6VXNlcjY4OTg4MDYy",
            "avatar_url": "https://avatars.githubusercontent.com/u/68988062?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/HeisenberG2575",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/HeisenberG2575/neutts-air",
          "created_at": "2025-11-19T17:38:07Z",
          "updated_at": "2025-11-19T18:24:22Z",
          "pushed_at": "2025-11-19T18:24:18Z",
          "homepage": null,
          "size": 1885,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "30da85bc139a64305416793b5b1a971f6b9c10af",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/75"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/75"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/75"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/75/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/75/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/75/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/c6aee2386f953d3b393bffa2bec1ac7da73dfec0"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/73",
      "id": 3021665153,
      "node_id": "PR_kwDOP6-jPc60GvOB",
      "number": 73,
      "state": "open",
      "locked": false,
      "title": "Wasm example",
      "user": {
        "login": "alexshelkov",
        "id": 1233347,
        "node_id": "MDQ6VXNlcjEyMzMzNDc=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1233347?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/alexshelkov",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": null,
      "created_at": "2025-11-18T12:50:18Z",
      "updated_at": "2025-11-18T12:50:18Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "8cbfdb3b56974ac65715763ed6582733a93e28a4",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": true,
      "head": {
        "label": "neuphonic:wasm",
        "ref": "wasm",
        "sha": "79f9e44c064a087d90559c2c360b9aa006277d1c",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "30da85bc139a64305416793b5b1a971f6b9c10af",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/73"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/73"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/73"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/73/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/73/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/73/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/79f9e44c064a087d90559c2c360b9aa006277d1c"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/72",
      "id": 3010689458,
      "node_id": "PR_kwDOP6-jPc6zc3my",
      "number": 72,
      "state": "open",
      "locked": false,
      "title": "using the local gguf file in the llama.",
      "user": {
        "login": "breakAIDev",
        "id": 177520967,
        "node_id": "U_kgDOCpTBRw",
        "avatar_url": "https://avatars.githubusercontent.com/u/177520967?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/breakAIDev",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "I have corrected the _load_backbone function to use the local gguf file in the on-device.",
      "created_at": "2025-11-14T12:56:05Z",
      "updated_at": "2025-11-25T17:59:05Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "0cc2af70c3b02ee73bae28b76b3b92a5f230db41",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "breakAIDev:imx8mp",
        "ref": "imx8mp",
        "sha": "b73171d954bfb56c6b17b697608aac757c9c5ad2",
        "user": {
          "login": "breakAIDev",
          "id": 177520967,
          "node_id": "U_kgDOCpTBRw",
          "avatar_url": "https://avatars.githubusercontent.com/u/177520967?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/breakAIDev",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1095797815,
          "node_id": "R_kgDOQVCMNw",
          "name": "neutts-air",
          "full_name": "breakAIDev/neutts-air",
          "private": false,
          "owner": {
            "login": "breakAIDev",
            "id": 177520967,
            "node_id": "U_kgDOCpTBRw",
            "avatar_url": "https://avatars.githubusercontent.com/u/177520967?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/breakAIDev",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/breakAIDev/neutts-air",
          "created_at": "2025-11-13T14:32:49Z",
          "updated_at": "2025-11-13T14:32:50Z",
          "pushed_at": "2025-11-14T20:00:15Z",
          "homepage": null,
          "size": 1886,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "30da85bc139a64305416793b5b1a971f6b9c10af",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/72"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/72"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/72"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/72/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/72/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/72/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/b73171d954bfb56c6b17b697608aac757c9c5ad2"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/70",
      "id": 2978460593,
      "node_id": "PR_kwDOP6-jPc6xh7Ox",
      "number": 70,
      "state": "open",
      "locked": false,
      "title": "Add uv and enhance the project infra",
      "user": {
        "login": "thewh1teagle",
        "id": 61390950,
        "node_id": "MDQ6VXNlcjYxMzkwOTUw",
        "avatar_url": "https://avatars.githubusercontent.com/u/61390950?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/thewh1teagle",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "- Add pyproject.toml and configure the project to work with [uv](https://docs.astral.sh/uv)\r\n- Add [espeakng-loader](https://github.com/thewh1teagle/espeakng-loader) so users don't need to install espeak system-wide \r\n\r\nNow it's much easier to use the code",
      "created_at": "2025-11-05T01:24:05Z",
      "updated_at": "2025-11-05T01:26:44Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "a25ea92627d5b73125f3a91aa1ccef637c45b566",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "thewh1teagle:feat/add-uv-and-enhance-project-setup1",
        "ref": "feat/add-uv-and-enhance-project-setup1",
        "sha": "72551ad1a64a70251cf38ed093b7a98d036da065",
        "user": {
          "login": "thewh1teagle",
          "id": 61390950,
          "node_id": "MDQ6VXNlcjYxMzkwOTUw",
          "avatar_url": "https://avatars.githubusercontent.com/u/61390950?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/thewh1teagle",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1089906433,
          "node_id": "R_kgDOQPanAQ",
          "name": "neutts-air",
          "full_name": "thewh1teagle/neutts-air",
          "private": false,
          "owner": {
            "login": "thewh1teagle",
            "id": 61390950,
            "node_id": "MDQ6VXNlcjYxMzkwOTUw",
            "avatar_url": "https://avatars.githubusercontent.com/u/61390950?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/thewh1teagle",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/thewh1teagle/neutts-air",
          "created_at": "2025-11-05T01:13:40Z",
          "updated_at": "2025-11-07T13:24:16Z",
          "pushed_at": "2025-11-05T01:26:43Z",
          "homepage": null,
          "size": 2059,
          "stargazers_count": 2,
          "watchers_count": 2,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 2,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "30da85bc139a64305416793b5b1a971f6b9c10af",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/70"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/70"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/70"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/70/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/70/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/70/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/72551ad1a64a70251cf38ed093b7a98d036da065"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/66",
      "id": 2956029946,
      "node_id": "PR_kwDOP6-jPc6wMW_6",
      "number": 66,
      "state": "open",
      "locked": false,
      "title": "Improve TTS examples by guarding against context overflows",
      "user": {
        "login": "aeroxy",
        "id": 2761307,
        "node_id": "MDQ6VXNlcjI3NjEzMDc=",
        "avatar_url": "https://avatars.githubusercontent.com/u/2761307?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/aeroxy",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "Improve TTS examples by guarding against context overflows, allowing extended audio generation.\r\n\r\nDemo: https://youtu.be/0ID4KiDbR_4",
      "created_at": "2025-10-28T16:58:38Z",
      "updated_at": "2025-10-28T17:08:50Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "cd3d6137f2bc05c6bbcf40e68de4871f54e0d46c",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "aeroxy:feat/long-text",
        "ref": "feat/long-text",
        "sha": "ee893ad92db1ee577bedb02143678192aee6d2fb",
        "user": {
          "login": "aeroxy",
          "id": 2761307,
          "node_id": "MDQ6VXNlcjI3NjEzMDc=",
          "avatar_url": "https://avatars.githubusercontent.com/u/2761307?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/aeroxy",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1079892366,
          "node_id": "R_kgDOQF3Zjg",
          "name": "neutts-air",
          "full_name": "aeroxy/neutts-air",
          "private": false,
          "owner": {
            "login": "aeroxy",
            "id": 2761307,
            "node_id": "MDQ6VXNlcjI3NjEzMDc=",
            "avatar_url": "https://avatars.githubusercontent.com/u/2761307?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/aeroxy",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/aeroxy/neutts-air",
          "created_at": "2025-10-20T14:45:52Z",
          "updated_at": "2025-10-20T14:45:53Z",
          "pushed_at": "2025-10-28T16:57:51Z",
          "homepage": null,
          "size": 1888,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": null,
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "6a95bd5ce93ae21c2ee1f674bba20459c8b49b32",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/66"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/66"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/66"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/66/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/66/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/66/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/ee893ad92db1ee577bedb02143678192aee6d2fb"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/60",
      "id": 2932923165,
      "node_id": "PR_kwDOP6-jPc6u0Nsd",
      "number": 60,
      "state": "open",
      "locked": false,
      "title": "Add onnx gpu support and benchmarking suite for NeuTTS-Air.",
      "user": {
        "login": "NemesisGuy",
        "id": 24620376,
        "node_id": "MDQ6VXNlcjI0NjIwMzc2",
        "avatar_url": "https://avatars.githubusercontent.com/u/24620376?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/NemesisGuy",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "# Pull Request : ONNX GPU Support\r\n\r\n## Summary\r\n- Extend `NeuTTSAir` to auto-select CUDA/MPS/CPU for the backbone and ONNX codec, configuring CUDA, DirectML, or ROCm providers when present and falling back to CPU with clear warnings when unavailable.\r\n- Document the new GPU workflow in `README.md`, `examples/README.md`, and the freshly added `examples/onnx_example_gpu.py`; ship `requirements-gpu.txt` for quick GPU setup.\r\n- Publish the new benchmarking suite (CLI plus artifacts) and introduce `tests/test_device_selection.py` to cover device routing and ONNX provider selection so regressions surface quickly.\r\n\r\n## Benchmarks\r\n*Windows 11 · NVIDIA GeForce GTX 1080 Ti*\r\n\r\n| Backbone Repo | Backbone Device | Codec Repo | Codec Device | Providers | Runs | Load (s) | Infer (s) | Total (s) | RTF | RAM (MB) | VRAM (MB) |\r\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\r\n| neuphonic/neutts-air | cpu | neuphonic/neucodec-onnx-decoder | cpu | CPUExecutionProvider | 3 | 15.80 ± 22.34 | 44.23 ± 3.63 | 60.02 ± 23.28 | 12.31 ± 0.97 | 1,024 ± 1,437 | 0 |\r\n| neuphonic/neutts-air | cpu | neuphonic/neucodec-onnx-decoder | cuda | CUDAExecutionProvider, CPUExecutionProvider | 3 | 19.57 ± 27.68 | 41.51 ± 2.25 | 61.08 ± 28.12 | 12.45 ± 0.04 | 317 ± 444 | 0 |\r\n| neuphonic/neutts-air | cuda | neuphonic/neucodec-onnx-decoder | cpu | CPUExecutionProvider | 3 | 24.40 ± 34.51 | 7.89 ± 0.51 | 32.30 ± 34.00 | 2.87 ± 0.02 | 1.3 ± 0.6 | 2,890 ± 994 |\r\n| neuphonic/neutts-air | cuda | neuphonic/neucodec-onnx-decoder | cuda | CUDAExecutionProvider, CPUExecutionProvider | 3 | 31.05 ± 43.91 | 7.92 ± 0.94 | 38.97 ± 43.50 | 2.48 ± 0.02 | 47 ± 64 | 2,891 ± 995 |\r\n| neuphonic/neutts-air-q4-gguf | cpu | neuphonic/neucodec-onnx-decoder | cpu | CPUExecutionProvider | 3 | 1.61 ± 2.28 | 3.60 ± 0.20 | 5.20 ± 2.47 | 1.44 ± 0.07 | 394 ± 556 | 8.1 |\r\n| neuphonic/neutts-air-q4-gguf | cpu | neuphonic/neucodec-onnx-decoder | cuda | CUDAExecutionProvider, CPUExecutionProvider | 3 | 1.28 ± 1.82 | 3.21 ± 0.02 | 4.50 ± 1.83 | 1.29 ± 0.01 | 151 ± 213 | 8.1 |\r\n| neuphonic/neutts-air-q4-gguf | cuda | neuphonic/neucodec-onnx-decoder | cpu | CPUExecutionProvider | 3 | 1.26 ± 1.79 | 3.74 ± 0.59 | 5.01 ± 2.23 | 1.40 ± 0.03 | 393 ± 555 | 8.1 |\r\n| neuphonic/neutts-air-q4-gguf | cuda | neuphonic/neucodec-onnx-decoder | cuda | CUDAExecutionProvider, CPUExecutionProvider | 3 | 1.27 ± 1.79 | 3.63 ± 0.50 | 4.90 ± 2.17 | 1.37 ± 0.06 | 152 ± 214 | 8.1 |\r\n| neuphonic/neutts-air-q8-gguf | cpu | neuphonic/neucodec-onnx-decoder | cpu | CPUExecutionProvider | 3 | 1.41 ± 1.99 | 7.15 ± 1.66 | 8.55 ± 2.28 | 1.81 ± 0.08 | 273 ± 373 | 8.1 |\r\n| neuphonic/neutts-air-q8-gguf | cpu | neuphonic/neucodec-onnx-decoder | cuda | CUDAExecutionProvider, CPUExecutionProvider | 3 | 1.37 ± 1.93 | 6.65 ± 1.40 | 8.02 ± 1.96 | 1.69 ± 0.03 | 30 ± 40 | 8.1 |\r\n| neuphonic/neutts-air-q8-gguf | cuda | neuphonic/neucodec-onnx-decoder | cpu | CPUExecutionProvider | 3 | 1.33 ± 1.87 | 5.12 ± 0.74 | 6.44 ± 2.60 | 1.75 ± 0.02 | 268 ± 378 | 8.1 |\r\n| neuphonic/neutts-air-q8-gguf | cuda | neuphonic/neucodec-onnx-decoder | cuda | CUDAExecutionProvider, CPUExecutionProvider | 3 | 1.29 ± 1.83 | 5.00 ± 0.90 | 6.30 ± 2.72 | 1.70 ± 0.04 | 40 ± 56 | 8.1 |\r\n\r\n## Testing\r\n- `pytest tests/test_device_selection.py`\r\n\r\n\r\n",
      "created_at": "2025-10-21T11:04:52Z",
      "updated_at": "2025-11-06T18:03:02Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "655583b6242f2de5f8abd695da67fb476d140cf5",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "NemesisGuy:add-onnx-gpu-support",
        "ref": "add-onnx-gpu-support",
        "sha": "9d9de0ebbf5c15cf9295eeb6fc14cb258e90a49e",
        "user": {
          "login": "NemesisGuy",
          "id": 24620376,
          "node_id": "MDQ6VXNlcjI0NjIwMzc2",
          "avatar_url": "https://avatars.githubusercontent.com/u/24620376?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/NemesisGuy",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1075362833,
          "node_id": "R_kgDOQBi8EQ",
          "name": "neutts-air",
          "full_name": "NemesisGuy/neutts-air",
          "private": false,
          "owner": {
            "login": "NemesisGuy",
            "id": 24620376,
            "node_id": "MDQ6VXNlcjI0NjIwMzc2",
            "avatar_url": "https://avatars.githubusercontent.com/u/24620376?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/NemesisGuy",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/NemesisGuy/neutts-air",
          "created_at": "2025-10-13T11:55:43Z",
          "updated_at": "2025-11-06T17:38:30Z",
          "pushed_at": "2025-11-06T18:03:00Z",
          "homepage": null,
          "size": 1948,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "6a95bd5ce93ae21c2ee1f674bba20459c8b49b32",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/60"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/60"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/60"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/60/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/60/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/60/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/9d9de0ebbf5c15cf9295eeb6fc14cb258e90a49e"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/55",
      "id": 2927686744,
      "node_id": "PR_kwDOP6-jPc6ugPRY",
      "number": 55,
      "state": "open",
      "locked": false,
      "title": "fix(streaming-sample): refine playback handling and ensure PyAudio compatibility",
      "user": {
        "login": "Josh-E-S",
        "id": 67662503,
        "node_id": "MDQ6VXNlcjY3NjYyNTAz",
        "avatar_url": "https://avatars.githubusercontent.com/u/67662503?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/Josh-E-S",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "This PR refines the streaming example for smoother and more consistent real-time playback:\r\n\r\n- Replaces hardcoded 24 kHz sample rate with tts.sample_rate for dynamic compatibility\r\n- Adds a 250 ms tail pad to prevent final audio cutoff\r\n- Simplifies latency and per-chunk logging\r\n- Ensures frames_per_buffer is cast to int() for PyAudio compatibility\r\n- No changes made to core NeuTTSAir functionality\r\n- Changes limited to basic_streaming_example.py and examples/README\r\n\r\nTested locally on an M2 (16 GB RAM) with an average RTF ≈ 1.06 over 10 consecutive runs.\r\nStreams now play cleanly to completion across multiple runs.\r\n",
      "created_at": "2025-10-19T10:33:28Z",
      "updated_at": "2025-10-19T10:33:28Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": "e4567ff50984eb7a0f060dddba3ed72dd5078098",
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "acloudcenter:main",
        "ref": "main",
        "sha": "f28f91a4b54d9dfabf5923bd69831fdce2878e9e",
        "user": {
          "login": "acloudcenter",
          "id": 215182410,
          "node_id": "O_kgDODNNsSg",
          "avatar_url": "https://avatars.githubusercontent.com/u/215182410?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/acloudcenter",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1079149044,
          "node_id": "R_kgDOQFKB9A",
          "name": "neutts-air",
          "full_name": "acloudcenter/neutts-air",
          "private": false,
          "owner": {
            "login": "acloudcenter",
            "id": 215182410,
            "node_id": "O_kgDODNNsSg",
            "avatar_url": "https://avatars.githubusercontent.com/u/215182410?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/acloudcenter",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/acloudcenter/neutts-air",
          "created_at": "2025-10-19T07:53:27Z",
          "updated_at": "2025-10-20T02:05:00Z",
          "pushed_at": "2025-10-19T10:19:37Z",
          "homepage": null,
          "size": 1891,
          "stargazers_count": 1,
          "watchers_count": 1,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 1,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "6a95bd5ce93ae21c2ee1f674bba20459c8b49b32",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/55"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/55"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/55"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/55/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/55/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/55/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/f28f91a4b54d9dfabf5923bd69831fdce2878e9e"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/32",
      "id": 2896698826,
      "node_id": "PR_kwDOP6-jPc6sqB3K",
      "number": 32,
      "state": "open",
      "locked": false,
      "title": "[Feature] Wyoming Protocol Support (#28)",
      "user": {
        "login": "kuntal1461",
        "id": 61106848,
        "node_id": "MDQ6VXNlcjYxMTA2ODQ4",
        "avatar_url": "https://avatars.githubusercontent.com/u/61106848?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/kuntal1461",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "## Summary\r\nThis pull request introduces full support for the **Wyoming Protocol** in the voice assistant pipeline. It integrates **Speech-to-Text (STT)**, **Text-to-Speech (TTS)**, and an optional **Wake Word** system, providing an easy way to interface with Wyoming services.\r\n\r\n**Closes #28.**\r\n\r\n## What’s included\r\n- **Wyoming Client Adapters**: Support for STT (Whisper), TTS (Piper), and Wake Word (openWakeWord).\r\n- **Configuration Options**: Enable endpoint customization for Wyoming services (host/port).\r\n- **Smoke Tests**: Added validation for the Wyoming protocol integration, ensuring the pipeline functions as expected.\r\n\r\n## How to test\r\n1. Set up Wyoming services (Whisper on 10300, Piper on 10200).\r\n2. Modify configuration to use Wyoming endpoints.\r\n3. Run the pipeline by triggering an assistant query like \"What's the time?\" to verify STT → TTS round-trip.\r\n\r\n## Backward compatibility\r\n- This is an opt-in feature and does not affect existing behavior by default.\r\n- Users need to configure the Wyoming Protocol services explicitly to enable it.\r\n\r\n## Documentation\r\n- Updated README with setup instructions for Wyoming services and configuration notes.\r\n",
      "created_at": "2025-10-08T09:12:51Z",
      "updated_at": "2025-10-12T18:36:47Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "kuntal1461:feat/wyoming-protocol-28-new",
        "ref": "feat/wyoming-protocol-28-new",
        "sha": "d2c74fc7e6cc92975e723acea8548df011bda2db",
        "user": {
          "login": "kuntal1461",
          "id": 61106848,
          "node_id": "MDQ6VXNlcjYxMTA2ODQ4",
          "avatar_url": "https://avatars.githubusercontent.com/u/61106848?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/kuntal1461",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1071959663,
          "node_id": "R_kgDOP-TObw",
          "name": "neutts-air",
          "full_name": "kuntal1461/neutts-air",
          "private": false,
          "owner": {
            "login": "kuntal1461",
            "id": 61106848,
            "node_id": "MDQ6VXNlcjYxMTA2ODQ4",
            "avatar_url": "https://avatars.githubusercontent.com/u/61106848?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/kuntal1461",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/kuntal1461/neutts-air",
          "created_at": "2025-10-08T04:13:01Z",
          "updated_at": "2025-10-09T05:51:47Z",
          "pushed_at": "2025-10-09T10:44:23Z",
          "homepage": null,
          "size": 1922,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 0,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 0,
          "open_issues": 0,
          "watchers": 0,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "d7591547baab8903f7d8e0586284e079c7c12367",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/32"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/32"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/32"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/32/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/32/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/32/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/d2c74fc7e6cc92975e723acea8548df011bda2db"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": [
        2,
        28
      ]
    },
    {
      "url": "https://api.github.com/repos/neuphonic/neutts-air/pulls/4",
      "id": 2882314516,
      "node_id": "PR_kwDOP6-jPc6rzKEU",
      "number": 4,
      "state": "open",
      "locked": false,
      "title": "preliminary OAI implementation and docker",
      "user": {
        "login": "darkacorn",
        "id": 81028889,
        "node_id": "MDQ6VXNlcjgxMDI4ODg5",
        "avatar_url": "https://avatars.githubusercontent.com/u/81028889?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/darkacorn",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "body": "very rough and barebones but works\r\n\r\nvoices upload - stored at voices\r\ngeneral oai compatible /v1/audio/speech endpoint\r\n\r\n docker build . -t neutts-air\r\n \r\n  docker run --runtime nvidia --gpus all -v ~/.cache/huggingface:/root/.cache/huggingface -v voices:/app/voices --env \"HUGGING_FACE_HUB_TOKEN=yourkey\"  -p 8080:8080  neutts-air\r\n",
      "created_at": "2025-10-02T16:17:12Z",
      "updated_at": "2025-10-09T20:07:07Z",
      "closed_at": null,
      "merged_at": null,
      "merge_commit_sha": null,
      "assignee": null,
      "assignees": {},
      "requested_reviewers": {},
      "requested_teams": {},
      "labels": {},
      "milestone": null,
      "draft": false,
      "head": {
        "label": "darkacorn:main",
        "ref": "main",
        "sha": "170546a84c789a083dd5566e16412264f258bff2",
        "user": {
          "login": "darkacorn",
          "id": 81028889,
          "node_id": "MDQ6VXNlcjgxMDI4ODg5",
          "avatar_url": "https://avatars.githubusercontent.com/u/81028889?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/darkacorn",
          "type": "User",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068598897,
          "node_id": "R_kgDOP7GGcQ",
          "name": "neutts-air",
          "full_name": "darkacorn/neutts-air",
          "private": false,
          "owner": {
            "login": "darkacorn",
            "id": 81028889,
            "node_id": "MDQ6VXNlcjgxMDI4ODg5",
            "avatar_url": "https://avatars.githubusercontent.com/u/81028889?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/darkacorn",
            "type": "User",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": true,
          "url": "https://api.github.com/repos/darkacorn/neutts-air",
          "created_at": "2025-10-02T16:13:24Z",
          "updated_at": "2025-10-03T18:12:30Z",
          "pushed_at": "2025-10-02T21:13:20Z",
          "homepage": null,
          "size": 1387,
          "stargazers_count": 1,
          "watchers_count": 1,
          "language": "Python",
          "has_issues": false,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 1,
          "archived": false,
          "disabled": false,
          "open_issues_count": 0,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 1,
          "open_issues": 0,
          "watchers": 1,
          "default_branch": "main"
        }
      },
      "base": {
        "label": "neuphonic:main",
        "ref": "main",
        "sha": "ededc7d354b05cb6d245c2a8563e04c5f8ac12a2",
        "user": {
          "login": "neuphonic",
          "id": 165819141,
          "node_id": "O_kgDOCeIzBQ",
          "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/neuphonic",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "repo": {
          "id": 1068475197,
          "node_id": "R_kgDOP6-jPQ",
          "name": "neutts-air",
          "full_name": "neuphonic/neutts-air",
          "private": false,
          "owner": {
            "login": "neuphonic",
            "id": 165819141,
            "node_id": "O_kgDOCeIzBQ",
            "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/neuphonic",
            "type": "Organization",
            "user_view_type": "public",
            "site_admin": false
          },
          "description": "On-device TTS model by Neuphonic",
          "fork": false,
          "url": "https://api.github.com/repos/neuphonic/neutts-air",
          "created_at": "2025-10-02T12:48:55Z",
          "updated_at": "2025-12-09T02:44:28Z",
          "pushed_at": "2025-11-18T12:49:55Z",
          "homepage": null,
          "size": 1907,
          "stargazers_count": 4185,
          "watchers_count": 4185,
          "language": "Python",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "has_discussions": false,
          "forks_count": 432,
          "archived": false,
          "disabled": false,
          "open_issues_count": 32,
          "license": {
            "key": "apache-2.0",
            "name": "Apache License 2.0",
            "spdx_id": "Apache-2.0",
            "url": "https://api.github.com/licenses/apache-2.0",
            "node_id": "MDc6TGljZW5zZTI="
          },
          "allow_forking": true,
          "is_template": false,
          "web_commit_signoff_required": false,
          "topics": {},
          "visibility": "public",
          "forks": 432,
          "open_issues": 32,
          "watchers": 4185,
          "default_branch": "main"
        }
      },
      "_links": {
        "self": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/4"
        },
        "html": {
          "href": "https://github.com/neuphonic/neutts-air/pull/4"
        },
        "issue": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/4"
        },
        "comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/issues/4/comments"
        },
        "review_comments": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/4/comments"
        },
        "review_comment": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/comments{/number}"
        },
        "commits": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/pulls/4/commits"
        },
        "statuses": {
          "href": "https://api.github.com/repos/neuphonic/neutts-air/statuses/170546a84c789a083dd5566e16412264f258bff2"
        }
      },
      "author_association": "NONE",
      "auto_merge": null,
      "active_lock_reason": null,
      "linked_issues": []
    }
  ],
  "discussions": [],
  "details": {
    "id": 1068475197,
    "node_id": "R_kgDOP6-jPQ",
    "name": "neutts-air",
    "full_name": "neuphonic/neutts-air",
    "private": false,
    "owner": {
      "login": "neuphonic",
      "id": 165819141,
      "node_id": "O_kgDOCeIzBQ",
      "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/neuphonic",
      "type": "Organization",
      "user_view_type": "public",
      "site_admin": false
    },
    "description": "On-device TTS model by Neuphonic",
    "fork": false,
    "url": "https://api.github.com/repos/neuphonic/neutts-air",
    "created_at": "2025-10-02T12:48:55Z",
    "updated_at": "2025-12-09T02:44:28Z",
    "pushed_at": "2025-11-18T12:49:55Z",
    "homepage": null,
    "size": 1907,
    "stargazers_count": 4185,
    "watchers_count": 4185,
    "language": "Python",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": true,
    "has_pages": false,
    "has_discussions": false,
    "forks_count": 432,
    "archived": false,
    "disabled": false,
    "open_issues_count": 32,
    "license": {
      "key": "apache-2.0",
      "name": "Apache License 2.0",
      "spdx_id": "Apache-2.0",
      "url": "https://api.github.com/licenses/apache-2.0",
      "node_id": "MDc6TGljZW5zZTI="
    },
    "allow_forking": true,
    "is_template": false,
    "web_commit_signoff_required": false,
    "topics": {},
    "visibility": "public",
    "forks": 432,
    "open_issues": 32,
    "watchers": 4185,
    "default_branch": "main",
    "permissions": {
      "admin": false,
      "maintain": false,
      "push": false,
      "triage": false,
      "pull": true
    },
    "temp_clone_token": "",
    "custom_properties": {
      "vanta_production_branch_name": "main"
    },
    "organization": {
      "login": "neuphonic",
      "id": 165819141,
      "node_id": "O_kgDOCeIzBQ",
      "avatar_url": "https://avatars.githubusercontent.com/u/165819141?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/neuphonic",
      "type": "Organization",
      "user_view_type": "public",
      "site_admin": false
    },
    "network_count": 432,
    "subscribers_count": 40
  },
  "lastFetched": 1765250410125
}