{"record":{"id":"e3a3ca2d4104176a","repo":"moeru-ai/airi","slug":"markdown-stress-no-active-provider-model-for-onl","errorCode":null,"errorMessage":"[markdown-stress] No active provider/model for online mode","messagePattern":"\\[markdown-stress\\] No active provider/model for online mode","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/stage-ui/src/stores/markdown-stress.ts","lineNumber":300,"sourceCode":"\n  function generatePreview() {\n    const next = generateScenario()\n    scenario.value = next\n    payloadPreview.value = [\n      `User (t=0ms): ${next.userMessages[0].text}`,\n      `User (t=${next.userMessages[1].atMs}ms): ${next.userMessages[1].text}`,\n      '--- Assistant stream ---',\n      next.assistant.text,\n    ].join('\\n\\n')\n  }\n\n  async function runOnlineScenario() {\n    const chatStore = useChatStore()\n    const targetScenario = ensureScenario()\n\n    const provider = await providersStore.getProviderInstance(activeProvider.value) as ChatProvider | undefined\n    if (!provider || !activeModel.value) {\n      console.warn('[markdown-stress] No active provider/model for online mode')\n      canRunOnline.value = false\n      stopCapture()\n      return\n    }\n    canRunOnline.value = true\n\n    const runStart = performance.now()\n    for (const message of targetScenario.userMessages) {\n      const delay = Math.max(0, runStart + message.atMs - performance.now())\n      const timer = setTimeout(async () => {\n        try {\n          await chatStore.ingest(message.text, {\n            model: activeModel.value!,\n            chatProvider: provider,\n          })\n        }\n        catch (error) {\n          console.error('[markdown-stress] Online send failed', error)","sourceCodeStart":282,"sourceCodeEnd":318,"githubUrl":"https://github.com/moeru-ai/airi/blob/677329427f32468c74b17f3ec47eeca4e05bec65/packages/stage-ui/src/stores/markdown-stress.ts#L282-L318","documentation":"The markdown-stress devtools module disables its online scenario when no chat provider instance can be resolved from activeProvider, or activeModel is unset. runOnlineScenario() sets canRunOnline to false, calls stopCapture(), and returns - the stress test cannot stream assistant markdown without an LLM backend.","triggerScenarios":"Opening the markdown stress devtool before any chat provider is configured; activeProvider referencing a provider whose instantiation fails (missing API key, removed entry); cleared or reset settings while the devtool page is open.","commonSituations":"Fresh environment after clone/reset; provider credentials half-filled so getProviderInstance resolves to undefined; switching providers without re-running the scenario.","solutions":["Configure and select a working chat provider and model in settings, including required API keys","Verify the provider resolves: getProviderInstance(activeProvider) should return an instance with a chat().stream implementation","Re-run the scenario after configuration - canRunOnline is re-evaluated on the next attempt","For provider-less runs, use the offline capture mode rather than online mode"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const provider = await providersStore.getProviderInstance(activeProvider.value)\nif (!provider || !activeModel.value) {\n  canRunOnline.value = false\n  showConfigureProviderPrompt()\n  return\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Configure and verify a chat provider before enabling online stress scenarios","Smoke-test getProviderInstance resolution when provider settings change","Default devtools to offline capture mode until a provider is confirmed"],"tags":["devtools","stress-test","provider-config","feature-disabled"],"backgroundTag":"missing-provider-config","analyzedSha":"677329427f32468c74b17f3ec47eeca4e05bec65","analyzedAt":"2026-08-18T17:29:58.153Z","contentChangedAt":"2026-08-18T17:29:58.153Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}