All applications
FIELDDESK · NATIVE LOCAL GEN AI

A lab-room alert.
An answer you can trace.

Read the incident record. Find the relevant handbook passage. Compute the rule in Aner. Then ask a local language model to turn that evidence into a clear incident brief, with its sources beside it.

Local GGUF weights · 8 GB GPU planning target · CPU fallback

FieldDesk combines calibration-room sensor observations, explicit Aner rules and a local model into a source-linked incident brief.
Illustrative interface for the runnable synthetic case. The application produces files and terminal output; this page explains the workflow.
01 / A PRACTICAL QUESTION

“What happened, and what should the next shift do?”

A small operations team has a temperature alert, a CSV of observations and several procedure pages. FieldDesk assembles an incident brief from that local evidence. The room, nonhazardous polymer sample experiments, observations and procedures are synthetic, so the full case can be shared and reproduced.

INPUT / RETAINED OBSERVATIONS

Three observations to check.

CASE-017 records a 24.2°C temperature, 72% relative humidity and a filter age of 820 hours. Aner compares each reading with the fixture’s declared limit and retrieves the three relevant handbook passages.

CSV observations + handbook fixtures
COMPUTATION / EXPLICIT RULE

PAUSE_AND_ESCALATE

The decision is a deterministic result of the supplied rules and readings. Source IDs and calculated values travel with that result. The retained decision stays beside generated text, and the validation runner flags a missing decision label or an unknown source reference.

Repeatable with or without an LLM
GENERATION / LOCAL WEIGHTS

A brief the next person can read.

The model explains the evidence, states the declared action and cites the selected source IDs. Its generated wording remains reviewable beside the original observations and rule result. The explanation executes no physical action.

Evidence-grounded language
TEMPERATURE EXCESS+2.2°C

24.2°C observed − 22°C ceiling
[FD-101]

HUMIDITY EXCESS+7 pp

72% RH observed − 65% ceiling
[FD-102]

FILTER SERVICE OVERDUE70 hours

820 hours observed − 750-hour interval
[FD-103]

Read the three selected synthetic source passages
FD-101

Calibration room temperature excursion

Synthetic training procedure. The calibration room target is 18 to 22 degC. If temperature exceeds 22 degC pause new measurements and mark affected nonhazardous polymer sample coupons pending review. Record the observed temperature and notify the room lead. Do not assert that a sample is damaged without a separate assessment.

FD-102

Humidity excursion

Synthetic training procedure. The calibration room relative humidity ceiling is 65 percent. Above this limit pause new measurements and record the humidity. Check the door and the dehumidifier indicator without dismantling equipment. The room lead decides when the experiment can resume.

FD-103

Airflow and filter service

Synthetic training procedure. The ventilation filter service interval is 750 operating hours. Record overdue hours and request authorized maintenance when the interval is exceeded. An overdue filter is a maintenance observation and does not prove the cause of a temperature or humidity excursion.

RETAINED MODEL RESPONSEQwen2.5 7B · Metal · retained stateless request 2
Decision: PAUSE_AND_ESCALATE - Temperature exceeded the ceiling by 2200 milli-degC ([FD-101]). - Relative humidity exceeded the ceiling by 700 basis points ([FD-102]). - Filter was 70 hours overdue, but its age does not establish the cause of the excursion ([FD-103]). Next steps: 1. Pause all new measurements. 2. Record the excursions and notify the room lead. 3. Check the dehumidifier and room door. 4. Request authorized maintenance for the filter. 5. Review the incident with the room lead.

Declared decision: PAUSE_AND_ESCALATE · Selected sources: FD-101, FD-102, FD-103

This saved answer preserves the computed decision and overages and states that filter age does not establish cause. A human still reviews each operational statement against the selected synthetic procedures; the program executes no equipment action.

Aner owns the calculation.

CSV parsing, document selection, thresholds, ordering and the decision are ordinary application code. The case demonstrates lexical retrieval over a five-document curated collection. The small input makes the execution boundary easy to inspect; it does not establish a parallel speedup. No embedding service or vector database is required.

