@thanh01.pmt/curriculum-kit 1.4.25 → 1.4.27
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/LICENSE +21 -0
- package/dist/ai/index.cjs +68 -5
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +4 -4
- package/dist/ai/index.d.ts +4 -4
- package/dist/ai/index.mjs +68 -6
- package/dist/ai/index.mjs.map +1 -1
- package/dist/index.cjs +71 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.mjs +71 -7
- package/dist/index.mjs.map +1 -1
- package/dist/media/index.cjs +52 -4
- package/dist/media/index.cjs.map +1 -1
- package/dist/media/index.d.cts +1 -1
- package/dist/media/index.d.ts +1 -1
- package/dist/media/index.mjs +52 -4
- package/dist/media/index.mjs.map +1 -1
- package/dist/{milestoneBundleGenerator-CzSOeAzU.d.cts → milestoneBundleGenerator-CN6F1zPs.d.cts} +1 -1
- package/dist/{milestoneBundleGenerator-Bkba8OPG.d.ts → milestoneBundleGenerator-DTiJ5gIh.d.ts} +1 -1
- package/dist/pipeline/index.cjs +23 -4
- package/dist/pipeline/index.cjs.map +1 -1
- package/dist/pipeline/index.d.cts +3 -3
- package/dist/pipeline/index.d.ts +3 -3
- package/dist/pipeline/index.mjs +23 -4
- package/dist/pipeline/index.mjs.map +1 -1
- package/dist/{provider-factory-DxzOVEmh.d.cts → provider-factory-Bv-eIkhg.d.cts} +1 -1
- package/dist/{provider-factory-DxzOVEmh.d.ts → provider-factory-Bv-eIkhg.d.ts} +1 -1
- package/dist/storage/index.d.cts +2 -2
- package/dist/storage/index.d.ts +2 -2
- package/dist/{streamRunner-CYESG6IE.d.cts → streamRunner-kpS4MZP1.d.cts} +2 -1
- package/dist/{streamRunner-CYESG6IE.d.ts → streamRunner-kpS4MZP1.d.ts} +2 -1
- package/dist/workflow/index.cjs +67 -5
- package/dist/workflow/index.cjs.map +1 -1
- package/dist/workflow/index.d.cts +1 -1
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.mjs +67 -5
- package/dist/workflow/index.mjs.map +1 -1
- package/package.json +22 -23
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MilestoneInput, LessonPlan, CurriculumQualityReport, ActivityLab, CodeLab, SelfLab, DiagnosticQuiz, SlideDeck, Handout, Worksheet, TeacherGuide, Extension, ProjectRoadmap } from '../schemas/index.cjs';
|
|
2
|
-
import { M as ModelResolutionOptions } from '../provider-factory-
|
|
2
|
+
import { M as ModelResolutionOptions } from '../provider-factory-Bv-eIkhg.cjs';
|
|
3
3
|
import { G as GitPublishOptions, a as GitPublishResult, S as SupabasePublishOptions, b as SupabasePublishResult } from '../supabasePublisher-C627qXFT.cjs';
|
|
4
4
|
import { S as SingleArtifactRequest, a as SingleArtifactResult } from '../gateSettings-DabOqP6_.cjs';
|
|
5
5
|
export { b as CurriculumArtifactType, C as CurriculumGateMode, D as DEFAULT_GATE_SETTINGS, G as GateSettings, R as ResolvedGateSettings, g as gateModeFor, p as parseGateSettings, r as resolveGateSettings } from '../gateSettings-DabOqP6_.cjs';
|
package/dist/workflow/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MilestoneInput, LessonPlan, CurriculumQualityReport, ActivityLab, CodeLab, SelfLab, DiagnosticQuiz, SlideDeck, Handout, Worksheet, TeacherGuide, Extension, ProjectRoadmap } from '../schemas/index.js';
|
|
2
|
-
import { M as ModelResolutionOptions } from '../provider-factory-
|
|
2
|
+
import { M as ModelResolutionOptions } from '../provider-factory-Bv-eIkhg.js';
|
|
3
3
|
import { G as GitPublishOptions, a as GitPublishResult, S as SupabasePublishOptions, b as SupabasePublishResult } from '../supabasePublisher-C627qXFT.js';
|
|
4
4
|
import { S as SingleArtifactRequest, a as SingleArtifactResult } from '../gateSettings-DabOqP6_.js';
|
|
5
5
|
export { b as CurriculumArtifactType, C as CurriculumGateMode, D as DEFAULT_GATE_SETTINGS, G as GateSettings, R as ResolvedGateSettings, g as gateModeFor, p as parseGateSettings, r as resolveGateSettings } from '../gateSettings-DabOqP6_.js';
|
package/dist/workflow/index.mjs
CHANGED
|
@@ -195,14 +195,19 @@ function isModelAllowed(model) {
|
|
|
195
195
|
});
|
|
196
196
|
}
|
|
197
197
|
function getDesignatedFallbackChain() {
|
|
198
|
-
const rawProviders = resolveApiKey("FALLBACK_AI_PROVIDER") || resolveApiKey("FALLBACK_AI_PROVIDERS") || resolveApiKey("DEFAULT_AI_PROVIDER") || "nvidia,openrouter";
|
|
199
|
-
const rawModels = resolveApiKey("FALLBACK_AI_MODEL") || resolveApiKey("FALLBACK_AI_MODELS") || resolveApiKey("DEFAULT_AI_MODEL") || "
|
|
198
|
+
const rawProviders = resolveApiKey("FALLBACK_AI_PROVIDER") || resolveApiKey("FALLBACK_AI_PROVIDERS") || resolveApiKey("DEFAULT_AI_PROVIDER") || "9router,nvidia,openrouter";
|
|
199
|
+
const rawModels = resolveApiKey("FALLBACK_AI_MODEL") || resolveApiKey("FALLBACK_AI_MODELS") || resolveApiKey("DEFAULT_AI_MODEL") || "fast-reasoning,deep-reasoning,mid-range,free-tier";
|
|
200
200
|
const providerList = rawProviders.split(",").map((p) => p.trim().toLowerCase()).filter((p) => p.length > 0 && isProviderEnabled(p));
|
|
201
201
|
const modelList = rawModels.split(",").map((m) => m.trim()).filter((m) => m.length > 0 && isModelAllowed(m));
|
|
202
202
|
const chain = [];
|
|
203
203
|
for (const provider of providerList) {
|
|
204
204
|
let providerModels = [];
|
|
205
|
-
if (provider === "
|
|
205
|
+
if (provider === "9router" || provider === "ninerouter") {
|
|
206
|
+
providerModels = modelList.filter((m) => ["fast-reasoning", "deep-reasoning", "mid-range", "free-tier"].includes(m));
|
|
207
|
+
if (providerModels.length === 0) {
|
|
208
|
+
providerModels = ["fast-reasoning", "mid-range", "free-tier"];
|
|
209
|
+
}
|
|
210
|
+
} else if (provider === "nvidia") {
|
|
206
211
|
providerModels = modelList.filter((m) => m.startsWith("nvidia/") || m.startsWith("meta/") || m.startsWith("mistralai/"));
|
|
207
212
|
if (providerModels.length === 0) {
|
|
208
213
|
providerModels = ["nvidia/nemotron-3-ultra-550b-a55b:free", "nvidia/nemotron-3.5-lightning-30b-a3b"];
|
|
@@ -241,7 +246,7 @@ function getDesignatedFallbackChain() {
|
|
|
241
246
|
function getDesignatedFallbackConfig() {
|
|
242
247
|
const chain = getDesignatedFallbackChain();
|
|
243
248
|
if (chain.length > 0) return chain[0];
|
|
244
|
-
return { provider: "
|
|
249
|
+
return { provider: "9router", model: "fast-reasoning" };
|
|
245
250
|
}
|
|
246
251
|
function extractThoughtAndContent(rawText) {
|
|
247
252
|
let text = rawText || "";
|
|
@@ -480,8 +485,51 @@ Guidelines:
|
|
|
480
485
|
}))
|
|
481
486
|
];
|
|
482
487
|
const providerErrors = {};
|
|
483
|
-
const requestedModel = options.model || "
|
|
488
|
+
const requestedModel = options.model || "fast-reasoning";
|
|
484
489
|
const isNvidiaPreferred = requestedModel.startsWith("nvidia/") || Boolean(nvidiaKey && !openrouterKey) && isProviderEnabled("nvidia");
|
|
490
|
+
const ninerouterKey = resolveApiKey("NINEROUTER_API_KEY") || resolveApiKey("NINE_ROUTER_API_KEY");
|
|
491
|
+
if (ninerouterKey && isProviderEnabled("9router")) {
|
|
492
|
+
const rawUrl = resolveApiKey("NINEROUTER_BASE_URL") || resolveApiKey("NINE_ROUTER_BASE_URL") || "https://ai-router.orchable.app/v1";
|
|
493
|
+
const ninerouterBaseUrl = rawUrl.replace(/^["']|["']$/g, "").replace(/\/$/, "");
|
|
494
|
+
const candidateModels = [
|
|
495
|
+
options.model || "fast-reasoning",
|
|
496
|
+
"fast-reasoning",
|
|
497
|
+
"mid-range",
|
|
498
|
+
"free-tier"
|
|
499
|
+
].filter((m) => isModelAllowed(m));
|
|
500
|
+
const unique9RouterModels = Array.from(new Set(candidateModels));
|
|
501
|
+
for (const model of unique9RouterModels) {
|
|
502
|
+
try {
|
|
503
|
+
const idle = createStreamAbortController({ idleMs: 45e3, totalMs: 3e5 });
|
|
504
|
+
const res = await fetch(`${ninerouterBaseUrl}/chat/completions`, {
|
|
505
|
+
method: "POST",
|
|
506
|
+
headers: {
|
|
507
|
+
"Authorization": `Bearer ${ninerouterKey}`,
|
|
508
|
+
"Content-Type": "application/json"
|
|
509
|
+
},
|
|
510
|
+
body: JSON.stringify({
|
|
511
|
+
model,
|
|
512
|
+
messages: formattedMessages,
|
|
513
|
+
max_tokens: maxTokens,
|
|
514
|
+
temperature,
|
|
515
|
+
stream: true,
|
|
516
|
+
stream_options: { include_usage: true }
|
|
517
|
+
}),
|
|
518
|
+
signal: idle.signal
|
|
519
|
+
});
|
|
520
|
+
if (res.ok) {
|
|
521
|
+
const text = await processOpenAISSEStream(res, onChunk, idle);
|
|
522
|
+
if (text && text.trim()) return text;
|
|
523
|
+
} else {
|
|
524
|
+
const errText = await res.text().catch(() => "");
|
|
525
|
+
providerErrors[`9router_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;
|
|
526
|
+
}
|
|
527
|
+
} catch (e) {
|
|
528
|
+
providerErrors[`9router_${model}`] = e?.message || "Network error";
|
|
529
|
+
console.warn(`[9Router Stream] Failover for ${model}:`, e?.message || e);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
485
533
|
if (nvidiaKey && isProviderEnabled("nvidia")) {
|
|
486
534
|
const candidateNemotronModels = [
|
|
487
535
|
requestedModel.startsWith("nvidia/") ? requestedModel : "nvidia/nemotron-3-ultra-550b-a55b:free",
|
|
@@ -863,6 +911,15 @@ function getAIModel(options = {}) {
|
|
|
863
911
|
console.warn(`[provider-factory] Model "${resolvedModelName}" is not permitted by ALLOWED_AI_MODELS. Using designated model "${designated.model}".`);
|
|
864
912
|
resolvedModelName = designated.model;
|
|
865
913
|
}
|
|
914
|
+
if (provider === "9router" || provider === "ninerouter") {
|
|
915
|
+
const apiKey = options.apiKey || resolveApiKey("NINEROUTER_API_KEY") || resolveApiKey("NINE_ROUTER_API_KEY") || "";
|
|
916
|
+
const rawUrl = options.baseURL || resolveApiKey("NINEROUTER_BASE_URL") || resolveApiKey("NINE_ROUTER_BASE_URL") || "https://ai-router.orchable.app/v1";
|
|
917
|
+
const ninerouter = createOpenAI({
|
|
918
|
+
apiKey,
|
|
919
|
+
baseURL: rawUrl.replace(/^["']|["']$/g, "").trim()
|
|
920
|
+
});
|
|
921
|
+
return ninerouter.chat(resolvedModelName || "fast-reasoning");
|
|
922
|
+
}
|
|
866
923
|
if (provider === "nvidia") {
|
|
867
924
|
const apiKey = options.apiKey || process.env.NVIDIA_API_KEY || "";
|
|
868
925
|
const nvidia = createOpenAI({
|
|
@@ -931,6 +988,9 @@ function getAIModel(options = {}) {
|
|
|
931
988
|
return fallback.chat(resolvedModelName);
|
|
932
989
|
}
|
|
933
990
|
function detectDefaultProvider() {
|
|
991
|
+
if ((process.env.NINEROUTER_API_KEY || resolveApiKey("NINEROUTER_API_KEY") || resolveApiKey("NINE_ROUTER_API_KEY")) && isProviderEnabled("9router")) {
|
|
992
|
+
return "9router";
|
|
993
|
+
}
|
|
934
994
|
if (process.env.NVIDIA_API_KEY && isProviderEnabled("nvidia")) {
|
|
935
995
|
return "nvidia";
|
|
936
996
|
}
|
|
@@ -956,6 +1016,8 @@ var init_provider_factory = __esm({
|
|
|
956
1016
|
"src/ai/provider-factory.ts"() {
|
|
957
1017
|
init_streamRunner();
|
|
958
1018
|
DEFAULT_MODELS = {
|
|
1019
|
+
"9router": "fast-reasoning",
|
|
1020
|
+
ninerouter: "fast-reasoning",
|
|
959
1021
|
nvidia: "nvidia/nemotron-3-ultra-550b-a55b:free",
|
|
960
1022
|
openrouter: "@preset/coding-free",
|
|
961
1023
|
alibaba: "qwen3.7-plus",
|