tinyhumansai/openhuman · error · Error

Model test RPC returned no result for

Error message

Model test RPC returned no result for ${workload} via ${provider} (openhuman.inference_test_provider_model).

What it means

Thrown by testProviderModel() after the core RPC 'openhuman.inference_test_provider_model' resolves but the result envelope carries no result object (res.result is null/undefined). Unlike a thrown RPC error, this means the core answered successfully with an empty payload — typically a version skew where the deployed core does not actually implement/return the test result shape the UI expects, or a handler that swallowed its own failure and returned void.

Solutions

  1. Restart the core (Settings > Restart Core / restartCoreProcess()) so the app and core versions match, then retest.
  2. Check GET /schema on the running core to confirm inference_test_provider_model exists and inspect its declared return type.
  3. Look at core logs for the provider test execution — a provider-side timeout/HTTP failure may be returning an empty success.
  4. If using OPENHUMAN_CORE_REUSE_EXISTING=1 or a remote core, ensure it is built from the same commit as the UI.

Example fix

// before
const res = await callCoreRpc<{ result: ProviderModelTestResult }>({ ... });
if (!res?.result) {
  throw new Error(`Model test RPC returned no result for ${workload} via ${provider} (openhuman.inference_test_provider_model).`);
}

// after — distinguish empty result from version skew and guide the user
if (!res?.result) {
  throw new Error(
    `Model test RPC returned no result for ${workload} via ${provider}. ` +
    'The running core may be older than the app — restart Core from Settings and retry.'
  );
}
Defensive patterns

Strategy: try-catch

Validate before calling

import { callCoreRpc } from '../coreRpcClient';

async function coreSupportsProviderModelTest(): Promise<boolean> {
  try {
    const schema = await callCoreRpc<{ methods?: unknown }>({ method: 'openhuman.', params: {} }).catch(() => null);
    // more reliably: GET /schema on the core and check for inference_test_provider_model
    return Boolean(schema);
  } catch {
    return false;
  }
}

Type guard

function isProviderModelTestResult(v: unknown): v is ProviderModelTestResult {
  return Boolean(v) && typeof v === 'object';
}

Try / catch

try {
  return await testProviderModel(workload, provider);
} catch (e) {
  if (e instanceof Error && e.message.startsWith('Model test RPC returned no result')) {
    return { ok: false, error: 'Core may be outdated — restart Core and retry.' } as ProviderModelTestResult;
  }
  throw e;
}

Prevention

When it happens

Trigger: UI and openhuman-core of different versions (older core without the provider-test handler returning ProviderModelTestResult); an external/standalone core via OPENHUMAN_CORE_REUSE_EXISTING=1 that is stale; a handler code path that returns Ok(None)-equivalent on internal failure.

Common situations: After updating the app but the core process did not restart (cached core still running); pointing the app at a docker/cloud core built from an older branch; a core crash mid-test that still emitted a JSON-RPC success envelope.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/828744b5c1e52480. Report an issue: GitHub.

Appendix: source

Thrown at app/src/services/api/aiSettingsApi.ts:818

  });
  return res?.result?.errors ?? [];
}

export async function testProviderModel(
  workload: WorkloadId,
  provider: string,
  prompt = 'Hello world'
): Promise<ProviderModelTestResult> {
  if (!isTauri()) {
    throw new Error('Model testing is only available in the desktop app.');
  }
  const res = await callCoreRpc<{ result: ProviderModelTestResult }>({
    method: 'openhuman.inference_test_provider_model',
    params: { workload, provider, prompt },
    timeoutMs: PROVIDER_MODEL_TEST_TIMEOUT_MS,
  });
  if (!res?.result) {
    throw new Error(
      `Model test RPC returned no result for ${workload} via ${provider} (openhuman.inference_test_provider_model).`
    );
  }
  return res.result;
}

// ─── Local provider façade (Ollama install / detect / model manage) ───────

/** Snapshot of the Ollama daemon + installed-model state for the AI panel. */
export interface LocalProviderSnapshot {
  status: LocalAiStatus | null;
  diagnostics: LocalAiDiagnostics | null;
  presets: PresetsResponse | null;
  installedModels: InstalledModelInfo[];
}

export async function loadLocalProviderSnapshot(): Promise<LocalProviderSnapshot> {
  const [statusRes, diag, presets] = await Promise.all([

View on GitHub (pinned to 7491200858)