The model owns the explanation.

Local generation turns a compact evidence packet into useful prose. Checking source IDs catches unsupported references; a person still checks whether each statement follows from its source. A citation alone does not prove a claim.

The case concerns synthetic nonhazardous polymer sample experiments. Its procedures describe this demonstration only. The application executes no physical action and does not infer a cause, sample damage or approval from a language model answer.

02 / ONE EVIDENCE PIPELINE

Keep the reasoning you can compute beside the language you generate.

The same prepared evidence can go directly to an in-process model or to a local service. Both routes retain the model artifact identity, response timing and sources used for the request.

Retained sources enter deterministic Aner logic and a bounded prompt, then either aner.llm in process or aner.api as a local service produces an incident brief with sources and telemetry.
Inference runs in Aner’s native runtime using the pinned llama.cpp engine. Both routes execute native Aner inference. Retained telemetry accompanies the historical evidence.
  1. 01

    Prepare an evidence packet.

    Read the local fixtures, choose relevant passages, calculate the incident facts and write a bounded prompt. Put common instructions and stable source material first so repeated requests have a useful exact prefix.

  2. 02

    Load a specific model once.

    The program loads a compatible local single-file GGUF, inspects its fingerprint and selects CPU, CUDA or Metal explicitly. “Auto” resolves to an available supported backend; the program records the resolved device.

  3. 03

    Generate under a declared budget.

    Use a 4,096-token context and a bounded output. The complete formatted prompt plus maximum output must fit. The runtime rejects excess context instead of silently dropping the earliest evidence.

  4. 04

    Check and retain the result.

    Save the rule result, source IDs, generated text, model fingerprint and native timings. Compare repeated and concurrent runs under the same input and sampling policy.

03 / DIRECT IN CODE / LOCAL API

One local model. Two ways into your application.

Embed generation in an Aner program, or keep a model resident behind aner.api and call it from another process. The companion programs share the evidence prepared by the same application; the source excerpts below show their native integration.

direct.aner · runnable companion excerpt
// Obtain this artifact separately. device auto also works on CPU-only builds.
// Edit the local model path and device constants below for your machine.
let base = llm.load("models/qwen2.5-7b-instruct-q4_k_m.gguf", context: 4096,
    device: "auto", kv_cache_type: "f16", flash_attention: "auto")
let optimized = base.with_optimizer(threads: 0, prefill_threads: 0, batch_tokens: 512, micro_batch_tokens: 128, prefix_cache_entries: 0, prefix_cache_tokens: 1024, speculative_tokens: 0)
let model = optimized.session()
print("FIELD_DESK_LOAD " + base.load_summary())
print("FIELD_DESK_MEMORY " + model.memory_summary())
print("FIELD_DESK_MODEL " + quoted(base.fingerprint()))
print("FIELD_DESK_DEVICE " + quoted(base.device()))
let prepared = prepare_case("Temperature humidity filter: explain the calibration room incident and the next operator steps.", parallel.local(workers: 1))
print("FIELD_DESK_CASE " + prepared.record())
// Full intended messages are supplied every time. The exact common prefix is reusable.
let questions = List("Explain the immediate response.", "Explain the observations and avoid claiming a cause.", "Summarize a handover for the next operator.")
for iteration in Range(3) {
    require(prepared.has_evidence, "retrieval must succeed before inference")
    let messages = List(llm.message("system", prepared.system_prompt),
        llm.message("user", prepared.user_prompt + "\nOUTPUT TASK: " + cast<String>(questions.get(iteration % questions.len()))))
    let answer = model.chat(messages, max_tokens: 192, temperature: 0.0, seed: 2026)
    print("FIELD_DESK_RESPONSE {\"iteration\":" + String(iteration) +
        ",\"text\":" + quoted(answer.text()) + ",\"finish_reason\":" + quoted(answer.finish_reason()) +
        ",\"input_tokens\":" + String(answer.input_tokens()) +
        ",\"output_tokens\":" + String(answer.output_tokens()) +
        ",\"cached_input_tokens\":" + String(answer.cached_input_tokens()) +
        ",\"tokens_per_second\":" + String(answer.tokens_per_second()) +
        ",\"timings\":" + answer.timings() + "}")
}
print("FIELD_DESK_FINAL_MEMORY " + model.memory_summary())
model.close()
optimized.close()
base.close()

