From 56e17dab49d71ce8f0cd0eb46cc42f6ac603d396 Mon Sep 17 00:00:00 2001 From: p-sw Date: Tue, 19 May 2026 22:18:42 +0900 Subject: [PATCH] feat: make extract input structured --- src/ingestion/llm-extractor.ts | 25 +++++-------------------- src/ingestion/types.ts | 15 ++++++++++----- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/ingestion/llm-extractor.ts b/src/ingestion/llm-extractor.ts index 1a2c526..74e6352 100644 --- a/src/ingestion/llm-extractor.ts +++ b/src/ingestion/llm-extractor.ts @@ -15,25 +15,10 @@ export class LlmFactExtractor implements FactExtractor { constructor(private readonly options: LlmFactExtractorOptions) {} async extract(input: string): Promise { - const prompt = this.buildPrompt(input); - return this.options.model.generateText(prompt); - } - - private buildPrompt(input: string): string { - if (this.options.promptBuilder) { - return this.options.promptBuilder(input, this.options.instructions); - } - - const instructions = this.options.instructions?.trim(); - - return [ - DEFAULT_INSTRUCTIONS, - instructions && instructions.length > 0 - ? `Additional instructions:\n${instructions}` - : null, - `Input:\n${input.trim()}`, - ] - .filter((value): value is string => value !== null) - .join("\n\n"); + return this.options.model.generateText({ + instruction: DEFAULT_INSTRUCTIONS, + input, + additionalInstruction: this.options.additionalInstructions, + }); } } diff --git a/src/ingestion/types.ts b/src/ingestion/types.ts index 79d18b8..b00777f 100644 --- a/src/ingestion/types.ts +++ b/src/ingestion/types.ts @@ -2,14 +2,14 @@ import type { AddFactInput, EmbeddingProvider, TopicLinkInput, -} from '../types/api'; +} from "../types/api"; export interface ExtractedFact { statement?: string; summary?: string | null; source?: string | null; confidence?: number | null; - metadata?: AddFactInput['metadata']; + metadata?: AddFactInput["metadata"]; topics: TopicLinkInput[]; } @@ -17,14 +17,19 @@ export interface FactExtractor { extract(input: string): Promise; } +export interface LlmTextGenerationModelInput { + instruction: string; + input: string; + additionalInstruction?: string | undefined; +} + export interface LlmTextGenerationModel { - generateText(prompt: string): Promise; + generateText(prompt: LlmTextGenerationModelInput): Promise; } export interface LlmFactExtractorOptions { model: LlmTextGenerationModel; - instructions?: string; - promptBuilder?: (input: string, instructions?: string) => string; + additionalInstructions?: string | undefined; } export interface IngestStatementOptions {