import { DyNTS_AI_Provider_ServiceBase } from './ai-provider.service-base'; import { DyFM_AI_CallSettings, DyFM_AI_Message, DyFM_AI_LLM_Response, DyFM_AI_Tool, DyFM_AI_ToolCall, DyFM_AI_ToolResult, DyFM_AI_ToolHandlers, DyFM_AI_ModelInfo } from '@futdevpro/fsm-dynamo/ai'; import { DyFM_AI_GenericSelect_Input, DyFM_AI_GenericMultiSelect_Input, DyFM_AI_JSONKeysDescription_Input, DyFM_AI_JSONExactKeys_Input, DyFM_AI_Message_Input } from '../_models/ai-input-interfaces'; /** * Abstract base class for LLM services * Defines all methods that must be implemented by AI providers */ export declare abstract class DyNTS_AI_LLM_ServiceBase extends DyNTS_AI_Provider_ServiceBase { /** Default settings for LLM calls */ abstract readonly defaultSettings: T_AISettings; /** Default model to use for LLM calls */ /** Provider-specific predefined requests */ abstract readonly predefinedRequests: any; _debugLog: boolean; get debugLog(): boolean; get defaultSystemPrompt(): string; get defaultModel(): string; defaultLogReplacer: string; /** * A provider tool-kepes modell-registry-je (override providerenkent — pl. DyFM_OAI_Models). * Ures default → a modell tool-kepessege ismeretlen → a precheck elutasitja (honesty). */ protected getModelRegistry(): DyFM_AI_ModelInfo[]; /** * Ellenorzi, hogy a feloldott modell tamogatja-e a function calling-ot; ha nem, beszedes * hibaval elhasal MIELOTT barmilyen API-hivas tortenne (kritikus pl. a Local providernel). */ protected assertToolsSupported(modelId: string): void; /** * FR-048 reconciler — a resolved modell `settingsSchema`-ja szerint egyezteti a call-settings-et a * tenyleges provider-hivas ELOTT: DROPolja az `unsupported` kulcsokat (debug-log, SOHA nem csendben), * CLAMP-eli a `constraints` (min/max) szerint. Ismeretlen modell / schema-mentes registry-bejegyzes → * permisszi­v passthrough + log (best-effort, honesty). * * Ezzel altalanosul a FR-047 Phase-4 lokalis param-drop (Anthropic Opus 4.7+ temperature/topP/topK) es a * FR-047 `isReasoningModel` sampling-drop: a tudas mostantol a registry `settingsSchema`-jaban (SSoT) el, * nem provider-translator-onkent duplikalva. * * NON-BREAKING: ha a registry ures vagy a modellnek nincs schemaja, a bemenet valtozatlanul ter vissza — * igy a meglevo providerek viselkedese nem valtozik, amig a schema nincs feltoltve. * @param modelId - a feloldott modell azonositoja * @param settings - a hivas-settings (opcionalis) */ protected reconcileCallSettings(modelId: string, settings?: T_AISettings): T_AISettings; /** * GPT valasz Function Calling Agent Tool-okkal — provider-agnosztikus agent-loop. * @description A `tools` definiciok + `toolHandlers` alapjan tool-loop-ot futtat: hivja a * modellt (callModelWithTools) → ha a valaszban tool-call van, lefuttatja a regisztralt * handler-t (runToolCall, never-throw) es az eredmenyt visszafuzi → ismetli, amig a model * vegso (tool-call nelkuli) valaszt ad, vagy a maxIterations limitet eleri. A tool-ok a * REQUEST-parameterben jonnek, nem a settings-ben. */ requestWithTools(set: { conversation: DyFM_AI_Message[]; tools: DyFM_AI_Tool[]; toolHandlers: DyFM_AI_ToolHandlers; settings?: T_AISettings; issuer: string; maxIterations?: number; }): Promise; /** * Egy provider-kor a tool-loop-ban: elkuldi a beszelgetest + tool-okat, normalizalt valaszt ad. * @description Override-olando providerenkent (OpenAI / Anthropic / Google / …). A default * elhasal — egy provider, ami nem implementalja, tool-use-t nem tud kiszolgalni. */ protected callModelWithTools(_set: { conversation: DyFM_AI_Message[]; tools: DyFM_AI_Tool[]; settings?: T_AISettings; issuer: string; }): Promise; /** * A provider-agnosztikus agent-loop torzse. A bemeno `conversation` ele a provider teszi a * system-message-et (callModelWithTools); a loop a tool-call/tool-result uzeneteket fuzi hozza. */ protected runToolLoop(set: { conversation: DyFM_AI_Message[]; tools: DyFM_AI_Tool[]; toolHandlers: DyFM_AI_ToolHandlers; settings?: T_AISettings; issuer: string; maxIterations?: number; }): Promise; /** * Egy tool-hivas lefuttatasa a regisztralt handler-rel. SOHA nem dob — a tool-hiba string-kent * megy vissza a modellnek (hogy korrigalhasson), hianyzo handler eseten is informativ uzenet * (soha nem [object Object]). */ protected runToolCall(call: DyFM_AI_ToolCall, toolHandlers: DyFM_AI_ToolHandlers): Promise; /** * Call LLM with system and user messages */ /** * Call LLM with message history */ /** * Call LLM and return raw response */ abstract requestSimpleMessage(set: DyFM_AI_Message_Input): Promise; abstract requestYesNo(set: DyFM_AI_Message_Input): Promise; abstract requestPercentage(set: DyFM_AI_Message_Input): Promise; abstract requestSelect(set: DyFM_AI_GenericSelect_Input): Promise; abstract requestMultiselect(set: DyFM_AI_GenericMultiSelect_Input): Promise; abstract requestJSON(set: DyFM_AI_Message_Input): Promise; abstract requestJSONQuestionWithKeysDescription(set: DyFM_AI_JSONKeysDescription_Input): Promise; abstract requestJSONWithExactKeys(set: DyFM_AI_JSONExactKeys_Input): Promise; abstract requestList(set: DyFM_AI_Message_Input): Promise; protected convertAnswerToBoolean(answer: string): boolean; protected convertAnswerToNumber(answer: string, message: string): number; protected convertAnswerToSelectOption(answer: string, message: string, options: T[]): T; protected convertAnswerToSelectOptions(answer: string, message: string, options: T[]): T[]; protected convertAnswerToJSON(answer: string, message: string): T | { unparsableResult: string; }; protected convertAnswerToList(answer: string, message: string): T[] | { unparsableResult: string; }; protected stringifySelectOptions(options: T[]): string[]; protected stringifySelectOption(option: T): string; protected isAnswerValid(answer: string, message: string): boolean; /** * olvasható mondatszerű-listaszerű formába teszi a listaelemeket * pl.: ['a', 'b', 'c'] -> '"a", "b" or "c"' */ protected getTextListAsText(list: string[]): string; protected logQuestion(set: DyFM_AI_Message_Input): void; protected getDefaultSystemMessage(settings: T_AISettings): DyFM_AI_Message; protected validateConversation(conversation: DyFM_AI_Message[]): void; protected logAnswer(answer: string): void; protected logConversation(set: { conversation: DyFM_AI_Message[]; debugLog?: boolean; /** this is used to readably replace too long contents to eg '...' in logs */ replaceThisInLog?: string; }): void; } //# sourceMappingURL=ai-llm.service-base.d.ts.map