Direct: a local native dependency.

llm.load admits local weights; generation executes in the same native process. Close the model when its work is complete. Use an explicit session when a conversation should retain exact-prefix KV.

Native model guide

API: a bounded resident service.

The companion binds loopback at 127.0.0.1:11435 and exposes /api/chat. An Aner Ollama-style client can call that limited compatible chat contract. GET /api/tags discovers the configured model identity.

Native API and endpoint contracts

The API is a service-to-service interface with bounded requests, explicit route configuration and optional NDJSON streaming. Browser Origin requests are rejected by the current contract. For access from another machine, use the documented authentication and verified transport setup; the example listener stays local.

04 / DESIGNED AROUND COMMON HARDWARE

Plan local inference for an 8 GB card.

The reference model is Qwen2.5-7B-Instruct in Q4_K_M GGUF. Start with one active sequence and a 4,096-token context. Change the assumptions below to see why more users or longer prompts need deliberate memory planning.

REFERENCE WEIGHTS≈ 4.68 GB

≈ 4.36 GiB · Q4_K_M single-file GGUF

DEFAULT KV AT 4K224 MiB

One sequence · F16 · calculated tensor storage

ENTRY MODEL1.5B

Optional smaller Qwen2.5 model for CPU and quick checks

Model sizes, quantizations and Apache 2.0 license: Qwen 7B model card and Qwen 1.5B model card. KV calculation uses the 7B architecture configuration: 28 layers, 4 KV heads and 128 dimensions per head. Approximate download sizes use decimal GB; this planner displays binary GiB.

ESTIMATED DEVICE BUDGET

6.08 / 8 GiB

Approximate GGUF weights
4.36 GiB
K + V cache
0.22 GiB
Workspace + driver reserve
1.50 GiB

Inside this planning budget. Verify actual free VRAM and peak allocation on your card.

Estimate = approximate GGUF file size + K/V tensor storage + a chosen 1.50 GiB reserve. The reserve is an assumption; compute workspace, adapters, backend alignment, display use and other processes can require more. Each retained independent prefix/session context adds its own cache. A speculative draft model would add its own weights and cache. Unified memory on Metal differs from dedicated GPU VRAM.

Context and concurrency consume the same memory budget.Selected model and KV precision · estimate in GiB
Estimated memory as context growsTwo curves compare one and four resident sequence slots. The horizontal dashed line marks an illustrative eight GiB device budget. Exact values are available below.04812164k8k16k32k

Teal: one slot. Amber: four slots. Dashed line: 8 GiB. These curves are arithmetic estimates, with the same 1.50 GiB reserve at every point.

Read the calculated values and formula
Qwen2.5 7B · Q4_K_M · f16 KV · 1.50 GiB reserve
Context / sequence1 slot / GiB4 slots / GiB
4,0966.086.74
8,1926.307.61
16,3846.749.36
32,7687.6112.86

K/V bytes = 2 × layers × KV heads × head dimension × bytes per value × context × slots. Q8_0 uses 34/32 bytes per value, including block scales; F16 uses 2.

01 / Start small

One active sequence, one resident model and a short output ceiling. Close unused leases and sessions.

02 / Inspect reality

Record free VRAM, resolved device and actual peak allocation. The runtime’s weight summary excludes some workspace and driver costs.

03 / Add one choice at a time

Compare longer context, extra slots and quantized KV independently. Preserve the same incident checks.

05 / SIX OPTIMIZATIONS / DIFFERENT BOTTLENECKS

Reuse work. Move less data. Keep the device busy.

These mechanisms act at different stages of inference. The development optimizer exposes explicit controls and telemetry so a faster-looking configuration can be checked for actual support, correct output and useful end-to-end performance.

01

KV caching

