@juspay/neurolink 12.56.1 → 12.57.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.
@@ -13,7 +13,7 @@ import type { ProviderConfigOptions, SetupArgs } from "../../types/index.js";
13
13
  * perplexity, sambanova, together-ai, xai — mistral is the 9th catalog
14
14
  * provider but keeps its own handleMistralSetup() flow above, so it's
15
15
  * excluded here), spread directly from the catalog JSON via
16
- * buildCatalogConfigOptions(); decide-kind catalog entries (laya, xor) are
16
+ * buildCatalogConfigOptions(); decide-kind catalog entries (laya, xor, subq) are
17
17
  * spread the same way from getDecideCatalogEntries(). The hand rows listed
18
18
  * first reuse the existing createXConfig() factories in providerConfig.ts; the
19
19
  * remaining 5 (ollama, litellm, sagemaker, lm-studio, llamacpp) don't have a
@@ -150,7 +150,7 @@ const PROVIDERS = [
150
150
  * perplexity, sambanova, together-ai, xai — mistral is the 9th catalog
151
151
  * provider but keeps its own handleMistralSetup() flow above, so it's
152
152
  * excluded here), spread directly from the catalog JSON via
153
- * buildCatalogConfigOptions(); decide-kind catalog entries (laya, xor) are
153
+ * buildCatalogConfigOptions(); decide-kind catalog entries (laya, xor, subq) are
154
154
  * spread the same way from getDecideCatalogEntries(). The hand rows listed
155
155
  * first reuse the existing createXConfig() factories in providerConfig.ts; the
156
156
  * remaining 5 (ollama, litellm, sagemaker, lm-studio, llamacpp) don't have a
@@ -649,7 +649,7 @@ export class CLICommandFactory {
649
649
  },
650
650
  classifierStrategy: {
651
651
  type: "string",
652
- description: "Classifier strategy: 'auto' (default — 'jev' when a decision provider is configured, such as TYPESAFE_API_KEY, LAYA_API_KEY with LAYA_BASE_URL, XOR_API_KEY with XOR_BASE_URL, PERPLEXITY_API_KEY, or CLOUDFLARE_API_KEY with CLOUDFLARE_ACCOUNT_ID, else 'heuristic'), 'heuristic' (no LLM), 'llm' (a cheap model picks per prompt), or 'jev' (a System One decision model — TypeSafe Jev, Laya, XOR, Perplexity or Cloudflare Clef — with calibrated confidence).",
652
+ description: "Classifier strategy: 'auto' (default — 'jev' when a decision provider is configured, such as TYPESAFE_API_KEY, LAYA_API_KEY with LAYA_BASE_URL, XOR_API_KEY with XOR_BASE_URL, SUBQ_API_KEY, PERPLEXITY_API_KEY, or CLOUDFLARE_API_KEY with CLOUDFLARE_ACCOUNT_ID, else 'heuristic'), 'heuristic' (no LLM), 'llm' (a cheap model picks per prompt), or 'jev' (a System One decision model — TypeSafe Jev, Laya, XOR, SubQ, Perplexity or Cloudflare Clef — with calibrated confidence).",
653
653
  choices: ["auto", "heuristic", "llm", "jev"],
654
654
  alias: "classifier-strategy",
655
655
  },
@@ -89,6 +89,7 @@ export declare enum AIProviderName {
89
89
  STACKIT = "stackit",
90
90
  STEPFUN = "stepfun",
91
91
  SUBCONSCIOUS = "subconscious",
92
+ SUBQ = "subq",
92
93
  SYNTHETIC = "synthetic",
93
94
  TELNYX = "telnyx",
94
95
  THINKING_MACHINES = "thinking-machines",
@@ -1611,6 +1612,9 @@ export declare enum SubconsciousModels {
1611
1612
  SUBCONSCIOUS_DEEPSEEK_V4_1_FLASH_MARATHON = "subconscious/deepseek-v4.1-flash-marathon",
1612
1613
  SUBCONSCIOUS_TIM_QWEN3_6_27B = "subconscious/tim-qwen3.6-27b"
1613
1614
  }
1615
+ export declare enum SubqModels {
1616
+ SUBQ_SNAP_PREVIEW = "subq-snap-preview"
1617
+ }
1614
1618
  export declare enum SyntheticModels {
1615
1619
  SYN_LARGE_TEXT = "syn:large:text",
1616
1620
  SYN_SMALL_TEXT = "syn:small:text",
@@ -94,6 +94,7 @@ export var AIProviderName;
94
94
  AIProviderName["STACKIT"] = "stackit";
95
95
  AIProviderName["STEPFUN"] = "stepfun";
96
96
  AIProviderName["SUBCONSCIOUS"] = "subconscious";
97
+ AIProviderName["SUBQ"] = "subq";
97
98
  AIProviderName["SYNTHETIC"] = "synthetic";
98
99
  AIProviderName["TELNYX"] = "telnyx";
99
100
  AIProviderName["THINKING_MACHINES"] = "thinking-machines";
@@ -1920,6 +1921,10 @@ export var SubconsciousModels;
1920
1921
  SubconsciousModels["SUBCONSCIOUS_DEEPSEEK_V4_1_FLASH_MARATHON"] = "subconscious/deepseek-v4.1-flash-marathon";
1921
1922
  SubconsciousModels["SUBCONSCIOUS_TIM_QWEN3_6_27B"] = "subconscious/tim-qwen3.6-27b";
1922
1923
  })(SubconsciousModels || (SubconsciousModels = {}));
