Mintplex-Labs/anything-llm · critical · Error

No Lemonade Model Pref was set.

Error message

No Lemonade Model Pref was set.

What it means

Thrown by the LemonadeLLM constructor when neither the LEMONADE_LLM_MODEL_PREF environment variable nor the modelPreference constructor argument is provided. The check uses `&&` (both must be missing), so providing either one satisfies it. The model is later resolved as `modelPreference || process.env.LEMONADE_LLM_MODEL_PREF`.

Source

Thrown at server/utils/AiProviders/lemonade/index.js:17

const { NativeEmbedder } = require("../../EmbeddingEngines/native");
const {
  handleDefaultStreamResponseV2,
  formatChatHistory,
} = require("../../helpers/chat/responses");
const {
  LLMPerformanceMonitor,
} = require("../../helpers/chat/LLMPerformanceMonitor");
const { OpenAI: OpenAIApi } = require("openai");
const { humanFileSize } = require("../../helpers");

class LemonadeLLM {
  constructor(embedder = null, modelPreference = null) {
    if (!process.env.LEMONADE_LLM_BASE_PATH)
      throw new Error("No Lemonade API Base Path was set.");
    if (!process.env.LEMONADE_LLM_MODEL_PREF && !modelPreference)
      throw new Error("No Lemonade Model Pref was set.");

    this.className = "LemonadeLLM";
    this.lemonade = new OpenAIApi({
      baseURL: parseLemonadeServerEndpoint(
        process.env.LEMONADE_LLM_BASE_PATH,
        "openai"
      ),
      apiKey: process.env.LEMONADE_LLM_API_KEY || null,
    });

    this.model = modelPreference || process.env.LEMONADE_LLM_MODEL_PREF;
    this.embedder = embedder ?? new NativeEmbedder();
    this.defaultTemp = 0.7;

    // We can establish here since we cannot dynamically curl the context window limit from the API.
    this.limits = {
      history: this.promptWindowLimit() * 0.15,
      system: this.promptWindowLimit() * 0.15,

View on GitHub (pinned to 526360e320)

Solutions

  1. Set LEMONADE_LLM_MODEL_PREF in .env to a model available on your Lemonade server.
  2. Select a model in the workspace LLM configuration UI so modelPreference is passed to the constructor.
  3. Use the Lemonade model-discovery endpoint to list available models and pick a valid identifier.

Example fix

// before: .env — only base path is set
LEMONADE_LLM_BASE_PATH='http://127.0.0.1:8000'

// after: add model pref
LEMONADE_LLM_BASE_PATH='http://127.0.0.1:8000'
LEMONADE_LLM_MODEL_PREF='Llama-3.2-1B-Instruct-cuda'
Defensive patterns

Strategy: validation

Validate before calling

function validateLemonadeModel(modelPreference) {
  if (!process.env.LEMONADE_LLM_MODEL_PREF && !modelPreference) {
    throw new Error(
      'No Lemonade model set. Set LEMONADE_LLM_MODEL_PREF in .env or select a model in workspace settings.'
    );
  }
  return modelPreference || process.env.LEMONADE_LLM_MODEL_PREF;
}

const model = validateLemonadeModel(workspaceModel);

Type guard

/** @returns {model is string} */
function isValidModelName(model) {
  return typeof model === 'string' && model.trim().length > 0;
}

Try / catch

try {
  const llm = new LemonadeLLM(embedder, model);
} catch (e) {
  if (e.message.includes('Model Pref')) {
    console.error('Select a Lemonade model in workspace settings or set LEMONADE_LLM_MODEL_PREF.');
    return null;
  }
  throw e;
}

Prevention

When it happens

Trigger: Instantiating `new LemonadeLLM(embedder, model)` where the `model` argument is null/undefined/falsy AND process.env.LEMONADE_LLM_MODEL_PREF is also unset. This happens through getLLMProvider when the workspace has no model selected.

Common situations: Selecting the Lemonade provider in workspace settings without choosing a model from the dropdown. The Lemonade server was just started and hasn't reported any models to AnythingLLM's model-listing UI yet. The LEMONADE_LLM_MODEL_PREF env var was removed from .env during cleanup.

Related errors


AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13). Data as JSON: /api/errors/3bcfb50bc62c06fa. Report an issue: GitHub.