linshenkx/prompt-optimizer · error · VariableValueGenerationValidationError

Generation model key must not be empty.

Error message

Generation model key must not be empty.

What it means

generate() requires a non-empty generationModelKey identifying which configured model to use for value generation. validateRequest throws VariableValueGenerationValidationError when the key is missing or whitespace, because there is no model to invoke.

Source

Thrown at packages/core/src/services/variable-value-generation/service.ts:81

    } catch (error) {
      // 🔧 修复:保留原始错误类型,不要过度包装
      if (error instanceof VariableValueGenerationError) {
        throw error;
      }
      throw new VariableValueGenerationExecutionError(error instanceof Error ? error.message : String(error))
    }
  }

  /**
   * 验证请求参数
   */
  private validateRequest(request: VariableValueGenerationRequest): void {
    if (!request.promptContent?.trim()) {
      throw new VariableValueGenerationValidationError('Prompt content must not be empty.');
    }

    if (!request.generationModelKey?.trim()) {
      throw new VariableValueGenerationValidationError('Generation model key must not be empty.');
    }

    if (!request.variables || request.variables.length === 0) {
      throw new VariableValueGenerationValidationError('Variables list must not be empty.');
    }

    // 验证每个变量
    for (let i = 0; i < request.variables.length; i++) {
      const variable = request.variables[i];
      if (!variable.name?.trim()) {
        throw new VariableValueGenerationValidationError(`Variable at index ${i} has empty name.`);
      }
    }
  }

  /**
   * 验证模型是否存在
   */

View on GitHub (pinned to 3e677b1d9f)

Solutions

  1. Pass a valid model key that is registered in the model manager (verify with modelManager.getModel(key))
  2. Default the key from your app's settings before calling generate
  3. Check for property-name mismatches after upgrading the library's request type

Example fix

// before
await gen.generate({ promptContent, variables, generationModelKey: selectedModel?.key }); // may be undefined

// after
const key = selectedModel?.key ?? DEFAULT_GENERATION_MODEL_KEY;
if (!key) throw new Error('Select a generation model first');
await gen.generate({ promptContent, variables, generationModelKey: key });
Defensive patterns

Strategy: validation

Validate before calling

if (!req.generationModelKey?.trim()) throw new Error('generationModelKey required');
const model = await modelManager.getModel(req.generationModelKey);
if (!model) throw new Error('unknown model key');

Type guard

const hasModelKey = (r: VariableValueGenerationRequest) => typeof r.generationModelKey === 'string' && r.generationModelKey.trim().length > 0;

Try / catch

catch (e) { if (e instanceof VariableValueGenerationValidationError && /model key/i.test(e.message)) return promptModelSelection(); throw e; }

Prevention

When it happens

Trigger: generate({ promptContent: '...', generationModelKey: '', variables: [...] }) or the key is undefined because the request object was built without it.

Common situations: Model selection dropdown defaulting to empty in the UI; key read from settings/config that was never persisted; property renamed (model vs generationModelKey) after a library upgrade; passing the model object instead of its key.

Related errors


AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27). Data as JSON: /api/errors/135c6e65ff104e06. Report an issue: GitHub.