@versini/sassysaint-common 4.36.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
@@ -397,6 +397,19 @@ export declare const MAX_OUTPUT_TOKENS = 16384;
397
397
 
398
398
  export declare const MAX_SEARCH_QUERIES = 5;
399
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
+
400
413
  export declare const MODEL_CHAT_SUMMARY = "gpt-5.4-nano";
401
414
 
402
415
  export declare const MODEL_CLAUDE_HAIKU = "claude-haiku-4-5";
@@ -472,6 +485,15 @@ export declare const PLAN_PREMIUM = "sassy:advanced";
472
485
 
473
486
  export declare const PROVIDER_ANTHROPIC = "Anthropic";
474
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
+
475
497
  export declare const PROVIDER_GOOGLE = "Google";
476
498
 
477
499
  export declare const PROVIDER_MEMORY = "Memory";
@@ -500,6 +522,15 @@ export declare const PROVIDER_ROLE_MAP: {
500
522
 
501
523
  export declare const PROVIDER_SUMMARY = "Summary";
502
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
+
503
534
  export declare const ROLE_ASSISTANT = "assistant";
504
535
 
505
536
  /**
@@ -555,4 +586,11 @@ export declare interface ThemePalette {
555
586
  */
556
587
  export declare const TOOL_LOADING_LABELS: Record<string, string>;
557
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
+
558
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",O="user",r="assistant",a="OpenAI",i="Anthropic",o="Google",T="Summary",_="Memory",R="Perplexity",s="Mistral",A=a,L=[a,i,o],M="gpt-5.4",I="gpt-5.4-mini",S="gpt-5.4-nano",l="gpt-4.1-nano",P="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",C="openai/gpt-oss-20b:free",h="mistral-large-latest",p="gpt-5.4-nano",m="gpt-5.4-nano",G="gpt-5.4-mini",U="text-embedding-3-small",H="gemini-3-pro-image-preview",f=5,y=1e4,B={[M]:"GPT-5.4",[I]:"GPT-5.4 Mini",[S]:"GPT-5.4 Nano",[l]:"GPT-4.1 Nano",[P]:"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",[H]:"Nano Banana 3 Pro",[h]:"Mistral Large"},v=[M,I,S,P,g,N,D,d,H],F=[M,I,S,P,g,d],Y={[a]:[l,M,I,S],[i]:[P,N,g],[o]:[D,d],[R]:[u,c]},w={[a]:[n,O,r],[i]:[O,r],[T]:[O,r],[_]:[O,r],[o]:[O,r],[R]:[O,r],[s]:[O,r]},V={[i]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[a]:["gpt-","o3","o4"],[o]:["gemini"],[R]:["sonar"],[s]:["mistral"]},b="x-diggidy-chat-id",k="x-diggidy-chat-timestamp",X="timestamp",x="tokenUsage",W="Diggidy",z="sassy:basic",K="sassy:plus",Z="sassy:advanced",j={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"}},Q={code_interpreter:"Running code...",[j.TOOL.WEATHER]:"Checking the weather...",[j.TOOL.POLLUTION]:"Fetching air pollution data...",[j.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[j.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[j.TOOL.WEBSEARCH]:"Searching the web...",[j.TOOL.GITREPOSITORY]:"Looking up repository...",[j.TOOL.HOTELS]:"Searching for hotels...",[j.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[j.TOOL.GENERATE_IMAGE]:"Generating image...",[j.TOOL.BARCODE]:"Looking up product...",[j.TOOL.PRONUNCIATION]:"Generating pronunciation...",[j.TOOL.HUMANIZE]:"Rewriting text...",[j.TOOL.IMAGES]:"Searching for images..."},q="Using tools...",J=5e4,$=16384,ee=4,et="context-compression-summary",eE=e=>{for(let[t,E]of Object.entries(V))if(E.some(t=>e.startsWith(t)))return t;return null},en=e=>{if(!e||0===e.length)return[];let t=new Set;for(let E of e)for(let[e,n]of Object.entries(Y))n.includes(E)&&(e===a||e===i||e===o)&&t.add(e);return L.filter(e=>t.has(e))},eO=e=>{let t=new Map;if(!e||0===e.length)return t;for(let E of e)for(let[e,n]of Object.entries(Y))if(n.includes(E)){t.has(e)||t.set(e,[]),t.get(e)?.push(E);break}return t},er=e=>{for(let t of eO(e).values())if(t.length>1)return!0;return!1},ea=(e,t)=>!!e&&!!t&&0!==t.length&&t.includes(e);function ei(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 eo(e){return F.includes(e)}var eT="subtle";export{v as ALL_MODELS,L as ALL_PROVIDERS,F as ALL_REASONING_MODELS,W as APPLICATION_NAME,V as APPROXIMATE_MODELS_PER_PROVIDER,j as CAPABILITIES,ee as CONTEXT_COMPRESSION_KEEP_RECENT,et as CONTEXT_COMPRESSION_SUMMARY_ID,J as CONTEXT_COMPRESSION_THRESHOLD,A as DEFAULT_PROVIDER,q as DEFAULT_TOOL_LOADING_LABEL,b as DIGGIDY_CHAT_ID_HEADER,k as DIGGIDY_CHAT_TIMESTAMP_HEADER,$ as MAX_OUTPUT_TOKENS,f as MAX_SEARCH_QUERIES,Y as MODELS_PER_PROVIDER,m as MODEL_CHAT_SUMMARY,N as MODEL_CLAUDE_HAIKU,P as MODEL_CLAUDE_OPUS,g as MODEL_CLAUDE_SONNET,C as MODEL_DEV,B as MODEL_DISPLAY_NAMES,U as MODEL_EMBEDDING_TEXT,D as MODEL_GEMINI_FLASH,d as MODEL_GEMINI_PRO,H as MODEL_GENERATE_IMAGE,l as MODEL_GPT4_NANO,M as MODEL_GPT5,I as MODEL_GPT5_MINI,S as MODEL_GPT5_NANO,p as MODEL_MEMORY_INFERENCE,G as MODEL_SEARCH_DECOMPOSER,u as MODEL_SONAR,c as MODEL_SONAR_PRO,h as MODEL_TEACHER,z as PLAN_BASIC,K as PLAN_PLUS,Z as PLAN_PREMIUM,i as PROVIDER_ANTHROPIC,o as PROVIDER_GOOGLE,_ as PROVIDER_MEMORY,s as PROVIDER_MISTRAL,a as PROVIDER_OPENAI,R as PROVIDER_PERPLEXITY,w as PROVIDER_ROLE_MAP,T as PROVIDER_SUMMARY,r as ROLE_ASSISTANT,n as ROLE_SYSTEM,O as ROLE_USER,y as SEARCH_QUERY_TIMEOUT_MS,X as SORT_BY_TIMESTAMP,x as SORT_BY_TOKEN_USAGE,e as THEME_STANDARD,Q as TOOL_LOADING_LABELS,eE as findProvider,eO as getModelsGroupedByProvider,en as getProvidersFromModels,er as hasMultipleModelsPerProvider,ei as isEntitled,ea as isModelAllowedForPlan,eo as isReasoningModel,eT 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.36.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": "90d016c91776113778176e373c316cf1f6e202f9"
35
+ "gitHead": "dd86f2f0dc5b21ce341bdd32bc4a06e2c30dfeb2"
36
36
  }