@versini/sassysaint-common 4.39.0 → 4.39.1

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
@@ -416,6 +416,25 @@ export declare const MAX_OUTPUT_TOKENS = 16384;
416
416
 
417
417
  export declare const MAX_SEARCH_QUERIES = 5;
418
418
 
419
+ export declare const MODEL_AUTO_RESPONDER_ANTHROPIC = "claude-sonnet-4-6";
420
+
421
+ export declare const MODEL_AUTO_RESPONDER_GOOGLE = "gemini-3-flash-preview";
422
+
423
+ /**
424
+ * Responder models for the Auto router's lower ("cheap") tier. Distinct from
425
+ * the classifier models above: these are the models that actually answer the
426
+ * user, so they MUST be tool-capable. The minimal tier (nano / haiku) cannot
427
+ * call tools, which breaks tool continuity — once a conversation has used a
428
+ * tool, a tool-less follow-up model derails the flow. So the lower tier uses
429
+ * the provider's mid model instead of its smallest:
430
+ * - OpenAI: gpt-5.4-mini (premium tier stays gpt-5.4)
431
+ * - Anthropic: claude-sonnet (premium tier stays claude-opus)
432
+ * - Google: gemini-flash (premium tier stays gemini-pro; Google has no
433
+ * tier between Flash and Pro, and Flash is already tool-capable)
434
+ * The premium tier always falls through to the plan-default top model.
435
+ */
436
+ export declare const MODEL_AUTO_RESPONDER_OPENAI = "gpt-5.4-mini";
437
+
419
438
  export declare const MODEL_AUTO_ROUTER_ANTHROPIC = "claude-haiku-4-5";
420
439
 
421
440
  export declare const MODEL_AUTO_ROUTER_GOOGLE = "gemini-3-flash-preview";
@@ -424,8 +443,9 @@ export declare const MODEL_AUTO_ROUTER_GOOGLE = "gemini-3-flash-preview";
424
443
  * Classifier models used by the Auto routing feature. One per real provider
425
444
  * to preserve brand-loyalty (Anthropic-preferred users get an Anthropic
426
445
  * classifier, etc.) and to let provider-native prompt caching hit on the
427
- * classifier system prompt. Aliases of existing cheap models — adding
428
- * dedicated constants makes the intent explicit at the classifier call site.
446
+ * classifier system prompt. These are the cheapest models per provider the
447
+ * classifier only emits a small JSON object, so it never needs tools and the
448
+ * minimal tier keeps latency under the hard timeout and cost negligible.
429
449
  */
430
450
  export declare const MODEL_AUTO_ROUTER_OPENAI = "gpt-5.4-nano";
