@waniwani/sdk 0.1.20-beta.25 → 0.1.20-beta.26

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.
@@ -37,6 +37,14 @@ interface KnowledgeBase {
37
37
  declare function chunkMarkdown(filename: string, content: string): Omit<Chunk, "embedding">[];
38
38
  declare function generateEmbeddings(options: GenerateEmbeddingsOptions): Promise<void>;
39
39
 
40
- declare function loadKnowledgeBase(embeddingsPath: string): KnowledgeBase;
40
+ /**
41
+ * Create a knowledge base instance from pre-loaded embeddings data.
42
+ *
43
+ * ```typescript
44
+ * import embeddings from "./embeddings.json";
45
+ * const kb = loadKnowledgeBase(embeddings);
46
+ * ```
47
+ */
48
+ declare function loadKnowledgeBase(source: EmbeddingsFile): KnowledgeBase;
41
49
 
42
50
  export { type Chunk, type EmbeddingsFile, type GenerateEmbeddingsOptions, type KnowledgeBase, type SearchResult, chunkMarkdown, generateEmbeddings, loadKnowledgeBase };
package/dist/kb/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import{readdir as f,readFile as b,writeFile as k}from"fs/promises";import{join as $}from"path";import{embedMany as E}from"ai";var w="openai/text-embedding-3-small",y=512;function p(o,t){let l=t.split(`
2
- `),i=[],r=t.match(/^# (.+)$/m)?.[1]??o.replace(".md",""),n=r,s=[],d=0;for(let e of l){if(e.match(/^# /))continue;let c=e.match(/^## (.+)$/);if(c){if(s.length>0){let g=s.join(`
3
- `).trim();g&&(i.push({id:`${o.replace(".md","")}#${d}`,source:o,heading:n,content:`${r}: ${n}
1
+ import{readdir as b,readFile as f,writeFile as k}from"fs/promises";import{join as $}from"path";import{embedMany as w}from"ai";var E="openai/text-embedding-3-small",y=512;function p(o,d){let a=d.split(`
2
+ `),i=[],s=d.match(/^# (.+)$/m)?.[1]??o.replace(".md",""),n=s,r=[],c=0;for(let e of a){if(e.match(/^# /))continue;let m=e.match(/^## (.+)$/);if(m){if(r.length>0){let g=r.join(`
3
+ `).trim();g&&(i.push({id:`${o.replace(".md","")}#${c}`,source:o,heading:n,content:`${s}: ${n}
4
4
 
5
- ${g}`}),d++)}n=c[1],s=[]}else s.push(e)}let m=s.join(`
6
- `).trim();return m&&i.push({id:`${o.replace(".md","")}#${d}`,source:o,heading:n,content:`${r}: ${n}
5
+ ${g}`}),c++)}n=m[1],r=[]}else r.push(e)}let t=r.join(`
6
+ `).trim();return t&&i.push({id:`${o.replace(".md","")}#${c}`,source:o,heading:n,content:`${s}: ${n}
7
7
 
8
- ${m}`}),i}async function F(o){let{knowledgeDir:t,outputPath:l,model:i=w,dimensions:a=y}=o,r=(await f(t)).filter(e=>e.endsWith(".md"));console.log(`Found ${r.length} knowledge files`);let n=[];for(let e of r){let c=await b($(t,e),"utf-8"),g=p(e,c);n.push(...g),console.log(` ${e}: ${g.length} chunk(s)`)}console.log(`
9
- Total chunks: ${n.length}`),console.log(`Generating embeddings with ${i}...`);let{embeddings:s}=await E({model:i,values:n.map(e=>e.content),providerOptions:{openai:{dimensions:a}}}),d=n.map((e,c)=>({...e,embedding:s[c]})),m={model:i,dimensions:a,generatedAt:new Date().toISOString(),chunks:d};await k(l,JSON.stringify(m)),console.log(`
10
- Written ${l} (${d.length} chunks)`)}import{readFileSync as O}from"fs";import{cosineSimilarity as S,embed as x}from"ai";function C(o){let t=null;function l(){return t||(t=JSON.parse(O(o,"utf-8")),t)}return{get chunkCount(){return l().chunks.length},async search(i,a=5){let{model:r,dimensions:n,chunks:s}=l(),{embedding:d}=await x({model:r,value:i,...n&&{providerOptions:{openai:{dimensions:n}}}});return s.map(e=>({source:e.source,heading:e.heading,content:e.content,score:S(d,e.embedding)})).sort((e,c)=>c.score-e.score).slice(0,a)}}}export{p as chunkMarkdown,F as generateEmbeddings,C as loadKnowledgeBase};
8
+ ${t}`}),i}async function O(o){let{knowledgeDir:d,outputPath:a,model:i=E,dimensions:l=y}=o,s=(await b(d)).filter(e=>e.endsWith(".md"));console.log(`Found ${s.length} knowledge files`);let n=[];for(let e of s){let m=await f($(d,e),"utf-8"),g=p(e,m);n.push(...g),console.log(` ${e}: ${g.length} chunk(s)`)}console.log(`
9
+ Total chunks: ${n.length}`),console.log(`Generating embeddings with ${i}...`);let{embeddings:r}=await w({model:i,values:n.map(e=>e.content),providerOptions:{openai:{dimensions:l}}}),c=n.map((e,m)=>({...e,embedding:r[m]})),t={model:i,dimensions:l,generatedAt:new Date().toISOString(),chunks:c};await k(a,JSON.stringify(t)),console.log(`
10
+ Written ${a} (${c.length} chunks)`)}import{cosineSimilarity as F,embed as x}from"ai";function C(o){function d(){return o}return{get chunkCount(){return d().chunks.length},async search(a,i=5){let{model:l,dimensions:s,chunks:n}=d(),{embedding:r}=await x({model:l,value:a,...s&&{providerOptions:{openai:{dimensions:s}}}});return n.map(t=>({source:t.source,heading:t.heading,content:t.content,score:F(r,t.embedding)})).sort((t,e)=>e.score-t.score).slice(0,i)}}}export{p as chunkMarkdown,O as generateEmbeddings,C as loadKnowledgeBase};
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/kb/embed.ts","../../src/kb/search.ts"],"sourcesContent":["import { readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { embedMany } from \"ai\";\nimport type { Chunk, EmbeddingsFile, GenerateEmbeddingsOptions } from \"./types\";\n\nconst DEFAULT_MODEL = \"openai/text-embedding-3-small\";\nconst DEFAULT_DIMENSIONS = 512;\n\nexport function chunkMarkdown(\n\tfilename: string,\n\tcontent: string,\n): Omit<Chunk, \"embedding\">[] {\n\tconst lines = content.split(\"\\n\");\n\tconst chunks: Omit<Chunk, \"embedding\">[] = [];\n\n\tconst h1Match = content.match(/^# (.+)$/m);\n\tconst title = h1Match?.[1] ?? filename.replace(\".md\", \"\");\n\n\tlet currentHeading = title;\n\tlet currentContent: string[] = [];\n\tlet chunkIndex = 0;\n\n\tfor (const line of lines) {\n\t\tif (line.match(/^# /)) continue;\n\n\t\tconst h2Match = line.match(/^## (.+)$/);\n\t\tif (h2Match) {\n\t\t\tif (currentContent.length > 0) {\n\t\t\t\tconst text = currentContent.join(\"\\n\").trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tchunks.push({\n\t\t\t\t\t\tid: `${filename.replace(\".md\", \"\")}#${chunkIndex}`,\n\t\t\t\t\t\tsource: filename,\n\t\t\t\t\t\theading: currentHeading,\n\t\t\t\t\t\tcontent: `${title}: ${currentHeading}\\n\\n${text}`,\n\t\t\t\t\t});\n\t\t\t\t\tchunkIndex++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentHeading = h2Match[1];\n\t\t\tcurrentContent = [];\n\t\t} else {\n\t\t\tcurrentContent.push(line);\n\t\t}\n\t}\n\n\tconst text = currentContent.join(\"\\n\").trim();\n\tif (text) {\n\t\tchunks.push({\n\t\t\tid: `${filename.replace(\".md\", \"\")}#${chunkIndex}`,\n\t\t\tsource: filename,\n\t\t\theading: currentHeading,\n\t\t\tcontent: `${title}: ${currentHeading}\\n\\n${text}`,\n\t\t});\n\t}\n\n\treturn chunks;\n}\n\nexport async function generateEmbeddings(\n\toptions: GenerateEmbeddingsOptions,\n): Promise<void> {\n\tconst {\n\t\tknowledgeDir,\n\t\toutputPath,\n\t\tmodel = DEFAULT_MODEL,\n\t\tdimensions = DEFAULT_DIMENSIONS,\n\t} = options;\n\n\tconst files = (await readdir(knowledgeDir)).filter((f) => f.endsWith(\".md\"));\n\tconsole.log(`Found ${files.length} knowledge files`);\n\n\tconst allChunks: Omit<Chunk, \"embedding\">[] = [];\n\tfor (const file of files) {\n\t\tconst content = await readFile(join(knowledgeDir, file), \"utf-8\");\n\t\tconst chunks = chunkMarkdown(file, content);\n\t\tallChunks.push(...chunks);\n\t\tconsole.log(` ${file}: ${chunks.length} chunk(s)`);\n\t}\n\n\tconsole.log(`\\nTotal chunks: ${allChunks.length}`);\n\tconsole.log(`Generating embeddings with ${model}...`);\n\n\tconst { embeddings } = await embedMany({\n\t\tmodel,\n\t\tvalues: allChunks.map((c) => c.content),\n\t\tproviderOptions: { openai: { dimensions } },\n\t});\n\n\tconst chunks: Chunk[] = allChunks.map((chunk, i) => ({\n\t\t...chunk,\n\t\tembedding: embeddings[i],\n\t}));\n\n\tconst output: EmbeddingsFile = {\n\t\tmodel,\n\t\tdimensions,\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tchunks,\n\t};\n\n\tawait writeFile(outputPath, JSON.stringify(output));\n\tconsole.log(`\\nWritten ${outputPath} (${chunks.length} chunks)`);\n}\n","import { readFileSync } from \"node:fs\";\nimport { cosineSimilarity, embed } from \"ai\";\nimport type { EmbeddingsFile, KnowledgeBase, SearchResult } from \"./types\";\n\nexport function loadKnowledgeBase(embeddingsPath: string): KnowledgeBase {\n\tlet cached: EmbeddingsFile | null = null;\n\n\tfunction getEmbeddings(): EmbeddingsFile {\n\t\tif (cached) return cached;\n\t\tcached = JSON.parse(\n\t\t\treadFileSync(embeddingsPath, \"utf-8\"),\n\t\t) as EmbeddingsFile;\n\t\treturn cached;\n\t}\n\n\treturn {\n\t\tget chunkCount() {\n\t\t\treturn getEmbeddings().chunks.length;\n\t\t},\n\n\t\tasync search(query: string, topK = 5): Promise<SearchResult[]> {\n\t\t\tconst { model, dimensions, chunks } = getEmbeddings();\n\n\t\t\tconst { embedding: queryEmbedding } = await embed({\n\t\t\t\tmodel,\n\t\t\t\tvalue: query,\n\t\t\t\t...(dimensions && {\n\t\t\t\t\tproviderOptions: { openai: { dimensions } },\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst scored = chunks.map((chunk) => ({\n\t\t\t\tsource: chunk.source,\n\t\t\t\theading: chunk.heading,\n\t\t\t\tcontent: chunk.content,\n\t\t\t\tscore: cosineSimilarity(queryEmbedding, chunk.embedding),\n\t\t\t}));\n\n\t\t\treturn scored.sort((a, b) => b.score - a.score).slice(0, topK);\n\t\t},\n\t};\n}\n"],"mappings":"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","names":["readdir","readFile","writeFile","join","embedMany","DEFAULT_MODEL","DEFAULT_DIMENSIONS","chunkMarkdown","filename","content","lines","chunks","title","currentHeading","currentContent","chunkIndex","line","h2Match","text","generateEmbeddings","options","knowledgeDir","outputPath","model","dimensions","files","f","allChunks","file","embeddings","c","chunk","i","output","readFileSync","cosineSimilarity","embed","loadKnowledgeBase","embeddingsPath","cached","getEmbeddings","query","topK","model","dimensions","chunks","queryEmbedding","chunk","a","b"]}
1
+ {"version":3,"sources":["../../src/kb/embed.ts","../../src/kb/search.ts"],"sourcesContent":["import { readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { embedMany } from \"ai\";\nimport type { Chunk, EmbeddingsFile, GenerateEmbeddingsOptions } from \"./types\";\n\nconst DEFAULT_MODEL = \"openai/text-embedding-3-small\";\nconst DEFAULT_DIMENSIONS = 512;\n\nexport function chunkMarkdown(\n\tfilename: string,\n\tcontent: string,\n): Omit<Chunk, \"embedding\">[] {\n\tconst lines = content.split(\"\\n\");\n\tconst chunks: Omit<Chunk, \"embedding\">[] = [];\n\n\tconst h1Match = content.match(/^# (.+)$/m);\n\tconst title = h1Match?.[1] ?? filename.replace(\".md\", \"\");\n\n\tlet currentHeading = title;\n\tlet currentContent: string[] = [];\n\tlet chunkIndex = 0;\n\n\tfor (const line of lines) {\n\t\tif (line.match(/^# /)) continue;\n\n\t\tconst h2Match = line.match(/^## (.+)$/);\n\t\tif (h2Match) {\n\t\t\tif (currentContent.length > 0) {\n\t\t\t\tconst text = currentContent.join(\"\\n\").trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tchunks.push({\n\t\t\t\t\t\tid: `${filename.replace(\".md\", \"\")}#${chunkIndex}`,\n\t\t\t\t\t\tsource: filename,\n\t\t\t\t\t\theading: currentHeading,\n\t\t\t\t\t\tcontent: `${title}: ${currentHeading}\\n\\n${text}`,\n\t\t\t\t\t});\n\t\t\t\t\tchunkIndex++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentHeading = h2Match[1];\n\t\t\tcurrentContent = [];\n\t\t} else {\n\t\t\tcurrentContent.push(line);\n\t\t}\n\t}\n\n\tconst text = currentContent.join(\"\\n\").trim();\n\tif (text) {\n\t\tchunks.push({\n\t\t\tid: `${filename.replace(\".md\", \"\")}#${chunkIndex}`,\n\t\t\tsource: filename,\n\t\t\theading: currentHeading,\n\t\t\tcontent: `${title}: ${currentHeading}\\n\\n${text}`,\n\t\t});\n\t}\n\n\treturn chunks;\n}\n\nexport async function generateEmbeddings(\n\toptions: GenerateEmbeddingsOptions,\n): Promise<void> {\n\tconst {\n\t\tknowledgeDir,\n\t\toutputPath,\n\t\tmodel = DEFAULT_MODEL,\n\t\tdimensions = DEFAULT_DIMENSIONS,\n\t} = options;\n\n\tconst files = (await readdir(knowledgeDir)).filter((f) => f.endsWith(\".md\"));\n\tconsole.log(`Found ${files.length} knowledge files`);\n\n\tconst allChunks: Omit<Chunk, \"embedding\">[] = [];\n\tfor (const file of files) {\n\t\tconst content = await readFile(join(knowledgeDir, file), \"utf-8\");\n\t\tconst chunks = chunkMarkdown(file, content);\n\t\tallChunks.push(...chunks);\n\t\tconsole.log(` ${file}: ${chunks.length} chunk(s)`);\n\t}\n\n\tconsole.log(`\\nTotal chunks: ${allChunks.length}`);\n\tconsole.log(`Generating embeddings with ${model}...`);\n\n\tconst { embeddings } = await embedMany({\n\t\tmodel,\n\t\tvalues: allChunks.map((c) => c.content),\n\t\tproviderOptions: { openai: { dimensions } },\n\t});\n\n\tconst chunks: Chunk[] = allChunks.map((chunk, i) => ({\n\t\t...chunk,\n\t\tembedding: embeddings[i],\n\t}));\n\n\tconst output: EmbeddingsFile = {\n\t\tmodel,\n\t\tdimensions,\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tchunks,\n\t};\n\n\tawait writeFile(outputPath, JSON.stringify(output));\n\tconsole.log(`\\nWritten ${outputPath} (${chunks.length} chunks)`);\n}\n","import { cosineSimilarity, embed } from \"ai\";\nimport type { EmbeddingsFile, KnowledgeBase, SearchResult } from \"./types\";\n\n/**\n * Create a knowledge base instance from pre-loaded embeddings data.\n *\n * ```typescript\n * import embeddings from \"./embeddings.json\";\n * const kb = loadKnowledgeBase(embeddings);\n * ```\n */\nexport function loadKnowledgeBase(source: EmbeddingsFile): KnowledgeBase {\n\tfunction getEmbeddings(): EmbeddingsFile {\n\t\treturn source;\n\t}\n\n\treturn {\n\t\tget chunkCount() {\n\t\t\treturn getEmbeddings().chunks.length;\n\t\t},\n\n\t\tasync search(query: string, topK = 5): Promise<SearchResult[]> {\n\t\t\tconst { model, dimensions, chunks } = getEmbeddings();\n\n\t\t\tconst { embedding: queryEmbedding } = await embed({\n\t\t\t\tmodel,\n\t\t\t\tvalue: query,\n\t\t\t\t...(dimensions && {\n\t\t\t\t\tproviderOptions: { openai: { dimensions } },\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst scored = chunks.map((chunk) => ({\n\t\t\t\tsource: chunk.source,\n\t\t\t\theading: chunk.heading,\n\t\t\t\tcontent: chunk.content,\n\t\t\t\tscore: cosineSimilarity(queryEmbedding, chunk.embedding),\n\t\t\t}));\n\n\t\t\treturn scored.sort((a, b) => b.score - a.score).slice(0, topK);\n\t\t},\n\t};\n}\n"],"mappings":"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","names":["readdir","readFile","writeFile","join","embedMany","DEFAULT_MODEL","DEFAULT_DIMENSIONS","chunkMarkdown","filename","content","lines","chunks","title","currentHeading","currentContent","chunkIndex","line","h2Match","text","generateEmbeddings","options","knowledgeDir","outputPath","model","dimensions","files","f","allChunks","file","embeddings","c","chunk","i","output","cosineSimilarity","embed","loadKnowledgeBase","source","getEmbeddings","query","topK","model","dimensions","chunks","queryEmbedding","chunk","a","b"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waniwani/sdk",
3
- "version": "0.1.20-beta.25",
3
+ "version": "0.1.20-beta.26",
4
4
  "description": "WaniWani SDK - MCP event tracking, widget framework, and tools",
5
5
  "type": "module",
6
6
  "exports": {