@octocodeai/freellama-mcp-server 0.1.0 → 0.5.0

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.
@@ -1,291 +1,121 @@
1
1
  # Product positioning
2
2
 
3
- FreeLlama is a **governed local-model delegation layer for developers who run AI agents on
4
- Ollama**. It helps an agent decide whether local inference is appropriate and select an eligible
5
- installed model. It executes within machine and policy limits and returns evidence about what happened.
3
+ FreeLlama gives AI agents a managed way to offload tasks to local models through Ollama.
4
+ Agents submit bounded work through MCP; FreeLlama handles model selection, queues, memory checks,
5
+ residency coordination, and routing to configured CPU/GPU backends. It returns results with
6
+ execution evidence so the calling agent can verify them.
6
7
 
7
- The shortest accurate description is:
8
+ > Agents delegate tasks. FreeLlama manages local resources. Ollama runs inference.
8
9
 
9
- > Ollama runs local models. FreeLlama helps agents use them deliberately.
10
+ The CLI and control API expose the same management layer to operators and applications.
11
+ See [architecture](ARCHITECTURE.md) for the ownership contract and the
12
+ [README](../README.md) for installation and first use.
10
13
 
11
- This positioning is intentionally narrower than “AI gateway” and more useful than “Ollama proxy.”
12
- FreeLlama preserves Ollama's API, but its distinctive work is the decision and evidence layer around
13
- inference: model qualification, fail-closed routing, admission, CPU/GPU placement, grounded
14
- research, and execution receipts.
14
+ ## Audience and purpose
15
15
 
16
- ## Product category decision
16
+ The primary audience is developers operating coding or research agents with Ollama. Typical work
17
+ includes grounded repository lookup, embeddings, image/OCR tasks, supplied-content transforms,
18
+ and helper-model requests. Local-AI operators can use the CLI for the same routing and resource
19
+ controls without an MCP host.
17
20
 
18
- | Question | Decision |
19
- |---|---|
20
- | Product category | Local-model delegation control plane |
21
- | Primary audience | Developers operating coding or research agents with Ollama |
22
- | Core job | Move suitable work to local models without silently lowering quality or losing control of the machine |
23
- | Primary alternative | Call Ollama directly and implement routing, verification, and resource coordination in every agent |
24
- | Product promise | Make local delegation explicit, bounded, observable, and measurable |
25
- | Not the product | A chat UI, an Ollama fork, a hosted inference service, or a generic multi-provider gateway |
26
-
27
- “Trustworthy local-model delegation” is the clearest value phrase. “Localhost control plane” is an
28
- accurate architectural phrase, but it supports the explanation rather than leads it.
21
+ The purpose is to make suitable local delegation bounded and inspectable. Eligibility checks,
22
+ policy, and benchmark evidence help an agent choose a model; they do not prove that an individual
23
+ answer is correct. The calling agent retains judgment and final verification.
29
24
 
30
- ## How the product fits
25
+ ## How the layers fit
31
26
 
