@kjerneverk/execution 1.0.6-dev.20260201021903.7af3def → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -165,9 +165,14 @@ export declare interface Provider {
165
165
  */
166
166
  readonly name: string;
167
167
  /**
168
- * Execute a request against this provider
168
+ * Execute a request against this provider (non-streaming)
169
169
  */
170
170
  execute(request: Request_2, options?: ExecutionOptions): Promise<ProviderResponse>;
171
+ /**
172
+ * Execute a request with streaming response
173
+ * Returns an async iterable of chunks
174
+ */
175
+ executeStream?(request: Request_2, options?: ExecutionOptions): AsyncIterable<StreamChunk>;
171
176
  /**
172
177
  * Check if this provider supports a given model
173
178
  */
@@ -195,6 +200,8 @@ declare interface Request_2 {
195
200
  model: Model;
196
201
  responseFormat?: any;
197
202
  validator?: any;
203
+ /** Tool definitions for function calling */
204
+ tools?: ToolDefinition[];
198
205
  addMessage(message: Message): void;
199
206
  }
200
207
  export { Request_2 as Request }
@@ -214,6 +221,36 @@ export declare function resetModelRegistry(): void;
214
221
  */
215
222
  export declare type Role = 'user' | 'assistant' | 'system' | 'developer' | 'tool';
216
223
 
224
+ /**
225
+ * A chunk from a streaming response
226
+ */
227
+ export declare interface StreamChunk {
228
+ type: StreamChunkType;
229
+ /** Text content delta (for type='text') */
230
+ text?: string;
231
+ /** Tool call information (for tool_call_* types) */
232
+ toolCall?: {
233
+ /** Tool call ID (available on start and end) */
234
+ id?: string;
235
+ /** Index of this tool call in the response */
236
+ index?: number;
237
+ /** Function name (available on start) */
238
+ name?: string;
239
+ /** Arguments delta (for tool_call_delta) */
240
+ argumentsDelta?: string;
241
+ };
242
+ /** Usage information (for type='usage') */
243
+ usage?: {
244
+ inputTokens: number;
245
+ outputTokens: number;
246
+ };
247
+ }
248
+
249
+ /**
250
+ * Type of streaming chunk
251
+ */
252
+ export declare type StreamChunkType = 'text' | 'tool_call_start' | 'tool_call_delta' | 'tool_call_end' | 'usage' | 'done';
253
+
217
254
  export declare function supportsToolCalls(model: string): boolean;
218
255
 
219
256
  /**
@@ -233,6 +270,37 @@ export declare interface ToolCall {
233
270
  };
234
271
  }
235
272
 
273
+ /**
274
+ * Tool definition for LLM function calling
275
+ * Provider-agnostic format that maps to both Anthropic and OpenAI schemas
276
+ */
277
+ export declare interface ToolDefinition {
278
+ /** Unique name for the tool (used in function calls) */
279
+ name: string;
280
+ /** Description of what the tool does (helps LLM decide when to use it) */
281
+ description: string;
282
+ /** JSON Schema defining the tool's parameters */
283
+ parameters: ToolParameterSchema;
284
+ }
285
+
286
+ /**
287
+ * JSON Schema for tool parameters
288
+ */
289
+ export declare interface ToolParameterSchema {
290
+ type: 'object';
291
+ properties: Record<string, {
292
+ type: string;
293
+ description?: string;
294
+ enum?: string[];
295
+ items?: {
296
+ type: string;
297
+ };
298
+ default?: any;
299
+ }>;
300
+ required?: string[];
301
+ additionalProperties?: boolean;
302
+ }
303
+
236
304
  /**
237
305
  * Package version
238
306
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/types.ts","../src/logger.ts","../src/model-registry.ts","../src/index.ts"],"sourcesContent":["/**\n * Execution Package - Core Types\n *\n * Defines the fundamental types for LLM execution across providers.\n */\n\n// ===== ROLE AND MODEL TYPES =====\n\n/**\n * Message role in a conversation\n */\nexport type Role = 'user' | 'assistant' | 'system' | 'developer' | 'tool';\n\n/**\n * Model identifier - flexible string to support any model\n */\nexport type Model = string;\n\n/**\n * Model role mapping for persona/system messages\n */\nexport type PersonaRole = 'system' | 'developer';\n\n/**\n * Tokenizer encoding to use for token counting\n */\nexport type TokenizerEncoding = 'gpt-4o' | 'cl100k_base' | 'o200k_base';\n\n// ===== MESSAGE TYPES =====\n\n/**\n * A message in a conversation\n */\nexport interface Message {\n role: Role;\n content: string | string[] | null;\n name?: string;\n}\n\n/**\n * Tool call made by the assistant\n */\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\n/**\n * Message in a conversation (compatible with OpenAI format)\n */\nexport interface ConversationMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | 'developer';\n content: string | null;\n name?: string;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n}\n\n// ===== REQUEST TYPES =====\n\n/**\n * LLM request interface\n */\nexport interface Request {\n messages: Message[];\n model: Model;\n responseFormat?: any;\n validator?: any;\n addMessage(message: Message): void;\n}\n\n/**\n * Create a new request object\n */\nexport function createRequest(model: Model): Request {\n const messages: Message[] = [];\n\n return {\n model,\n messages,\n responseFormat: undefined,\n validator: undefined,\n addMessage: (message: Message) => {\n messages.push(message);\n },\n };\n}\n\n// ===== PROVIDER TYPES =====\n\n/**\n * Response from an LLM provider\n */\nexport interface ProviderResponse {\n content: string;\n model: string;\n usage?: {\n inputTokens: number;\n outputTokens: number;\n };\n toolCalls?: ToolCall[];\n}\n\n/**\n * Options for execution\n */\nexport interface ExecutionOptions {\n apiKey?: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n timeout?: number;\n retries?: number;\n}\n\n/**\n * Provider interface for LLM execution\n */\nexport interface Provider {\n /**\n * Provider name (e.g., 'openai', 'anthropic', 'gemini')\n */\n readonly name: string;\n\n /**\n * Execute a request against this provider\n */\n execute(request: Request, options?: ExecutionOptions): Promise<ProviderResponse>;\n\n /**\n * Check if this provider supports a given model\n */\n supportsModel?(model: Model): boolean;\n}\n\n// ===== MODEL CONFIGURATION =====\n\n/**\n * Configuration for a model or model family\n */\nexport interface ModelConfig {\n pattern?: RegExp;\n exactMatch?: string;\n personaRole: PersonaRole;\n encoding: TokenizerEncoding;\n supportsToolCalls?: boolean;\n maxTokens?: number;\n family?: string;\n description?: string;\n}\n\n","/**\n * Execution Package - Logger\n *\n * Shared logging infrastructure for execution packages.\n */\n\n/* eslint-disable no-var */\ndeclare var console: {\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n};\n/* eslint-enable no-var */\n\nexport const LIBRARY_NAME = 'execution';\n\nexport interface Logger {\n name: string;\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n verbose: (message: string, ...args: any[]) => void;\n silly: (message: string, ...args: any[]) => void;\n}\n\n \nexport const DEFAULT_LOGGER: Logger = {\n name: 'default',\n debug: (message: string, ...args: any[]) => console.debug(message, ...args),\n info: (message: string, ...args: any[]) => console.info(message, ...args),\n warn: (message: string, ...args: any[]) => console.warn(message, ...args),\n error: (message: string, ...args: any[]) => console.error(message, ...args),\n verbose: () => {},\n silly: () => {},\n};\n \n\nexport function wrapLogger(toWrap: Logger, name?: string): Logger {\n const requiredMethods: (keyof Logger)[] = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'verbose',\n 'silly',\n ];\n const missingMethods = requiredMethods.filter(\n (method) => typeof toWrap[method] !== 'function'\n );\n\n if (missingMethods.length > 0) {\n throw new Error(\n `Logger is missing required methods: ${missingMethods.join(', ')}`\n );\n }\n\n const log = (level: keyof Logger, message: string, ...args: any[]) => {\n message = `[${LIBRARY_NAME}] ${name ? `[${name}]` : ''}: ${message}`;\n\n if (level === 'debug') toWrap.debug(message, ...args);\n else if (level === 'info') toWrap.info(message, ...args);\n else if (level === 'warn') toWrap.warn(message, ...args);\n else if (level === 'error') toWrap.error(message, ...args);\n else if (level === 'verbose') toWrap.verbose(message, ...args);\n else if (level === 'silly') toWrap.silly(message, ...args);\n };\n\n return {\n name: 'wrapped',\n debug: (message: string, ...args: any[]) => log('debug', message, ...args),\n info: (message: string, ...args: any[]) => log('info', message, ...args),\n warn: (message: string, ...args: any[]) => log('warn', message, ...args),\n error: (message: string, ...args: any[]) => log('error', message, ...args),\n verbose: (message: string, ...args: any[]) =>\n log('verbose', message, ...args),\n silly: (message: string, ...args: any[]) => log('silly', message, ...args),\n };\n}\n\n","/**\n * Execution Package - Model Registry\n *\n * Provides a flexible, user-configurable system for model detection and configuration.\n */\n\nimport { DEFAULT_LOGGER, wrapLogger, type Logger } from './logger.js';\nimport type { ModelConfig, PersonaRole, TokenizerEncoding } from './types.js';\n\n/**\n * Model registry for managing model configurations\n */\nexport class ModelRegistry {\n private configs: ModelConfig[];\n private cache: Map<string, ModelConfig>;\n private logger: Logger;\n\n constructor(logger?: Logger) {\n this.configs = [];\n this.cache = new Map();\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ModelRegistry');\n\n // Register default configurations\n this.registerDefaults();\n }\n\n /**\n * Register default model configurations\n */\n private registerDefaults(): void {\n // Default fallback (Registered first so it ends up last with unshift)\n this.register({\n pattern: /.*/,\n personaRole: 'system',\n encoding: 'gpt-4o',\n supportsToolCalls: true,\n family: 'unknown',\n description: 'Default fallback configuration',\n });\n\n // Claude family (uses 'system' role)\n this.register({\n pattern: /^claude/i,\n personaRole: 'system',\n encoding: 'cl100k_base',\n supportsToolCalls: true,\n family: 'claude',\n description: 'Claude family models',\n });\n\n // O-series models (uses 'developer' role)\n this.register({\n pattern: /^o\\d+/i,\n personaRole: 'developer',\n encoding: 'gpt-4o',\n supportsToolCalls: true,\n family: 'o-series',\n description: 'O-series reasoning models',\n });\n\n // GPT-4 family (uses 'system' role)\n this.register({\n pattern: /^gpt-4/i,\n personaRole: 'system',\n encoding: 'gpt-4o',\n supportsToolCalls: true,\n family: 'gpt-4',\n description: 'GPT-4 family models',\n });\n\n // Gemini family\n this.register({\n pattern: /^gemini/i,\n personaRole: 'system',\n encoding: 'cl100k_base',\n supportsToolCalls: true,\n family: 'gemini',\n description: 'Gemini family models',\n });\n\n this.logger.debug('Registered default model configurations');\n }\n\n /**\n * Register a model configuration\n */\n register(config: ModelConfig): void {\n if (!config.pattern && !config.exactMatch) {\n throw new Error('Model config must have either pattern or exactMatch');\n }\n\n this.configs.unshift(config);\n this.cache.clear();\n\n this.logger.debug('Registered model config', {\n family: config.family,\n pattern: config.pattern?.source,\n exactMatch: config.exactMatch,\n });\n }\n\n /**\n * Get configuration for a model\n */\n getConfig(model: string): ModelConfig {\n if (this.cache.has(model)) {\n return this.cache.get(model)!;\n }\n\n for (const config of this.configs) {\n if (config.exactMatch && config.exactMatch === model) {\n this.cache.set(model, config);\n return config;\n }\n\n if (config.pattern && config.pattern.test(model)) {\n this.cache.set(model, config);\n return config;\n }\n }\n\n throw new Error(`No configuration found for model: ${model}`);\n }\n\n /**\n * Get persona role for a model\n */\n getPersonaRole(model: string): PersonaRole {\n return this.getConfig(model).personaRole;\n }\n\n /**\n * Get tokenizer encoding for a model\n */\n getEncoding(model: string): TokenizerEncoding {\n return this.getConfig(model).encoding;\n }\n\n /**\n * Check if model supports tool calls\n */\n supportsToolCalls(model: string): boolean {\n return this.getConfig(model).supportsToolCalls ?? true;\n }\n\n /**\n * Get model family\n */\n getFamily(model: string): string | undefined {\n return this.getConfig(model).family;\n }\n\n /**\n * Clear all registered configs and reset to defaults\n */\n reset(): void {\n this.configs = [];\n this.cache.clear();\n this.registerDefaults();\n this.logger.debug('Reset model configurations to defaults');\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n this.logger.debug('Cleared model configuration cache');\n }\n\n /**\n * Get all registered configurations\n */\n getAllConfigs(): ModelConfig[] {\n return [...this.configs];\n }\n}\n\n// Global registry instance\nlet globalRegistry: ModelRegistry | null = null;\n\n/**\n * Get the global model registry\n */\nexport function getModelRegistry(logger?: Logger): ModelRegistry {\n if (!globalRegistry) {\n globalRegistry = new ModelRegistry(logger);\n }\n return globalRegistry;\n}\n\n/**\n * Reset the global registry\n */\nexport function resetModelRegistry(): void {\n globalRegistry = null;\n}\n\n/**\n * Helper functions using global registry\n */\nexport function getPersonaRole(model: string): PersonaRole {\n return getModelRegistry().getPersonaRole(model);\n}\n\nexport function getEncoding(model: string): TokenizerEncoding {\n return getModelRegistry().getEncoding(model);\n}\n\nexport function supportsToolCalls(model: string): boolean {\n return getModelRegistry().supportsToolCalls(model);\n}\n\nexport function getModelFamily(model: string): string | undefined {\n return getModelRegistry().getFamily(model);\n}\n\n/**\n * Configure a custom model\n */\nexport function configureModel(config: ModelConfig): void {\n getModelRegistry().register(config);\n}\n\nexport default ModelRegistry;\n\n","/**\n * Execution Package\n *\n * Core interfaces and types for LLM execution providers.\n * This package contains no provider-specific dependencies.\n *\n * @packageDocumentation\n */\n\n// Types\nexport type {\n Role,\n Model,\n PersonaRole,\n TokenizerEncoding,\n Message,\n ToolCall,\n ConversationMessage,\n Request,\n ProviderResponse,\n ExecutionOptions,\n Provider,\n ModelConfig,\n} from './types.js';\n\nexport { createRequest } from './types.js';\n\n// Logger\nexport type { Logger } from './logger.js';\nexport { DEFAULT_LOGGER, wrapLogger, LIBRARY_NAME } from './logger.js';\n\n// Model Registry\nexport {\n ModelRegistry,\n getModelRegistry,\n resetModelRegistry,\n getPersonaRole,\n getEncoding,\n supportsToolCalls,\n getModelFamily,\n configureModel,\n} from './model-registry.js';\n\n/**\n * Package version\n */\nexport const VERSION = '0.0.1';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/types.ts","../src/logger.ts","../src/model-registry.ts","../src/index.ts"],"sourcesContent":["/**\n * Execution Package - Core Types\n *\n * Defines the fundamental types for LLM execution across providers.\n */\n\n// ===== ROLE AND MODEL TYPES =====\n\n/**\n * Message role in a conversation\n */\nexport type Role = 'user' | 'assistant' | 'system' | 'developer' | 'tool';\n\n/**\n * Model identifier - flexible string to support any model\n */\nexport type Model = string;\n\n/**\n * Model role mapping for persona/system messages\n */\nexport type PersonaRole = 'system' | 'developer';\n\n/**\n * Tokenizer encoding to use for token counting\n */\nexport type TokenizerEncoding = 'gpt-4o' | 'cl100k_base' | 'o200k_base';\n\n// ===== MESSAGE TYPES =====\n\n/**\n * A message in a conversation\n */\nexport interface Message {\n role: Role;\n content: string | string[] | null;\n name?: string;\n}\n\n/**\n * Tool call made by the assistant\n */\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\n// ===== TOOL DEFINITION TYPES =====\n\n/**\n * JSON Schema for tool parameters\n */\nexport interface ToolParameterSchema {\n type: 'object';\n properties: Record<string, {\n type: string;\n description?: string;\n enum?: string[];\n items?: { type: string };\n default?: any;\n }>;\n required?: string[];\n additionalProperties?: boolean;\n}\n\n/**\n * Tool definition for LLM function calling\n * Provider-agnostic format that maps to both Anthropic and OpenAI schemas\n */\nexport interface ToolDefinition {\n /** Unique name for the tool (used in function calls) */\n name: string;\n /** Description of what the tool does (helps LLM decide when to use it) */\n description: string;\n /** JSON Schema defining the tool's parameters */\n parameters: ToolParameterSchema;\n}\n\n// ===== STREAMING TYPES =====\n\n/**\n * Type of streaming chunk\n */\nexport type StreamChunkType = 'text' | 'tool_call_start' | 'tool_call_delta' | 'tool_call_end' | 'usage' | 'done';\n\n/**\n * A chunk from a streaming response\n */\nexport interface StreamChunk {\n type: StreamChunkType;\n /** Text content delta (for type='text') */\n text?: string;\n /** Tool call information (for tool_call_* types) */\n toolCall?: {\n /** Tool call ID (available on start and end) */\n id?: string;\n /** Index of this tool call in the response */\n index?: number;\n /** Function name (available on start) */\n name?: string;\n /** Arguments delta (for tool_call_delta) */\n argumentsDelta?: string;\n };\n /** Usage information (for type='usage') */\n usage?: {\n inputTokens: number;\n outputTokens: number;\n };\n}\n\n/**\n * Message in a conversation (compatible with OpenAI format)\n */\nexport interface ConversationMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | 'developer';\n content: string | null;\n name?: string;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n}\n\n// ===== REQUEST TYPES =====\n\n/**\n * LLM request interface\n */\nexport interface Request {\n messages: Message[];\n model: Model;\n responseFormat?: any;\n validator?: any;\n /** Tool definitions for function calling */\n tools?: ToolDefinition[];\n addMessage(message: Message): void;\n}\n\n/**\n * Create a new request object\n */\nexport function createRequest(model: Model): Request {\n const messages: Message[] = [];\n\n return {\n model,\n messages,\n responseFormat: undefined,\n validator: undefined,\n addMessage: (message: Message) => {\n messages.push(message);\n },\n };\n}\n\n// ===== PROVIDER TYPES =====\n\n/**\n * Response from an LLM provider\n */\nexport interface ProviderResponse {\n content: string;\n model: string;\n usage?: {\n inputTokens: number;\n outputTokens: number;\n };\n toolCalls?: ToolCall[];\n}\n\n/**\n * Options for execution\n */\nexport interface ExecutionOptions {\n apiKey?: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n timeout?: number;\n retries?: number;\n}\n\n/**\n * Provider interface for LLM execution\n */\nexport interface Provider {\n /**\n * Provider name (e.g., 'openai', 'anthropic', 'gemini')\n */\n readonly name: string;\n\n /**\n * Execute a request against this provider (non-streaming)\n */\n execute(request: Request, options?: ExecutionOptions): Promise<ProviderResponse>;\n\n /**\n * Execute a request with streaming response\n * Returns an async iterable of chunks\n */\n executeStream?(request: Request, options?: ExecutionOptions): AsyncIterable<StreamChunk>;\n\n /**\n * Check if this provider supports a given model\n */\n supportsModel?(model: Model): boolean;\n}\n\n// ===== MODEL CONFIGURATION =====\n\n/**\n * Configuration for a model or model family\n */\nexport interface ModelConfig {\n pattern?: RegExp;\n exactMatch?: string;\n personaRole: PersonaRole;\n encoding: TokenizerEncoding;\n supportsToolCalls?: boolean;\n maxTokens?: number;\n family?: string;\n description?: string;\n}\n\n","/**\n * Execution Package - Logger\n *\n * Shared logging infrastructure for execution packages.\n */\n\n/* eslint-disable no-var */\ndeclare var console: {\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n};\n/* eslint-enable no-var */\n\nexport const LIBRARY_NAME = 'execution';\n\nexport interface Logger {\n name: string;\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n verbose: (message: string, ...args: any[]) => void;\n silly: (message: string, ...args: any[]) => void;\n}\n\n \nexport const DEFAULT_LOGGER: Logger = {\n name: 'default',\n debug: (message: string, ...args: any[]) => console.debug(message, ...args),\n info: (message: string, ...args: any[]) => console.info(message, ...args),\n warn: (message: string, ...args: any[]) => console.warn(message, ...args),\n error: (message: string, ...args: any[]) => console.error(message, ...args),\n verbose: () => {},\n silly: () => {},\n};\n \n\nexport function wrapLogger(toWrap: Logger, name?: string): Logger {\n const requiredMethods: (keyof Logger)[] = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'verbose',\n 'silly',\n ];\n const missingMethods = requiredMethods.filter(\n (method) => typeof toWrap[method] !== 'function'\n );\n\n if (missingMethods.length > 0) {\n throw new Error(\n `Logger is missing required methods: ${missingMethods.join(', ')}`\n );\n }\n\n const log = (level: keyof Logger, message: string, ...args: any[]) => {\n message = `[${LIBRARY_NAME}] ${name ? `[${name}]` : ''}: ${message}`;\n\n if (level === 'debug') toWrap.debug(message, ...args);\n else if (level === 'info') toWrap.info(message, ...args);\n else if (level === 'warn') toWrap.warn(message, ...args);\n else if (level === 'error') toWrap.error(message, ...args);\n else if (level === 'verbose') toWrap.verbose(message, ...args);\n else if (level === 'silly') toWrap.silly(message, ...args);\n };\n\n return {\n name: 'wrapped',\n debug: (message: string, ...args: any[]) => log('debug', message, ...args),\n info: (message: string, ...args: any[]) => log('info', message, ...args),\n warn: (message: string, ...args: any[]) => log('warn', message, ...args),\n error: (message: string, ...args: any[]) => log('error', message, ...args),\n verbose: (message: string, ...args: any[]) =>\n log('verbose', message, ...args),\n silly: (message: string, ...args: any[]) => log('silly', message, ...args),\n };\n}\n\n","/**\n * Execution Package - Model Registry\n *\n * Provides a flexible, user-configurable system for model detection and configuration.\n */\n\nimport { DEFAULT_LOGGER, wrapLogger, type Logger } from './logger.js';\nimport type { ModelConfig, PersonaRole, TokenizerEncoding } from './types.js';\n\n/**\n * Model registry for managing model configurations\n */\nexport class ModelRegistry {\n private configs: ModelConfig[];\n private cache: Map<string, ModelConfig>;\n private logger: Logger;\n\n constructor(logger?: Logger) {\n this.configs = [];\n this.cache = new Map();\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ModelRegistry');\n\n // Register default configurations\n this.registerDefaults();\n }\n\n /**\n * Register default model configurations\n */\n private registerDefaults(): void {\n // Default fallback (Registered first so it ends up last with unshift)\n this.register({\n pattern: /.*/,\n personaRole: 'system',\n encoding: 'gpt-4o',\n supportsToolCalls: true,\n family: 'unknown',\n description: 'Default fallback configuration',\n });\n\n // Claude family (uses 'system' role)\n this.register({\n pattern: /^claude/i,\n personaRole: 'system',\n encoding: 'cl100k_base',\n supportsToolCalls: true,\n family: 'claude',\n description: 'Claude family models',\n });\n\n // O-series models (uses 'developer' role)\n this.register({\n pattern: /^o\\d+/i,\n personaRole: 'developer',\n encoding: 'gpt-4o',\n supportsToolCalls: true,\n family: 'o-series',\n description: 'O-series reasoning models',\n });\n\n // GPT-4 family (uses 'system' role)\n this.register({\n pattern: /^gpt-4/i,\n personaRole: 'system',\n encoding: 'gpt-4o',\n supportsToolCalls: true,\n family: 'gpt-4',\n description: 'GPT-4 family models',\n });\n\n // Gemini family\n this.register({\n pattern: /^gemini/i,\n personaRole: 'system',\n encoding: 'cl100k_base',\n supportsToolCalls: true,\n family: 'gemini',\n description: 'Gemini family models',\n });\n\n this.logger.debug('Registered default model configurations');\n }\n\n /**\n * Register a model configuration\n */\n register(config: ModelConfig): void {\n if (!config.pattern && !config.exactMatch) {\n throw new Error('Model config must have either pattern or exactMatch');\n }\n\n this.configs.unshift(config);\n this.cache.clear();\n\n this.logger.debug('Registered model config', {\n family: config.family,\n pattern: config.pattern?.source,\n exactMatch: config.exactMatch,\n });\n }\n\n /**\n * Get configuration for a model\n */\n getConfig(model: string): ModelConfig {\n if (this.cache.has(model)) {\n return this.cache.get(model)!;\n }\n\n for (const config of this.configs) {\n if (config.exactMatch && config.exactMatch === model) {\n this.cache.set(model, config);\n return config;\n }\n\n if (config.pattern && config.pattern.test(model)) {\n this.cache.set(model, config);\n return config;\n }\n }\n\n throw new Error(`No configuration found for model: ${model}`);\n }\n\n /**\n * Get persona role for a model\n */\n getPersonaRole(model: string): PersonaRole {\n return this.getConfig(model).personaRole;\n }\n\n /**\n * Get tokenizer encoding for a model\n */\n getEncoding(model: string): TokenizerEncoding {\n return this.getConfig(model).encoding;\n }\n\n /**\n * Check if model supports tool calls\n */\n supportsToolCalls(model: string): boolean {\n return this.getConfig(model).supportsToolCalls ?? true;\n }\n\n /**\n * Get model family\n */\n getFamily(model: string): string | undefined {\n return this.getConfig(model).family;\n }\n\n /**\n * Clear all registered configs and reset to defaults\n */\n reset(): void {\n this.configs = [];\n this.cache.clear();\n this.registerDefaults();\n this.logger.debug('Reset model configurations to defaults');\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n this.logger.debug('Cleared model configuration cache');\n }\n\n /**\n * Get all registered configurations\n */\n getAllConfigs(): ModelConfig[] {\n return [...this.configs];\n }\n}\n\n// Global registry instance\nlet globalRegistry: ModelRegistry | null = null;\n\n/**\n * Get the global model registry\n */\nexport function getModelRegistry(logger?: Logger): ModelRegistry {\n if (!globalRegistry) {\n globalRegistry = new ModelRegistry(logger);\n }\n return globalRegistry;\n}\n\n/**\n * Reset the global registry\n */\nexport function resetModelRegistry(): void {\n globalRegistry = null;\n}\n\n/**\n * Helper functions using global registry\n */\nexport function getPersonaRole(model: string): PersonaRole {\n return getModelRegistry().getPersonaRole(model);\n}\n\nexport function getEncoding(model: string): TokenizerEncoding {\n return getModelRegistry().getEncoding(model);\n}\n\nexport function supportsToolCalls(model: string): boolean {\n return getModelRegistry().supportsToolCalls(model);\n}\n\nexport function getModelFamily(model: string): string | undefined {\n return getModelRegistry().getFamily(model);\n}\n\n/**\n * Configure a custom model\n */\nexport function configureModel(config: ModelConfig): void {\n getModelRegistry().register(config);\n}\n\nexport default ModelRegistry;\n\n","/**\n * Execution Package\n *\n * Core interfaces and types for LLM execution providers.\n * This package contains no provider-specific dependencies.\n *\n * @packageDocumentation\n */\n\n// Types\nexport type {\n Role,\n Model,\n PersonaRole,\n TokenizerEncoding,\n Message,\n ToolCall,\n ToolDefinition,\n ToolParameterSchema,\n StreamChunk,\n StreamChunkType,\n ConversationMessage,\n Request,\n ProviderResponse,\n ExecutionOptions,\n Provider,\n ModelConfig,\n} from './types.js';\n\nexport { createRequest } from './types.js';\n\n// Logger\nexport type { Logger } from './logger.js';\nexport { DEFAULT_LOGGER, wrapLogger, LIBRARY_NAME } from './logger.js';\n\n// Model Registry\nexport {\n ModelRegistry,\n getModelRegistry,\n resetModelRegistry,\n getPersonaRole,\n getEncoding,\n supportsToolCalls,\n getModelFamily,\n configureModel,\n} from './model-registry.js';\n\n/**\n * Package version\n */\nexport const VERSION = '0.0.1';\n"],"names":[],"mappings":"AA+IO,SAAS,cAAc,OAAuB;AACjD,QAAM,WAAsB,CAAA;AAE5B,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,YAAY,CAAC,YAAqB;AAC9B,eAAS,KAAK,OAAO;AAAA,IACzB;AAAA,EAAA;AAER;AC5IO,MAAM,eAAe;AAarB,MAAM,iBAAyB;AAAA,EAClC,MAAM;AAAA,EACN,OAAO,CAAC,YAAoB,SAAgB,QAAQ,MAAM,SAAS,GAAG,IAAI;AAAA,EAC1E,MAAM,CAAC,YAAoB,SAAgB,QAAQ,KAAK,SAAS,GAAG,IAAI;AAAA,EACxE,MAAM,CAAC,YAAoB,SAAgB,QAAQ,KAAK,SAAS,GAAG,IAAI;AAAA,EACxE,OAAO,CAAC,YAAoB,SAAgB,QAAQ,MAAM,SAAS,GAAG,IAAI;AAAA,EAC1E,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,OAAO,MAAM;AAAA,EAAC;AAClB;AAGO,SAAS,WAAW,QAAgB,MAAuB;AAC9D,QAAM,kBAAoC;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,QAAM,iBAAiB,gBAAgB;AAAA,IACnC,CAAC,WAAW,OAAO,OAAO,MAAM,MAAM;AAAA,EAAA;AAG1C,MAAI,eAAe,SAAS,GAAG;AAC3B,UAAM,IAAI;AAAA,MACN,uCAAuC,eAAe,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAExE;AAEA,QAAM,MAAM,CAAC,OAAqB,YAAoB,SAAgB;AAClE,cAAU,IAAI,YAAY,KAAK,OAAO,IAAI,IAAI,MAAM,EAAE,KAAK,OAAO;AAElE,QAAI,UAAU,QAAS,QAAO,MAAM,SAAS,GAAG,IAAI;AAAA,aAC3C,UAAU,OAAQ,QAAO,KAAK,SAAS,GAAG,IAAI;AAAA,aAC9C,UAAU,OAAQ,QAAO,KAAK,SAAS,GAAG,IAAI;AAAA,aAC9C,UAAU,QAAS,QAAO,MAAM,SAAS,GAAG,IAAI;AAAA,aAChD,UAAU,UAAW,QAAO,QAAQ,SAAS,GAAG,IAAI;AAAA,aACpD,UAAU,QAAS,QAAO,MAAM,SAAS,GAAG,IAAI;AAAA,EAC7D;AAEA,SAAO;AAAA,IACH,MAAM;AAAA,IACN,OAAO,CAAC,YAAoB,SAAgB,IAAI,SAAS,SAAS,GAAG,IAAI;AAAA,IACzE,MAAM,CAAC,YAAoB,SAAgB,IAAI,QAAQ,SAAS,GAAG,IAAI;AAAA,IACvE,MAAM,CAAC,YAAoB,SAAgB,IAAI,QAAQ,SAAS,GAAG,IAAI;AAAA,IACvE,OAAO,CAAC,YAAoB,SAAgB,IAAI,SAAS,SAAS,GAAG,IAAI;AAAA,IACzE,SAAS,CAAC,YAAoB,SAC1B,IAAI,WAAW,SAAS,GAAG,IAAI;AAAA,IACnC,OAAO,CAAC,YAAoB,SAAgB,IAAI,SAAS,SAAS,GAAG,IAAI;AAAA,EAAA;AAEjF;ACnEO,MAAM,cAAc;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAAiB;AACzB,SAAK,UAAU,CAAA;AACf,SAAK,4BAAY,IAAA;AACjB,SAAK,SAAS,WAAW,UAAU,gBAAgB,eAAe;AAGlE,SAAK,iBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAyB;AAE7B,SAAK,SAAS;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,QAAQ;AAAA,MACR,aAAa;AAAA,IAAA,CAChB;AAGD,SAAK,SAAS;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,QAAQ;AAAA,MACR,aAAa;AAAA,IAAA,CAChB;AAGD,SAAK,SAAS;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,QAAQ;AAAA,MACR,aAAa;AAAA,IAAA,CAChB;AAGD,SAAK,SAAS;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,QAAQ;AAAA,MACR,aAAa;AAAA,IAAA,CAChB;AAGD,SAAK,SAAS;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,QAAQ;AAAA,MACR,aAAa;AAAA,IAAA,CAChB;AAED,SAAK,OAAO,MAAM,yCAAyC;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,QAA2B;AAChC,QAAI,CAAC,OAAO,WAAW,CAAC,OAAO,YAAY;AACvC,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACzE;AAEA,SAAK,QAAQ,QAAQ,MAAM;AAC3B,SAAK,MAAM,MAAA;AAEX,SAAK,OAAO,MAAM,2BAA2B;AAAA,MACzC,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO,SAAS;AAAA,MACzB,YAAY,OAAO;AAAA,IAAA,CACtB;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAA4B;AAClC,QAAI,KAAK,MAAM,IAAI,KAAK,GAAG;AACvB,aAAO,KAAK,MAAM,IAAI,KAAK;AAAA,IAC/B;AAEA,eAAW,UAAU,KAAK,SAAS;AAC/B,UAAI,OAAO,cAAc,OAAO,eAAe,OAAO;AAClD,aAAK,MAAM,IAAI,OAAO,MAAM;AAC5B,eAAO;AAAA,MACX;AAEA,UAAI,OAAO,WAAW,OAAO,QAAQ,KAAK,KAAK,GAAG;AAC9C,aAAK,MAAM,IAAI,OAAO,MAAM;AAC5B,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,UAAM,IAAI,MAAM,qCAAqC,KAAK,EAAE;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,OAA4B;AACvC,WAAO,KAAK,UAAU,KAAK,EAAE;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAkC;AAC1C,WAAO,KAAK,UAAU,KAAK,EAAE;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,OAAwB;AACtC,WAAO,KAAK,UAAU,KAAK,EAAE,qBAAqB;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAAmC;AACzC,WAAO,KAAK,UAAU,KAAK,EAAE;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACV,SAAK,UAAU,CAAA;AACf,SAAK,MAAM,MAAA;AACX,SAAK,iBAAA;AACL,SAAK,OAAO,MAAM,wCAAwC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,aAAmB;AACf,SAAK,MAAM,MAAA;AACX,SAAK,OAAO,MAAM,mCAAmC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,gBAA+B;AAC3B,WAAO,CAAC,GAAG,KAAK,OAAO;AAAA,EAC3B;AACJ;AAGA,IAAI,iBAAuC;AAKpC,SAAS,iBAAiB,QAAgC;AAC7D,MAAI,CAAC,gBAAgB;AACjB,qBAAiB,IAAI,cAAc,MAAM;AAAA,EAC7C;AACA,SAAO;AACX;AAKO,SAAS,qBAA2B;AACvC,mBAAiB;AACrB;AAKO,SAAS,eAAe,OAA4B;AACvD,SAAO,iBAAA,EAAmB,eAAe,KAAK;AAClD;AAEO,SAAS,YAAY,OAAkC;AAC1D,SAAO,iBAAA,EAAmB,YAAY,KAAK;AAC/C;AAEO,SAAS,kBAAkB,OAAwB;AACtD,SAAO,iBAAA,EAAmB,kBAAkB,KAAK;AACrD;AAEO,SAAS,eAAe,OAAmC;AAC9D,SAAO,iBAAA,EAAmB,UAAU,KAAK;AAC7C;AAKO,SAAS,eAAe,QAA2B;AACtD,mBAAA,EAAmB,SAAS,MAAM;AACtC;AC5KO,MAAM,UAAU;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kjerneverk/execution",
3
- "version": "1.0.6-dev.20260201021903.7af3def",
3
+ "version": "1.0.6",
4
4
  "_versionReset": "2026-01-15",
5
5
  "description": "LLM execution provider interfaces - no SDK dependencies",
6
6
  "type": "module",