fix(ai): use @ai-sdk/openai-compatible for third-party providers (#19438)
## Summary:
I found a bug: 404 call when I use third-party providers (I used
deepseek). I found the final request url is:
`https://api.deepseek.com/v1/responses' `if we use createOpenAI. But the
correct one should be `https://api.provider.com/v1/chat/completions` for
the thirty provider. So I replace createOpenAI with
createOpenAICompatible in the openai-compatible provider path.
**Reproduction**: Add DeepSeek as a new AI provider (deepseek-chat,
deepseek-reasoner)
Also check the source code in Open Code project, they also use
createOpenAICompatible for the @ai-sdk/openai-compatible scenario
<img width="703" height="369" alt="image"
src="https://github.com/user-attachments/assets/90c4f924-6f1a-4fe7-821b-f13ee86a7a39"
/>
official docs: https://ai-sdk.dev/providers/openai-compatible-providers
https://ai-sdk.dev/providers/ai-sdk-providers/openai
<img width="860" height="293" alt="image"
src="https://github.com/user-attachments/assets/283b9b91-f1d6-4b1c-bb91-16ddccdff8b4"
/>
## Before
<img width="473" height="750" alt="deepseek before"
src="https://github.com/user-attachments/assets/f6b89294-1fa7-4ddc-a6a8-d396070caaca"
/>
## After
<img width="468" height="753" alt="deepseek after"
src="https://github.com/user-attachments/assets/0d170b70-e829-4a4c-abad-38879427c2df"
/>
## Backend error log
```json
[1] [Nest] 50907 - 07/04/2026, 23:48:57 LOG [ChatExecutionService] Starting chat execution with model deepseek/deepseek-chat, 4 active tools
[1] APICallError [AI_APICallError]: Not Found
[1] at /Users/abel/Documents/Code/twenty/node_modules/@ai-sdk/provider-utils/dist/index.js:2512:14
[1] at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
[1] at async postToApi (/Users/abel/Documents/Code/twenty/node_modules/@ai-sdk/provider-utils/dist/index.js:2373:28)
[1] at async OpenAIResponsesLanguageModel.doStream (/Users/abel/Documents/Code/twenty/node_modules/@ai-sdk/openai/dist/index.js:4925:50)
[1] at async fn (/Users/abel/Documents/Code/twenty/node_modules/ai/dist/index.js:7106:27)
[1] at async /Users/abel/Documents/Code/twenty/node_modules/ai/dist/index.js:2340:24
[1] at async _retryWithExponentialBackoff (/Users/abel/Documents/Code/twenty/node_modules/ai/dist/index.js:2599:12)
[1] at async streamStep (/Users/abel/Documents/Code/twenty/node_modules/ai/dist/index.js:7063:17)
[1] at async fn (/Users/abel/Documents/Code/twenty/node_modules/ai/dist/index.js:7455:9)
[1] at async /Users/abel/Documents/Code/twenty/node_modules/ai/dist/index.js:2340:24 {
[1] cause: undefined,
[1] url: 'https://api.deepseek.com/v1/responses',
[1] requestBodyValues: {
[1] model: 'deepseek-chat',
[1] input: [ [Object], [Object] ],
[1] temperature: undefined,
[1] top_p: undefined,
[1] max_output_tokens: undefined,
[1] conversation: undefined,
[1] max_tool_calls: undefined,
[1] metadata: undefined,
[1] parallel_tool_calls: undefined,
[1] previous_response_id: undefined,
[1] store: undefined,
[1] user: undefined,
[1] instructions: undefined,
[1] service_tier: undefined,
[1] include: undefined,
[1] prompt_cache_key: undefined,
[1] prompt_cache_retention: undefined,
[1] safety_identifier: undefined,
[1] top_logprobs: undefined,
[1] truncation: undefined,
[1] tools: [ [Object], [Object], [Object], [Object] ],
[1] tool_choice: 'auto',
[1] stream: true
[1] },
[1] statusCode: 404,
[1] responseHeaders: {
[1] 'access-control-allow-credentials': 'true',
[1] connection: 'keep-alive',
[1] 'content-length': '0',
[1] date: 'Tue, 07 Apr 2026 22:48:57 GMT',
[1] server: 'elb',
[1] 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload',
[1] vary: 'origin, access-control-request-method, access-control-request-headers',
[1] via: '1.1 83867089cd39052cd05f9e04909bedde.cloudfront.net (CloudFront)',
[1] 'x-amz-cf-id': 'O4b0VTi9Q1VVmTmq6czGlEWst7IPnAQl544hB7uIvfnSphBvUKbZTw==',
[1] 'x-amz-cf-pop': 'DUB56-P3',
[1] 'x-cache': 'Error from cloudfront',
[1] 'x-content-type-options': 'nosniff',
[1] 'x-ds-trace-id': 'a90e91809d285170338ef077f67ae2be'
[1] },
[1] responseBody: '',
[1] isRetryable: false,
[1] data: undefined,
[1] Symbol(vercel.ai.error): true,
[1] Symbol(vercel.ai.error.AI_APICallError): true
[1] }
[1] Exception Captured
[1] undefined
[1] [
[1] NoOutputGeneratedError [AI_NoOutputGeneratedError]: No output generated. Check the stream for errors.
[1] at Object.flush (/Users/abel/Documents/Code/twenty/node_modules/ai/dist/index.js:6656:103)
[1] at invokePromiseCallback (node:internal/webstreams/util:172:10)
[1] at Object.<anonymous> (node:internal/webstreams/util:177:23)
[1] at transformStreamDefaultSinkCloseAlgorithm (node:internal/webstreams/transformstream:621:43)
[1] at node:internal/webstreams/transformstream:379:11
[1] at writableStreamDefaultControllerProcessClose (node:internal/webstreams/writablestream:1162:28)
[1] at writableStreamDefaultControllerAdvanceQueueIfNeeded (node:internal/webstreams/writablestream:1253:5)
[1] at writableStreamDefaultControllerClose (node:internal/webstreams/writablestream:1220:3)
[1] at writableStreamClose (node:internal/webstreams/writablestream:722:3)
[1] at writableStreamDefaultWriterClose (node:internal/webstreams/writablestream:1091:10) {
[1] cause: undefined,
[1] Symbol(vercel.ai.error): true,
[1] Symbol(vercel.ai.error.AI_NoOutputGeneratedError): true
[1] }
[1] ]
[1] [Nest] 50907 - 07/04/2026, 23:48:59 LOG [BullMQDriver] Job 24 with name StreamAgentChatJob processed on queue ai-stream-queue in 2756.63ms