@versini/sassysaint-common 4.52.2 → 4.53.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
@@ -19,7 +19,7 @@ export declare enum ActionColor {
19
19
  * List of all models available TODAY. This is used by the client to display the
20
20
  * list of models.
21
21
  */
22
- export declare const ALL_MODELS: readonly ["gpt-5.6-terra", "gpt-5.4-mini", "gpt-5.4-nano", "claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5", "gemini-3.5-flash-lite", "gemini-3.6-flash", "gemini-3-pro-image"];
22
+ export declare const ALL_MODELS: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5", "gemini-3.5-flash-lite", "gemini-3.6-flash", "gemini-3-pro-image"];
23
23
 
24
24
  export declare const ALL_PROVIDERS: readonly ["OpenAI", "Anthropic", "Google"];
25
25
 
@@ -505,6 +505,21 @@ export declare const MODEL_ANTHROPIC_MEDIUM = "claude-sonnet-5";
505
505
 
506
506
  export declare const MODEL_ANTHROPIC_TOP = "claude-opus-5";
507
507
 
508
+ /**
509
+ * Deliberately NOT moved to luna with the other role slots. Usage rows are
510
+ * keyed by model id alone (`usageSchema.index({ email, date, model })`) and
511
+ * callType is never persisted, so every slot sharing an id also shares one cost
512
+ * series. This job is the highest-volume role slot — it pays for chat titles,
513
+ * search summaries AND context compression on every long chat — so collapsing
514
+ * it into the Basic/Plus chat bucket would hide exactly the kind of per-job
515
+ * cost floor that surfaced the consolidation-cron re-billing in #3111/#3113.
516
+ * Keeping one id distinct is what preserves that signal.
517
+ *
518
+ * It also stays on the model whose latency is known here: the luna measurement
519
+ * in the block above was taken against mini, not nano, and this call is awaited
520
+ * on the critical path before time-to-first-token with no deadline.
521
+ *
522
+ */
508
523
  export declare const MODEL_CHAT_SUMMARY = "gpt-5.4-nano";
509
524
 
510
525
  export declare const MODEL_DEV = "openai/gpt-oss-20b:free";
@@ -552,23 +567,32 @@ export declare const MODEL_HUMANIZE_REWRITE = "gemini-3.6-flash";
552
567
  * Measured on the GH #3129 chat, 10 runs each: quality did not separate them —
553
568
  * both extracted the same 7 facts with verbatim quotes — but luna held a much
554
569
  * tighter latency tail (max 25.8s against mini's 64.4s) and used ~15% fewer
555
- * tokens. This slot no longer tracks MODEL_OPENAI_MEDIUM, so it carries its own
556
- * pricing row (see ROLE_MODEL_PRICING); without one it would fall through to
557
- * the "gpt-" prefix at 2/10 and over-bill by 10x.
570
+ * tokens.
571
+ *
572
+ * The OpenAI catalog bump then pointed MODEL_OPENAI_LOW at this same id. Four
573
+ * symbols now hold it — MODEL_OPENAI_LOW, this slot, MODEL_NUTRITION_SEARCH and
574
+ * MODEL_REVIEW_TRUST_PANEL — so an EXACT row prices the id and the luna row in
575
+ * ROLE_MODEL_PRICING is the net for whichever of them moves first. Do not
576
+ * restate that set here; modelPricing.ts owns the count.
558
577
  *
559
578
  */
560
579
  export declare const MODEL_MEMORY_INFERENCE = "gpt-5.6-luna";
561
580
 
562
581
  /**
563
582
  * The nutrition fallback runs a web-search-tool lookup for branded products FDC
564
- * does not carry. It needs a mid-grade model with native web search, not
565
- * whatever the OpenAI mid tier happens to point at.
583
+ * does not carry. The hard requirement is native support for the hosted
584
+ * `openai.tools.webSearch` tool, NOT a particular tier — this slot now holds
585
+ * the same id as the entry rung, and that was confirmed in production against
586
+ * "1 cup dry uncooked chickpeas": the FDC soft-failure path fell through to
587
+ * this search and returned 728 kcal. Re-confirm with one branded-product lookup
588
+ * before pointing this slot at any new model, since a capability loss here
589
+ * degrades to a NO_DATA string and reads as "FDC didn't have it".
566
590
  */
567
- export declare const MODEL_NUTRITION_SEARCH = "gpt-5.4-mini";
591
+ export declare const MODEL_NUTRITION_SEARCH = "gpt-5.6-luna";
568
592
 
569
- export declare const MODEL_OPENAI_LOW = "gpt-5.4-nano";
593
+ export declare const MODEL_OPENAI_LOW = "gpt-5.6-luna";
570
594
 
571
- export declare const MODEL_OPENAI_MEDIUM = "gpt-5.4-mini";
595
+ export declare const MODEL_OPENAI_MEDIUM = "gpt-5.6-terra";
572
596
 
573
597
  /**
574
598
  * List of available models TODAY.
@@ -584,14 +608,14 @@ export declare const MODEL_OPENAI_MEDIUM = "gpt-5.4-mini";
584
608
  * Two deliberate exceptions follow the catalog: the Perplexity ids are legacy
585
609
  * and not user-selectable, and the role-purpose slots (MODEL_MEMORY_INFERENCE,
586
610
  * MODEL_CHAT_SUMMARY, MODEL_SEARCH_DECOMPOSER, MODEL_HUMANIZE_REWRITE,
587
- * MODEL_HUMANIZE_AUDIT, MODEL_NUTRITION_SEARCH, MODEL_EMBEDDING_TEXT,
588
- * MODEL_GENERATE_IMAGE, MODEL_DEV) are named for the job they do rather than a
589
- * provider tier, so a bump there never renames them either. Anything that needs
590
- * a specific model for a specific job belongs in that group, NOT pointed at a
591
- * picker tier whose value can move.
611
+ * MODEL_HUMANIZE_AUDIT, MODEL_NUTRITION_SEARCH, MODEL_REVIEW_TRUST_PANEL,
612
+ * MODEL_EMBEDDING_TEXT, MODEL_GENERATE_IMAGE, MODEL_DEV) are named for the job
613
+ * they do rather than a provider tier, so a bump there never renames them
614
+ * either. Anything that needs a specific model for a specific job belongs in
615
+ * that group, NOT pointed at a picker tier whose value can move.
592
616
  *
593
617
  */
594
- export declare const MODEL_OPENAI_TOP = "gpt-5.6-terra";
618
+ export declare const MODEL_OPENAI_TOP = "gpt-5.6-sol";
595
619
 
596
620
  /**
597
621
  * Pseudo-model id for the Perplexity Search API (getWebSearch). Deliberately
@@ -603,6 +627,24 @@ export declare const MODEL_OPENAI_TOP = "gpt-5.6-terra";
603
627
  */
604
628
  export declare const MODEL_PERPLEXITY_SEARCH = "perplexity-search";
605
629
 
630
+ /**
631
+ * The OpenAI seat on the reviewTrust eval panel. It gets its own slot so the
632
+ * roster stops following the OpenAI mid tier it used to read, which would move
633
+ * the panel on every catalog bump without anyone deciding to.
634
+ *
635
+ * This pin does NOT make the current panel comparable to the recorded holdout
636
+ * votes — it breaks that comparability once, deliberately. Both fixtures were
637
+ * labelled by gpt-5.4-mini (145 cases x 3 raters), and README.md records that
638
+ * rater calling "manipulated" 71%/59% against 13% for the other two, so it was
639
+ * the swing vote the leave-one-out table turns on. Those numbers describe a
640
+ * panel this code can no longer produce. Re-derive them with `node
641
+ * dist/evals/reviewTrust/runLabel.js <set> --force` before trusting the
642
+ * calibration again: a plain re-run relabels NOTHING, because runLabel treats a
643
+ * case as complete on vote COUNT and cannot see that a seat changed identity.
644
+ *
645
+ */
646
+ export declare const MODEL_REVIEW_TRUST_PANEL = "gpt-5.6-luna";
647
+
606
648
  /**
607
649
  * The decomposer sits in front of every complex search, so its latency is paid
608
650
  * on the critical path before a single result exists. Measured over 7 fixtures
@@ -629,7 +671,7 @@ export declare const MODEL_SONAR_PRO = "sonar-pro";
629
671
  *
630
672
  */
631
673
  export declare const MODELS_PER_PROVIDER: {
632
- readonly OpenAI: readonly ["gpt-5.6-terra", "gpt-5.4-mini", "gpt-5.4-nano"];
674
+ readonly OpenAI: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"];
633
675
  readonly Anthropic: readonly ["claude-opus-5", "claude-haiku-4-5", "claude-sonnet-5"];
634
676
  readonly Google: readonly ["gemini-3.5-flash-lite", "gemini-3.6-flash"];
635
677
  readonly Perplexity: readonly ["sonar", "sonar-pro", "perplexity-search"];
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- let e=["preference","identity","constraint","habit","bio","device","location","finance","professional","interest","style","behavior","other"],t=["identity","bio","constraint","professional"],E=e=>t.includes(e);var O,n=((O={})[O.NewChat=0]="NewChat",O[O.Prompts=1]="Prompts",O[O.Attachment=2]="Attachment",O[O.PrivateChat=3]="PrivateChat",O[O.Send=4]="Send",O[O.Header=5]="Header",O[O.Provider=6]="Provider",O[O.Logo=7]="Logo",O[O.Placeholder=8]="Placeholder",O[O.Footer=9]="Footer",O);let r="system",i="user",o="assistant",a="OpenAI",T="Anthropic",_="Google",s="Summary",R="Memory",S="Perplexity",A=a,I=[a,T,_],l="gpt-5.6-terra",L="gpt-5.4-mini",M="gpt-5.4-nano",P="claude-opus-5",g="claude-sonnet-5",N="claude-haiku-4-5",c="gemini-3.6-flash",D="gemini-3.5-flash-lite",d="sonar",u="sonar-pro",C="perplexity-search",h="openai/gpt-oss-20b:free",p="gpt-5.6-luna",m="gpt-5.4-nano",G="gemini-3.5-flash-lite",U="gemini-3.6-flash",H="gpt-5.6-terra",f="gpt-5.4-mini",y="text-embedding-3-small",B="gemini-3-pro-image",Y=5,b=1e4,v=3e3,F={[l]:"GPT-5.6 Terra",[L]:"GPT-5.4 Mini",[M]:"GPT-5.4 Nano",[P]:"Claude Opus 5",[g]:"Claude Sonnet 5",[N]:"Claude Haiku 4.5",[c]:"Gemini 3.6 Flash",[D]:"Gemini 3.5 Flash-Lite",[d]:"Sonar",[u]:"Sonar Pro",[C]:"Perplexity Search",[B]:"Nano Banana 3 Pro"},w=[l,L,M,P,g,N,D,c,B],V=[l,L,M,P,g,c,D],W={[a]:[l,L,M],[T]:[P,N,g],[_]:[D,c],[S]:[d,u,C]},X={[a]:[r,i,o],[T]:[i,o],[s]:[i,o],[R]:[i,o],[_]:[i,o],[S]:[i,o]},k={[T]:["claude-opus-5","claude-opus-4","claude-sonnet-5","claude-sonnet-4","claude-haiku-4","claude-3"],[a]:["gpt-","o3","o4"],[_]:["gemini"],[S]:["sonar"]},x="x-diggidy-chat-id",K="x-diggidy-chat-timestamp",Z="complete",z="timestamp",j="tokenUsage",Q="Diggidy",$="sassy:basic",q="sassy:plus",J="sassy:advanced",ee={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",LOCAL_BUSINESSES:"getLocalBusinesses",PRODUCTS:"getProducts",REVIEW_TRUST:"getReviewTrust",STREAMING_PICKS:"getStreamingPicks",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings"},ADDON:{ATTACHMENTS:"addon:attachments",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},et={code_interpreter:"Running code...",web_search:"Searching the web...",[ee.TOOL.WEATHER]:"Checking the weather...",[ee.TOOL.POLLUTION]:"Fetching air pollution data...",[ee.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[ee.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[ee.TOOL.WEBSEARCH]:"Searching the web...",[ee.TOOL.GITREPOSITORY]:"Looking up repository...",[ee.TOOL.HOTELS]:"Searching for hotels...",[ee.TOOL.LOCAL_BUSINESSES]:"Searching for local businesses...",[ee.TOOL.PRODUCTS]:"Searching for products...",[ee.TOOL.REVIEW_TRUST]:"Checking reviews...",[ee.TOOL.STREAMING_PICKS]:"Finding movies to stream...",[ee.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[ee.TOOL.GENERATE_IMAGE]:"Generating image...",[ee.TOOL.BARCODE]:"Looking up product...",[ee.TOOL.PRONUNCIATION]:"Generating pronunciation...",[ee.TOOL.HUMANIZE]:"Rewriting text...",[ee.TOOL.IMAGES]:"Searching for images..."},eE="Using tools...",eO=5e4,en=1e5,er=8e5;function ei(e){return e===J?er:en}let eo=16384,ea=4,eT=3,e_="context-compression-summary",es=new Set(["OpenAI",T,"Google"]);function eR(e){return"string"==typeof e&&es.has(e)}let eS=/^auto \((.+)\)$/;function eA(e){let t=e.match(eS);return t?t[1]:e}let eI=e=>{for(let[t,E]of Object.entries(k))if(E.some(t=>e.startsWith(t)))return t;return null},el=e=>{if(!e||0===e.length)return[];let t=new Set;for(let E of e)for(let[e,O]of Object.entries(W))O.includes(E)&&("OpenAI"===e||e===T||"Google"===e)&&t.add(e);return I.filter(e=>t.has(e))},eL=e=>{let t=new Map;if(!e||0===e.length)return t;for(let E of e)for(let[e,O]of Object.entries(W))if(O.includes(E)){t.has(e)||t.set(e,[]),t.get(e)?.push(E);break}return t},eM=e=>{for(let t of eL(e).values())if(t.length>1)return!0;return!1},eP=(e,t)=>!!e&&!!t&&0!==t.length&&t.includes(e);function eg(e,t,E){if(!t||Array.isArray(t)&&0===t.length)return!0;let O=e instanceof Set?e:e?new Set(e):null;return!!O&&0!==O.size&&("string"==typeof t?O.has(t):E?.any===!0?t.some(e=>O.has(e)):t.every(e=>O.has(e)))}function eN(e){return V.includes(e)}export{w as ALL_MODELS,I as ALL_PROVIDERS,V as ALL_REASONING_MODELS,Q as APPLICATION_NAME,k as APPROXIMATE_MODELS_PER_PROVIDER,ee as CAPABILITIES,Z as CHAT_COMPLETION_MARKER_KEY,en as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,er as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,eT as CONTEXT_COMPRESSION_KEEP_IMAGES,ea as CONTEXT_COMPRESSION_KEEP_RECENT,e_ as CONTEXT_COMPRESSION_SUMMARY_ID,eO as CONTEXT_COMPRESSION_THRESHOLD,A as DEFAULT_PROVIDER,eE as DEFAULT_TOOL_LOADING_LABEL,x as DIGGIDY_CHAT_ID_HEADER,K as DIGGIDY_CHAT_TIMESTAMP_HEADER,t as HARD_CATEGORIES,eo as MAX_OUTPUT_TOKENS,Y as MAX_SEARCH_QUERIES,e as MEMORY_CATEGORIES,W as MODELS_PER_PROVIDER,N as MODEL_ANTHROPIC_LOW,g as MODEL_ANTHROPIC_MEDIUM,P as MODEL_ANTHROPIC_TOP,m as MODEL_CHAT_SUMMARY,h as MODEL_DEV,F as MODEL_DISPLAY_NAMES,y as MODEL_EMBEDDING_TEXT,B as MODEL_GENERATE_IMAGE,D as MODEL_GOOGLE_MEDIUM,c as MODEL_GOOGLE_TOP,H as MODEL_HUMANIZE_AUDIT,U as MODEL_HUMANIZE_REWRITE,p as MODEL_MEMORY_INFERENCE,f as MODEL_NUTRITION_SEARCH,M as MODEL_OPENAI_LOW,L as MODEL_OPENAI_MEDIUM,l as MODEL_OPENAI_TOP,C as MODEL_PERPLEXITY_SEARCH,G as MODEL_SEARCH_DECOMPOSER,d as MODEL_SONAR,u as MODEL_SONAR_PRO,$ as PLAN_BASIC,q as PLAN_PLUS,J as PLAN_PREMIUM,T as PROVIDER_ANTHROPIC,_ as PROVIDER_GOOGLE,R as PROVIDER_MEMORY,a as PROVIDER_OPENAI,S as PROVIDER_PERPLEXITY,X as PROVIDER_ROLE_MAP,s as PROVIDER_SUMMARY,o as ROLE_ASSISTANT,r as ROLE_SYSTEM,i as ROLE_USER,v as SEARCH_DECOMPOSE_TIMEOUT_MS,b as SEARCH_QUERY_TIMEOUT_MS,z as SORT_BY_TIMESTAMP,j as SORT_BY_TOKEN_USAGE,et as TOOL_LOADING_LABELS,eI as findProvider,ei as getCompressionEmergencyThreshold,eL as getModelsGroupedByProvider,el as getProvidersFromModels,eM as hasMultipleModelsPerProvider,eg as isEntitled,E as isHardCategory,eP as isModelAllowedForPlan,eR as isRealProvider,eN as isReasoningModel,eA as stripAutoWrapper,n as ActionColor};
1
+ let e=["preference","identity","constraint","habit","bio","device","location","finance","professional","interest","style","behavior","other"],t=["identity","bio","constraint","professional"],E=e=>t.includes(e);var O,n=((O={})[O.NewChat=0]="NewChat",O[O.Prompts=1]="Prompts",O[O.Attachment=2]="Attachment",O[O.PrivateChat=3]="PrivateChat",O[O.Send=4]="Send",O[O.Header=5]="Header",O[O.Provider=6]="Provider",O[O.Logo=7]="Logo",O[O.Placeholder=8]="Placeholder",O[O.Footer=9]="Footer",O);let r="system",i="user",o="assistant",a="OpenAI",_="Anthropic",T="Google",s="Summary",R="Memory",S="Perplexity",A=a,I=[a,_,T],l="gpt-5.6-sol",L="gpt-5.6-terra",M="gpt-5.6-luna",P="claude-opus-5",g="claude-sonnet-5",N="claude-haiku-4-5",u="gemini-3.6-flash",c="gemini-3.5-flash-lite",D="sonar",d="sonar-pro",C="perplexity-search",h="openai/gpt-oss-20b:free",p="gpt-5.6-luna",U="gpt-5.4-nano",m="gemini-3.5-flash-lite",G="gemini-3.6-flash",H="gpt-5.6-terra",f="gpt-5.6-luna",y="gpt-5.6-luna",B="text-embedding-3-small",Y="gemini-3-pro-image",b=5,v=1e4,F=3e3,w={[l]:"GPT-5.6 Sol",[L]:"GPT-5.6 Terra",[M]:"GPT-5.6 Luna",[P]:"Claude Opus 5",[g]:"Claude Sonnet 5",[N]:"Claude Haiku 4.5",[u]:"Gemini 3.6 Flash",[c]:"Gemini 3.5 Flash-Lite",[D]:"Sonar",[d]:"Sonar Pro",[C]:"Perplexity Search",[Y]:"Nano Banana 3 Pro"},V=[l,L,M,P,g,N,c,u,Y],W=[l,L,M,P,g,u,c],X={[a]:[l,L,M],[_]:[P,N,g],[T]:[c,u],[S]:[D,d,C]},k={[a]:[r,i,o],[_]:[i,o],[s]:[i,o],[R]:[i,o],[T]:[i,o],[S]:[i,o]},x={[_]:["claude-opus-5","claude-opus-4","claude-sonnet-5","claude-sonnet-4","claude-haiku-4","claude-3"],[a]:["gpt-","o3","o4"],[T]:["gemini"],[S]:["sonar"]},K="x-diggidy-chat-id",Z="x-diggidy-chat-timestamp",z="complete",j="timestamp",Q="tokenUsage",$="Diggidy",q="sassy:basic",J="sassy:plus",ee="sassy:advanced",et={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",LOCAL_BUSINESSES:"getLocalBusinesses",PRODUCTS:"getProducts",REVIEW_TRUST:"getReviewTrust",STREAMING_PICKS:"getStreamingPicks",PRONUNCIATION:"getPronunciation",FRENCH_TEACHINGS:"getFrenchTeachings"},ADDON:{ATTACHMENTS:"addon:attachments",CODEINTERPRETER:"addon:codeinterpreter",SHARE_CHAT:"addon:share-chat"}},eE={code_interpreter:"Running code...",web_search:"Searching the web...",[et.TOOL.WEATHER]:"Checking the weather...",[et.TOOL.POLLUTION]:"Fetching air pollution data...",[et.TOOL.BUNDLESIZE]:"Analyzing bundle size...",[et.TOOL.URLCONTENTPARSER]:"Reading a webpage...",[et.TOOL.WEBSEARCH]:"Searching the web...",[et.TOOL.GITREPOSITORY]:"Looking up repository...",[et.TOOL.HOTELS]:"Searching for hotels...",[et.TOOL.LOCAL_BUSINESSES]:"Searching for local businesses...",[et.TOOL.PRODUCTS]:"Searching for products...",[et.TOOL.REVIEW_TRUST]:"Checking reviews...",[et.TOOL.STREAMING_PICKS]:"Finding movies to stream...",[et.TOOL.NUTRITION_FACTS]:"Fetching nutrition facts...",[et.TOOL.GENERATE_IMAGE]:"Generating image...",[et.TOOL.BARCODE]:"Looking up product...",[et.TOOL.PRONUNCIATION]:"Generating pronunciation...",[et.TOOL.HUMANIZE]:"Rewriting text...",[et.TOOL.IMAGES]:"Searching for images..."},eO="Using tools...",en=5e4,er=1e5,ei=8e5;function eo(e){return e===ee?ei:er}let ea=16384,e_=4,eT=3,es="context-compression-summary",eR=new Set(["OpenAI",_,"Google"]);function eS(e){return"string"==typeof e&&eR.has(e)}let eA=/^auto \((.+)\)$/;function eI(e){let t=e.match(eA);return t?t[1]:e}let el=e=>{for(let[t,E]of Object.entries(x))if(E.some(t=>e.startsWith(t)))return t;return null},eL=e=>{if(!e||0===e.length)return[];let t=new Set;for(let E of e)for(let[e,O]of Object.entries(X))O.includes(E)&&("OpenAI"===e||e===_||"Google"===e)&&t.add(e);return I.filter(e=>t.has(e))},eM=e=>{let t=new Map;if(!e||0===e.length)return t;for(let E of e)for(let[e,O]of Object.entries(X))if(O.includes(E)){t.has(e)||t.set(e,[]),t.get(e)?.push(E);break}return t},eP=e=>{for(let t of eM(e).values())if(t.length>1)return!0;return!1},eg=(e,t)=>!!e&&!!t&&0!==t.length&&t.includes(e);function eN(e,t,E){if(!t||Array.isArray(t)&&0===t.length)return!0;let O=e instanceof Set?e:e?new Set(e):null;return!!O&&0!==O.size&&("string"==typeof t?O.has(t):E?.any===!0?t.some(e=>O.has(e)):t.every(e=>O.has(e)))}function eu(e){return W.includes(e)}export{V as ALL_MODELS,I as ALL_PROVIDERS,W as ALL_REASONING_MODELS,$ as APPLICATION_NAME,x as APPROXIMATE_MODELS_PER_PROVIDER,et as CAPABILITIES,z as CHAT_COMPLETION_MARKER_KEY,er as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD,ei as CONTEXT_COMPRESSION_EMERGENCY_THRESHOLD_PREMIUM,eT as CONTEXT_COMPRESSION_KEEP_IMAGES,e_ as CONTEXT_COMPRESSION_KEEP_RECENT,es as CONTEXT_COMPRESSION_SUMMARY_ID,en as CONTEXT_COMPRESSION_THRESHOLD,A as DEFAULT_PROVIDER,eO as DEFAULT_TOOL_LOADING_LABEL,K as DIGGIDY_CHAT_ID_HEADER,Z as DIGGIDY_CHAT_TIMESTAMP_HEADER,t as HARD_CATEGORIES,ea as MAX_OUTPUT_TOKENS,b as MAX_SEARCH_QUERIES,e as MEMORY_CATEGORIES,X as MODELS_PER_PROVIDER,N as MODEL_ANTHROPIC_LOW,g as MODEL_ANTHROPIC_MEDIUM,P as MODEL_ANTHROPIC_TOP,U as MODEL_CHAT_SUMMARY,h as MODEL_DEV,w as MODEL_DISPLAY_NAMES,B as MODEL_EMBEDDING_TEXT,Y as MODEL_GENERATE_IMAGE,c as MODEL_GOOGLE_MEDIUM,u as MODEL_GOOGLE_TOP,H as MODEL_HUMANIZE_AUDIT,G as MODEL_HUMANIZE_REWRITE,p as MODEL_MEMORY_INFERENCE,f as MODEL_NUTRITION_SEARCH,M as MODEL_OPENAI_LOW,L as MODEL_OPENAI_MEDIUM,l as MODEL_OPENAI_TOP,C as MODEL_PERPLEXITY_SEARCH,y as MODEL_REVIEW_TRUST_PANEL,m as MODEL_SEARCH_DECOMPOSER,D as MODEL_SONAR,d as MODEL_SONAR_PRO,q as PLAN_BASIC,J as PLAN_PLUS,ee as PLAN_PREMIUM,_ as PROVIDER_ANTHROPIC,T as PROVIDER_GOOGLE,R as PROVIDER_MEMORY,a as PROVIDER_OPENAI,S as PROVIDER_PERPLEXITY,k as PROVIDER_ROLE_MAP,s as PROVIDER_SUMMARY,o as ROLE_ASSISTANT,r as ROLE_SYSTEM,i as ROLE_USER,F as SEARCH_DECOMPOSE_TIMEOUT_MS,v as SEARCH_QUERY_TIMEOUT_MS,j as SORT_BY_TIMESTAMP,Q as SORT_BY_TOKEN_USAGE,eE as TOOL_LOADING_LABELS,el as findProvider,eo as getCompressionEmergencyThreshold,eM as getModelsGroupedByProvider,eL as getProvidersFromModels,eP as hasMultipleModelsPerProvider,eN as isEntitled,E as isHardCategory,eg as isModelAllowedForPlan,eS as isRealProvider,eu as isReasoningModel,eI as stripAutoWrapper,n as ActionColor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/sassysaint-common",
3
- "version": "4.52.2",
3
+ "version": "4.53.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": "aff48aac6d07b48e8bacf5edf585d296c2705a01"
35
+ "gitHead": "4aa1ba6fa226a88a0259be6ea92c36d1ccce7f30"
36
36
  }