eigencore 0.4.0__tar.gz → 0.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. {eigencore-0.4.0 → eigencore-0.4.1}/.github/workflows/ci.yml +1 -1
  2. {eigencore-0.4.0 → eigencore-0.4.1}/CHANGELOG.md +8 -0
  3. {eigencore-0.4.0 → eigencore-0.4.1}/CONTRIBUTING.md +1 -1
  4. {eigencore-0.4.0 → eigencore-0.4.1}/PKG-INFO +10 -7
  5. {eigencore-0.4.0 → eigencore-0.4.1}/README.md +7 -5
  6. {eigencore-0.4.0 → eigencore-0.4.1}/pyproject.toml +7 -2
  7. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/__init__.py +1 -1
  8. eigencore-0.4.1/src/eigencore/__main__.py +6 -0
  9. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/cli/main.py +1 -1
  10. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/inference.py +3 -2
  11. {eigencore-0.4.0 → eigencore-0.4.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  12. {eigencore-0.4.0 → eigencore-0.4.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  13. {eigencore-0.4.0 → eigencore-0.4.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {eigencore-0.4.0 → eigencore-0.4.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  15. {eigencore-0.4.0 → eigencore-0.4.1}/.github/workflows/release.yml +0 -0
  16. {eigencore-0.4.0 → eigencore-0.4.1}/.gitignore +0 -0
  17. {eigencore-0.4.0 → eigencore-0.4.1}/CODE_OF_CONDUCT.md +0 -0
  18. {eigencore-0.4.0 → eigencore-0.4.1}/LICENSE +0 -0
  19. {eigencore-0.4.0 → eigencore-0.4.1}/SECURITY.md +0 -0
  20. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/README-snippet.md +0 -0
  21. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/README.md +0 -0
  22. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-banner-animated.svg +0 -0
  23. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-banner.png +0 -0
  24. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-banner.svg +0 -0
  25. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-lockup-dark.png +0 -0
  26. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-lockup-dark.svg +0 -0
  27. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-lockup-light.png +0 -0
  28. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-lockup-light.svg +0 -0
  29. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-logo.png +0 -0
  30. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-logo.svg +0 -0
  31. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-mark-small.svg +0 -0
  32. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-wordmark-ink.svg +0 -0
  33. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/eigencore-wordmark-light.svg +0 -0
  34. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/favicon-16.png +0 -0
  35. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/favicon-32.png +0 -0
  36. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/favicon-512.png +0 -0
  37. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/favicon-apple-touch.png +0 -0
  38. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/favicon.ico +0 -0
  39. {eigencore-0.4.0 → eigencore-0.4.1}/assets/brand/favicon.svg +0 -0
  40. {eigencore-0.4.0 → eigencore-0.4.1}/docs/INDEX.md +0 -0
  41. {eigencore-0.4.0 → eigencore-0.4.1}/docs/architecture/competitive-landscape.md +0 -0
  42. {eigencore-0.4.0 → eigencore-0.4.1}/docs/architecture/local-inference-roadmap.md +0 -0
  43. {eigencore-0.4.0 → eigencore-0.4.1}/docs/architecture/ml-foundations.md +0 -0
  44. {eigencore-0.4.0 → eigencore-0.4.1}/docs/architecture/system-overview.md +0 -0
  45. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/DESIGN_HANDBOOK.md +0 -0
  46. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/TUI.md +0 -0
  47. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/terminal-chat.md +0 -0
  48. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/tui/approval-card.svg +0 -0
  49. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/tui/chat-plain.svg +0 -0
  50. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/tui/chat-wide.svg +0 -0
  51. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/tui/onboarding-fit.svg +0 -0
  52. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/tui/ssd-warning.svg +0 -0
  53. {eigencore-0.4.0 → eigencore-0.4.1}/docs/design/tui/states.svg +0 -0
  54. {eigencore-0.4.0 → eigencore-0.4.1}/docs/presentation/SLIDES_V2.md +0 -0
  55. {eigencore-0.4.0 → eigencore-0.4.1}/docs/presentation/STUDY_GUIDE.md +0 -0
  56. {eigencore-0.4.0 → eigencore-0.4.1}/docs/research/adaptive-training.md +0 -0
  57. {eigencore-0.4.0 → eigencore-0.4.1}/docs/research/emergent-gaps.md +0 -0
  58. {eigencore-0.4.0 → eigencore-0.4.1}/docs/research/gemini-session-insights.md +0 -0
  59. {eigencore-0.4.0 → eigencore-0.4.1}/docs/research/matrix-math-foundations.md +0 -0
  60. {eigencore-0.4.0 → eigencore-0.4.1}/docs/research/sparse-activation-and-routing.md +0 -0
  61. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/FINAL_REPORT.md +0 -0
  62. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/HOPLITE_PROMPT.md +0 -0
  63. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/research/engine-fit.md +0 -0
  64. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/research/kernels.md +0 -0
  65. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/research/layerskip-ssd.md +0 -0
  66. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/research/sparse.md +0 -0
  67. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/research/specdec.md +0 -0
  68. {eigencore-0.4.0 → eigencore-0.4.1}/docs/review/research/tui-sandbox.md +0 -0
  69. {eigencore-0.4.0 → eigencore-0.4.1}/docs/roadmap/custom-model-plan.md +0 -0
  70. {eigencore-0.4.0 → eigencore-0.4.1}/docs/roadmap/phased-plan.md +0 -0
  71. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/agent/__init__.py +0 -0
  72. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/agent/executor.py +0 -0
  73. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/agent/grammar.py +0 -0
  74. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/agent/policy.py +0 -0
  75. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/agent/react.py +0 -0
  76. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/agent/tool.py +0 -0
  77. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/analysis/__init__.py +0 -0
  78. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/analysis/sparsity.py +0 -0
  79. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/benchmark/__init__.py +0 -0
  80. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/benchmark/harness.py +0 -0
  81. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/cli/__init__.py +0 -0
  82. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/context/__init__.py +0 -0
  83. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/context/manager.py +0 -0
  84. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/__init__.py +0 -0
  85. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/layer_skip.py +0 -0
  86. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/prompt_lookup.py +0 -0
  87. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/pruning.py +0 -0
  88. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/sparse_inference.py +0 -0
  89. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/sparsity_experiment.py +0 -0
  90. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/engine/speculative.py +0 -0
  91. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/fit/__init__.py +0 -0
  92. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/fit/estimator.py +0 -0
  93. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/fit/gguf_meta.py +0 -0
  94. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/forge.py +0 -0
  95. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/hal/__init__.py +0 -0
  96. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/hal/_cpuid_win.py +0 -0
  97. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/hal/profiler.py +0 -0
  98. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/kernels/__init__.py +0 -0
  99. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/kernels/q4k.py +0 -0
  100. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/kernels/reference.py +0 -0
  101. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/models/__init__.py +0 -0
  102. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/models/registry.py +0 -0
  103. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/router/__init__.py +0 -0
  104. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/router/classifier.py +0 -0
  105. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/training/__init__.py +0 -0
  106. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/training/convergence.py +0 -0
  107. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/training/trainer.py +0 -0
  108. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/tui/__init__.py +0 -0
  109. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/tui/chat.py +0 -0
  110. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/tui/onboarding.py +0 -0
  111. {eigencore-0.4.0 → eigencore-0.4.1}/src/eigencore/tui/theme.py +0 -0
  112. {eigencore-0.4.0 → eigencore-0.4.1}/tests/__init__.py +0 -0
  113. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_approval.py +0 -0
  114. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_benchmark.py +0 -0
  115. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_context.py +0 -0
  116. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_convergence.py +0 -0
  117. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_engine_integration.py +0 -0
  118. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_executor.py +0 -0
  119. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_fit.py +0 -0
  120. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_gpu_fit.py +0 -0
  121. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_grammar.py +0 -0
  122. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_kernels.py +0 -0
  123. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_kv_options.py +0 -0
  124. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_layer_skip.py +0 -0
  125. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_onboarding.py +0 -0
  126. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_optimization_audit.py +0 -0
  127. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_policy.py +0 -0
  128. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_profiler.py +0 -0
  129. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_prompt_lookup.py +0 -0
  130. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_pruning.py +0 -0
  131. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_react.py +0 -0
  132. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_registry_moe.py +0 -0
  133. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_router.py +0 -0
  134. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_sparse_inference.py +0 -0
  135. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_sparsity_experiment.py +0 -0
  136. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_speculative.py +0 -0
  137. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_tool.py +0 -0
  138. {eigencore-0.4.0 → eigencore-0.4.1}/tests/test_tui_chat.py +0 -0
@@ -25,7 +25,7 @@ jobs:
25
25
  - name: Install dependencies
26
26
  run: |
27
27
  python -m pip install --upgrade pip
28
- pip install -e ".[dev]" --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
28
+ pip install -e ".[dev,inference]" --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
29
29
 
30
30
  - name: Lint
31
31
  run: ruff check src/ tests/
@@ -4,6 +4,14 @@ All notable changes to EigenCore. Format based on [Keep a Changelog](https://kee
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.4.1] - 2026-11-11
8
+
9
+ ### Changed
10
+ - Packaging: `llama-cpp-python` moved from a hard dependency to the optional `[inference]` extra, because PyPI has no Windows wheel for it and a source build needs a C++ toolchain (broke `pip install eigencore` on plain Windows machines). Core CLI now installs with a bare `pip install eigencore`; inference commands raise a clear hint to install `eigencore[inference]` with the prebuilt wheel index. Added `python -m eigencore` entry point. README/CONTRIBUTING dev setup uses `.[dev,inference]`; CI installs `.[dev,inference]` with the CPU wheel index.
11
+
12
+ ### Changed
13
+ - Packaging: `llama-cpp-python` moved from a hard dependency to the optional `[inference]` extra, because PyPI has no Windows wheel for it and a source build needs a C++ toolchain (broke `pip install eigencore` on plain Windows machines). Core CLI now installs with a bare `pip install eigencore`; inference commands raise a clear hint to install `eigencore[inference]` with the prebuilt wheel index. Added `python -m eigencore` entry point. README quick start updated to the two-step install.
14
+
7
15
  ## [0.4.0] - 2026-11-11
8
16
 
9
17
  ### Added
@@ -12,7 +12,7 @@ Thanks for helping. EigenCore is a small, pre-alpha project, so this guide is sh
12
12
  ```bash
13
13
  git clone https://github.com/Khubaib7-del/EigenCore.git
14
14
  cd EigenCore
15
- python -m pip install -e ".[dev]"
15
+ python -m pip install -e ".[dev,inference]"
16
16
  pytest tests/ -v
17
17
  ruff check src/ tests/
18
18
  ruff format --check src/ tests/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: eigencore
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: CPU-first LLM intelligence runtime — hardware-aware inference, training, and agent orchestration
5
5
  Author-email: Khubaib Nazeer <khubaibnazeer8@gmail.com>
6
6
  License-Expression: MIT
@@ -15,12 +15,13 @@ Requires-Python: >=3.10
15
15
  Requires-Dist: click>=8.0.0
16
16
  Requires-Dist: gguf>=0.10.0
17
17
  Requires-Dist: huggingface-hub>=0.20.0
18
- Requires-Dist: llama-cpp-python>=0.3.0
19
18
  Requires-Dist: psutil>=5.9.0
20
19
  Requires-Dist: rich>=13.0.0
21
20
  Provides-Extra: dev
22
21
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
23
22
  Requires-Dist: ruff<0.15,>=0.4.0; extra == 'dev'
23
+ Provides-Extra: inference
24
+ Requires-Dist: llama-cpp-python>=0.3.0; extra == 'inference'
24
25
  Provides-Extra: train
25
26
  Requires-Dist: bitsandbytes>=0.43.0; extra == 'train'
26
27
  Requires-Dist: peft>=0.10.0; extra == 'train'
@@ -50,11 +51,13 @@ EigenCore profiles a machine, estimates whether a local model fits, and runs inf
50
51
  Install from PyPI:
51
52
 
52
53
  ```bash
54
+ # core CLI (no compiler needed):
53
55
  python -m pip install eigencore
54
- # on Windows/CPU without prebuilt llama.cpp wheels, add the prebuilt index for a fast install:
55
- # python -m pip install eigencore --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
56
- # pipx alternative: pipx install eigencore
57
- # from source (development): git clone ... && python -m pip install -e ".[dev]"
56
+ # + the native inference backend (llama.cpp has no Windows wheel on PyPI,
57
+ # so use the prebuilt index; on GPU machines use the CUDA index instead):
58
+ python -m pip install "eigencore[inference]" --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
59
+ # pipx alternative: pipx install "eigencore[inference]"
60
+ # from source (development): git clone ... && python -m pip install -e ".[dev,inference]"
58
61
 
59
62
  eigencore profile
60
63
  eigencore models
@@ -116,7 +119,7 @@ This is a module map, not a process-isolation diagram. In particular, the curren
116
119
  ## Development
117
120
 
118
121
  ```bash
119
- python -m pip install -e ".[dev]"
122
+ python -m pip install -e ".[dev,inference]"
120
123
  pytest tests/ -v
121
124
  ruff check src/ tests/
122
125
  ruff format --check src/ tests/
@@ -20,11 +20,13 @@ EigenCore profiles a machine, estimates whether a local model fits, and runs inf
20
20
  Install from PyPI:
21
21
 
22
22
  ```bash
23
+ # core CLI (no compiler needed):
23
24
  python -m pip install eigencore
24
- # on Windows/CPU without prebuilt llama.cpp wheels, add the prebuilt index for a fast install:
25
- # python -m pip install eigencore --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
26
- # pipx alternative: pipx install eigencore
27
- # from source (development): git clone ... && python -m pip install -e ".[dev]"
25
+ # + the native inference backend (llama.cpp has no Windows wheel on PyPI,
26
+ # so use the prebuilt index; on GPU machines use the CUDA index instead):
27
+ python -m pip install "eigencore[inference]" --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
28
+ # pipx alternative: pipx install "eigencore[inference]"
29
+ # from source (development): git clone ... && python -m pip install -e ".[dev,inference]"
28
30
 
29
31
  eigencore profile
30
32
  eigencore models
@@ -86,7 +88,7 @@ This is a module map, not a process-isolation diagram. In particular, the curren
86
88
  ## Development
87
89
 
88
90
  ```bash
89
- python -m pip install -e ".[dev]"
91
+ python -m pip install -e ".[dev,inference]"
90
92
  pytest tests/ -v
91
93
  ruff check src/ tests/
92
94
  ruff format --check src/ tests/
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "eigencore"
7
- version = "0.4.0"
7
+ version = "0.4.1"
8
8
  description = "CPU-first LLM intelligence runtime — hardware-aware inference, training, and agent orchestration"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -26,10 +26,15 @@ dependencies = [
26
26
  "click>=8.0.0",
27
27
  "huggingface-hub>=0.20.0",
28
28
  "gguf>=0.10.0",
29
- "llama-cpp-python>=0.3.0",
30
29
  ]
31
30
 
32
31
  [project.optional-dependencies]
32
+ inference = [
33
+ # Native backend; has no Windows wheel on PyPI, so install it with the
34
+ # prebuilt CPU index on Windows, or a CUDA wheel for GPU machines:
35
+ # pip install "eigencore[inference]" --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
36
+ "llama-cpp-python>=0.3.0",
37
+ ]
33
38
  dev = [
34
39
  "pytest>=8.0.0",
35
40
  "ruff>=0.4.0,<0.15",
@@ -1,6 +1,6 @@
1
1
  """EigenCore — CPU-first LLM intelligence runtime."""
2
2
 
3
- __version__ = "0.4.0"
3
+ __version__ = "0.4.1"
4
4
 
5
5
  from eigencore.agent.executor import ToolExecutor, ToolResult
6
6
  from eigencore.agent.grammar import GBNFBuilder
@@ -0,0 +1,6 @@
1
+ """Allow `python -m eigencore` as an alternative to the `eigencore` script."""
2
+
3
+ from eigencore.cli.main import cli
4
+
5
+ if __name__ == "__main__":
6
+ cli()
@@ -80,7 +80,7 @@ def _fit_for_spec(spec, hw, registry, kv_quant: str = "fp16"):
80
80
 
81
81
 
82
82
  @click.group()
83
- @click.version_option(version="0.4.0", prog_name="eigencore")
83
+ @click.version_option(version="0.4.1", prog_name="eigencore")
84
84
  def cli():
85
85
  """EigenCore — CPU-first LLM intelligence runtime."""
86
86
 
@@ -90,8 +90,9 @@ class InferenceEngine:
90
90
  from llama_cpp import Llama
91
91
  except ImportError:
92
92
  raise ImportError(
93
- "llama-cpp-python is required for inference. "
94
- "Install with: pip install llama-cpp-python"
93
+ "llama-cpp-python is required for inference. Install the backend extra: "
94
+ 'pip install "eigencore[inference]" '
95
+ "--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu"
95
96
  )
96
97
 
97
98
  ctx_length = self.profile.recommended_context_length
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes