sis-tools 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/dist/index.cjs +1531 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +869 -0
- package/dist/index.d.ts +869 -0
- package/dist/index.js +1476 -0
- package/dist/index.js.map +1 -0
- package/package.json +86 -0
- package/src/embeddings/base.ts +47 -0
- package/src/embeddings/cohere.ts +79 -0
- package/src/embeddings/google.ts +67 -0
- package/src/embeddings/index.ts +43 -0
- package/src/embeddings/openai.ts +87 -0
- package/src/formatters.ts +249 -0
- package/src/hooks.ts +341 -0
- package/src/index.ts +104 -0
- package/src/optional-peer-deps.d.ts +17 -0
- package/src/scoring.ts +198 -0
- package/src/sis.ts +572 -0
- package/src/store.ts +134 -0
- package/src/types.ts +136 -0
- package/src/validators.ts +484 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/embeddings/base.ts","../src/embeddings/openai.ts","../src/embeddings/cohere.ts","../src/embeddings/google.ts","../src/embeddings/index.ts","../src/scoring.ts","../src/store.ts","../src/formatters.ts","../src/hooks.ts","../src/validators.ts","../src/sis.ts"],"names":["DEFAULT_DIMENSIONS","HookType","results"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Type definitions for SIS\n */\n\nexport interface ToolParameter {\n type: string;\n description?: string;\n required?: boolean;\n default?: unknown;\n}\n\nexport interface ToolParameters {\n [key: string]: ToolParameter;\n}\n\nexport interface ToolExample {\n query: string;\n input?: Record<string, unknown>;\n output?: unknown;\n}\n\nexport interface ToolMetadata {\n version?: string;\n author?: string;\n tags?: string[];\n priority?: number;\n [key: string]: unknown;\n}\n\nexport interface Tool {\n name: string;\n description: string;\n parameters: ToolParameters;\n returns?: Record<string, unknown>;\n semanticHints: string[];\n examples: ToolExample[];\n handler?: ToolHandler;\n metadata: ToolMetadata;\n embedding?: number[];\n}\n\nexport type ToolHandler = (\n params: Record<string, unknown>\n) => unknown | Promise<unknown>;\n\nexport interface ToolMatch {\n tool: Tool;\n score: number;\n}\n\nexport interface ResolvedTool {\n name: string;\n schema: ToolSchema;\n score: number;\n handler?: ToolHandler;\n}\n\nexport interface ToolSchema {\n name: string;\n description: string;\n parameters: {\n type: \"object\";\n properties: Record<string, unknown>;\n required: string[];\n };\n}\n\nexport interface OpenAIToolSchema {\n type: \"function\";\n function: ToolSchema;\n}\n\nexport interface AnthropicToolSchema {\n name: string;\n description: string;\n input_schema: {\n type: \"object\";\n properties: Record<string, unknown>;\n required: string[];\n };\n}\n\n/**\n * Convert a Tool to its JSON schema representation\n */\nexport function toSchema(tool: Tool): ToolSchema {\n const required = Object.entries(tool.parameters)\n .filter(([, v]) => v.required !== false)\n .map(([k]) => k);\n\n return {\n name: tool.name,\n description: tool.description,\n parameters: {\n type: \"object\",\n properties: tool.parameters,\n required,\n },\n };\n}\n\n/**\n * Convert a Tool to OpenAI function calling format\n */\nexport function toOpenAISchema(tool: Tool): OpenAIToolSchema {\n return {\n type: \"function\",\n function: toSchema(tool),\n };\n}\n\n/**\n * Convert a Tool to Anthropic tool use format\n */\nexport function toAnthropicSchema(tool: Tool): AnthropicToolSchema {\n const schema = toSchema(tool);\n return {\n name: schema.name,\n description: schema.description,\n input_schema: schema.parameters,\n };\n}\n\nexport interface RemoteToolSchema {\n name: string;\n schema: ToolSchema;\n score: number;\n}\n\nexport interface RemoteResolveResponse {\n results: RemoteToolSchema[];\n}\n\nexport interface RemoteListResponse {\n tools: string[];\n}\n","/**\n * Base embedding provider interface\n */\n\nimport type { ToolExample } from \"../types\";\n\nexport interface EmbeddingProvider {\n /**\n * Generate embedding for a single text\n */\n embed(text: string): Promise<number[]>;\n\n /**\n * Generate embeddings for multiple texts\n */\n embedBatch(texts: string[]): Promise<number[][]>;\n\n /**\n * The dimensionality of embeddings\n */\n readonly dimensions: number;\n}\n\n/**\n * Build the text representation of a tool for embedding\n */\nexport function buildToolText(\n name: string,\n description: string,\n semanticHints?: string[],\n examples?: ToolExample[]\n): string {\n const parts = [`${name}: ${description}`];\n\n if (semanticHints?.length) {\n parts.push(`Related: ${semanticHints.join(\", \")}`);\n }\n\n if (examples?.length) {\n const queries = examples.map((ex) => ex.query).filter(Boolean);\n if (queries.length) {\n parts.push(`Examples: ${queries.join(\"; \")}`);\n }\n }\n\n return parts.join(\" | \");\n}\n","/**\n * OpenAI embedding provider\n */\n\nimport type { EmbeddingProvider } from \"./base\";\n\ninterface OpenAIEmbeddingsOptions {\n model?: string;\n apiKey?: string;\n dimensions?: number;\n}\n\nconst DEFAULT_DIMENSIONS: Record<string, number> = {\n \"text-embedding-3-small\": 1536,\n \"text-embedding-3-large\": 3072,\n \"text-embedding-ada-002\": 1536,\n};\n\nexport class OpenAIEmbeddings implements EmbeddingProvider {\n private client: any | null = null;\n private model: string;\n private apiKey?: string;\n readonly dimensions: number;\n\n constructor(options: OpenAIEmbeddingsOptions = {}) {\n const { model = \"text-embedding-3-small\", apiKey, dimensions } = options;\n\n this.model = model;\n this.apiKey = apiKey;\n this.dimensions = dimensions ?? DEFAULT_DIMENSIONS[model] ?? 1536;\n }\n\n private async ensureClient(): Promise<any> {\n if (this.client) {\n return this.client;\n }\n\n try {\n const mod: any = await import(\"openai\");\n const OpenAI = mod?.OpenAI ?? mod?.default?.OpenAI ?? mod?.default;\n if (!OpenAI) {\n throw new Error(\"OpenAI export not found\");\n }\n this.client = new OpenAI({ apiKey: this.apiKey });\n return this.client;\n } catch {\n throw new Error(\n \"OpenAI provider requires the openai package. Install with: npm install openai\"\n );\n }\n }\n\n async embed(text: string): Promise<number[]> {\n const client = await this.ensureClient();\n const params: Record<string, unknown> = {\n model: this.model,\n input: text,\n };\n\n if (this.model.includes(\"text-embedding-3\")) {\n params.dimensions = this.dimensions;\n }\n\n const response = await client.embeddings.create(params);\n return response.data[0].embedding;\n }\n\n async embedBatch(texts: string[]): Promise<number[][]> {\n const client = await this.ensureClient();\n const params: Record<string, unknown> = {\n model: this.model,\n input: texts,\n };\n\n if (this.model.includes(\"text-embedding-3\")) {\n params.dimensions = this.dimensions;\n }\n\n const response = await client.embeddings.create(params);\n\n // Sort by index to ensure order matches input\n const sorted = [...response.data].sort(\n (a: { index: number }, b: { index: number }) => a.index - b.index\n );\n return sorted.map((item: { embedding: number[] }) => item.embedding);\n }\n}\n","/**\n * Cohere embedding provider\n */\n\nimport type { EmbeddingProvider } from \"./base\";\n\ninterface CohereEmbeddingsOptions {\n model?: string;\n apiKey?: string;\n inputType?: \"search_query\" | \"search_document\" | \"classification\" | \"clustering\";\n}\n\nconst DEFAULT_DIMENSIONS: Record<string, number> = {\n \"embed-english-v3.0\": 1024,\n \"embed-multilingual-v3.0\": 1024,\n \"embed-english-light-v3.0\": 384,\n \"embed-multilingual-light-v3.0\": 384,\n};\n\nexport class CohereEmbeddings implements EmbeddingProvider {\n private client: any | null = null;\n private model: string;\n private inputType: string;\n private apiKey?: string;\n readonly dimensions: number;\n\n constructor(options: CohereEmbeddingsOptions = {}) {\n const {\n model = \"embed-english-v3.0\",\n apiKey,\n inputType = \"search_query\",\n } = options;\n\n this.model = model;\n this.inputType = inputType;\n this.apiKey = apiKey;\n this.dimensions = DEFAULT_DIMENSIONS[model] ?? 1024;\n }\n\n private async ensureClient(): Promise<any> {\n if (this.client) {\n return this.client;\n }\n\n try {\n const mod: any = await import(\"cohere-ai\");\n const CohereClient = mod?.CohereClient ?? mod?.default?.CohereClient ?? mod?.default;\n if (!CohereClient) {\n throw new Error(\"CohereClient export not found\");\n }\n this.client = new CohereClient({ token: this.apiKey });\n return this.client;\n } catch {\n throw new Error(\n \"Cohere provider requires the cohere-ai package. Install with: npm install cohere-ai\"\n );\n }\n }\n\n async embed(text: string): Promise<number[]> {\n const client = await this.ensureClient();\n const response = await client.embed({\n texts: [text],\n model: this.model,\n inputType: this.inputType,\n });\n return response.embeddings[0];\n }\n\n async embedBatch(texts: string[]): Promise<number[][]> {\n const client = await this.ensureClient();\n const response = await client.embed({\n texts,\n model: this.model,\n inputType: this.inputType,\n });\n return response.embeddings;\n }\n}\n","/**\n * Google embedding provider\n */\n\nimport type { EmbeddingProvider } from \"./base\";\n\ninterface GoogleEmbeddingsOptions {\n model?: string;\n apiKey?: string;\n}\n\nconst DEFAULT_DIMENSIONS: Record<string, number> = {\n \"text-embedding-004\": 768,\n \"text-embedding-preview-0815\": 768,\n};\n\nexport class GoogleEmbeddings implements EmbeddingProvider {\n private client: any | null = null;\n private model: string;\n private apiKey?: string;\n readonly dimensions: number;\n\n constructor(options: GoogleEmbeddingsOptions = {}) {\n const { model = \"text-embedding-004\", apiKey } = options;\n\n this.model = model;\n this.apiKey = apiKey;\n this.dimensions = DEFAULT_DIMENSIONS[model] ?? 768;\n }\n\n private async ensureClient(): Promise<any> {\n if (this.client) {\n return this.client;\n }\n\n try {\n const mod: any = await import(\"@google/generative-ai\");\n const GoogleGenerativeAI =\n mod?.GoogleGenerativeAI ?? mod?.default?.GoogleGenerativeAI ?? mod?.default;\n if (!GoogleGenerativeAI) {\n throw new Error(\"GoogleGenerativeAI export not found\");\n }\n this.client = new GoogleGenerativeAI(this.apiKey || process.env.GOOGLE_API_KEY);\n return this.client;\n } catch {\n throw new Error(\n \"Google provider requires @google/generative-ai. Install with: npm install @google/generative-ai\"\n );\n }\n }\n\n async embed(text: string): Promise<number[]> {\n const client = await this.ensureClient();\n const model = client.getGenerativeModel({ model: this.model });\n const result = await model.embedContent(text);\n return result.embedding.values;\n }\n\n async embedBatch(texts: string[]): Promise<number[][]> {\n const client = await this.ensureClient();\n const model = client.getGenerativeModel({ model: this.model });\n const results = await Promise.all(\n texts.map((text) => model.embedContent(text))\n );\n return results.map((r: any) => r.embedding.values);\n }\n}\n","/**\n * Embedding providers for SIS\n */\n\nexport { type EmbeddingProvider, buildToolText } from \"./base\";\nexport { OpenAIEmbeddings } from \"./openai\";\nexport { CohereEmbeddings } from \"./cohere\";\nexport { GoogleEmbeddings } from \"./google\";\n\nimport type { EmbeddingProvider } from \"./base\";\nimport { OpenAIEmbeddings } from \"./openai\";\nimport { CohereEmbeddings } from \"./cohere\";\nimport { GoogleEmbeddings } from \"./google\";\n\nexport type ProviderName = \"openai\" | \"cohere\" | \"google\";\n\nexport interface ProviderOptions {\n model?: string;\n apiKey?: string;\n dimensions?: number;\n [key: string]: unknown;\n}\n\n/**\n * Factory to get an embedding provider by name\n */\nexport function getProvider(\n name: ProviderName,\n options: ProviderOptions = {}\n): EmbeddingProvider {\n switch (name) {\n case \"openai\":\n return new OpenAIEmbeddings(options);\n case \"cohere\":\n return new CohereEmbeddings(options);\n case \"google\":\n return new GoogleEmbeddings(options);\n default:\n throw new Error(\n `Unknown provider: ${name}. Available: openai, cohere, google`\n );\n }\n}\n","/**\n * Similarity and scoring functions for semantic search\n */\n\nimport type { Tool } from \"./types\";\n\n/**\n * Interface for custom similarity functions\n */\nexport interface SimilarityFunction {\n /**\n * Compute similarity score between query and tool embeddings\n * @param queryEmbedding - The query vector\n * @param toolEmbedding - The tool's embedding vector\n * @returns Similarity score, typically in range [0, 1]\n */\n compute(queryEmbedding: number[], toolEmbedding: number[]): number;\n}\n\n/**\n * Interface for custom scoring/ranking functions\n */\nexport interface ScoringFunction {\n /**\n * Apply custom scoring logic to similarity score\n * @param similarity - Raw similarity score from SimilarityFunction\n * @param tool - The tool being scored (access metadata here)\n * @returns Final score for ranking. Higher is better.\n */\n score(similarity: number, tool: Tool): number;\n}\n\n/**\n * Default cosine similarity implementation\n */\nexport class CosineSimilarity implements SimilarityFunction {\n compute(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n throw new Error(`Vector dimensions must match: ${a.length} !== ${b.length}`);\n }\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n\n normA = Math.sqrt(normA);\n normB = Math.sqrt(normB);\n\n if (normA === 0 || normB === 0) {\n return 0;\n }\n\n return dotProduct / (normA * normB);\n }\n}\n\n/**\n * Euclidean distance converted to similarity score\n * Uses: similarity = 1 / (1 + distance)\n */\nexport class EuclideanSimilarity implements SimilarityFunction {\n compute(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n throw new Error(`Vector dimensions must match: ${a.length} !== ${b.length}`);\n }\n\n let sumSquares = 0;\n for (let i = 0; i < a.length; i++) {\n const diff = a[i] - b[i];\n sumSquares += diff * diff;\n }\n\n const distance = Math.sqrt(sumSquares);\n return 1.0 / (1.0 + distance);\n }\n}\n\n/**\n * Dot product similarity (unnormalized cosine)\n */\nexport class DotProductSimilarity implements SimilarityFunction {\n compute(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n throw new Error(`Vector dimensions must match: ${a.length} !== ${b.length}`);\n }\n\n let dotProduct = 0;\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n }\n\n return dotProduct;\n }\n}\n\n/**\n * Default priority-based scoring\n * Multiplies similarity by tool's priority metadata\n */\nexport class PriorityScoring implements ScoringFunction {\n private maxScore: number;\n\n constructor(maxScore: number = 1.0) {\n this.maxScore = maxScore;\n }\n\n score(similarity: number, tool: Tool): number {\n const priority = (tool.metadata.priority as number) ?? 1.0;\n const boosted = similarity * priority;\n return Math.min(boosted, this.maxScore);\n }\n}\n\n/**\n * Weighted scoring combining multiple factors\n */\nexport class WeightedScoring implements ScoringFunction {\n private similarityWeight: number;\n private priorityWeight: number;\n private maxScore: number;\n\n constructor(\n similarityWeight: number = 0.8,\n priorityWeight: number = 0.2,\n maxScore: number = 1.0\n ) {\n this.similarityWeight = similarityWeight;\n this.priorityWeight = priorityWeight;\n this.maxScore = maxScore;\n }\n\n score(similarity: number, tool: Tool): number {\n const priority = (tool.metadata.priority as number) ?? 1.0;\n const normalizedPriority = Math.min(priority / 2.0, 1.0);\n\n const weighted =\n this.similarityWeight * similarity +\n this.priorityWeight * normalizedPriority;\n\n return Math.min(weighted, this.maxScore);\n }\n}\n\n/**\n * Scoring that boosts tools matching specified tags\n */\nexport class TagBoostScoring implements ScoringFunction {\n private boostTags: Set<string>;\n private boostFactor: number;\n private maxScore: number;\n\n constructor(\n boostTags: string[] = [],\n boostFactor: number = 1.5,\n maxScore: number = 1.0\n ) {\n this.boostTags = new Set(boostTags);\n this.boostFactor = boostFactor;\n this.maxScore = maxScore;\n }\n\n score(similarity: number, tool: Tool): number {\n const toolTags = new Set(tool.metadata.tags as string[] ?? []);\n const hasMatchingTag = [...toolTags].some(tag => this.boostTags.has(tag));\n\n const boosted = hasMatchingTag ? similarity * this.boostFactor : similarity;\n return Math.min(boosted, this.maxScore);\n }\n}\n\n/**\n * Combine multiple scoring functions in sequence\n */\nexport class CompositeScoring implements ScoringFunction {\n private scorers: ScoringFunction[];\n\n constructor(scorers: ScoringFunction[]) {\n this.scorers = scorers;\n }\n\n score(similarity: number, tool: Tool): number {\n let currentScore = similarity;\n for (const scorer of this.scorers) {\n currentScore = scorer.score(currentScore, tool);\n }\n return currentScore;\n }\n}\n\n// Default instances for convenience\nexport const DEFAULT_SIMILARITY = new CosineSimilarity();\nexport const DEFAULT_SCORING = new PriorityScoring();\n","/**\n * Vector store for tool embeddings\n */\n\nimport type { Tool, ToolMatch } from \"./types\";\nimport type { SimilarityFunction, ScoringFunction } from \"./scoring\";\nimport { DEFAULT_SIMILARITY, DEFAULT_SCORING } from \"./scoring\";\n\n/**\n * In-memory vector store for tool embeddings.\n *\n * Uses cosine similarity by default for matching. Supports custom\n * similarity and scoring functions for advanced use cases.\n *\n * For production use with many tools, consider using an external\n * store like Pinecone, Chroma, or Qdrant.\n */\nexport class VectorStore {\n private tools: Tool[] = [];\n private embeddings: number[][] = [];\n\n /**\n * Add a tool with its embedding to the store\n */\n add(tool: Tool, embedding: number[]): void {\n tool.embedding = embedding;\n this.tools.push(tool);\n this.embeddings.push(embedding);\n }\n\n /**\n * Add multiple tools with embeddings\n */\n addBatch(tools: Tool[], embeddings: number[][]): void {\n for (let i = 0; i < tools.length; i++) {\n this.add(tools[i], embeddings[i]);\n }\n }\n\n /**\n * Search for similar tools\n *\n * @param queryEmbedding - The query embedding vector\n * @param topK - Maximum number of results\n * @param threshold - Minimum score to include\n * @param similarityFn - Custom similarity function (defaults to cosine)\n * @param scoringFn - Custom scoring function (defaults to priority scoring)\n */\n search(\n queryEmbedding: number[],\n topK: number = 5,\n threshold: number = 0.0,\n similarityFn?: SimilarityFunction,\n scoringFn?: ScoringFunction\n ): ToolMatch[] {\n if (this.tools.length === 0) {\n return [];\n }\n\n // Use provided functions or defaults\n const simFn = similarityFn ?? DEFAULT_SIMILARITY;\n const scoreFn = scoringFn ?? DEFAULT_SCORING;\n\n const matches: ToolMatch[] = [];\n\n for (let i = 0; i < this.tools.length; i++) {\n const tool = this.tools[i];\n const embedding = this.embeddings[i];\n\n // Compute similarity\n const similarity = simFn.compute(queryEmbedding, embedding);\n\n // Apply scoring (includes priority boost by default)\n const finalScore = scoreFn.score(similarity, tool);\n\n if (finalScore >= threshold) {\n matches.push({ tool, score: finalScore });\n }\n }\n\n // Sort by score descending and take top_k\n matches.sort((a, b) => b.score - a.score);\n return matches.slice(0, topK);\n }\n\n /**\n * Remove a tool by name\n */\n remove(toolName: string): boolean {\n const index = this.tools.findIndex((t) => t.name === toolName);\n if (index !== -1) {\n this.tools.splice(index, 1);\n this.embeddings.splice(index, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Remove all tools from the store\n */\n clear(): void {\n this.tools = [];\n this.embeddings = [];\n }\n\n /**\n * Get a tool by name\n */\n get(toolName: string): Tool | undefined {\n return this.tools.find((t) => t.name === toolName);\n }\n\n /**\n * Number of tools in the store\n */\n get size(): number {\n return this.tools.length;\n }\n\n /**\n * Check if a tool exists by name\n */\n has(toolName: string): boolean {\n return this.tools.some((t) => t.name === toolName);\n }\n\n /**\n * Get all tools\n */\n getAll(): Tool[] {\n return [...this.tools];\n }\n}\n","/**\n * Tool formatters for different LLM providers\n */\n\nimport type { ResolvedTool, ToolSchema } from \"./types\";\n\n/**\n * Interface for custom tool formatters\n */\nexport interface ToolFormatter {\n /** Format name used to identify this formatter */\n readonly name: string;\n\n /** Format a resolved tool for LLM consumption */\n format(tool: ResolvedTool): Record<string, unknown>;\n\n /** Format multiple tools (override for batch optimizations) */\n formatBatch?(tools: ResolvedTool[]): Record<string, unknown>[];\n}\n\n/**\n * Returns the tool schema as-is\n */\nexport class RawFormatter implements ToolFormatter {\n readonly name = \"raw\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return tool.schema as unknown as Record<string, unknown>;\n }\n}\n\n/**\n * Formatter for OpenAI function calling format\n */\nexport class OpenAIFormatter implements ToolFormatter {\n readonly name = \"openai\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return {\n type: \"function\",\n function: tool.schema,\n };\n }\n}\n\n/**\n * Formatter for Anthropic tool use format\n */\nexport class AnthropicFormatter implements ToolFormatter {\n readonly name = \"anthropic\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return {\n name: tool.schema.name,\n description: tool.schema.description,\n input_schema: tool.schema.parameters,\n };\n }\n}\n\n/**\n * Formatter for Google Gemini function calling format\n */\nexport class GeminiFormatter implements ToolFormatter {\n readonly name = \"gemini\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return {\n name: tool.schema.name,\n description: tool.schema.description,\n parameters: tool.schema.parameters,\n };\n }\n}\n\n/**\n * Formatter for Mistral function calling format (OpenAI-compatible)\n */\nexport class MistralFormatter implements ToolFormatter {\n readonly name = \"mistral\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return {\n type: \"function\",\n function: {\n name: tool.schema.name,\n description: tool.schema.description,\n parameters: tool.schema.parameters,\n },\n };\n }\n}\n\n/**\n * Formatter for Llama/Meta function calling format\n */\nexport class LlamaFormatter implements ToolFormatter {\n readonly name = \"llama\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return {\n type: \"function\",\n function: {\n name: tool.schema.name,\n description: tool.schema.description,\n parameters: tool.schema.parameters,\n },\n };\n }\n}\n\n/**\n * Formatter for Cohere Command R format\n */\nexport class CohereFormatter implements ToolFormatter {\n readonly name = \"cohere\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n const params = tool.schema.parameters;\n const properties = params.properties as Record<string, Record<string, unknown>>;\n const required = new Set(params.required);\n\n const parameterDefinitions: Record<string, unknown> = {};\n for (const [name, prop] of Object.entries(properties)) {\n parameterDefinitions[name] = {\n type: prop.type ?? \"string\",\n description: prop.description ?? \"\",\n required: required.has(name),\n };\n }\n\n return {\n name: tool.schema.name,\n description: tool.schema.description,\n parameter_definitions: parameterDefinitions,\n };\n }\n}\n\n/**\n * Minimal formatter with just name and description\n */\nexport class MinimalFormatter implements ToolFormatter {\n readonly name = \"minimal\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return {\n name: tool.schema.name,\n description: tool.schema.description,\n };\n }\n}\n\n/**\n * Verbose formatter with all available information\n */\nexport class VerboseFormatter implements ToolFormatter {\n readonly name = \"verbose\";\n\n format(tool: ResolvedTool): Record<string, unknown> {\n return {\n name: tool.name,\n schema: tool.schema,\n score: tool.score,\n hasHandler: tool.handler !== undefined,\n };\n }\n}\n\n// Global formatter registry\nconst formatters: Map<string, ToolFormatter> = new Map();\n\n/**\n * Register a custom formatter\n */\nexport function registerFormatter(formatter: ToolFormatter): void {\n formatters.set(formatter.name, formatter);\n}\n\n/**\n * Unregister a formatter by name\n */\nexport function unregisterFormatter(name: string): boolean {\n return formatters.delete(name);\n}\n\n/**\n * Get a formatter by name\n */\nexport function getFormatter(name: string): ToolFormatter {\n const formatter = formatters.get(name);\n if (!formatter) {\n const available = Array.from(formatters.keys()).join(\", \");\n throw new Error(`Unknown formatter '${name}'. Available: ${available}`);\n }\n return formatter;\n}\n\n/**\n * List all registered formatter names\n */\nexport function listFormatters(): string[] {\n return Array.from(formatters.keys());\n}\n\n/**\n * Check if a formatter is registered\n */\nexport function hasFormatter(name: string): boolean {\n return formatters.has(name);\n}\n\n/**\n * Format tools using a formatter (by name or instance)\n */\nexport function formatTools(\n tools: ResolvedTool[],\n formatter: string | ToolFormatter\n): Record<string, unknown>[] {\n const fmt = typeof formatter === \"string\" ? getFormatter(formatter) : formatter;\n\n if (fmt.formatBatch) {\n return fmt.formatBatch(tools);\n }\n\n return tools.map((tool) => fmt.format(tool));\n}\n\n// Register default formatters\nfunction registerDefaults(): void {\n const defaults: ToolFormatter[] = [\n new RawFormatter(),\n new OpenAIFormatter(),\n new AnthropicFormatter(),\n new GeminiFormatter(),\n new MistralFormatter(),\n new LlamaFormatter(),\n new CohereFormatter(),\n new MinimalFormatter(),\n new VerboseFormatter(),\n ];\n\n for (const formatter of defaults) {\n registerFormatter(formatter);\n }\n}\n\n// Initialize default formatters\nregisterDefaults();\n","/**\n * Middleware/hooks system for SIS\n */\n\nimport type { Tool, ResolvedTool, ToolMatch } from \"./types\";\n\n/**\n * Types of hooks available in the SIS lifecycle\n */\nexport enum HookType {\n // Registration hooks\n PRE_REGISTER = \"pre_register\",\n POST_REGISTER = \"post_register\",\n\n // Initialization hooks\n PRE_EMBED = \"pre_embed\",\n POST_EMBED = \"post_embed\",\n\n // Resolution hooks\n PRE_RESOLVE = \"pre_resolve\",\n POST_RESOLVE = \"post_resolve\",\n PRE_SEARCH = \"pre_search\",\n POST_SEARCH = \"post_search\",\n\n // Execution hooks\n PRE_EXECUTE = \"pre_execute\",\n POST_EXECUTE = \"post_execute\",\n}\n\n/**\n * Context passed to hooks\n */\nexport interface HookContext {\n hookType: HookType;\n data: Record<string, unknown>;\n cancelled: boolean;\n error: Error | null;\n}\n\n/**\n * Create a new hook context\n */\nexport function createContext(\n hookType: HookType,\n data: Record<string, unknown> = {}\n): HookContext {\n return {\n hookType,\n data,\n cancelled: false,\n error: null,\n };\n}\n\n/**\n * Cancel further processing\n */\nexport function cancelContext(context: HookContext, reason?: string): void {\n context.cancelled = true;\n if (reason) {\n context.data.cancelReason = reason;\n }\n}\n\n/**\n * Set an error on the context\n */\nexport function setContextError(context: HookContext, error: Error): void {\n context.error = error;\n context.cancelled = true;\n}\n\n/**\n * Interface for hooks\n */\nexport interface Hook {\n /** The hook type this hook handles */\n hookType: HookType;\n\n /** Hook priority. Higher priority hooks run first. */\n priority?: number;\n\n /** Execute the hook */\n execute(context: HookContext): Promise<HookContext> | HookContext;\n}\n\n/**\n * Hook function type\n */\nexport type HookFunction = (\n context: HookContext\n) => Promise<HookContext> | HookContext;\n\n/**\n * Create a hook from a function\n */\nexport function createHook(\n hookType: HookType,\n fn: HookFunction,\n priority: number = 0\n): Hook {\n return {\n hookType,\n priority,\n execute: fn,\n };\n}\n\n/**\n * Registry for managing hooks\n */\nexport class HookRegistry {\n private hooks: Map<HookType, Hook[]> = new Map();\n\n constructor() {\n // Initialize all hook types\n for (const type of Object.values(HookType)) {\n this.hooks.set(type, []);\n }\n }\n\n /**\n * Register a hook\n */\n register(hook: Hook): void {\n const hooks = this.hooks.get(hook.hookType) ?? [];\n hooks.push(hook);\n // Sort by priority (highest first)\n hooks.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n this.hooks.set(hook.hookType, hooks);\n }\n\n /**\n * Register a function as a hook\n */\n on(\n hookType: HookType,\n fn: HookFunction,\n priority: number = 0\n ): Hook {\n const hook = createHook(hookType, fn, priority);\n this.register(hook);\n return hook;\n }\n\n /**\n * Unregister a hook\n */\n unregister(hook: Hook): boolean {\n const hooks = this.hooks.get(hook.hookType) ?? [];\n const index = hooks.indexOf(hook);\n if (index !== -1) {\n hooks.splice(index, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Clear hooks\n */\n clear(hookType?: HookType): void {\n if (hookType) {\n this.hooks.set(hookType, []);\n } else {\n for (const type of Object.values(HookType)) {\n this.hooks.set(type, []);\n }\n }\n }\n\n /**\n * Get all hooks for a type\n */\n getHooks(hookType: HookType): Hook[] {\n return [...(this.hooks.get(hookType) ?? [])];\n }\n\n /**\n * Check if any hooks are registered for a type\n */\n hasHooks(hookType: HookType): boolean {\n return (this.hooks.get(hookType) ?? []).length > 0;\n }\n\n /**\n * Run all hooks of a given type\n */\n async run(hookType: HookType, context: HookContext): Promise<HookContext> {\n const hooks = this.hooks.get(hookType) ?? [];\n\n for (const hook of hooks) {\n if (context.cancelled) {\n break;\n }\n\n try {\n const result = hook.execute(context);\n if (result instanceof Promise) {\n context = await result;\n } else {\n context = result;\n }\n } catch (error) {\n setContextError(context, error as Error);\n break;\n }\n }\n\n return context;\n }\n}\n\n// Pre-built hook implementations for common use cases\n\n/**\n * Hook that logs hook execution\n */\nexport class LoggingHook implements Hook {\n hookType: HookType;\n priority = 0;\n private logger: (message: string) => void;\n\n constructor(hookType: HookType, logger?: (message: string) => void) {\n this.hookType = hookType;\n this.logger = logger ?? console.log;\n }\n\n execute(context: HookContext): HookContext {\n this.logger(`[${this.hookType}] data=${JSON.stringify(context.data)}`);\n return context;\n }\n}\n\n/**\n * Hook that records execution time\n */\nexport class TimingHook implements Hook {\n hookType: HookType;\n priority = 0;\n private preHook: HookType;\n private postHook: HookType;\n private timingKey: string;\n\n constructor(\n preHook: HookType,\n postHook: HookType,\n timingKey: string = \"timing\"\n ) {\n this.preHook = preHook;\n this.postHook = postHook;\n this.hookType = preHook; // Will be updated when used\n this.timingKey = timingKey;\n }\n\n execute(context: HookContext): HookContext {\n if (context.hookType === this.preHook) {\n context.data[`${this.timingKey}Start`] = performance.now();\n } else if (context.hookType === this.postHook) {\n const start = context.data[`${this.timingKey}Start`] as number;\n if (start) {\n const duration = performance.now() - start;\n context.data[`${this.timingKey}Ms`] = duration;\n }\n }\n return context;\n }\n}\n\n/**\n * Hook that collects metrics\n */\nexport class MetricsHook implements Hook {\n hookType: HookType;\n priority = 0;\n count = 0;\n errors = 0;\n\n constructor(hookType: HookType) {\n this.hookType = hookType;\n }\n\n execute(context: HookContext): HookContext {\n this.count++;\n if (context.error) {\n this.errors++;\n }\n return context;\n }\n\n reset(): void {\n this.count = 0;\n this.errors = 0;\n }\n}\n\n/**\n * Hook that caches resolution results\n */\nexport class CachingHook implements Hook {\n hookType = HookType.PRE_RESOLVE;\n priority = 100; // Run early to check cache\n private cache: Map<string, unknown[]> = new Map();\n private maxSize: number;\n\n constructor(maxSize: number = 100) {\n this.maxSize = maxSize;\n }\n\n execute(context: HookContext): HookContext {\n if (context.hookType === HookType.PRE_RESOLVE) {\n const query = context.data.query as string;\n if (query && this.cache.has(query)) {\n context.data.cachedResults = this.cache.get(query);\n context.data.cacheHit = true;\n }\n } else if (context.hookType === HookType.POST_RESOLVE) {\n const query = context.data.query as string;\n const results = context.data.results as unknown[];\n if (query && results && !this.cache.has(query)) {\n if (this.cache.size >= this.maxSize) {\n // Remove oldest entry\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(query, results);\n }\n }\n return context;\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n get cacheSize(): number {\n return this.cache.size;\n }\n}\n","/**\n * Validation system for SIS tools and parameters\n */\n\nimport type { Tool, ToolParameters } from \"./types\";\n\n/**\n * Result of a validation operation\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n}\n\n/**\n * Create a validation result\n */\nexport function createValidationResult(\n valid: boolean,\n errors: string[] = [],\n warnings: string[] = []\n): ValidationResult {\n return { valid, errors, warnings };\n}\n\n/**\n * Merge two validation results\n */\nexport function mergeValidationResults(\n a: ValidationResult,\n b: ValidationResult\n): ValidationResult {\n return {\n valid: a.valid && b.valid,\n errors: [...a.errors, ...b.errors],\n warnings: [...a.warnings, ...b.warnings],\n };\n}\n\n/**\n * Interface for validators\n */\nexport interface Validator<T = unknown> {\n validate(data: T): ValidationResult;\n}\n\n/**\n * Validation error\n */\nexport class ValidationError extends Error {\n result: ValidationResult;\n\n constructor(result: ValidationResult) {\n super(`Validation failed: ${result.errors.join(\", \")}`);\n this.name = \"ValidationError\";\n this.result = result;\n }\n}\n\n/**\n * Allowed JSON Schema types\n */\nconst ALLOWED_TYPES = new Set([\n \"string\",\n \"integer\",\n \"number\",\n \"boolean\",\n \"array\",\n \"object\",\n \"null\",\n]);\n\n/**\n * Options for ToolSchemaValidator\n */\nexport interface ToolSchemaValidatorOptions {\n requireDescription?: boolean;\n requireParameters?: boolean;\n minDescriptionLength?: number;\n maxDescriptionLength?: number;\n}\n\n/**\n * Validates tool definitions\n */\nexport class ToolSchemaValidator implements Validator<Tool> {\n private options: Required<ToolSchemaValidatorOptions>;\n\n constructor(options: ToolSchemaValidatorOptions = {}) {\n this.options = {\n requireDescription: options.requireDescription ?? true,\n requireParameters: options.requireParameters ?? false,\n minDescriptionLength: options.minDescriptionLength ?? 0,\n maxDescriptionLength: options.maxDescriptionLength ?? 1000,\n };\n }\n\n validate(tool: Tool): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate name\n if (!tool.name) {\n errors.push(\"Tool name is required\");\n } else if (!/^[\\w-]+$/.test(tool.name)) {\n warnings.push(`Tool name '${tool.name}' contains special characters`);\n }\n\n // Validate description\n if (this.options.requireDescription && !tool.description) {\n errors.push(\"Tool description is required\");\n } else if (tool.description) {\n if (tool.description.length < this.options.minDescriptionLength) {\n errors.push(\n `Description must be at least ${this.options.minDescriptionLength} characters`\n );\n }\n if (tool.description.length > this.options.maxDescriptionLength) {\n errors.push(\n `Description must be at most ${this.options.maxDescriptionLength} characters`\n );\n }\n }\n\n // Validate parameters\n if (this.options.requireParameters && Object.keys(tool.parameters).length === 0) {\n errors.push(\"Tool parameters are required\");\n }\n\n // Validate parameter types\n for (const [name, param] of Object.entries(tool.parameters)) {\n if (param.type && !ALLOWED_TYPES.has(param.type)) {\n errors.push(`Parameter '${name}' has invalid type '${param.type}'`);\n }\n }\n\n return createValidationResult(errors.length === 0, errors, warnings);\n }\n}\n\n/**\n * Options for ParameterValidator\n */\nexport interface ParameterValidatorOptions {\n strict?: boolean;\n allowExtra?: boolean;\n}\n\n/**\n * Validates execution parameters against tool schema\n */\nexport class ParameterValidator implements Validator<{ tool: Tool; params: Record<string, unknown> }> {\n private options: Required<ParameterValidatorOptions>;\n\n constructor(options: ParameterValidatorOptions = {}) {\n this.options = {\n strict: options.strict ?? false,\n allowExtra: options.allowExtra ?? true,\n };\n }\n\n validate(data: { tool: Tool; params: Record<string, unknown> }): ValidationResult {\n const { tool, params } = data;\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!tool) {\n errors.push(\"Tool is required for parameter validation\");\n return createValidationResult(false, errors, warnings);\n }\n\n const properties = tool.parameters;\n\n // Check required parameters in strict mode\n if (this.options.strict) {\n for (const [name, param] of Object.entries(properties)) {\n if (param.required !== false && !(name in params)) {\n errors.push(`Missing required parameter: ${name}`);\n }\n }\n }\n\n // Check parameter types\n for (const [name, value] of Object.entries(params)) {\n if (!(name in properties)) {\n if (!this.options.allowExtra) {\n errors.push(`Unknown parameter: ${name}`);\n } else {\n warnings.push(`Extra parameter provided: ${name}`);\n }\n continue;\n }\n\n const param = properties[name];\n const typeError = this.checkType(name, value, param.type);\n if (typeError) {\n errors.push(typeError);\n }\n }\n\n return createValidationResult(errors.length === 0, errors, warnings);\n }\n\n private checkType(name: string, value: unknown, expectedType?: string): string | null {\n if (!expectedType) return null;\n\n const typeMap: Record<string, (v: unknown) => boolean> = {\n string: (v) => typeof v === \"string\",\n integer: (v) => Number.isInteger(v),\n number: (v) => typeof v === \"number\",\n boolean: (v) => typeof v === \"boolean\",\n array: (v) => Array.isArray(v),\n object: (v) => typeof v === \"object\" && v !== null && !Array.isArray(v),\n null: (v) => v === null,\n };\n\n const checker = typeMap[expectedType];\n if (checker && !checker(value)) {\n return `Parameter '${name}' expected ${expectedType}, got ${typeof value}`;\n }\n\n return null;\n }\n}\n\n/**\n * Options for ResultValidator\n */\nexport interface ResultValidatorOptions {\n strict?: boolean;\n}\n\n/**\n * Validates tool execution results\n */\nexport class ResultValidator implements Validator<{ tool: Tool; result: unknown }> {\n private options: Required<ResultValidatorOptions>;\n\n constructor(options: ResultValidatorOptions = {}) {\n this.options = {\n strict: options.strict ?? false,\n };\n }\n\n validate(data: { tool: Tool; result: unknown }): ValidationResult {\n const { tool, result } = data;\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!tool) {\n errors.push(\"Tool is required for result validation\");\n return createValidationResult(false, errors, warnings);\n }\n\n // If tool has return schema, validate against it\n if (tool.returns) {\n const expectedType = tool.returns.type as string;\n const typeError = this.checkReturnType(result, expectedType);\n if (typeError) {\n if (this.options.strict) {\n errors.push(typeError);\n } else {\n warnings.push(typeError);\n }\n }\n }\n\n return createValidationResult(errors.length === 0, errors, warnings);\n }\n\n private checkReturnType(value: unknown, expectedType?: string): string | null {\n if (!expectedType) return null;\n\n const typeMap: Record<string, (v: unknown) => boolean> = {\n string: (v) => typeof v === \"string\",\n integer: (v) => Number.isInteger(v),\n number: (v) => typeof v === \"number\",\n boolean: (v) => typeof v === \"boolean\",\n array: (v) => Array.isArray(v),\n object: (v) => typeof v === \"object\" && v !== null && !Array.isArray(v),\n null: (v) => v === null,\n };\n\n const checker = typeMap[expectedType];\n if (checker && !checker(value)) {\n return `Result expected ${expectedType}, got ${typeof value}`;\n }\n\n return null;\n }\n}\n\n/**\n * Options for EmbeddingValidator\n */\nexport interface EmbeddingValidatorOptions {\n expectedDimensions?: number;\n checkNormalization?: boolean;\n}\n\n/**\n * Validates embedding vectors\n */\nexport class EmbeddingValidator implements Validator<number[]> {\n private options: EmbeddingValidatorOptions;\n\n constructor(options: EmbeddingValidatorOptions = {}) {\n this.options = options;\n }\n\n validate(embedding: number[]): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!Array.isArray(embedding)) {\n errors.push(\"Embedding must be an array\");\n return createValidationResult(false, errors, warnings);\n }\n\n if (embedding.length === 0) {\n errors.push(\"Embedding cannot be empty\");\n return createValidationResult(false, errors, warnings);\n }\n\n // Check dimensions\n if (\n this.options.expectedDimensions !== undefined &&\n embedding.length !== this.options.expectedDimensions\n ) {\n errors.push(\n `Embedding dimensions mismatch: expected ${this.options.expectedDimensions}, got ${embedding.length}`\n );\n }\n\n // Check for non-numeric values\n for (let i = 0; i < embedding.length; i++) {\n if (typeof embedding[i] !== \"number\") {\n errors.push(`Embedding value at index ${i} is not numeric`);\n break;\n }\n }\n\n // Check normalization\n if (this.options.checkNormalization && errors.length === 0) {\n let sumSquares = 0;\n for (const val of embedding) {\n sumSquares += val * val;\n }\n const norm = Math.sqrt(sumSquares);\n if (Math.abs(norm - 1.0) > 0.01) {\n warnings.push(`Embedding is not normalized (norm=${norm.toFixed(4)})`);\n }\n }\n\n return createValidationResult(errors.length === 0, errors, warnings);\n }\n}\n\n/**\n * Combines multiple validators\n */\nexport class CompositeValidator<T> implements Validator<T> {\n private validators: Validator<T>[];\n\n constructor(validators: Validator<T>[]) {\n this.validators = validators;\n }\n\n validate(data: T): ValidationResult {\n let result = createValidationResult(true);\n for (const validator of this.validators) {\n const subResult = validator.validate(data);\n result = mergeValidationResults(result, subResult);\n }\n return result;\n }\n}\n\n/**\n * Registry for managing validators\n */\nexport class ValidatorRegistry {\n schemaValidators: ToolSchemaValidator[] = [];\n parameterValidators: ParameterValidator[] = [];\n resultValidators: ResultValidator[] = [];\n embeddingValidators: EmbeddingValidator[] = [];\n\n addSchemaValidator(validator: ToolSchemaValidator): void {\n this.schemaValidators.push(validator);\n }\n\n addParameterValidator(validator: ParameterValidator): void {\n this.parameterValidators.push(validator);\n }\n\n addResultValidator(validator: ResultValidator): void {\n this.resultValidators.push(validator);\n }\n\n addEmbeddingValidator(validator: EmbeddingValidator): void {\n this.embeddingValidators.push(validator);\n }\n\n validateTool(tool: Tool): ValidationResult {\n let result = createValidationResult(true);\n for (const validator of this.schemaValidators) {\n const subResult = validator.validate(tool);\n result = mergeValidationResults(result, subResult);\n }\n return result;\n }\n\n validateParams(tool: Tool, params: Record<string, unknown>): ValidationResult {\n let result = createValidationResult(true);\n for (const validator of this.parameterValidators) {\n const subResult = validator.validate({ tool, params });\n result = mergeValidationResults(result, subResult);\n }\n return result;\n }\n\n validateResult(tool: Tool, resultValue: unknown): ValidationResult {\n let result = createValidationResult(true);\n for (const validator of this.resultValidators) {\n const subResult = validator.validate({ tool, result: resultValue });\n result = mergeValidationResults(result, subResult);\n }\n return result;\n }\n\n validateEmbedding(embedding: number[]): ValidationResult {\n let result = createValidationResult(true);\n for (const validator of this.embeddingValidators) {\n const subResult = validator.validate(embedding);\n result = mergeValidationResults(result, subResult);\n }\n return result;\n }\n\n clear(): void {\n this.schemaValidators = [];\n this.parameterValidators = [];\n this.resultValidators = [];\n this.embeddingValidators = [];\n }\n}\n\n/**\n * Create a registry with strict validators\n */\nexport function createStrictValidator(): ValidatorRegistry {\n const registry = new ValidatorRegistry();\n registry.addSchemaValidator(\n new ToolSchemaValidator({\n requireDescription: true,\n minDescriptionLength: 10,\n })\n );\n registry.addParameterValidator(new ParameterValidator({ strict: true }));\n registry.addResultValidator(new ResultValidator({ strict: true }));\n return registry;\n}\n\n/**\n * Create a registry with lenient validators\n */\nexport function createLenientValidator(): ValidatorRegistry {\n const registry = new ValidatorRegistry();\n registry.addSchemaValidator(\n new ToolSchemaValidator({\n requireDescription: false,\n minDescriptionLength: 0,\n })\n );\n registry.addParameterValidator(\n new ParameterValidator({\n strict: false,\n allowExtra: true,\n })\n );\n registry.addResultValidator(new ResultValidator({ strict: false }));\n return registry;\n}\n","/**\n * Core SIS implementation\n */\n\nimport type {\n Tool,\n ToolHandler,\n ToolParameters,\n ToolExample,\n ToolMetadata,\n ResolvedTool,\n OpenAIToolSchema,\n AnthropicToolSchema,\n} from \"./types\";\nimport { toSchema, toOpenAISchema, toAnthropicSchema } from \"./types\";\nimport type { EmbeddingProvider, ProviderName, ProviderOptions } from \"./embeddings\";\nimport { getProvider, buildToolText } from \"./embeddings\";\nimport { VectorStore } from \"./store\";\n\n// Import customization systems\nimport type { SimilarityFunction, ScoringFunction } from \"./scoring\";\nimport { DEFAULT_SIMILARITY, DEFAULT_SCORING } from \"./scoring\";\nimport type { ToolFormatter } from \"./formatters\";\nimport { getFormatter, hasFormatter, formatTools } from \"./formatters\";\nimport type { Hook } from \"./hooks\";\nimport { HookRegistry, HookType, createContext } from \"./hooks\";\nimport type { ValidatorRegistry } from \"./validators\";\nimport { ValidationError } from \"./validators\";\n\nexport interface SISOptions {\n embeddingProvider?: ProviderName | EmbeddingProvider;\n defaultTopK?: number;\n defaultThreshold?: number;\n providerOptions?: ProviderOptions;\n remoteUrl?: string;\n projectId?: string;\n // New customization options\n similarity?: SimilarityFunction;\n scoring?: ScoringFunction;\n validators?: ValidatorRegistry;\n validateOnRegister?: boolean;\n validateOnExecute?: boolean;\n}\n\nexport interface RegisterOptions {\n name: string;\n description: string;\n parameters?: ToolParameters;\n handler?: ToolHandler;\n semanticHints?: string[];\n examples?: ToolExample[];\n metadata?: ToolMetadata;\n}\n\nexport interface StoreOptions extends RegisterOptions {\n embedding: number[];\n}\n\nexport type ResolveFormat = \"raw\" | \"openai\" | \"anthropic\" | string;\n\nexport interface ResolveOptions {\n topK?: number;\n threshold?: number;\n format?: ResolveFormat | ToolFormatter;\n}\n\n/**\n * Semantic Integration System - Intelligent tool resolution\n *\n * @example\n * const sis = new SIS({ embeddingProvider: 'openai' });\n *\n * sis.register({\n * name: 'web_search',\n * description: 'Search the web for information',\n * parameters: { query: { type: 'string' } },\n * handler: async ({ query }) => searchApi(query)\n * });\n *\n * await sis.initialize();\n * const tools = await sis.resolve(\"what's the weather?\");\n *\n * // With custom formatter\n * const geminiTools = await sis.resolve(\"query\", { format: \"gemini\" });\n */\nexport class SIS {\n private _embeddings: EmbeddingProvider;\n private _vectorStore: VectorStore;\n private _pendingTools: Tool[];\n private _defaultTopK: number;\n private _defaultThreshold: number;\n private _initialized: boolean;\n private _remoteUrl?: string;\n private _projectId?: string;\n\n // Customization systems\n private _similarity: SimilarityFunction;\n private _scoring: ScoringFunction;\n private _hooks: HookRegistry;\n private _validators?: ValidatorRegistry;\n private _validateOnRegister: boolean;\n private _validateOnExecute: boolean;\n\n constructor(options: SISOptions = {}) {\n const {\n embeddingProvider = \"openai\",\n defaultTopK = 5,\n defaultThreshold = 0.3,\n providerOptions = {},\n similarity,\n scoring,\n validators,\n validateOnRegister = false,\n validateOnExecute = false,\n } = options;\n\n if (typeof embeddingProvider === \"string\") {\n this._embeddings = getProvider(embeddingProvider, providerOptions);\n } else {\n this._embeddings = embeddingProvider;\n }\n\n this._vectorStore = new VectorStore();\n this._pendingTools = [];\n this._defaultTopK = defaultTopK;\n this._defaultThreshold = defaultThreshold;\n this._initialized = false;\n this._remoteUrl = options.remoteUrl;\n this._projectId = options.projectId;\n\n // Initialize customization systems\n this._similarity = similarity ?? DEFAULT_SIMILARITY;\n this._scoring = scoring ?? DEFAULT_SCORING;\n this._hooks = new HookRegistry();\n this._validators = validators;\n this._validateOnRegister = validateOnRegister;\n this._validateOnExecute = validateOnExecute;\n }\n\n // Properties for accessing customization systems\n\n /** Get the hook registry for registering middleware */\n get hooks(): HookRegistry {\n return this._hooks;\n }\n\n /** Get the validator registry */\n get validators(): ValidatorRegistry | undefined {\n return this._validators;\n }\n\n /** Get the current similarity function */\n get similarity(): SimilarityFunction {\n return this._similarity;\n }\n\n /** Set a new similarity function */\n set similarity(fn: SimilarityFunction) {\n this._similarity = fn;\n }\n\n /** Get the current scoring function */\n get scoring(): ScoringFunction {\n return this._scoring;\n }\n\n /** Set a new scoring function */\n set scoring(fn: ScoringFunction) {\n this._scoring = fn;\n }\n\n /** Register a hook */\n registerHook(hook: Hook): void {\n this._hooks.register(hook);\n }\n\n /** Unregister a hook */\n unregisterHook(hook: Hook): boolean {\n return this._hooks.unregister(hook);\n }\n\n /**\n * Register a tool programmatically\n */\n register(options: RegisterOptions): Tool {\n const tool: Tool = {\n name: options.name,\n description: options.description,\n parameters: options.parameters ?? {},\n semanticHints: options.semanticHints ?? [],\n examples: options.examples ?? [],\n handler: options.handler,\n metadata: options.metadata ?? {},\n };\n\n // Validate if enabled\n if (this._validateOnRegister && this._validators) {\n const result = this._validators.validateTool(tool);\n if (!result.valid) {\n throw new ValidationError(result);\n }\n }\n\n this._pendingTools.push(tool);\n return tool;\n }\n\n /**\n * Store (upsert) a tool with a precomputed embedding.\n *\n * This bypasses the embedding provider, allowing custom embedding workflows.\n */\n store(options: StoreOptions): Tool {\n const tool: Tool = {\n name: options.name,\n description: options.description,\n parameters: options.parameters ?? {},\n semanticHints: options.semanticHints ?? [],\n examples: options.examples ?? [],\n handler: options.handler,\n metadata: options.metadata ?? {},\n };\n\n // Validate tool schema if enabled\n if (this._validateOnRegister && this._validators) {\n const result = this._validators.validateTool(tool);\n if (!result.valid) {\n throw new ValidationError(result);\n }\n }\n\n // Validate embedding\n if (this._validators) {\n const embeddingResult = this._validators.validateEmbedding(options.embedding);\n if (!embeddingResult.valid) {\n throw new ValidationError(embeddingResult);\n }\n }\n\n if (options.embedding.length !== this._embeddings.dimensions) {\n throw new Error(\n `Embedding dimensions must match provider: ${options.embedding.length} !== ${this._embeddings.dimensions}`\n );\n }\n\n // Upsert into the local store\n if (this._vectorStore.has(tool.name)) {\n this._vectorStore.remove(tool.name);\n }\n this._vectorStore.add(tool, options.embedding);\n return tool;\n }\n\n /**\n * Initialize embeddings for all pending tools\n */\n async initialize(): Promise<void> {\n if (this._pendingTools.length === 0) {\n this._initialized = true;\n return;\n }\n\n // PRE_EMBED hook\n let ctx = createContext(HookType.PRE_EMBED, { tools: this._pendingTools });\n ctx = await this._hooks.run(HookType.PRE_EMBED, ctx);\n if (ctx.cancelled) {\n return;\n }\n\n // Build text representations for embedding\n const texts = this._pendingTools.map((tool) =>\n buildToolText(\n tool.name,\n tool.description,\n tool.semanticHints,\n tool.examples\n )\n );\n\n // Batch embed all tools\n const embeddings = await this._embeddings.embedBatch(texts);\n\n // Add to store\n this._vectorStore.addBatch(this._pendingTools, embeddings);\n\n // POST_EMBED hook\n ctx = createContext(HookType.POST_EMBED, {\n tools: this._pendingTools,\n embeddings,\n });\n await this._hooks.run(HookType.POST_EMBED, ctx);\n\n this._pendingTools = [];\n this._initialized = true;\n }\n\n /**\n * Resolve tools for a query (raw format)\n */\n async resolve(\n query: string,\n options?: { topK?: number; threshold?: number; format?: \"raw\" }\n ): Promise<ResolvedTool[]>;\n\n /**\n * Resolve tools for a query (OpenAI format)\n */\n async resolve(\n query: string,\n options: { topK?: number; threshold?: number; format: \"openai\" }\n ): Promise<OpenAIToolSchema[]>;\n\n /**\n * Resolve tools for a query (Anthropic format)\n */\n async resolve(\n query: string,\n options: { topK?: number; threshold?: number; format: \"anthropic\" }\n ): Promise<AnthropicToolSchema[]>;\n\n /**\n * Resolve tools for a query (custom format)\n */\n async resolve(\n query: string,\n options: { topK?: number; threshold?: number; format: string | ToolFormatter }\n ): Promise<Record<string, unknown>[]>;\n\n /**\n * Resolve tools for a query\n */\n async resolve(\n query: string,\n options: ResolveOptions = {}\n ): Promise<ResolvedTool[] | OpenAIToolSchema[] | AnthropicToolSchema[] | Record<string, unknown>[]> {\n // Auto-initialize if needed\n if (!this._initialized) {\n await this.initialize();\n }\n\n const topK = options.topK ?? this._defaultTopK;\n const threshold = options.threshold ?? this._defaultThreshold;\n const format = options.format ?? \"raw\";\n\n // PRE_RESOLVE hook\n let ctx = createContext(HookType.PRE_RESOLVE, {\n query,\n topK,\n threshold,\n format,\n });\n ctx = await this._hooks.run(HookType.PRE_RESOLVE, ctx);\n if (ctx.cancelled) {\n if (ctx.data.cachedResults) {\n return ctx.data.cachedResults as ResolvedTool[];\n }\n return [];\n }\n\n // Allow hooks to modify parameters\n const finalQuery = (ctx.data.query as string) ?? query;\n const finalTopK = (ctx.data.topK as number) ?? topK;\n const finalThreshold = (ctx.data.threshold as number) ?? threshold;\n\n // Check for remote resolution\n if (this._remoteUrl && this._projectId) {\n const response = await fetch(\n `${this._remoteUrl}/v1/projects/${this._projectId}/resolve`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ query: finalQuery, top_k: finalTopK, threshold: finalThreshold }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Remote resolution failed: ${response.statusText}`);\n }\n\n const data = (await response.json()) as { results: ResolvedTool[] };\n const results = data.results;\n\n return this.formatResults(results, format);\n }\n\n // Embed the query\n const queryEmbedding = await this._embeddings.embed(finalQuery);\n\n // PRE_SEARCH hook\n let searchCtx = createContext(HookType.PRE_SEARCH, {\n query: finalQuery,\n queryEmbedding,\n topK: finalTopK,\n threshold: finalThreshold,\n });\n searchCtx = await this._hooks.run(HookType.PRE_SEARCH, searchCtx);\n\n // Search for matching tools with custom similarity/scoring\n const matches = this._vectorStore.search(\n queryEmbedding,\n finalTopK,\n finalThreshold,\n this._similarity,\n this._scoring\n );\n\n // POST_SEARCH hook\n let postSearchCtx = createContext(HookType.POST_SEARCH, {\n query: finalQuery,\n matches,\n });\n postSearchCtx = await this._hooks.run(HookType.POST_SEARCH, postSearchCtx);\n const finalMatches = (postSearchCtx.data.matches as typeof matches) ?? matches;\n\n // Convert to resolved tools\n const resolved: ResolvedTool[] = finalMatches.map((match) => ({\n name: match.tool.name,\n schema: toSchema(match.tool),\n score: match.score,\n handler: match.tool.handler,\n }));\n\n // Format output\n const results = this.formatResults(resolved, format);\n\n // POST_RESOLVE hook\n let postCtx = createContext(HookType.POST_RESOLVE, {\n query: finalQuery,\n results,\n resolved,\n });\n postCtx = await this._hooks.run(HookType.POST_RESOLVE, postCtx);\n\n return (postCtx.data.results as typeof results) ?? results;\n }\n\n /**\n * Format results based on format option\n */\n private formatResults(\n resolved: ResolvedTool[],\n format: ResolveFormat | ToolFormatter\n ): ResolvedTool[] | OpenAIToolSchema[] | AnthropicToolSchema[] | Record<string, unknown>[] {\n if (format === \"raw\") {\n return resolved;\n }\n\n if (typeof format === \"object\" && \"format\" in format) {\n // ToolFormatter instance\n return formatTools(resolved, format);\n }\n\n if (typeof format === \"string\") {\n // Check if it's a registered formatter\n if (hasFormatter(format)) {\n return formatTools(resolved, format);\n }\n\n // Built-in formats\n if (format === \"openai\") {\n return resolved.map((r) => ({\n type: \"function\" as const,\n function: r.schema,\n }));\n }\n\n if (format === \"anthropic\") {\n return resolved.map((r) => ({\n name: r.schema.name,\n description: r.schema.description,\n input_schema: r.schema.parameters,\n }));\n }\n\n throw new Error(`Unknown format: ${format}`);\n }\n\n return resolved;\n }\n\n /**\n * Resolve the single best matching tool\n */\n async resolveOne(\n query: string,\n threshold?: number\n ): Promise<ResolvedTool | null> {\n const results = await this.resolve(query, { topK: 1, threshold });\n return results.length > 0 ? (results[0] as ResolvedTool) : null;\n }\n\n /**\n * Get a registered tool by name\n */\n getTool(name: string): Tool | undefined {\n return this._vectorStore.get(name);\n }\n\n /**\n * List all registered tool names\n */\n listTools(): string[] {\n return this._vectorStore.getAll().map((t) => t.name);\n }\n\n /**\n * Number of registered tools\n */\n get toolCount(): number {\n return this._vectorStore.size + this._pendingTools.length;\n }\n\n /**\n * Execute a tool by name\n */\n async execute(\n toolName: string,\n params: Record<string, unknown>\n ): Promise<unknown> {\n const tool = this._vectorStore.get(toolName);\n if (!tool) {\n throw new Error(`Tool not found: ${toolName}`);\n }\n if (!tool.handler) {\n throw new Error(`Tool has no handler: ${toolName}`);\n }\n\n // PRE_EXECUTE hook\n let ctx = createContext(HookType.PRE_EXECUTE, {\n tool,\n toolName,\n params,\n });\n ctx = await this._hooks.run(HookType.PRE_EXECUTE, ctx);\n if (ctx.cancelled) {\n if (ctx.error) {\n throw ctx.error;\n }\n return null;\n }\n\n // Validate parameters if enabled\n if (this._validateOnExecute && this._validators) {\n const paramsResult = this._validators.validateParams(tool, params);\n if (!paramsResult.valid) {\n throw new ValidationError(paramsResult);\n }\n }\n\n // Execute the handler\n const result = await tool.handler(params);\n\n // Validate result if enabled\n if (this._validateOnExecute && this._validators) {\n const resultValidation = this._validators.validateResult(tool, result);\n if (!resultValidation.valid) {\n throw new ValidationError(resultValidation);\n }\n }\n\n // POST_EXECUTE hook\n let postCtx = createContext(HookType.POST_EXECUTE, {\n tool,\n toolName,\n params,\n result,\n });\n postCtx = await this._hooks.run(HookType.POST_EXECUTE, postCtx);\n\n return (postCtx.data.result as unknown) ?? result;\n }\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sis-tools",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Semantic Integration System - Intelligent tool resolution for LLMs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"bun": "./src/index.ts",
|
|
12
|
+
"import": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"default": "./dist/index.mjs"
|
|
15
|
+
},
|
|
16
|
+
"require": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"src"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsup",
|
|
28
|
+
"dev": "tsup --watch",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"test:watch": "vitest",
|
|
31
|
+
"test:coverage": "vitest run --coverage",
|
|
32
|
+
"test:bun": "bun test",
|
|
33
|
+
"typecheck": "tsc --noEmit",
|
|
34
|
+
"lint": "eslint src --ext .ts",
|
|
35
|
+
"prepublishOnly": "npm run build"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"llm",
|
|
39
|
+
"tools",
|
|
40
|
+
"mcp",
|
|
41
|
+
"semantic",
|
|
42
|
+
"embeddings",
|
|
43
|
+
"ai",
|
|
44
|
+
"function-calling",
|
|
45
|
+
"openai",
|
|
46
|
+
"anthropic",
|
|
47
|
+
"vector-search"
|
|
48
|
+
],
|
|
49
|
+
"author": "",
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "https://github.com/yourusername/sis.git"
|
|
54
|
+
},
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/yourusername/sis/issues"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://github.com/yourusername/sis#readme",
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/node": "^20.10.0",
|
|
61
|
+
"@vitest/coverage-v8": "^1.0.0",
|
|
62
|
+
"eslint": "^8.55.0",
|
|
63
|
+
"tsup": "^8.0.0",
|
|
64
|
+
"typescript": "^5.3.0",
|
|
65
|
+
"vitest": "^1.0.0"
|
|
66
|
+
},
|
|
67
|
+
"peerDependencies": {
|
|
68
|
+
"openai": ">=4.0.0",
|
|
69
|
+
"cohere-ai": ">=7.0.0",
|
|
70
|
+
"@google/generative-ai": ">=0.1.0"
|
|
71
|
+
},
|
|
72
|
+
"peerDependenciesMeta": {
|
|
73
|
+
"openai": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"cohere-ai": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
79
|
+
"@google/generative-ai": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"engines": {
|
|
84
|
+
"node": ">=18.0.0"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base embedding provider interface
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { ToolExample } from "../types";
|
|
6
|
+
|
|
7
|
+
export interface EmbeddingProvider {
|
|
8
|
+
/**
|
|
9
|
+
* Generate embedding for a single text
|
|
10
|
+
*/
|
|
11
|
+
embed(text: string): Promise<number[]>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Generate embeddings for multiple texts
|
|
15
|
+
*/
|
|
16
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The dimensionality of embeddings
|
|
20
|
+
*/
|
|
21
|
+
readonly dimensions: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Build the text representation of a tool for embedding
|
|
26
|
+
*/
|
|
27
|
+
export function buildToolText(
|
|
28
|
+
name: string,
|
|
29
|
+
description: string,
|
|
30
|
+
semanticHints?: string[],
|
|
31
|
+
examples?: ToolExample[]
|
|
32
|
+
): string {
|
|
33
|
+
const parts = [`${name}: ${description}`];
|
|
34
|
+
|
|
35
|
+
if (semanticHints?.length) {
|
|
36
|
+
parts.push(`Related: ${semanticHints.join(", ")}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (examples?.length) {
|
|
40
|
+
const queries = examples.map((ex) => ex.query).filter(Boolean);
|
|
41
|
+
if (queries.length) {
|
|
42
|
+
parts.push(`Examples: ${queries.join("; ")}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return parts.join(" | ");
|
|
47
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cohere embedding provider
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { EmbeddingProvider } from "./base";
|
|
6
|
+
|
|
7
|
+
interface CohereEmbeddingsOptions {
|
|
8
|
+
model?: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
inputType?: "search_query" | "search_document" | "classification" | "clustering";
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const DEFAULT_DIMENSIONS: Record<string, number> = {
|
|
14
|
+
"embed-english-v3.0": 1024,
|
|
15
|
+
"embed-multilingual-v3.0": 1024,
|
|
16
|
+
"embed-english-light-v3.0": 384,
|
|
17
|
+
"embed-multilingual-light-v3.0": 384,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export class CohereEmbeddings implements EmbeddingProvider {
|
|
21
|
+
private client: any | null = null;
|
|
22
|
+
private model: string;
|
|
23
|
+
private inputType: string;
|
|
24
|
+
private apiKey?: string;
|
|
25
|
+
readonly dimensions: number;
|
|
26
|
+
|
|
27
|
+
constructor(options: CohereEmbeddingsOptions = {}) {
|
|
28
|
+
const {
|
|
29
|
+
model = "embed-english-v3.0",
|
|
30
|
+
apiKey,
|
|
31
|
+
inputType = "search_query",
|
|
32
|
+
} = options;
|
|
33
|
+
|
|
34
|
+
this.model = model;
|
|
35
|
+
this.inputType = inputType;
|
|
36
|
+
this.apiKey = apiKey;
|
|
37
|
+
this.dimensions = DEFAULT_DIMENSIONS[model] ?? 1024;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private async ensureClient(): Promise<any> {
|
|
41
|
+
if (this.client) {
|
|
42
|
+
return this.client;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const mod: any = await import("cohere-ai");
|
|
47
|
+
const CohereClient = mod?.CohereClient ?? mod?.default?.CohereClient ?? mod?.default;
|
|
48
|
+
if (!CohereClient) {
|
|
49
|
+
throw new Error("CohereClient export not found");
|
|
50
|
+
}
|
|
51
|
+
this.client = new CohereClient({ token: this.apiKey });
|
|
52
|
+
return this.client;
|
|
53
|
+
} catch {
|
|
54
|
+
throw new Error(
|
|
55
|
+
"Cohere provider requires the cohere-ai package. Install with: npm install cohere-ai"
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async embed(text: string): Promise<number[]> {
|
|
61
|
+
const client = await this.ensureClient();
|
|
62
|
+
const response = await client.embed({
|
|
63
|
+
texts: [text],
|
|
64
|
+
model: this.model,
|
|
65
|
+
inputType: this.inputType,
|
|
66
|
+
});
|
|
67
|
+
return response.embeddings[0];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async embedBatch(texts: string[]): Promise<number[][]> {
|
|
71
|
+
const client = await this.ensureClient();
|
|
72
|
+
const response = await client.embed({
|
|
73
|
+
texts,
|
|
74
|
+
model: this.model,
|
|
75
|
+
inputType: this.inputType,
|
|
76
|
+
});
|
|
77
|
+
return response.embeddings;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google embedding provider
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { EmbeddingProvider } from "./base";
|
|
6
|
+
|
|
7
|
+
interface GoogleEmbeddingsOptions {
|
|
8
|
+
model?: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const DEFAULT_DIMENSIONS: Record<string, number> = {
|
|
13
|
+
"text-embedding-004": 768,
|
|
14
|
+
"text-embedding-preview-0815": 768,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export class GoogleEmbeddings implements EmbeddingProvider {
|
|
18
|
+
private client: any | null = null;
|
|
19
|
+
private model: string;
|
|
20
|
+
private apiKey?: string;
|
|
21
|
+
readonly dimensions: number;
|
|
22
|
+
|
|
23
|
+
constructor(options: GoogleEmbeddingsOptions = {}) {
|
|
24
|
+
const { model = "text-embedding-004", apiKey } = options;
|
|
25
|
+
|
|
26
|
+
this.model = model;
|
|
27
|
+
this.apiKey = apiKey;
|
|
28
|
+
this.dimensions = DEFAULT_DIMENSIONS[model] ?? 768;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private async ensureClient(): Promise<any> {
|
|
32
|
+
if (this.client) {
|
|
33
|
+
return this.client;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
const mod: any = await import("@google/generative-ai");
|
|
38
|
+
const GoogleGenerativeAI =
|
|
39
|
+
mod?.GoogleGenerativeAI ?? mod?.default?.GoogleGenerativeAI ?? mod?.default;
|
|
40
|
+
if (!GoogleGenerativeAI) {
|
|
41
|
+
throw new Error("GoogleGenerativeAI export not found");
|
|
42
|
+
}
|
|
43
|
+
this.client = new GoogleGenerativeAI(this.apiKey || process.env.GOOGLE_API_KEY);
|
|
44
|
+
return this.client;
|
|
45
|
+
} catch {
|
|
46
|
+
throw new Error(
|
|
47
|
+
"Google provider requires @google/generative-ai. Install with: npm install @google/generative-ai"
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async embed(text: string): Promise<number[]> {
|
|
53
|
+
const client = await this.ensureClient();
|
|
54
|
+
const model = client.getGenerativeModel({ model: this.model });
|
|
55
|
+
const result = await model.embedContent(text);
|
|
56
|
+
return result.embedding.values;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async embedBatch(texts: string[]): Promise<number[][]> {
|
|
60
|
+
const client = await this.ensureClient();
|
|
61
|
+
const model = client.getGenerativeModel({ model: this.model });
|
|
62
|
+
const results = await Promise.all(
|
|
63
|
+
texts.map((text) => model.embedContent(text))
|
|
64
|
+
);
|
|
65
|
+
return results.map((r: any) => r.embedding.values);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding providers for SIS
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export { type EmbeddingProvider, buildToolText } from "./base";
|
|
6
|
+
export { OpenAIEmbeddings } from "./openai";
|
|
7
|
+
export { CohereEmbeddings } from "./cohere";
|
|
8
|
+
export { GoogleEmbeddings } from "./google";
|
|
9
|
+
|
|
10
|
+
import type { EmbeddingProvider } from "./base";
|
|
11
|
+
import { OpenAIEmbeddings } from "./openai";
|
|
12
|
+
import { CohereEmbeddings } from "./cohere";
|
|
13
|
+
import { GoogleEmbeddings } from "./google";
|
|
14
|
+
|
|
15
|
+
export type ProviderName = "openai" | "cohere" | "google";
|
|
16
|
+
|
|
17
|
+
export interface ProviderOptions {
|
|
18
|
+
model?: string;
|
|
19
|
+
apiKey?: string;
|
|
20
|
+
dimensions?: number;
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Factory to get an embedding provider by name
|
|
26
|
+
*/
|
|
27
|
+
export function getProvider(
|
|
28
|
+
name: ProviderName,
|
|
29
|
+
options: ProviderOptions = {}
|
|
30
|
+
): EmbeddingProvider {
|
|
31
|
+
switch (name) {
|
|
32
|
+
case "openai":
|
|
33
|
+
return new OpenAIEmbeddings(options);
|
|
34
|
+
case "cohere":
|
|
35
|
+
return new CohereEmbeddings(options);
|
|
36
|
+
case "google":
|
|
37
|
+
return new GoogleEmbeddings(options);
|
|
38
|
+
default:
|
|
39
|
+
throw new Error(
|
|
40
|
+
`Unknown provider: ${name}. Available: openai, cohere, google`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|