FLAC normalization renames the backend's WAV destination. The next
request then reuses that apparently vacant path and replaces the first
recording when normalization runs again.
Give each request a UUID filename, and test that successive FLAC outputs
retain distinct paths and their original bytes.
Addresses the overwrite report in #12633. Reference-audio input remains
outside this fix.
Assisted-by: Codex:gpt-6
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: localai-org-maint-bot <306269227+localai-org-maint-bot@users.noreply.github.com>
Pin the merge of LocalRecall #58 to include the PostgreSQL raw-vector
API and its reviewed client fixes. Keep existing text integration unchanged.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
* feat(launcher): package a Linux AppImage
Ship the existing Fyne launcher as an additive release asset without
bundling the server or changing its runtime downloader.
Pin packaging tools and the type-2 runtime, preserve the caller
environment, and document the native amd64 graphics requirements.
Validate packaging contracts and wire extraction smoke checks into CI.
Assisted-by: Codex:gpt-5
* fix(launcher): harden AppImage release checks
PR builds must not receive repository write credentials. Isolate uploads
in a gated job that consumes the tested artifact without checkout.
Keep the existing release check and dependency on GoReleaser.
A surviving process does not prove that the UI event loop works.
Require observable startup progress, reject initialization errors, and
bound termination. Document the remaining limits without changing the
launcher application. Add permission and smoke failure regressions.
Assisted-by: nib:unknown
* fix(launcher): install file for AppImage builds
appimagetool fails after Go compilation when file is missing. Install
it explicitly in CI and document the local build dependency. Check for
it before compilation and cover the missing-command failure in tests.
Assisted-by: nib:unknown
---------
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
* ⬆️ Update ggml-org/llama.cpp
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(llama-cpp): preserve chat session state
Newer llama.cpp parsers return template state outside the request JSON.
Pass that state to both inference tasks and response readers so grammar,
tool calls, and reasoning remain available in both chat paths.
Detect the parser API during preparation to preserve older fork builds.
Assisted-by: Codex:gpt-6
---------
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: mudler <2420543+mudler@users.noreply.github.com>
Co-authored-by: localai-org-maint-bot <306269227+localai-org-maint-bot@users.noreply.github.com>
* test(omnivoice): expose ignored duration controls
Compile the real wrapper with a model-free engine fixture. Four failing
assertions expose ignored duration, postprocessing, and validation.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* feat(omnivoice): add bounded duration controls
Validate request controls before reference reads or native output.
Preserve engine defaults when controls are omitted. Bound forced
single-shot duration to 30 seconds as wrapper resource policy.
Exercise the real native boundary, streaming rejection, and defaults
with synthetic PCM. Document quantization and postprocessing limits.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* test(omnivoice): require fixture-free ordinary tests
Expose the ordinary suite regression before isolating native fixtures.
Require selected native tests to reject a missing fixture explicitly.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* fix(omnivoice): isolate native fixture tests
Ordinary Go tests must run without a compiled native fixture.
Select fixture specs explicitly in the dedicated gate while keeping
parser tests ordinary and native checks mandatory.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
Aliases have no model file, so guessing attempts to parse the models
directory. Skip that work while retaining the context fallback and
normal alias validation.
Use a private call-local parser dependency to verify operation counts
without a mutable global hook. Cover concrete guessing, defaults,
alias validation, and resolved target equivalence.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
Exact configured requests need no loose-file enumeration. Reuse the
synchronized config lookup without adding a cache. Misses retain regex
discovery and raw-weight fallback with ALWAYS_INCLUDE.
Keep general listing and bearer discovery unchanged. Preserve request
validation, alias resolution, disabled-target checks, and model access.
Record diagnostics only for work performed.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
test: satisfy lint checks for upscale and diagnostics
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
* fix(chat): defer model fallback until after binding
Explicit chat models need neither legacy Bearer discovery nor default
listing. Defer those fallbacks until binding finds no model, while
keeping body validation and fresh binding inside each failover attempt.
Expose the existing request-phase UUID through a response header and a
nil-safe accessor. Disabled timing creates neither a header nor an ID.
Document the contract and cover fallback, authentication, and retries.
Assisted-by: OpenAI:undisclosed
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* test(http): check diagnostic router cleanup
Assert that deferred router cleanup succeeds instead of ignoring its
error. This fixes the errcheck failure in the chat authentication test.
Assisted-by: OpenAI:undisclosed
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
Diagnostic calls panic on a nil context even when timing is disabled.
Treat nil as an absent observation without changing loader contexts.
Add failing-first coverage for timing helpers and cached model loads.
The unchanged portable profile HTTP regression passes with this guard.
Assisted-by: OpenAI:undisclosed
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
* feat(diagnostics): add private opt-in profiler
Keep profiling on a dedicated loopback listener rather than the public API.
Validate settings and bind synchronously so startup reports configuration
and socket failures. Own sampling and shutdown for the run process.
Cover private handlers, blocked cmdline access, sampling cleanup, and
serving failures with focused Ginkgo tests.
Assisted-by: nib:gpt-6-astra
* feat(diagnostics): add sanitized phase timing
Carry generated request and reload identities through private contexts.
Keep timing disabled without allocations and emit only validated fields
at Info level when enabled.
Cover identity isolation, nested durations, inheritance, and sanitized
logging with focused race-tested Ginkgo specs.
Assisted-by: nib:gpt-6-astra
* fix(diagnostics): retain request observations
Reuse an existing request observation across recorders to avoid splitting
correlation. Keep the original context, identity, and sink without new
allocations. Preserve nil-recorder behavior and fresh reload identities.
Verify the regression fails before the fix and passes with the full
Diagnostics race suite afterward.
Assisted-by: nib:gpt-6-astra
* feat(cli): own opt-in diagnostics lifecycle
Expose profiling and phase timing flags without enabling them for debug.
Bind the private profiler before application initialization and propagate
serving failures through the run lifecycle.
Bound signal cleanup and preserve preload-only backend startup. Cover
flag parsing, preload isolation, cancellation, and once-only shutdown.
Document initialization and shutdown cancellation limitations.
Assisted-by: nib:gpt-6-astra
* feat(config): measure filter and reload phases
Separate request lock waits from filtering and held work. Aggregate reload
filesystem and parsing durations without logging inside the config lock.
Preserve caller option execution under the lock after metadata collection.
Extract only the internal diagnostics option before waiting for the lock.
Keep direct callers uninstrumented unless they supply diagnostics options.
Verify focused Diagnostics examples with the race detector, including
option ordering, gated contention, errors, panic propagation, and parity.
Assisted-by: nib:gpt-6-astra
* fix(config): separate early reload observation
Opaque callbacks cannot select timing before their execution point.
Carry the startup recorder explicitly through loader construction.
Apply late options once under the lock and honor composed last writes.
Document early and late phase boundaries and observation identities.
Report malformed gallery syntax as an internal parse failure without
changing strict or non-strict loader returns.
Assisted-by: nib:gpt-6-astra
* fix(config): preserve per-model option callbacks
The resolved snapshot suppresses existing callbacks during model defaults,
even when diagnostics are disabled. Pass original options through the
existing defaults pathway without adding diagnostics-driven replay.
Test stateful options with two models in enabled and disabled modes.
Preserve three calls and thread defaults of two and three.
Assisted-by: nib:gpt-6-astra
* feat(model): observe discovery phases
Carry request diagnostics through config and loose-file discovery to
separate directory enumeration from in-memory filtering and fallback.
Keep existing APIs as background-context wrappers and preserve discovery
policies, ordering, duplicates, errors, and filesystem operation counts.
Add focused parity, privacy, phase, and disabled-allocation tests.
The focused diagnostics race gate passes for model and galleryop.
Assisted-by: nib:gpt-6-astra
* feat(http): observe extraction phases
Generate diagnostic identity before request discovery, independently of
client correlation headers. End each extraction segment before inference
so downstream latency does not inflate discovery measurements.
Carry observations through discovery helpers and rebuilt request contexts
without changing cancellation or model selection. Cover disabled parity,
error outcomes, privacy, concurrent identity isolation and route contexts.
Assisted-by: nib:gpt-6-astra
* fix(http): retain diagnostics across failover
Failover restores its entry request before retrying. Initialize the
observation before that capture so direct extraction retains one ID.
Keep extraction spans per attempt and end them before downstream work.
Exercise two real targets without default middleware, including replay,
shared identity, phase boundaries, and timing-off response parity.
Assisted-by: nib:gpt-6-astra
* feat(model): observe initialization and routing
Mark loader entry before cache and admission checks. Measure only the
ModelRouter callback, without attributing transport or worker latency.
Test inherited identity and sanitized events with fake backends. Exercise
the actual Echo router to keep profiles private across debug and timing
options. Cover capture shutdown, forced close, and lifecycle failures.
Assisted-by: nib:gpt-6-astra
* docs(diagnostics): guide bounded investigations
Document private profiling, sampling ownership, and phase boundaries so
operators can interpret captures without assuming request attribution.
Add Ginkgo drift checks for flags, defaults, phases, links, and capture
warnings. These checks do not certify the operator prose.
The focused documentation race test passes after four expected failures.
The consolidated Diagnostics race gate passes across all eight packages.
This gate does not validate the full suite, auth, or production UI.
Assisted-by: nib:gpt-6-astra
* refactor(cli): restore inline run lifecycle
Remove diagnostic startup hooks so application startup stays readable
in Run. Keep the profiler as an optional sidecar with bounded cleanup
and an error watcher, without a general lifecycle runner.
Replace hook simulations with real CLI startup checks and component
capture tests. Document that application cleanup can exceed the
private listener budget.
The eight-package Diagnostics race gate passes. A cleanup mutation
fails the real CLI listener-release regression as expected.
Assisted-by: nib:gpt-6-astra
* fix(cli): retain concurrent startup errors
Cancellation must not hide a public API bind failure. Join the public
serve result, cancellation cause, and HTTP shutdown errors inline.
Ignore ErrServerClosed only after intentional shutdown.
Exercise real startup with an occupied API port and a failed private
listener. Isolate the Linux socket fixture in a subprocess and wait
for cancellation acknowledgment without timing sleeps.
Assisted-by: nib:gpt-6-astra
* refactor(http): make request context primary
Move context preparation into the request extractor. Diagnostics remain
an optional addition, not the entry point for request processing.
Preserve context initialization before failover captures the request.
Assisted-by: nib:gpt-6-astra
---------
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
* fix(ui): keep model actions visible on phones
Let model descriptions wrap without losing the install action offscreen.
Give page table rules precedence over the shared table styles.
Separate background facet probes from navigation assertions and wait for
asynchronous size sorting and masonry layout. Fix the chat fixture clock
so runs near midnight keep the expected conversation groups and order.
Assisted-by: Codex:gpt-6
* test(traffic): match complete percentile labels
Playwright joins adjacent table-cell text. A llama-cpp backend followed
by 99 requests then matches p99, although no percentile is shown.
Require word boundaries while keeping the absence assertion.
Assisted-by: Codex:gpt-6
---------
Co-authored-by: localai-org-maint-bot <306269227+localai-org-maint-bot@users.noreply.github.com>
fix(ui): keep import controls beside the preview
Place advanced options before checks and focus them from Adjust.
Use the shared kit busy spinner without a second loading indicator.
Clarify that source recognition checks format, not model contents.
Cover pending submissions, keyboard disclosure, backend preferences,
and source copy with full-page browser regressions.
Assisted-by: Codex:gpt-5
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
* feat: add OpenAI Decisions adapter with validated ordered answers
Share SystemOne execution and preserve ordered, typed Decisions answers. Reject null probabilities and derive scores from the emitted distribution. Cover conversion and handler contracts using a valid generated PNG fixture.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* fix: preserve Decisions choice types and empty score labels
Keep canonical JSON values in model-visible choice criteria and represent probability label presence explicitly. Add conversion and serialization regressions.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* feat: wire the OpenAI Decisions route
Expose the adapter through the shared Decisions feature gate and usage
middleware. Test real route registration with a fake backend, including
unauthenticated access, user permissions, and exact usage accounting.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* docs: document OpenAI-compatible decisions and discovery
Describe the shared local execution contract, typed questions, image limits, and backend accounting. Publish the Decisions route in Swagger and retain the existing SystemOne discovery tag. Use documented loose object placeholders for JSON unions that Swagger 2 cannot express.
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
Update stable-diffusion.cpp to its merged Iris support commit and add the original F32 Iris weights with the Qwen3-VL Q4_K_M text encoder to the model gallery.
Assisted-by: nib:gpt-5.6-sol
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
The Qwen3 template nests context_size, f16, and mmap under parameters,
where the typed model configuration ignores them. Move these options to
the root and correct three model-specific context overrides.
Test the real gallery data and generated qwen3-vl-4b-thinking YAML.
Document manual repair because template updates do not rewrite installed
configurations.
Fixes#12528
Assisted-by: nib:gpt-6-astra
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>