/** Serializable retrieval configuration. @module dsh-tool-retriever/config */ import z from '@deepseek-ai/schemastery' /** BM25F weights for deterministic fields extracted from a DSH tool schema. */ export interface FieldWeights { /** Canonical tool name and its identifier components. */ name?: number /** Tool description supplied by its owner. */ description?: number /** Property names recursively extracted from the input schema. */ parameterName?: number /** Descriptions, titles, and enum literals from the input schema. */ parameterDescription?: number } /** Public plugin configuration supplied by a DSH profile. */ export interface Config { /** Number of candidates returned by `tool_search` (default 8, maximum 32). */ topK?: number /** BM25 term-frequency saturation parameter (default 1.2). */ bm25K1?: number /** BM25 field-length normalization parameter (default 0.75). */ bm25B?: number /** Per-field BM25F weights. */ fieldWeights?: FieldWeights } /** Fully resolved configuration used by the retrieval core. */ export interface ResolvedConfig { topK: number bm25K1: number bm25B: number fieldWeights: Required } const fieldWeightsSchema = z.object({ name: z.number().min(0).default(4), description: z.number().min(0).default(2), parameterName: z.number().min(0).default(1.5), parameterDescription: z.number().min(0).default(1), }).default({ name: 4, description: 2, parameterName: 1.5, parameterDescription: 1 }) /** Loader-visible schema for every deployment-varying retrieval choice. */ export const Config: z = z.object({ topK: z.number().step(1).min(1).max(32).default(8), bm25K1: z.number().min(0.01).max(10).default(1.2), bm25B: z.number().min(0).max(1).default(0.75), fieldWeights: fieldWeightsSchema, }) /** * Resolve Loader defaults for direct callers and tests. * @param config - Validated or programmatically supplied partial configuration. * @returns One detached complete retrieval configuration. */ export function resolveConfig(config: Config = {}): ResolvedConfig { return { topK: config.topK ?? 8, bm25K1: config.bm25K1 ?? 1.2, bm25B: config.bm25B ?? 0.75, fieldWeights: { name: config.fieldWeights?.name ?? 4, description: config.fieldWeights?.description ?? 2, parameterName: config.fieldWeights?.parameterName ?? 1.5, parameterDescription: config.fieldWeights?.parameterDescription ?? 1, }, } }