{"record":{"id":"feed0fdeb29e79df","repo":"continuedev/continue","slug":"ai-sdk-provider-does-not-support-legacy-completion","errorCode":null,"errorMessage":"AI SDK provider does not support legacy completions API. Use chat completions instead.","messagePattern":"AI SDK provider does not support legacy completions API\\. Use chat completions instead\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/openai-adapters/src/apis/AiSdk.ts","lineNumber":242,"sourceCode":"      topP: body.top_p ?? undefined,\n      stopSequences: body.stop\n        ? Array.isArray(body.stop)\n          ? body.stop\n          : [body.stop]\n        : undefined,\n      tools: vercelTools,\n      toolChoice: convertToolChoiceToVercel(body.tool_choice),\n      abortSignal: signal,\n    });\n\n    yield* convertVercelStream(result.fullStream as any, { model: modelId });\n  }\n\n  async completionNonStream(\n    _body: CompletionCreateParamsNonStreaming,\n    _signal: AbortSignal,\n  ): Promise<Completion> {\n    throw new Error(\n      \"AI SDK provider does not support legacy completions API. Use chat completions instead.\",\n    );\n  }\n\n  async *completionStream(\n    _body: CompletionCreateParamsStreaming,\n    _signal: AbortSignal,\n  ): AsyncGenerator<Completion> {\n    throw new Error(\n      \"AI SDK provider does not support legacy completions API. Use chat completions instead.\",\n    );\n  }\n\n  async *fimStream(\n    _body: FimCreateParamsStreaming,\n    _signal: AbortSignal,\n  ): AsyncGenerator<ChatCompletionChunk> {\n    throw new Error(","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/packages/openai-adapters/src/apis/AiSdk.ts#L224-L260","documentation":"The AiSdk adapter intentionally does not implement the legacy /v1/completions text-completion API; calling completionNonStream always throws telling you to use chat completions.","triggerScenarios":"Routing a legacy CompletionCreateParamsNonStreaming request (plain prompt, no messages) to an AiSdk-backed model — e.g. old code paths or tools using the text completions endpoint.","commonSituations":"Migrating older integrations that used text completions; generic OpenAI-compatible tooling that tries /completions before /chat/completions.","solutions":["Switch the call to chatCompletionNonStream/chatCompletionStream with a messages array","Use a different provider adapter (e.g. native OpenAI) if legacy completions are required","Update tooling to send chat-format requests"],"exampleFix":"// before\nawait llm.completionNonStream({ model, prompt: 'Hello' }, signal);\n\n// after\nawait llm.chatCompletionNonStream({ model, messages: [{ role: 'user', content: 'Hello' }] }, signal);","handlingStrategy":"fallback","validationCode":"if (llm instanceof AiSdk) { useChatCompletions(); } // never call completion* on AiSdk","typeGuard":"function supportsLegacyCompletions(llm: unknown): boolean { return !(llm instanceof AiSdk); }","tryCatchPattern":"try { await llm.completionNonStream(body, signal); } catch (e) { if (/legacy completions/.test(e.message)) { await llm.chatCompletionNonStream({ model: body.model, messages: [{ role: 'user', content: body.prompt }] }, signal); } else throw e; }","preventionTips":["Migrate all prompt-based calls to messages-based chat completions","Feature-detect adapter support for legacy APIs","Add integration tests covering both API shapes when swapping adapters"],"tags":["ai-sdk","completions","unsupported-api","migration"],"backgroundTag":"unsupported-legacy-api","analyzedSha":"5522c6f44ca0ac3528b37244818fbfa39b5af470","analyzedAt":"2026-08-27T11:28:54.683Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}