@em3odme/agentic 0.1.0
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/LICENSE.md +21 -0
- package/README.md +145 -0
- package/dist/index.cjs +782 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +111 -0
- package/dist/index.d.ts +111 -0
- package/dist/index.js +751 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/cloudflare.ts","../src/providers/groq.ts","../src/types.ts","../src/providers/BaseModelProvider.ts","../src/providers/utils.ts","../src/providers/CloudflareProvider.ts","../src/providers/GroqProvider.ts","../src/providers/ProviderFactory.ts","../src/response/JsonParser.ts","../src/response/ResponseBuilder.ts","../src/config/Configuration.ts","../src/errors/RetryHandler.ts","../src/ModelRunner.ts"],"sourcesContent":["import { AiModels } from '@cloudflare/workers-types';\nimport { ModelRunnerConfig } from '../types';\n\nexport const cloudflareAIModel = (\n model: keyof AiModels\n): ModelRunnerConfig => ({\n provider: 'cloudflare',\n model,\n});\n","import type { ModelRunnerConfig } from '../types';\n\ntype GroqModelsList =\n | 'llama-3.1-8b-instant'\n | 'llama-3.3-70b-versatile'\n | 'meta-llama/llama-guard-4-12b'\n | 'openai/gpt-oss-120b'\n | 'openai/gpt-oss-20b'\n | 'whisper-large-v3'\n | 'whisper-large-v3-turbo';\n\nexport const groqAIModel = (model: GroqModelsList): ModelRunnerConfig => ({\n provider: 'groq',\n model,\n});\n","export type AgentRole = 'system' | 'user' | 'assistant';\nexport interface AgentMessage {\n role: AgentRole;\n content: string;\n name?: string;\n}\n\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport type ModelRunnerProvider = 'cloudflare' | 'groq';\n\nexport type ModelRunnerConfig = {\n provider: ModelRunnerProvider;\n model: string;\n};\n\nexport type ModelCapabilities = {\n jsonStructure?: boolean;\n tools?: boolean;\n};\n\nexport type ModelRunnerEnvironment<T> = Record<string, T>;\n\nexport type ModelRunnerRunParams = {\n messages: AgentMessage[];\n jsonMode?: boolean;\n options?: Record<string, unknown>; // Доп. настройки (temperature, max_tokens и т.д.)\n model: ModelRunnerConfig;\n};\n\nexport type ModelRunnerUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n};\n\nexport type ModelRunnerResult<T> = {\n content: string;\n isJson: boolean;\n tool_calls: ToolCall[];\n raw: unknown;\n usage: ModelRunnerUsage;\n json: () => T | null;\n};\n\n// Enhanced type definitions for new architecture\nexport interface ProviderConfig {\n provider: string;\n model: string;\n options?: Record<string, unknown>;\n}\n\nexport interface ProviderRequest {\n messages: AgentMessage[];\n jsonMode: boolean;\n options: Record<string, unknown>;\n model: string;\n}\n\nexport interface ProviderResponse {\n content: string;\n toolCalls: ToolCall[];\n raw: unknown;\n usage: ModelRunnerUsage;\n}\n\nexport interface ModelProvider {\n readonly providerType: string;\n execute(request: ProviderRequest): Promise<ProviderResponse>;\n supportsJsonMode(): boolean;\n supportsTools(): boolean;\n}\n\n// Enhanced error types\nexport class ProviderError extends Error {\n constructor(\n message: string,\n public readonly provider: string,\n public readonly statusCode?: number,\n public readonly originalError?: unknown\n ) {\n super(message);\n this.name = 'ProviderError';\n }\n}\n\nexport class ConfigurationError extends Error {\n constructor(\n message: string,\n public readonly provider: string\n ) {\n super(message);\n this.name = 'ConfigurationError';\n }\n}\n","import type {\n ModelProvider,\n ModelRunnerEnvironment,\n ProviderRequest,\n ProviderResponse,\n ToolCall,\n} from '../types';\nimport { ConfigurationError, ProviderError } from '../types';\n\nexport abstract class BaseModelProvider<T> implements ModelProvider {\n public abstract readonly providerType: string;\n\n constructor(protected environment: ModelRunnerEnvironment<T>) {}\n\n abstract execute(request: ProviderRequest): Promise<ProviderResponse>;\n protected abstract extractContent(response: unknown): string;\n protected abstract extractToolCalls(response: unknown): ToolCall[];\n abstract supportsJsonMode(): boolean;\n abstract supportsTools(): boolean;\n\n protected validateRequiredKeys(envKeys: string[]): void {\n const missing = envKeys.filter((key) => !this.environment[key]);\n if (missing.length > 0) {\n throw new ConfigurationError(\n `Missing required environment variables: ${missing.join(', ')}`,\n this.providerType\n );\n }\n }\n\n protected createError(\n message: string,\n statusCode?: number,\n originalError?: unknown\n ): ProviderError {\n return new ProviderError(\n message,\n this.providerType,\n statusCode,\n originalError\n );\n }\n\n protected buildUsageObject(\n promptTokens: number,\n completionTokens: number,\n totalTokens: number\n ) {\n return {\n promptTokens,\n completionTokens,\n totalTokens,\n };\n }\n\n protected filterDuplicateToolCalls(toolCalls: ToolCall[]): ToolCall[] {\n const seen = new Set<string>();\n return toolCalls.filter((toolCall) => {\n const key = toolCall.function.name;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n}\n","export const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\nexport async function runWithRetry<T>(\n fn: () => Promise<T>,\n maxRetries = 3,\n delayMs = 1000,\n info?: (msg: string) => void\n) {\n for (let i = 0; i < maxRetries; i++) {\n try {\n return await fn();\n } catch (error: unknown) {\n const isRetryable =\n error instanceof Error &&\n (error.message?.includes('1031') ||\n error.toString().includes('1031') ||\n error.message?.includes('500'));\n\n if (isRetryable && i < maxRetries - 1) {\n if (info)\n info(`AI Error (1031/500). Retrying ${i + 1}/${maxRetries}...`);\n await delay(delayMs * (i + 1));\n continue;\n }\n throw error;\n }\n }\n}\n","import { Ai, AiModels } from '@cloudflare/workers-types';\nimport { BaseModelProvider } from './BaseModelProvider';\nimport { runWithRetry } from './utils';\nimport type {\n ModelRunnerEnvironment,\n ProviderRequest,\n ProviderResponse,\n ToolCall,\n} from '../types';\n\nexport class CloudflareProvider extends BaseModelProvider<Ai> {\n public readonly providerType: string = 'cloudflare';\n\n constructor(environment: ModelRunnerEnvironment<Ai>) {\n super(environment);\n this.validateRequiredKeys(['AI']);\n }\n\n supportsJsonMode(): boolean {\n return true;\n }\n\n supportsTools(): boolean {\n return true;\n }\n\n async execute(request: ProviderRequest): Promise<ProviderResponse> {\n const payload: Record<string, unknown> = {\n messages: request.messages,\n ...request.options,\n };\n\n if (request.jsonMode) {\n payload.response_format = { type: 'json_object' };\n }\n\n try {\n const response = await runWithRetry(\n async () => {\n return this.environment.AI!.run(\n request.model as keyof AiModels,\n payload\n );\n },\n 3,\n 1000\n );\n\n return this.parseResponse(response);\n } catch (error) {\n throw this.createError(\n `Cloudflare AI execution failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n undefined,\n error\n );\n }\n }\n\n private parseResponse(response: unknown): ProviderResponse {\n const content = this.extractContent(response);\n const toolCalls = this.extractToolCalls(response);\n const usage = this.buildUsageObject(0, 0, 0); // Cloudflare doesn't provide usage data\n\n return {\n content,\n toolCalls,\n raw: response,\n usage,\n };\n }\n\n protected extractContent(response: unknown): string {\n if (typeof response === 'string') {\n return response;\n }\n\n if (response && typeof response === 'object') {\n // Handle standard response format\n if ('response' in response) {\n return String(response.response || '');\n }\n }\n\n return '';\n }\n\n protected extractToolCalls(response: unknown): ToolCall[] {\n if (!response || typeof response !== 'object') {\n return [];\n }\n\n const toolCalls = (response as Record<string, unknown>).tool_calls;\n if (!Array.isArray(toolCalls) || toolCalls.length === 0) {\n return [];\n }\n\n return toolCalls.map((toolCall, index) => {\n const tc = toolCall as Record<string, unknown>;\n const args = tc.arguments as Record<string, unknown> | string;\n const argsString = typeof args === 'string' ? args : JSON.stringify(args);\n\n return {\n id: `tool-call-${index}`,\n type: 'function' as const,\n function: {\n name: String(tc.name || ''),\n arguments: argsString,\n },\n };\n });\n }\n}\n","import { BaseModelProvider } from './BaseModelProvider';\nimport type {\n ModelRunnerEnvironment,\n ProviderRequest,\n ProviderResponse,\n ToolCall,\n} from '../types';\nimport { runWithRetry } from './utils';\n\nexport interface GroqUsageData {\n queue_time: number;\n prompt_tokens: number;\n prompt_time: number;\n completion_tokens: number;\n completion_time: number;\n total_tokens: number;\n total_time: number;\n completion_tokens_details: { reasoning_tokens: number };\n}\n\nexport interface GroqResponse {\n choices: Array<{\n message: {\n content?: string;\n tool_calls?: ToolCall[];\n };\n }>;\n usage?: GroqUsageData;\n}\n\nexport class GroqProvider extends BaseModelProvider<string> {\n public readonly providerType: string = 'groq';\n private readonly apiEndpoint =\n 'https://api.groq.com/openai/v1/chat/completions';\n\n constructor(environment: ModelRunnerEnvironment<string>) {\n super(environment);\n this.validateRequiredKeys(['GROQ_API_KEY']);\n }\n\n supportsJsonMode(): boolean {\n return true;\n }\n\n supportsTools(): boolean {\n return true;\n }\n\n async execute(request: ProviderRequest): Promise<ProviderResponse> {\n const payload = this.buildPayload(request);\n\n try {\n const response = await this.makeRequest(payload);\n return this.parseResponse(response);\n } catch (error) {\n if (error instanceof Response) {\n const errorText = await error.text();\n throw this.createError(\n `Groq API Error (${error.status}): ${errorText}. Model: ${request.model}`,\n error.status,\n errorText\n );\n }\n throw this.createError(\n `Groq execution failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n undefined,\n error\n );\n }\n }\n\n private buildPayload(request: ProviderRequest): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n model: request.model,\n messages: request.messages,\n ...request.options,\n };\n\n if (request.options?.tools) {\n payload.tool_choice = 'auto';\n }\n\n if (request.jsonMode && !request.options?.tools) {\n payload.response_format = { type: 'json_object' };\n }\n\n return payload;\n }\n\n private async makeRequest(\n payload: Record<string, unknown>\n ): Promise<GroqResponse> {\n const response = await runWithRetry(\n async () => {\n return fetch(this.apiEndpoint, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.environment.GROQ_API_KEY}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n },\n 3,\n 1000\n );\n\n if (!response) {\n throw this.createError(\n `Groq execution failed: No response from Groq API`,\n undefined,\n undefined\n );\n }\n\n return response?.json() as Promise<GroqResponse>;\n }\n\n protected extractContent(data: GroqResponse): string {\n return data.choices?.[0]?.message?.content || '';\n }\n\n protected extractToolCalls(data: GroqResponse): ToolCall[] {\n return data.choices?.[0]?.message?.tool_calls || [];\n }\n\n private parseResponse(data: GroqResponse): ProviderResponse {\n const content = this.extractContent(data);\n const toolCalls = this.filterDuplicateToolCalls(\n this.extractToolCalls(data)\n );\n const usage = data.usage\n ? this.buildUsageObject(\n data.usage.prompt_tokens,\n data.usage.completion_tokens,\n data.usage.total_tokens\n )\n : this.buildUsageObject(0, 0, 0);\n\n return {\n content,\n toolCalls,\n raw: data,\n usage,\n };\n }\n}\n","import type { ModelProvider, ModelRunnerEnvironment } from '../types';\nimport { CloudflareProvider } from './CloudflareProvider';\nimport { GroqProvider } from './GroqProvider';\nimport { ConfigurationError } from '../types';\n\nexport class ProviderFactory {\n private static providers = new Map<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (environment: ModelRunnerEnvironment<any>) => ModelProvider\n >([\n ['cloudflare', CloudflareProvider],\n ['groq', GroqProvider],\n ]);\n\n static createProvider(\n providerType: string,\n environment: ModelRunnerEnvironment<unknown>\n ): ModelProvider {\n const ProviderClass = this.providers.get(providerType);\n\n if (!ProviderClass) {\n throw new ConfigurationError(\n `Unknown provider: ${providerType}. Supported providers: ${Array.from(this.providers.keys()).join(', ')}`,\n providerType\n );\n }\n\n return new ProviderClass(environment);\n }\n\n static getSupportedProviders(): string[] {\n return Array.from(this.providers.keys());\n }\n\n static registerProvider(\n providerType: string,\n providerClass: new (\n environment: ModelRunnerEnvironment<unknown>\n ) => ModelProvider\n ): void {\n this.providers.set(providerType, providerClass);\n }\n\n static isProviderSupported(providerType: string): boolean {\n return this.providers.has(providerType);\n }\n}\n","export class JsonParser {\n /**\n * Enhanced JSON parsing with multiple fallback strategies\n */\n static parse<T>(input: string, expectJson: boolean = false): T | null {\n if (!input || typeof input !== 'string') {\n return null;\n }\n\n // Quick check for obvious non-JSON content\n if (expectJson && !this.looksLikeJson(input)) {\n return null;\n }\n\n try {\n // Strategy 1: Direct JSON parsing\n return JSON.parse(input);\n } catch {\n // Strategy 2: Extract JSON from markdown code blocks\n const markdownJson = this.extractFromMarkdown(input);\n if (markdownJson) {\n try {\n return JSON.parse(markdownJson);\n } catch {\n // Continue to next strategy\n }\n }\n\n // Strategy 3: Extract JSON from generic code blocks\n const genericCode = this.extractFromCodeBlock(input);\n if (genericCode) {\n try {\n return JSON.parse(genericCode);\n } catch {\n // Continue to next strategy\n }\n }\n\n // Strategy 4: Find JSON object by braces\n const braceMatch = this.extractByBraces(input);\n if (braceMatch) {\n try {\n return JSON.parse(braceMatch);\n } catch {\n // Continue to next strategy\n }\n }\n\n // Strategy 5: Try to fix common JSON issues\n const fixedJson = this.attemptJsonFixes(input);\n if (fixedJson) {\n try {\n return JSON.parse(fixedJson);\n } catch {\n // Final fallback failed\n }\n }\n\n return null;\n }\n }\n\n private static looksLikeJson(input: string): boolean {\n const trimmed = input.trim();\n return (\n trimmed.startsWith('{') ||\n trimmed.startsWith('[') ||\n trimmed.includes('\"')\n );\n }\n\n private static extractFromMarkdown(input: string): string | null {\n const match = input.match(/```json\\s*(\\{[\\s\\S]*?\\})\\s*```/);\n return match ? match[1] : null;\n }\n\n private static extractFromCodeBlock(input: string): string | null {\n const match = input.match(/```\\s*(\\{[\\s\\S]*?\\})\\s*```/);\n return match ? match[1] : null;\n }\n\n private static extractByBraces(input: string): string | null {\n const match = input.match(/\\{[\\s\\S]*\\}/);\n return match ? match[0] : null;\n }\n\n private static attemptJsonFixes(input: string): string | null {\n let fixed = input.trim();\n\n // Remove trailing commas before closing braces/brackets\n fixed = fixed.replace(/,(\\s*[}\\]])/g, '$1');\n\n // Remove single quotes and replace with double quotes (common issue)\n fixed = fixed.replace(/'/g, '\"');\n\n // Fix unescaped quotes in strings (basic attempt)\n fixed = fixed.replace(/\"\\s*:\\s*\"([^\"]*?)\"/g, (match, content) => {\n const escaped = content.replace(/\"/g, '\\\\\"');\n return `: \"${escaped}\"`;\n });\n\n // Remove comments (basic removal)\n fixed = fixed.replace(/\\/\\/.*$/gm, '');\n fixed = fixed.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n\n // Validate that it looks like JSON now\n if (this.looksLikeJson(fixed)) {\n return fixed;\n }\n\n return null;\n }\n\n /**\n * Safely stringify any value to JSON\n */\n static stringify(value: unknown, pretty: boolean = false): string {\n try {\n return pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value);\n } catch {\n // Fallback for circular references or unstringifiable values\n return String(value);\n }\n }\n}\n","import type { ModelRunnerResult, ModelRunnerUsage, ToolCall } from '../types';\nimport { JsonParser } from './JsonParser';\n\nexport class ResponseBuilder<T = unknown> {\n private content: string = '';\n private toolCalls: ToolCall[] = [];\n private rawResponse: unknown = null;\n private usage: ModelRunnerUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n private jsonMode: boolean = false;\n\n setContent(content: string): this {\n this.content = content;\n return this;\n }\n\n setToolCalls(toolCalls: ToolCall[]): this {\n this.toolCalls = toolCalls;\n return this;\n }\n\n setRawResponse(raw: unknown): this {\n this.rawResponse = raw;\n return this;\n }\n\n setUsage(usage: ModelRunnerUsage): this {\n this.usage = usage;\n return this;\n }\n\n setJsonMode(jsonMode: boolean): this {\n this.jsonMode = jsonMode;\n return this;\n }\n\n build(): ModelRunnerResult<T> {\n const isJson =\n this.toolCalls.length === 0 &&\n (this.jsonMode || this.content.trim().startsWith('{'));\n\n return {\n content: this.content,\n isJson,\n tool_calls: this.toolCalls,\n raw: this.rawResponse,\n usage: this.usage,\n json: () => JsonParser.parse<T>(this.content, isJson),\n };\n }\n\n static create<T = unknown>(): ResponseBuilder<T> {\n return new ResponseBuilder<T>();\n }\n}\n","import type { ModelRunnerEnvironment, ModelRunnerProvider } from '../types';\n\nexport interface ProviderConfigSchema {\n requiredEnvVars: string[];\n optionalEnvVars: string[];\n defaultOptions: Record<string, unknown>;\n supportedFeatures: {\n jsonMode: boolean;\n tools: boolean;\n streaming: boolean;\n };\n modelValidation?: {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n };\n}\n\nexport interface RuntimeConfig {\n timeout?: number;\n retries?: {\n maxAttempts: number;\n baseDelay: number;\n maxDelay: number;\n };\n caching?: {\n enabled: boolean;\n ttl: number;\n };\n logging?: {\n enabled: boolean;\n level: 'debug' | 'info' | 'warn' | 'error';\n };\n}\n\nexport class ConfigurationValidator {\n private static providerConfigs: Map<\n ModelRunnerProvider,\n ProviderConfigSchema\n > = new Map([\n [\n 'cloudflare',\n {\n requiredEnvVars: ['AI'],\n optionalEnvVars: [],\n defaultOptions: {},\n supportedFeatures: {\n jsonMode: true,\n tools: true,\n streaming: false,\n },\n },\n ],\n [\n 'groq',\n {\n requiredEnvVars: ['GROQ_API_KEY'],\n optionalEnvVars: [],\n defaultOptions: {\n temperature: 0.7,\n max_tokens: 1024,\n },\n supportedFeatures: {\n jsonMode: true,\n tools: true,\n streaming: true,\n },\n },\n ],\n ]);\n\n static validateProvider(\n provider: ModelRunnerProvider,\n environment: ModelRunnerEnvironment<unknown>\n ): void {\n const config = this.providerConfigs.get(provider);\n if (!config) {\n throw new Error(`Unknown provider: ${provider}`);\n }\n\n this.validateEnvironmentVariables(provider, config, environment);\n }\n\n static validateModel(provider: ModelRunnerProvider, model: string): void {\n const config = this.providerConfigs.get(provider);\n if (!config || !config.modelValidation) {\n return;\n }\n\n const validation = config.modelValidation;\n\n if (validation.minLength && model.length < validation.minLength) {\n throw new Error(\n `Model name must be at least ${validation.minLength} characters long`\n );\n }\n\n if (validation.maxLength && model.length > validation.maxLength) {\n throw new Error(\n `Model name must not exceed ${validation.maxLength} characters`\n );\n }\n\n if (validation.pattern && !validation.pattern.test(model)) {\n throw new Error(\n `Model name does not match required pattern: ${validation.pattern}`\n );\n }\n }\n\n static validateOptions(\n provider: ModelRunnerProvider,\n options: Record<string, unknown>\n ): void {\n const config = this.providerConfigs.get(provider);\n if (!config) {\n return;\n }\n\n // Validate known options\n if ('temperature' in options) {\n const temp = options.temperature;\n if (typeof temp !== 'number' || temp < 0 || temp > 2) {\n throw new Error('Temperature must be a number between 0 and 2');\n }\n }\n\n if ('max_tokens' in options) {\n const tokens = options.max_tokens;\n if (typeof tokens !== 'number' || tokens <= 0) {\n throw new Error('Max tokens must be a positive number');\n }\n }\n }\n\n static getProviderConfig(\n provider: ModelRunnerProvider\n ): ProviderConfigSchema | undefined {\n return this.providerConfigs.get(provider);\n }\n\n static registerProviderConfig(\n provider: ModelRunnerProvider,\n config: ProviderConfigSchema\n ): void {\n this.providerConfigs.set(provider, config);\n }\n\n private static validateEnvironmentVariables(\n provider: ModelRunnerProvider,\n config: ProviderConfigSchema,\n environment: ModelRunnerEnvironment<unknown>\n ): void {\n const missing = config.requiredEnvVars.filter((key) => !environment[key]);\n\n if (missing.length > 0) {\n throw new Error(\n `Missing required environment variables for ${provider}: ${missing.join(', ')}`\n );\n }\n }\n}\n\nexport class RuntimeConfigManager {\n private static defaultConfig: RuntimeConfig = {\n timeout: 30000,\n retries: {\n maxAttempts: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n },\n caching: {\n enabled: false,\n ttl: 300000, // 5 minutes\n },\n logging: {\n enabled: true,\n level: 'info',\n },\n };\n\n static getConfig(): RuntimeConfig {\n return { ...this.defaultConfig };\n }\n\n static updateConfig(updates: Partial<RuntimeConfig>): void {\n this.defaultConfig = this.deepMerge(this.defaultConfig, updates);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static deepMerge(target: any, source: any): any {\n const result = { ...target };\n\n for (const key in source) {\n if (\n source[key] &&\n typeof source[key] === 'object' &&\n !Array.isArray(source[key])\n ) {\n result[key] = this.deepMerge(result[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n\n return result;\n }\n}\n","import type { ModelRunnerProvider } from '../types';\n\nexport interface RetryConfig {\n maxRetries: number;\n baseDelay: number;\n maxDelay: number;\n backoffFactor: number;\n retryableErrors: string[];\n retryableStatusCodes: number[];\n}\n\nexport class RetryHandler {\n private static defaultConfig: RetryConfig = {\n maxRetries: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n backoffFactor: 2,\n retryableErrors: ['1031', '500', '502', '503', '504', 'timeout', 'network'],\n retryableStatusCodes: [500, 502, 503, 504, 429],\n };\n\n static async executeWithRetry<T>(\n operation: () => Promise<T>,\n config: Partial<RetryConfig> = {},\n context?: string\n ): Promise<T> {\n const fullConfig = { ...this.defaultConfig, ...config };\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= fullConfig.maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error;\n\n if (attempt === fullConfig.maxRetries) {\n break; // No more retries\n }\n\n if (!this.shouldRetry(error, fullConfig)) {\n break; // Error is not retryable\n }\n\n const delay = this.calculateDelay(attempt, fullConfig);\n if (context) {\n console.warn(\n `${context} - Attempt ${attempt + 1}/${fullConfig.maxRetries + 1} failed. Retrying in ${delay}ms...`\n );\n }\n await this.sleep(delay);\n }\n }\n\n throw lastError;\n }\n\n private static shouldRetry(error: unknown, config: RetryConfig): boolean {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorString = errorMessage.toLowerCase();\n\n // Check for retryable error messages\n if (\n config.retryableErrors.some((retryableError) =>\n errorString.includes(retryableError.toLowerCase())\n )\n ) {\n return true;\n }\n\n // Check for retryable HTTP status codes\n if (\n error &&\n typeof error === 'object' &&\n 'status' in error &&\n typeof error.status === 'number'\n ) {\n return config.retryableStatusCodes.includes(error.status);\n }\n\n // Check for network-related errors\n if (error instanceof TypeError && error.message.includes('fetch')) {\n return true;\n }\n\n return false;\n }\n\n private static calculateDelay(attempt: number, config: RetryConfig): number {\n const exponentialDelay =\n config.baseDelay * Math.pow(config.backoffFactor, attempt);\n\n // Add jitter to prevent thundering herd\n const jitter = Math.random() * 0.1 * exponentialDelay;\n\n return Math.min(exponentialDelay + jitter, config.maxDelay);\n }\n\n private static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n\nexport class ErrorHandler {\n static wrapProviderError(\n error: unknown,\n provider: ModelRunnerProvider,\n context?: string\n ): Error {\n const contextMessage = context ? ` (${context})` : '';\n\n if (error instanceof Error) {\n return new Error(\n `[${provider.toUpperCase()}]${contextMessage} ${error.message}`\n );\n }\n\n if (typeof error === 'string') {\n return new Error(`[${provider.toUpperCase()}]${contextMessage} ${error}`);\n }\n\n return new Error(\n `[${provider.toUpperCase()}]${contextMessage} Unknown error occurred`\n );\n }\n\n static isNetworkError(error: unknown): boolean {\n return (\n error instanceof TypeError &&\n (error.message.includes('fetch') ||\n error.message.includes('network') ||\n error.message.includes('ECONNREFUSED'))\n );\n }\n\n static isTimeoutError(error: unknown): boolean {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return errorMessage.toLowerCase().includes('timeout');\n }\n\n static isRateLimitError(error: unknown): boolean {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return (\n errorMessage.toLowerCase().includes('rate limit') ||\n Boolean(\n error &&\n typeof error === 'object' &&\n 'status' in error &&\n error.status === 429\n )\n );\n }\n}\n","import type {\n ModelProvider,\n ModelRunnerEnvironment,\n ModelRunnerProvider,\n ModelRunnerResult,\n ModelRunnerRunParams,\n} from './types';\nimport { ProviderFactory } from './providers/ProviderFactory';\nimport { ResponseBuilder } from './response/ResponseBuilder';\nimport {\n ConfigurationValidator,\n RuntimeConfigManager,\n} from './config/Configuration';\nimport { RetryHandler, ErrorHandler } from './errors/RetryHandler';\nimport { ConfigurationError } from './types';\n\nexport class ModelRunner {\n private environment: ModelRunnerEnvironment<unknown>;\n\n constructor(environment: ModelRunnerEnvironment<unknown>) {\n this.environment = environment;\n }\n\n async run<T>({\n messages,\n model,\n jsonMode = false,\n options = {},\n }: ModelRunnerRunParams): Promise<ModelRunnerResult<T>> {\n const { provider, model: modelName } = model;\n\n try {\n // Validate inputs\n this.validateInputs(provider, modelName, options);\n\n // Create provider instance\n const providerInstance = ProviderFactory.createProvider(\n provider,\n this.environment\n );\n\n // Validate provider capabilities\n this.validateCapabilities(providerInstance, jsonMode, options);\n\n // Execute with retry logic\n const response = await RetryHandler.executeWithRetry(\n () =>\n providerInstance.execute({\n messages,\n jsonMode,\n options,\n model: modelName,\n }),\n RuntimeConfigManager.getConfig().retries,\n `ModelRunner execution with ${provider}`\n );\n\n // Build and return result\n return ResponseBuilder.create<T>()\n .setContent(response.content)\n .setToolCalls(response.toolCalls)\n .setRawResponse(response.raw)\n .setUsage(response.usage)\n .setJsonMode(jsonMode)\n .build();\n } catch (error) {\n throw ErrorHandler.wrapProviderError(error, provider, 'ModelRunner.run');\n }\n }\n\n /**\n * Get supported providers\n */\n static getSupportedProviders(): string[] {\n return ProviderFactory.getSupportedProviders();\n }\n\n /**\n * Check if a provider supports specific features\n */\n static getProviderCapabilities(provider: ModelRunnerProvider):\n | {\n jsonMode: boolean;\n tools: boolean;\n streaming: boolean;\n }\n | undefined {\n const config = ConfigurationValidator.getProviderConfig(provider);\n return config?.supportedFeatures;\n }\n\n /**\n * Update runtime configuration\n */\n static updateRuntimeConfig(\n config: Partial<Parameters<typeof RuntimeConfigManager.updateConfig>[0]>\n ): void {\n RuntimeConfigManager.updateConfig(config);\n }\n\n /**\n * Validate inputs before processing\n */\n private validateInputs(\n provider: ModelRunnerProvider,\n model: string,\n options: Record<string, unknown>\n ): void {\n ConfigurationValidator.validateProvider(provider, this.environment);\n ConfigurationValidator.validateModel(provider, model);\n ConfigurationValidator.validateOptions(provider, options);\n }\n\n /**\n * Validate that the provider supports the requested features\n */\n private validateCapabilities(\n provider: ModelProvider,\n jsonMode: boolean,\n options: Record<string, unknown>\n ): void {\n if (jsonMode && !provider.supportsJsonMode()) {\n throw new ConfigurationError(\n `Provider ${provider.providerType} does not support JSON mode`,\n provider.providerType\n );\n }\n\n if (options?.tools && !provider.supportsTools()) {\n throw new ConfigurationError(\n `Provider ${provider.providerType} does not support tools`,\n provider.providerType\n );\n }\n }\n}\n"],"mappings":"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","names":["delay"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@em3odme/agentic",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"prepare": "husky",
|
|
10
|
+
"build": "tsup",
|
|
11
|
+
"dev": "tsup --watch",
|
|
12
|
+
"test": "vitest",
|
|
13
|
+
"test:ui": "vitest --ui",
|
|
14
|
+
"coverage": "vitest --coverage",
|
|
15
|
+
"lint": "eslint .",
|
|
16
|
+
"lint:fix": "eslint . --fix",
|
|
17
|
+
"lint:check": "eslint . --max-warnings=0",
|
|
18
|
+
"format": "prettier --write .",
|
|
19
|
+
"format:check": "prettier --check .",
|
|
20
|
+
"prepublishOnly": "npm run format && npm run lint && npm run test && npm run build"
|
|
21
|
+
},
|
|
22
|
+
"pre-commit": [
|
|
23
|
+
"lint"
|
|
24
|
+
],
|
|
25
|
+
"author": "Roman Jankowski",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/Em3ODMe/agentic.git"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/Em3ODMe/agentic#readme",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/Em3ODMe/agentic/issues"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18.0.0"
|
|
37
|
+
},
|
|
38
|
+
"description": "Package Template",
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@cloudflare/workers-types": "^4.20260124.0",
|
|
41
|
+
"@eslint/js": "^9.0.0",
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
43
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
44
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
45
|
+
"eslint": "^9.0.0",
|
|
46
|
+
"husky": "^9.1.7",
|
|
47
|
+
"prettier": "^3.8.1",
|
|
48
|
+
"tsup": "^8.5.1",
|
|
49
|
+
"typescript": "^5.0.0",
|
|
50
|
+
"vitest": "^4.0.18"
|
|
51
|
+
},
|
|
52
|
+
"files": [
|
|
53
|
+
"dist"
|
|
54
|
+
],
|
|
55
|
+
"keywords": [
|
|
56
|
+
"agent",
|
|
57
|
+
"llm",
|
|
58
|
+
"ai",
|
|
59
|
+
"typescript",
|
|
60
|
+
"nodejs"
|
|
61
|
+
]
|
|
62
|
+
}
|