{"record":{"id":"4bde8d0e023cad87","repo":"vercel/ai","slug":"no-model-url-provided-for-embeddings-please-set-m","errorCode":null,"errorMessage":"No model URL provided for embeddings. Please set modelURL option for embeddings.","messagePattern":"No model URL provided for embeddings\\. Please set modelURL option for embeddings\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/baseten/src/baseten-provider.ts","lineNumber":226,"sourceCode":"      } else if (customURL.includes('/predict')) {\n        throw new Error(\n          'Not supported. You must use a /sync/v1 endpoint for chat models.',\n        );\n      }\n    }\n\n    return new OpenAICompatibleChatLanguageModel(modelId ?? 'chat', {\n      ...getCommonModelConfig('chat'),\n      errorStructure: basetenErrorStructure,\n      includeUsage: true,\n      supportsStructuredOutputs: true,\n    });\n  };\n\n  const createEmbeddingModel = (modelId?: BasetenEmbeddingModelId) => {\n    const customURL = options.modelURL;\n    if (!customURL) {\n      throw new Error(\n        'No model URL provided for embeddings. Please set modelURL option for embeddings.',\n      );\n    }\n\n    if (!customURL.includes('/sync')) {\n      throw new Error(\n        'Not supported. You must use a /sync or /sync/v1 endpoint for embeddings.',\n      );\n    }\n\n    // BEI embedding deployments are OpenAI-compatible with no extra settings, so\n    // plain HTTP is the default and needs no override.\n    const model = new OpenAICompatibleEmbeddingModel(modelId ?? 'embeddings', {\n      ...getCommonModelConfig('embedding', customURL),\n      errorStructure: basetenErrorStructure,\n      // Over HTTP, cap each request and let `embedMany` split and parallelise.\n      // The native client does its own batching, so let it take everything at\n      // once — `embedMany` treats Infinity as \"one call\".","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/baseten/src/baseten-provider.ts#L208-L244","documentation":"Embedding models on Baseten require an explicit modelURL because there is no sensible default embedding endpoint. createEmbeddingModel throws this error when options.modelURL is missing.","triggerScenarios":"Calling createBaseten({ apiKey }) without modelURL and then provider.embeddingModel(...) or provider.textEmbeddingModel(...).","commonSituations":"Configuring baseten for chat only and later adding embeddings; forgetting that embeddings always need modelURL on Baseten.","solutions":["Add modelURL pointing at the BEI embedding deployment's /sync/v1 endpoint.","Create a Baseten embedding (BEI) deployment if none exists.","Use a different provider for embeddings if you cannot host a sync embedding deployment."],"exampleFix":"// before\nconst baseten = createBaseten({ apiKey });\nconst model = baseten.textEmbeddingModel('my-embeddings');\n// after\nconst baseten = createBaseten({ apiKey, modelURL: 'https://model-xyz.api.baseten.co/production/sync/v1' });\nconst model = baseten.textEmbeddingModel('my-embeddings');","handlingStrategy":"validation","validationCode":"if (!process.env.BASETEN_MODEL_URL) {\n  throw new Error('BASETEN_MODEL_URL (sync/v1 endpoint) is required for Baseten embeddings');\n}","typeGuard":null,"tryCatchPattern":"try {\n  const embeddingModel = baseten.textEmbeddingModel('embeddings');\n} catch (e) {\n  if (e instanceof Error && e.message.includes('modelURL option for embeddings')) {\n    // configure modelURL\n  }\n}","preventionTips":["Remember Baseten embeddings always require modelURL — check before creating embedding models.","Deploy a BEI sync embedding endpoint before wiring embeddings.","Validate env config at boot."],"tags":["configuration","embeddings","baseten"],"backgroundTag":"missing-required-option","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}