@nice-tools/fake-llm 1.3.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/dist/browser.d.mts +349 -0
- package/dist/browser.d.ts +349 -0
- package/dist/browser.js +607 -0
- package/dist/browser.js.map +1 -0
- package/dist/browser.mjs +591 -0
- package/dist/browser.mjs.map +1 -0
- package/dist/index.d.mts +120 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +941 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +899 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapters/base.adapter.ts","../src/adapters/cosmos.adapter.ts","../src/adapters/blob.adapter.ts","../src/adapters/gcs.adapter.ts","../src/adapters/mock-cosmos.adapter.ts","../src/adapters/image.adapter.ts","../src/adapters/http-mock.adapter.ts","../src/engine/nlp-matcher.ts","../src/engine/keyword-resolver.ts","../src/engine/story-resolver.ts","../src/engine/query-builder.ts","../src/engine/response-builder.ts","../src/config/fetch-loader.ts","../src/mock-llm-engine.ts","../src/config/loader.ts","../src/mock-llm.ts","../src/browser-mock-llm.ts"],"names":["CosmosClient","BlobServiceClient","Storage","path","fs","fs2","path2","nlp","answer","path3","fs3"],"mappings":"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","file":"index.js","sourcesContent":["import { QueryParams } from '../config/types';\n\n/**\n * Base adapter interface for data sources\n */\nexport interface IDataAdapter {\n query(params: QueryParams): Promise<any[]>;\n getById(id: string): Promise<any>;\n}\n\nexport { QueryParams };\n\nexport abstract class BaseAdapter implements IDataAdapter {\n abstract query(params: QueryParams): Promise<any[]>;\n abstract getById(id: string): Promise<any>;\n\n protected buildWhereClause(filters: Record<string, any>): string {\n if (!filters || Object.keys(filters).length === 0) {\n return '';\n }\n\n const conditions = Object.entries(filters).map(([key, value]) => {\n if (typeof value === 'string') {\n return `c.${key} = '${value}'`;\n }\n return `c.${key} = ${value}`;\n });\n\n return 'WHERE ' + conditions.join(' AND ');\n }\n}\n","import { CosmosClient, Database, Container } from '@azure/cosmos';\nimport { BaseAdapter, QueryParams } from './base.adapter';\n\nexport interface CosmosAdapterOptions {\n endpoint: string;\n key: string;\n databaseId: string;\n}\n\nexport class CosmosAdapter extends BaseAdapter {\n private client: CosmosClient;\n private database: Database;\n\n constructor(private options: CosmosAdapterOptions) {\n super();\n this.client = new CosmosClient({\n endpoint: options.endpoint,\n key: options.key\n });\n this.database = this.client.database(options.databaseId);\n }\n\n async query(params: QueryParams): Promise<any[]> {\n const container = this.database.container(params.source);\n \n let sql = `SELECT * FROM c`;\n const whereClause = this.buildWhereClause(params.filters || {});\n if (whereClause) {\n sql += ` ${whereClause}`;\n }\n\n if (params.orderBy) {\n sql += ` ORDER BY c.${params.orderBy}`;\n }\n\n if (params.limit) {\n sql += ` OFFSET 0 LIMIT ${params.limit}`;\n }\n\n const { resources } = await container.items.query(sql).fetchAll();\n return resources;\n }\n\n async getById(id: string): Promise<any> {\n // Note: Requires container name - simplified for demo\n throw new Error('getById requires container specification');\n }\n}\n","import { BlobServiceClient, BlobDownloadResponseParsed } from '@azure/storage-blob';\nimport { BaseAdapter, QueryParams } from './base.adapter';\n\nexport interface BlobAdapterOptions {\n connectionString?: string;\n sasToken?: string;\n accountName?: string;\n accountKey?: string;\n}\n\nexport class BlobAdapter extends BaseAdapter {\n private blobServiceClient: BlobServiceClient;\n\n constructor(private options: BlobAdapterOptions) {\n super();\n \n if (options.connectionString) {\n this.blobServiceClient = BlobServiceClient.fromConnectionString(options.connectionString);\n } else if (options.sasToken && options.accountName) {\n const blobSasUrl = `https://${options.accountName}.blob.core.windows.net${options.sasToken}`;\n this.blobServiceClient = new BlobServiceClient(blobSasUrl);\n } else {\n throw new Error('BlobAdapter requires connectionString or sasToken + accountName');\n }\n }\n\n async query(params: QueryParams): Promise<any[]> {\n const containerClient = this.blobServiceClient.getContainerClient(params.source);\n const results: any[] = [];\n\n for await (const blob of containerClient.listBlobsFlat()) {\n if (blob.name.endsWith('.json')) {\n const blobClient = containerClient.getBlobClient(blob.name);\n const downloadResponse = await blobClient.download();\n const content = await this.readDownloadResponse(downloadResponse);\n const data = JSON.parse(content);\n \n // Apply filters\n if (this.matchesFilters(data, params.filters || {})) {\n results.push(data);\n }\n }\n }\n\n return results;\n }\n\n async getById(id: string): Promise<any> {\n throw new Error('getById not implemented for BlobAdapter');\n }\n\n private matchesFilters(data: any, filters: Record<string, any>): boolean {\n return Object.entries(filters).every(([key, value]) => data[key] === value);\n }\n\n /**\n * Reads blob download response content as a UTF-8 string.\n *\n * The Azure Blob SDK exposes different properties depending on the runtime:\n * - Browser: `blobBody` (`Promise<Blob>`) — uses `Blob.text()`.\n * - Node.js: `readableStreamBody` (`NodeJS.ReadableStream`) — uses stream events.\n */\n private async readDownloadResponse(response: BlobDownloadResponseParsed): Promise<string> {\n if (response.blobBody) {\n // Browser environment\n const blob = await response.blobBody;\n return blob.text();\n }\n // Node.js environment\n const stream = response.readableStreamBody!;\n const chunks: Buffer[] = [];\n return new Promise((resolve, reject) => {\n stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));\n stream.on('error', reject);\n stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n });\n }\n}\n","import { Storage } from '@google-cloud/storage';\nimport { BaseAdapter, QueryParams } from './base.adapter';\n\nexport interface GCSAdapterOptions {\n projectId: string;\n keyFilePath: string;\n}\n\n/**\n * Google Cloud Storage adapter for fetching JSON data from GCS buckets.\n *\n * @server-only The `@google-cloud/storage` SDK is Node.js-only and has no\n * browser build. Do not import from `@nice-tools/mock-llm/browser`.\n */\nexport class GCSAdapter extends BaseAdapter {\n private storage: Storage;\n\n constructor(private options: GCSAdapterOptions) {\n super();\n this.storage = new Storage({\n projectId: options.projectId,\n keyFilename: options.keyFilePath\n });\n }\n\n async query(params: QueryParams): Promise<any[]> {\n const bucket = this.storage.bucket(params.source);\n const [files] = await bucket.getFiles();\n const results: any[] = [];\n\n for (const file of files) {\n if (file.name.endsWith('.json')) {\n const [content] = await file.download();\n const data = JSON.parse(content.toString('utf8'));\n \n if (this.matchesFilters(data, params.filters || {})) {\n results.push(data);\n }\n }\n }\n\n return results;\n }\n\n async getById(id: string): Promise<any> {\n throw new Error('getById not implemented for GCSAdapter');\n }\n\n private matchesFilters(data: any, filters: Record<string, any>): boolean {\n return Object.entries(filters).every(([key, value]) => data[key] === value);\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { BaseAdapter, QueryParams } from './base.adapter';\n\nexport interface MockCosmosAdapterOptions {\n basePath: string; // e.g., './mock-db'\n}\n\n/**\n * Mock Cosmos DB adapter that reads from folder structure:\n * basePath/{databaseId}/{containerId}/{id}.json\n */\nexport class MockCosmosAdapter extends BaseAdapter {\n constructor(private options: MockCosmosAdapterOptions) {\n super();\n }\n\n async query(params: QueryParams): Promise<any[]> {\n // params.source should be \"databaseId/containerId\" or just \"containerId\"\n const parts = params.source.split('/');\n const containerPath = path.join(this.options.basePath, ...parts);\n\n let items: any[] = [];\n\n if (fs.existsSync(containerPath) && fs.statSync(containerPath).isDirectory()) {\n // Directory of individual JSON files (mock-cosmos style)\n const files = fs.readdirSync(containerPath).filter(f => f.endsWith('.json'));\n items = files.map(file => {\n const content = fs.readFileSync(path.join(containerPath, file), 'utf8');\n return JSON.parse(content);\n });\n } else {\n // Try a single JSON file containing an array (e.g. learnings/habits.json)\n const filePath = containerPath + '.json';\n if (fs.existsSync(filePath)) {\n const content = fs.readFileSync(filePath, 'utf8');\n const parsed = JSON.parse(content);\n items = Array.isArray(parsed) ? parsed : [parsed];\n } else {\n console.warn(`MockCosmosAdapter: Path not found: ${containerPath}`);\n return [];\n }\n }\n\n // Apply filters\n if (params.filters && Object.keys(params.filters).length > 0) {\n items = items.filter(item => this.matchesFilters(item, params.filters!));\n }\n\n // Apply limit\n if (params.limit) {\n items = items.slice(0, params.limit);\n }\n\n return items;\n }\n\n async getById(id: string): Promise<any> {\n throw new Error('getById requires source specification in MockCosmosAdapter');\n }\n\n private matchesFilters(item: any, filters: Record<string, any>): boolean {\n return Object.entries(filters).every(([key, value]) => {\n // Support nested property access (e.g., \"details.status\")\n const itemValue = this.getNestedValue(item, key);\n return itemValue === value;\n });\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface ImageAnalysisResult {\n format: string;\n size: number;\n base64?: string;\n error?: string;\n}\n\n/**\n * Simple image adapter for reading and encoding local images as base64.\n *\n * @server-only This adapter uses Node.js `fs` and `path` APIs and cannot run\n * in a browser environment. Do not import from `@nice-tools/mock-llm/browser`.\n */\nexport class ImageAdapter {\n async readImage(imagePath: string): Promise<ImageAnalysisResult> {\n try {\n if (!fs.existsSync(imagePath)) {\n return {\n format: 'unknown',\n size: 0,\n error: 'File not found'\n };\n }\n\n const buffer = fs.readFileSync(imagePath);\n const ext = path.extname(imagePath).toLowerCase();\n \n return {\n format: ext.substring(1),\n size: buffer.length,\n base64: buffer.toString('base64')\n };\n } catch (error: any) {\n return {\n format: 'unknown',\n size: 0,\n error: error.message\n };\n }\n }\n\n async analyzeImage(imagePath: string): Promise<string> {\n const result = await this.readImage(imagePath);\n \n if (result.error) {\n return `Cannot analyze image: ${result.error}`;\n }\n\n return `Image format: ${result.format}, Size: ${Math.round(result.size / 1024)}KB`;\n }\n}\n","import { BaseAdapter, QueryParams } from './base.adapter';\n\nexport interface HttpMockAdapterOptions {\n /**\n * Base URL for all data-source JSON files, e.g. `'https://example.com/data'`\n * or `'/data'` for a relative path on the same origin.\n *\n * A query for `source: 'knowledge/science'` fetches\n * `{baseUrl}/knowledge/science.json`.\n */\n baseUrl: string;\n}\n\n/**\n * Isomorphic data adapter that retrieves pre-aggregated JSON from a static\n * HTTP endpoint via `fetch()`.\n *\n * Works in both browser and Node.js (≥ 18) environments with no file-system\n * dependencies. Intended for use with `BrowserMockLLM` and static hosting\n * (e.g. GitHub Pages, CDN, or any HTTP server that can serve JSON files).\n *\n * Filtering and limiting are applied client-side after fetching the full\n * collection, matching the behaviour of `MockCosmosAdapter`.\n */\nexport class HttpMockAdapter extends BaseAdapter {\n constructor(private options: HttpMockAdapterOptions) {\n super();\n }\n\n async query(params: QueryParams): Promise<any[]> {\n // Validate source to prevent path traversal and protocol injection\n if (\n params.source.includes('..') ||\n params.source.startsWith('/') ||\n params.source.includes('://')\n ) {\n throw new Error(`HttpMockAdapter: Invalid source path '${params.source}'`);\n }\n\n const base = this.options.baseUrl.replace(/\\/$/, '');\n const url = `${base}/${params.source}.json`;\n\n const response = await fetch(url);\n if (!response.ok) {\n if (response.status === 404) return [];\n throw new Error(`HttpMockAdapter: Failed to fetch ${url} (${response.status})`);\n }\n\n const data = await response.json() as unknown;\n let items: any[] = Array.isArray(data) ? (data as any[]) : [data];\n\n if (params.filters && Object.keys(params.filters).length > 0) {\n items = items.filter(item => this.matchesFilters(item, params.filters!));\n }\n\n if (params.limit) {\n items = items.slice(0, params.limit);\n }\n\n return items;\n }\n\n async getById(_id: string): Promise<any> {\n throw new Error('HttpMockAdapter.getById is not supported — use query() with a filters object');\n }\n\n private matchesFilters(item: any, filters: Record<string, any>): boolean {\n return Object.entries(filters).every(([key, value]) => {\n const itemValue = this.getNestedValue(item, key);\n return itemValue === value;\n });\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n}\n","import nlp from 'compromise';\nimport { Intent } from '../config/types';\n\n// Stop words to remove from extracted terms\nconst STOP_WORDS = new Set([\n 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',\n 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'shall',\n 'should', 'may', 'might', 'must', 'can', 'could', 'let', 'make',\n 'why', 'what', 'how', 'when', 'where', 'who', 'which', 'that',\n 'this', 'these', 'those', 'it', 'its', 'my', 'your', 'his', 'her',\n 'our', 'their', 'me', 'him', 'us', 'them', 'and', 'or', 'but', 'if',\n 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by', 'from', 'about',\n 'into', 'through', 'during', 'before', 'after', 'above', 'below',\n 'between', 'out', 'off', 'over', 'under', 'again', 'further',\n 'just', 'also', 'not', 'no', 'nor', 'so', 'yet', 'both', 'either',\n]);\n\nexport class NLPMatcher {\n parseQuery(query: string): Intent {\n // Strip punctuation for cleaner NLP processing\n const cleanQuery = query.replace(/[?!.,;:'\"]/g, ' ').trim();\n const doc = nlp(cleanQuery);\n const action = this.extractAction(query);\n const keywords = this.extractKeywords(doc, cleanQuery);\n const filters = this.extractFilters(query);\n const confidence = keywords.length > 0 ? 0.8 : 0.3;\n\n return { action, keywords, filters, confidence };\n }\n\n private extractAction(query: string): Intent['action'] {\n const q = query.toLowerCase();\n if (q.includes('compare') || q.includes('difference')) return 'compare';\n if (q.includes('diff') || q.includes('what changed')) return 'diff';\n if (q.includes('find') || q.includes('search') || q.includes('which')) return 'find';\n if (q.includes('explain') || q.includes('what is') || q.includes('tell me about') || q.startsWith('why')) return 'explain';\n return 'list';\n }\n\n private extractKeywords(doc: any, cleanQuery: string): string[] {\n const nouns = doc.nouns().out('array') as string[];\n const adjectives = doc.adjectives().out('array') as string[];\n\n // Also split noun phrases into individual words\n const allTerms: string[] = [];\n for (const term of [...nouns, ...adjectives]) {\n // Split multi-word noun phrases into individual words\n const parts = term.toLowerCase().split(/\\s+/);\n allTerms.push(...parts);\n }\n\n // Also add individual words from the clean query as fallback\n const queryWords = cleanQuery.toLowerCase().split(/\\s+/);\n allTerms.push(...queryWords);\n\n return [...new Set(allTerms)]\n .map(w => w.toLowerCase().replace(/[^a-z0-9-]/g, ''))\n .filter(w => w.length > 2 && !STOP_WORDS.has(w));\n }\n\n private extractFilters(query: string): Record<string, any> {\n const filters: Record<string, any> = {};\n // Only extract filters from explicit \"field is/= value\" patterns (not question words like \"why\")\n const questionWords = new Set(['why', 'what', 'how', 'when', 'where', 'who', 'which']);\n const pattern = /(?:where|with)\\s+(\\w+)\\s+(?:is|=|equals?)\\s+['\"]?([^'\"\\s]+)['\"]?/gi;\n let match;\n while ((match = pattern.exec(query)) !== null) {\n const [, key, value] = match;\n if (key && value && !questionWords.has(key.toLowerCase())) {\n filters[key] = value;\n }\n }\n return filters;\n }\n}\n","import { KeywordEntry } from '../config/types';\n\nexport class KeywordResolver {\n constructor(private keywords: KeywordEntry[]) {}\n\n resolve(term: string): KeywordEntry | undefined {\n const lowerTerm = term.toLowerCase();\n\n // Try exact keyword match first\n let match = this.keywords.find(kw => kw.keyword.toLowerCase() === lowerTerm);\n\n // Try exact alias match\n if (!match) {\n match = this.keywords.find(kw =>\n kw.aliases.some(alias => alias.toLowerCase() === lowerTerm)\n );\n }\n\n // Try partial: keyword is a substring of the term (e.g. term \"blue sky\" contains keyword \"sky\")\n if (!match) {\n match = this.keywords.find(kw =>\n kw.keyword.length > 2 && lowerTerm.includes(kw.keyword.toLowerCase())\n );\n }\n\n return match;\n }\n\n /**\n * Resolves a list of NLP-extracted terms AND also checks the full original query\n * against all keyword aliases (to handle multi-word alias phrases).\n */\n resolveAll(terms: string[], fullQuery?: string): KeywordEntry[] {\n const resolved = new Map<string, KeywordEntry>();\n\n // Resolve individual NLP terms\n for (const term of terms) {\n const kw = this.resolve(term);\n if (kw) resolved.set(kw.keyword, kw);\n }\n\n // Also check the full query (lowercased, no punctuation) against all aliases\n if (fullQuery) {\n const lowerQuery = fullQuery.toLowerCase().replace(/[?!.,;:'\"]/g, ' ');\n for (const kw of this.keywords) {\n if (!resolved.has(kw.keyword)) {\n const aliasMatch = kw.aliases.some(alias => {\n const lowerAlias = alias.toLowerCase();\n return lowerAlias.length > 3 && lowerQuery.includes(lowerAlias);\n });\n if (aliasMatch) resolved.set(kw.keyword, kw);\n }\n }\n }\n\n return Array.from(resolved.values());\n }\n\n getRelatedKeywords(keyword: KeywordEntry): KeywordEntry[] {\n return this.keywords.filter(kw =>\n kw.category === keyword.category && kw.keyword !== keyword.keyword\n );\n }\n}\n","import { Story, Intent, KeywordEntry } from '../config/types';\n\nexport interface StoryMatch {\n story: Story;\n score: number;\n matchedKeywords: string[];\n}\n\nexport interface StoryScore {\n storyId: string;\n score: number;\n matchedKeywords: string[];\n storyKeywords: string[];\n}\n\nexport const STORY_THRESHOLD = 0.1;\n\nexport class StoryResolver {\n constructor(private stories: Story[]) {}\n\n scoreAll(intent: Intent, resolvedKeywords: KeywordEntry[]): StoryScore[] {\n return this.stories\n .map(story => {\n const score = this.scoreStory(story, intent, resolvedKeywords);\n const matchedKeywords = resolvedKeywords\n .filter(kw => story.keywords.includes(kw.keyword))\n .map(kw => kw.keyword);\n const storyId = (story as any).story_id || (story as any).id || '';\n return { storyId, score, matchedKeywords, storyKeywords: story.keywords };\n })\n .sort((a, b) => b.score - a.score);\n }\n\n findBestStory(intent: Intent, resolvedKeywords: KeywordEntry[]): StoryMatch | undefined {\n const matches = this.stories.map(story => {\n const score = this.scoreStory(story, intent, resolvedKeywords);\n const matchedKeywords = resolvedKeywords\n .filter(kw => story.keywords.includes(kw.keyword))\n .map(kw => kw.keyword);\n return { story, score, matchedKeywords };\n });\n\n matches.sort((a, b) => b.score - a.score);\n const best = matches[0];\n return best && best.score > STORY_THRESHOLD ? best : undefined;\n }\n\n private scoreStory(story: Story, intent: Intent, resolvedKeywords: KeywordEntry[]): number {\n let score = 0;\n const keywordNames = resolvedKeywords.map(kw => kw.keyword);\n const overlap = story.keywords.filter(kw => keywordNames.includes(kw)).length;\n const keywordScore = overlap / Math.max(story.keywords.length, keywordNames.length, 1);\n score += keywordScore * 0.7;\n\n if (intent.action === 'compare' && story.resolution_steps.some(s => s.action === 'compare')) score += 0.2;\n if (intent.action === 'diff' && story.resolution_steps.some(s => s.action === 'diff')) score += 0.2;\n if (overlap === story.keywords.length) score += 0.1;\n\n return Math.min(score, 1.0);\n }\n}\n","import { ResolutionStep, Intent } from '../config/types';\nimport { QueryParams } from '../adapters/base.adapter';\n\nexport class QueryBuilder {\n buildQuery(step: ResolutionStep, intent: Intent): QueryParams {\n return {\n source: step.from_source || '',\n filters: { ...intent.filters }\n };\n }\n\n buildQueryPreview(step: ResolutionStep, intent: Intent, resolvedKeywords: string[] = []): {\n generatedQuery: string;\n searchPattern: string;\n } {\n const filters = intent.filters || {};\n const where = Object.entries(filters).map(([key, value]) =>\n typeof value === 'string' ? `c.${key} = '${value}'` : `c.${key} = ${value}`\n ).join(' AND ');\n const generatedQuery = where\n ? `SELECT * FROM c WHERE ${where}`\n : `SELECT * FROM c /* ${step.from_source || 'source'} */`;\n const terms = [...new Set([...(step.keyword ? [step.keyword] : []), ...resolvedKeywords])];\n const searchPattern = terms.length > 0\n ? `MATCH ${terms.map(term => `\"${term}\"`).join(' OR ')}`\n : `MATCH ${step.from_source || 'source'}*`;\n return { generatedQuery, searchPattern };\n }\n\n buildSQLWhere(filters: Record<string, any>): string {\n if (!filters || Object.keys(filters).length === 0) return '';\n const conditions = Object.entries(filters).map(([key, value]) =>\n typeof value === 'string' ? `c.${key} = '${value}'` : `c.${key} = ${value}`\n );\n return 'WHERE ' + conditions.join(' AND ');\n }\n}\n","import { Answer, Intent, Story } from '../config/types';\n\nexport class ResponseBuilder {\n buildAnswer(\n intent: Intent,\n story: Story | undefined,\n results: any[],\n executionTime: number,\n source: 'mock-llm' | 'fallback-llm'\n ): Answer {\n return {\n intent,\n story,\n results,\n summary: this.buildSummary(intent, results),\n metadata: {\n execution_time_ms: executionTime,\n source\n }\n };\n }\n\n private buildSummary(intent: Intent, results: any[]): string {\n if (results.length === 0) return \"I couldn't find any results for your question.\";\n\n // If a single result has a direct answer field, return it\n if (results.length === 1 && results[0]?.answer) {\n return results[0].answer;\n }\n\n // For explain intent, prefer the answer field from the best match\n if (intent.action === 'explain') {\n const withAnswer = results.find(r => r.answer);\n if (withAnswer) return withAnswer.answer;\n return Object.entries(results[0])\n .filter(([key]) => !key.startsWith('_') && key !== 'id')\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ');\n }\n\n if (intent.action === 'compare') return `Comparing ${results.length} items.`;\n\n // For multiple results, list all answers if available\n const answers = results.filter(r => r.answer).map(r => r.answer);\n if (answers.length > 0) return answers.join(' | ');\n\n return `Found ${results.length} result(s).`;\n }\n}\n","import { KeywordEntry, Story } from './types';\n\nexport interface FetchConfigLoaderOptions {\n /** URL to a pre-aggregated JSON array of all keyword entries, e.g. '/data/keywords.json' */\n keywordsUrl: string;\n /** URL to a pre-aggregated JSON array of all story definitions, e.g. '/data/stories.json' */\n storiesUrl: string;\n}\n\n/**\n * Isomorphic config loader that fetches keyword and story definitions from\n * pre-aggregated JSON files via `fetch()`.\n *\n * Works in both browser and Node.js (≥ 18) environments with no file-system\n * dependencies. Intended for use with `BrowserMockLLM` and static hosting\n * (e.g. GitHub Pages, CDN, or any HTTP server that can serve JSON files).\n *\n * The expected JSON format for each URL is either:\n * - An array: `[{ keyword: \"sky\", ... }, ...]`\n * - A single object: `{ keyword: \"sky\", ... }` (wrapped into a one-element array)\n */\nexport class FetchConfigLoader {\n constructor(private options: FetchConfigLoaderOptions) {}\n\n async loadKeywords(): Promise<KeywordEntry[]> {\n const response = await fetch(this.options.keywordsUrl);\n if (!response.ok) {\n throw new Error(\n `FetchConfigLoader: Failed to fetch keywords from ${this.options.keywordsUrl} (${response.status})`\n );\n }\n const data = await response.json() as unknown;\n return Array.isArray(data) ? (data as KeywordEntry[]) : [data as KeywordEntry];\n }\n\n async loadStories(): Promise<Story[]> {\n const response = await fetch(this.options.storiesUrl);\n if (!response.ok) {\n throw new Error(\n `FetchConfigLoader: Failed to fetch stories from ${this.options.storiesUrl} (${response.status})`\n );\n }\n const data = await response.json() as unknown;\n return Array.isArray(data) ? (data as Story[]) : [data as Story];\n }\n}\n","import { Answer, AnswerDebug, AnswerDebugStep, Intent, KeywordEntry, Story } from './config/types';\nimport { NLPMatcher } from './engine/nlp-matcher';\nimport { KeywordResolver } from './engine/keyword-resolver';\nimport { StoryResolver, STORY_THRESHOLD } from './engine/story-resolver';\nimport { QueryBuilder } from './engine/query-builder';\nimport { ResponseBuilder } from './engine/response-builder';\nimport { BaseAdapter } from './adapters/base.adapter';\n\nexport interface QueryOptions {\n debug?: boolean;\n}\n\nexport interface FallbackLLMConfig {\n enabled: boolean;\n endpoint: string;\n apiKey: string;\n model: string;\n}\n\n/**\n * Isomorphic query engine — works in both Node.js and browser environments.\n *\n * Constructed with already-loaded keywords, stories, a data adapter, and an\n * optional fallback-LLM config. Both `MockLLM` (server) and `BrowserMockLLM`\n * (browser) delegate all query logic to this class.\n */\nexport class MockLLMEngine {\n private nlpMatcher: NLPMatcher;\n private keywordResolver: KeywordResolver;\n private storyResolver: StoryResolver;\n private queryBuilder: QueryBuilder;\n private responseBuilder: ResponseBuilder;\n\n constructor(\n private keywords: KeywordEntry[],\n private stories: Story[],\n private adapter: BaseAdapter,\n private fallbackLLM?: FallbackLLMConfig\n ) {\n this.nlpMatcher = new NLPMatcher();\n this.queryBuilder = new QueryBuilder();\n this.responseBuilder = new ResponseBuilder();\n this.keywordResolver = new KeywordResolver(keywords);\n this.storyResolver = new StoryResolver(stories);\n }\n\n // ─── Introspection API ───────────────────────────────────────────────────────\n\n getKeywords(): KeywordEntry[] {\n return this.keywords;\n }\n\n getStories(): Story[] {\n return this.stories;\n }\n\n listDataSources(): string[] {\n const sources = new Set<string>();\n for (const kw of this.keywords) {\n if (kw.data_source) sources.add(kw.data_source);\n }\n for (const story of this.stories) {\n if (story.contract?.sources) {\n for (const source of story.contract.sources) {\n if (source) sources.add(source);\n }\n }\n for (const step of story.resolution_steps) {\n if (step.from_source) sources.add(step.from_source);\n }\n }\n return Array.from(sources);\n }\n\n async getDataSourceSnapshot(source: string, limit = 50): Promise<any[]> {\n return this.adapter.query({ source, limit });\n }\n\n // ─── Query ───────────────────────────────────────────────────────────────────\n\n async query(userQuery: string, opts: QueryOptions = { debug: true }): Promise<Answer> {\n const includeDebug = opts.debug !== false;\n const startTime = Date.now();\n const intent = this.nlpMatcher.parseQuery(userQuery);\n const nlpTerms = intent.keywords;\n const resolvedKeywords = this.keywordResolver.resolveAll(nlpTerms, userQuery);\n const unresolvedTerms = nlpTerms.filter(\n term => !resolvedKeywords.some(kw =>\n kw.keyword.toLowerCase() === term.toLowerCase() ||\n kw.aliases.some(a => a.toLowerCase() === term.toLowerCase())\n )\n );\n const storyCandidates = this.storyResolver.scoreAll(intent, resolvedKeywords);\n const storyMatch = storyCandidates.find(c => c.score > STORY_THRESHOLD);\n const matchedStory = storyMatch\n ? this.stories.find(s => ((s as any).story_id || (s as any).id) === storyMatch.storyId)\n : undefined;\n\n const debugSteps: AnswerDebugStep[] = [];\n\n if (!matchedStory && this.fallbackLLM?.enabled) {\n const debugInfo: AnswerDebug | undefined = includeDebug ? {\n rawQuery: userQuery,\n intent,\n resolvedKeywords,\n unresolvedTerms,\n storyCandidates,\n selectedStory: undefined,\n threshold: STORY_THRESHOLD,\n decision: 'no-story-fallback-llm',\n steps: [],\n totals: { results: 0, durationMs: Date.now() - startTime }\n } : undefined;\n const ans = await this.queryFallbackLLM(userQuery, intent, startTime);\n if (includeDebug && debugInfo) {\n debugInfo.totals.durationMs = Date.now() - startTime;\n debugInfo.decision = ans.metadata.source === 'fallback-llm' && ans.results.length > 0\n ? 'no-story-fallback-llm'\n : 'fallback-llm-error';\n ans.debug = debugInfo;\n }\n return ans;\n }\n\n if (!matchedStory) {\n const answer = this.responseBuilder.buildAnswer(intent, undefined, [], Date.now() - startTime, 'mock-llm');\n if (includeDebug) {\n answer.debug = {\n rawQuery: userQuery,\n intent,\n resolvedKeywords,\n unresolvedTerms,\n storyCandidates,\n selectedStory: undefined,\n threshold: STORY_THRESHOLD,\n decision: 'no-story-no-results',\n steps: [],\n totals: { results: 0, durationMs: Date.now() - startTime }\n };\n }\n return answer;\n }\n\n let results: any[] = [];\n let stepIndex = 0;\n for (const step of matchedStory.resolution_steps) {\n if (step.action === 'fetch') {\n const queryParams = this.queryBuilder.buildQuery(step, intent);\n const builtFilter = this.queryBuilder.buildSQLWhere(queryParams.filters || {});\n const preview = this.queryBuilder.buildQueryPreview(step, intent, resolvedKeywords.map(kw => kw.keyword));\n const data = await this.adapter.query(queryParams);\n if (includeDebug) {\n debugSteps.push({\n step: step.step ?? ++stepIndex,\n action: step.action,\n source: queryParams.source,\n queryParams,\n builtFilter: builtFilter || `GET ${queryParams.source}/*`,\n generatedQuery: preview.generatedQuery,\n searchPattern: preview.searchPattern,\n rowsReturned: data.length,\n sampleRows: data.slice(0, 3)\n });\n }\n results = [...results, ...data];\n }\n }\n\n const answer = this.responseBuilder.buildAnswer(intent, matchedStory, results, Date.now() - startTime, 'mock-llm');\n if (includeDebug) {\n answer.debug = {\n rawQuery: userQuery,\n intent,\n resolvedKeywords,\n unresolvedTerms,\n storyCandidates,\n selectedStory: { storyId: storyMatch!.storyId, score: storyMatch!.score },\n threshold: STORY_THRESHOLD,\n decision: 'matched-story',\n steps: debugSteps,\n totals: { results: results.length, durationMs: Date.now() - startTime }\n };\n }\n return answer;\n }\n\n private async queryFallbackLLM(userQuery: string, intent: Intent, startTime: number): Promise<Answer> {\n const llmConfig = this.fallbackLLM!;\n try {\n const response = await fetch(llmConfig.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${llmConfig.apiKey}`\n },\n body: JSON.stringify({\n model: llmConfig.model,\n messages: [{ role: 'user', content: userQuery }]\n })\n });\n const data = await response.json() as any;\n const llmAnswer = data.choices?.[0]?.message?.content || 'No response from LLM';\n return {\n intent, story: undefined,\n results: [{ answer: llmAnswer }],\n summary: llmAnswer,\n metadata: { execution_time_ms: Date.now() - startTime, source: 'fallback-llm' }\n };\n } catch (error: any) {\n return {\n intent, story: undefined, results: [],\n summary: `Fallback LLM error: ${error.message}`,\n metadata: { execution_time_ms: Date.now() - startTime, source: 'fallback-llm' }\n };\n }\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { ConfigSource, KeywordEntry, Story } from './types';\nimport { BlobServiceClient } from '@azure/storage-blob';\nimport { CosmosClient } from '@azure/cosmos';\nimport { Storage } from '@google-cloud/storage';\n\nexport class ConfigLoader {\n constructor(private source: ConfigSource, private connections: any) {}\n\n async loadKeywords(): Promise<KeywordEntry[]> {\n if (this.source.type === 'local') {\n return this.loadLocalKeywords();\n }\n // Add blob, cosmos, gcs loaders as needed\n throw new Error(`Unsupported config source: ${this.source.type}`);\n }\n\n async loadStories(): Promise<Story[]> {\n if (this.source.type === 'local') {\n return this.loadLocalStories();\n }\n throw new Error(`Unsupported config source: ${this.source.type}`);\n }\n\n private loadLocalKeywords(): KeywordEntry[] {\n const keywordsPath = path.join(this.source.location.path!, 'keywords');\n const files = fs.readdirSync(keywordsPath).filter(f => f.endsWith('.json'));\n const results: KeywordEntry[] = [];\n for (const file of files) {\n const content = fs.readFileSync(path.join(keywordsPath, file), 'utf8');\n const parsed = JSON.parse(content);\n if (Array.isArray(parsed)) {\n results.push(...parsed);\n } else {\n results.push(parsed);\n }\n }\n return results;\n }\n\n private loadLocalStories(): Story[] {\n const storiesPath = path.join(this.source.location.path!, 'stories');\n const files = fs.readdirSync(storiesPath).filter(f => f.endsWith('.json'));\n const results: Story[] = [];\n for (const file of files) {\n const content = fs.readFileSync(path.join(storiesPath, file), 'utf8');\n const parsed = JSON.parse(content);\n if (Array.isArray(parsed)) {\n results.push(...parsed);\n } else {\n results.push(parsed);\n }\n }\n return results;\n }\n}\n","import { AdapterConnections, ConfigSource, Answer, KeywordEntry, Story } from './config/types';\nimport { ConfigLoader } from './config/loader';\nimport { MockCosmosAdapter } from './adapters/mock-cosmos.adapter';\nimport { CosmosAdapter } from './adapters/cosmos.adapter';\nimport { BaseAdapter } from './adapters/base.adapter';\nimport { MockLLMEngine, QueryOptions, FallbackLLMConfig } from './mock-llm-engine';\n\nexport { QueryOptions } from './mock-llm-engine';\n\nexport interface MockLLMOptions {\n configSource: ConfigSource;\n connections: AdapterConnections;\n}\n\n/**\n * Server-side (Node.js) orchestrator for the mock-LLM engine.\n *\n * Loads configuration from the local file system via `ConfigLoader` and reads\n * data via `MockCosmosAdapter` or `CosmosAdapter`. All query logic is\n * delegated to the isomorphic `MockLLMEngine`.\n *\n * For browser / edge environments use `BrowserMockLLM` from\n * `@nice-tools/mock-llm/browser` instead.\n */\nexport class MockLLM {\n private configLoader: ConfigLoader;\n private engine!: MockLLMEngine;\n\n constructor(private options: MockLLMOptions) {\n this.configLoader = new ConfigLoader(options.configSource, options.connections);\n }\n\n async initialize(): Promise<void> {\n const [keywords, stories] = await Promise.all([\n this.configLoader.loadKeywords(),\n this.configLoader.loadStories(),\n ]);\n\n let adapter: BaseAdapter;\n if (this.options.connections.mockCosmos) {\n adapter = new MockCosmosAdapter(this.options.connections.mockCosmos);\n } else if (this.options.connections.cosmos) {\n adapter = new CosmosAdapter({\n endpoint: this.options.connections.cosmos.endpoint,\n key: this.options.connections.cosmos.key,\n databaseId: 'default'\n });\n } else {\n throw new Error('No data adapter configured');\n }\n\n const fallbackLLM = this.options.connections.fallbackLLM?.enabled\n ? (this.options.connections.fallbackLLM as FallbackLLMConfig)\n : undefined;\n\n this.engine = new MockLLMEngine(keywords, stories, adapter, fallbackLLM);\n }\n\n // ─── Introspection API ───────────────────────────────────────────────────────\n\n getKeywords(): KeywordEntry[] { return this.engine.getKeywords(); }\n getStories(): Story[] { return this.engine.getStories(); }\n listDataSources(): string[] { return this.engine.listDataSources(); }\n\n async getDataSourceSnapshot(source: string, limit = 50): Promise<any[]> {\n return this.engine.getDataSourceSnapshot(source, limit);\n }\n\n // ─── Query ───────────────────────────────────────────────────────────────────\n\n async query(userQuery: string, opts: QueryOptions = { debug: true }): Promise<Answer> {\n return this.engine.query(userQuery, opts);\n }\n}\n","import { Answer, KeywordEntry, Story } from './config/types';\nimport { FetchConfigLoader } from './config/fetch-loader';\nimport { HttpMockAdapter } from './adapters/http-mock.adapter';\nimport { MockLLMEngine, QueryOptions, FallbackLLMConfig } from './mock-llm-engine';\n\nexport { QueryOptions } from './mock-llm-engine';\n\nexport interface BrowserMockLLMOptions {\n /** URL to a pre-aggregated JSON array of all keyword entries, e.g. '/data/keywords.json' */\n keywordsUrl: string;\n /** URL to a pre-aggregated JSON array of all story definitions, e.g. '/data/stories.json' */\n storiesUrl: string;\n /**\n * Base URL for data-source JSON files. A query for `source: 'knowledge/science'`\n * fetches `{dataBaseUrl}/knowledge/science.json`.\n */\n dataBaseUrl: string;\n fallbackLLM?: FallbackLLMConfig;\n}\n\n/**\n * Browser-safe orchestrator for the mock-LLM engine.\n *\n * Loads configuration and data via `fetch()` with no file-system dependencies.\n * Import from `@nice-tools/mock-llm/browser` to keep bundlers from pulling in\n * Node.js-only modules (`fs`, `path`, `@google-cloud/storage`, etc.).\n *\n * @example\n * ```ts\n * import { BrowserMockLLM } from '@nice-tools/mock-llm/browser';\n *\n * const llm = new BrowserMockLLM({\n * keywordsUrl: '/data/keywords.json',\n * storiesUrl: '/data/stories.json',\n * dataBaseUrl: '/data',\n * });\n * await llm.initialize();\n * const answer = await llm.query('what is the color of sky');\n * ```\n */\nexport class BrowserMockLLM {\n private engine!: MockLLMEngine;\n\n constructor(private options: BrowserMockLLMOptions) {}\n\n async initialize(): Promise<void> {\n const loader = new FetchConfigLoader({\n keywordsUrl: this.options.keywordsUrl,\n storiesUrl: this.options.storiesUrl,\n });\n const [keywords, stories] = await Promise.all([\n loader.loadKeywords(),\n loader.loadStories(),\n ]);\n const adapter = new HttpMockAdapter({ baseUrl: this.options.dataBaseUrl });\n const fallbackLLM = this.options.fallbackLLM?.enabled\n ? this.options.fallbackLLM\n : undefined;\n this.engine = new MockLLMEngine(keywords, stories, adapter, fallbackLLM);\n }\n\n // ─── Introspection API (mirrors MockLLM) ─────────────────────────────────────\n\n getKeywords(): KeywordEntry[] { return this.engine.getKeywords(); }\n getStories(): Story[] { return this.engine.getStories(); }\n listDataSources(): string[] { return this.engine.listDataSources(); }\n\n async getDataSourceSnapshot(source: string, limit = 50): Promise<any[]> {\n return this.engine.getDataSourceSnapshot(source, limit);\n }\n\n // ─── Query ───────────────────────────────────────────────────────────────────\n\n async query(userQuery: string, opts: QueryOptions = { debug: true }): Promise<Answer> {\n return this.engine.query(userQuery, opts);\n }\n}\n"]}
|