File size: 1,754 Bytes
8fb6433
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
export const PROMPT_OPTIMIZER_BACKENDS = Object.freeze(["direct", "mcp", "disabled"]);
export const PROMPT_OPTIMIZER_API_FORMATS = Object.freeze(["openai", "responses", "gemini"]);

export function normalizePromptOptimizerBackend(value) {
    const backend = String(value ?? "direct").trim().toLowerCase();
    return PROMPT_OPTIMIZER_BACKENDS.includes(backend) ? backend : "direct";
}

export function normalizePromptOptimizerApiFormat(value) {
    const format = String(value ?? "openai").trim().toLowerCase();
    return PROMPT_OPTIMIZER_API_FORMATS.includes(format) ? format : "openai";
}

export function directOptimizerConfigurationError(config = {}) {
    if (!String(config.api_url ?? "").trim()) return "Direct API URL is not configured.";
    if (!String(config.model ?? "").trim()) return "Direct API model is not configured.";
    if (normalizePromptOptimizerApiFormat(config.api_format) === "gemini"
            && !String(config.api_key ?? "").trim()) {
        return "Gemini Native requires an API key.";
    }
    return "";
}

export function makeDirectPromptOptimizeRequest({config, instruction, context, resources = []}) {
    const error = directOptimizerConfigurationError(config);
    if (error) throw new Error(`${error} Open ComfyUI Settings → MiniMax H3 Context Loop → Prompt optimizer.`);
    return {
        api_format: normalizePromptOptimizerApiFormat(config.api_format),
        api_url: String(config.api_url ?? "").trim(),
        api_key: String(config.api_key ?? ""),
        model: String(config.model ?? "").trim(),
        allow_media: config.allow_media === true,
        resources: config.allow_media === true ? resources : [],
        instruction: String(instruction ?? "").trim(),
        context,
    };
}