Reuse past tokens inside a request or an explicit session.

Autoregressive decoding retains keys and values. A session reuses an exact token prefix when the caller supplies the complete intended history.

Measure
Cached input tokens, prompt evaluation time, retained context memory.
Budget / limit
A longer context occupies more memory. Reset or close a session to release its retained KV.
02

Prefix caching

Share repeated prompt work across independent requests.

An opt-in bounded cache retains compatible prompt contexts. Reuse requires an exact token prefix under the same model, adapter and execution configuration.

Measure
Cache hit tokens, fresh input tokens, retained cache slots and time to first token.
Budget / limit
Each retained context has a memory cost. Keep shared reusable instructions first and isolate private tenants with separate model/cache owners.
03

Quantization

Reduce weights and, separately, KV storage.

The case uses prequantized Q4_K_M GGUF weights. F16 KV is the default; Q8_0 KV is an explicit compatible Flash Attention option.

Measure
Actual model bytes, peak device allocation, answer checks and decode throughput.
Budget / limit
Weight and KV precision are different choices. Lower precision can change outputs; evaluate the intended task.
04

Flash Attention

Reduce attention intermediates and memory traffic.

The pinned native engine selects the supported attention implementation. Attention policy can be auto, on or off; unsupported explicit combinations fail.

Measure
Prompt/decode timings and peak memory at representative context lengths.
Budget / limit
A request for Flash Attention is a policy, not proof of the exact kernel selected. Backend and hardware qualification remain explicit.
05

Speculative decoding

Verify several candidate tokens in one target-model pass.

The development optimizer uses prompt lookup for greedy decoding: candidate continuations come from the supplied token history and the target model verifies them.

Measure
Drafted, verified and accepted tokens; target passes; end-to-end time; equality with greedy reference.
Budget / limit
Benefits depend on repeated text and acceptance. This path does not load a second draft model. Stochastic speculative sampling requires a separate verified algorithm.
06

Continuous batching

Keep several active sequences moving in one shared context.

An opt-in sequence scheduler combines work at token-step boundaries, releases finished slots and admits waiting requests under a one-to-four-sequence bound.

Measure
Concurrent request throughput, queue delay, per-request latency and memory.
Budget / limit
More slots increase KV and workspace. Start with one slot and tune from measurements. The batched profile requires shared prefix caching and speculative lookup to be disabled.

A latency experiment.

For repeated manuals and greedy answers, try a single retained prefix context and a short prompt-lookup verification window. The complete preceding arguments stay explicit. Zero thread values select the runtime’s bounded host default.

Alternative profile · Latency
let latency = base.with_optimizer(
    threads: 0, prefill_threads: 0,
    batch_tokens: 512, micro_batch_tokens: 128,
    prefix_cache_entries: 1, prefix_cache_tokens: 1024,
    speculative_tokens: 4)
print(latency.memory_summary())

A throughput experiment.

For several simultaneous callers, choose a batched lease with two sequence slots. This alternative disables retained shared prefixes and prompt lookup. Use one profile at a time when testing a small device.

Alternative profile · Throughput
let throughput = base.with_optimizer(
    threads: 0, prefill_threads: 0,
    batch_tokens: 512, micro_batch_tokens: 128,
    prefix_cache_entries: 0, prefix_cache_tokens: 1024,
    speculative_tokens: 0)
    .with_batching(max_sequences: 2)
print(throughput.memory_summary())
Choose a mechanism by the observed bottleneck. A technique is not a guarantee of speedup.
What you observeFirst experimentKeep visible
Repeated manuals make first token slowExact prefix reuse; stable content before the changing questionCached vs newly evaluated input tokens; tenant cache ownership
A long context consumes the cardShorter selected evidence; then compatible Q8_0 KVPeak allocation, source coverage and answer checks
One CPU request is slowCompare decode and prefill thread budgets, batch and microbatch sizesPhysical cores, memory bandwidth and competing workers
Repeated output needs many target passesGreedy prompt-lookup speculative verificationAcceptance rate and equality with the target greedy reference
Several users leave the GPU underusedBounded continuous batching with two slots, if memory permitsQueue delay, completion latency, total throughput and KV growth