431
451
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var e,E=((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="user",t="assistant",r="OpenAI",n="Anthropic",_="Google",a="Summary",o="Perplexity",R="Mistral",i=[r,n,_],s="gpt-5.4",T="gpt-5.4-mini",A="gpt-5.4-nano",I="claude-opus-4-8",S="claude-sonnet-4-6",M="claude-haiku-4-5",L="gemini-3-flash-preview",P="gemini-3.1-pro-preview",l="sonar",N="sonar-pro",g="openai/gpt-oss-20b:free",D="mistral-large-latest",c="gpt-5.4-nano",d="gpt-5.4-nano",u="gpt-5.4-mini",C="text-embedding-3-small",h="gemini-3-pro-image",U=A,p=M,G=L,m={[s]:"GPT-5.4",[T]:"GPT-5.4 Mini",[A]:"GPT-5.4 Nano",[I]:"Claude Opus 4.8",[S]:"Claude Sonnet 4.6",[M]:"Claude Haiku 4.5",[P]:"Gemini 3.1 Pro",[L]:"Gemini 3 Flash",[l]:"Sonar",[N]:"Sonar Pro",[h]:"Nano Banana 3 Pro",[D]:"Mistral Large"},H=[s,T,A,I,S,M,L,P,h],f=[s,T,A,I,S,P],y={[r]:[s,T,A],[n]:[I,M,S],[_]:[L,P],[o]:[l,N]},V={[r]:["system",O,t],[n]:[O,t],[a]:[O,t],Memory:[O,t],[_]:[O,t],[o]:[O,t],[R]:[O,t]},B={[n]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[r]:["gpt-","o3","o4"],[_]:["gemini"],[o]:["sonar"],[R]:["mistral"]},Y="x-diggidy-chat-id",F="x-diggidy-chat-timestamp",v="timestamp",w="tokenUsage",X="Diggidy",b="sassy:basic",k="sassy:plus",K="sassy:advanced",x={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"}},W={code_interpreter:"Running code...",web_search:"Searching the web...",[x.TOOL.WEATHER]:"Checking the weather...",[x.TOOL.POLLUTION]:"Fetching air pollution data...",[x.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[x.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[x.TOOL.WEBSEARCH]:"Searching the web...",[x.TOOL.GITREPOSITORY]:"Looking up repository...",[x.TOOL.HOTELS]:"Searching for hotels...",[x.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[x.TOOL.GENERATE_IMAGE]:"Generating image...",[x.TOOL.BARCODE]:"Looking up product...",[x.TOOL.PRONUNCIATION]:"Generating pronunciation...",[x.TOOL.HUMANIZE]:"Rewriting text...",[x.TOOL.IMAGES]:"Searching for images..."},z="Using tools...",Q="context-compression-summary",Z=new Set(["OpenAI",n,"Google",R]);function j(e){return"string"==typeof e&&Z.has(e)}let q=e=>{for(let[E,O]of Object.entries(B))if(O.some(E=>e.startsWith(E)))return E;return null},J=e=>{if(!e||0===e.length)return[];let E=new Set;for(let O of e)for(let[e,t]of Object.entries(y))t.includes(O)&&("OpenAI"===e||e===n||"Google"===e)&&E.add(e);return i.filter(e=>E.has(e))},$=e=>{let E=new Map;if(!e||0===e.length)return E;for(let O of e)for(let[e,t]of Object.entries(y))if(t.includes(O)){E.has(e)||E.set(e,[]),E.get(e)?.push(O);break}return E},ee=e=>{for(let E of $(e).values())if(E.length>1)return!0;return!1},eE=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function eO(e,E,O){if(!E||Array.isArray(E)&&0===E.length)return!0;let t=e instanceof Set?e:e?new Set(e):null;return!!t&&0!==t.size&&("string"==typeof E?t.has(E):O?.any===!0?E.some(e=>t.has(e)):E.every(e=>t.has(e)))}function et(e){return f.includes(e)}var er=3,en=4,e_=5e4,ea="OpenAI",eo=16384,eR=5,ei="sonar",es="Auto",eT="Google",eA="Memory",eI="OpenAI",eS="system",eM="user",eL=1e4;export{H as ALL_MODELS,i as ALL_PROVIDERS,f as ALL_REASONING_MODELS,X as APPLICATION_NAME,B as APPROXIMATE_MODELS_PER_PROVIDER,x as CAPABILITIES,Q as CONTEXT_COMPRESSION_SUMMARY_ID,z as DEFAULT_TOOL_LOADING_LABEL,Y as DIGGIDY_CHAT_ID_HEADER,F as DIGGIDY_CHAT_TIMESTAMP_HEADER,y as MODELS_PER_PROVIDER,p as MODEL_AUTO_ROUTER_ANTHROPIC,G as MODEL_AUTO_ROUTER_GOOGLE,U as MODEL_AUTO_ROUTER_OPENAI,d as MODEL_CHAT_SUMMARY,M as MODEL_CLAUDE_HAIKU,I as MODEL_CLAUDE_OPUS,S as MODEL_CLAUDE_SONNET,g as MODEL_DEV,m as MODEL_DISPLAY_NAMES,C as MODEL_EMBEDDING_TEXT,L as MODEL_GEMINI_FLASH,P as MODEL_GEMINI_PRO,h as MODEL_GENERATE_IMAGE,s as MODEL_GPT5,T as MODEL_GPT5_MINI,A as MODEL_GPT5_NANO,c as MODEL_MEMORY_INFERENCE,u as MODEL_SEARCH_DECOMPOSER,N as MODEL_SONAR_PRO,D as MODEL_TEACHER,b as PLAN_BASIC,k as PLAN_PLUS,K as PLAN_PREMIUM,n as PROVIDER_ANTHROPIC,R as PROVIDER_MISTRAL,o as PROVIDER_PERPLEXITY,V as PROVIDER_ROLE_MAP,a as PROVIDER_SUMMARY,t as ROLE_ASSISTANT,v as SORT_BY_TIMESTAMP,w as SORT_BY_TOKEN_USAGE,W as TOOL_LOADING_LABELS,q as findProvider,$ as getModelsGroupedByProvider,J as getProvidersFromModels,ee as hasMultipleModelsPerProvider,eO as isEntitled,eE as isModelAllowedForPlan,j as isRealProvider,et as isReasoningModel,er as CONTEXT_COMPRESSION_KEEP_IMAGES,en as CONTEXT_COMPRESSION_KEEP_RECENT,e_ as CONTEXT_COMPRESSION_THRESHOLD,ea as DEFAULT_PROVIDER,eo as MAX_OUTPUT_TOKENS,eR as MAX_SEARCH_QUERIES,ei as MODEL_SONAR,es as PROVIDER_AUTO,eT as PROVIDER_GOOGLE,eA as PROVIDER_MEMORY,eI as PROVIDER_OPENAI,eS as ROLE_SYSTEM,eM as ROLE_USER,eL as SEARCH_QUERY_TIMEOUT_MS,E as ActionColor};
1
+ var e,E=((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="user",t="assistant",_="OpenAI",r="Anthropic",n="Google",a="Summary",R="Perplexity",o="Mistral",i=[_,r,n],s="gpt-5.4",T="gpt-5.4-mini",A="gpt-5.4-nano",I="claude-opus-4-8",S="claude-sonnet-4-6",L="claude-haiku-4-5",M="gemini-3-flash-preview",P="gemini-3.1-pro-preview",N="sonar",D="sonar-pro",l="openai/gpt-oss-20b:free",g="mistral-large-latest",c="gpt-5.4-nano",d="gpt-5.4-nano",C="gpt-5.4-mini",u="text-embedding-3-small",U="gemini-3-pro-image",h=A,G=L,p=M,m=T,H=S,f=M,y={[s]:"GPT-5.4",[T]:"GPT-5.4 Mini",[A]:"GPT-5.4 Nano",[I]:"Claude Opus 4.8",[S]:"Claude Sonnet 4.6",[L]:"Claude Haiku 4.5",[P]:"Gemini 3.1 Pro",[M]:"Gemini 3 Flash",[N]:"Sonar",[D]:"Sonar Pro",[U]:"Nano Banana 3 Pro",[g]:"Mistral Large"},V=[s,T,A,I,S,L,M,P,U],B=[s,T,A,I,S,P],Y={[_]:[s,T,A],[r]:[I,L,S],[n]:[M,P],[R]:[N,D]},F={[_]:["system",O,t],[r]:[O,t],[a]:[O,t],Memory:[O,t],[n]:[O,t],[R]:[O,t],[o]:[O,t]},v={[r]:["claude-opus-4","claude-sonnet-4","claude-haiku-4","claude-3"],[_]:["gpt-","o3","o4"],[n]:["gemini"],[R]:["sonar"],[o]:["mistral"]},w="x-diggidy-chat-id",X="x-diggidy-chat-timestamp",b="timestamp",k="tokenUsage",K="Diggidy",x="sassy:basic",W="sassy:plus",z="sassy:advanced",Q={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"}},Z={code_interpreter:"Running code...",web_search:"Searching the web...",[Q.TOOL.WEATHER]:"Checking the weather...",[Q.TOOL.POLLUTION]:"Fetching air pollution data...",[Q.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[Q.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[Q.TOOL.WEBSEARCH]:"Searching the web...",[Q.TOOL.GITREPOSITORY]:"Looking up repository...",[Q.TOOL.HOTELS]:"Searching for hotels...",[Q.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[Q.TOOL.GENERATE_IMAGE]:"Generating image...",[Q.TOOL.BARCODE]:"Looking up product...",[Q.TOOL.PRONUNCIATION]:"Generating pronunciation...",[Q.TOOL.HUMANIZE]:"Rewriting text...",[Q.TOOL.IMAGES]:"Searching for images..."},j="Using tools...",q="context-compression-summary",J=new Set(["OpenAI",r,"Google",o]);function $(e){return"string"==typeof e&&J.has(e)}let ee=e=>{for(let[E,O]of Object.entries(v))if(O.some(E=>e.startsWith(E)))return E;return null},eE=e=>{if(!e||0===e.length)return[];let E=new Set;for(let O of e)for(let[e,t]of Object.entries(Y))t.includes(O)&&("OpenAI"===e||e===r||"Google"===e)&&E.add(e);return i.filter(e=>E.has(e))},eO=e=>{let E=new Map;if(!e||0===e.length)return E;for(let O of e)for(let[e,t]of Object.entries(Y))if(t.includes(O)){E.has(e)||E.set(e,[]),E.get(e)?.push(O);break}return E},et=e=>{for(let E of eO(e).values())if(E.length>1)return!0;return!1},e_=(e,E)=>!!e&&!!E&&0!==E.length&&E.includes(e);function er(e,E,O){if(!E||Array.isArray(E)&&0===E.length)return!0;let t=e instanceof Set?e:e?new Set(e):null;return!!t&&0!==t.size&&("string"==typeof E?t.has(E):O?.any===!0?E.some(e=>t.has(e)):E.every(e=>t.has(e)))}function en(e){return B.includes(e)}var ea=3,eR=4,eo=5e4,ei="OpenAI",es=16384,eT=5,eA="sonar",eI="Auto",eS="Google",eL="Memory",eM="OpenAI",eP="system",eN="user",eD=1e4;export{V as ALL_MODELS,i as ALL_PROVIDERS,B as ALL_REASONING_MODELS,K as APPLICATION_NAME,v as APPROXIMATE_MODELS_PER_PROVIDER,Q as CAPABILITIES,q as CONTEXT_COMPRESSION_SUMMARY_ID,j as DEFAULT_TOOL_LOADING_LABEL,w as DIGGIDY_CHAT_ID_HEADER,X as DIGGIDY_CHAT_TIMESTAMP_HEADER,Y as MODELS_PER_PROVIDER,H as MODEL_AUTO_RESPONDER_ANTHROPIC,f as MODEL_AUTO_RESPONDER_GOOGLE,m as MODEL_AUTO_RESPONDER_OPENAI,G as MODEL_AUTO_ROUTER_ANTHROPIC,p as MODEL_AUTO_ROUTER_GOOGLE,h as MODEL_AUTO_ROUTER_OPENAI,d as MODEL_CHAT_SUMMARY,L as MODEL_CLAUDE_HAIKU,I as MODEL_CLAUDE_OPUS,S as MODEL_CLAUDE_SONNET,l as MODEL_DEV,y as MODEL_DISPLAY_NAMES,u as MODEL_EMBEDDING_TEXT,M as MODEL_GEMINI_FLASH,P as MODEL_GEMINI_PRO,U as MODEL_GENERATE_IMAGE,s as MODEL_GPT5,T as MODEL_GPT5_MINI,A as MODEL_GPT5_NANO,c as MODEL_MEMORY_INFERENCE,C as MODEL_SEARCH_DECOMPOSER,D as MODEL_SONAR_PRO,g as MODEL_TEACHER,x as PLAN_BASIC,W as PLAN_PLUS,z as PLAN_PREMIUM,r as PROVIDER_ANTHROPIC,o as PROVIDER_MISTRAL,R as PROVIDER_PERPLEXITY,F as PROVIDER_ROLE_MAP,a as PROVIDER_SUMMARY,t as ROLE_ASSISTANT,b as SORT_BY_TIMESTAMP,k as SORT_BY_TOKEN_USAGE,Z as TOOL_LOADING_LABELS,ee as findProvider,eO as getModelsGroupedByProvider,eE as getProvidersFromModels,et as hasMultipleModelsPerProvider,er as isEntitled,e_ as isModelAllowedForPlan,$ as isRealProvider,en as isReasoningModel,ea as CONTEXT_COMPRESSION_KEEP_IMAGES,eR as CONTEXT_COMPRESSION_KEEP_RECENT,eo as CONTEXT_COMPRESSION_THRESHOLD,ei as DEFAULT_PROVIDER,es as MAX_OUTPUT_TOKENS,eT as MAX_SEARCH_QUERIES,eA as MODEL_SONAR,eI as PROVIDER_AUTO,eS as PROVIDER_GOOGLE,eL as PROVIDER_MEMORY,eM as PROVIDER_OPENAI,eP as ROLE_SYSTEM,eN as ROLE_USER,eD as SEARCH_QUERY_TIMEOUT_MS,E as ActionColor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.39.0",
3
+ "version": "4.39.1",
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": "a925e2b6b683a7d4c6958902e9a3f4bf1c39f765"
35
+ "gitHead": "ce9f47e834eb243e3ec479e71a11c56c59184655"
36
36
  }