fix(dashboard): probe System One models through /v1/systemone
The inline model test sent a chat-completions payload and failed with 500 on decision models. Add a systemone branch to pingModelByKind that submits a native state+questions probe, and restore the test button that was hidden for System One models. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -119,7 +119,6 @@ export default function ModelsCard({ providerId, kindFilter, providerAliasOverri
|
|||||||
|
|
||||||
const providerAlias = providerAliasOverride || getProviderAlias(providerId);
|
const providerAlias = providerAliasOverride || getProviderAlias(providerId);
|
||||||
const effectiveType = kindFilter || "llm";
|
const effectiveType = kindFilter || "llm";
|
||||||
const supportsTest = kindFilter !== "systemone";
|
|
||||||
|
|
||||||
const fetchData = useCallback(async () => {
|
const fetchData = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
@@ -239,7 +238,7 @@ export default function ModelsCard({ providerId, kindFilter, providerAliasOverri
|
|||||||
onSetAlias={(alias) => handleSetAlias(model.id, alias)}
|
onSetAlias={(alias) => handleSetAlias(model.id, alias)}
|
||||||
onDeleteAlias={() => handleDeleteAlias(existingAlias)}
|
onDeleteAlias={() => handleDeleteAlias(existingAlias)}
|
||||||
testStatus={modelTestResults[model.id]}
|
testStatus={modelTestResults[model.id]}
|
||||||
onTest={supportsTest ? () => handleTestModel(model.id) : undefined}
|
onTest={() => handleTestModel(model.id)}
|
||||||
isTesting={testingModelId === model.id}
|
isTesting={testingModelId === model.id}
|
||||||
isFree={model.isFree}
|
isFree={model.isFree}
|
||||||
/>
|
/>
|
||||||
@@ -256,7 +255,7 @@ export default function ModelsCard({ providerId, kindFilter, providerAliasOverri
|
|||||||
onSetAlias={() => {}}
|
onSetAlias={() => {}}
|
||||||
onDeleteAlias={() => handleDeleteCustomModel(model.id)}
|
onDeleteAlias={() => handleDeleteCustomModel(model.id)}
|
||||||
testStatus={modelTestResults[model.id]}
|
testStatus={modelTestResults[model.id]}
|
||||||
onTest={supportsTest ? () => handleTestModel(model.id) : undefined}
|
onTest={() => handleTestModel(model.id)}
|
||||||
isTesting={testingModelId === model.id}
|
isTesting={testingModelId === model.id}
|
||||||
isCustom
|
isCustom
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -132,6 +132,36 @@ export async function pingModelByKind(model, kind, baseUrl = `http://127.0.0.1:$
|
|||||||
return { ok: true, latencyMs, error: null, status: res.status };
|
return { ok: true, latencyMs, error: null, status: res.status };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (kind === "systemone") {
|
||||||
|
const res = await fetch(`${baseUrl}/api/v1/systemone`, {
|
||||||
|
method: "POST",
|
||||||
|
headers,
|
||||||
|
body: JSON.stringify({
|
||||||
|
model,
|
||||||
|
state: "Customer: I was charged twice for my order this morning.",
|
||||||
|
questions: {
|
||||||
|
probe: { type: "noul", instructions: "Is the customer reporting a billing problem?" },
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
signal: AbortSignal.timeout(15000),
|
||||||
|
});
|
||||||
|
const latencyMs = Date.now() - start;
|
||||||
|
const rawText = await res.text().catch(() => "");
|
||||||
|
let parsed = null;
|
||||||
|
try { parsed = rawText ? JSON.parse(rawText) : null; } catch {}
|
||||||
|
|
||||||
|
if (!res.ok) {
|
||||||
|
const detail = parsed?.error?.message || parsed?.msg || parsed?.message || parsed?.error || rawText;
|
||||||
|
return { ok: false, latencyMs, error: `HTTP ${res.status}${detail ? `: ${String(detail).slice(0, 240)}` : ""}`, status: res.status };
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasAnswers = parsed?.answers && typeof parsed.answers === "object" && Object.keys(parsed.answers).length > 0;
|
||||||
|
if (!hasAnswers) {
|
||||||
|
return { ok: false, latencyMs, status: res.status, error: "Provider returned no answers for this model" };
|
||||||
|
}
|
||||||
|
return { ok: true, latencyMs, error: null, status: res.status };
|
||||||
|
}
|
||||||
|
|
||||||
const res = await fetch(`${baseUrl}/api/v1/chat/completions`, {
|
const res = await fetch(`${baseUrl}/api/v1/chat/completions`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers,
|
headers,
|
||||||
|
|||||||
Reference in New Issue
Block a user