From cf3320a4ea8b77c8369d3174bffd1834b2eee82d Mon Sep 17 00:00:00 2001 From: Alex Yang <himself65@outlook.com> Date: Sun, 6 Oct 2024 19:15:55 -0700 Subject: [PATCH] fix: improve `getResponseSynthesizer` type (#1304) --- .../core/src/response-synthesizers/factory.ts | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/core/src/response-synthesizers/factory.ts b/packages/core/src/response-synthesizers/factory.ts index 5d14b025e..85d4d3e5f 100644 --- a/packages/core/src/response-synthesizers/factory.ts +++ b/packages/core/src/response-synthesizers/factory.ts @@ -403,27 +403,27 @@ class MultiModal extends BaseSynthesizer { } } -export function getResponseSynthesizer( - mode: ResponseMode, +const modeToSynthesizer = { + compact: CompactAndRefine, + refine: Refine, + tree_summarize: TreeSummarize, + multi_modal: MultiModal, +} as const; + +export function getResponseSynthesizer<Mode extends ResponseMode>( + mode: Mode, options: BaseSynthesizerOptions & { textQATemplate?: TextQAPrompt; refineTemplate?: RefinePrompt; summaryTemplate?: TreeSummarizePrompt; metadataMode?: MetadataMode; } = {}, -) { - switch (mode) { - case "compact": { - return new CompactAndRefine(options); - } - case "refine": { - return new Refine(options); - } - case "tree_summarize": { - return new TreeSummarize(options); - } - case "multi_modal": { - return new MultiModal(options); - } +): InstanceType<(typeof modeToSynthesizer)[Mode]> { + const Synthesizer: (typeof modeToSynthesizer)[Mode] = modeToSynthesizer[mode]; + if (!Synthesizer) { + throw new Error(`Invalid response mode: ${mode}`); } + return new Synthesizer(options) as InstanceType< + (typeof modeToSynthesizer)[Mode] + >; } -- GitLab