Keep CPU thread budgets across workers within the host’s resources. A bigger prefill batch can improve throughput while increasing workspace. Prefix caches, sessions and batched sequence slots have separate lifetimes and memory costs. Read the exact optimizer API, bounds and telemetry contract.

06 / LOCAL PARALLELISM / MULTIPLE COMPUTERS

Place the work where its resources live.

A single GPU accelerates model computation. CPU workers can prepare independent evidence packets. A cluster gives independent cases to machines that each own their model and memory budget.

ONE COMPUTER / CPU

Run the complete case locally.

Select device: "cpu". Tune prefill and decode threads independently. The optional 1.5B model shortens the experiment. CPU inference uses system RAM and is usually slower than a capable GPU for this workload.

ONE COMPUTER / GPU

Keep weights resident.

Use an admitted CUDA or Metal backend. Prepare once, generate several answers and inspect warm timings. Start with one sequence, then test two-slot batching only after the device has enough headroom.

SEVERAL COMPUTERS / CLUSTER

Distribute independent incidents.

Use the supplied cluster preparation route with compatible enrolled runtimes. Each node computes its assigned independent cases. For inference services, each configured node owns its local model and bounded request admission.

Independent work crosses the network.Conceptual deployment layout · hardware timings require a retained run
Incident queueExplicit case identities
CPU nodeLocal weights + bounded threads
GPU nodeLocal weights + bounded slots
Ordered briefsSources + decisions + receipts

The Aner programs distribute independent retrieval tasks. For inference replicas, run an Aner API server on each model owner and send each complete request to a chosen service. Each node owns a full model copy. Continuous batching is local to one model owner; this case does not implement cross-machine tensor parallelism.

Persistent session and prefix state belong to a process. Route a conversation consistently when using multiple service instances, or resend its complete history to a different node and accept fresh prefill. Enroll cluster workers explicitly and budget each node separately. Parallel computation · Cluster setup · GPU execution

07 / MEASURE THE APPLICATION

Keep faster, correct and reproducible in the same experiment.

The retained experiments record request telemetry and generated output. Compare cold and warm runs separately, keep exact model bytes identifiable and use a representative incident before increasing load.

RECORDED EXECUTION

Apple M2 Max with 64 GiB unified memory, using Metal. Same Qwen2.5 7B Q4_K_M artifact, F16 KV, 4,096-token context, greedy generation and a 192-token output ceiling. One process per profile; one warmup plus three timed requests. This is an exploratory application run, not an 8 GB discrete-GPU qualification.

First generated text, with the same incident evidence.Native duration in milliseconds · lower is faster · loading excluded
Observed native first-text latency across four inference profilesEach dot is a timed request. A thick marker shows the median and a horizontal line spans the observed range. These are three requests in one process for each profile, with one warmup omitted, on an Apple M2 Max using Metal.0312.5625937.51,250StatelessStateless: observed native first-text duration 821.089 msStateless: observed native first-text duration 822.474 msStateless: observed native first-text duration 824.165 msExplicit sessionExplicit session: observed native first-text duration 41.760 msExplicit session: observed native first-text duration 44.364 msExplicit session: observed native first-text duration 57.886 msShared prefixShared prefix: observed native first-text duration 49.284 msShared prefix: observed native first-text duration 49.752 msShared prefix: observed native first-text duration 57.952 msPrompt lookupPrompt lookup: observed native first-text duration 955.555 msPrompt lookup: observed native first-text duration 1003.843 msPrompt lookup: observed native first-text duration 1032.381 ms

Three timed requests per profile, after one warmup. Dots, median markers and ranges describe this exploratory run; they are not confidence intervals. Each profile ran in one process, so repeated processes and randomized ordering are needed for a broader performance comparison.

