/** * LLM Client — AI 기반 분류/요약 * npm 의존성 없음, native fetch 사용 */ import type { LLMConfig } from '../types/index.js'; export interface LLMClient { complete(prompt: string, systemPrompt?: string): Promise; summarize(contents: string[]): Promise; classify(content: string, categories: string[]): Promise; validateExtraction(content: string, category: string): Promise<{ valid: boolean; confidence: number; }>; improveContent(content: string): Promise; } /** * #90 (ADR-053 T3 정정): 요약 입력 문자 예산 — **tail 기준으로 자른다**. * * ⚠️ 이전에는 각 provider가 `slice(0, 4000)`으로 **앞에서** 잘랐다. `summarizeSession`이 * 세션 tail 10개를 고르도록 고쳐도(`extractor.ts`) 여기서 그 창의 **앞부분**만 남겨 상쇄됐다. * * 실측(적대 검증, 2026-08-03): 실 transcript 6종 중 **2종에서 마지막 어시스턴트 메시지가 * 요약기에 0% 도달**했다(tail-10 결합 길이 5,441 / 5,576자). goal은 "무엇을 하고 있었나"이고 * 그것은 세션 **끝**에 있으므로, 예산을 초과하면 앞을 버려야 한다. * * 🔴 provider 구현이 2개(OpenAI / Anthropic)라 상수로 단일 source화한다 — * 한쪽만 고치면 다른 쪽이 조용히 남는다(code-impact 섹션 1). */ export declare const SUMMARIZE_CHAR_BUDGET = 4000; export declare class OpenAILLMClient implements LLMClient { private apiKey; private model; private maxTokens; private timeout; private rateLimiter; constructor(config: LLMConfig); complete(prompt: string, systemPrompt?: string): Promise; summarize(contents: string[]): Promise; classify(content: string, categories: string[]): Promise; validateExtraction(content: string, category: string): Promise<{ valid: boolean; confidence: number; }>; improveContent(content: string): Promise; } export declare class AnthropicLLMClient implements LLMClient { private apiKey; private model; private maxTokens; private timeout; private rateLimiter; constructor(config: LLMConfig); complete(prompt: string, systemPrompt?: string): Promise; summarize(contents: string[]): Promise; classify(content: string, categories: string[]): Promise; validateExtraction(content: string, category: string): Promise<{ valid: boolean; confidence: number; }>; improveContent(content: string): Promise; } export declare class NoOpLLMClient implements LLMClient { complete(): Promise; summarize(): Promise; classify(_content: string, categories: string[]): Promise; validateExtraction(): Promise<{ valid: boolean; confidence: number; }>; improveContent(content: string): Promise; } export declare function createLLMClient(config?: LLMConfig): LLMClient; //# sourceMappingURL=client.d.ts.map