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 <noreply@anthropic.com>
This commit is contained in:
@@ -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.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"] },
|
{ 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
|
// System One (Jev) decision models on the native /systemone endpoint
|
||||||
{ id: "jev-1.13", name: "Jev 1.13", kind: "decision" },
|
{ id: "jev-1.13", name: "Jev 1.13", kind: "systemone" },
|
||||||
{ 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"],
|
serviceKinds: ["llm", "systemone"],
|
||||||
systemoneConfig: {
|
systemoneConfig: {
|
||||||
|
|||||||
@@ -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.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: "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: "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"],
|
serviceKinds: ["llm", "systemone"],
|
||||||
systemoneConfig: {
|
systemoneConfig: {
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ export function GenericExampleCard({ providerId, kind }) {
|
|||||||
|
|
||||||
// Get models for this kind (e.g., type="image")
|
// Get models for this kind (e.g., type="image")
|
||||||
const kindModels = getModelsByProviderId(providerId).filter((m) => getModelKind(m) === kind);
|
const kindModels = getModelsByProviderId(providerId).filter((m) => getModelKind(m) === kind);
|
||||||
// Kinds that need a model identifier in the request (image/video/music)
|
// Kinds that need a model identifier in the request (image/video/music/systemone)
|
||||||
const KIND_NEEDS_MODEL = new Set(["image", "video", "music", "imageToText"]);
|
const KIND_NEEDS_MODEL = new Set(["image", "video", "music", "imageToText", "systemone"]);
|
||||||
const needsModel = KIND_NEEDS_MODEL.has(kind);
|
const needsModel = KIND_NEEDS_MODEL.has(kind);
|
||||||
const allowManualModel = needsModel && kindModels.length === 0;
|
const allowManualModel = needsModel && kindModels.length === 0;
|
||||||
const [selectedModel, setSelectedModel] = useState(kindModels[0]?.id ?? "");
|
const [selectedModel, setSelectedModel] = useState(kindModels[0]?.id ?? "");
|
||||||
|
|||||||
@@ -73,4 +73,19 @@ export const KIND_EXAMPLE_CONFIG = {
|
|||||||
bodyKey: "prompt",
|
bodyKey: "prompt",
|
||||||
defaultResponse: `{\n "data": [\n { "url": "...", "format": "mp3" }\n ]\n}`,
|
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}`,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -171,14 +171,15 @@ export default function MediaProviderDetailPage() {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Provider Info — config-driven, supports searchConfig, fetchConfig, ttsConfig, embeddingConfig, searchViaChat */}
|
{/* Provider Info — config-driven, supports searchConfig, fetchConfig, ttsConfig, embeddingConfig, systemoneConfig, searchViaChat */}
|
||||||
{!isCustom && (provider.searchConfig || provider.fetchConfig || provider.ttsConfig || provider.sttConfig || provider.embeddingConfig || provider.searchViaChat) && (
|
{!isCustom && (provider.searchConfig || provider.fetchConfig || provider.ttsConfig || provider.sttConfig || provider.embeddingConfig || provider.systemoneConfig || provider.searchViaChat) && (
|
||||||
<ProviderInfoCard
|
<ProviderInfoCard
|
||||||
config={
|
config={
|
||||||
kind === "webFetch" ? provider.fetchConfig
|
kind === "webFetch" ? provider.fetchConfig
|
||||||
: kind === "tts" ? provider.ttsConfig
|
: kind === "tts" ? provider.ttsConfig
|
||||||
: kind === "stt" ? provider.sttConfig
|
: kind === "stt" ? provider.sttConfig
|
||||||
: kind === "embedding" ? provider.embeddingConfig
|
: kind === "embedding" ? provider.embeddingConfig
|
||||||
|
: kind === "systemone" ? provider.systemoneConfig
|
||||||
: provider.searchConfig || { mode: "chat-completions", defaultModel: provider.searchViaChat?.defaultModel, pricingUrl: provider.searchViaChat?.pricingUrl, freeTier: provider.searchViaChat?.freeTier }
|
: provider.searchConfig || { mode: "chat-completions", defaultModel: provider.searchViaChat?.defaultModel, pricingUrl: provider.searchViaChat?.pricingUrl, freeTier: provider.searchViaChat?.freeTier }
|
||||||
}
|
}
|
||||||
provider={provider}
|
provider={provider}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { ConfirmModal } from "./Modal";
|
|||||||
import NineRemotePromoModal from "./NineRemotePromoModal";
|
import NineRemotePromoModal from "./NineRemotePromoModal";
|
||||||
|
|
||||||
// const VISIBLE_MEDIA_KINDS = ["embedding", "image", "imageToText", "tts", "stt", "webSearch", "webFetch", "video", "music"];
|
// const VISIBLE_MEDIA_KINDS = ["embedding", "image", "imageToText", "tts", "stt", "webSearch", "webFetch", "video", "music"];
|
||||||
const VISIBLE_MEDIA_KINDS = ["embedding", "image", "video", "tts", "stt"];
|
const VISIBLE_MEDIA_KINDS = ["embedding", "image", "video", "tts", "stt", "systemone"];
|
||||||
// Combined entry: webSearch + webFetch share one page at /dashboard/media-providers/web
|
// Combined entry: webSearch + webFetch share one page at /dashboard/media-providers/web
|
||||||
const COMBINED_WEB_ITEM = { id: "web", label: "Web Fetch & Search", icon: "travel_explore", href: "/dashboard/media-providers/web" };
|
const COMBINED_WEB_ITEM = { id: "web", label: "Web Fetch & Search", icon: "travel_explore", href: "/dashboard/media-providers/web" };
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user