diff --git a/services/discord-gateway/src/modules/ai-moderation/cultureLearner.ts b/services/discord-gateway/src/modules/ai-moderation/cultureLearner.ts index e71d537..49b2c2a 100644 --- a/services/discord-gateway/src/modules/ai-moderation/cultureLearner.ts +++ b/services/discord-gateway/src/modules/ai-moderation/cultureLearner.ts @@ -87,6 +87,7 @@ hal dasar ke newbie tanpa judge."`; max_tokens: 500, temperature: 0.7, // Higher temp for summarization retries: 2, + stream: true, // router always streams SSE; non-stream waits for full body and times out }); if (!completion) throw new Error("Empty response from LLM"); diff --git a/services/discord-gateway/src/modules/ai-moderation/llmCaller.ts b/services/discord-gateway/src/modules/ai-moderation/llmCaller.ts index 4ed3eb2..f2f471a 100644 --- a/services/discord-gateway/src/modules/ai-moderation/llmCaller.ts +++ b/services/discord-gateway/src/modules/ai-moderation/llmCaller.ts @@ -79,6 +79,13 @@ export async function callModerationLLM( jsonResponse: { type: "json_object" }, retries: 0, signal, + // Router (9router/omniroute) always streams SSE even when the + // request omits `stream`. In non-stream mode the OpenAI SDK waits + // for the FULL body before parsing, so slow/long upstream streams + // hit the 30s/60s timeout and abort mid-generation. Streaming mode + // consumes chunks incrementally — timeout only fires on a real + // stall. llmClient aggregates the stream into a ChatCompletion. + stream: true, }); if (!completion) diff --git a/services/discord-gateway/src/modules/ai-moderation/llmClient.ts b/services/discord-gateway/src/modules/ai-moderation/llmClient.ts index 3969423..230b4a5 100644 --- a/services/discord-gateway/src/modules/ai-moderation/llmClient.ts +++ b/services/discord-gateway/src/modules/ai-moderation/llmClient.ts @@ -272,6 +272,7 @@ export async function llmVision( temperature: 0.1, top_p: 0.9, retries: 0, + stream: true, // router always streams SSE; non-stream waits for full body and times out }); if (!completion) return null; diff --git a/services/discord-gateway/src/modules/ai-moderation/userProfileLearner.ts b/services/discord-gateway/src/modules/ai-moderation/userProfileLearner.ts index 18e4400..ac8d8aa 100644 --- a/services/discord-gateway/src/modules/ai-moderation/userProfileLearner.ts +++ b/services/discord-gateway/src/modules/ai-moderation/userProfileLearner.ts @@ -116,6 +116,7 @@ atau konten SARA, itu akan SANGAT tidak sesuai dengan karakternya dan patut dicu max_tokens: 2000, temperature: 0.7, // Higher temp for summarization retries: 2, + stream: true, // router always streams SSE; non-stream waits for full body and times out }); if (!completion) throw new Error("Empty response from LLM");