{"record":{"id":"cb606cc92e162577","repo":"lfnovo/open-notebook","slug":"error-discovering-models-check-server-logs-for-de","errorCode":null,"errorMessage":"Error discovering models. Check server logs for details.","messagePattern":"Error discovering models\\. Check server logs for details\\.","errorType":"http","errorClass":"HTTPException","httpStatus":500,"severity":"error","filePath":"api/routers/models.py","lineNumber":564,"sourceCode":"        # Provision DB-stored credentials into env vars before discovery\n        await provision_provider_keys(provider)\n        discovered = await discover_provider_models(provider)\n        return [\n            DiscoveredModelResponse(\n                name=m.name,\n                provider=m.provider,\n                model_type=m.model_type,\n                description=m.description,\n            )\n            for m in discovered\n        ]\n    except HTTPException:\n        raise\n    except OpenNotebookError:\n        raise\n    except Exception as e:\n        logger.error(f\"Error discovering models for {provider}: {str(e)}\")\n        raise HTTPException(\n            status_code=500, detail=\"Error discovering models. Check server logs for details.\"\n        )\n\n\n@router.post(\"/models/sync/{provider}\", response_model=ProviderSyncResponse)\nasync def sync_models(provider: str):\n    \"\"\"\n    Sync models for a specific provider.\n\n    Discovers available models from the provider's API and registers\n    any new models in the database. Existing models are skipped.\n\n    Returns counts of discovered, new, and existing models.\n    \"\"\"\n    try:\n        # Provision DB-stored credentials into env vars before discovery\n        await provision_provider_keys(provider)\n        discovered, new, existing = await sync_provider_models(","sourceCodeStart":546,"sourceCodeEnd":582,"githubUrl":"https://github.com/lfnovo/open-notebook/blob/a7de90d38aaf18ee85fd661854d35c11e44613e2/api/routers/models.py#L546-L582","documentation":"500 from GET/POST /api/v1/models/discover/{provider} when model discovery fails. Unlike sibling handlers, the detail deliberately hides the exception ('Check server logs') because discovery can leak provider account details; the real error is only logged as 'Error discovering models for {provider}'.","triggerScenarios":"Discovery call to a provider API that fails auth (bad API key), rate-limits, or is unreachable; provider name not matching a known discovery integration.","commonSituations":"Invalid/expired provider API key, provider API change or outage, network restrictions, rate limits after repeated discovery clicks.","solutions":["Read the server log line 'Error discovering models for {provider}' for the actual cause","Verify the provider's API key and configuration","Check network egress to the provider API","Retry later if rate-limited"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"const avail = await api.getProviderAvailability();\nif (!avail[provider]?.available) throw new Error(`${provider} not available — check API key`);","typeGuard":null,"tryCatchPattern":"try { const r = await api.discoverModels(provider); } catch (e) { if (e.status === 500) surface('Discovery failed — see server logs'); }","preventionTips":["Check provider availability endpoint first","Keep provider credentials valid","Respect rate limits; don't spam discovery"],"tags":["models","discovery","providers","http-500"],"backgroundTag":"provider-api-request-failed","analyzedSha":"a7de90d38aaf18ee85fd661854d35c11e44613e2","analyzedAt":"2026-08-27T02:39:58.166Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}