From ab7d1e60d6fce2a4513e40b20e48d1f0a03df541 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Wed, 23 Jul 2025 22:31:34 -0700 Subject: [PATCH 1/3] feat: use 8-core self-hosted runner for faster Docker builds --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 76840a4c53..c846a950da 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,7 +7,7 @@ on: jobs: build-and-push: - runs-on: ubuntu-latest + runs-on: ubuntu-latest-8-cores strategy: fail-fast: false matrix: From 6ad73a7264104f03aab033ad152e0c10db2f9228 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Thu, 24 Jul 2025 17:42:19 -0700 Subject: [PATCH 2/3] fix: lazy load large YAML prompt to prevent build memory exhaustion - Convert YAML_WORKFLOW_PROMPT from static export to lazy function - Prevents 281-line string literal from being loaded during static generation - Fixes exit code 137 memory exhaustion during Docker builds --- apps/sim/app/api/tools/get-yaml-structure/route.ts | 4 ++-- apps/sim/lib/copilot/prompts.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/sim/app/api/tools/get-yaml-structure/route.ts b/apps/sim/app/api/tools/get-yaml-structure/route.ts index 2b9f1039ce..91c8142d5f 100644 --- a/apps/sim/app/api/tools/get-yaml-structure/route.ts +++ b/apps/sim/app/api/tools/get-yaml-structure/route.ts @@ -1,5 +1,5 @@ import { type NextRequest, NextResponse } from 'next/server' -import { YAML_WORKFLOW_PROMPT } from '../../../../lib/copilot/prompts' +import { getYamlWorkflowPrompt } from '../../../../lib/copilot/prompts' export async function POST(request: NextRequest) { try { @@ -8,7 +8,7 @@ export async function POST(request: NextRequest) { return NextResponse.json({ success: true, data: { - guide: YAML_WORKFLOW_PROMPT, + guide: getYamlWorkflowPrompt(), message: 'Complete YAML workflow syntax guide with examples and best practices', }, }) diff --git a/apps/sim/lib/copilot/prompts.ts b/apps/sim/lib/copilot/prompts.ts index d5f42251ed..de0eb13fa3 100644 --- a/apps/sim/lib/copilot/prompts.ts +++ b/apps/sim/lib/copilot/prompts.ts @@ -376,10 +376,11 @@ export const TITLE_GENERATION_USER_PROMPT = (userMessage: string) => `Generate a concise title for a conversation that starts with this user message: "${userMessage}"\n\nReturn only the title text, nothing else.` /** - * YAML Workflow Reference Guide * Comprehensive guide for LLMs on how to write end-to-end YAML workflows correctly + * Lazy loaded to prevent memory issues during static generation */ -export const YAML_WORKFLOW_PROMPT = `# Comprehensive Guide to Writing End-to-End YAML Workflows in Sim Studio +export const getYamlWorkflowPrompt = + () => `# Comprehensive Guide to Writing End-to-End YAML Workflows in Sim Studio ## Fundamental Structure From e80111583bc90374f92a7082a8fe5199608a768d Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Thu, 24 Jul 2025 18:42:21 -0700 Subject: [PATCH 3/3] fix(nextjs): add force dynamic for copilot routes to resolve OOM issue --- apps/sim/app/api/tools/edit-workflow/route.ts | 2 ++ apps/sim/app/api/tools/get-yaml-structure/route.ts | 6 ++++-- apps/sim/app/api/workflows/[id]/autolayout/route.ts | 2 ++ apps/sim/app/api/workflows/[id]/yaml/route.ts | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/sim/app/api/tools/edit-workflow/route.ts b/apps/sim/app/api/tools/edit-workflow/route.ts index 5cd036c712..478b68cf28 100644 --- a/apps/sim/app/api/tools/edit-workflow/route.ts +++ b/apps/sim/app/api/tools/edit-workflow/route.ts @@ -14,6 +14,8 @@ import { copilotCheckpoints, workflow as workflowTable } from '@/db/schema' import { generateLoopBlocks, generateParallelBlocks } from '@/stores/workflows/workflow/utils' import { convertYamlToWorkflow, parseWorkflowYaml } from '@/stores/workflows/yaml/importer' +export const dynamic = 'force-dynamic' + const logger = createLogger('EditWorkflowAPI') export async function POST(request: NextRequest) { diff --git a/apps/sim/app/api/tools/get-yaml-structure/route.ts b/apps/sim/app/api/tools/get-yaml-structure/route.ts index 91c8142d5f..4a8fd9cc0c 100644 --- a/apps/sim/app/api/tools/get-yaml-structure/route.ts +++ b/apps/sim/app/api/tools/get-yaml-structure/route.ts @@ -1,5 +1,7 @@ import { type NextRequest, NextResponse } from 'next/server' -import { getYamlWorkflowPrompt } from '../../../../lib/copilot/prompts' +import { getYamlWorkflowPrompt } from '@/lib/copilot/prompts' + +export const dynamic = 'force-dynamic' export async function POST(request: NextRequest) { try { @@ -17,7 +19,7 @@ export async function POST(request: NextRequest) { return NextResponse.json( { success: false, - error: 'Failed to get YAML structure guide', + error: 'Failed to get YAML structure', }, { status: 500 } ) diff --git a/apps/sim/app/api/workflows/[id]/autolayout/route.ts b/apps/sim/app/api/workflows/[id]/autolayout/route.ts index ae7539d6cd..039e84fd4a 100644 --- a/apps/sim/app/api/workflows/[id]/autolayout/route.ts +++ b/apps/sim/app/api/workflows/[id]/autolayout/route.ts @@ -12,6 +12,8 @@ import { import { db } from '@/db' import { workflow as workflowTable } from '@/db/schema' +export const dynamic = 'force-dynamic' + const logger = createLogger('AutoLayoutAPI') const AutoLayoutRequestSchema = z.object({ diff --git a/apps/sim/app/api/workflows/[id]/yaml/route.ts b/apps/sim/app/api/workflows/[id]/yaml/route.ts index 1ed9645a78..e85e8d8d58 100644 --- a/apps/sim/app/api/workflows/[id]/yaml/route.ts +++ b/apps/sim/app/api/workflows/[id]/yaml/route.ts @@ -17,6 +17,8 @@ import { copilotCheckpoints, workflow as workflowTable } from '@/db/schema' import { generateLoopBlocks, generateParallelBlocks } from '@/stores/workflows/workflow/utils' import { convertYamlToWorkflow, parseWorkflowYaml } from '@/stores/workflows/yaml/importer' +export const dynamic = 'force-dynamic' + const logger = createLogger('WorkflowYamlAPI') // Request schema for YAML workflow operations