Skip to content

FLE Studio 0.2.0

Choose a tag to compare

@sirfyyn sirfyyn released this 11 Oct 16:36
· 53 commits to main since this release

Not released yet. Studio 0.2 adds Forge, a chat with attachments, tools, MCP and apps, tuning and quality
measurements, an expert cache page, an update check and host/client mode.

Forge: build your own quant

  • Forge accepts the named quantization mixtures of llama-quantize (q3_k_m, q4_k_m, ...) as the default type.
  • Forge, a new page for building your own quant (see docs/FORGE.md):
    • a hybrid builder that takes whole expert layers from several quants of the same model, with a size-budget
      calculator (exact knapsack over the layers), the exact file size and a RAM/VRAM preview before anything is written;
      the file is written without requantizing, with a correct header, and can be resumed after a stop;
    • quantizing a full-precision model with llama-quantize (per-tensor rules, optional importance matrix from
      llama-imatrix);
    • optional REAP pruning: the best experts per layer are kept, the router and the metadata are made consistent;
    • a check with llama-perplexity (KL divergence, top-1 agreement, perplexity ratio) and a result card;
    • jobs with progress and a log, cancel, resume and a record that survives a restart of Studio;
    • recipes (JSON schema 1) that carry no folders and no commands, to save, share and load;
    • publishing a result to the library with a start profile.
  • A calibration text that ships with Studio (about 1 MB: English and German prose, code, dialogue, numbers; public
    domain, CC0 or MIT, with the origin, license and checksum of every file in forge/corpus/SOURCES.md), used by Forge
    as the default, split into a calibration and a held-out comparison part.
  • Tests with synthetic mini GGUF files and stand-in llama.cpp tools; the browser test walks through Forge.

Chat, tools and MCP

Details in docs/CHAT.md and docs/MCP.md.

  • Attachments in the chat: text and code files, PDFs (optional pypdf, pip install "fle-studio[pdf]") and pictures
    (only when the loaded model reports vision; otherwise a clear message). Choose, drop or paste files. A token
    estimate shows against the context window and warns from 80 %. The upload limit is a setting (Settings → Chat →
    Largest upload, 25 MB by default) instead of a fixed refusal.
  • Tool calling through llama-server's OpenAI-style tools field, with the model, tool, model loop in the page and
    an openable card for every call (arguments and result). Built-in tools, each one switchable: calculator, current
    time, read files in one folder you choose (read only, nothing outside it), and web search (off by default, asks
    before each search, DuckDuckGo or your own SearXNG address).
  • An MCP client for stdio and Streamable HTTP servers, configured in Settings → Tools with the usual mcpServers
    JSON. Their tools appear in the chat. A tool of an MCP server asks for approval before every call unless you allow
    that server; the server side enforces this too. A autoApprove entry in the JSON is ignored on purpose.
  • MCP, complete (see docs/MCP.md): web servers that need a sign-in get a Sign in button (OAuth per
    the MCP authorization specification 2025-11-25: 401 challenge, protected resource metadata, authorization server
    metadata, dynamic client registration or a client id you enter, PKCE S256, resource indicators, refresh, sign out).
    Tokens live in the data folder with mode 0600 and never in settings, logs or exports. The older HTTP+SSE transport is
    the fallback when Streamable HTTP is refused with a 4xx (or "type": "sse"). MCP Apps (SEP-1865, 2026-01-26): a tool
    with a ui:// resource shows an app under its card in a sandboxed iframe (no allow-same-origin, own CSP from the
    resource metadata) with the postMessage bridge: tool input and result, light/dark, resize, tools/call to its own
    server with the usual confirmation, a message into the chat and links only after you agree.
  • Edit your own messages: the edit becomes another version and the model answers it. "Answer again" keeps the
    previous answer as a version too. A < 2 / 3 > switch moves between versions.
  • Search over the titles and the text of all chats (every version, attachment names and attachment text).
  • Export a chat as JSON (every version, pictures inline) or Markdown (the version on screen), and import both again,
    plus plain OpenAI-style message lists.
  • GET /api/chat/capabilities, /api/tools, /api/attachments, /api/chats/search, /api/chats/<id>/export and
    /api/chats/import.
  • Tests: the stand-in engine can return tool_calls and accepts pictures with FAKE_VISION=1, a stand-in MCP server
    (tests/fake_mcp_server.py), unit and integration tests for all of it, a Node check of the request builder, and
    browser steps for attachments, versions, export and import, search, tool cards and MCP approval.

