@versini/sassysaint-common 4.35.0 → 4.37.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.d.ts CHANGED
@@ -395,6 +395,21 @@ export declare function isReasoningModel(model: string): boolean;
395
395
  */
396
396
  export declare const MAX_OUTPUT_TOKENS = 16384;
397
397
 
398
+ export declare const MAX_SEARCH_QUERIES = 5;
399
+
400
+ export declare const MODEL_AUTO_ROUTER_ANTHROPIC = "claude-haiku-4-5";
401
+
402
+ export declare const MODEL_AUTO_ROUTER_GOOGLE = "gemini-3-flash-preview";
403
+
404
+ /**
405
+ * Classifier models used by the Auto routing feature. One per real provider
406
+ * to preserve brand-loyalty (Anthropic-preferred users get an Anthropic
407
+ * classifier, etc.) and to let provider-native prompt caching hit on the
408
+ * classifier system prompt. Aliases of existing cheap models — adding
409
+ * dedicated constants makes the intent explicit at the classifier call site.
410
+ */
411
+ export declare const MODEL_AUTO_ROUTER_OPENAI = "gpt-5.4-nano";
412
+
398
413
  export declare const MODEL_CHAT_SUMMARY = "gpt-5.4-nano";
399
414
 
400
415
  export declare const MODEL_CLAUDE_HAIKU = "claude-haiku-4-5";
@@ -432,6 +447,8 @@ export declare const MODEL_GPT5_NANO = "gpt-5.4-nano";
432
447
 
433
448
  export declare const MODEL_MEMORY_INFERENCE = "gpt-5.4-nano";
434
449
 
450
+ export declare const MODEL_SEARCH_DECOMPOSER = "gpt-5.4-mini";
451
+
435
452
  export declare const MODEL_SONAR = "sonar";
436
453
 
437
454
  export declare const MODEL_SONAR_PRO = "sonar-pro";
@@ -468,6 +485,15 @@ export declare const PLAN_PREMIUM = "sassy:advanced";
468
485
 
469
486
  export declare const PROVIDER_ANTHROPIC = "Anthropic";
470
487
 
488
+ /**
489
+ * Pseudo-provider value exposed in the UI for the Auto routing feature. When
490
+ * a request carries `provider: "Auto"`, the server resolves it to a real
491
+ * provider via `resolveEffectiveProvider` BEFORE any enum-keyed lookup
492
+ * (`MODELS_PER_PROVIDER`, `PROVIDER_ROLE_MAP`, `getModel` branches). This
493
+ * value MUST NOT appear in those maps.
494
+ */
495
+ export declare const PROVIDER_AUTO = "Auto";
496
+
471
497
  export declare const PROVIDER_GOOGLE = "Google";
472
498
 
473
499
  export declare const PROVIDER_MEMORY = "Memory";
