@versini/sassysaint-common 4.52.1 → 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 +67 -14
- package/dist/index.js +1 -1
- package/package.json +2 -2
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-
|
|
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";
|
|
@@ -545,19 +560,39 @@ export declare const MODEL_HUMANIZE_REWRITE = "gemini-3.6-flash";
|
|
|
545
560
|
* Bumped nano→mini (Track 2 T7): memory extraction now emits structured
|
|
546
561
|
* canonical keys, an explicit-request flag, and obeys the precision gate — nano
|
|
547
562
|
* was too weak for that reasoning; mini materially improves salience.
|
|
563
|
+
*
|
|
564
|
+
* Bumped mini→luna: mini is nearing deprecation, and luna is cheaper (0.20/1.20
|
|
565
|
+
* against 0.75/4.50). Re-derive with `MEMORY_MODEL_OVERRIDE=<model> node
|
|
566
|
+
* dist/maintenance/inspectExtractionSpans.js <chatId> --extract=10` (dev only).
|
|
567
|
+
* Measured on the GH #3129 chat, 10 runs each: quality did not separate them —
|
|
568
|
+
* both extracted the same 7 facts with verbatim quotes — but luna held a much
|
|
569
|
+
* tighter latency tail (max 25.8s against mini's 64.4s) and used ~15% fewer
|
|
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.
|
|
577
|
+
*
|
|
548
578
|
*/
|
|
549
|
-
export declare const MODEL_MEMORY_INFERENCE = "gpt-5.
|
|
579
|
+
export declare const MODEL_MEMORY_INFERENCE = "gpt-5.6-luna";
|
|
550
580
|
|
|
551
581
|
/**
|
|
552
582
|
* The nutrition fallback runs a web-search-tool lookup for branded products FDC
|
|
553
|
-
* does not carry.
|
|
554
|
-
*
|
|
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".
|
|
555
590
|
*/
|
|
556
|
-
export declare const MODEL_NUTRITION_SEARCH = "gpt-5.
|
|
591
|
+
export declare const MODEL_NUTRITION_SEARCH = "gpt-5.6-luna";
|
|
557
592
|
|
|
558
|
-
export declare const MODEL_OPENAI_LOW = "gpt-5.
|
|
593
|
+
export declare const MODEL_OPENAI_LOW = "gpt-5.6-luna";
|
|
559
594
|
|
|
560
|
-
export declare const MODEL_OPENAI_MEDIUM = "gpt-5.
|
|
595
|
+
export declare const MODEL_OPENAI_MEDIUM = "gpt-5.6-terra";
|
|
561
596
|
|
|
562
597
|
/**
|
|
563
598
|
* List of available models TODAY.
|
|
@@ -573,14 +608,14 @@ export declare const MODEL_OPENAI_MEDIUM = "gpt-5.4-mini";
|
|
|
573
608
|
* Two deliberate exceptions follow the catalog: the Perplexity ids are legacy
|
|
574
609
|
* and not user-selectable, and the role-purpose slots (MODEL_MEMORY_INFERENCE,
|
|
575
610
|
* MODEL_CHAT_SUMMARY, MODEL_SEARCH_DECOMPOSER, MODEL_HUMANIZE_REWRITE,
|
|
576
|
-
* MODEL_HUMANIZE_AUDIT, MODEL_NUTRITION_SEARCH,
|
|
577
|
-
* MODEL_GENERATE_IMAGE, MODEL_DEV) are named for the job
|
|
578
|
-
* provider tier, so a bump there never renames them
|
|
579
|
-
* a specific model for a specific job belongs in
|
|
580
|
-
* 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.
|
|
581
616
|
*
|
|
582
617
|
*/
|
|
583
|
-
export declare const MODEL_OPENAI_TOP = "gpt-5.6-
|
|
618
|
+
export declare const MODEL_OPENAI_TOP = "gpt-5.6-sol";
|
|
584
619
|
|
|
585
620
|
/**
|
|
586
621
|
* Pseudo-model id for the Perplexity Search API (getWebSearch). Deliberately
|
|
@@ -592,6 +627,24 @@ export declare const MODEL_OPENAI_TOP = "gpt-5.6-terra";
|
|
|
592
627
|
*/
|
|
593
628
|
export declare const MODEL_PERPLEXITY_SEARCH = "perplexity-search";
|
|
594
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
|
+
|
|
595
648
|
/**
|
|
596
649
|
* The decomposer sits in front of every complex search, so its latency is paid
|
|
597
650
|
* on the critical path before a single result exists. Measured over 7 fixtures
|
|
@@ -618,7 +671,7 @@ export declare const MODEL_SONAR_PRO = "sonar-pro";
|
|
|
618
671
|
*
|
|
619
672
|
*/
|
|
620
673
|
export declare const MODELS_PER_PROVIDER: {
|
|
621
|
-
readonly OpenAI: readonly ["gpt-5.6-
|
|
674
|
+
readonly OpenAI: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"];
|
|
622
675
|
readonly Anthropic: readonly ["claude-opus-5", "claude-haiku-4-5", "claude-sonnet-5"];
|
|
623
676
|
readonly Google: readonly ["gemini-3.5-flash-lite", "gemini-3.6-flash"];
|
|
624
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",
|
|
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.
|
|
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": "
|
|
35
|
+
"gitHead": "4aa1ba6fa226a88a0259be6ea92c36d1ccce7f30"
|
|
36
36
|
}
|