Recorded trials from the retained development build. Each row names its model. Native first-text and total request durations exclude model loading.
ExecutionModelDeviceInput / cachedOutputFirst text / msTotal / msDecode / tokens·s⁻¹
StatelessQwen2.5 7B Q4_K_MMetal · M2 Max510 / 0144824.23011.865.82
StatelessQwen2.5 7B Q4_K_MMetal · M2 Max512 / 0134822.52927.663.65
StatelessQwen2.5 7B Q4_K_MMetal · M2 Max506 / 0157821.13256.464.46
Explicit sessionQwen2.5 7B Q4_K_MMetal · M2 Max510 / 49814457.92325.163.51
Explicit sessionQwen2.5 7B Q4_K_MMetal · M2 Max512 / 49613444.42140.263.93
Explicit sessionQwen2.5 7B Q4_K_MMetal · M2 Max506 / 49615741.82489.264.15
Shared prefixQwen2.5 7B Q4_K_MMetal · M2 Max510 / 49814458.02412.861.15
Shared prefixQwen2.5 7B Q4_K_MMetal · M2 Max512 / 49613449.32361.757.95
Shared prefixQwen2.5 7B Q4_K_MMetal · M2 Max506 / 49615749.82775.357.60
Prompt lookupQwen2.5 7B Q4_K_MMetal · M2 Max510 / 0144955.63290.261.68
Prompt lookupQwen2.5 7B Q4_K_MMetal · M2 Max512 / 01341003.83136.462.83
Prompt lookupQwen2.5 7B Q4_K_MMetal · M2 Max506 / 01571032.43623.560.59

Each row is a retained trial, not a claim about every 8 GB card. Decode throughput and total request time have different timing boundaries. The raw output and model identity are retained with the application evidence. They accompany the published repository source.

  • All four profiles returned identical generated text and output-token hashes for the corresponding requests in this run.
  • The timed session and shared-prefix requests reused medians 496 and 496 input tokens; stateless requests reused 0.
  • The validation runner accepted decision labels, known citation IDs, completed output and an explicit statement of causal uncertainty for every captured response.

Reference model artifact SHA-256: 1875fb29e8c91c86615c00e92d8b4114e56bc24359adb5a8db8b36452fae4a49. This identifies the merged local file; model weights are supplied separately.

Median native first-text latency was 822.5 ms for stateless requests, 44.4 ms for explicit sessions and 49.8 ms for shared prefixes. Prompt lookup accepted 109 of 404 proposals across the three timed requests and did not improve this workload: its median first-text latency was 1,003.8 ms and median decode throughput was 61.68 tokens/s, versus 64.46 tokens/s without lookup. Speculation remains opt-in. Mechanical checks do not establish full semantic accuracy: some other responses used imprecise equipment wording, so human source review remains necessary. Peak device memory, repeated-process uncertainty and 8 GB CUDA performance were not measured.

CPU fallback and a smaller KV cache.

Same 7B artifact and 192-token output ceiling · one warmup plus three timed requests per profile · medians
ProfileDeviceKV tensor estimateFirst text / msDecode / tokens·s⁻¹Interpretation
CPU sessionCPU · M2 Max224 MiB459.118.25Functional CPU fallback; output wording can differ from Metal despite greedy settings.
Q8 KV + Flash onMetal · M2 Max119 MiB1615.142.96119 MiB versus 224 MiB F16 KV payload; slower in this capture. Both KV precision and attention policy changed.

Serve the same native weights through the local API.

Complete streamed HTTP replies were measured after one excluded Aner-client warmup. Aggregate throughput uses total returned output tokens divided by the external wall time for all timed requests; it differs from the native decode metric above.

Two concurrent callers. Six complete replies.Observed aggregate output tokens per second · higher is faster
No batching
47.87
Continuous · 2 slots
53.73

Both two-caller runs returned 870 tokens, with identical corresponding text and token counts. Continuous batching reached two active sequence slots. This is one server process per setting, with six timed requests; repeated-process uncertainty and 8 GB device fit are unmeasured.

Apple M2 Max · Metal · F16 KV · Qwen2.5 7B Q4_K_M · loading and warmup excluded
Serving profileCallersBatch slotsRepliesOutput tokensWall / sAggregate / tokens·s⁻¹
Shared prefix API1Off34357.18160.57
No batching2Off687018.17347.87
Continuous · 2 slots22687016.19453.73

