import { getConfig } from '../../config';
import type { LmStudioSampling } from '../../lmstudio/streamer';

/**
 * LM Studio 호출 직전에 config 에서 sampling 파라미터들을 모아 한 객체로 변환.
 * SDK streamer 의 `respond()` (topPSampling/topKSampling/…) 와 REST body
 * (top_p/top_k/…) 둘 다 같은 모양에서 변환되므로, 두 path 가 동일 답변을 내도록
 * 한 곳에 집중. Ollama 도 같은 필드명을 `options` 안에서 받아들임.
 *
 * 옛 코드: agent.ts 의 두 private 메서드 — 5 + 7 호출처. 둘 다 stateless config
 * 읽기라 extract 하면 단위 테스트 + config shape 변경 시 한 곳 수정.
 */

/** SDK / REST 양쪽이 공통으로 쓰는 sampling block. */
export function lmStudioSamplingFromConfig(): LmStudioSampling {
    const c = getConfig();
    return {
        topP: c.lmStudioTopP,
        topK: c.lmStudioTopK,
        minP: c.lmStudioMinP,
        repeatPenalty: c.lmStudioRepeatPenalty,
    };
}

/** SDK `respond()` 전용 extras — 현재는 speculative decoding 의 draft model 뿐. */
export function lmStudioRespondExtrasFromConfig(): { draftModel?: string } {
    const c = getConfig();
    return c.lmStudioDraftModel ? { draftModel: c.lmStudioDraftModel } : {};
}
