@nexus-cortex/core 4.46.0 → 4.47.3
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/adapters/ChatCompletionsAPIAdapter.d.ts.map +1 -1
- package/dist/adapters/ChatCompletionsAPIAdapter.js +3 -1
- package/dist/adapters/ChatCompletionsAPIAdapter.js.map +1 -1
- package/dist/adapters/GatewayTranslationLayer.d.ts.map +1 -1
- package/dist/adapters/GatewayTranslationLayer.js +11 -6
- package/dist/adapters/GatewayTranslationLayer.js.map +1 -1
- package/dist/config/RuntimeConfigRegistry.d.ts.map +1 -1
- package/dist/config/RuntimeConfigRegistry.js +1 -0
- package/dist/config/RuntimeConfigRegistry.js.map +1 -1
- package/dist/config/SettingsLoader.d.ts.map +1 -1
- package/dist/config/SettingsLoader.js +1 -0
- package/dist/config/SettingsLoader.js.map +1 -1
- package/dist/config/SettingsSchema.d.ts +3 -0
- package/dist/config/SettingsSchema.d.ts.map +1 -1
- package/dist/config/SettingsSchema.js +9 -0
- package/dist/config/SettingsSchema.js.map +1 -1
- package/dist/models/cards/huggingface/hf-router.d.ts +19 -0
- package/dist/models/cards/huggingface/hf-router.d.ts.map +1 -0
- package/dist/models/cards/huggingface/hf-router.js +33 -0
- package/dist/models/cards/huggingface/hf-router.js.map +1 -0
- package/dist/models/cards/huggingface/hf-space-models.d.ts +22 -0
- package/dist/models/cards/huggingface/hf-space-models.d.ts.map +1 -0
- package/dist/models/cards/huggingface/hf-space-models.js +56 -0
- package/dist/models/cards/huggingface/hf-space-models.js.map +1 -0
- package/dist/models/cards/huggingface/hf-space.d.ts +11 -0
- package/dist/models/cards/huggingface/hf-space.d.ts.map +1 -0
- package/dist/models/cards/huggingface/hf-space.js +27 -0
- package/dist/models/cards/huggingface/hf-space.js.map +1 -0
- package/dist/models/cards/huggingface/index.d.ts +3 -2
- package/dist/models/cards/huggingface/index.d.ts.map +1 -1
- package/dist/models/cards/huggingface/index.js +5 -2
- package/dist/models/cards/huggingface/index.js.map +1 -1
- package/dist/models/cards/local/index.d.ts +1 -0
- package/dist/models/cards/local/index.d.ts.map +1 -1
- package/dist/models/cards/local/index.js +2 -0
- package/dist/models/cards/local/index.js.map +1 -1
- package/dist/models/cards/local/local-openai.d.ts +17 -0
- package/dist/models/cards/local/local-openai.d.ts.map +1 -0
- package/dist/models/cards/local/local-openai.js +33 -0
- package/dist/models/cards/local/local-openai.js.map +1 -0
- package/dist/models/cards/xai/grok-4-5.d.ts +13 -0
- package/dist/models/cards/xai/grok-4-5.d.ts.map +1 -0
- package/dist/models/cards/xai/grok-4-5.js +25 -0
- package/dist/models/cards/xai/grok-4-5.js.map +1 -0
- package/dist/models/cards/xai/index.d.ts +1 -0
- package/dist/models/cards/xai/index.d.ts.map +1 -1
- package/dist/models/cards/xai/index.js +1 -0
- package/dist/models/cards/xai/index.js.map +1 -1
- package/dist/models/configurators/HFSpaceConfigurator.d.ts +42 -0
- package/dist/models/configurators/HFSpaceConfigurator.d.ts.map +1 -0
- package/dist/models/configurators/HFSpaceConfigurator.js +71 -0
- package/dist/models/configurators/HFSpaceConfigurator.js.map +1 -0
- package/dist/models/configurators/HuggingFaceConfigurator.d.ts +7 -7
- package/dist/models/configurators/HuggingFaceConfigurator.d.ts.map +1 -1
- package/dist/models/configurators/HuggingFaceConfigurator.js +13 -6
- package/dist/models/configurators/HuggingFaceConfigurator.js.map +1 -1
- package/dist/models/configurators/LocalModelConfigurator.d.ts +7 -0
- package/dist/models/configurators/LocalModelConfigurator.d.ts.map +1 -1
- package/dist/models/configurators/LocalModelConfigurator.js +11 -1
- package/dist/models/configurators/LocalModelConfigurator.js.map +1 -1
- package/dist/models/configurators/QwenConfigurator.d.ts +0 -4
- package/dist/models/configurators/QwenConfigurator.d.ts.map +1 -1
- package/dist/models/configurators/QwenConfigurator.js +6 -7
- package/dist/models/configurators/QwenConfigurator.js.map +1 -1
- package/dist/models/hfSpace/normalize.d.ts +34 -0
- package/dist/models/hfSpace/normalize.d.ts.map +1 -0
- package/dist/models/hfSpace/normalize.js +195 -0
- package/dist/models/hfSpace/normalize.js.map +1 -0
- package/dist/models/registry/ModularModelRegistry.d.ts.map +1 -1
- package/dist/models/registry/ModularModelRegistry.js +17 -1
- package/dist/models/registry/ModularModelRegistry.js.map +1 -1
- package/dist/orchestrator/APIClient.d.ts +18 -0
- package/dist/orchestrator/APIClient.d.ts.map +1 -1
- package/dist/orchestrator/APIClient.js +101 -0
- package/dist/orchestrator/APIClient.js.map +1 -1
- package/dist/system-messages/SystemMessageLoader.d.ts +13 -0
- package/dist/system-messages/SystemMessageLoader.d.ts.map +1 -1
- package/dist/system-messages/SystemMessageLoader.js +30 -2
- package/dist/system-messages/SystemMessageLoader.js.map +1 -1
- package/dist/system-messages/memoryArchive.d.ts +28 -0
- package/dist/system-messages/memoryArchive.d.ts.map +1 -0
- package/dist/system-messages/memoryArchive.js +125 -0
- package/dist/system-messages/memoryArchive.js.map +1 -0
- package/dist/tools/ServerSideTools.d.ts.map +1 -1
- package/dist/tools/ServerSideTools.js +9 -0
- package/dist/tools/ServerSideTools.js.map +1 -1
- package/package.json +4 -3
- package/dist/models/cards/huggingface/llama-3-8b-instruct.d.ts +0 -17
- package/dist/models/cards/huggingface/llama-3-8b-instruct.d.ts.map +0 -1
- package/dist/models/cards/huggingface/llama-3-8b-instruct.js +0 -25
- package/dist/models/cards/huggingface/llama-3-8b-instruct.js.map +0 -1
- package/dist/models/cards/huggingface/mistral-7b-instruct.d.ts +0 -10
- package/dist/models/cards/huggingface/mistral-7b-instruct.d.ts.map +0 -1
- package/dist/models/cards/huggingface/mistral-7b-instruct.js +0 -18
- package/dist/models/cards/huggingface/mistral-7b-instruct.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalModelConfigurator.js","sourceRoot":"","sources":["../../../src/models/configurators/LocalModelConfigurator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"LocalModelConfigurator.js","sourceRoot":"","sources":["../../../src/models/configurators/LocalModelConfigurator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgCH,MAAM,UAAU,sBAAsB,CAAC,OAA0B;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,2CAA2C,CAAC;IACjF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC;IACnE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAE7C,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;QAEtB,GAAG,EAAE;YACH,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,QAAQ;SACrB;QAED,KAAK,EAAE;YACL,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE,2BAA2B;YACpC,gBAAgB,EAAE,YAAY;YAC9B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,iBAAiB,EAAE,aAAa;SACjC;QAED,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,aAAa;gBACxB,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,GAAG;aACT;YACD,SAAS,EAAE;gBACT,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO,CAAC,YAAY;aAC1B;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,GAAG;gBACZ,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,GAAG;aACT;SACF;QAED,MAAM,EAAE;YACN,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,iBAAiB,EAAE,IAAI,EAAG,2BAA2B;YACrD,eAAe,EAAE,OAAO,CAAE,2BAA2B;SACtD;QAED,SAAS,EAAE;YACT,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;SACd;QAED,UAAU,EAAE;YACV,QAAQ,EAAE,MAAM;YAChB,oBAAoB,EAAE;gBACpB,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE,GAAG;gBACf,YAAY,EAAE,IAAI;aACnB;YACD,QAAQ,EAAE;gBACR,cAAc,EAAE,EAAE;gBAClB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,KAAK,CAAE,oCAAoC;aAC5D;SACF;QAED,IAAI,EAAE;YACJ,eAAe,EAAE,GAAG,EAAI,yBAAyB;YACjD,gBAAgB,EAAE,GAAG,CAAG,yBAAyB;SAClD;QAED,6EAA6E;QAC7E,2EAA2E;QAC3E,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI;YAC/B,SAAS,EAAE;gBACT,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,mBAAmB;gBAC3B,gBAAgB,EAAE,gBAAgB;gBAClC,OAAO,EAAE,aAAa;aACvB;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -17,10 +17,6 @@ export interface QwenModelOptions {
|
|
|
17
17
|
outputCost: number;
|
|
18
18
|
supportsTools?: boolean;
|
|
19
19
|
supportsVision?: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Use Hugging Face endpoint instead of DashScope
|
|
22
|
-
*/
|
|
23
|
-
useHuggingFace?: boolean;
|
|
24
20
|
}
|
|
25
21
|
export declare function createQwenModelConfig(options: QwenModelOptions): ModelConfig;
|
|
26
22
|
//# sourceMappingURL=QwenConfigurator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QwenConfigurator.d.ts","sourceRoot":"","sources":["../../../src/models/configurators/QwenConfigurator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"QwenConfigurator.d.ts","sourceRoot":"","sources":["../../../src/models/configurators/QwenConfigurator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAsF5E"}
|
|
@@ -8,11 +8,10 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export function createQwenModelConfig(options) {
|
|
10
10
|
const supportsTools = options.supportsTools !== undefined ? options.supportsTools : true;
|
|
11
|
-
// DashScope
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const apiKeyEnvVar = options.useHuggingFace ? 'HUGGINGFACE_API_KEY' : 'DASHSCOPE_API_KEY';
|
|
11
|
+
// DashScope (Alibaba Cloud) endpoint. For Qwen via Hugging Face, use the generic
|
|
12
|
+
// hf-router card (HF_MODEL_ID) instead — HF serving is handled there, not here.
|
|
13
|
+
const endpoint = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation';
|
|
14
|
+
const apiKeyEnvVar = 'DASHSCOPE_API_KEY';
|
|
16
15
|
return {
|
|
17
16
|
id: options.id,
|
|
18
17
|
provider: 'qwen',
|
|
@@ -22,8 +21,8 @@ export function createQwenModelConfig(options) {
|
|
|
22
21
|
pattern: 'chat/completions', // OpenAI-compatible format
|
|
23
22
|
endpoint: endpoint,
|
|
24
23
|
apiKeyEnvVar: apiKeyEnvVar,
|
|
25
|
-
authHeader:
|
|
26
|
-
authPrefix:
|
|
24
|
+
authHeader: 'Authorization',
|
|
25
|
+
authPrefix: 'Bearer'
|
|
27
26
|
},
|
|
28
27
|
tools: {
|
|
29
28
|
supported: supportsTools,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QwenConfigurator.js","sourceRoot":"","sources":["../../../src/models/configurators/QwenConfigurator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"QwenConfigurator.js","sourceRoot":"","sources":["../../../src/models/configurators/QwenConfigurator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAEzF,iFAAiF;IACjF,gFAAgF;IAChF,MAAM,QAAQ,GAAG,gFAAgF,CAAC;IAElG,MAAM,YAAY,GAAG,mBAAmB,CAAC;IAEzC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;QAEtB,GAAG,EAAE;YACH,OAAO,EAAE,kBAAkB,EAAG,2BAA2B;YACzD,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,QAAQ;SACrB;QAED,KAAK,EAAE;YACL,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE,2BAA2B;YACpC,gBAAgB,EAAE,YAAY;YAC9B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,iBAAiB,EAAE,aAAa;SACjC;QAED,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,aAAa;gBACxB,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,GAAG;aACT;YACD,SAAS,EAAE;gBACT,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,OAAO,CAAC,YAAY;aAC1B;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,GAAG;gBACZ,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,GAAG;aACT;SACF;QAED,MAAM,EAAE;YACN,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,iBAAiB,EAAE,EAAE;YACrB,eAAe,EAAE,MAAM;SACxB;QAED,SAAS,EAAE;YACT,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;SACd;QAED,UAAU,EAAE;YACV,QAAQ,EAAE,MAAM;YAChB,oBAAoB,EAAE;gBACpB,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE,GAAG;gBACf,YAAY,EAAE,IAAI;aACnB;YACD,QAAQ,EAAE;gBACR,cAAc,EAAE,EAAE;gBAClB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,aAAa;gBAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aACxD;SACF;QAED,IAAI,EAAE;YACJ,eAAe,EAAE,OAAO,CAAC,SAAS;YAClC,gBAAgB,EAAE,OAAO,CAAC,UAAU;SACrC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HF Gradio Space output normalizer.
|
|
3
|
+
*
|
|
4
|
+
* A Gradio-space model returns ONE blob of raw text containing the model's NATIVE
|
|
5
|
+
* chain-of-thought (`<think>…</think>`) and tool-call syntax. Different model families
|
|
6
|
+
* emit different tool-call formats; this module converts any of them into the canonical
|
|
7
|
+
* OpenAI shape (`reasoning_content` + `tool_calls[]`) so the rest of the harness — which
|
|
8
|
+
* is provider-agnostic — treats an hf-space model like any chat/completions model.
|
|
9
|
+
*
|
|
10
|
+
* Scoped to the hf-space provider ONLY. Real OpenAI/DeepSeek/etc. responses are already
|
|
11
|
+
* structured and must NOT go through this (they'd be corrupted).
|
|
12
|
+
*
|
|
13
|
+
* (TypeScript port of the bench `toolparse.py`.)
|
|
14
|
+
*/
|
|
15
|
+
export interface HFToolCall {
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'function';
|
|
18
|
+
function: {
|
|
19
|
+
name: string;
|
|
20
|
+
arguments: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface ParsedHFCompletion {
|
|
24
|
+
reasoning: string;
|
|
25
|
+
content: string;
|
|
26
|
+
toolCalls: HFToolCall[];
|
|
27
|
+
}
|
|
28
|
+
export declare function parseHFCompletion(raw: string): ParsedHFCompletion;
|
|
29
|
+
/** OpenAI sends assistant tool_calls[].function.arguments as a JSON STRING, but HF chat
|
|
30
|
+
* templates call .items() on it (expect a mapping). Parse them to objects before send.
|
|
31
|
+
* Also coerce content: null -> "" — templates that concatenate content raw
|
|
32
|
+
* (Phi-4-mini) crash on None, and pure tool-call assistant turns carry null. */
|
|
33
|
+
export declare function normalizeToolCallArguments(messages: any[]): any[];
|
|
34
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../src/models/hfSpace/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAkFD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CA2EjE;AAED;;;iFAGiF;AACjF,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAUjE"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HF Gradio Space output normalizer.
|
|
3
|
+
*
|
|
4
|
+
* A Gradio-space model returns ONE blob of raw text containing the model's NATIVE
|
|
5
|
+
* chain-of-thought (`<think>…</think>`) and tool-call syntax. Different model families
|
|
6
|
+
* emit different tool-call formats; this module converts any of them into the canonical
|
|
7
|
+
* OpenAI shape (`reasoning_content` + `tool_calls[]`) so the rest of the harness — which
|
|
8
|
+
* is provider-agnostic — treats an hf-space model like any chat/completions model.
|
|
9
|
+
*
|
|
10
|
+
* Scoped to the hf-space provider ONLY. Real OpenAI/DeepSeek/etc. responses are already
|
|
11
|
+
* structured and must NOT go through this (they'd be corrupted).
|
|
12
|
+
*
|
|
13
|
+
* (TypeScript port of the bench `toolparse.py`.)
|
|
14
|
+
*/
|
|
15
|
+
import { randomUUID } from 'crypto';
|
|
16
|
+
const END_TOKENS = ['<|im_end|>', '<|end|>', '<|eot_id|>', '<|endoftext|>', '</s>'];
|
|
17
|
+
function mkCall(name, args) {
|
|
18
|
+
return {
|
|
19
|
+
id: 'call_' + randomUUID().replace(/-/g, '').slice(0, 24),
|
|
20
|
+
type: 'function',
|
|
21
|
+
function: {
|
|
22
|
+
name,
|
|
23
|
+
arguments: typeof args === 'string' ? args : JSON.stringify(args ?? {}),
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function stripEndTokens(s) {
|
|
28
|
+
for (const t of END_TOKENS)
|
|
29
|
+
s = s.split(t).join('');
|
|
30
|
+
return s.trim();
|
|
31
|
+
}
|
|
32
|
+
/** Qwen enable_thinking=True puts the opening <think> in the PROMPT, so output has the
|
|
33
|
+
* closing </think> only. Split at the first </think>: before = reasoning, after = rest.
|
|
34
|
+
* Families that emit BOTH tags (SmolLM3) can also overrun max_tokens mid-thought,
|
|
35
|
+
* leaving an opening <think> with no close — treat that whole tail as reasoning
|
|
36
|
+
* rather than leaking raw think-text into content. */
|
|
37
|
+
function extractReasoning(s) {
|
|
38
|
+
const idx = s.indexOf('</think>');
|
|
39
|
+
if (idx === -1) {
|
|
40
|
+
const open = s.indexOf('<think>');
|
|
41
|
+
if (open !== -1) {
|
|
42
|
+
return {
|
|
43
|
+
reasoning: s.slice(open + '<think>'.length).trim(),
|
|
44
|
+
rest: s.slice(0, open).trim(),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return { reasoning: '', rest: s };
|
|
48
|
+
}
|
|
49
|
+
const reasoning = s.slice(0, idx).replace(/<think>/g, '').trim();
|
|
50
|
+
const rest = s.slice(idx + '</think>'.length).trim();
|
|
51
|
+
return { reasoning, rest };
|
|
52
|
+
}
|
|
53
|
+
/** LFM2.5 pythonic: `[get_weather(city="Paris"), other(x=1)]` → [{name, arguments}]. */
|
|
54
|
+
function parsePythonic(seg) {
|
|
55
|
+
const out = [];
|
|
56
|
+
const callRe = /([A-Za-z_]\w*)\s*\(([^)]*)\)/g;
|
|
57
|
+
let m;
|
|
58
|
+
while ((m = callRe.exec(seg))) {
|
|
59
|
+
const name = m[1];
|
|
60
|
+
const argstr = m[2];
|
|
61
|
+
const args = {};
|
|
62
|
+
const argRe = /([A-Za-z_]\w*)\s*=\s*("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|true|false|-?\d+\.?\d*)/g;
|
|
63
|
+
let a;
|
|
64
|
+
while ((a = argRe.exec(argstr))) {
|
|
65
|
+
const k = a[1];
|
|
66
|
+
let v = a[2];
|
|
67
|
+
if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'"))) {
|
|
68
|
+
args[k] = v.slice(1, -1);
|
|
69
|
+
}
|
|
70
|
+
else if (v === 'true' || v === 'false')
|
|
71
|
+
args[k] = v === 'true';
|
|
72
|
+
else
|
|
73
|
+
args[k] = Number(v);
|
|
74
|
+
}
|
|
75
|
+
out.push({ name, arguments: args });
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/** Qwen3.5 XML: `<function=name><parameter=k>v</parameter></function>`. */
|
|
80
|
+
function parseXml(body) {
|
|
81
|
+
const out = [];
|
|
82
|
+
const funcRe = /<function=([^>]+)>([\s\S]*?)<\/function>/g;
|
|
83
|
+
let m;
|
|
84
|
+
while ((m = funcRe.exec(body))) {
|
|
85
|
+
const name = m[1].trim();
|
|
86
|
+
const args = {};
|
|
87
|
+
const paramRe = /<parameter=([^>]+)>\s*([\s\S]*?)\s*<\/parameter>/g;
|
|
88
|
+
let p;
|
|
89
|
+
while ((p = paramRe.exec(m[2])))
|
|
90
|
+
args[p[1].trim()] = p[2].trim();
|
|
91
|
+
out.push({ name, arguments: args });
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
export function parseHFCompletion(raw) {
|
|
96
|
+
raw = raw.replace(/^\[MODEL=[^\]]*\]\s*/, '');
|
|
97
|
+
const { reasoning, rest } = extractReasoning(raw);
|
|
98
|
+
raw = rest;
|
|
99
|
+
// 1. LFM2.5 pythonic
|
|
100
|
+
const lfmRe = /<\|tool_call_start\|>([\s\S]*?)<\|tool_call_end\|>/g;
|
|
101
|
+
const lfmSegs = [];
|
|
102
|
+
let lm;
|
|
103
|
+
while ((lm = lfmRe.exec(raw)))
|
|
104
|
+
lfmSegs.push(lm[1]);
|
|
105
|
+
if (lfmSegs.length) {
|
|
106
|
+
const tc = lfmSegs.flatMap(parsePythonic).map((o) => mkCall(o.name, o.arguments));
|
|
107
|
+
if (tc.length)
|
|
108
|
+
return { reasoning, content: stripEndTokens(raw.replace(lfmRe, '')), toolCalls: tc };
|
|
109
|
+
}
|
|
110
|
+
const body = stripEndTokens(raw);
|
|
111
|
+
// 2. Qwen3.5 XML
|
|
112
|
+
if (body.includes('<function=')) {
|
|
113
|
+
const tc = parseXml(body).map((o) => mkCall(o.name, o.arguments));
|
|
114
|
+
if (tc.length) {
|
|
115
|
+
const content = body.replace(/<tool_call>[\s\S]*?<\/tool_call>/g, '').trim();
|
|
116
|
+
return { reasoning, content, toolCalls: tc };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// 3. Hermes JSON <tool_call>{...}</tool_call>
|
|
120
|
+
const tc = [];
|
|
121
|
+
const jsonRe = /<tool_call>\s*(\{[\s\S]*?\})\s*<\/tool_call>/g;
|
|
122
|
+
let jm;
|
|
123
|
+
while ((jm = jsonRe.exec(body))) {
|
|
124
|
+
try {
|
|
125
|
+
const o = JSON.parse(jm[1]);
|
|
126
|
+
tc.push(mkCall(o.name, o.arguments ?? o.parameters));
|
|
127
|
+
}
|
|
128
|
+
catch { /* skip */ }
|
|
129
|
+
}
|
|
130
|
+
let content = body.replace(jsonRe, '').trim();
|
|
131
|
+
// 3b. Phi-4-mini token-wrapped array: <|tool_call|>[{...}]<|/tool_call|>
|
|
132
|
+
// (with the tools block rendered, Phi wraps its JSON array in these special
|
|
133
|
+
// tokens rather than emitting it bare; closing token may be truncated away)
|
|
134
|
+
if (!tc.length) {
|
|
135
|
+
const phiRe = /<\|tool_call\|>\s*(\[[\s\S]*?\])\s*(?:<\|\/tool_call\|>)?/g;
|
|
136
|
+
let pm;
|
|
137
|
+
while ((pm = phiRe.exec(content))) {
|
|
138
|
+
try {
|
|
139
|
+
const arr = JSON.parse(pm[1]);
|
|
140
|
+
if (Array.isArray(arr)) {
|
|
141
|
+
for (const o of arr) {
|
|
142
|
+
if (o && typeof o === 'object' && 'name' in o)
|
|
143
|
+
tc.push(mkCall(o.name, o.arguments ?? o.parameters));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch { /* skip */ }
|
|
148
|
+
}
|
|
149
|
+
if (tc.length)
|
|
150
|
+
content = content.replace(phiRe, '').replace(/<\|\/?tool_call\|>/g, '').trim();
|
|
151
|
+
}
|
|
152
|
+
// 4. bare JSON array / object (Phi-4-mini)
|
|
153
|
+
if (!tc.length && content.startsWith('[') && content.includes('"name"')) {
|
|
154
|
+
try {
|
|
155
|
+
const arr = JSON.parse(content);
|
|
156
|
+
if (Array.isArray(arr) && arr.every((o) => o && typeof o === 'object' && 'name' in o)) {
|
|
157
|
+
for (const o of arr)
|
|
158
|
+
tc.push(mkCall(o.name, o.arguments ?? o.parameters));
|
|
159
|
+
content = '';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch { /* skip */ }
|
|
163
|
+
}
|
|
164
|
+
if (!tc.length && content.startsWith('{') && content.includes('"name"')) {
|
|
165
|
+
try {
|
|
166
|
+
const o = JSON.parse(content);
|
|
167
|
+
if (o && typeof o === 'object' && 'name' in o) {
|
|
168
|
+
tc.push(mkCall(o.name, o.arguments ?? o.parameters));
|
|
169
|
+
content = '';
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch { /* skip */ }
|
|
173
|
+
}
|
|
174
|
+
return { reasoning, content, toolCalls: tc };
|
|
175
|
+
}
|
|
176
|
+
/** OpenAI sends assistant tool_calls[].function.arguments as a JSON STRING, but HF chat
|
|
177
|
+
* templates call .items() on it (expect a mapping). Parse them to objects before send.
|
|
178
|
+
* Also coerce content: null -> "" — templates that concatenate content raw
|
|
179
|
+
* (Phi-4-mini) crash on None, and pure tool-call assistant turns carry null. */
|
|
180
|
+
export function normalizeToolCallArguments(messages) {
|
|
181
|
+
for (const m of messages || []) {
|
|
182
|
+
if (m && m.content === null)
|
|
183
|
+
m.content = '';
|
|
184
|
+
for (const tc of (m?.tool_calls || [])) {
|
|
185
|
+
if (tc?.function && typeof tc.function.arguments === 'string') {
|
|
186
|
+
try {
|
|
187
|
+
tc.function.arguments = JSON.parse(tc.function.arguments);
|
|
188
|
+
}
|
|
189
|
+
catch { /* leave */ }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return messages;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/models/hfSpace/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModularModelRegistry.d.ts","sourceRoot":"","sources":["../../../src/models/registry/ModularModelRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ModularModelRegistry.d.ts","sourceRoot":"","sources":["../../../src/models/registry/ModularModelRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAmB9E,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC;CAC1C;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,OAAO,CAA8B;gBAEjC,OAAO,GAAE,2BAAgC;IAKrD;;OAEG;IACH,OAAO,CAAC,cAAc;IA6KtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAIvC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAgBtC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAMpD;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;IAMhD;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAuB7C;;;OAGG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAiB/C;;;OAGG;IACH,YAAY,IAAI,WAAW,EAAE;CAG9B"}
|
|
@@ -27,6 +27,8 @@ import * as moonshotModels from '../cards/moonshot/index.js';
|
|
|
27
27
|
import * as minimaxModels from '../cards/minimax/index.js';
|
|
28
28
|
import * as cloudflareModels from '../cards/cloudflare/index.js';
|
|
29
29
|
import * as mercuryModels from '../cards/mercury/index.js';
|
|
30
|
+
import * as localModels from '../cards/local/index.js';
|
|
31
|
+
import * as huggingfaceModels from '../cards/huggingface/index.js';
|
|
30
32
|
/**
|
|
31
33
|
* Modular Model Registry
|
|
32
34
|
*
|
|
@@ -44,8 +46,11 @@ export class ModularModelRegistry {
|
|
|
44
46
|
*/
|
|
45
47
|
loadModelCards() {
|
|
46
48
|
// All models from modular cards (100% coverage)
|
|
49
|
+
const hfRouterCard = huggingfaceModels.hfRouter; // ModelConfig | null (set via HF_MODEL_ID)
|
|
50
|
+
const hfSpaceCard = huggingfaceModels.hfSpace; // ModelConfig | null (set via HF_SPACE_ID)
|
|
47
51
|
const allModelCards = [
|
|
48
52
|
// XAI models
|
|
53
|
+
xaiModels.grok45,
|
|
49
54
|
xaiModels.grok43,
|
|
50
55
|
xaiModels.grok420Reasoning,
|
|
51
56
|
xaiModels.grok420NonReasoning,
|
|
@@ -154,7 +159,18 @@ export class ModularModelRegistry {
|
|
|
154
159
|
cloudflareModels.cfDeepseekR1Distill32b,
|
|
155
160
|
// Mercury (Inception Labs) — diffusion LLM, OpenAI-compatible.
|
|
156
161
|
// Direct API serves only mercury-2 (verified 2026-06-07).
|
|
157
|
-
mercuryModels.mercury2
|
|
162
|
+
mercuryModels.mercury2,
|
|
163
|
+
// Local / self-hosted inference for the harness or helper model.
|
|
164
|
+
// Point LOCAL_MODEL_ENDPOINT at an OpenAI-compatible server; select via
|
|
165
|
+
// DEFAULT_MODEL_ID=local or HELPER_MODEL_ID=local.
|
|
166
|
+
localModels.localOpenAI,
|
|
167
|
+
// HF Inference Providers — only registers when HF_MODEL_ID is set (a served repo id).
|
|
168
|
+
...(hfRouterCard ? [hfRouterCard] : []),
|
|
169
|
+
// HF Gradio Space (native hf-space transport) — registers when HF_SPACE_ID is set.
|
|
170
|
+
...(hfSpaceCard ? [hfSpaceCard] : []),
|
|
171
|
+
// Per-model Space cards — each registers via HF_SPACE_ID_<SLUG>, or all via
|
|
172
|
+
// HF_SPACE_CANDIDATES=true + shared HF_SPACE_ID (swap the Space's MODEL_ID).
|
|
173
|
+
...huggingfaceModels.hfSpaceModelCards,
|
|
158
174
|
];
|
|
159
175
|
// Apply user filter if provided
|
|
160
176
|
const filteredModels = this.options.filter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModularModelRegistry.js","sourceRoot":"","sources":["../../../src/models/registry/ModularModelRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,6CAA6C;AAC7C,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ModularModelRegistry.js","sourceRoot":"","sources":["../../../src/models/registry/ModularModelRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -111,6 +111,13 @@ export declare class APIClient {
|
|
|
111
111
|
* @returns Streaming response with chunks and final message
|
|
112
112
|
*/
|
|
113
113
|
streamRequest(request: PreparedRequest, modelConfig: ModelConfig): StreamingResponse;
|
|
114
|
+
/**
|
|
115
|
+
* Emulate streaming for blocking transports (hf-space): run the normal
|
|
116
|
+
* non-streaming request, then emit its content as a single-pass chunk
|
|
117
|
+
* stream. Callers get the same StreamingResponse contract — text arrives
|
|
118
|
+
* in one delta rather than incrementally.
|
|
119
|
+
*/
|
|
120
|
+
private streamViaNonStreaming;
|
|
114
121
|
/**
|
|
115
122
|
* Send request using Messages API pattern
|
|
116
123
|
*
|
|
@@ -175,6 +182,17 @@ export declare class APIClient {
|
|
|
175
182
|
* Format: OpenAI Chat Completions API
|
|
176
183
|
*/
|
|
177
184
|
private sendChatCompletionsAPI;
|
|
185
|
+
/**
|
|
186
|
+
* Send request to a HuggingFace Gradio Space (provider 'hf-space').
|
|
187
|
+
*
|
|
188
|
+
* The model is served by a Gradio app exposing a `/run(messages_json, tools_json,
|
|
189
|
+
* max_tokens, temperature)` API. We reuse the chat/completions request builder to get
|
|
190
|
+
* OpenAI-shaped messages+tools, call the space via @gradio/client, then normalize the
|
|
191
|
+
* raw model text back into an OpenAI chat.completion object so ALL downstream
|
|
192
|
+
* canonicalization (tool_calls, reasoning_content) is reused unchanged. Non-streaming
|
|
193
|
+
* (the Gradio predict() call is blocking).
|
|
194
|
+
*/
|
|
195
|
+
private sendHFSpaceAPI;
|
|
178
196
|
/**
|
|
179
197
|
* Extract <system-reminder> content from Responses API input items.
|
|
180
198
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"APIClient.d.ts","sourceRoot":"","sources":["../../src/orchestrator/APIClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"APIClient.d.ts","sourceRoot":"","sources":["../../src/orchestrator/APIClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import OpenAI from 'openai';
|
|
|
13
13
|
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
14
14
|
import { GoogleGenAI } from '@google/genai';
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
|
+
import { parseHFCompletion, normalizeToolCallArguments } from '../models/hfSpace/normalize.js';
|
|
16
17
|
import { anthropicCredentialService, CredentialError } from '../config/AnthropicCredentialService.js';
|
|
17
18
|
/**
|
|
18
19
|
* Anthropic families on the adaptive-thinking-only request surface — sending
|
|
@@ -141,6 +142,10 @@ export class APIClient {
|
|
|
141
142
|
case 'chat/completions':
|
|
142
143
|
// OpenAI Chat Completions API (used by OpenAI, XAI, DeepSeek, Groq)
|
|
143
144
|
return this.sendChatCompletionsAPI(request, modelConfig);
|
|
145
|
+
case 'hf-space':
|
|
146
|
+
// HuggingFace Gradio Space (model served via a Gradio app, called through
|
|
147
|
+
// @gradio/client; raw output normalized to the OpenAI shape in-process).
|
|
148
|
+
return this.sendHFSpaceAPI(request, modelConfig);
|
|
144
149
|
case 'responses':
|
|
145
150
|
// OpenAI Responses API (used by OpenAI gpt-5-codex, XAI stateful)
|
|
146
151
|
return this.sendResponsesAPI(request, modelConfig);
|
|
@@ -184,6 +189,10 @@ export class APIClient {
|
|
|
184
189
|
return this.streamGenerateContentAPI(request, modelConfig);
|
|
185
190
|
case 'google-genai':
|
|
186
191
|
throw new Error('Streaming not supported for google-genai pattern');
|
|
192
|
+
case 'hf-space':
|
|
193
|
+
// Gradio predict() is blocking — emulate a stream so agent/streaming
|
|
194
|
+
// callers work against hf-space models (one text chunk + completion).
|
|
195
|
+
return this.streamViaNonStreaming(request, modelConfig);
|
|
187
196
|
case 'google-sdk':
|
|
188
197
|
// Google SDK with full tool support (experimental)
|
|
189
198
|
return this.streamGoogleSDK(request, modelConfig);
|
|
@@ -191,6 +200,29 @@ export class APIClient {
|
|
|
191
200
|
throw new Error(`Unsupported API pattern for streaming: ${apiPattern}`);
|
|
192
201
|
}
|
|
193
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Emulate streaming for blocking transports (hf-space): run the normal
|
|
205
|
+
* non-streaming request, then emit its content as a single-pass chunk
|
|
206
|
+
* stream. Callers get the same StreamingResponse contract — text arrives
|
|
207
|
+
* in one delta rather than incrementally.
|
|
208
|
+
*/
|
|
209
|
+
streamViaNonStreaming(request, modelConfig) {
|
|
210
|
+
const responsePromise = this.sendRequest(request, modelConfig);
|
|
211
|
+
const finalMessage = responsePromise.then((resp) => resp.data);
|
|
212
|
+
async function* chunks() {
|
|
213
|
+
const data = await finalMessage;
|
|
214
|
+
const message = data?.choices?.[0]?.message ?? {};
|
|
215
|
+
yield { type: 'message_start', data };
|
|
216
|
+
if (message.content) {
|
|
217
|
+
yield { type: 'text_delta', delta: message.content, snapshot: message.content };
|
|
218
|
+
}
|
|
219
|
+
for (const tc of message.tool_calls ?? []) {
|
|
220
|
+
yield { type: 'tool_use_complete', data: tc };
|
|
221
|
+
}
|
|
222
|
+
yield { type: 'message_stop', data };
|
|
223
|
+
}
|
|
224
|
+
return { chunks: chunks(), finalMessage };
|
|
225
|
+
}
|
|
194
226
|
/**
|
|
195
227
|
* Send request using Messages API pattern
|
|
196
228
|
*
|
|
@@ -666,6 +698,75 @@ export class APIClient {
|
|
|
666
698
|
headers: {}
|
|
667
699
|
};
|
|
668
700
|
}
|
|
701
|
+
/**
|
|
702
|
+
* Send request to a HuggingFace Gradio Space (provider 'hf-space').
|
|
703
|
+
*
|
|
704
|
+
* The model is served by a Gradio app exposing a `/run(messages_json, tools_json,
|
|
705
|
+
* max_tokens, temperature)` API. We reuse the chat/completions request builder to get
|
|
706
|
+
* OpenAI-shaped messages+tools, call the space via @gradio/client, then normalize the
|
|
707
|
+
* raw model text back into an OpenAI chat.completion object so ALL downstream
|
|
708
|
+
* canonicalization (tool_calls, reasoning_content) is reused unchanged. Non-streaming
|
|
709
|
+
* (the Gradio predict() call is blocking).
|
|
710
|
+
*/
|
|
711
|
+
async sendHFSpaceAPI(request, modelConfig) {
|
|
712
|
+
const { chatRequest } = this.buildChatCompletionsRequest(request, modelConfig, { stream: false });
|
|
713
|
+
const messages = normalizeToolCallArguments(chatRequest.messages || []);
|
|
714
|
+
const tools = chatRequest.tools;
|
|
715
|
+
const maxTokens = chatRequest.max_tokens ?? chatRequest.max_completion_tokens ?? 512;
|
|
716
|
+
// A card-declared default temperature WINS over the request's inherited value:
|
|
717
|
+
// format-fragile tool callers (Phi-4-mini) only emit clean calls near-greedy.
|
|
718
|
+
const cardTemp = modelConfig.parameters?.temperature?.default;
|
|
719
|
+
const temperature = cardTemp ?? chatRequest.temperature ?? 0.7;
|
|
720
|
+
const spaceId = modelConfig.api.endpoint; // e.g. "user/space-name"
|
|
721
|
+
const hfToken = process.env[modelConfig.api.apiKeyEnvVar] || process.env.HF_TOKEN;
|
|
722
|
+
const { Client } = await import('@gradio/client');
|
|
723
|
+
let result;
|
|
724
|
+
try {
|
|
725
|
+
const app = await Client.connect(spaceId, hfToken ? { hf_token: hfToken } : undefined);
|
|
726
|
+
result = await app.predict('/run', [
|
|
727
|
+
JSON.stringify(messages),
|
|
728
|
+
tools ? JSON.stringify(tools) : '',
|
|
729
|
+
maxTokens,
|
|
730
|
+
temperature,
|
|
731
|
+
]);
|
|
732
|
+
}
|
|
733
|
+
catch (e) {
|
|
734
|
+
const detail = e?.message ?? (typeof e === 'object' ? JSON.stringify(e) : String(e));
|
|
735
|
+
console.error(`[hf-space] gradio call failed: ${detail}`);
|
|
736
|
+
throw new Error(`hf-space (${spaceId}) call failed: ${detail}`);
|
|
737
|
+
}
|
|
738
|
+
const raw = Array.isArray(result?.data) ? result.data[0] : result?.data;
|
|
739
|
+
// Guard against a mislabeled arm: the template Space prefixes output with
|
|
740
|
+
// [MODEL=<repo>]. If this card pins an expected repo and the Space reports a
|
|
741
|
+
// different one, fail loudly instead of silently answering with the wrong model.
|
|
742
|
+
const expectedModel = modelConfig.metadata?.hfSpaceExpectedModel;
|
|
743
|
+
if (expectedModel) {
|
|
744
|
+
const served = /^\[MODEL=([^\]]+)\]/.exec(String(raw ?? ''))?.[1];
|
|
745
|
+
if (served && served !== expectedModel) {
|
|
746
|
+
throw new Error(`hf-space (${spaceId}) is serving ${served} but model card '${modelConfig.id}' expects ${expectedModel}. ` +
|
|
747
|
+
`Point HF_SPACE_ID_* at the right Space or swap the Space's MODEL_ID variable.`);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
const parsed = parseHFCompletion(String(raw ?? ''));
|
|
751
|
+
const message = { role: 'assistant', content: parsed.content || null };
|
|
752
|
+
if (parsed.reasoning)
|
|
753
|
+
message.reasoning_content = parsed.reasoning;
|
|
754
|
+
if (parsed.toolCalls.length)
|
|
755
|
+
message.tool_calls = parsed.toolCalls;
|
|
756
|
+
const data = {
|
|
757
|
+
id: 'chatcmpl-' + Date.now().toString(36),
|
|
758
|
+
object: 'chat.completion',
|
|
759
|
+
created: Math.floor(Date.now() / 1000),
|
|
760
|
+
model: modelConfig.id,
|
|
761
|
+
choices: [{
|
|
762
|
+
index: 0,
|
|
763
|
+
message,
|
|
764
|
+
finish_reason: parsed.toolCalls.length ? 'tool_calls' : 'stop',
|
|
765
|
+
}],
|
|
766
|
+
usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
|
|
767
|
+
};
|
|
768
|
+
return { data, status: 200, headers: {} };
|
|
769
|
+
}
|
|
669
770
|
/**
|
|
670
771
|
* Extract <system-reminder> content from Responses API input items.
|
|
671
772
|
*
|