@@ -496,6 +522,15 @@ export declare const PROVIDER_ROLE_MAP: {
496
522
 
497
523
  export declare const PROVIDER_SUMMARY = "Summary";
498
524
 
525
+ /**
526
+ * Type of a real, SDK-instantiable provider. Use this as the parameter type on
527
+ * any function that performs enum-keyed lookups against `MODELS_PER_PROVIDER`,
528
+ * `PROVIDER_ROLE_MAP`, or provider-branched logic. The compiler rejects
529
+ * passing `PROVIDER_AUTO` here, preventing the pseudo-provider crash class at
530
+ * build time. Runtime guards stay as backup for any `as any` escape hatches.
531
+ */
532
+ export declare type RealProvider = typeof PROVIDER_OPENAI | typeof PROVIDER_ANTHROPIC | typeof PROVIDER_GOOGLE | typeof PROVIDER_MISTRAL;
533
+
499
534
  export declare const ROLE_ASSISTANT = "assistant";
500
535
 
501
536
  /**
@@ -505,6 +540,8 @@ export declare const ROLE_SYSTEM = "system";
505
540
 
506
541
  export declare const ROLE_USER = "user";
507
542
 
543
+ export declare const SEARCH_QUERY_TIMEOUT_MS = 10000;
544
+
508
545
  /**
509
546
  * Sort capabilities are shared across client and server.
510
547
  */
@@ -549,4 +586,11 @@ export declare interface ThemePalette {
549
586
  */
550
587
  export declare const TOOL_LOADING_LABELS: Record<string, string>;
551
588
 
589
+ /**
590
+ * Type of a provider value as it may arrive from the client in a request body.
591
+ * Includes the Auto pseudo-value. `resolveEffectiveProvider` is the single
592
+ * authoritative function for mapping `UserFacingProvider` to `RealProvider`.
593
+ */
594
+ export declare type UserFacingProvider = RealProvider | typeof PROVIDER_AUTO;
595
+
552
596
  export { }
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- let e="standard";var t,E=((t={})[t.NewChat=0]="NewChat",t[t.Prompts=1]="Prompts",t[t.Attachment=2]="Attachment",t[t.PrivateChat=3]="PrivateChat",t[t.Reasoning=4]="Reasoning",t[t.Send=5]="Send",t[t.Header=6]="Header",t[t.Provider=7]="Provider",t[t.Logo=8]="Logo",t[t.Placeholder=9]="Placeholder",t[t.Footer=10]="Footer",t);let n="system",r="user",a="assistant",O="OpenAI",i="Anthropic",o="Google",T="Summary",s="Memory",_="Perplexity",R="Mistral",A=O,L=[O,i,o],l="gpt-5.4",I="gpt-5.4-mini",M="gpt-5.4-nano",P="gpt-4.1-nano",S="claude-opus-4-6",g="claude-sonnet-4-6",N="claude-haiku-4-5",D="gemini-3-flash-preview",d="gemini-3.1-pro-preview",u="sonar",c="sonar-pro",h="openai/gpt-oss-20b:free",C="mistral-large-latest",p="gpt-5.4-nano",G="gpt-5.4-nano",m="text-embedding-3-small",U="gemini-3-pro-image-preview",H={[l]:"GPT-5.4",[I]:"GPT-5.4 Mini",[M]:"GPT-5.4 Nano",[P]:"GPT-4.1 Nano",[S]:"Claude Opus 4.6",[g]:"Claude Sonnet 4.6",[N]:"Claude Haiku 4.5",[d]:"Gemini 3.1 Pro",[D]:"Gemini 3 Flash",[u]:"Sonar",[c]:"Sonar Pro",[U]:"Nano Banana 3 Pro",[C]:"Mistral Large"},f=[l,I,M,S,g,N,D,d,U],y=[l,I,M,S,g,d],B={[O]:[P,l,I,M],[i]:[S,N,g],[o]:[D,d],[_]:[u,c]},v={[O]:[n,r,a],[i]:[r,a],[T]:[r,a],[s]:[r,a],[o]:[r,a],[_]:[r,a],[R]:[r,a]},F={[i]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[O]:["gpt-","o3","o4"],[o]:["gemini"],[_]:["sonar"],[R]:["mistral"]},w="x-diggidy-chat-id",b="x-diggidy-chat-timestamp",Y="timestamp",V="tokenUsage",k="Diggidy",x="sassy:basic",W="sassy:plus",X="sassy:advanced",z={TOOL:{BARCODE:"getProductByBarcode",BUNDLESIZE:"getBundleSize",DATETIME:"getDateTime",GENERATE_IMAGE:"generateImage",IMAGES:"getImages",NUTRITION_FACTS:"getNutritionFacts",POLLUTION:"getAirPollution",WEATHER:"getWeather",URLCONTENTPARSER:"getUrlContent",MEMORIES:"getUserMemories",HUMANIZE:"humanize",WEBSEARCH:"getWebSearch",GITREPOSITORY:"getGitRepoDetails",HOTELS:"getHotelDetails",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings"},ADDON:{ATTACHMENTS:"addon:attachments",REASONING:"addon:reasoning",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},K={web_search:"Searching the web...",code_interpreter:"Running code...",[z.TOOL.WEATHER]:"Checking the weather...",[z.TOOL.POLLUTION]:"Fetching air pollution data...",[z.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[z.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[z.TOOL.WEBSEARCH]:"Searching the web...",[z.TOOL.GITREPOSITORY]:"Looking up repository...",[z.TOOL.HOTELS]:"Searching for hotels...",[z.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[z.TOOL.GENERATE_IMAGE]:"Generating image...",[z.TOOL.BARCODE]:"Looking up product...",[z.TOOL.PRONUNCIATION]:"Generating pronunciation...",[z.TOOL.HUMANIZE]:"Rewriting text...",[z.TOOL.IMAGES]:"Searching for images..."},Z="Using tools...",j=5e4,q=16384,J=4,Q="context-compression-summary",$=e=>{for(let[t,E]of Object.entries(F))if(E.some(t=>e.startsWith(t)))return t;return null},ee=e=>{if(!e||0===e.length)return[];let t=new Set;for(let E of e)for(let[e,n]of Object.entries(B))n.includes(E)&&(e===O||e===i||e===o)&&t.add(e);return L.filter(e=>t.has(e))},et=e=>{let t=new Map;if(!e||0===e.length)return t;for(let E of e)for(let[e,n]of Object.entries(B))if(n.includes(E)){t.has(e)||t.set(e,[]),t.get(e)?.push(E);break}return t},eE=e=>{for(let t of et(e).values())if(t.length>1)return!0;return!1},en=(e,t)=>!!e&&!!t&&0!==t.length&&t.includes(e);function er(e,t,E){if(!t||Array.isArray(t)&&0===t.length)return!0;let n=e instanceof Set?e:e?new Set(e):null;return!!n&&0!==n.size&&("string"==typeof t?n.has(t):E?.any===!0?t.some(e=>n.has(e)):t.every(e=>n.has(e)))}function ea(e){return y.includes(e)}var eO="subtle";export{f as ALL_MODELS,L as ALL_PROVIDERS,y as ALL_REASONING_MODELS,k as APPLICATION_NAME,F as APPROXIMATE_MODELS_PER_PROVIDER,z as CAPABILITIES,J as CONTEXT_COMPRESSION_KEEP_RECENT,Q as CONTEXT_COMPRESSION_SUMMARY_ID,j as CONTEXT_COMPRESSION_THRESHOLD,A as DEFAULT_PROVIDER,Z as DEFAULT_TOOL_LOADING_LABEL,w as DIGGIDY_CHAT_ID_HEADER,b as DIGGIDY_CHAT_TIMESTAMP_HEADER,q as MAX_OUTPUT_TOKENS,B as MODELS_PER_PROVIDER,G as MODEL_CHAT_SUMMARY,N as MODEL_CLAUDE_HAIKU,S as MODEL_CLAUDE_OPUS,g as MODEL_CLAUDE_SONNET,h as MODEL_DEV,H as MODEL_DISPLAY_NAMES,m as MODEL_EMBEDDING_TEXT,D as MODEL_GEMINI_FLASH,d as MODEL_GEMINI_PRO,U as MODEL_GENERATE_IMAGE,P as MODEL_GPT4_NANO,l as MODEL_GPT5,I as MODEL_GPT5_MINI,M as MODEL_GPT5_NANO,p as MODEL_MEMORY_INFERENCE,u as MODEL_SONAR,c as MODEL_SONAR_PRO,C as MODEL_TEACHER,x as PLAN_BASIC,W as PLAN_PLUS,X as PLAN_PREMIUM,i as PROVIDER_ANTHROPIC,o as PROVIDER_GOOGLE,s as PROVIDER_MEMORY,R as PROVIDER_MISTRAL,O as PROVIDER_OPENAI,_ as PROVIDER_PERPLEXITY,v as PROVIDER_ROLE_MAP,T as PROVIDER_SUMMARY,a as ROLE_ASSISTANT,n as ROLE_SYSTEM,r as ROLE_USER,Y as SORT_BY_TIMESTAMP,V as SORT_BY_TOKEN_USAGE,e as THEME_STANDARD,K as TOOL_LOADING_LABELS,$ as findProvider,et as getModelsGroupedByProvider,ee as getProvidersFromModels,eE as hasMultipleModelsPerProvider,er as isEntitled,en as isModelAllowedForPlan,ea as isReasoningModel,eO as THEME_SUBTLE,E as ActionColor};
1
+ let e="standard";var E,t=((E={})[E.NewChat=0]="NewChat",E[E.Prompts=1]="Prompts",E[E.Attachment=2]="Attachment",E[E.PrivateChat=3]="PrivateChat",E[E.Reasoning=4]="Reasoning",E[E.Send=5]="Send",E[E.Header=6]="Header",E[E.Provider=7]="Provider",E[E.Logo=8]="Logo",E[E.Placeholder=9]="Placeholder",E[E.Footer=10]="Footer",E);let O="system",n="user",r="assistant",a="OpenAI",i="Anthropic",o="Google",_="Summary",T="Memory",R="Perplexity",A="Mistral",s="Auto",L=a,M=[a,i,o],I="gpt-5.4",P="gpt-5.4-mini",S="gpt-5.4-nano",l="gpt-4.1-nano",g="claude-opus-4-6",N="claude-sonnet-4-6",D="claude-haiku-4-5",d="gemini-3-flash-preview",u="gemini-3.1-pro-preview",c="sonar",C="sonar-pro",h="openai/gpt-oss-20b:free",p="mistral-large-latest",U="gpt-5.4-nano",G="gpt-5.4-nano",m="gpt-5.4-mini",H="text-embedding-3-small",f="gemini-3-pro-image-preview",y=S,B=D,v=d,F=5,Y=1e4,V={[I]:"GPT-5.4",[P]:"GPT-5.4 Mini",[S]:"GPT-5.4 Nano",[l]:"GPT-4.1 Nano",[g]:"Claude Opus 4.6",[N]:"Claude Sonnet 4.6",[D]:"Claude Haiku 4.5",[u]:"Gemini 3.1 Pro",[d]:"Gemini 3 Flash",[c]:"Sonar",[C]:"Sonar Pro",[f]:"Nano Banana 3 Pro",[p]:"Mistral Large"},w=[I,P,S,g,N,D,d,u,f],b=[I,P,S,g,N,u],k={[a]:[l,I,P,S],[i]:[g,D,N],[o]:[d,u],[R]:[c,C]},X={[a]:[O,n,r],[i]:[n,r],[_]:[n,r],[T]:[n,r],[o]:[n,r],[R]:[n,r],[A]:[n,r]},x={[i]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[a]:["gpt-","o3","o4"],[o]:["gemini"],[R]:["sonar"],[A]:["mistral"]},W="x-diggidy-chat-id",z="x-diggidy-chat-timestamp",K="timestamp",Z="tokenUsage",j="Diggidy",Q="sassy:basic",q="sassy:plus",J="sassy:advanced",$={TOOL:{BARCODE:"getProductByBarcode",BUNDLESIZE:"getBundleSize",DATETIME:"getDateTime",GENERATE_IMAGE:"generateImage",IMAGES:"getImages",NUTRITION_FACTS:"getNutritionFacts",POLLUTION:"getAirPollution",WEATHER:"getWeather",URLCONTENTPARSER:"getUrlContent",MEMORIES:"getUserMemories",HUMANIZE:"humanize",WEBSEARCH:"getWebSearch",GITREPOSITORY:"getGitRepoDetails",HOTELS:"getHotelDetails",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings"},ADDON:{ATTACHMENTS:"addon:attachments",REASONING:"addon:reasoning",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},ee={code_interpreter:"Running code...",[$.TOOL.WEATHER]:"Checking the weather...",[$.TOOL.POLLUTION]:"Fetching air pollution data...",[$.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[$.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[$.TOOL.WEBSEARCH]:"Searching the web...",[$.TOOL.GITREPOSITORY]:"Looking up repository...",[$.TOOL.HOTELS]:"Searching for hotels...",[$.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[$.TOOL.GENERATE_IMAGE]:"Generating image...",[$.TOOL.BARCODE]:"Looking up product...",[$.TOOL.PRONUNCIATION]:"Generating pronunciation...",[$.TOOL.HUMANIZE]:"Rewriting text...",[$.TOOL.IMAGES]:"Searching for images..."},eE="Using tools...",et=5e4,eO=16384,en=4,er="context-compression-summary",ea=e=>{for(let[E,t]of Object.entries(x))if(t.some(E=>e.startsWith(E)))return E;return null},ei=e=>{if(!e||0===e.length)return[];let E=new Set;for(let t of e)for(let[e,O]of Object.entries(k))O.includes(t)&&(e===a||e===i||e===o)&&E.add(e);return M.filter(e=>E.has(e))},eo=e=>{let E=new Map;if(!e||0===e.length)return E;for(let t of e)for(let[e,O]of Object.entries(k))if(O.includes(t)){E.has(e)||E.set(e,[]),E.get(e)?.push(t);break}return E},e_=e=>{for(let E of eo(e).values())if(E.length>1)return!0;return!1},eT=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function eR(e,E,t){if(!E||Array.isArray(E)&&0===E.length)return!0;let O=e instanceof Set?e:e?new Set(e):null;return!!O&&0!==O.size&&("string"==typeof E?O.has(E):t?.any===!0?E.some(e=>O.has(e)):E.every(e=>O.has(e)))}function eA(e){return b.includes(e)}var es="subtle";export{w as ALL_MODELS,M as ALL_PROVIDERS,b as ALL_REASONING_MODELS,j as APPLICATION_NAME,x as APPROXIMATE_MODELS_PER_PROVIDER,$ as CAPABILITIES,en as CONTEXT_COMPRESSION_KEEP_RECENT,er as CONTEXT_COMPRESSION_SUMMARY_ID,et as CONTEXT_COMPRESSION_THRESHOLD,L as DEFAULT_PROVIDER,eE as DEFAULT_TOOL_LOADING_LABEL,W as DIGGIDY_CHAT_ID_HEADER,z as DIGGIDY_CHAT_TIMESTAMP_HEADER,eO as MAX_OUTPUT_TOKENS,F as MAX_SEARCH_QUERIES,k as MODELS_PER_PROVIDER,B as MODEL_AUTO_ROUTER_ANTHROPIC,v as MODEL_AUTO_ROUTER_GOOGLE,y as MODEL_AUTO_ROUTER_OPENAI,G as MODEL_CHAT_SUMMARY,D as MODEL_CLAUDE_HAIKU,g as MODEL_CLAUDE_OPUS,N as MODEL_CLAUDE_SONNET,h as MODEL_DEV,V as MODEL_DISPLAY_NAMES,H as MODEL_EMBEDDING_TEXT,d as MODEL_GEMINI_FLASH,u as MODEL_GEMINI_PRO,f as MODEL_GENERATE_IMAGE,l as MODEL_GPT4_NANO,I as MODEL_GPT5,P as MODEL_GPT5_MINI,S as MODEL_GPT5_NANO,U as MODEL_MEMORY_INFERENCE,m as MODEL_SEARCH_DECOMPOSER,c as MODEL_SONAR,C as MODEL_SONAR_PRO,p as MODEL_TEACHER,Q as PLAN_BASIC,q as PLAN_PLUS,J as PLAN_PREMIUM,i as PROVIDER_ANTHROPIC,s as PROVIDER_AUTO,o as PROVIDER_GOOGLE,T as PROVIDER_MEMORY,A as PROVIDER_MISTRAL,a as PROVIDER_OPENAI,R as PROVIDER_PERPLEXITY,X as PROVIDER_ROLE_MAP,_ as PROVIDER_SUMMARY,r as ROLE_ASSISTANT,O as ROLE_SYSTEM,n as ROLE_USER,Y as SEARCH_QUERY_TIMEOUT_MS,K as SORT_BY_TIMESTAMP,Z as SORT_BY_TOKEN_USAGE,e as THEME_STANDARD,ee as TOOL_LOADING_LABELS,ea as findProvider,eo as getModelsGroupedByProvider,ei as getProvidersFromModels,e_ as hasMultipleModelsPerProvider,eR as isEntitled,eT as isModelAllowedForPlan,eA as isReasoningModel,es as THEME_SUBTLE,t as ActionColor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.35.0",
3
+ "version": "4.37.0",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "publishConfig": {
@@ -32,5 +32,5 @@
32
32
  "test:watch": "vitest",
33
33
  "watch": "npm-run-all dev"
34
34
  },
35
- "gitHead": "3ff37e3765908bb4a2a087ceb49234e25dd96546"
35
+ "gitHead": "dd86f2f0dc5b21ce341bdd32bc4a06e2c30dfeb2"
36
36
  }