The two-slot scheduler estimates 448 MiB of F16 K/V payload at 4,096 tokens per sequence, versus 224 MiB for one context. Workspace and driver memory are additional. API mechanical checks passed for every captured reply; a complete semantic evaluation and a live multi-machine deployment remain separate work.

What belongs in every result record

  • Runtime and pinned inference engine revision; model SHA-256; resolved device.
  • Context, KV precision, attention policy, threads, batch and sequence settings.
  • Prompt identity, seed, temperature, maximum and actual output tokens.
  • Input and cached-token counts; load, prefill, first-token and decode timing boundaries.
  • Decision/source validation, reference comparison, cancellation and failure outcome.

Performance varies with hardware, prompt shape, output length, cache state and concurrency. A warm cache reduces some work; it does not make generated reasoning more accurate. A fixed seed alone does not guarantee identical sampled output across hardware and kernels.

08 / SOURCE / RUN / EXTEND

Keep the code with the evidence.

The application’s Aner programs, synthetic fixtures, deterministic checks and retained measurements belong together in its source repository. Inspect the published code and README on GitHub, then run the case locally.

  1. Use the required Aner version.

    Use Aner 0.0.7 with the pinned native LLM dependency and the CPU, Metal or CUDA support needed for your machine. Verify the executable’s version before running the case.

  2. Download local model weights.

    Obtain both official Q4_K_M GGUF parts, verify their hashes and merge them with the pinned llama-gguf-split --merge tool. The repository guide documents exact commands and identities. Place the merged single-file artifact under models/, or set its local path in the Aner program.

  3. Prepare and verify the evidence.

    Run the native checks and preparation program from the application directory. Inspect the deterministic rule result and retrieved sources, then run the direct or API companion.

  4. Change one inference setting and compare.

    Keep the same evidence, output budget and sampling policy. Retain raw records, compare correctness, and report the memory and latency costs alongside throughput.

Shell · from the repository root
aner --version
aner check verify.aner
aner verify.aner
aner check prepare.aner
aner prepare.aner
aner check direct.aner
aner direct.aner

# A separate terminal keeps local weights resident.
aner server.aner
# Copy the server fingerprint into MODEL_ID_FROM_API_TAGS in client.aner.
aner client.aner

Read the repository README for the exact model path, fixture assumptions, CPU/GPU selection, validation steps and optional enrolled-cluster setup. Checking Aner source performs type checking without loading weights or starting a listener.

ANER PROGRAMS + FIXTURES + RETAINED EVIDENCE

FieldDesk source repository

The published repository keeps the code, synthetic inputs and measurement records together.

GitHub repository: https://github.com/aner-lang/aner-fielddesk-local-llm

View source on GitHub
09 / PRIMARY SOURCES / DECLARED LIMITS

Understand the mechanisms behind the choices.

The application is original synthetic demonstration material. The model configuration, inference algorithms and backend APIs have their own primary references; retain those distinctions when adapting the case.

  • Qwen2.5-7B-Instruct GGUF

    Official model artifact, available quantizations, model identity and Apache 2.0 license. The 1.5B variant is an optional smaller starting point.

  • Qwen2.5-7B architecture

    Layer and grouped-query attention dimensions used in the transparent memory estimate. The reserve remains an application assumption.

  • FlashAttention · Dao et al.

    IO-aware exact attention reduces transfers of intermediate attention data. Paper results describe their own models and hardware.

  • Speculative decoding · Leviathan et al.

    Draft-and-verify decoding provides the algorithmic context. This development implementation uses greedy prompt lookup, with its narrower contract.

  • PagedAttention · Kwon et al.

    KV memory management and serving throughput motivate bounded concurrency. This case does not claim that Aner implements vLLM’s PagedAttention.

  • Aner native LLM contract

    Compatibility, model lifetime, device admission, explicit history, output budgets and telemetry. The companion API guide documents the served chat subset.