How to Integrate llmfit with LM Studio as a Local Model Provider

You can use LM Studio with llmfit by simply having the LM Studio daemon running on port 1234—llmfit auto-detects it through the LmStudioProvider implementation and requires zero configuration.

The llmfit project, developed by AlexsJones, provides a unified interface for running large language models locally across multiple backends. LM Studio integration works through the ModelProvider trait system defined in llmfit-core/src/providers.rs, enabling automatic discovery, model pulling, and inference without manual setup.

How llmfit Discovers LM Studio

llmfit detects LM Studio through the detect_with_installed() method in llmfit-core/src/providers.rs#L1927-L1967. This method performs two checks:

  1. Filesystem scan: Searches for the LM Studio data directory at ~/.lmstudio and optionally the Hugging Face cache
  2. Daemon health check: Queries http://localhost:1234/api/tags to confirm the LM Studio server is responding

The detection results—availability status and installed model list—are cached in the LmStudioProvider struct defined at llmfit-core/src/providers.rs#L1923-L1945. This struct implements the core ModelProvider trait (llmfit-core/src/providers.rs#L14-L26) alongside other local runtimes like Ollama, MLX, and llama-cpp.

Model Name Mapping and Compatibility

LM Studio uses a different naming convention than Hugging Face. The integration handles this through hf_name_to_lmstudio_candidates() at llmfit-core/src/providers.rs#L2482-L2518:

  • Converts Hugging Face model IDs (e.g., Qwen/Qwen3-1.7B) to LM Studio tag format
  • Generates multiple candidate identifiers to handle naming variations
  • has_lmstudio_mapping() tells the core whether a specific model can be served by LM Studio

This mapping allows llmfit to treat LM Studio as a candidate runtime during the model selection phase of ModelFit::analyze_*() operations.

Pulling Models Through LM Studio

When you request a model download, llmfit uses LM Studio's HTTP API rather than downloading directly. The start_pull() implementation at llmfit-core/src/providers.rs#L4395-L4410 works as follows:

// Simplified flow from the source
// 1. POST to /api/models/download with model tag
// 2. Spawn background thread polling /api/models/download/status/<job>
// 3. Parse JSON streams into PullEvent::Progress, PullEvent::Done, or PullEvent::Error
// 4. Forward events to UI for progress display

The provider streams progress events back to the TUI, which renders a progress bar as the download completes.

Using LM Studio in Practice

Auto-Detection (Default Behavior)

No configuration is required. If LM Studio is running, it appears automatically:


# LM Studio is auto-detected—just run llmfit normally

cargo run -- fit --perfect -n 5

The TUI displays availability in the status bar: "LM Studio: ✓ (3 models)" based on llmfit-tui/src/tui_ui.rs#L210-L219.

Forcing LM Studio for Specific Models

Override automatic runtime selection programmatically:

use llmfit_core::{providers, ModelFit};

let lmstudio = providers::LmStudioProvider::new();
let fit = ModelFit::analyze_with_forced_runtime(
    "lmstudio-community/qwen3-1.7b-mlx-4bit",
    providers::Runtime::LmStudio,
    &lmstudio,
    /* hardware constraints and other args */
);
println!("Fit with LM Studio: {:?}", fit);

Downloading Models via TUI or API

TUI Method API Method
Highlight model, press d POST to /api/v1/lmstudio/pull via the embedded Axum server

The HTTP API implementation lives in llmfit-tui/src/serve_api.rs#L472-L516, exposing endpoints for availability checks and pull commands.

Querying LM Studio Status Externally


# List installed models directly from LM Studio's API

curl http://localhost:1234/api/tags | jq '.models[].name'

Adding Custom Model Mappings

For models not in the default mapping:

use llmfit_core::providers::LmStudioProvider;

let mut provider = LmStudioProvider::new();
provider.installed.insert("myorg/my-custom-model-gguf".to_string());

UI and API Integration Points

Component Location Purpose
TUI state tui_app.rs#L944-L949 Stores lmstudio_available and lmstudio_app_installed flags
TUI rendering tui_ui.rs#L210-L219 Renders status badge and download progress
HTTP endpoints serve_api.rs#L472-L516 Exposes /api/v1/lmstudio and pull endpoints to external clients

Requirements and Configuration

Requirement Details
LM Studio daemon Must be running on default port 1234
Data directory ~/.lmstudio must exist with model files
No config files llmfit requires zero manual configuration

Once these conditions are met, inference flows through LM Studio's OpenAI-compatible API at /v1/chat/completions while llmfit handles runtime selection, memory estimation, and throughput analysis.

Summary

  • Auto-detection: LmStudioProvider::detect_with_installed() finds LM Studio via filesystem and HTTP checks
  • Zero configuration: No flags or config files needed—just run LM Studio before llmfit
  • Model mapping: Automatic conversion between Hugging Face IDs and LM Studio tags
  • Pull integration: Downloads use LM Studio's native API with progress streaming
  • Full trait implementation: Supports all ModelProvider capabilities—detection, listing, pulling, and runtime inference

Frequently Asked Questions

Does llmfit require LM Studio to be running before starting?

Yes. The detect_with_installed() method queries localhost:1234/api/tags during startup. If LM Studio isn't running, the provider shows as unavailable and won't be selected for model operations. Start LM Studio first, then launch llmfit.

Can I use LM Studio alongside other providers like Ollama?

Yes. llmfit maintains provider instances for all detected runtimes simultaneously. The core's ModelFit::analyze_*() functions evaluate all available providers and select the optimal runtime based on model compatibility, memory constraints, and performance characteristics.

How does llmfit handle LM Studio's model naming differences?

The hf_name_to_lmstudio_candidates() function generates multiple tag variations from a Hugging Face model ID. For example, Qwen/Qwen3-1.7B might produce candidates like qwen3-1.7b, lmstudio-community/qwen3-1.7b, and quantized variants. has_lmstudio_mapping() checks these against the installed model set.

What happens if a model pull fails in LM Studio?

The start_pull() implementation returns PullEvent::Error variants that propagate through the event stream. The TUI displays error messages, and the API endpoints return appropriate HTTP status codes. Failed downloads don't block other provider operations—you can retry or select an alternative runtime.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →