{"record":{"id":"8c1d1b76a144961c","repo":"lfnovo/open-notebook","slug":"error-syncing-models-check-server-logs-for-detail","errorCode":null,"errorMessage":"Error syncing models. Check server logs for details.","messagePattern":"Error syncing models\\. Check server logs for details\\.","errorType":"http","errorClass":"HTTPException","httpStatus":500,"severity":"error","filePath":"api/routers/models.py","lineNumber":597,"sourceCode":"    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(\n            provider, auto_register=True\n        )\n        return ProviderSyncResponse(\n            provider=provider,\n            discovered=discovered,\n            new=new,\n            existing=existing,\n        )\n    except HTTPException:\n        raise\n    except OpenNotebookError:\n        raise\n    except Exception as e:\n        logger.error(f\"Error syncing models for {provider}: {str(e)}\")\n        raise HTTPException(status_code=500, detail=\"Error syncing models. Check server logs for details.\")\n\n\n@router.post(\"/models/sync\", response_model=AllProvidersSyncResponse)\nasync def sync_all_models():\n    \"\"\"\n    Sync models for all configured providers.\n\n    Discovers and registers models from all providers that have\n    valid API keys configured. This is useful for initial setup\n    or periodic refresh of available models.\n    \"\"\"\n    try:\n        results = await sync_all_providers()\n\n        response_results = {}\n        total_discovered = 0\n        total_new = 0\n","sourceCodeStart":579,"sourceCodeEnd":615,"githubUrl":"https://github.com/lfnovo/open-notebook/blob/a7de90d38aaf18ee85fd661854d35c11e44613e2/api/routers/models.py#L579-L615","documentation":"500 from POST /api/v1/models/sync/{provider} when syncing models for one provider fails. Like discovery, the response detail is intentionally generic; the specific exception is logged as 'Error syncing models for {provider}'.","triggerScenarios":"Sync with a provider whose credentials are invalid, whose API is unreachable, or whose discovery integration throws an unexpected error type.","commonSituations":"Expired API key, provider outage, rate limiting, or partially configured provider entries created manually.","solutions":["Check server logs for 'Error syncing models for {provider}'","Validate the provider's API key/env config","Test the provider via POST /models/{id}/test to isolate","Retry after rate-limit window"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"const avail = await api.getProviderAvailability();\nif (!avail[provider]?.available) throw new Error('fix provider credentials first');","typeGuard":null,"tryCatchPattern":"try { await api.syncModels(provider); } catch (e) { if (e.status === 500) { await wait(5000); await retryOnce(); } }","preventionTips":["Validate provider credentials via /test before sync","Back off on repeated 500s (likely rate limit)","Watch server logs — client detail is intentionally vague"],"tags":["models","sync","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"}