[Guix packaging] oobabooga/textgen #152

Open
opened 2026-08-14 13:17:59 +00:00 by htayj · 1 comment
htayj commented 2026-08-14 13:17:59 +00:00 (Migrated from github.com)

Candidate

  • Upstream canonical URL: https://github.com/oobabooga/textgen
  • Source pinned commit/release when known: default-branch HEAD ed888c71f221df552750e1834b3654abab8ae345 (checked 2026-08-14)
  • Target concrete installed deliverable: the text-generation-webui local LLM application
  • Primary category: ai-tool
  • Tags: ai-ml
  • Primary language normalized: Python
  • Build system: custom Python application build phases
  • SPDX expression: AGPL-3.0
  • License status: confirmed-free
  • License evidence: Inspected the upstream license text at this pinned commit; GitHub identifies it as AGPL-3.0 (GNU Affero General Public License v3.0). No GPL only-or-later term is inferred beyond the upstream evidence.
  • Difficulty: hard — A large optional GPU/ML dependency graph and model-management runtime make this a substantial closure.
  • Workflow state: research
  • Existing Guix coverage: Checked 2026-08-14: GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix 'R Us, and RDE; no equivalent package with the same upstream origin was found.

Scope and blockers

Package source code only; model downloads and proprietary/unclear model weights are out of scope.

Acceptance checks

  • guix lint -L . textgen
  • guix build -L . textgen
  • start the local server with networking disabled and a local test model, then query its health endpoint.

Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-14T13:17:59Z.

## Candidate - Upstream canonical URL: https://github.com/oobabooga/textgen - Source pinned commit/release when known: default-branch HEAD `ed888c71f221df552750e1834b3654abab8ae345` (checked 2026-08-14) - Target concrete installed deliverable: the text-generation-webui local LLM application - Primary category: ai-tool - Tags: ai-ml - Primary language normalized: Python - Build system: custom Python application build phases - SPDX expression: AGPL-3.0 - License status: confirmed-free - License evidence: Inspected the upstream license text at this pinned commit; GitHub identifies it as `AGPL-3.0` (GNU Affero General Public License v3.0). No GPL only-or-later term is inferred beyond the upstream evidence. - Difficulty: hard — A large optional GPU/ML dependency graph and model-management runtime make this a substantial closure. - Workflow state: research - Existing Guix coverage: Checked 2026-08-14: GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix 'R Us, and RDE; no equivalent package with the same upstream origin was found. ## Scope and blockers Package source code only; model downloads and proprietary/unclear model weights are out of scope. ## Acceptance checks - `guix lint -L . textgen` - `guix build -L . textgen` - start the local server with networking disabled and a local test model, then query its health endpoint. --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/152). Originally posted by [htayj](https://github.com/htayj) on 2026-08-14T13:17:59Z.
Owner

Goocastle recorded disposition: blocked.

Upstream https://github.com/oobabooga/textgen at pinned commit ed888c71f221df552750e1834b3654abab8ae345 (clone verified; rev-parse HEAD matches) is AGPL-3.0: LICENSE is the verbatim GNU Affero GPL v3 text, sha256 8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef. The tree has no .gitmodules, so no separately fetched submodule origin needs its own license evidence. The local channel already pins this exact revision as a source snapshot only, oobabooga-textgen-source in guix/tay/packages/starred-n-r.scm:163 (hash 0jvaq31r1drxsb30kfj8w4hza4cycwl1kvj832sj2gh2ylhq4hh6, license:agpl3); there is no existing textgen application package and no prior closed delivery issue, so this is not a duplicate and not a proof remediation. It is blocked on two independent, concrete prerequisites.

Blocker 1 (source-buildability): the project ships no pyproject.toml, setup.py, or console_scripts entry point; setup.cfg contains only pycodestyle configuration. Its only declared dependency manifests are requirements/full/.txt and requirements/portable/.txt, and every variant, including the minimal requirements/portable/requirements_cpu_only.txt, pins mandatory prebuilt binary wheels fetched over the network from GitHub release URLs rather than source: a custom Gradio fork (gradio-4.37.2+custom.21 and gradio_client-1.0.2+custom.21 from oobabooga/gradio releases) and llama_cpp_binaries-0.138.0+cpu wheels from oobabooga/llama-cpp-binaries releases. These are opaque binary artifacts with no in-tree build recipe and no license evidence at a fixed revision of their own origins; Guix cannot substitute them, and the custom Gradio fork is not API-equivalent to any packaged Gradio. Unblocking condition: for each binary-wheel origin, identify the corresponding upstream source repository and exact fixed revision, confirm an explicit redistribution grant at that revision, and confirm it is buildable from source in Guix (or demonstrate that upstream textgen runs correctly against source-built stock Gradio and a source-built llama.cpp binding, making the vendored wheels droppable).