32
27
  ```mermaid
33
28
  flowchart LR
34
- U["Developer"] --> A["AI agent or application"]
35
- A -->|"MCP, CLI, Rust, or control API"| F["FreeLlama"]
36
- F --> D{"Delegate?\nWhich model?\nWhich backend?"}
37
- D -->|"qualified GPU task"| G["Primary Ollama\nGPU-capable runner"]
38
- D -->|"explicit CPU assignment"| C["Secondary Ollama\nCPU runner"]
39
- D -->|"guard fails"| X["Refuse before inference"]
40
- G --> E["Answer + execution receipt"]
41
- C --> E
42
- X --> E
43
- E --> A
44
- ```
45
-
46
- [Ollama](https://docs.ollama.com/api/introduction) owns model execution and its API. FreeLlama
47
- owns the policy around managed use of that runtime. The [Model Context Protocol
48
- (MCP)](https://modelcontextprotocol.io/specification/2025-06-18/architecture) makes those controls
49
- available to compatible agent hosts as seven bounded tools. Native Ollama requests can still pass
50
- through unchanged to the primary upstream.
51
-
52
- See [FreeLlama architecture](ARCHITECTURE.md) for the complete responsibility and request-flow
53
- contracts.
54
-
55
- ## Audience hierarchy
56
-
57
- ### Primary: developers operating AI agents
58
-
59
- The strongest user is a developer who already uses a capable cloud or local agent and wants to
60
- delegate bounded work to Ollama. Examples include grounded repository research, embeddings, OCR,
61
- bulk transforms, and helper-model tasks.
62
-
63
- Their job is not merely “run a model.” It is:
64
-
65
- 1. Determine whether a local model is suitable for the task.
66
- 2. Avoid sending work to an incapable, unmeasured, or oversized model.
67
- 3. Keep large files, vectors, images, and intermediate tool output out of the orchestrator's
68
- context.
69
- 4. Coordinate concurrent work without uncontrolled model loads or memory pressure.
70
- 5. Receive citations, verdicts, placement, queue, and timing signals that the agent can inspect.
71
-
72
- FreeLlama fits this user because its MCP server, CLI, agent skill, and control API expose exactly
73
- those decisions. The core job-to-be-done is:
74
-
75
- > When my agent encounters expensive but bounded work, decide whether a local model can handle it,
76
- > run it under explicit limits, and give the agent enough evidence to trust or reject the result.
77
-
78
- ### Secondary: Ollama power users and local-AI operators
79
-
80
- An operator with several installed models can use FreeLlama to diagnose environment drift, inspect
81
- residency, preview routes, coordinate admission, assign selected helpers to a CPU backend, and turn
82
- benchmark results into routing policy.
83
-
84
- This audience can use the CLI without an MCP host. The relevant value is machine-aware operation,
85
- not agent integration alone. FreeLlama discovers the current host and observes Ollama state instead
86
- of embedding assumptions from the development Mac. See [model selection](MODEL_SELECTION.md) and
87
- [CPU/GPU routing](CPU_GPU_ROUTING.md).
88
-
89
- ### Secondary: developers embedding local-model policy
90
-
91
- Library and tool authors can use the Rust core, Node native boundary, or HTTP control API instead
92
- of rebuilding discovery, routing, admission, and evaluation. This is an integration audience, not
93
- the clearest first-run story.
94
-
95
- ### Adjacent: Ollama developers and contributors
96
-
97
- FreeLlama can help Ollama contributors as a downstream compatibility and workload testbed. Its
98
- diagnostics expose version drift, native passthrough tests protect API compatibility, and its
99
- dual-process experiments document observed runner placement.
100
-
101
- Ollama developers are not the primary audience. FreeLlama does not replace Ollama's scheduler,
102
- runner, model storage, accelerator backends, or token generation. It is a sidecar that exercises
103
- and governs Ollama from the client side. Describe the relationship as complementary:
104
-
105
- > Ollama makes local inference possible; FreeLlama makes agent delegation to it governable.
106
-
107
- ### Not a target: mainstream users
108
-
109
- FreeLlama is not a mainstream local-AI product. It has no end-user chat interface. Meaningful use
110
- assumes familiarity with Ollama and its model tags. Users also need a terminal or MCP host and an
111
- understanding of policy or benchmark concepts.
112
- [Open WebUI](https://github.com/open-webui/open-webui) already addresses approachable self-hosted
113
- AI interfaces.
114
-
115
- A separate desktop or web interface can sit on top of FreeLlama as a new product layer. Keep that
116
- layer from blurring the current audience or forcing consumer concerns into the control plane.
117
-
118
- ## The gap FreeLlama fills
119
-
120
- Calling Ollama directly is the correct path when the caller already knows the exact model
121
- and request. FreeLlama becomes useful when the caller has to make and defend a delegation decision.
122
-
123
- | Direct Ollama question | FreeLlama question |
124
- |---|---|
125
- | Which model tag receives this request? | Which installed model qualifies for this task and confidence threshold? |
126
- | Did the request return HTTP 200? | Was it admitted, where did it execute, and what did it cost? |
127
- | Can the model call tools? | Did bounded research read evidence and produce verifiable citations? |
128
- | Can Ollama load this model? | Does it fit the discovered machine and current resident workload? |
129
- | Can I set request options? | Can this managed model use the explicitly assigned CPU backend without changing raw traffic? |
130
-
131
- This distinction also separates FreeLlama from a broad gateway such as
132
- [LiteLLM](https://github.com/BerriAI/litellm). LiteLLM unifies many providers and adds centralized
133
- authentication, budgets, spend tracking, and load balancing. FreeLlama is Ollama-specific,
134
- machine-aware, and centered on agent delegation evidence. Its bearer boundary supports a trusted
135
- operator or team; it does not attempt LiteLLM's tenant, spend, or provider-management scope.
136
-
137
- [RouteLLM](https://github.com/lm-sys/RouteLLM) is the closer routing-specific comparison. It trains
138
- and evaluates routers that select between stronger and weaker model endpoints. FreeLlama does not
139
- implement a learned prompt router. It applies deterministic local eligibility and operator policy,
140
- then adds host fit, admission, physical CPU/GPU placement evidence, and grounded-research receipts.
141
-
142
- ## The product loop
143
-
144
- The flexible part of FreeLlama is not an unconstrained agent choosing hardware. It is a guarded
145
- feedback loop with explicit operator and policy boundaries.
146
-
147
- ```mermaid
148
- flowchart TD
149
- T["Agent describes task, objective, and constraints"] --> P["Preview route"]
150
- P --> Q{"Capability, policy, confidence,\nand capacity qualify?"}
151
- Q -->|"no"| R["Refuse with reasons"]
152
- Q -->|"yes"| A["Admit on selected backend"]
153
- A --> O["Ollama executes"]
154
- O --> V["Return result, placement, queue,\nand timing evidence"]
155
- V --> F["Record normalized warm feedback"]
156
- F -.->|"auto; fastest or balanced only\nafter enough samples"| P
29
+ A["Calling agent: choose task and constraints"] --> F["FreeLlama: select model and manage resources"]
30
+ F -->|"managed primary task"| G["Primary Ollama"]
31
+ F -->|"assigned CPU helper"| C["Optional CPU Ollama"]
32
+ F -->|"capacity unavailable"| Q["Bounded queue or refusal"]
33
+ G --> R["Result and execution evidence"]
34
+ C --> R
35
+ R --> V["Calling agent: verify and continue"]
157
36
  ```
158
37
 
159
- An agent can request `auto`, `prefer_cpu`, or `prefer_gpu`, but the request remains a preference.
160
- Explicit model choice, session affinity, capability requirements, policy, confidence, and operator
161
- CPU assignments remain authoritative. Runtime feedback only influences eligible `auto` routes for
162
- speed-oriented objectives after comparable warm samples exist; it never overrides a quality
163
- objective. This design lets the system adapt to another machine without turning resource placement
164
- into an opaque autonomous decision.
165
-
166
- ## Message hierarchy
167
-
168
- Use one message at each level:
169
-
170
- | Context | Message |
38
+ | Layer | Owns |
171
39
  |---|---|
172
- | Category | Local-model delegation control plane |
173
- | One line | FreeLlama helps AI agents use Ollama deliberately, with routing, resource limits, and evidence. |
174
- | Problem | Local inference is direct to call but hard to delegate to safely across different models and machines. |
175
- | Promise | Move suitable work local without silently lowering quality or destabilizing the runtime. |
176
- | Mechanism | Qualify, preview, admit, execute, and return a receipt. |
177
- | Boundary | Ollama runtime underneath; FreeLlama policy around it. |
178
-
179
- Good headline directions are outcome-first:
180
-
181
- - **Use local models without lowering your standards.**
182
- - **Give your AI agent a governed path to Ollama.**
183
- - **Delegate locally. Keep the evidence.**
184
-
185
- Avoid “AI orchestration platform.” It is broad enough to hide the product. Avoid leading with
186
- “proxy,” because raw passthrough is a compatibility feature rather than the principal value.
187
-
188
- ## Build credible attention
189
-
190
- Create interest through short, reproducible contrasts rather than market-size or
191
- speed claims.
40
+ | Calling agent | What to offload, prompts, task dependencies, independent concurrency, and answer verification |
41
+ | FreeLlama | Installed-model eligibility, policy, managed admission, memory forecasts, residency coordination, bounded history, and execution evidence |
42
+ | Operator | Ollama installation, endpoints, exact CPU model assignments, lifecycle approval, and runtime configuration |
43
+ | Ollama and the host | Model storage, runner loading, inference, and physical CPU/GPU scheduling |
192
44
 
193
- ### Demonstration 1: refuse before wasting work
45
+ Start with one Ollama process. A second process is optional for explicitly assigned CPU helpers.
46
+ An agent's placement preference chooses only among eligible configured models. Inspect observed
47
+ placement before treating CPU/GPU assignment as physical evidence.
194
48
 
195
- Show an agent previewing a task, rejecting an unqualified model, and returning the reason without
196
- an inference call. The story is not “the router is smart”; it is “a weak local model cannot quietly
197
- produce a confident answer.”
49
+ ## What agents receive
198
50
 
199
- ### Demonstration 2: preserve frontier context
51
+ | Need | Surface | Result |
52
+ |---|---|---|
53
+ | Inspect the machine and models | `doctor`, `models` | Host diagnostics, installed capabilities, and resident-runner observations |
54
+ | Preview suitability | `run_task {preview:true}` | A decision and reasons without running inference |
55
+ | Execute supplied content | `run_task` | Model output with routing, admission, timing, and placement evidence |
56
+ | Look up repository facts | `delegate_research` | A bounded read-only answer, citations, and `accept`, `verify`, or `escalate` verdict |
57
+ | Dispatch independent work | `run_task_batch` | Bounded dispatch and separate results or errors |
58
+ | Manage longer work | `task_jobs` | Process-local status, result retrieval, cancellation, and removal |
59
+ | Reuse conversation history | `scope`, `session`, `warm_model` | Separate controls for message history, model affinity, and residency |
200
60
 
201
- Give `delegate_research` a narrow repository question. Show the local adapter reading allowlisted
202
- files and returning an answer, citations, and a verification verdict instead of returning all source
203
- material and intermediate tool output to the orchestrator.
61
+ Preview accepts routing fields only. Submit prompts, messages, images, embedding input, tools,
62
+ and runtime controls in a separate execution call. A preview does not reserve capacity.
63
+ For requests and result fields, use the [MCP reference](../packages/mcp/README.md).
204
64
 
205
- One measured six-question run reduced 59,208 source tokens to 1,742 returned tokens, or 97.1%
206
- context offload. That is a single measured workload, not a universal savings rate. The durable
207
- claim is context isolation; see [token economics](ECONOMICS.md).
65
+ ## Resource management
208
66
 
209
- ### Demonstration 3: use the machine as a system
67
+ FreeLlama manages requests before they reach the inference runtime. Its resource controls include:
210
68
 
211
- Run a large GPU completion and a small CPU helper concurrently, then show both placement receipts.
212
- On the measured 48 GB Apple M4 Pro, three warmed trials reduced median wall time from 37.997 to
213
- 28.233 seconds, a 1.346-times speedup. One of the three parallel trials was slower than sequential,
214
- so the claim is “these workloads can overlap,” not “CPU/GPU mode is always faster.” See the full
215
- [CPU/GPU measurement](CPU_GPU_ROUTING.md#interpret-the-measured-mac-result).
69
+ - Per-backend weighted admission, finite queues, priorities, wait budgets, and deadlines.
70
+ - Host-pressure checks and forecast memory reservations for managed work.
71
+ - Model-transition coordination and requests to unload idle, unpinned models when a cold load needs room.
72
+ - Explicit routing to the primary or operator-assigned CPU backend.
73
+ - Bounded warm execution feedback for eligible speed-oriented automatic routes.
74
+ - Receipts and status views that expose queues, resource holds, residency, timing, and placement.
216
75
 
217
- These demonstrations map directly to three memorable benefits: **trust, context, and resources**.
218
- Turn them into a short terminal recording, copyable README recipes, and versioned benchmark
219
- receipts. Each demo needs the command, machine profile, model tags, policy, result, and
220
- failure conditions.
76
+ The operator configures topology and limits. FreeLlama does not preempt inference or control other
77
+ processes that call Ollama directly. It coordinates model use through Ollama rather than allocating
78
+ physical GPU cores or implementing inference kernels.
221
79
 
222
- ## Adoption path
80
+ Read [CPU/GPU routing](CPU_GPU_ROUTING.md) for placement and
81
+ [monitoring](MONITORING.md) for effective settings and runtime observations.
223
82
 
224
- The first-use sequence needs to reveal value before asking for sophisticated configuration:
83
+ ## Context and cost
225
84
 
226
- ```mermaid
227
- flowchart LR
228
- I["Install beside Ollama"] --> D["doctor\nsee machine and drift"]
229
- D --> P["preview\nsee a route and reasons"]
230
- P --> T["run one managed task\nsee the receipt"]
231
- T --> G["delegate research\nsee citations and verdict"]
232
- G --> B["benchmark\nmeasure local models"]
233
- B --> Y["policy\nallow proven routes"]
234
- Y --> R["resource tuning\nCPU/GPU and admission"]
235
- ```
85
+ Delegated research keeps source files and intermediate local-tool observations out of the calling
86
+ agent's prompt. The local worker still consumes input/output tokens and hardware time. Embedding
87
+ vectors stay out of MCP results by default unless the caller requests them.
236
88
 
237
- The product must not require a new user to understand every tool, KV-cache setting, or routing
238
- objective before the first managed task. Advanced controls become relevant after the first receipt
239
- makes the control loop visible.
89
+ This can reduce the calling agent's context burden. It does not imply zero-cost computation or a
90
+ universal savings rate. The [token economics report](ECONOMICS.md) separates historical measurements,
91
+ client-envelope sizes, and session estimates.
240
92
 
241
- ## Claim and naming guardrails
93
+ ## Describe the product consistently
242
94
 
243
- | Do not say | Say instead |
95
+ | Context | Wording |
244
96
  |---|---|
245
- | Free local inference | Local inference uses hardware, power, memory, and time; FreeLlama can preserve paid frontier context. |
246
- | Automatically picks the optimal model | Routes among eligible installed models using explicit policy and available evidence. |
247
- | Makes Ollama faster | Can improve workload efficiency; it does not increase one model's decode speed. |
248
- | Runs CPU and GPU in parallel on every machine | Can overlap explicitly assigned workloads when the host and Ollama backends support them; measure the result. |
249
- | Works the same on any hardware | Uses platform-specific host discovery on macOS, Linux, and Windows. Portable defaults do not remove the need to observe accelerator behavior. |
250
- | Replaces Ollama | Runs beside Ollama and preserves its native API. |
251
- | For everyone | Built first for developers and local-AI operators. |
252
- | Llama models only | Works with qualifying models exposed by Ollama; “Llama” is the product name, not a model-family restriction. |
253
-
254
- Use the word “Free” to refer to reducing reliance on metered frontier inference, not zero-cost
255
- computing. Readers can misread “Llama” as Meta Llama-only, so put the Ollama relationship and model
256
- agnosticism within Ollama near the first description.
257
-
258
- ## Product decision
259
-
260
- Narrow the story before broadening the product:
97
+ | Category | Local-model delegation and resource management layer |
98
+ | One line | FreeLlama helps AI agents offload tasks to local models while managing model selection and resources. |
99
+ | Mechanism | Inspect, qualify, preview, admit, execute, and return evidence. |
100
+ | Runtime relationship | FreeLlama manages requests around Ollama; Ollama runs inference. |
101
+ | Verification | The calling agent verifies answers against the task and returned evidence. |
261
102
 
262
- 1. Lead with developers operating AI agents, not all developers.
263
- 2. Make trustworthy delegation the category-defining job.
264
- 3. Use MCP as the primary agent integration and the CLI as the operator surface.
265
- 4. Treat Ollama power users and embedders as secondary audiences.
266
- 5. Treat Ollama contributors as an adjacent ecosystem audience, not the main customer.
267
- 6. Do not pursue a mainstream chat interface until the developer onboarding loop is clear and
268
- repeatable.
103
+ Describe model eligibility, verification controls, and measured workload performance. Describe
104
+ CPU/GPU overlap as a supported workload arrangement that needs measurement on
105
+ the target machine. Local inference consumes hardware, memory, power, and time.
269
106
 
270
- This decision matches the code that exists today. The Rust core, CLI, MCP server, proxy, agent
271
- skill, benchmark harnesses, and policy system all support a developer control plane. Positioning it
272
- as a consumer app promises a product surface the repository does not provide.
107
+ The name refers to reducing reliance on metered inference. Models are not restricted to the Meta
108
+ Llama family: FreeLlama works with eligible models exposed by Ollama.
273
109
 
274
- ## Related documentation
110
+ ## Evidence and boundaries
275
111
 
276
- - [Architecture](ARCHITECTURE.md): ownership boundaries and request flows
277
- - [MCP server](../packages/mcp/README.md): six agent-facing tools and their contracts
278
- - [CLI](CLI.md): operator commands and control-plane workflows
279
- - [Model selection](MODEL_SELECTION.md): evidence, qualification, and recommendation
280
- - [CPU/GPU routing](CPU_GPU_ROUTING.md): portable configuration, feedback, and measured limits
281
- - [Testing](TESTING.md): verification tiers and live-runtime boundaries
282
- - [Token economics](ECONOMICS.md): measured context isolation and its limits
112
+ The [findings report](dev/FINDINGS_AND_POSITIONING.md) records dated assessments and comparisons.
113
+ [Benchmarks](../benchmark/README.md) separate model correctness, adapter behavior, and hardware
114
+ validation. Historical measurements describe their declared model, machine, and workload.
283
115
 
284
- ## Sources
116
+ Managed tasks are non-streaming; raw Ollama passthrough retains upstream streaming behavior.
117
+ Scopes and deferred jobs are process-local. A scope is history, a session is affinity, and a warm
118
+ model is residency; none is a tenant credential or an engine-cache snapshot.
285
119
 
286
- - [Ollama API introduction](https://docs.ollama.com/api/introduction)
287
- - [Ollama tool calling](https://docs.ollama.com/capabilities/tool-calling)
288
- - [Model Context Protocol architecture](https://modelcontextprotocol.io/specification/2025-06-18/architecture)
289
- - [Open WebUI](https://github.com/open-webui/open-webui)
290
- - [LiteLLM](https://github.com/BerriAI/litellm)
291
- - [RouteLLM](https://github.com/lm-sys/RouteLLM)
120
+ FreeLlama targets one operator or a trusted team. Use the [production runbook](PRODUCTION.md) for
121
+ authentication, remote access, persistence, and recovery.
package/docs/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # FreeLlama documentation
2
+
3
+ FreeLlama helps agents offload bounded work to local models through Ollama. The calling agent owns
4
+ the task and verifies the answer; FreeLlama manages model selection and resources around execution.
5
+ Start with the [repository quick start](../README.md#quick-start) to run one managed task.
6
+
7
+ ## Choose a guide
8
+
9
+ | Goal | Guide |
10
+ |---|---|
11
+ | Connect an agent and choose a tool | [MCP server](../packages/mcp/README.md) |
12
+ | Follow the agent's operating workflow | [FreeLlama skill](../skills/freellama/README.md) |
13
+ | Look up commands and task controls | [CLI reference](CLI.md) |
14
+ | Understand task and resource ownership | [Architecture](ARCHITECTURE.md) |
15
+ | Choose a model from measured evidence | [Model selection](MODEL_SELECTION.md) |
16
+ | Interpret capabilities and public model metadata | [Model metadata](MODEL_METADATA.md) |
17
+ | Configure CPU helpers alongside GPU work | [CPU/GPU routing](CPU_GPU_ROUTING.md) |
18
+ | Inspect queues, memory, usage, and live settings | [Monitoring](MONITORING.md) |
19
+ | Retain history, affinity, or residency | [Scopes and warming](SCOPES_AND_WARMING.md) |
20
+ | Understand raw Ollama compatibility | [Sidecar boundary](OLLAMA_SIDECAR.md) |
21
+ | Evaluate context offload and its cost | [Token economics](ECONOMICS.md) |
22
+ | Deploy the management layer | [Production runbook](PRODUCTION.md) |
23
+ | Run development and release checks | [Testing](TESTING.md), [release procedure](../RELEASE.md) |
24
+ | Embed the routing core | [Rust core](../packages/rust-core/README.md) |
25
+ | Use the read-only dashboard | [Runtime view](../packages/view/README.md) |
26
+
27
+ ## Evidence and design
28
+
29
+ | Goal | Source |
30
+ |---|---|
31
+ | Describe the product and its limits | [Product positioning](PRODUCT_POSITIONING.md) |
32
+ | Review dated findings and project comparisons | [Findings report](dev/FINDINGS_AND_POSITIONING.md) |
33
+ | Measure inference, device activity, and thermal behavior | [Local performance testing](dev/LOCAL_PERFORMANCE_TESTING.md) |
34
+ | Separate management controls from inference tuning | [Ollama optimization boundary](dev/OLLAMA_SYSTEM_OPTIMIZATION.md) |
35
+ | Understand backend selection decisions | [Resource-routing ADR](dev/ADR_RESOURCE_AWARE_BACKEND_ROUTING.md) |
36
+ | Choose a model, adapter, or hardware benchmark | [Benchmark index](../benchmark/README.md) |
37
+ | Inspect research adapter contracts and caveats | [Adapter reference](../benchmark/local/docs/07-adapter-contracts.md) |
38
+
39
+ Historical measurements describe one model, machine, and workload. Inspect current state and
40
+ repeat the relevant checks before using them to select models or set resource limits.