From 6431e3530339169e9dd2befa361d7c9fccde1bb1 Mon Sep 17 00:00:00 2001 From: decolua Date: Tue, 22 Sep 2026 14:07:36 +0700 Subject: [PATCH] feat(dashboard): add System One to sidebar and media provider detail page Expose System One in the Media Providers sidebar accordion, set kind to "systemone" on Jev models for ModelsCard filtering, wire systemoneConfig into ProviderInfoCard, and configure GenericExampleCard for interactive testing of decision models. Co-Authored-By: Claude Code --- open-sse/providers/registry/opencode-zen.js | 4 ++-- open-sse/providers/registry/opencode.js | 2 +- .../[kind]/[id]/components/GenericExampleCard.js | 4 ++-- .../[kind]/[id]/components/exampleShared.js | 15 +++++++++++++++ .../dashboard/media-providers/[kind]/[id]/page.js | 5 +++-- src/shared/components/Sidebar.js | 2 +- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/open-sse/providers/registry/opencode-zen.js b/open-sse/providers/registry/opencode-zen.js index 9bba1df6..7252d7a4 100644 --- a/open-sse/providers/registry/opencode-zen.js +++ b/open-sse/providers/registry/opencode-zen.js @@ -115,8 +115,8 @@ export default { { id: "muse-spark-1.3-contributor-free", name: "Muse Spark 1.3 Contributor Free", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] }, { id: "muse-spark-1.2-contributor-free", name: "Muse Spark 1.2 Contributor Free", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] }, // System One (Jev) decision models on the native /systemone endpoint - { id: "jev-1.13", name: "Jev 1.13", kind: "decision" }, - { id: "jev-1.13-free", name: "Jev 1.13 Free", kind: "decision" }, + { id: "jev-1.13", name: "Jev 1.13", kind: "systemone" }, + { id: "jev-1.13-free", name: "Jev 1.13 Free", kind: "systemone" }, ], serviceKinds: ["llm", "systemone"], systemoneConfig: { diff --git a/open-sse/providers/registry/opencode.js b/open-sse/providers/registry/opencode.js index 22ba0c73..5a7926ef 100644 --- a/open-sse/providers/registry/opencode.js +++ b/open-sse/providers/registry/opencode.js @@ -28,7 +28,7 @@ export default { { id: "muse-spark-1.2-contributor-free", name: "Muse Spark 1.2 Contributor Free", targetFormat: "openai-responses" }, { id: "muse-spark-1.3-contributor-free", name: "Muse Spark 1.3 Contributor Free", targetFormat: "openai-responses" }, { id: "union-alpha", name: "Union Alpha Free", targetFormat: "claude" }, - { id: "jev-1.13-free", name: "Jev 1.13 Free", kind: "decision" }, + { id: "jev-1.13-free", name: "Jev 1.13 Free", kind: "systemone" }, ], serviceKinds: ["llm", "systemone"], systemoneConfig: { diff --git a/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/GenericExampleCard.js b/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/GenericExampleCard.js index 4d10ba1c..fea6eced 100644 --- a/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/GenericExampleCard.js +++ b/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/GenericExampleCard.js @@ -44,8 +44,8 @@ export function GenericExampleCard({ providerId, kind }) { // Get models for this kind (e.g., type="image") const kindModels = getModelsByProviderId(providerId).filter((m) => getModelKind(m) === kind); - // Kinds that need a model identifier in the request (image/video/music) - const KIND_NEEDS_MODEL = new Set(["image", "video", "music", "imageToText"]); + // Kinds that need a model identifier in the request (image/video/music/systemone) + const KIND_NEEDS_MODEL = new Set(["image", "video", "music", "imageToText", "systemone"]); const needsModel = KIND_NEEDS_MODEL.has(kind); const allowManualModel = needsModel && kindModels.length === 0; const [selectedModel, setSelectedModel] = useState(kindModels[0]?.id ?? ""); diff --git a/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/exampleShared.js b/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/exampleShared.js index 2fb4cb5e..9a229253 100644 --- a/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/exampleShared.js +++ b/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/components/exampleShared.js @@ -73,4 +73,19 @@ export const KIND_EXAMPLE_CONFIG = { bodyKey: "prompt", defaultResponse: `{\n "data": [\n { "url": "...", "format": "mp3" }\n ]\n}`, }, + systemone: { + inputLabel: "State", + inputPlaceholder: "Situation, support ticket, or text to evaluate", + defaultInput: "My payments have failed for three days and I am losing sales. Please help now.", + bodyKey: "state", + extraBody: { + questions: { + is_urgent: { + type: "noul", + instructions: "Does this request require urgent attention?", + }, + }, + }, + defaultResponse: `{\n "model": "jev-1.13",\n "answers": {\n "is_urgent": { "type": "noul", "noul": 0.99 }\n },\n "usage": { "input_tokens": 312, "output_tokens": 48 }\n}`, + }, }; diff --git a/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js b/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js index c331267b..4cbed901 100644 --- a/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +++ b/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js @@ -171,14 +171,15 @@ export default function MediaProviderDetailPage() { /> )} - {/* Provider Info — config-driven, supports searchConfig, fetchConfig, ttsConfig, embeddingConfig, searchViaChat */} - {!isCustom && (provider.searchConfig || provider.fetchConfig || provider.ttsConfig || provider.sttConfig || provider.embeddingConfig || provider.searchViaChat) && ( + {/* Provider Info — config-driven, supports searchConfig, fetchConfig, ttsConfig, embeddingConfig, systemoneConfig, searchViaChat */} + {!isCustom && (provider.searchConfig || provider.fetchConfig || provider.ttsConfig || provider.sttConfig || provider.embeddingConfig || provider.systemoneConfig || provider.searchViaChat) && (