@stacksjs/ai 0.75.337 → 0.75.341

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.
@@ -0,0 +1,5 @@
1
+ import type { SearchDocument, SearchResult } from './search';
2
+ /** Split private text before persistence, without a provider request or hidden truncation. */
3
+ export declare function chunkDocument(document: SearchDocument, options?: { size?: number, overlap?: number }): SearchDocument[];
4
+ /** BM25 retrieval over an already authorized corpus. Callers own tenant filtering. */
5
+ export declare function searchDocuments(query: string, documents: SearchDocument[], options?: { topK?: number, maxCharacters?: number }): SearchResult[];
@@ -0,0 +1 @@
1
+ export function chunkDocument(document,options={}){const{size=1600,overlap=160}=options;if(!Number.isSafeInteger(size)||size<64||!Number.isSafeInteger(overlap)||overlap<0||overlap>=size)throw TypeError("Document size must be at least 64 and overlap must be smaller than size");const chunks=[];for(let start=0;start<document.content.length;){let end=Math.min(start+size,document.content.length);if(end<document.content.length){const boundary=document.content.lastIndexOf(" ",end);if(boundary>start+size/2)end=boundary;const code=document.content.charCodeAt(end-1);if(code>=55296&&code<=56319)end--}const content=document.content.slice(start,end).trim();if(content)chunks.push({id:`${document.id}:${chunks.length}`,content,metadata:{...document.metadata,sourceId:document.id,start,end}});if(end===document.content.length)break;start=Math.max(start+1,end-overlap);const code=document.content.charCodeAt(start);if(code>=56320&&code<=57343)start++}return chunks}function tokens(text){return text.normalize("NFKC").toLowerCase().match(/[\p{L}\p{N}]+/gu)??[]}export function searchDocuments(query,documents,options={}){const{topK=5,maxCharacters=12000}=options;if(!Number.isSafeInteger(topK)||topK<1||!Number.isSafeInteger(maxCharacters)||maxCharacters<1)throw TypeError("Retrieval limits must be positive integers");if(!documents.length)return[];const terms=[...new Set(tokens(query))].slice(0,128);if(!terms.length)return[];const corpus=documents.map((document)=>{const words=tokens(document.content),frequencies=new Map;for(const word of words)frequencies.set(word,(frequencies.get(word)??0)+1);return{document,length:words.length,frequencies}}),average=corpus.reduce((sum,entry)=>sum+entry.length,0)/corpus.length||1,counts=new Map(terms.map((term)=>[term,corpus.filter((entry)=>entry.frequencies.has(term)).length])),scored=corpus.map((entry)=>{let score=0;for(const term of terms){const frequency=entry.frequencies.get(term)??0;if(!frequency)continue;const count=counts.get(term),inverse=Math.log(1+(corpus.length-count+0.5)/(count+0.5));score+=inverse*frequency*2.2/(frequency+1.2*(0.25+0.75*entry.length/average))}return{document:entry.document,score}}).filter((entry)=>entry.score>0).sort((a,b)=>b.score-a.score||a.document.id.localeCompare(b.document.id)),results=[];let remaining=maxCharacters;for(const entry of scored){if(entry.document.content.length>remaining)continue;results.push({...entry,rank:results.length+1});remaining-=entry.document.content.length;if(results.length===topK)break}return results}
package/dist/index.d.ts CHANGED
@@ -21,6 +21,7 @@ export * from './image';
21
21
  export * from './speech';
22
22
  // Semantic search, embeddings & RAG
23
23
  export * from './search';
24
+ export * from './documents';
24
25
  // Personalization, sentiment & classification
25
26
  export * from './personalization';
26
27
  // Model Context Protocol (MCP) client
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export*from"./types";export*from"./drivers";export*from"./client";export*from"./agents";export*from"./buddy";export*from"./context";export*from"./text";export*from"./image";export*from"./speech";export*from"./search";export*from"./personalization";export*from"./mcp";export*from"./mcp-server";export*from"./models";export*from"./utils/client-bedrock";export*from"./utils/client-bedrock-runtime";export{buildMessageWithImages,normalizeMessagesForProvider}from"./utils/vision";export{assistantTurn,toolResultsTurn}from"./utils/tools";export{fetchWithRetry}from"./utils/retry";export{clearUsageReporters,listUsageReporters,onUsage,recordUsage}from"./utils/usage";export{estimateMessageTokens,estimateTokens,sanitizePrompt}from"./utils/tokens";export*from"./utils/model-access";
1
+ export*from"./types";export*from"./drivers";export*from"./client";export*from"./agents";export*from"./buddy";export*from"./context";export*from"./text";export*from"./image";export*from"./speech";export*from"./search";export*from"./documents";export*from"./personalization";export*from"./mcp";export*from"./mcp-server";export*from"./models";export*from"./utils/client-bedrock";export*from"./utils/client-bedrock-runtime";export{buildMessageWithImages,normalizeMessagesForProvider}from"./utils/vision";export{assistantTurn,toolResultsTurn}from"./utils/tools";export{fetchWithRetry}from"./utils/retry";export{clearUsageReporters,listUsageReporters,onUsage,recordUsage}from"./utils/usage";export{estimateMessageTokens,estimateTokens,sanitizePrompt}from"./utils/tokens";export*from"./utils/model-access";
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/ai",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.75.337",
5
+ "version": "0.75.341",
6
6
  "description": "Stacks Artificial Intelligence.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -65,10 +65,10 @@
65
65
  "prepublishOnly": "bun run build"
66
66
  },
67
67
  "dependencies": {
68
- "@stacksjs/cli": "0.75.337",
69
- "@stacksjs/config": "0.75.337",
70
- "@stacksjs/router": "0.75.337",
71
- "@stacksjs/storage": "0.75.337",
68
+ "@stacksjs/cli": "0.75.341",
69
+ "@stacksjs/config": "0.75.341",
70
+ "@stacksjs/router": "0.75.341",
71
+ "@stacksjs/storage": "0.75.341",
72
72
  "@stacksjs/ts-cloud": "^0.16.69"
73
73
  },
74
74
  "peerDependencies": {