Blocker 2 (missing runtime contract): server.py provides no noninteractive smoke mode, deterministic subcommand, or headless one-shot invocation. Both branches are long-running servers: the default path calls create_interface() then loops forever on time.sleep(0.5) (server.py:359-380), and --nowebui only starts the API service. Argument parsing in modules/shared.py defines model/loader/listen options but no evaluate-and-exit or self-test mode, and the only non-server invocations are --help style metadata, which the runtime-proof contract forbids. No package wrapper can synthesize a safe deterministic single-line stdout marker without a local model and without inventing upstream behavior, and model weights are explicitly out of scope for this issue. Unblocking condition: upstream (or an agreed wrapper backed by a genuinely offline, freely licensed test model) must provide a noninteractive invocation that exercises real generation or API health and prints a stable single-line marker before exiting.

Environment limitation recorded per the host capability boundary: no Guix daemon is available in this phase, so no guix lint, guix build, or guix shell feasibility build was attempted and no package proof is claimed; source-buildability above is assessed solely from the authoritative in-tree build metadata cited.

<!-- goocastle-disposition:sequential-reviewer:152:1:blocked --> Goocastle recorded disposition: blocked. Upstream https://github.com/oobabooga/textgen at pinned commit ed888c71f221df552750e1834b3654abab8ae345 (clone verified; rev-parse HEAD matches) is AGPL-3.0: LICENSE is the verbatim GNU Affero GPL v3 text, sha256 8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef. The tree has no .gitmodules, so no separately fetched submodule origin needs its own license evidence. The local channel already pins this exact revision as a source snapshot only, oobabooga-textgen-source in guix/tay/packages/starred-n-r.scm:163 (hash 0jvaq31r1drxsb30kfj8w4hza4cycwl1kvj832sj2gh2ylhq4hh6, license:agpl3); there is no existing textgen application package and no prior closed delivery issue, so this is not a duplicate and not a proof remediation. It is blocked on two independent, concrete prerequisites. Blocker 1 (source-buildability): the project ships no pyproject.toml, setup.py, or console_scripts entry point; setup.cfg contains only pycodestyle configuration. Its only declared dependency manifests are requirements/full/*.txt and requirements/portable/*.txt, and every variant, including the minimal requirements/portable/requirements_cpu_only.txt, pins mandatory prebuilt binary wheels fetched over the network from GitHub release URLs rather than source: a custom Gradio fork (gradio-4.37.2+custom.21 and gradio_client-1.0.2+custom.21 from oobabooga/gradio releases) and llama_cpp_binaries-0.138.0+cpu wheels from oobabooga/llama-cpp-binaries releases. These are opaque binary artifacts with no in-tree build recipe and no license evidence at a fixed revision of their own origins; Guix cannot substitute them, and the custom Gradio fork is not API-equivalent to any packaged Gradio. Unblocking condition: for each binary-wheel origin, identify the corresponding upstream source repository and exact fixed revision, confirm an explicit redistribution grant at that revision, and confirm it is buildable from source in Guix (or demonstrate that upstream textgen runs correctly against source-built stock Gradio and a source-built llama.cpp binding, making the vendored wheels droppable). Blocker 2 (missing runtime contract): server.py provides no noninteractive smoke mode, deterministic subcommand, or headless one-shot invocation. Both branches are long-running servers: the default path calls create_interface() then loops forever on time.sleep(0.5) (server.py:359-380), and --nowebui only starts the API service. Argument parsing in modules/shared.py defines model/loader/listen options but no evaluate-and-exit or self-test mode, and the only non-server invocations are --help style metadata, which the runtime-proof contract forbids. No package wrapper can synthesize a safe deterministic single-line stdout marker without a local model and without inventing upstream behavior, and model weights are explicitly out of scope for this issue. Unblocking condition: upstream (or an agreed wrapper backed by a genuinely offline, freely licensed test model) must provide a noninteractive invocation that exercises real generation or API health and prints a stable single-line marker before exiting. Environment limitation recorded per the host capability boundary: no Guix daemon is available in this phase, so no guix lint, guix build, or guix shell feasibility build was attempted and no package proof is claimed; source-buildability above is assessed solely from the authoritative in-tree build metadata cited.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tay/guix-channel#152
No description provided.