{"record":{"id":"efdd292bf0cd8b43","repo":"Budibase/budibase","slug":"no-result-received-from-table-generation-stream","errorCode":null,"errorMessage":"No result received from table generation stream","messagePattern":"No result received from table generation stream","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/frontend-core/src/api/ai.ts","lineNumber":129,"sourceCode":"              buffer = buffer.slice(boundary + SSE_EVENT_DELIMITER.length)\n\n              const event = parseSSEEventChunk(eventChunk)\n              if (event?.type === \"progress\" && onProgress) {\n                onProgress(event.message)\n              }\n              if (event?.type === \"result\") {\n                finalResponse = { createdTables: event.createdTables || [] }\n              }\n              if (event?.type === \"error\") {\n                throw new Error(event.message || \"Error generating tables\")\n              }\n\n              boundary = buffer.indexOf(SSE_EVENT_DELIMITER)\n            }\n          }\n\n          if (!finalResponse) {\n            throw new Error(\"No result received from table generation stream\")\n          }\n\n          return finalResponse\n        } catch (error: any) {\n          throw new Error(error?.message || \"Error generating tables\")\n        }\n      },\n    })\n  },\n\n  fetchSlackAppConfig: async () => {\n    return await API.get({\n      url: \"/api/ai/slack/app-config\",\n    })\n  },\n\n  saveSlackAppConfig: async req => {\n    return await API.put({","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/Budibase/budibase/blob/a81a902e9a8fe55b467d106765f6638f12e35c49/packages/frontend-core/src/api/ai.ts#L111-L147","documentation":"After the SSE stream from /api/ai/tables ends normally, the client checks that a {type:\"result\"} event carrying createdTables was received. If the stream closed without ever emitting a result event, finalResponse is undefined and this error is thrown — meaning generation produced no outcome.","triggerScenarios":"The stream terminates (reader done) without a \"result\" SSE event: server crashed mid-stream, connection dropped before completion, empty/blocked generation producing only error-less silence, or a proxy buffering/cutting the response.","commonSituations":"Reverse proxy (nginx) closing idle SSE connections prematurely, network interruption during a long generation, backend worker killed mid-request, server returning empty stream on auth/license edge cases.","solutions":["Retry the table generation request — the failure is often transient.","Check for proxies/load balancers (nginx proxy_buffering, Cloudflare timeouts) that cut long SSE streams; disable buffering for /api/ai/.","Inspect server logs around the request to see if generation crashed without emitting an error event.","Verify the AI model is reachable and the request isn't silently timing out."],"exampleFix":"// before\nawait generateTables(req)\n// after\ntry {\n  await generateTables(req)\n} catch (e) {\n  if (e.message.includes(\"No result received\")) {\n    // retry once, then check proxy/stream timeouts\n  }\n}","handlingStrategy":"retry","validationCode":"// check proxies don't cut long SSE responses; ensure auth cookie valid before call\nconst authed = document.cookie.includes(\"budibase:\")","typeGuard":"function hasResultEvent(final: unknown): final is { createdTables: unknown[] } {\n  return final != null && Array.isArray((final as any).createdTables)\n}","tryCatchPattern":"try {\n  return await generateTables(req)\n} catch (e) {\n  if (e.message.includes(\"No result received\")) {\n    // retry with backoff; if persistent, check proxy buffering/timeouts\n  }\n  throw e\n}","preventionTips":["Disable proxy buffering for /api/ai/ SSE routes (nginx: proxy_buffering off)","Raise proxy/read timeouts for long AI generations","Retry with exponential backoff on empty streams","Monitor server logs for crashes during generation"],"tags":["ai","sse","streaming","network"],"backgroundTag":"empty-stream-no-result","analyzedSha":"a81a902e9a8fe55b467d106765f6638f12e35c49","analyzedAt":"2026-08-29T01:03:10.972Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}