/** * AI service per-call cost-event payload. * * `DyNTS_AI_Provider_ServiceBase`-leszármazott AI service-ek emit-elik minden * sikeres call után (embedding / LLM / chat / tool-use), feltéve hogy a constructor- * ban át lett adva egy `onCostEvent` callback. Cél: consumer-oldali per-call * cost-aggregáció (CCAP `CT_`, telemetry, debug, stb.) — instance-szintű * accumulator nélkül. * * Non-breaking: a callback opcionális, a meglévő AI-call flow változatlan * ha nincs hozzárendelve. A callback hibája NEM akasztja meg az AI-call-t — * a `emitCostEvent` helper try/catch-csel hívja és warning-ot logol. * * `estimatedCostUsd`: opcionális — a Dynamo-szintű AI-service-ek NEM számítják * (nincs model-pricing registry a Dynamo-ban). A consumer (pl. CCAP `CT_`) a * saját pricing-jával egészíti ki a record-ot. */ export interface DyNTS_AI_CostEvent { /** Az AI-call típusa — embedding (single/batch) vagy LLM (completion/chat/tool-use). */ callType: DyNTS_AI_CallType; /** Provider azonosító (pl. 'openai', 'anthropic', 'lm-studio'). */ provider: string; /** A használt model azonosítója (pl. 'gpt-4o-mini', 'text-embedding-3-small'). */ model: string; /** Token-fogyasztás bontva (input/output/total). Output csak LLM-call esetén értelmes. */ tokensUsed: DyNTS_AI_CostEventTokens; /** Az AI-call hívástól a response-igtart latency ms-ben. */ durationMs: number; /** A hívó service / use-case azonosítója (service-class-name, sessionId, runId, stb.). */ issuer: string; /** Az event-emisszió időpontja (a sikeres response UTÁNI időpont). */ timestamp: Date; /** * Becsült USD költség — opcionális. A Dynamo NEM számítja (model-pricing * registry hiányában); a consumer (CCAP `CT_`) tölti ki ha kell. */ estimatedCostUsd?: number; } /** Az AI-call típusa. String-union, NEM enum (a spec szerint). */ export type DyNTS_AI_CallType = | 'embedding-single' | 'embedding-batch' | 'llm-completion' | 'llm-chat' | 'llm-tool-use'; /** Token-fogyasztás bontása. Output csak LLM-call esetén értelmes. */ export interface DyNTS_AI_CostEventTokens { /** Bemeneti (prompt) tokenek száma. */ input: number; /** Kimeneti (completion) tokenek száma — embedding-call esetén undefined. */ output?: number; /** Total = input + (output ?? 0). */ total: number; }