UNPKG

@prexo/ai-chat-sdk

Version:

AI Chat SDK for building AI chat applications with Context and History

1 lines 38.5 kB
{"version":3,"sources":["../src/version.ts","../src/telemetry/client.ts","../src/lib/constants.ts","../src/lib/firecrawl.ts","../src/context/vector-db.ts","../src/context/ext-vector.ts","../src/context/client.ts","../src/history/in-redis.ts","../src/history/client.ts","../src/index.ts"],"names":["SDK_VERSION","SDK_NAME","ingestionKeyCache","getSDKVersion","getCacheKey","endpoint","domain","Telementry","options","__publicField","envDisabled","cacheKey","keyEndpoint","res","userAgent","appVersion","vendor","language","platform","cookieEnabled","hardwareConcurrency","deviceMemory","event","properties","ingestionKey","payload","DEFAULT_CHAT_SESSION_ID","id","DEFAULT_HISTORY_LENGTH","DEFAULT_HISTORY_TTL","DEFAULT_MSG_ID","DEFAULT_SIMILARITY_THRESHOLD","DEFAULT_TOP_K","firecrawlClient","getFirecrawlApiKey","getFirecrawl","key","Firecrawl","scrapeContent","url","client","chunkText","text","chunkSize","overlap","chunks","i","VectorDB","index","ids","namespace","question","similarityThreshold","topK","contextFilter","queryMode","result","embedding","x","input","returnId","nanoid","error","fileSource","transformArgs","markdown","summary","chunk","ExtVector","config","Index","getContextClient","params","vectorUrl","vectorToken","InRedisHistory","redisConfig","Redis","message","sessionId","sessionTTL","TTL","sessionID","amount","startIndex","endIndex","getHistoryClient","redisUrl","redisToken","AIChatSDK","createAIChatSDK","createTelemetry","createContextClient","createHistoryClient","src_default"],"mappings":"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","file":"index.cjs","sourcesContent":["// This file is automatically updated during the build process\n// Do not edit manually\n\nexport const SDK_VERSION = \"1.0.1-beta.1\";\nexport const SDK_NAME = \"@prexo/ai-chat-sdk\";\n","import type { TelementryEvents } from \"../types\";\nimport { SDK_VERSION } from \"../version\";\n\nexport type TelementryOptions = {\n enabled?: boolean;\n ingestionKey?: string;\n};\n\n// Static cache for ingestion key per endpoint+domain\nconst ingestionKeyCache: Record<string, Promise<string>> = {};\n\n// Auto-detect SDK version\nfunction getSDKVersion(): string {\n try {\n // Try to get from process.env (works in Node.js)\n if (typeof process !== \"undefined\" && process.env?.PREXO_SDK_VERSION) {\n return process.env.PREXO_SDK_VERSION;\n }\n\n // Try to get from window (works in browser with injected globals)\n if (\n typeof window !== \"undefined\" &&\n (window as any).__PREXO_SDK_VERSION__\n ) {\n return (window as any).__PREXO_SDK_VERSION__;\n }\n\n // Try to get from globalThis (works in modern environments)\n if (\n typeof globalThis !== \"undefined\" &&\n (globalThis as any).__PREXO_SDK_VERSION__\n ) {\n return (globalThis as any).__PREXO_SDK_VERSION__;\n }\n\n // Use the version from the version file (default fallback)\n return SDK_VERSION;\n } catch {\n return SDK_VERSION;\n }\n}\n\nfunction getCacheKey(endpoint: string, domain: string) {\n return `${endpoint}::${domain}`;\n}\n\nexport class Telementry {\n private enabled: boolean;\n private endpoint: string;\n private ingestionKey?: string;\n private sdkVersion: string;\n private ingestionKeyPromise?: Promise<string>;\n\n constructor(options: TelementryOptions) {\n const envDisabled =\n typeof process !== \"undefined\" && process.env?.DISABLE_TELEMETRY === \"1\";\n\n this.enabled = options.enabled ?? !envDisabled;\n this.endpoint =\n typeof process !== \"undefined\" &&\n process.env &&\n process.env.NODE_ENV === \"development\"\n ? \"http://localhost:3001/v1/telementry\"\n : \"https://api.prexoai.xyz/v1/telementry\";\n\n // Auto-detect SDK version if not provided\n this.sdkVersion = getSDKVersion();\n\n if (options.ingestionKey) {\n this.ingestionKey = options.ingestionKey;\n }\n // else: don't fetch here, defer to send() and use cache\n }\n\n private async fetchIngestionKeyCached(): Promise<string> {\n // Determine domain\n let domain = \"\";\n if (\n typeof window !== \"undefined\" &&\n window.location &&\n window.location.origin\n ) {\n if (\n typeof process !== \"undefined\" &&\n process.env &&\n process.env.NODE_ENV === \"development\"\n ) {\n domain = \"devwtf.in\";\n } else {\n domain = window.location.origin;\n }\n }\n const cacheKey = getCacheKey(this.endpoint, domain);\n\n if (!ingestionKeyCache[cacheKey]) {\n ingestionKeyCache[cacheKey] = this.fetchIngestionKey(domain);\n }\n return ingestionKeyCache[cacheKey];\n }\n\n private async fetchIngestionKey(domain: string): Promise<string> {\n const keyEndpoint = this.endpoint\n ? this.endpoint.replace(/\\/?$/, \"/key\")\n : \"https://api.prexoai.xyz/v1/telementry/key\";\n try {\n const res = await fetch(keyEndpoint, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ domain }),\n });\n if (!res.ok) {\n throw new Error(\"Failed to fetch ingestion key\");\n }\n const data = await res.json();\n // Assume the key is in data.key\n return data.key || \"prexoai-ingest-key\";\n } catch {\n // fallback to default\n return \"prexoai-ingest-key\";\n }\n }\n\n /**\n * Returns a string with browser details using the Navigator API.\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator\n */\n private detectBrowser(): string {\n if (typeof window !== \"undefined\" && typeof navigator !== \"undefined\") {\n const userAgent = navigator.userAgent || \"unknown\";\n const appVersion = navigator.appVersion || \"unknown\";\n const vendor = (navigator as any).vendor || \"unknown\";\n const language = (navigator as any).language || \"unknown\";\n const platform = (navigator as any).platform || \"unknown\";\n const cookieEnabled =\n (navigator as any).cookieEnabled !== undefined\n ? String((navigator as any).cookieEnabled)\n : \"unknown\";\n const hardwareConcurrency =\n (navigator as any).hardwareConcurrency !== undefined\n ? String((navigator as any).hardwareConcurrency)\n : \"unknown\";\n const deviceMemory =\n (navigator as any).deviceMemory !== undefined\n ? String((navigator as any).deviceMemory)\n : \"unknown\";\n return [\n `UserAgent: ${userAgent}`,\n `AppVersion: ${appVersion}`,\n `Vendor: ${vendor}`,\n `Language: ${language}`,\n `Platform: ${platform}`,\n `CookieEnabled: ${cookieEnabled}`,\n `HardwareConcurrency: ${hardwareConcurrency}`,\n `DeviceMemory: ${deviceMemory}`,\n ].join(\"; \");\n }\n // Fallback for non-browser environments\n return \"not-browser\";\n }\n\n /**\n * Returns the platform/OS using the Navigator API if available.\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform\n */\n private detectPlatform(): string {\n if (\n typeof navigator !== \"undefined\" &&\n typeof navigator.platform === \"string\"\n ) {\n return navigator.platform || \"unknown\";\n }\n if (\n typeof process !== \"undefined\" &&\n typeof process.platform === \"string\"\n ) {\n return process.platform;\n }\n return \"unknown\";\n }\n\n\n async send<K extends keyof TelementryEvents>(\n event: K,\n properties: TelementryEvents[K],\n ) {\n if (!this.enabled) return;\n\n // Ensure ingestionKey is available\n let ingestionKey = this.ingestionKey;\n if (!ingestionKey) {\n if (!this.ingestionKeyPromise) {\n // Use the static cache to avoid spamming /key endpoint\n this.ingestionKeyPromise = this.fetchIngestionKeyCached();\n }\n ingestionKey = await this.ingestionKeyPromise;\n this.ingestionKey = ingestionKey; // cache for future\n }\n\n const payload = {\n event,\n properties: {\n ...properties,\n sdkVersion: this.sdkVersion,\n browser: this.detectBrowser(),\n platform: this.detectPlatform(),\n timestamp: new Date().toISOString(),\n },\n };\n\n try {\n await fetch(this.endpoint, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-ingest-key\": ingestionKey,\n },\n body: JSON.stringify(payload),\n });\n } catch {\n // never throw\n }\n }\n}\n","// Constants for the AI Chat SDK\nexport const DEFAULT_CHAT_SESSION_ID = (id?: string) =>\n `prexo-chat-session/${id ? id : \"default\"}`;\n\nexport const DEFAULT_HISTORY_LENGTH = 50;\nexport const DEFAULT_HISTORY_TTL = 86_400;\n\nexport const DEFAULT_MSG_ID = `msg-${Date.now().toString()}`;\nexport const DEFAULT_SIMILARITY_THRESHOLD = 0.5;\nexport const DEFAULT_TOP_K = 5;\n","import Firecrawl from '@mendable/firecrawl-js';\n\n// Lazily initialize Firecrawl only when an API key is available.\n// This avoids throwing during client-side bundles where process.env is not present.\nlet firecrawlClient: Firecrawl | undefined;\n\nfunction getFirecrawlApiKey(): string | undefined {\n try {\n // In Node/bundler environments, process may exist\n if (typeof process !== 'undefined' && process.env && process.env.FIRECRAWL_API_KEY) {\n return process.env.FIRECRAWL_API_KEY;\n }\n } catch {\n // ignore\n }\n return undefined;\n}\n\nfunction getFirecrawl(): Firecrawl | undefined {\n const key = getFirecrawlApiKey();\n if (!key) return undefined;\n if (!firecrawlClient) {\n firecrawlClient = new Firecrawl({ apiKey: key });\n }\n return firecrawlClient;\n}\n\nexport async function scrapeContent(url: string) {\n const client = getFirecrawl();\n if (!client) {\n throw new Error(\"Firecrawl is not configured. Set FIRECRAWL_API_KEY on the server to enable scraping.\");\n }\n const data = await client.scrape(url, { formats: ['markdown', 'summary'] });\n return data;\n}","import type {\n AddContextPayload,\n ResetOptions,\n SaveOperationResult,\n VectorPayload,\n} from \"../types\";\nimport { DEFAULT_SIMILARITY_THRESHOLD, DEFAULT_TOP_K } from \"../lib/constants\";\nimport type { Index } from \"@upstash/vector\";\nimport { nanoid } from \"nanoid\";\nimport { scrapeContent } from \"../lib/firecrawl\";\n\n// Helper function to chunk text\nfunction chunkText(text: string, chunkSize = 500, overlap = 50): string[] {\n const chunks: string[] = [];\n for (let i = 0; i < text.length; i += chunkSize - overlap) {\n chunks.push(text.slice(i, i + chunkSize));\n }\n return chunks;\n}\n\nexport class VectorDB {\n private index: Index;\n constructor(index: Index) {\n this.index = index;\n }\n\n async reset(options?: ResetOptions) {\n await this.index.reset({ namespace: options?.namespace });\n }\n\n async delete({ ids, namespace }: { ids: string[]; namespace?: string }) {\n await this.index.delete(ids, { namespace });\n }\n\n /**\n * A method that allows you to query the vector database with plain text.\n * It takes care of the text-to-embedding conversion by itself.\n * Additionally, it lets consumers pass various options to tweak the output.\n */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n async retrieve<TMetadata>({\n question,\n similarityThreshold = DEFAULT_SIMILARITY_THRESHOLD,\n topK = DEFAULT_TOP_K,\n namespace,\n contextFilter,\n queryMode,\n }: VectorPayload): Promise<\n { data: string; id: string; metadata: TMetadata }[]\n > {\n const index = this.index;\n const result = await index.query<Record<string, string>>(\n {\n ...(typeof question === \"string\"\n ? { data: question }\n : { vector: question }),\n topK,\n includeData: true,\n includeMetadata: true,\n ...(typeof contextFilter === \"string\" && { filter: contextFilter }),\n queryMode,\n },\n { namespace },\n );\n console.log(\"Vector Retrive: \", result)\n const allValuesUndefined = result.every(\n (embedding) => embedding.data === undefined,\n );\n\n if (allValuesUndefined) {\n console.error(\n \"There is no answer for this question in the provided context.\",\n );\n\n return [\n {\n data: \"There is no answer for this question in the provided context.\",\n id: \"error\",\n metadata: {} as TMetadata,\n },\n ];\n }\n\n const facts = result\n .filter((x) => x.score >= similarityThreshold)\n .map((embedding) => ({\n data: embedding.data ?? \"\",\n id: embedding.id.toString(),\n metadata: embedding.metadata as TMetadata,\n }));\n\n return facts;\n }\n\n /**\n * A method that allows you to add various data types into a vector database.\n * It supports plain text, embeddings, PDF, HTML, Text file and CSV. Additionally, it handles text-splitting for CSV, PDF and Text file.\n */\n async save(input: AddContextPayload): Promise<SaveOperationResult> {\n const { namespace } = input.options ?? {};\n if (input.type === \"text\") {\n try {\n const returnId = input.id ?? nanoid();\n await this.index.upsert(\n {\n data: input.data,\n id: returnId,\n metadata: input.options?.metadata,\n },\n { namespace },\n );\n\n return { success: true, ids: [returnId.toString()] };\n } catch (error) {\n return {\n success: false,\n error: JSON.stringify(error, Object.getOwnPropertyNames(error)),\n };\n }\n } else if (input.type === \"embedding\") {\n try {\n const returnId = input.id ?? nanoid();\n await this.index.upsert(\n {\n vector: input.data,\n data: input.text,\n id: returnId,\n metadata: input.options?.metadata,\n },\n { namespace },\n );\n\n return { success: true, ids: [returnId.toString()] };\n } catch (error) {\n return {\n success: false,\n error: JSON.stringify(error, Object.getOwnPropertyNames(error)),\n };\n }\n } else {\n try {\n // Determine the file source (string path or URL)\n let fileSource: string | undefined = undefined;\n if (\"fileSource\" in input && typeof input.fileSource === \"string\") {\n fileSource = input.fileSource;\n } else if (\"source\" in input && typeof input.source === \"string\") {\n fileSource = input.source;\n }\n if (!fileSource) {\n throw new Error(\"No valid file source provided for extractText\");\n }\n\n // extractText should return a string (the extracted text)\n const res = await scrapeContent(fileSource);\n if (!res?.markdown && !res?.summary) {\n throw new Error(\"Failed to extract data from the provided source\");\n }\n\n // chunk the extracted text\n const transformArgs = \"config\" in input ? input.config : {};\n // If transformArgs has chunkSize/overlap, use them, else default\n const chunkSize =\n (transformArgs && (transformArgs as any).chunkSize) || 500;\n const overlap =\n (transformArgs && (transformArgs as any).overlap) || 100;\n\n // Prefer markdown for chunking; fallbacks for possible shapes\n const markdown =\n (res as any).markdown ??\n (res as any)?.output?.markdown ??\n (res as any)?.output?.txt ??\n \"\";\n const summary =\n (res as any).summary ?? (res as any)?.output?.summary;\n\n const chunks = chunkText(markdown, chunkSize, overlap);\n\n // upsert each chunk\n const ids: string[] = [];\n for (const chunk of chunks) {\n const id = nanoid();\n await this.index.upsert(\n {\n data: chunk,\n id,\n metadata: {\n ...(input.options?.metadata ?? {}),\n ...(summary ? { summary } : {}),\n },\n },\n { namespace },\n );\n ids.push(id);\n }\n\n return { success: true, ids };\n } catch (error) {\n console.error(error);\n return {\n success: false,\n error: JSON.stringify(error, Object.getOwnPropertyNames(error)),\n };\n }\n }\n }\n}\n","import { Index } from \"@upstash/vector\";\nimport { VectorDB } from \"./vector-db\";\nimport type {\n AddContextPayload,\n VectorPayload,\n SaveOperationResult,\n} from \"../types\";\n\nexport type ExtVectorConfig = {\n url: string;\n token: string;\n};\n\nexport class ExtVector {\n private vectorDB: VectorDB;\n private namespace: string;\n\n constructor(config: ExtVectorConfig, namespace: string) {\n const index = new Index({\n url: config.url,\n token: config.token,\n });\n this.vectorDB = new VectorDB(index);\n this.namespace = namespace;\n }\n\n async addContext(input: AddContextPayload): Promise<SaveOperationResult> {\n // Always use the provided namespace\n if (!input.options) input.options = {};\n input.options.namespace = this.namespace;\n return this.vectorDB.save(input);\n }\n\n async removeContext(ids: string[]): Promise<void> {\n await this.vectorDB.delete({ ids, namespace: this.namespace });\n }\n\n async getContext<TMetadata>(\n payload: Omit<VectorPayload, \"namespace\">,\n ): Promise<{ data: string; id: string; metadata: TMetadata }[]> {\n return this.vectorDB.retrieve<TMetadata>({\n ...payload,\n namespace: this.namespace,\n });\n }\n\n async resetContext(): Promise<void> {\n await this.vectorDB.reset({ namespace: this.namespace });\n }\n}\n","\"use client\";\nimport type { BaseVectorContext, GetContextClientParams } from \"../types\";\nimport { ExtVector } from \"./ext-vector\";\n\nexport const getContextClient = (\n params?: GetContextClientParams,\n): BaseVectorContext | undefined => {\n const vectorUrl = params?.vector?.url;\n const vectorToken = params?.vector?.token;\n // Prefer container_id as namespace, fallback to provided vector.namespace\n const namespace = params?.vector?.namespace;\n\n if (vectorUrl && vectorToken && namespace) {\n return new ExtVector({ url: vectorUrl, token: vectorToken }, namespace);\n }\n};\n","import { Redis, type RedisConfigNodejs } from \"@upstash/redis\";\nimport type { Message } from \"ai\";\nimport {\n DEFAULT_CHAT_SESSION_ID,\n DEFAULT_HISTORY_LENGTH,\n DEFAULT_HISTORY_TTL,\n} from \"../lib/constants\";\nimport type { BaseMessageHistory } from \"../types\";\n\nexport type RedisHistoryConfig = {\n config?: RedisConfigNodejs;\n client?: Redis;\n};\n\nexport class InRedisHistory implements BaseMessageHistory {\n public client: Redis;\n\n constructor(config: RedisHistoryConfig) {\n const { config: redisConfig, client } = config;\n\n if (client) {\n this.client = client;\n } else if (redisConfig) {\n this.client = new Redis(redisConfig);\n } else {\n throw new Error(\n \"Redis message stores require either a config object or a pre-configured client.\",\n );\n }\n }\n\n async addMessage(params: {\n message: Message;\n sessionId: string;\n sessionTTL?: number;\n }): Promise<void> {\n const { message, sessionId, sessionTTL } = params;\n let TTL = DEFAULT_HISTORY_TTL;\n if (sessionTTL) {\n TTL = sessionTTL;\n }\n const sessionID = DEFAULT_CHAT_SESSION_ID(sessionId);\n\n await this.client.lpush(sessionID, JSON.stringify(message));\n if (sessionTTL) {\n await this.client.expire(sessionID, TTL);\n }\n }\n\n async deleteMessages({ sessionId }: { sessionId: string }): Promise<void> {\n await this.client.del(sessionId);\n }\n\n async getMessages({\n sessionId,\n amount = DEFAULT_HISTORY_LENGTH,\n startIndex = 0,\n }: {\n sessionId: string;\n amount?: number;\n startIndex?: number;\n }): Promise<Message[]> {\n const sessionID = DEFAULT_CHAT_SESSION_ID(sessionId);\n const endIndex = startIndex + amount - 1;\n const messages = await this.client.lrange<Message>(\n sessionID,\n startIndex,\n endIndex,\n );\n return messages.reverse();\n }\n}\n","\"use client\";\nimport type { BaseMessageHistory } from \"../types\";\nimport { InRedisHistory } from \"./in-redis\";\n\nexport type GetHistoryClientParams = {\n redis?: {\n url: string;\n token: string;\n };\n};\n\nexport const getHistoryClient = (\n params?: GetHistoryClientParams,\n): BaseMessageHistory | undefined => {\n const redisUrl = params?.redis?.url;\n const redisToken = params?.redis?.token;\n\n if (redisUrl && redisToken) {\n return new InRedisHistory({\n config: {\n url: redisUrl,\n token: redisToken,\n },\n });\n }\n};\n","// AI Chat SDK - Main Entry Point\n// This SDK provides AI chat functionality with persistent history and vector context\n\n// Import all components\nimport { Telementry } from \"./telemetry\";\nimport { getContextClient, VectorDB, ExtVector } from \"./context\";\nimport { getHistoryClient, InRedisHistory } from \"./history\";\n\n// Import centralized types and version info\nimport type {\n TelementryOptions,\n GetContextClientParams,\n GetHistoryClientParams,\n ExtVectorConfig,\n RedisHistoryConfig,\n SDKConfig,\n SDKStatus,\n EventName,\n EventProperties,\n VectorContextResult,\n BaseMessageHistory,\n} from \"./types\";\nimport { SDK_VERSION, SDK_NAME } from \"./version\";\n\n// Re-export all components\nexport {\n Telementry,\n getContextClient,\n getHistoryClient,\n VectorDB,\n ExtVector,\n InRedisHistory,\n};\n\n// Re-export constants\nexport {\n DEFAULT_CHAT_SESSION_ID,\n DEFAULT_HISTORY_LENGTH,\n DEFAULT_HISTORY_TTL,\n DEFAULT_MSG_ID,\n DEFAULT_SIMILARITY_THRESHOLD,\n DEFAULT_TOP_K,\n} from \"./lib/constants\";\n\n// Re-export all types\nexport type {\n TelementryOptions,\n GetContextClientParams,\n GetHistoryClientParams,\n ExtVectorConfig,\n RedisHistoryConfig,\n SDKConfig,\n SDKStatus,\n EventName,\n EventProperties,\n VectorContextResult,\n BaseMessageHistory,\n};\n\n// Export version information\nexport { SDK_VERSION, SDK_NAME };\n\n/**\n * AI Chat SDK - Main class for configuring and managing AI chat functionality\n *\n * @example\n * ```typescript\n * // Professional usage - recommended approach\n * const sdk = new AIChatSDK({\n * telemetry: { enabled: true },\n * context: {\n * vector: {\n * url: 'https://your-vector-db.upstash.io',\n * token: 'your-token',\n * namespace: 'your-namespace'\n * }\n * }\n * });\n *\n * // Use the configured clients\n * const contextClient = sdk.getContextClient();\n * const historyClient = sdk.getHistoryClient();\n * ```\n */\nexport class AIChatSDK {\n private telemetry?: Telementry;\n private contextClient?: ReturnType<typeof getContextClient>;\n private historyClient?: ReturnType<typeof getHistoryClient>;\n\n /**\n * Creates a new AIChatSDK instance with the specified configuration\n *\n * @param config - Configuration options for telemetry, context, and history\n *\n * @example\n * ```typescript\n * const sdk = new AIChatSDK({\n * telemetry: { enabled: true },\n * context: { vector: { url: '...', token: '...', namespace: '...' } },\n * history: { redis: { url: '...', token: '...' } }\n * });\n * ```\n */\n constructor(config?: SDKConfig) {\n if (config?.telemetry) {\n this.telemetry = new Telementry(config.telemetry);\n }\n\n if (config?.context) {\n this.contextClient = getContextClient(config.context);\n }\n\n if (config?.history) {\n this.historyClient = getHistoryClient(config.history);\n }\n }\n\n /**\n * Get the configured telemetry instance\n */\n getTelemetry(): Telementry | undefined {\n return this.telemetry;\n }\n\n /**\n * Get the configured context client\n */\n getContextClient() {\n return this.contextClient;\n }\n\n /**\n * Get the configured history client\n */\n getHistoryClient() {\n return this.historyClient;\n }\n\n /**\n * Send a telemetry event if telemetry is enabled\n */\n async trackEvent(\n event: EventName,\n properties: EventProperties,\n ): Promise<void> {\n if (this.telemetry) {\n await this.telemetry.send(event as any, properties as any);\n }\n }\n\n /**\n * Check if the SDK is properly configured\n */\n isConfigured(): boolean {\n return !!(this.contextClient || this.historyClient);\n }\n\n /**\n * Get SDK configuration status\n */\n getConfigurationStatus(): SDKStatus {\n return {\n telemetry: !!this.telemetry,\n context: !!this.contextClient,\n history: !!this.historyClient,\n };\n }\n\n /**\n * Get SDK version information\n */\n getVersionInfo(): { version: string; name: string } {\n return {\n version: SDK_VERSION,\n name: SDK_NAME,\n };\n }\n\n /**\n * Reset all configured clients\n */\n reset(): void {\n this.telemetry = undefined;\n this.contextClient = undefined;\n this.historyClient = undefined;\n }\n\n /**\n * Update SDK configuration\n */\n updateConfig(config: SDKConfig): void {\n this.reset();\n\n if (config.telemetry) {\n this.telemetry = new Telementry(config.telemetry);\n }\n\n if (config.context) {\n this.contextClient = getContextClient(config.context);\n }\n\n if (config.history) {\n this.historyClient = getHistoryClient(config.history);\n }\n }\n}\n\n// Alternative convenience function (for backward compatibility)\nexport function createAIChatSDK(config?: SDKConfig): AIChatSDK {\n return new AIChatSDK(config);\n}\n\n// Utility functions for direct access to components\nexport function createTelemetry(options: TelementryOptions): Telementry {\n return new Telementry(options);\n}\n\nexport function createContextClient(params: GetContextClientParams) {\n return getContextClient(params);\n}\n\nexport function createHistoryClient(params?: GetHistoryClientParams) {\n return getHistoryClient(params);\n}\n\n// Default export for convenience\nexport default AIChatSDK;"]}