1924
+ export var SubqModels;
1925
+ (function (SubqModels) {
1926
+ SubqModels["SUBQ_SNAP_PREVIEW"] = "subq-snap-preview";
1927
+ })(SubqModels || (SubqModels = {}));
1923
1928
  export var SyntheticModels;
1924
1929
  (function (SyntheticModels) {
1925
1930
  SyntheticModels["SYN_LARGE_TEXT"] = "syn:large:text";
@@ -468,22 +468,27 @@ const HAND_DESCRIPTORS = [
468
468
  setupUrl: "https://console.typesafe.ai/keys",
469
469
  },
470
470
  // Decision precedence is decideOrder, not position: typesafe 1, laya 2 and
471
- // xor 3 (from catalog/laya.json and catalog/xor.json), perplexity-decider 4,
472
- // cloudflare-clef 5.
471
+ // xor 3 (from catalog/laya.json and catalog/xor.json), subq 4 (from
472
+ // catalog/subq.json), perplexity-decider 5, cloudflare-clef 6.
473
473
  // resolveDefaultDecisionProvider() returns the first configured
474
474
  // DECISION_PROVIDERS entry in that order, so a host configured for several
475
475
  // keeps Jev for every built-in consumer and reaches the others only by
476
476
  // naming them. Renumbering silently changes which model routes, compacts
477
477
  // and plans for every such host.
478
+ // perplexity-decider and cloudflare-clef come last because each shares its
479
+ // environment key with a text provider: a key set only for that text provider
480
+ // must not displace a decision provider a host set up on purpose. subq is
481
+ // ahead of them only because SUBQ_API_KEY belongs to no other provider.
478
482
  {
479
483
  name: AIProviderName.PERPLEXITY_DECIDER,
480
484
  aliases: [],
481
485
  credentialsKey: "perplexityDecider",
482
486
  envVars: {
483
487
  // The same key the `perplexity` text provider reads, so an ambient
484
- // PERPLEXITY_API_KEY configures this provider too. Its decideOrder (4)
485
- // sits after XOR's (3), which is what keeps that from displacing any other
486
- // decision provider a host has configured.
488
+ // PERPLEXITY_API_KEY configures this provider too. Its decideOrder (5)
489
+ // sits after XOR's (3) and SubQ's (4), which have keys of their own, which
490
+ // is what keeps that from displacing any other decision provider a host
491
+ // has configured.
487
492
  apiKey: "PERPLEXITY_API_KEY",
488
493
  // Optional: the API is hosted at a public endpoint, so a key alone is
489
494
  // enough and there is no extraRequired.
@@ -495,7 +500,7 @@ const HAND_DESCRIPTORS = [
495
500
  // declaration that keeps it out of every generation code path, and out of
496
501
  // the way of the `perplexity` text provider.
497
502
  inferenceKinds: ["decide"],
498
- decideOrder: 4,
503
+ decideOrder: 5,
499
504
  toolSupport: "none",
500
505
  localRuntime: false,
501
506
  healthCheck: "env-only",
@@ -563,7 +568,7 @@ const HAND_DESCRIPTORS = [
563
568
  // declaration that keeps it out of every generation code path, and out of
564
569
  // the way of the `cloudflare` text provider.
565
570
  inferenceKinds: ["decide"],
566
- decideOrder: 5,
571
+ decideOrder: 6,
567
572
  toolSupport: "none",
568
573
  localRuntime: false,
569
574
  healthCheck: "env-only",
@@ -2,4 +2,4 @@ import type { DecideCatalogJson, ProviderCatalogJson } from "../../types/index.j
2
2
  export declare const CATALOG_JSON_ENTRIES: ProviderCatalogJson[];
3
3
  export declare const CATALOG_PROVIDER_IDS: readonly ["a2agent", "abliteration", "above-dev", "ai21", "aiand", "aihubmix", "aionlabs", "ambient", "api-route", "arcee", "atlas-cloud", "avian-io", "baidu-qianfan", "baseten", "bee-heossi", "byteplus-modelark", "bytez", "cerebras", "charm-hyper", "chutes", "cloudflare", "crusoe", "dashscope", "deepinfra", "deepseek", "empiriolabs", "featherless-ai", "fireworks", "friendli", "gmicloud", "gradientai", "groq", "hetzner-inference", "huggingface", "inception-labs", "inceptron", "inco", "inference-net", "io-intelligence", "koscompute", "lemonfox-ai", "lilac", "llmtech", "longcat", "mancer", "meta-model-api", "minimax", "mistral", "moark", "modelscope", "moonshot-ai", "morph", "naver-clova-studio", "nebius", "neuralwatt", "novita", "ovhcloud", "parasail", "pareto-inference", "perplexity", "poolside", "prime-intellect", "reka", "runinfra", "sakana-ai", "sambanova", "sarvam", "scaleway", "siliconflow", "stackit", "stepfun", "subconscious", "synthetic", "telnyx", "thinking-machines", "tinfoil", "together-ai", "umans-ai", "upstage", "venice-ai", "vispark", "vultr-inference", "wafer", "wandb-inference", "xai", "xiaomi-mimo", "z-ai"];
4
4
  export declare const DECIDE_CATALOG_JSON_ENTRIES: DecideCatalogJson[];
5
- export declare const DECIDE_CATALOG_PROVIDER_IDS: readonly ["laya", "xor"];
5
+ export declare const DECIDE_CATALOG_PROVIDER_IDS: readonly ["laya", "subq", "xor"];
@@ -73,6 +73,7 @@ import siliconflowJson from "./siliconflow.json" with { type: "json" };
73
73
  import stackitJson from "./stackit.json" with { type: "json" };
74
74
  import stepfunJson from "./stepfun.json" with { type: "json" };
75
75
  import subconsciousJson from "./subconscious.json" with { type: "json" };
76
+ import subqJson from "./subq.json" with { type: "json" };
76
77
  import syntheticJson from "./synthetic.json" with { type: "json" };
77
78
  import telnyxJson from "./telnyx.json" with { type: "json" };
78
79
  import thinkingMachinesJson from "./thinking-machines.json" with { type: "json" };
@@ -277,6 +278,7 @@ export const CATALOG_PROVIDER_IDS = [
277
278
  ];
278
279
  export const DECIDE_CATALOG_JSON_ENTRIES = [
279
280
  layaJson,
281
+ subqJson,
280
282
  xorJson,
281
283
  ].map(asDecideEntry);
282
- export const DECIDE_CATALOG_PROVIDER_IDS = ["laya", "xor"];
284
+ export const DECIDE_CATALOG_PROVIDER_IDS = ["laya", "subq", "xor"];
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "./provider-catalog.schema.json",
3
+ "id": "subq",
4
+ "displayName": "SubQ",
5
+ "aliases": ["subquadratic", "subq-snap"],
6
+ "inferenceKinds": ["decide"],
7
+ "wire": { "baseURL": "https://api.subq.ai" },
8
+ "models": {
9
+ "default": "subq-snap-preview",
10
+ "topModels": ["subq-snap-preview"],
11
+ "catalog": {
12
+ "subq-snap-preview": {
13
+ "contextWindow": 393216,
14
+ "maxOutputTokens": 1,
15
+ "vision": false,
16
+ "status": "preview",
17
+ "description": "Recommended - SubQ Snap Preview, decision model for boolean, choice and score questions"
18
+ }
19
+ }
20
+ },
21
+ "decisionLimits": { "maxStateTokens": 376000, "advisory": true },
22
+ "decide": {
23
+ "dialect": "system-one",
24
+ "order": 4,
25
+ "baseURLNormalize": ["strip-trailing-slash"],
26
+ "endpoint": "{baseURL}/v1/systemone",
27
+ "model": { "placement": "body" },
28
+ "errors": {
29
+ "rules": [
30
+ { "status": 401, "kind": "authentication" },
31
+ { "status": [402, 403, 422], "kind": "invalid_request" },
32
+ { "status": 429, "kind": "rate_limit" },
33
+ { "status": 503, "kind": "overloaded" },
34
+ { "statusMin": 500, "kind": "server" }
35
+ ],
36
+ "default": "invalid_request",
37
+ "bodyShapes": [{ "path": "detail.message" }, { "path": "detail" }]
38
+ }
39
+ },
40
+ "setup": {
41
+ "url": "https://console.subq.ai",
42
+ "apiKeyFormat": null,
43
+ "billingPolicy": "no-free-tier",
44
+ "description": "API key from the SubQ console",
45
+ "instructions": [
46
+ "1. Sign up at https://console.subq.ai and create an API key (the console shows it once)",
47
+ "2. Set {apiKeyEnvVar} in your .env file",
48
+ "3. A request made with no credits left returns HTTP 402"
49
+ ]
50
+ },
51
+ "evidence": {
52
+ "rosterVerified": {
53
+ "date": "2026-10-13",
54
+ "method": "Checked by the marketing session, not in this change: GET https://api.subq.ai/v1/models without a key listed subq-snap-preview, and docs.subq.ai/using-the-api/models was read the same day. No request was made to SubQ in this change"
55
+ },
56
+ "liveMatrix": null,
57
+ "addedInPR": "https://github.com/juspay/neurolink/pull/1986"
58
+ }
59
+ }
@@ -1,2 +1,2 @@
1
- export type CatalogProviderName = "a2agent" | "abliteration" | "above-dev" | "ai21" | "aiand" | "aihubmix" | "aionlabs" | "ambient" | "api-route" | "arcee" | "atlas-cloud" | "avian-io" | "baidu-qianfan" | "baseten" | "bee-heossi" | "byteplus-modelark" | "bytez" | "cerebras" | "charm-hyper" | "chutes" | "cloudflare" | "crusoe" | "dashscope" | "deepinfra" | "deepseek" | "empiriolabs" | "featherless-ai" | "fireworks" | "friendli" | "gmicloud" | "gradientai" | "groq" | "hetzner-inference" | "huggingface" | "inception-labs" | "inceptron" | "inco" | "inference-net" | "io-intelligence" | "koscompute" | "laya" | "lemonfox-ai" | "lilac" | "llmtech" | "longcat" | "mancer" | "meta-model-api" | "minimax" | "mistral" | "moark" | "modelscope" | "moonshot-ai" | "morph" | "naver-clova-studio" | "nebius" | "neuralwatt" | "novita" | "ovhcloud" | "parasail" | "pareto-inference" | "perplexity" | "poolside" | "prime-intellect" | "reka" | "runinfra" | "sakana-ai" | "sambanova" | "sarvam" | "scaleway" | "siliconflow" | "stackit" | "stepfun" | "subconscious" | "synthetic" | "telnyx" | "thinking-machines" | "tinfoil" | "together-ai" | "umans-ai" | "upstage" | "venice-ai" | "vispark" | "vultr-inference" | "wafer" | "wandb-inference" | "xai" | "xiaomi-mimo" | "xor" | "z-ai";
2
- export type CatalogCredentialKey = "a2agent" | "abliteration" | "aboveDev" | "ai21" | "aiand" | "aihubmix" | "aionlabs" | "ambient" | "apiRoute" | "arcee" | "atlasCloud" | "avianIo" | "baiduQianfan" | "baseten" | "beeHeossi" | "byteplusModelark" | "bytez" | "cerebras" | "charmHyper" | "chutes" | "cloudflare" | "crusoe" | "dashscope" | "deepinfra" | "deepseek" | "empiriolabs" | "featherlessAi" | "fireworks" | "friendli" | "gmicloud" | "gradientai" | "groq" | "hetznerInference" | "huggingFace" | "inceptionLabs" | "inceptron" | "inco" | "inferenceNet" | "ioIntelligence" | "koscompute" | "laya" | "lemonfoxAi" | "lilac" | "llmtech" | "longcat" | "mancer" | "metaModelApi" | "minimax" | "mistral" | "moark" | "modelscope" | "moonshotAi" | "morph" | "naverClovaStudio" | "nebius" | "neuralwatt" | "novita" | "ovhcloud" | "parasail" | "paretoInference" | "perplexity" | "poolside" | "primeIntellect" | "reka" | "runinfra" | "sakanaAi" | "sambanova" | "sarvam" | "scaleway" | "siliconflow" | "stackit" | "stepfun" | "subconscious" | "synthetic" | "telnyx" | "thinkingMachines" | "tinfoil" | "together" | "umansAi" | "upstage" | "veniceAi" | "vispark" | "vultrInference" | "wafer" | "wandbInference" | "xai" | "xiaomiMimo" | "xor" | "zAi";
1
+ export type CatalogProviderName = "a2agent" | "abliteration" | "above-dev" | "ai21" | "aiand" | "aihubmix" | "aionlabs" | "ambient" | "api-route" | "arcee" | "atlas-cloud" | "avian-io" | "baidu-qianfan" | "baseten" | "bee-heossi" | "byteplus-modelark" | "bytez" | "cerebras" | "charm-hyper" | "chutes" | "cloudflare" | "crusoe" | "dashscope" | "deepinfra" | "deepseek" | "empiriolabs" | "featherless-ai" | "fireworks" | "friendli" | "gmicloud" | "gradientai" | "groq" | "hetzner-inference" | "huggingface" | "inception-labs" | "inceptron" | "inco" | "inference-net" | "io-intelligence" | "koscompute" | "laya" | "lemonfox-ai" | "lilac" | "llmtech" | "longcat" | "mancer" | "meta-model-api" | "minimax" | "mistral" | "moark" | "modelscope" | "moonshot-ai" | "morph" | "naver-clova-studio" | "nebius" | "neuralwatt" | "novita" | "ovhcloud" | "parasail" | "pareto-inference" | "perplexity" | "poolside" | "prime-intellect" | "reka" | "runinfra" | "sakana-ai" | "sambanova" | "sarvam" | "scaleway" | "siliconflow" | "stackit" | "stepfun" | "subconscious" | "subq" | "synthetic" | "telnyx" | "thinking-machines" | "tinfoil" | "together-ai" | "umans-ai" | "upstage" | "venice-ai" | "vispark" | "vultr-inference" | "wafer" | "wandb-inference" | "xai" | "xiaomi-mimo" | "xor" | "z-ai";
2
+ export type CatalogCredentialKey = "a2agent" | "abliteration" | "aboveDev" | "ai21" | "aiand" | "aihubmix" | "aionlabs" | "ambient" | "apiRoute" | "arcee" | "atlasCloud" | "avianIo" | "baiduQianfan" | "baseten" | "beeHeossi" | "byteplusModelark" | "bytez" | "cerebras" | "charmHyper" | "chutes" | "cloudflare" | "crusoe" | "dashscope" | "deepinfra" | "deepseek" | "empiriolabs" | "featherlessAi" | "fireworks" | "friendli" | "gmicloud" | "gradientai" | "groq" | "hetznerInference" | "huggingFace" | "inceptionLabs" | "inceptron" | "inco" | "inferenceNet" | "ioIntelligence" | "koscompute" | "laya" | "lemonfoxAi" | "lilac" | "llmtech" | "longcat" | "mancer" | "metaModelApi" | "minimax" | "mistral" | "moark" | "modelscope" | "moonshotAi" | "morph" | "naverClovaStudio" | "nebius" | "neuralwatt" | "novita" | "ovhcloud" | "parasail" | "paretoInference" | "perplexity" | "poolside" | "primeIntellect" | "reka" | "runinfra" | "sakanaAi" | "sambanova" | "sarvam" | "scaleway" | "siliconflow" | "stackit" | "stepfun" | "subconscious" | "subq" | "synthetic" | "telnyx" | "thinkingMachines" | "tinfoil" | "together" | "umansAi" | "upstage" | "veniceAi" | "vispark" | "vultrInference" | "wafer" | "wandbInference" | "xai" | "xiaomiMimo" | "xor" | "zAi";
@@ -485,6 +485,10 @@ export type NeurolinkCredentials = {
485
485
  apiKey?: string;
486
486
  baseURL?: string;
487
487
  };
488
+ subq?: {
489
+ apiKey?: string;
490
+ baseURL?: string;
491
+ };
488
492
  synthetic?: {
489
493
  apiKey?: string;
490
494
  baseURL?: string;