{"course":{"slug":"running-models-yourself","title":"Running Models Yourself","url":"https://addaly.com/learn/running-models-yourself","level":"intermediate","track":"deep"},"lesson":{"slug":"interfaces","title":"Interfaces: what each one is for","url":"https://addaly.com/learn/running-models-yourself/interfaces","position":29,"of":82,"minutes":6,"answer":"The interface never changes the model, only what gets sent, so compare requests, not apps.","keyIdea":"The interface never changes the model, only what gets sent, so compare requests, not apps."},"body":{"format":"markdown","text":"Four things people call \"the app\". They do different jobs, and none of them changes how good the model is. Pick by who is using it.\n\n## Open WebUI: for more than one person\n\nSelf-hosted, runs in Docker, points at any OpenAI-compatible backend. It has user accounts and roles, conversation history per user, document upload with retrieval, web search, model switching, and a plugin system for custom pipelines.\n\n```bash\ndocker run -d -p 3000:8080 \\\n  -v open-webui:/app/backend/data \\\n  -e OPENAI_API_BASE_URL=http://host.docker.internal:8080/v1 \\\n  -e OPENAI_API_KEY=local \\\n  ghcr.io/open-webui/open-webui:main\n```\n\nChoose it when a team needs something ChatGPT-shaped and you need to know who used what. It is the only one here designed for multiple users.\n\n## LM Studio: for one person getting started\n\nA desktop application for macOS, Windows and Linux. Its real strength is discovery: it browses Hugging Face, shows you every quant of a model, and tells you which ones fit your machine: the arithmetic from lesson 2, done for you. Every llama.cpp setting has a slider, and it runs a local server on demand.\n\nFree, but not open source. Choose it when you are one person on one machine trying models quickly, or when you are helping someone non-technical get started. Nothing else has an onboarding this good.\n\n## SillyTavern: for control over the prompt\n\nMarketed for character chat and roleplay, which puts people off. Look past that: it is the most complete prompt-construction and sampler interface that exists. Every knob from lesson 7 is exposed, including DRY and XTC, along with exact control over what goes into the context in which order, per-character templates, and conditional injected text.\n\nIt connects to llama.cpp, Ollama, TabbyAPI, vLLM and hosted APIs alike. Choose it when you need to see and control the literal prompt string, whatever your actual use case.\n\n## The plain API: for anything you will automate\n\nEverything above is a client of this. It is the only interface you can script, test, version-control and put in CI.\n\n```bash\ncurl http://localhost:8080/v1/chat/completions \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"model\":\"local\",\"messages\":[{\"role\":\"user\",\"content\":\"One sentence on tides.\"}],\"temperature\":0.7}'\n```\n\nOr the OpenAI SDK in any language with `base_url` pointed at your server. Because every engine speaks this dialect, code written against a local server runs unchanged against a hosted one, which makes the comparison in lesson 1 trivial to perform.\n\n## The thing to hold on to\n\nSwapping interfaces does not change speed and does not change quality. People reinstall front-ends hoping for better answers, and get the same model back.\n\nWhat interfaces do change is **what gets sent**: the system prompt, the context length, sampler defaults, retrieved documents, and background calls the UI makes on its own (conversation titles, tag generation). When the same model behaves differently in two apps, that difference is in the request, and every one of these tools will show you the request if you look."},"check":{"question":"The same model, served by the same local llama.cpp instance, gives clearly worse answers through Open WebUI than through LM Studio. What is the right first move?","options":[{"text":"Compare the actual requests each sends: system prompt, context length, sampler defaults, and any retrieved text injected before your message.","correct":true},{"text":"Accept that Open WebUI adds layers between you and the model, which costs some output quality.","correct":false,"tempting":"Conflates performance overhead with answer quality; extra layers cost milliseconds, not coherence."},{"text":"Switch to LM Studio, since it ships a better-optimised build of the inference engine.","correct":false,"tempting":"Build differences are real but affect tokens per second, not which tokens get chosen."},{"text":"Ignore it, since sampling is random and any two sessions will differ.","correct":false,"tempting":"Sampling variance explains run-to-run wobble, not a consistent quality gap between two clients."}]},"prev":{"slug":"ollama-and-llama-cpp","title":"Ollama and llama.cpp","url":"https://addaly.com/learn/running-models-yourself/ollama-and-llama-cpp"},"next":{"slug":"installing-the-right-build","title":"Installing the right build for your hardware","url":"https://addaly.com/learn/running-models-yourself/installing-the-right-build"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Interfaces: what each one is for', in Running Models Yourself. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/running-models-yourself/interfaces (Accessed: 31 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Interfaces: what each one is for","courseTitle":"Running Models Yourself","module":{"index":4,"slug":"getting-it-running","title":"Getting it running"},"answer":null,"keyIdea":"The interface never changes the model, only what gets sent, so compare requests, not apps.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"p","runs":[{"text":"Four things people call “the app”. They do different jobs, and none of them changes how good the model is. Pick by who is using it."}],"lede":true},{"t":"h2","id":"open-webui-for-more-than-one-person","runs":[{"text":"Open WebUI: for more than one person"}]},{"t":"p","runs":[{"text":"Self-hosted, runs in Docker, points at any OpenAI-compatible backend. It has user accounts and roles, conversation history per user, document upload with retrieval, web search, model switching, and a plugin system for custom pipelines."}]},{"t":"code","lang":"bash","label":"Bash","text":"docker run -d -p 3000:8080 \\\n  -v open-webui:/app/backend/data \\\n  -e OPENAI_API_BASE_URL=http://host.docker.internal:8080/v1 \\\n  -e OPENAI_API_KEY=local \\\n  ghcr.io/open-webui/open-webui:main"},{"t":"p","runs":[{"text":"Choose it when a team needs something ChatGPT-shaped and you need to know who used what. It is the only one here designed for multiple users."}]},{"t":"h2","id":"lm-studio-for-one-person-getting-started","runs":[{"text":"LM Studio: for one person getting started"}]},{"t":"p","runs":[{"text":"A desktop application for macOS, Windows and Linux. Its real strength is discovery: it browses Hugging Face, shows you every quant of a model, and tells you which ones fit your machine: the arithmetic from lesson 2, done for you. Every llama.cpp setting has a slider, and it runs a local server on demand."}]},{"t":"p","runs":[{"text":"Free, but not open source. Choose it when you are one person on one machine trying models quickly, or when you are helping someone non-technical get started. Nothing else has an onboarding this good."}]},{"t":"h2","id":"sillytavern-for-control-over-the-prompt","runs":[{"text":"SillyTavern: for control over the prompt"}]},{"t":"p","runs":[{"text":"Marketed for character chat and roleplay, which puts people off. Look past that: it is the most complete prompt-construction and sampler interface that exists. Every knob from lesson 7 is exposed, including DRY and XTC, along with exact control over what goes into the context in which order, per-character templates, and conditional injected text."}]},{"t":"p","runs":[{"text":"It connects to llama.cpp, Ollama, TabbyAPI, vLLM and hosted APIs alike. Choose it when you need to see and control the literal prompt string, whatever your actual use case."}]},{"t":"h2","id":"the-plain-api-for-anything-you-will-automate","runs":[{"text":"The plain API: for anything you will automate"}]},{"t":"p","runs":[{"text":"Everything above is a client of this. It is the only interface you can script, test, version-control and put in CI."}]},{"t":"code","lang":"bash","label":"Bash","text":"curl http://localhost:8080/v1/chat/completions \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"model\":\"local\",\"messages\":[{\"role\":\"user\",\"content\":\"One sentence on tides.\"}],\"temperature\":0.7}'"},{"t":"p","runs":[{"text":"Or the OpenAI SDK in any language with "},{"text":"base_url","code":true},{"text":" pointed at your server. Because every engine speaks this dialect, code written against a local server runs unchanged against a hosted one, which makes the comparison in lesson 1 trivial to perform."}]},{"t":"h2","id":"the-thing-to-hold-on-to","runs":[{"text":"The thing to hold on to"}]},{"t":"p","runs":[{"text":"Swapping interfaces does not change speed and does not change quality. People reinstall front-ends hoping for better answers, and get the same model back."}]},{"t":"p","runs":[{"text":"What interfaces do change is "},{"text":"what gets sent","b":true},{"text":": the system prompt, the context length, sampler defaults, retrieved documents, and background calls the UI makes on its own (conversation titles, tag generation). When the same model behaves differently in two apps, that difference is in the request, and every one of these tools will show you the request if you look."}]}],"check":{"question":[{"text":"The same model, served by the same local llama.cpp instance, gives clearly worse answers through Open WebUI than through LM Studio. What is the right first move?"}],"options":[{"text":[{"text":"Compare the actual requests each sends: system prompt, context length, sampler defaults, and any retrieved text injected before your message."}],"correct":true,"tempting":null},{"text":[{"text":"Accept that Open WebUI adds layers between you and the model, which costs some output quality."}],"correct":false,"tempting":[{"text":"Conflates performance overhead with answer quality; extra layers cost milliseconds, not coherence."}]},{"text":[{"text":"Switch to LM Studio, since it ships a better-optimised build of the inference engine."}],"correct":false,"tempting":[{"text":"Build differences are real but affect tokens per second, not which tokens get chosen."}]},{"text":[{"text":"Ignore it, since sampling is random and any two sessions will differ."}],"correct":false,"tempting":[{"text":"Sampling variance explains run-to-run wobble, not a consistent quality gap between two clients."}]}],"order":[2,1,0,3],"why":null},"prev":{"slug":"ollama-and-llama-cpp","title":"Ollama and llama.cpp","minutes":8},"next":{"slug":"installing-the-right-build","title":"Installing the right build for your hardware","minutes":9}}}