Start, tuning and measuring

Details in docs/TUNING-AND-QUALITY.md.

  • Simple and advanced Engine page. Simple (the default) shows the model, "Best for my machine" and Start; Advanced
    shows everything as before. Under the command, every flag and environment variable has a one-line explanation (also as a
    tooltip); the full command stays.
  • Best for my machine: an auto-tuner that tries threads, expert cache or --n-cpu-moe, batch and context, measures
    each several times, keeps only what is clearly faster, and saves the winner as a launch profile. Probe run first,
    adjustable time budget, optional llama-bench screening for stock llama.cpp.
  • Repeats with median and 95 % interval in Experiments, a comparison that says "within noise" when it is, and an
    A/B/A comparison of two profiles.
  • Quality next to speed: KL divergence via llama-perplexity, and a knowledge probe with original CC0 questions
    (optional MKQA download). The speed test can ask the questions too.
  • Expert cache page from the engine's log lines; docs/EXPERT-CACHE-DATA.md says what the
    engine would have to print for the per-layer view.
  • Catalog: gpt-oss-20b and gpt-oss-120b (a second mixture-of-experts family, unmeasured).
  • docs/HARDWARE-TESTS.md, docs/TUNING-AND-QUALITY.md.

Updates

  • Update check: about once a day (and with Check now) FLE Studio asks GitHub for the latest release, without
    identifiers or telemetry. A discreet card in the sidebar says "FLE Studio X.Y.Z is available", with the release notes
    as plain text, a link and Later. Switchable in Settings → Updates, with a switch for pre-releases. Offline it stays
    silent.
  • One-click update for installs made with uv tool (not in service mode): installs the release, then restarts with the
    same command line. A failed install keeps the old version running and shows the log. On Windows a helper script does
    the install after Studio has ended. Other installs get the fitting command to copy.
  • The same notice reports a newer FLE engine build for the engines you installed.

Host and client

Details in docs/REMOTE.md.

  • Host and client mode (docs/REMOTE.md). A host (--host) serves TLS with a self-made certificate
    whose fingerprint is shown and pinned by clients; clients pair with a 10-minute single-use code and get a revocable
    token of their own (list with Revoke in Settings → Remote access). --pair-code, --pair, --tls, --no-tls.
  • Client switcher at the top of the sidebar ("This machine / host / Add host…"). Hosts are added by address and code,
    or by SSH target; Studio runs and watches ssh -N -L itself (keys only). All pages, streaming chat included, run
    against the chosen host through a generic pass-through, so pages added later work too. The window shows the host's
    name and colour and reports an unreachable host with Reconnect.
  • Rights per client: chat, look and measure by default; Admin for settings, installs and models; installs and updates
    ask for a confirmation on the client. Pairing is rate limited; tokens are stored as hashes and never logged.
  • Optional read-only local copy of a host's chats for offline reading.
  • Everything that changes something on a host needs the Admin right for a paired client (tools and MCP servers, Forge jobs, tuning, quality runs, updates); chat, attachments and speed tests do not.

Changed

  • Chats are stored as a tree of messages (version 2 of the file). Older chat files open unchanged. Pictures are kept
    as files next to the chats, not inside them. The size limit of one saved chat is 32 MB (was 4 MB).
  • A request that carries tools and a forced answer format (response_format, json_schema or grammar) is refused
    by the proxy with HTTP 400, and the page never sends both: the model would not call the tools and would answer
    with substitute JSON. A test keeps this.
  • The tools.py of the tuning work (the programs that ship with llama.cpp) is engine_tools.py now; tools.py
    holds the tools the model can call.
  • ruff format is checked in CI, with a pinned ruff version.