# LM Studio model configuration ## Required local service Study 1 uses `Qwen3.6-35B-A3B`. Study 2 evaluates that model and `GPT-OSS-20B`, both served by LM Studio on port `1234`. The [LM Studio local-server guide](https://lmstudio.ai/docs/developer/core/server) documents starting the server. LM Studio provides a native REST API and OpenAI-compatible endpoints; this project uses both for different purposes: | Endpoint | Purpose in this project | |---|---| | `GET /api/v1/models` | Capture richer local model and variant metadata | | `POST /api/v1/models/load` | Load the pinned model for its experiment phase | | `POST /api/v1/models/unload` | Unload the phase model before changing phases | | `GET /v1/models` | Cross-check inference-visible model identifiers | | `POST /v1/chat/completions` | Run the agent and custom tool calls | | `POST /v1/embeddings` | Embed frozen queries and code chunks | The endpoint behavior is documented in LM Studio's [native model-list reference](https://lmstudio.ai/docs/developer/rest/list), [native model-load reference](https://lmstudio.ai/docs/developer/rest/load), [native model-unload reference](https://lmstudio.ai/docs/developer/rest/unload), [OpenAI-compatible model-list reference](https://lmstudio.ai/docs/developer/openai-compat/models), [chat-completions reference](https://lmstudio.ai/docs/developer/openai-compat/chat-completions), and [tool-use guide](https://lmstudio.ai/docs/developer/openai-compat/tools). ## Preflight Start LM Studio's server, load the intended Qwen model, and run: ```bash PYTHONPATH=src python3 -m agent_harness.cli probe-model PYTHONPATH=src python3 -m agent_harness.cli probe-model --infer ``` The first command is read-only discovery. The second additionally requests a small completion and verifies its visible marker. Both fail closed if no matching Qwen model is visible or if the identity is ambiguous. If LM Studio authentication is enabled, export the token through `LM_STUDIO_API_TOKEN`; do not store it in a config or result. The M001 configuration pins the observed runtime: inference key `qwen/qwen3.6-35b-a3b`, MLX format, the `4bit` selected variant, 262,144 loaded context length, and reasoning mode `on`. The preflight refuses to run if these properties change. The run manifest records the resolved inference key and returned metadata. Before confirmatory evaluation, also record the LM Studio version, operating system, and remaining inference configuration. E07 uses M002, the same Qwen3.6-35B-A3B MLX 4-bit artifact at a deliberately smaller 65,536-token context so a live tool trajectory leaves memory headroom. The embedding runtime remains EMB001 at 8,192 tokens. These are runtime profiles, not different learned models. E08 retains M002 and adds M003, the local `openai/gpt-oss-20b@mxfp4` MLX MXFP4 artifact. Both use a 65,536-token loaded context. M002's reasoning default must be `on`; M003's must be `low`. The main matrix uses temperature 0, top-p 1, and seed 0. The separately identified reliability sensitivity profile uses the same learned artifacts at temperature 0.2, top-p 1, and seeds 0/1/2. For E07 and E08, server lifecycle and model residency have separate control planes: ```bash lms server status lms server start --port 1234 lms server stop ``` Only these CLI commands start, inspect, or stop the server. The experiment uses LM Studio's official native REST `GET /api/v1/models`, `POST /api/v1/models/load`, and `POST /api/v1/models/unload` endpoints to inspect and change model residency. It verifies exactly one resident instance after every load and explicitly switches the agent out before loading EMB001/EMB002 (and vice versa). The OpenAI-compatible `/v1/chat/completions` and `/v1/embeddings` endpoints are used only for inference. ## Agent model versus embedding model Dense retrieval uses the separate `Qwen3 Embedding 0.6B` model exposed by the same LM Studio server. Study 1 retains EMB001. Study 2 uses EMB002, a repository-neutral profile of the same pinned artifact; only the frozen query instruction differs. Its runtime is: | Property | Value | |---|---| | LM Studio key | `text-embedding-qwen3-embedding-0.6b` | | Endpoint | `POST /v1/embeddings` | | Format and quantization | GGUF Q8_0 | | Loaded / maximum context | 8,192 / 32,768 tokens | | Output dimension | 1,024 | | Output normalization | L2-normalized | Run `PYTHONPATH=src python3 -m agent_harness.cli probe-embedding --infer` before dense experiments. It verifies live discovery metadata, vector count, loaded context, dimensions, finite values, normalization, and that two distinct code inputs do not produce identical vectors. LM Studio documents the OpenAI-compatible [embeddings endpoint](https://lmstudio.ai/docs/developer/openai-compat/embeddings), and the [official Qwen model card](https://huggingface.co/Qwen/Qwen3-Embedding-0.6B) describes the model's code-retrieval scope and 32k context. The benchmark must still freeze the query instruction, code chunk construction, overlap, pooling behavior exposed by the runtime, and index settings before the confirmatory run. Availability is not evidence that this embedding model is optimal; alternative embedding models belong in a separately declared generalization experiment. ## Reproducibility policy - Do not use an alias that can silently point at a different model file. - Do not mix quantizations within one confirmatory experiment. - Do not replace failed local requests with a cloud model. - Preserve raw response usage fields and tool calls in append-only telemetry. - Treat any change to prompt, sampling, context length, tool schema, model variant, or LM Studio runtime as an experimental-protocol change. - Inspect, load, and unload models through LM Studio's official REST API. Do not use GUI automation as part of the experimental procedure. - Enforce phase-exclusive residency: unload every loaded instance, verify zero residency with `GET /api/v1/models`, load only the required phase model, and verify its exact instance metadata before sending inference requests.