From 1f7296c231772d755e73a7c5cc1e378f2a1dbdc4 Mon Sep 17 00:00:00 2001 From: waleedlatif1 Date: Sat, 6 Sep 2025 13:27:40 -0700 Subject: [PATCH 1/7] update infra and remove railway --- .github/workflows/build.yml | 39 ++++++++++++++++++++++++++++++++----- .github/workflows/ci.yml | 22 --------------------- railway.json | 21 -------------------- 3 files changed, 34 insertions(+), 48 deletions(-) delete mode 100644 railway.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 30d2eb2608..518add6b14 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Log in to the Container registry - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') uses: docker/login-action@v3 with: registry: ghcr.io @@ -69,7 +69,7 @@ jobs: images: ${{ matrix.image }} tags: | type=raw,value=latest-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/main' }} - type=raw,value=staging-${{ github.sha }}-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} + type=raw,value=staging-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} type=sha,format=long,suffix=-${{ matrix.arch }} - name: Build and push Docker image @@ -78,7 +78,7 @@ jobs: context: . file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platform }} - push: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }} + push: ${{ github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha,scope=build-v3 @@ -89,7 +89,7 @@ jobs: create-manifests: runs-on: ubuntu-latest needs: build-and-push - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') strategy: matrix: include: @@ -115,6 +115,7 @@ jobs: images: ${{ matrix.image }} tags: | type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=staging,enable=${{ github.ref == 'refs/heads/staging' }} type=sha,format=long - name: Create and push manifest @@ -148,4 +149,32 @@ jobs: docker manifest inspect "$arm64_image" || echo "ARM64 image not found" exit 1 fi - done \ No newline at end of file + done + + trigger-infrastructure-deploy: + runs-on: ubuntu-latest + needs: create-manifests + if: github.ref == 'refs/heads/staging' || github.ref == 'refs/heads/main' + permissions: + contents: read + + steps: + - name: Trigger staging deployment + if: github.ref == 'refs/heads/staging' + run: | + curl -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: token ${{ secrets.INFRA_DEPLOY_TOKEN }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${{ secrets.INFRA_REPO }}/dispatches \ + -d '{"event_type":"staging-deploy","client_payload":{"sha":"${{ github.sha }}","ref":"${{ github.ref }}"}}' + + - name: Trigger production deployment + if: github.ref == 'refs/heads/main' + run: | + curl -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: token ${{ secrets.INFRA_DEPLOY_TOKEN }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${{ secrets.INFRA_REPO }}/dispatches \ + -d '{"event_type":"production-deploy","client_payload":{"sha":"${{ github.sha }}","ref":"${{ github.ref }}"}}' \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ffd68d8b87..0f64e4f960 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,25 +53,3 @@ jobs: fail_ci_if_error: false verbose: true - migrations: - name: Apply Database Migrations - runs-on: ubuntu-latest - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') - needs: test - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Install dependencies - run: bun install - - - name: Apply migrations - working-directory: ./apps/sim - env: - DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }} - run: bunx drizzle-kit migrate diff --git a/railway.json b/railway.json deleted file mode 100644 index 62d6da767e..0000000000 --- a/railway.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://railway.app/railway.schema.json", - "build": { - "builder": "NIXPACKS", - "buildCommand": "cd apps/sim && bun install --frozen-lockfile && bun run build" - }, - "deploy": { - "startCommand": "cd apps/sim && NODE_ENV=production bun run socket-server/index.ts", - "healthcheckPath": "/health", - "healthcheckTimeout": 300, - "restartPolicyType": "ON_FAILURE", - "restartPolicyMaxRetries": 10 - }, - "environments": { - "production": { - "variables": { - "NODE_ENV": "production" - } - } - } -} From 2200b8e790aaf1849760c025a6cb2ca2298cecfc Mon Sep 17 00:00:00 2001 From: waleedlatif1 Date: Mon, 15 Sep 2025 16:33:45 -0700 Subject: [PATCH 2/7] feat(docs): added footer for page navigation, i18n for docs --- .github/workflows/i18n.yml | 126 + .gitignore | 3 +- apps/docs/app/(docs)/[[...slug]]/layout.tsx | 5 - apps/docs/app/(docs)/[[...slug]]/page.tsx | 58 - apps/docs/app/(docs)/layout.tsx | 58 - apps/docs/app/[lang]/[[...slug]]/page.tsx | 98 + apps/docs/app/[lang]/layout.tsx | 99 + apps/docs/app/layout.tsx | 21 +- apps/docs/components/ui/language-dropdown.tsx | 125 + apps/docs/content/docs/blocks/meta.json | 16 - apps/docs/content/docs/connections/meta.json | 5 - apps/docs/content/docs/copilot/meta.json | 5 - .../content/docs/{ => en}/blocks/agent.mdx | 0 .../docs/content/docs/{ => en}/blocks/api.mdx | 0 .../docs/{ => en}/blocks/condition.mdx | 0 .../docs/{ => en}/blocks/evaluator.mdx | 0 .../content/docs/{ => en}/blocks/function.mdx | 0 .../content/docs/{ => en}/blocks/index.mdx | 0 .../content/docs/{ => en}/blocks/loop.mdx | 0 .../content/docs/{ => en}/blocks/parallel.mdx | 0 .../content/docs/{ => en}/blocks/response.mdx | 0 .../content/docs/{ => en}/blocks/router.mdx | 0 .../content/docs/{ => en}/blocks/workflow.mdx | 0 .../docs/{ => en}/connections/basics.mdx | 0 .../{ => en}/connections/data-structure.mdx | 0 .../docs/{ => en}/connections/index.mdx | 0 .../docs/{ => en}/connections/tags.mdx | 0 .../content/docs/{ => en}/copilot/index.mdx | 0 .../content/docs/{ => en}/execution/api.mdx | 0 .../docs/{ => en}/execution/basics.mdx | 0 .../content/docs/{ => en}/execution/costs.mdx | 0 .../content/docs/{ => en}/execution/index.mdx | 0 .../docs/{ => en}/execution/logging.mdx | 0 .../docs/{ => en}/getting-started/index.mdx | 0 apps/docs/content/docs/en/index.mdx | 60 + .../docs/{ => en}/introduction/index.mdx | 8 +- .../docs/{ => en}/knowledgebase/index.mdx | 4 +- .../docs/{ => en}/knowledgebase/tags.mdx | 0 apps/docs/content/docs/{ => en}/mcp/index.mdx | 0 apps/docs/content/docs/{ => en}/meta.json | 0 .../permissions/roles-and-permissions.mdx | 0 .../content/docs/{ => en}/sdks/python.mdx | 0 .../content/docs/{ => en}/sdks/typescript.mdx | 0 .../content/docs/{ => en}/tools/airtable.mdx | 0 .../content/docs/{ => en}/tools/arxiv.mdx | 0 .../docs/{ => en}/tools/browser_use.mdx | 0 .../docs/content/docs/{ => en}/tools/clay.mdx | 0 .../docs/{ => en}/tools/confluence.mdx | 0 .../content/docs/{ => en}/tools/discord.mdx | 0 .../docs/{ => en}/tools/elevenlabs.mdx | 0 apps/docs/content/docs/{ => en}/tools/exa.mdx | 0 .../docs/content/docs/{ => en}/tools/file.mdx | 0 .../content/docs/{ => en}/tools/firecrawl.mdx | 0 .../docs/{ => en}/tools/generic_webhook.mdx | 0 .../content/docs/{ => en}/tools/github.mdx | 0 .../content/docs/{ => en}/tools/gmail.mdx | 0 .../docs/{ => en}/tools/google_calendar.mdx | 0 .../docs/{ => en}/tools/google_docs.mdx | 0 .../docs/{ => en}/tools/google_drive.mdx | 0 .../docs/{ => en}/tools/google_search.mdx | 0 .../docs/{ => en}/tools/google_sheets.mdx | 0 .../docs/{ => en}/tools/huggingface.mdx | 0 .../content/docs/{ => en}/tools/hunter.mdx | 0 .../docs/{ => en}/tools/image_generator.mdx | 0 .../content/docs/{ => en}/tools/index.mdx | 0 .../docs/content/docs/{ => en}/tools/jina.mdx | 0 .../docs/content/docs/{ => en}/tools/jira.mdx | 0 .../content/docs/{ => en}/tools/knowledge.mdx | 0 .../content/docs/{ => en}/tools/linear.mdx | 0 .../content/docs/{ => en}/tools/linkup.mdx | 0 .../docs/content/docs/{ => en}/tools/mem0.mdx | 0 .../content/docs/{ => en}/tools/memory.mdx | 0 .../docs/{ => en}/tools/microsoft_excel.mdx | 0 .../docs/{ => en}/tools/microsoft_planner.mdx | 0 .../docs/{ => en}/tools/microsoft_teams.mdx | 0 .../docs/{ => en}/tools/mistral_parse.mdx | 0 .../content/docs/{ => en}/tools/mongodb.mdx | 0 .../content/docs/{ => en}/tools/mysql.mdx | 0 .../content/docs/{ => en}/tools/notion.mdx | 0 .../content/docs/{ => en}/tools/onedrive.mdx | 0 .../content/docs/{ => en}/tools/openai.mdx | 0 .../content/docs/{ => en}/tools/outlook.mdx | 0 .../docs/{ => en}/tools/parallel_ai.mdx | 0 .../docs/{ => en}/tools/perplexity.mdx | 0 .../content/docs/{ => en}/tools/pinecone.mdx | 0 .../docs/{ => en}/tools/postgresql.mdx | 0 .../content/docs/{ => en}/tools/qdrant.mdx | 0 .../content/docs/{ => en}/tools/reddit.mdx | 0 apps/docs/content/docs/{ => en}/tools/s3.mdx | 0 .../content/docs/{ => en}/tools/schedule.mdx | 0 .../content/docs/{ => en}/tools/serper.mdx | 0 .../docs/{ => en}/tools/sharepoint.mdx | 0 .../content/docs/{ => en}/tools/slack.mdx | 0 .../content/docs/{ => en}/tools/stagehand.mdx | 0 .../docs/{ => en}/tools/stagehand_agent.mdx | 0 .../content/docs/{ => en}/tools/supabase.mdx | 0 .../content/docs/{ => en}/tools/tavily.mdx | 0 .../content/docs/{ => en}/tools/telegram.mdx | 0 .../content/docs/{ => en}/tools/thinking.mdx | 0 .../content/docs/{ => en}/tools/translate.mdx | 0 .../docs/{ => en}/tools/twilio_sms.mdx | 0 .../content/docs/{ => en}/tools/typeform.mdx | 0 .../content/docs/{ => en}/tools/vision.mdx | 0 .../content/docs/{ => en}/tools/wealthbox.mdx | 0 .../content/docs/{ => en}/tools/webhook.mdx | 0 .../content/docs/{ => en}/tools/whatsapp.mdx | 0 .../content/docs/{ => en}/tools/wikipedia.mdx | 0 apps/docs/content/docs/{ => en}/tools/x.mdx | 0 .../content/docs/{ => en}/tools/youtube.mdx | 0 .../docs/{ => en}/triggers/schedule.mdx | 0 .../docs/{ => en}/triggers/starter.mdx | 0 .../docs/{ => en}/triggers/webhook.mdx | 0 .../variables/environment-variables.mdx | 0 .../{ => en}/variables/workflow-variables.mdx | 0 .../docs/{ => en}/yaml/block-reference.mdx | 0 .../docs/{ => en}/yaml/blocks/agent.mdx | 0 .../content/docs/{ => en}/yaml/blocks/api.mdx | 0 .../docs/{ => en}/yaml/blocks/condition.mdx | 0 .../docs/{ => en}/yaml/blocks/evaluator.mdx | 0 .../docs/{ => en}/yaml/blocks/function.mdx | 0 .../docs/{ => en}/yaml/blocks/index.mdx | 0 .../docs/{ => en}/yaml/blocks/loop.mdx | 0 .../docs/{ => en}/yaml/blocks/parallel.mdx | 0 .../docs/{ => en}/yaml/blocks/response.mdx | 0 .../docs/{ => en}/yaml/blocks/router.mdx | 0 .../docs/{ => en}/yaml/blocks/starter.mdx | 0 .../docs/{ => en}/yaml/blocks/webhook.mdx | 0 .../docs/{ => en}/yaml/blocks/workflow.mdx | 0 .../content/docs/{ => en}/yaml/examples.mdx | 0 .../docs/content/docs/{ => en}/yaml/index.mdx | 0 apps/docs/content/docs/es/blocks/agent.mdx | 306 ++ apps/docs/content/docs/es/blocks/api.mdx | 232 + .../docs/content/docs/es/blocks/condition.mdx | 242 ++ .../docs/content/docs/es/blocks/evaluator.mdx | 199 + apps/docs/content/docs/es/blocks/function.mdx | 156 + apps/docs/content/docs/es/blocks/index.mdx | 129 + apps/docs/content/docs/es/blocks/loop.mdx | 211 + apps/docs/content/docs/es/blocks/parallel.mdx | 231 + apps/docs/content/docs/es/blocks/response.mdx | 246 ++ apps/docs/content/docs/es/blocks/router.mdx | 225 + apps/docs/content/docs/es/blocks/workflow.mdx | 168 + .../content/docs/es/connections/basics.mdx | 43 + .../docs/es/connections/data-structure.mdx | 195 + .../content/docs/es/connections/index.mdx | 42 + .../docs/content/docs/es/connections/tags.mdx | 109 + apps/docs/content/docs/es/copilot/index.mdx | 161 + apps/docs/content/docs/es/execution/api.mdx | 551 +++ .../docs/content/docs/es/execution/basics.mdx | 132 + apps/docs/content/docs/es/execution/costs.mdx | 186 + apps/docs/content/docs/es/execution/index.mdx | 136 + .../content/docs/es/execution/logging.mdx | 150 + .../content/docs/es/getting-started/index.mdx | 193 + apps/docs/content/docs/es/index.mdx | 60 + .../content/docs/es/introduction/index.mdx | 93 + .../content/docs/es/knowledgebase/index.mdx | 113 + .../content/docs/es/knowledgebase/tags.mdx | 108 + apps/docs/content/docs/es/mcp/index.mdx | 140 + .../es/permissions/roles-and-permissions.mdx | 161 + apps/docs/content/docs/es/sdks/python.mdx | 412 ++ apps/docs/content/docs/es/sdks/typescript.mdx | 607 +++ apps/docs/content/docs/es/tools/airtable.mdx | 161 + apps/docs/content/docs/es/tools/arxiv.mdx | 109 + .../content/docs/es/tools/browser_use.mdx | 90 + .../docs/content/docs/es/tools/confluence.mdx | 97 + apps/docs/content/docs/es/tools/discord.mdx | 141 + .../docs/content/docs/es/tools/elevenlabs.mdx | 67 + apps/docs/content/docs/es/tools/exa.mdx | 148 + apps/docs/content/docs/es/tools/file.mdx | 77 + apps/docs/content/docs/es/tools/firecrawl.mdx | 124 + .../content/docs/es/tools/generic_webhook.mdx | 28 + apps/docs/content/docs/es/tools/github.mdx | 130 + apps/docs/content/docs/es/tools/gmail.mdx | 142 + .../content/docs/es/tools/google_calendar.mdx | 204 + .../content/docs/es/tools/google_docs.mdx | 144 + .../content/docs/es/tools/google_drive.mdx | 140 + .../content/docs/es/tools/google_search.mdx | 86 + .../content/docs/es/tools/google_sheets.mdx | 197 + apps/docs/content/docs/es/tools/hunter.mdx | 206 + .../content/docs/es/tools/image_generator.mdx | 79 + apps/docs/content/docs/es/tools/index.mdx | 71 + apps/docs/content/docs/es/tools/jina.mdx | 92 + apps/docs/content/docs/es/tools/jira.mdx | 140 + apps/docs/content/docs/es/tools/knowledge.mdx | 121 + apps/docs/content/docs/es/tools/linear.mdx | 87 + apps/docs/content/docs/es/tools/linkup.mdx | 72 + apps/docs/content/docs/es/tools/mem0.mdx | 114 + apps/docs/content/docs/es/tools/memory.mdx | 120 + .../content/docs/es/tools/microsoft_excel.mdx | 164 + .../docs/es/tools/microsoft_planner.mdx | 173 + .../content/docs/es/tools/microsoft_teams.mdx | 199 + .../content/docs/es/tools/mistral_parse.mdx | 113 + apps/docs/content/docs/es/tools/mongodb.mdx | 260 ++ apps/docs/content/docs/es/tools/mysql.mdx | 175 + apps/docs/content/docs/es/tools/notion.mdx | 182 + apps/docs/content/docs/es/tools/onedrive.mdx | 120 + apps/docs/content/docs/es/tools/openai.mdx | 72 + apps/docs/content/docs/es/tools/outlook.mdx | 236 ++ .../content/docs/es/tools/parallel_ai.mdx | 101 + .../docs/content/docs/es/tools/perplexity.mdx | 68 + apps/docs/content/docs/es/tools/pinecone.mdx | 161 + .../docs/content/docs/es/tools/postgresql.mdx | 183 + apps/docs/content/docs/es/tools/qdrant.mdx | 178 + apps/docs/content/docs/es/tools/reddit.mdx | 87 + apps/docs/content/docs/es/tools/s3.mdx | 90 + apps/docs/content/docs/es/tools/schedule.mdx | 38 + apps/docs/content/docs/es/tools/serper.mdx | 108 + .../docs/content/docs/es/tools/sharepoint.mdx | 127 + apps/docs/content/docs/es/tools/slack.mdx | 137 + apps/docs/content/docs/es/tools/supabase.mdx | 208 + apps/docs/content/docs/es/tools/tavily.mdx | 104 + apps/docs/content/docs/es/tools/telegram.mdx | 100 + apps/docs/content/docs/es/tools/thinking.mdx | 74 + apps/docs/content/docs/es/tools/translate.mdx | 89 + .../docs/content/docs/es/tools/twilio_sms.mdx | 67 + apps/docs/content/docs/es/tools/typeform.mdx | 119 + apps/docs/content/docs/es/tools/vision.mdx | 78 + apps/docs/content/docs/es/tools/wealthbox.mdx | 160 + apps/docs/content/docs/es/tools/webhook.mdx | 28 + apps/docs/content/docs/es/tools/whatsapp.mdx | 68 + apps/docs/content/docs/es/tools/wikipedia.mdx | 127 + apps/docs/content/docs/es/tools/x.mdx | 117 + apps/docs/content/docs/es/tools/youtube.mdx | 67 + .../content/docs/es/triggers/schedule.mdx | 73 + .../docs/content/docs/es/triggers/starter.mdx | 63 + .../docs/content/docs/es/triggers/webhook.mdx | 126 + .../es/variables/environment-variables.mdx | 96 + .../docs/es/variables/workflow-variables.mdx | 141 + .../content/docs/es/yaml/block-reference.mdx | 242 ++ .../content/docs/es/yaml/blocks/agent.mdx | 218 + apps/docs/content/docs/es/yaml/blocks/api.mdx | 429 ++ .../content/docs/es/yaml/blocks/condition.mdx | 165 + .../content/docs/es/yaml/blocks/evaluator.mdx | 255 ++ .../content/docs/es/yaml/blocks/function.mdx | 162 + .../content/docs/es/yaml/blocks/index.mdx | 151 + .../docs/content/docs/es/yaml/blocks/loop.mdx | 295 ++ .../content/docs/es/yaml/blocks/parallel.mdx | 312 ++ .../content/docs/es/yaml/blocks/response.mdx | 239 ++ .../content/docs/es/yaml/blocks/router.mdx | 200 + .../content/docs/es/yaml/blocks/starter.mdx | 183 + .../content/docs/es/yaml/blocks/webhook.mdx | 403 ++ .../content/docs/es/yaml/blocks/workflow.mdx | 299 ++ apps/docs/content/docs/es/yaml/examples.mdx | 273 ++ apps/docs/content/docs/es/yaml/index.mdx | 159 + apps/docs/content/docs/execution/meta.json | 5 - apps/docs/content/docs/fr/blocks/agent.mdx | 306 ++ apps/docs/content/docs/fr/blocks/api.mdx | 232 + .../docs/content/docs/fr/blocks/condition.mdx | 242 ++ .../docs/content/docs/fr/blocks/evaluator.mdx | 199 + apps/docs/content/docs/fr/blocks/function.mdx | 156 + apps/docs/content/docs/fr/blocks/index.mdx | 129 + apps/docs/content/docs/fr/blocks/loop.mdx | 211 + apps/docs/content/docs/fr/blocks/parallel.mdx | 231 + apps/docs/content/docs/fr/blocks/response.mdx | 246 ++ apps/docs/content/docs/fr/blocks/router.mdx | 225 + apps/docs/content/docs/fr/blocks/workflow.mdx | 168 + .../content/docs/fr/connections/basics.mdx | 43 + .../docs/fr/connections/data-structure.mdx | 195 + .../content/docs/fr/connections/index.mdx | 42 + .../docs/content/docs/fr/connections/tags.mdx | 109 + apps/docs/content/docs/fr/copilot/index.mdx | 161 + apps/docs/content/docs/fr/execution/api.mdx | 551 +++ .../docs/content/docs/fr/execution/basics.mdx | 132 + apps/docs/content/docs/fr/execution/costs.mdx | 186 + apps/docs/content/docs/fr/execution/index.mdx | 136 + .../content/docs/fr/execution/logging.mdx | 150 + .../content/docs/fr/getting-started/index.mdx | 193 + apps/docs/content/docs/fr/index.mdx | 60 + .../content/docs/fr/introduction/index.mdx | 85 + .../content/docs/fr/knowledgebase/index.mdx | 113 + .../content/docs/fr/knowledgebase/tags.mdx | 108 + apps/docs/content/docs/fr/mcp/index.mdx | 140 + .../fr/permissions/roles-and-permissions.mdx | 161 + apps/docs/content/docs/fr/sdks/python.mdx | 412 ++ apps/docs/content/docs/fr/sdks/typescript.mdx | 607 +++ apps/docs/content/docs/fr/tools/airtable.mdx | 161 + apps/docs/content/docs/fr/tools/arxiv.mdx | 109 + .../content/docs/fr/tools/browser_use.mdx | 90 + .../docs/content/docs/fr/tools/confluence.mdx | 97 + apps/docs/content/docs/fr/tools/discord.mdx | 141 + .../docs/content/docs/fr/tools/elevenlabs.mdx | 67 + apps/docs/content/docs/fr/tools/exa.mdx | 148 + apps/docs/content/docs/fr/tools/file.mdx | 77 + apps/docs/content/docs/fr/tools/firecrawl.mdx | 124 + .../content/docs/fr/tools/generic_webhook.mdx | 28 + apps/docs/content/docs/fr/tools/github.mdx | 131 + apps/docs/content/docs/fr/tools/gmail.mdx | 143 + .../content/docs/fr/tools/google_calendar.mdx | 204 + .../content/docs/fr/tools/google_docs.mdx | 144 + .../content/docs/fr/tools/google_drive.mdx | 140 + .../content/docs/fr/tools/google_search.mdx | 86 + .../content/docs/fr/tools/google_sheets.mdx | 197 + apps/docs/content/docs/fr/tools/hunter.mdx | 206 + .../content/docs/fr/tools/image_generator.mdx | 79 + apps/docs/content/docs/fr/tools/index.mdx | 71 + apps/docs/content/docs/fr/tools/jina.mdx | 92 + apps/docs/content/docs/fr/tools/jira.mdx | 140 + apps/docs/content/docs/fr/tools/knowledge.mdx | 121 + apps/docs/content/docs/fr/tools/linear.mdx | 87 + apps/docs/content/docs/fr/tools/linkup.mdx | 72 + apps/docs/content/docs/fr/tools/mem0.mdx | 114 + apps/docs/content/docs/fr/tools/memory.mdx | 120 + .../content/docs/fr/tools/microsoft_excel.mdx | 164 + .../docs/fr/tools/microsoft_planner.mdx | 173 + .../content/docs/fr/tools/microsoft_teams.mdx | 199 + .../content/docs/fr/tools/mistral_parse.mdx | 113 + apps/docs/content/docs/fr/tools/mongodb.mdx | 260 ++ apps/docs/content/docs/fr/tools/mysql.mdx | 175 + apps/docs/content/docs/fr/tools/notion.mdx | 182 + apps/docs/content/docs/fr/tools/onedrive.mdx | 120 + apps/docs/content/docs/fr/tools/openai.mdx | 72 + apps/docs/content/docs/fr/tools/outlook.mdx | 236 ++ .../content/docs/fr/tools/parallel_ai.mdx | 101 + .../docs/content/docs/fr/tools/perplexity.mdx | 68 + apps/docs/content/docs/fr/tools/pinecone.mdx | 161 + .../docs/content/docs/fr/tools/postgresql.mdx | 183 + apps/docs/content/docs/fr/tools/qdrant.mdx | 178 + apps/docs/content/docs/fr/tools/reddit.mdx | 87 + apps/docs/content/docs/fr/tools/s3.mdx | 90 + apps/docs/content/docs/fr/tools/schedule.mdx | 38 + apps/docs/content/docs/fr/tools/serper.mdx | 108 + .../docs/content/docs/fr/tools/sharepoint.mdx | 127 + apps/docs/content/docs/fr/tools/slack.mdx | 138 + apps/docs/content/docs/fr/tools/supabase.mdx | 208 + apps/docs/content/docs/fr/tools/tavily.mdx | 104 + apps/docs/content/docs/fr/tools/telegram.mdx | 100 + apps/docs/content/docs/fr/tools/thinking.mdx | 74 + apps/docs/content/docs/fr/tools/translate.mdx | 89 + .../docs/content/docs/fr/tools/twilio_sms.mdx | 67 + apps/docs/content/docs/fr/tools/typeform.mdx | 119 + apps/docs/content/docs/fr/tools/vision.mdx | 78 + apps/docs/content/docs/fr/tools/wealthbox.mdx | 160 + apps/docs/content/docs/fr/tools/webhook.mdx | 28 + apps/docs/content/docs/fr/tools/whatsapp.mdx | 68 + apps/docs/content/docs/fr/tools/wikipedia.mdx | 127 + apps/docs/content/docs/fr/tools/x.mdx | 117 + apps/docs/content/docs/fr/tools/youtube.mdx | 67 + .../content/docs/fr/triggers/schedule.mdx | 73 + .../docs/content/docs/fr/triggers/starter.mdx | 63 + .../docs/content/docs/fr/triggers/webhook.mdx | 126 + .../fr/variables/environment-variables.mdx | 96 + .../docs/fr/variables/workflow-variables.mdx | 138 + .../content/docs/fr/yaml/block-reference.mdx | 242 ++ .../content/docs/fr/yaml/blocks/agent.mdx | 218 + apps/docs/content/docs/fr/yaml/blocks/api.mdx | 429 ++ .../content/docs/fr/yaml/blocks/condition.mdx | 165 + .../content/docs/fr/yaml/blocks/evaluator.mdx | 255 ++ .../content/docs/fr/yaml/blocks/function.mdx | 162 + .../content/docs/fr/yaml/blocks/index.mdx | 151 + .../docs/content/docs/fr/yaml/blocks/loop.mdx | 295 ++ .../content/docs/fr/yaml/blocks/parallel.mdx | 312 ++ .../content/docs/fr/yaml/blocks/response.mdx | 239 ++ .../content/docs/fr/yaml/blocks/router.mdx | 200 + .../content/docs/fr/yaml/blocks/starter.mdx | 183 + .../content/docs/fr/yaml/blocks/webhook.mdx | 403 ++ .../content/docs/fr/yaml/blocks/workflow.mdx | 299 ++ apps/docs/content/docs/fr/yaml/examples.mdx | 273 ++ apps/docs/content/docs/fr/yaml/index.mdx | 159 + apps/docs/content/docs/introduction/meta.json | 4 - .../docs/content/docs/knowledgebase/meta.json | 5 - apps/docs/content/docs/mcp/meta.json | 5 - apps/docs/content/docs/permissions/meta.json | 5 - apps/docs/content/docs/sdks/meta.json | 4 - apps/docs/content/docs/tools/meta.json | 71 - apps/docs/content/docs/triggers/meta.json | 5 - apps/docs/content/docs/variables/meta.json | 4 - apps/docs/content/docs/yaml/blocks/meta.json | 17 - apps/docs/content/docs/yaml/meta.json | 5 - apps/docs/content/docs/zh/blocks/agent.mdx | 303 ++ apps/docs/content/docs/zh/blocks/api.mdx | 232 + .../docs/content/docs/zh/blocks/condition.mdx | 241 ++ .../docs/content/docs/zh/blocks/evaluator.mdx | 199 + apps/docs/content/docs/zh/blocks/function.mdx | 156 + apps/docs/content/docs/zh/blocks/index.mdx | 129 + apps/docs/content/docs/zh/blocks/loop.mdx | 211 + apps/docs/content/docs/zh/blocks/parallel.mdx | 231 + apps/docs/content/docs/zh/blocks/response.mdx | 246 ++ apps/docs/content/docs/zh/blocks/router.mdx | 225 + apps/docs/content/docs/zh/blocks/workflow.mdx | 168 + .../content/docs/zh/connections/basics.mdx | 41 + .../docs/zh/connections/data-structure.mdx | 193 + .../content/docs/zh/connections/index.mdx | 41 + .../docs/content/docs/zh/connections/tags.mdx | 106 + apps/docs/content/docs/zh/copilot/index.mdx | 161 + apps/docs/content/docs/zh/execution/api.mdx | 551 +++ .../docs/content/docs/zh/execution/basics.mdx | 132 + apps/docs/content/docs/zh/execution/costs.mdx | 186 + apps/docs/content/docs/zh/execution/index.mdx | 135 + .../content/docs/zh/execution/logging.mdx | 150 + .../content/docs/zh/getting-started/index.mdx | 193 + apps/docs/content/docs/zh/index.mdx | 60 + .../content/docs/zh/introduction/index.mdx | 85 + .../content/docs/zh/knowledgebase/index.mdx | 113 + .../content/docs/zh/knowledgebase/tags.mdx | 108 + apps/docs/content/docs/zh/mcp/index.mdx | 140 + .../zh/permissions/roles-and-permissions.mdx | 161 + apps/docs/content/docs/zh/sdks/python.mdx | 412 ++ apps/docs/content/docs/zh/sdks/typescript.mdx | 607 +++ apps/docs/content/docs/zh/tools/airtable.mdx | 161 + apps/docs/content/docs/zh/tools/arxiv.mdx | 109 + .../content/docs/zh/tools/browser_use.mdx | 89 + apps/docs/content/docs/zh/tools/clay.mdx | 226 + .../docs/content/docs/zh/tools/confluence.mdx | 96 + apps/docs/content/docs/zh/tools/discord.mdx | 141 + .../docs/content/docs/zh/tools/elevenlabs.mdx | 67 + apps/docs/content/docs/zh/tools/exa.mdx | 148 + apps/docs/content/docs/zh/tools/file.mdx | 77 + apps/docs/content/docs/zh/tools/firecrawl.mdx | 124 + .../content/docs/zh/tools/generic_webhook.mdx | 28 + apps/docs/content/docs/zh/tools/github.mdx | 130 + apps/docs/content/docs/zh/tools/gmail.mdx | 142 + .../content/docs/zh/tools/google_calendar.mdx | 204 + .../content/docs/zh/tools/google_docs.mdx | 144 + .../content/docs/zh/tools/google_drive.mdx | 140 + .../content/docs/zh/tools/google_search.mdx | 86 + .../content/docs/zh/tools/google_sheets.mdx | 197 + apps/docs/content/docs/zh/tools/hunter.mdx | 206 + .../content/docs/zh/tools/image_generator.mdx | 79 + apps/docs/content/docs/zh/tools/index.mdx | 71 + apps/docs/content/docs/zh/tools/jina.mdx | 92 + apps/docs/content/docs/zh/tools/jira.mdx | 140 + apps/docs/content/docs/zh/tools/knowledge.mdx | 121 + apps/docs/content/docs/zh/tools/linear.mdx | 87 + apps/docs/content/docs/zh/tools/linkup.mdx | 72 + apps/docs/content/docs/zh/tools/mem0.mdx | 114 + apps/docs/content/docs/zh/tools/memory.mdx | 120 + .../content/docs/zh/tools/microsoft_excel.mdx | 164 + .../docs/zh/tools/microsoft_planner.mdx | 173 + .../content/docs/zh/tools/microsoft_teams.mdx | 199 + .../content/docs/zh/tools/mistral_parse.mdx | 113 + apps/docs/content/docs/zh/tools/mongodb.mdx | 260 ++ apps/docs/content/docs/zh/tools/mysql.mdx | 175 + apps/docs/content/docs/zh/tools/notion.mdx | 182 + apps/docs/content/docs/zh/tools/onedrive.mdx | 120 + apps/docs/content/docs/zh/tools/openai.mdx | 71 + apps/docs/content/docs/zh/tools/outlook.mdx | 236 ++ .../content/docs/zh/tools/parallel_ai.mdx | 101 + .../docs/content/docs/zh/tools/perplexity.mdx | 68 + apps/docs/content/docs/zh/tools/pinecone.mdx | 161 + .../docs/content/docs/zh/tools/postgresql.mdx | 183 + apps/docs/content/docs/zh/tools/qdrant.mdx | 178 + apps/docs/content/docs/zh/tools/reddit.mdx | 87 + apps/docs/content/docs/zh/tools/s3.mdx | 90 + apps/docs/content/docs/zh/tools/schedule.mdx | 38 + apps/docs/content/docs/zh/tools/serper.mdx | 108 + .../docs/content/docs/zh/tools/sharepoint.mdx | 127 + apps/docs/content/docs/zh/tools/slack.mdx | 136 + apps/docs/content/docs/zh/tools/stagehand.mdx | 219 + .../content/docs/zh/tools/stagehand_agent.mdx | 225 + apps/docs/content/docs/zh/tools/supabase.mdx | 208 + apps/docs/content/docs/zh/tools/tavily.mdx | 104 + apps/docs/content/docs/zh/tools/telegram.mdx | 99 + apps/docs/content/docs/zh/tools/thinking.mdx | 74 + apps/docs/content/docs/zh/tools/translate.mdx | 89 + .../docs/content/docs/zh/tools/twilio_sms.mdx | 67 + apps/docs/content/docs/zh/tools/typeform.mdx | 119 + apps/docs/content/docs/zh/tools/vision.mdx | 78 + apps/docs/content/docs/zh/tools/wealthbox.mdx | 160 + apps/docs/content/docs/zh/tools/webhook.mdx | 28 + apps/docs/content/docs/zh/tools/whatsapp.mdx | 68 + apps/docs/content/docs/zh/tools/wikipedia.mdx | 127 + apps/docs/content/docs/zh/tools/x.mdx | 117 + apps/docs/content/docs/zh/tools/youtube.mdx | 67 + .../content/docs/zh/triggers/schedule.mdx | 73 + .../docs/content/docs/zh/triggers/starter.mdx | 63 + .../docs/content/docs/zh/triggers/webhook.mdx | 126 + .../zh/variables/environment-variables.mdx | 96 + .../docs/zh/variables/workflow-variables.mdx | 137 + .../content/docs/zh/yaml/block-reference.mdx | 242 ++ .../content/docs/zh/yaml/blocks/agent.mdx | 218 + apps/docs/content/docs/zh/yaml/blocks/api.mdx | 429 ++ .../content/docs/zh/yaml/blocks/condition.mdx | 165 + .../content/docs/zh/yaml/blocks/evaluator.mdx | 255 ++ .../content/docs/zh/yaml/blocks/function.mdx | 162 + .../content/docs/zh/yaml/blocks/index.mdx | 151 + .../docs/content/docs/zh/yaml/blocks/loop.mdx | 295 ++ .../content/docs/zh/yaml/blocks/parallel.mdx | 312 ++ .../content/docs/zh/yaml/blocks/response.mdx | 239 ++ .../content/docs/zh/yaml/blocks/router.mdx | 200 + .../content/docs/zh/yaml/blocks/starter.mdx | 183 + .../content/docs/zh/yaml/blocks/webhook.mdx | 403 ++ .../content/docs/zh/yaml/blocks/workflow.mdx | 299 ++ apps/docs/content/docs/zh/yaml/examples.mdx | 273 ++ apps/docs/content/docs/zh/yaml/index.mdx | 159 + apps/docs/i18n.json | 17 + apps/docs/i18n.lock | 3746 +++++++++++++++++ apps/docs/lib/i18n.ts | 8 + apps/docs/lib/source.ts | 4 +- apps/docs/middleware.ts | 8 + .../{ => knowledgebase}/knowledgebase-2.png | Bin .../{ => knowledgebase}/knowledgebase.png | Bin 490 files changed, 58889 insertions(+), 305 deletions(-) create mode 100644 .github/workflows/i18n.yml delete mode 100644 apps/docs/app/(docs)/[[...slug]]/layout.tsx delete mode 100644 apps/docs/app/(docs)/[[...slug]]/page.tsx delete mode 100644 apps/docs/app/(docs)/layout.tsx create mode 100644 apps/docs/app/[lang]/[[...slug]]/page.tsx create mode 100644 apps/docs/app/[lang]/layout.tsx create mode 100644 apps/docs/components/ui/language-dropdown.tsx delete mode 100644 apps/docs/content/docs/blocks/meta.json delete mode 100644 apps/docs/content/docs/connections/meta.json delete mode 100644 apps/docs/content/docs/copilot/meta.json rename apps/docs/content/docs/{ => en}/blocks/agent.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/api.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/condition.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/evaluator.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/function.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/index.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/loop.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/parallel.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/response.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/router.mdx (100%) rename apps/docs/content/docs/{ => en}/blocks/workflow.mdx (100%) rename apps/docs/content/docs/{ => en}/connections/basics.mdx (100%) rename apps/docs/content/docs/{ => en}/connections/data-structure.mdx (100%) rename apps/docs/content/docs/{ => en}/connections/index.mdx (100%) rename apps/docs/content/docs/{ => en}/connections/tags.mdx (100%) rename apps/docs/content/docs/{ => en}/copilot/index.mdx (100%) rename apps/docs/content/docs/{ => en}/execution/api.mdx (100%) rename apps/docs/content/docs/{ => en}/execution/basics.mdx (100%) rename apps/docs/content/docs/{ => en}/execution/costs.mdx (100%) rename apps/docs/content/docs/{ => en}/execution/index.mdx (100%) rename apps/docs/content/docs/{ => en}/execution/logging.mdx (100%) rename apps/docs/content/docs/{ => en}/getting-started/index.mdx (100%) create mode 100644 apps/docs/content/docs/en/index.mdx rename apps/docs/content/docs/{ => en}/introduction/index.mdx (92%) rename apps/docs/content/docs/{ => en}/knowledgebase/index.mdx (95%) rename apps/docs/content/docs/{ => en}/knowledgebase/tags.mdx (100%) rename apps/docs/content/docs/{ => en}/mcp/index.mdx (100%) rename apps/docs/content/docs/{ => en}/meta.json (100%) rename apps/docs/content/docs/{ => en}/permissions/roles-and-permissions.mdx (100%) rename apps/docs/content/docs/{ => en}/sdks/python.mdx (100%) rename apps/docs/content/docs/{ => en}/sdks/typescript.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/airtable.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/arxiv.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/browser_use.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/clay.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/confluence.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/discord.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/elevenlabs.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/exa.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/file.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/firecrawl.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/generic_webhook.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/github.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/gmail.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/google_calendar.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/google_docs.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/google_drive.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/google_search.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/google_sheets.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/huggingface.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/hunter.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/image_generator.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/index.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/jina.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/jira.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/knowledge.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/linear.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/linkup.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/mem0.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/memory.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/microsoft_excel.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/microsoft_planner.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/microsoft_teams.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/mistral_parse.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/mongodb.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/mysql.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/notion.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/onedrive.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/openai.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/outlook.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/parallel_ai.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/perplexity.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/pinecone.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/postgresql.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/qdrant.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/reddit.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/s3.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/schedule.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/serper.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/sharepoint.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/slack.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/stagehand.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/stagehand_agent.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/supabase.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/tavily.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/telegram.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/thinking.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/translate.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/twilio_sms.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/typeform.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/vision.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/wealthbox.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/webhook.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/whatsapp.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/wikipedia.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/x.mdx (100%) rename apps/docs/content/docs/{ => en}/tools/youtube.mdx (100%) rename apps/docs/content/docs/{ => en}/triggers/schedule.mdx (100%) rename apps/docs/content/docs/{ => en}/triggers/starter.mdx (100%) rename apps/docs/content/docs/{ => en}/triggers/webhook.mdx (100%) rename apps/docs/content/docs/{ => en}/variables/environment-variables.mdx (100%) rename apps/docs/content/docs/{ => en}/variables/workflow-variables.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/block-reference.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/agent.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/api.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/condition.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/evaluator.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/function.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/index.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/loop.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/parallel.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/response.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/router.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/starter.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/webhook.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/blocks/workflow.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/examples.mdx (100%) rename apps/docs/content/docs/{ => en}/yaml/index.mdx (100%) create mode 100644 apps/docs/content/docs/es/blocks/agent.mdx create mode 100644 apps/docs/content/docs/es/blocks/api.mdx create mode 100644 apps/docs/content/docs/es/blocks/condition.mdx create mode 100644 apps/docs/content/docs/es/blocks/evaluator.mdx create mode 100644 apps/docs/content/docs/es/blocks/function.mdx create mode 100644 apps/docs/content/docs/es/blocks/index.mdx create mode 100644 apps/docs/content/docs/es/blocks/loop.mdx create mode 100644 apps/docs/content/docs/es/blocks/parallel.mdx create mode 100644 apps/docs/content/docs/es/blocks/response.mdx create mode 100644 apps/docs/content/docs/es/blocks/router.mdx create mode 100644 apps/docs/content/docs/es/blocks/workflow.mdx create mode 100644 apps/docs/content/docs/es/connections/basics.mdx create mode 100644 apps/docs/content/docs/es/connections/data-structure.mdx create mode 100644 apps/docs/content/docs/es/connections/index.mdx create mode 100644 apps/docs/content/docs/es/connections/tags.mdx create mode 100644 apps/docs/content/docs/es/copilot/index.mdx create mode 100644 apps/docs/content/docs/es/execution/api.mdx create mode 100644 apps/docs/content/docs/es/execution/basics.mdx create mode 100644 apps/docs/content/docs/es/execution/costs.mdx create mode 100644 apps/docs/content/docs/es/execution/index.mdx create mode 100644 apps/docs/content/docs/es/execution/logging.mdx create mode 100644 apps/docs/content/docs/es/getting-started/index.mdx create mode 100644 apps/docs/content/docs/es/index.mdx create mode 100644 apps/docs/content/docs/es/introduction/index.mdx create mode 100644 apps/docs/content/docs/es/knowledgebase/index.mdx create mode 100644 apps/docs/content/docs/es/knowledgebase/tags.mdx create mode 100644 apps/docs/content/docs/es/mcp/index.mdx create mode 100644 apps/docs/content/docs/es/permissions/roles-and-permissions.mdx create mode 100644 apps/docs/content/docs/es/sdks/python.mdx create mode 100644 apps/docs/content/docs/es/sdks/typescript.mdx create mode 100644 apps/docs/content/docs/es/tools/airtable.mdx create mode 100644 apps/docs/content/docs/es/tools/arxiv.mdx create mode 100644 apps/docs/content/docs/es/tools/browser_use.mdx create mode 100644 apps/docs/content/docs/es/tools/confluence.mdx create mode 100644 apps/docs/content/docs/es/tools/discord.mdx create mode 100644 apps/docs/content/docs/es/tools/elevenlabs.mdx create mode 100644 apps/docs/content/docs/es/tools/exa.mdx create mode 100644 apps/docs/content/docs/es/tools/file.mdx create mode 100644 apps/docs/content/docs/es/tools/firecrawl.mdx create mode 100644 apps/docs/content/docs/es/tools/generic_webhook.mdx create mode 100644 apps/docs/content/docs/es/tools/github.mdx create mode 100644 apps/docs/content/docs/es/tools/gmail.mdx create mode 100644 apps/docs/content/docs/es/tools/google_calendar.mdx create mode 100644 apps/docs/content/docs/es/tools/google_docs.mdx create mode 100644 apps/docs/content/docs/es/tools/google_drive.mdx create mode 100644 apps/docs/content/docs/es/tools/google_search.mdx create mode 100644 apps/docs/content/docs/es/tools/google_sheets.mdx create mode 100644 apps/docs/content/docs/es/tools/hunter.mdx create mode 100644 apps/docs/content/docs/es/tools/image_generator.mdx create mode 100644 apps/docs/content/docs/es/tools/index.mdx create mode 100644 apps/docs/content/docs/es/tools/jina.mdx create mode 100644 apps/docs/content/docs/es/tools/jira.mdx create mode 100644 apps/docs/content/docs/es/tools/knowledge.mdx create mode 100644 apps/docs/content/docs/es/tools/linear.mdx create mode 100644 apps/docs/content/docs/es/tools/linkup.mdx create mode 100644 apps/docs/content/docs/es/tools/mem0.mdx create mode 100644 apps/docs/content/docs/es/tools/memory.mdx create mode 100644 apps/docs/content/docs/es/tools/microsoft_excel.mdx create mode 100644 apps/docs/content/docs/es/tools/microsoft_planner.mdx create mode 100644 apps/docs/content/docs/es/tools/microsoft_teams.mdx create mode 100644 apps/docs/content/docs/es/tools/mistral_parse.mdx create mode 100644 apps/docs/content/docs/es/tools/mongodb.mdx create mode 100644 apps/docs/content/docs/es/tools/mysql.mdx create mode 100644 apps/docs/content/docs/es/tools/notion.mdx create mode 100644 apps/docs/content/docs/es/tools/onedrive.mdx create mode 100644 apps/docs/content/docs/es/tools/openai.mdx create mode 100644 apps/docs/content/docs/es/tools/outlook.mdx create mode 100644 apps/docs/content/docs/es/tools/parallel_ai.mdx create mode 100644 apps/docs/content/docs/es/tools/perplexity.mdx create mode 100644 apps/docs/content/docs/es/tools/pinecone.mdx create mode 100644 apps/docs/content/docs/es/tools/postgresql.mdx create mode 100644 apps/docs/content/docs/es/tools/qdrant.mdx create mode 100644 apps/docs/content/docs/es/tools/reddit.mdx create mode 100644 apps/docs/content/docs/es/tools/s3.mdx create mode 100644 apps/docs/content/docs/es/tools/schedule.mdx create mode 100644 apps/docs/content/docs/es/tools/serper.mdx create mode 100644 apps/docs/content/docs/es/tools/sharepoint.mdx create mode 100644 apps/docs/content/docs/es/tools/slack.mdx create mode 100644 apps/docs/content/docs/es/tools/supabase.mdx create mode 100644 apps/docs/content/docs/es/tools/tavily.mdx create mode 100644 apps/docs/content/docs/es/tools/telegram.mdx create mode 100644 apps/docs/content/docs/es/tools/thinking.mdx create mode 100644 apps/docs/content/docs/es/tools/translate.mdx create mode 100644 apps/docs/content/docs/es/tools/twilio_sms.mdx create mode 100644 apps/docs/content/docs/es/tools/typeform.mdx create mode 100644 apps/docs/content/docs/es/tools/vision.mdx create mode 100644 apps/docs/content/docs/es/tools/wealthbox.mdx create mode 100644 apps/docs/content/docs/es/tools/webhook.mdx create mode 100644 apps/docs/content/docs/es/tools/whatsapp.mdx create mode 100644 apps/docs/content/docs/es/tools/wikipedia.mdx create mode 100644 apps/docs/content/docs/es/tools/x.mdx create mode 100644 apps/docs/content/docs/es/tools/youtube.mdx create mode 100644 apps/docs/content/docs/es/triggers/schedule.mdx create mode 100644 apps/docs/content/docs/es/triggers/starter.mdx create mode 100644 apps/docs/content/docs/es/triggers/webhook.mdx create mode 100644 apps/docs/content/docs/es/variables/environment-variables.mdx create mode 100644 apps/docs/content/docs/es/variables/workflow-variables.mdx create mode 100644 apps/docs/content/docs/es/yaml/block-reference.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/agent.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/api.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/condition.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/evaluator.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/function.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/index.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/loop.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/parallel.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/response.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/router.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/starter.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/webhook.mdx create mode 100644 apps/docs/content/docs/es/yaml/blocks/workflow.mdx create mode 100644 apps/docs/content/docs/es/yaml/examples.mdx create mode 100644 apps/docs/content/docs/es/yaml/index.mdx delete mode 100644 apps/docs/content/docs/execution/meta.json create mode 100644 apps/docs/content/docs/fr/blocks/agent.mdx create mode 100644 apps/docs/content/docs/fr/blocks/api.mdx create mode 100644 apps/docs/content/docs/fr/blocks/condition.mdx create mode 100644 apps/docs/content/docs/fr/blocks/evaluator.mdx create mode 100644 apps/docs/content/docs/fr/blocks/function.mdx create mode 100644 apps/docs/content/docs/fr/blocks/index.mdx create mode 100644 apps/docs/content/docs/fr/blocks/loop.mdx create mode 100644 apps/docs/content/docs/fr/blocks/parallel.mdx create mode 100644 apps/docs/content/docs/fr/blocks/response.mdx create mode 100644 apps/docs/content/docs/fr/blocks/router.mdx create mode 100644 apps/docs/content/docs/fr/blocks/workflow.mdx create mode 100644 apps/docs/content/docs/fr/connections/basics.mdx create mode 100644 apps/docs/content/docs/fr/connections/data-structure.mdx create mode 100644 apps/docs/content/docs/fr/connections/index.mdx create mode 100644 apps/docs/content/docs/fr/connections/tags.mdx create mode 100644 apps/docs/content/docs/fr/copilot/index.mdx create mode 100644 apps/docs/content/docs/fr/execution/api.mdx create mode 100644 apps/docs/content/docs/fr/execution/basics.mdx create mode 100644 apps/docs/content/docs/fr/execution/costs.mdx create mode 100644 apps/docs/content/docs/fr/execution/index.mdx create mode 100644 apps/docs/content/docs/fr/execution/logging.mdx create mode 100644 apps/docs/content/docs/fr/getting-started/index.mdx create mode 100644 apps/docs/content/docs/fr/index.mdx create mode 100644 apps/docs/content/docs/fr/introduction/index.mdx create mode 100644 apps/docs/content/docs/fr/knowledgebase/index.mdx create mode 100644 apps/docs/content/docs/fr/knowledgebase/tags.mdx create mode 100644 apps/docs/content/docs/fr/mcp/index.mdx create mode 100644 apps/docs/content/docs/fr/permissions/roles-and-permissions.mdx create mode 100644 apps/docs/content/docs/fr/sdks/python.mdx create mode 100644 apps/docs/content/docs/fr/sdks/typescript.mdx create mode 100644 apps/docs/content/docs/fr/tools/airtable.mdx create mode 100644 apps/docs/content/docs/fr/tools/arxiv.mdx create mode 100644 apps/docs/content/docs/fr/tools/browser_use.mdx create mode 100644 apps/docs/content/docs/fr/tools/confluence.mdx create mode 100644 apps/docs/content/docs/fr/tools/discord.mdx create mode 100644 apps/docs/content/docs/fr/tools/elevenlabs.mdx create mode 100644 apps/docs/content/docs/fr/tools/exa.mdx create mode 100644 apps/docs/content/docs/fr/tools/file.mdx create mode 100644 apps/docs/content/docs/fr/tools/firecrawl.mdx create mode 100644 apps/docs/content/docs/fr/tools/generic_webhook.mdx create mode 100644 apps/docs/content/docs/fr/tools/github.mdx create mode 100644 apps/docs/content/docs/fr/tools/gmail.mdx create mode 100644 apps/docs/content/docs/fr/tools/google_calendar.mdx create mode 100644 apps/docs/content/docs/fr/tools/google_docs.mdx create mode 100644 apps/docs/content/docs/fr/tools/google_drive.mdx create mode 100644 apps/docs/content/docs/fr/tools/google_search.mdx create mode 100644 apps/docs/content/docs/fr/tools/google_sheets.mdx create mode 100644 apps/docs/content/docs/fr/tools/hunter.mdx create mode 100644 apps/docs/content/docs/fr/tools/image_generator.mdx create mode 100644 apps/docs/content/docs/fr/tools/index.mdx create mode 100644 apps/docs/content/docs/fr/tools/jina.mdx create mode 100644 apps/docs/content/docs/fr/tools/jira.mdx create mode 100644 apps/docs/content/docs/fr/tools/knowledge.mdx create mode 100644 apps/docs/content/docs/fr/tools/linear.mdx create mode 100644 apps/docs/content/docs/fr/tools/linkup.mdx create mode 100644 apps/docs/content/docs/fr/tools/mem0.mdx create mode 100644 apps/docs/content/docs/fr/tools/memory.mdx create mode 100644 apps/docs/content/docs/fr/tools/microsoft_excel.mdx create mode 100644 apps/docs/content/docs/fr/tools/microsoft_planner.mdx create mode 100644 apps/docs/content/docs/fr/tools/microsoft_teams.mdx create mode 100644 apps/docs/content/docs/fr/tools/mistral_parse.mdx create mode 100644 apps/docs/content/docs/fr/tools/mongodb.mdx create mode 100644 apps/docs/content/docs/fr/tools/mysql.mdx create mode 100644 apps/docs/content/docs/fr/tools/notion.mdx create mode 100644 apps/docs/content/docs/fr/tools/onedrive.mdx create mode 100644 apps/docs/content/docs/fr/tools/openai.mdx create mode 100644 apps/docs/content/docs/fr/tools/outlook.mdx create mode 100644 apps/docs/content/docs/fr/tools/parallel_ai.mdx create mode 100644 apps/docs/content/docs/fr/tools/perplexity.mdx create mode 100644 apps/docs/content/docs/fr/tools/pinecone.mdx create mode 100644 apps/docs/content/docs/fr/tools/postgresql.mdx create mode 100644 apps/docs/content/docs/fr/tools/qdrant.mdx create mode 100644 apps/docs/content/docs/fr/tools/reddit.mdx create mode 100644 apps/docs/content/docs/fr/tools/s3.mdx create mode 100644 apps/docs/content/docs/fr/tools/schedule.mdx create mode 100644 apps/docs/content/docs/fr/tools/serper.mdx create mode 100644 apps/docs/content/docs/fr/tools/sharepoint.mdx create mode 100644 apps/docs/content/docs/fr/tools/slack.mdx create mode 100644 apps/docs/content/docs/fr/tools/supabase.mdx create mode 100644 apps/docs/content/docs/fr/tools/tavily.mdx create mode 100644 apps/docs/content/docs/fr/tools/telegram.mdx create mode 100644 apps/docs/content/docs/fr/tools/thinking.mdx create mode 100644 apps/docs/content/docs/fr/tools/translate.mdx create mode 100644 apps/docs/content/docs/fr/tools/twilio_sms.mdx create mode 100644 apps/docs/content/docs/fr/tools/typeform.mdx create mode 100644 apps/docs/content/docs/fr/tools/vision.mdx create mode 100644 apps/docs/content/docs/fr/tools/wealthbox.mdx create mode 100644 apps/docs/content/docs/fr/tools/webhook.mdx create mode 100644 apps/docs/content/docs/fr/tools/whatsapp.mdx create mode 100644 apps/docs/content/docs/fr/tools/wikipedia.mdx create mode 100644 apps/docs/content/docs/fr/tools/x.mdx create mode 100644 apps/docs/content/docs/fr/tools/youtube.mdx create mode 100644 apps/docs/content/docs/fr/triggers/schedule.mdx create mode 100644 apps/docs/content/docs/fr/triggers/starter.mdx create mode 100644 apps/docs/content/docs/fr/triggers/webhook.mdx create mode 100644 apps/docs/content/docs/fr/variables/environment-variables.mdx create mode 100644 apps/docs/content/docs/fr/variables/workflow-variables.mdx create mode 100644 apps/docs/content/docs/fr/yaml/block-reference.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/agent.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/api.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/condition.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/evaluator.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/function.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/index.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/loop.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/parallel.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/response.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/router.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/starter.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/webhook.mdx create mode 100644 apps/docs/content/docs/fr/yaml/blocks/workflow.mdx create mode 100644 apps/docs/content/docs/fr/yaml/examples.mdx create mode 100644 apps/docs/content/docs/fr/yaml/index.mdx delete mode 100644 apps/docs/content/docs/introduction/meta.json delete mode 100644 apps/docs/content/docs/knowledgebase/meta.json delete mode 100644 apps/docs/content/docs/mcp/meta.json delete mode 100644 apps/docs/content/docs/permissions/meta.json delete mode 100644 apps/docs/content/docs/sdks/meta.json delete mode 100644 apps/docs/content/docs/tools/meta.json delete mode 100644 apps/docs/content/docs/triggers/meta.json delete mode 100644 apps/docs/content/docs/variables/meta.json delete mode 100644 apps/docs/content/docs/yaml/blocks/meta.json delete mode 100644 apps/docs/content/docs/yaml/meta.json create mode 100644 apps/docs/content/docs/zh/blocks/agent.mdx create mode 100644 apps/docs/content/docs/zh/blocks/api.mdx create mode 100644 apps/docs/content/docs/zh/blocks/condition.mdx create mode 100644 apps/docs/content/docs/zh/blocks/evaluator.mdx create mode 100644 apps/docs/content/docs/zh/blocks/function.mdx create mode 100644 apps/docs/content/docs/zh/blocks/index.mdx create mode 100644 apps/docs/content/docs/zh/blocks/loop.mdx create mode 100644 apps/docs/content/docs/zh/blocks/parallel.mdx create mode 100644 apps/docs/content/docs/zh/blocks/response.mdx create mode 100644 apps/docs/content/docs/zh/blocks/router.mdx create mode 100644 apps/docs/content/docs/zh/blocks/workflow.mdx create mode 100644 apps/docs/content/docs/zh/connections/basics.mdx create mode 100644 apps/docs/content/docs/zh/connections/data-structure.mdx create mode 100644 apps/docs/content/docs/zh/connections/index.mdx create mode 100644 apps/docs/content/docs/zh/connections/tags.mdx create mode 100644 apps/docs/content/docs/zh/copilot/index.mdx create mode 100644 apps/docs/content/docs/zh/execution/api.mdx create mode 100644 apps/docs/content/docs/zh/execution/basics.mdx create mode 100644 apps/docs/content/docs/zh/execution/costs.mdx create mode 100644 apps/docs/content/docs/zh/execution/index.mdx create mode 100644 apps/docs/content/docs/zh/execution/logging.mdx create mode 100644 apps/docs/content/docs/zh/getting-started/index.mdx create mode 100644 apps/docs/content/docs/zh/index.mdx create mode 100644 apps/docs/content/docs/zh/introduction/index.mdx create mode 100644 apps/docs/content/docs/zh/knowledgebase/index.mdx create mode 100644 apps/docs/content/docs/zh/knowledgebase/tags.mdx create mode 100644 apps/docs/content/docs/zh/mcp/index.mdx create mode 100644 apps/docs/content/docs/zh/permissions/roles-and-permissions.mdx create mode 100644 apps/docs/content/docs/zh/sdks/python.mdx create mode 100644 apps/docs/content/docs/zh/sdks/typescript.mdx create mode 100644 apps/docs/content/docs/zh/tools/airtable.mdx create mode 100644 apps/docs/content/docs/zh/tools/arxiv.mdx create mode 100644 apps/docs/content/docs/zh/tools/browser_use.mdx create mode 100644 apps/docs/content/docs/zh/tools/clay.mdx create mode 100644 apps/docs/content/docs/zh/tools/confluence.mdx create mode 100644 apps/docs/content/docs/zh/tools/discord.mdx create mode 100644 apps/docs/content/docs/zh/tools/elevenlabs.mdx create mode 100644 apps/docs/content/docs/zh/tools/exa.mdx create mode 100644 apps/docs/content/docs/zh/tools/file.mdx create mode 100644 apps/docs/content/docs/zh/tools/firecrawl.mdx create mode 100644 apps/docs/content/docs/zh/tools/generic_webhook.mdx create mode 100644 apps/docs/content/docs/zh/tools/github.mdx create mode 100644 apps/docs/content/docs/zh/tools/gmail.mdx create mode 100644 apps/docs/content/docs/zh/tools/google_calendar.mdx create mode 100644 apps/docs/content/docs/zh/tools/google_docs.mdx create mode 100644 apps/docs/content/docs/zh/tools/google_drive.mdx create mode 100644 apps/docs/content/docs/zh/tools/google_search.mdx create mode 100644 apps/docs/content/docs/zh/tools/google_sheets.mdx create mode 100644 apps/docs/content/docs/zh/tools/hunter.mdx create mode 100644 apps/docs/content/docs/zh/tools/image_generator.mdx create mode 100644 apps/docs/content/docs/zh/tools/index.mdx create mode 100644 apps/docs/content/docs/zh/tools/jina.mdx create mode 100644 apps/docs/content/docs/zh/tools/jira.mdx create mode 100644 apps/docs/content/docs/zh/tools/knowledge.mdx create mode 100644 apps/docs/content/docs/zh/tools/linear.mdx create mode 100644 apps/docs/content/docs/zh/tools/linkup.mdx create mode 100644 apps/docs/content/docs/zh/tools/mem0.mdx create mode 100644 apps/docs/content/docs/zh/tools/memory.mdx create mode 100644 apps/docs/content/docs/zh/tools/microsoft_excel.mdx create mode 100644 apps/docs/content/docs/zh/tools/microsoft_planner.mdx create mode 100644 apps/docs/content/docs/zh/tools/microsoft_teams.mdx create mode 100644 apps/docs/content/docs/zh/tools/mistral_parse.mdx create mode 100644 apps/docs/content/docs/zh/tools/mongodb.mdx create mode 100644 apps/docs/content/docs/zh/tools/mysql.mdx create mode 100644 apps/docs/content/docs/zh/tools/notion.mdx create mode 100644 apps/docs/content/docs/zh/tools/onedrive.mdx create mode 100644 apps/docs/content/docs/zh/tools/openai.mdx create mode 100644 apps/docs/content/docs/zh/tools/outlook.mdx create mode 100644 apps/docs/content/docs/zh/tools/parallel_ai.mdx create mode 100644 apps/docs/content/docs/zh/tools/perplexity.mdx create mode 100644 apps/docs/content/docs/zh/tools/pinecone.mdx create mode 100644 apps/docs/content/docs/zh/tools/postgresql.mdx create mode 100644 apps/docs/content/docs/zh/tools/qdrant.mdx create mode 100644 apps/docs/content/docs/zh/tools/reddit.mdx create mode 100644 apps/docs/content/docs/zh/tools/s3.mdx create mode 100644 apps/docs/content/docs/zh/tools/schedule.mdx create mode 100644 apps/docs/content/docs/zh/tools/serper.mdx create mode 100644 apps/docs/content/docs/zh/tools/sharepoint.mdx create mode 100644 apps/docs/content/docs/zh/tools/slack.mdx create mode 100644 apps/docs/content/docs/zh/tools/stagehand.mdx create mode 100644 apps/docs/content/docs/zh/tools/stagehand_agent.mdx create mode 100644 apps/docs/content/docs/zh/tools/supabase.mdx create mode 100644 apps/docs/content/docs/zh/tools/tavily.mdx create mode 100644 apps/docs/content/docs/zh/tools/telegram.mdx create mode 100644 apps/docs/content/docs/zh/tools/thinking.mdx create mode 100644 apps/docs/content/docs/zh/tools/translate.mdx create mode 100644 apps/docs/content/docs/zh/tools/twilio_sms.mdx create mode 100644 apps/docs/content/docs/zh/tools/typeform.mdx create mode 100644 apps/docs/content/docs/zh/tools/vision.mdx create mode 100644 apps/docs/content/docs/zh/tools/wealthbox.mdx create mode 100644 apps/docs/content/docs/zh/tools/webhook.mdx create mode 100644 apps/docs/content/docs/zh/tools/whatsapp.mdx create mode 100644 apps/docs/content/docs/zh/tools/wikipedia.mdx create mode 100644 apps/docs/content/docs/zh/tools/x.mdx create mode 100644 apps/docs/content/docs/zh/tools/youtube.mdx create mode 100644 apps/docs/content/docs/zh/triggers/schedule.mdx create mode 100644 apps/docs/content/docs/zh/triggers/starter.mdx create mode 100644 apps/docs/content/docs/zh/triggers/webhook.mdx create mode 100644 apps/docs/content/docs/zh/variables/environment-variables.mdx create mode 100644 apps/docs/content/docs/zh/variables/workflow-variables.mdx create mode 100644 apps/docs/content/docs/zh/yaml/block-reference.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/agent.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/api.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/condition.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/evaluator.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/function.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/index.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/loop.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/parallel.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/response.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/router.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/starter.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/webhook.mdx create mode 100644 apps/docs/content/docs/zh/yaml/blocks/workflow.mdx create mode 100644 apps/docs/content/docs/zh/yaml/examples.mdx create mode 100644 apps/docs/content/docs/zh/yaml/index.mdx create mode 100644 apps/docs/i18n.json create mode 100644 apps/docs/i18n.lock create mode 100644 apps/docs/lib/i18n.ts create mode 100644 apps/docs/middleware.ts rename apps/docs/public/static/{ => knowledgebase}/knowledgebase-2.png (100%) rename apps/docs/public/static/{ => knowledgebase}/knowledgebase.png (100%) diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml new file mode 100644 index 0000000000..b6966dc143 --- /dev/null +++ b/.github/workflows/i18n.yml @@ -0,0 +1,126 @@ +name: 'Auto-translate Documentation' + +on: + push: + branches: [ main ] + paths: + - 'apps/docs/content/docs/en/**' + - 'apps/docs/i18n.json' + pull_request: + branches: [ main ] + paths: + - 'apps/docs/content/docs/en/**' + - 'apps/docs/i18n.json' + workflow_dispatch: # Allow manual triggers + +jobs: + translate: + runs-on: ubuntu-latest + if: github.actor != 'github-actions[bot]' # Prevent infinite loops + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + + - name: Run Lingo.dev translations + env: + LINGODOTDEV_API_KEY: ${{ secrets.LINGODOTDEV_API_KEY }} + run: | + cd apps/docs + bunx lingo.dev@latest i18n + + - name: Check for translation changes + id: changes + run: | + cd apps/docs + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + + if [ -n "$(git status --porcelain content/docs)" ]; then + echo "changes=true" >> $GITHUB_OUTPUT + else + echo "changes=false" >> $GITHUB_OUTPUT + fi + + - name: Commit and push translation updates + if: steps.changes.outputs.changes == 'true' + run: | + cd apps/docs + git add content/docs/es/ content/docs/fr/ content/docs/zh/ i18n.lock + git commit -m "feat: update translations" + git push origin ${{ github.ref_name }} + + - name: Create Pull Request (for feature branches) + if: steps.changes.outputs.changes == 'true' && github.event_name == 'pull_request' + uses: peter-evans/create-pull-request@v5 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "feat: update translations" + title: "🌐 Auto-update translations" + body: | + ## Summary + Automated translation updates for documentation. + + - Updated translations for modified English content + - Generated using Lingo.dev AI translation + - Maintains consistency with source documentation + + ## Test Plan + - [ ] Verify translated content accuracy + - [ ] Check that all links and references work correctly + - [ ] Ensure formatting and structure are preserved + branch: auto-translations + base: ${{ github.base_ref }} + labels: | + i18n + auto-generated + + verify-translations: + needs: translate + runs-on: ubuntu-latest + if: always() # Run even if translation fails + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + + - name: Install dependencies + run: | + cd apps/docs + bun install + + - name: Build documentation to verify translations + run: | + cd apps/docs + bun run build + + - name: Report translation status + run: | + cd apps/docs + echo "## Translation Status Report" >> $GITHUB_STEP_SUMMARY + + en_count=$(find content/docs/en -name "*.mdx" | wc -l) + es_count=$(find content/docs/es -name "*.mdx" 2>/dev/null | wc -l || echo 0) + fr_count=$(find content/docs/fr -name "*.mdx" 2>/dev/null | wc -l || echo 0) + zh_count=$(find content/docs/zh -name "*.mdx" 2>/dev/null | wc -l || echo 0) + + es_percentage=$((es_count * 100 / en_count)) + fr_percentage=$((fr_count * 100 / en_count)) + zh_percentage=$((zh_count * 100 / en_count)) + + echo "- **🇪🇸 Spanish**: $es_count/$en_count files ($es_percentage%)" >> $GITHUB_STEP_SUMMARY + echo "- **🇫🇷 French**: $fr_count/$en_count files ($fr_percentage%)" >> $GITHUB_STEP_SUMMARY + echo "- **🇨🇳 Chinese**: $zh_count/$en_count files ($zh_percentage%)" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.gitignore b/.gitignore index d486100979..a6ec4da9ac 100644 --- a/.gitignore +++ b/.gitignore @@ -68,4 +68,5 @@ start-collector.sh .vscode ## Helm Chart Tests -helm/sim/test \ No newline at end of file +helm/sim/test +i18n.cache diff --git a/apps/docs/app/(docs)/[[...slug]]/layout.tsx b/apps/docs/app/(docs)/[[...slug]]/layout.tsx deleted file mode 100644 index 257c2d8c27..0000000000 --- a/apps/docs/app/(docs)/[[...slug]]/layout.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import type { ReactNode } from 'react' - -export default function SlugLayout({ children }: { children: ReactNode }) { - return children -} diff --git a/apps/docs/app/(docs)/[[...slug]]/page.tsx b/apps/docs/app/(docs)/[[...slug]]/page.tsx deleted file mode 100644 index 5af882aa90..0000000000 --- a/apps/docs/app/(docs)/[[...slug]]/page.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import defaultMdxComponents from 'fumadocs-ui/mdx' -import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page' -import { notFound } from 'next/navigation' -import { source } from '@/lib/source' - -export const dynamic = 'force-dynamic' - -export default async function Page(props: { params: Promise<{ slug?: string[] }> }) { - const params = await props.params - const page = source.getPage(params.slug) - if (!page) notFound() - - const MDX = page.data.body - - return ( - On this page, - single: false, - }} - article={{ - className: 'scroll-smooth max-sm:pb-16', - }} - tableOfContentPopover={{ - style: 'clerk', - enabled: true, - }} - footer={{ - enabled: false, - }} - > - {page.data.title} - {page.data.description} - - - - - ) -} - -export async function generateStaticParams() { - return source.generateParams() -} - -export async function generateMetadata(props: { params: Promise<{ slug?: string[] }> }) { - const params = await props.params - const page = source.getPage(params.slug) - if (!page) notFound() - - return { - title: page.data.title, - description: page.data.description, - } -} diff --git a/apps/docs/app/(docs)/layout.tsx b/apps/docs/app/(docs)/layout.tsx deleted file mode 100644 index 18bf0fac61..0000000000 --- a/apps/docs/app/(docs)/layout.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import type { ReactNode } from 'react' -import { DocsLayout } from 'fumadocs-ui/layouts/docs' -import { ExternalLink, GithubIcon } from 'lucide-react' -import Image from 'next/image' -import Link from 'next/link' -import { source } from '@/lib/source' - -const GitHubLink = () => ( -
- - - -
-) - -export default function Layout({ children }: { children: ReactNode }) { - return ( - <> - - Sim - - ), - }} - links={[ - { - text: 'Visit Sim', - url: 'https://sim.ai', - icon: , - }, - ]} - sidebar={{ - defaultOpenLevel: 0, - collapsible: true, - footer: null, - banner: null, - }} - > - {children} - - - - ) -} diff --git a/apps/docs/app/[lang]/[[...slug]]/page.tsx b/apps/docs/app/[lang]/[[...slug]]/page.tsx new file mode 100644 index 0000000000..ed893ebc88 --- /dev/null +++ b/apps/docs/app/[lang]/[[...slug]]/page.tsx @@ -0,0 +1,98 @@ +import { findNeighbour } from 'fumadocs-core/server' +import defaultMdxComponents from 'fumadocs-ui/mdx' +import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page' +import { ChevronLeft, ChevronRight } from 'lucide-react' +import Link from 'next/link' +import { notFound } from 'next/navigation' +import { source } from '@/lib/source' + +export const dynamic = 'force-dynamic' + +export default async function Page(props: { params: Promise<{ slug?: string[]; lang: string }> }) { + const params = await props.params + const page = source.getPage(params.slug, params.lang) + if (!page) notFound() + + const MDX = page.data.body + + // Handle both i18n and non-i18n structures + const pageTreeRecord = source.pageTree as Record + const pageTree = + pageTreeRecord[params.lang] ?? pageTreeRecord.en ?? Object.values(pageTreeRecord)[0] + const neighbours = pageTree ? findNeighbour(pageTree, page.url) : null + + const CustomFooter = () => ( +
+ {neighbours?.previous ? ( + + + {neighbours.previous.name} + + ) : ( +
+ )} + + {neighbours?.next ? ( + + {neighbours.next.name} + + + ) : ( +
+ )} +
+ ) + + return ( + On this page
, + single: false, + }} + article={{ + className: 'scroll-smooth max-sm:pb-16', + }} + tableOfContentPopover={{ + style: 'clerk', + enabled: true, + }} + footer={{ + enabled: true, + component: , + }} + > + {page.data.title} + {page.data.description} + + + + + ) +} + +export async function generateStaticParams() { + return source.generateParams() +} + +export async function generateMetadata(props: { + params: Promise<{ slug?: string[]; lang: string }> +}) { + const params = await props.params + const page = source.getPage(params.slug, params.lang) + if (!page) notFound() + + return { + title: page.data.title, + description: page.data.description, + } +} diff --git a/apps/docs/app/[lang]/layout.tsx b/apps/docs/app/[lang]/layout.tsx new file mode 100644 index 0000000000..dc071493f3 --- /dev/null +++ b/apps/docs/app/[lang]/layout.tsx @@ -0,0 +1,99 @@ +import type { ReactNode } from 'react' +import { defineI18nUI } from 'fumadocs-ui/i18n' +import { DocsLayout } from 'fumadocs-ui/layouts/docs' +import { RootProvider } from 'fumadocs-ui/provider' +import { ExternalLink, GithubIcon } from 'lucide-react' +import { Inter } from 'next/font/google' +import Image from 'next/image' +import Link from 'next/link' +import { LanguageDropdown } from '@/components/ui/language-dropdown' +import { i18n } from '@/lib/i18n' +import { source } from '@/lib/source' +import '../global.css' +import { Analytics } from '@vercel/analytics/next' + +const inter = Inter({ + subsets: ['latin'], +}) + +const { provider } = defineI18nUI(i18n, { + translations: { + en: { + displayName: 'English', + }, + es: { + displayName: 'Español', + }, + fr: { + displayName: 'Français', + }, + zh: { + displayName: '简体中文', + }, + }, +}) + +const GitHubLink = () => ( +
+ + + +
+) + +type LayoutProps = { + children: ReactNode + params: Promise<{ lang: string }> +} + +export default async function Layout({ children, params }: LayoutProps) { + const { lang } = await params + + return ( + + + + + Sim + +
+ ), + }} + links={[ + { + text: 'Visit Sim', + url: 'https://sim.ai', + icon: , + }, + ]} + sidebar={{ + defaultOpenLevel: 0, + collapsible: true, + footer: null, + banner: null, + }} + > + {children} + + + + + + + ) +} diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx index beb280c968..58124af10a 100644 --- a/apps/docs/app/layout.tsx +++ b/apps/docs/app/layout.tsx @@ -1,24 +1,7 @@ import type { ReactNode } from 'react' -import { RootProvider } from 'fumadocs-ui/provider' -import { Inter } from 'next/font/google' -import './global.css' -import { Analytics } from '@vercel/analytics/next' -const inter = Inter({ - subsets: ['latin'], -}) - -export default function Layout({ children }: { children: ReactNode }) { - return ( - - - - {children} - - - - - ) +export default function RootLayout({ children }: { children: ReactNode }) { + return children } export const metadata = { diff --git a/apps/docs/components/ui/language-dropdown.tsx b/apps/docs/components/ui/language-dropdown.tsx new file mode 100644 index 0000000000..facfdd48d2 --- /dev/null +++ b/apps/docs/components/ui/language-dropdown.tsx @@ -0,0 +1,125 @@ +'use client' + +import { useEffect, useState } from 'react' +import { Check, ChevronDown } from 'lucide-react' +import { useParams, usePathname, useRouter } from 'next/navigation' + +const languages = { + en: { name: 'English', flag: '🇺🇸' }, + es: { name: 'Español', flag: '🇪🇸' }, + fr: { name: 'Français', flag: '🇫🇷' }, + zh: { name: '简体中文', flag: '🇨🇳' }, +} + +export function LanguageDropdown() { + const [isOpen, setIsOpen] = useState(false) + const router = useRouter() + const pathname = usePathname() + const params = useParams() + const [currentLang, setCurrentLang] = useState('en') + + // Detect current language from params or URL + useEffect(() => { + // First try to get language from params (Next.js route params) + const langFromParams = params?.lang as string + + if (langFromParams && Object.keys(languages).includes(langFromParams)) { + if (langFromParams !== currentLang) { + setCurrentLang(langFromParams) + } + return + } + + // Fallback to pathname parsing + const segments = pathname.split('/').filter(Boolean) + const firstSegment = segments[0] + + if (firstSegment && Object.keys(languages).includes(firstSegment)) { + if (firstSegment !== currentLang) { + setCurrentLang(firstSegment) + } + } else { + if (currentLang !== 'en') { + setCurrentLang('en') // Default to English + } + } + }, [pathname, params, currentLang]) + + const handleLanguageChange = (locale: string) => { + if (locale === currentLang) { + setIsOpen(false) + return // Don't navigate if same language + } + + setIsOpen(false) + + // Get the current route without language prefix + const segments = pathname.split('/').filter(Boolean) + + // Remove current locale from path if present + if (segments[0] && Object.keys(languages).includes(segments[0])) { + segments.shift() // Remove first segment (current locale) + } + + // Build new path with new locale + let newPath = '' + if (locale === 'en') { + // For default locale (English), no prefix + newPath = segments.length > 0 ? `/${segments.join('/')}` : '/introduction' + } else { + // For non-default locales, add prefix + newPath = `/${locale}${segments.length > 0 ? `/${segments.join('/')}` : '/introduction'}` + } + + // Force a hard navigation to ensure the middleware processes it + window.location.href = newPath + } + + return ( +
+ + + {isOpen && ( + <> +
setIsOpen(false)} /> +
+ {Object.entries(languages).map(([code, lang]) => ( + + ))} +
+ + )} +
+ ) +} diff --git a/apps/docs/content/docs/blocks/meta.json b/apps/docs/content/docs/blocks/meta.json deleted file mode 100644 index 511620d6a9..0000000000 --- a/apps/docs/content/docs/blocks/meta.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "title": "Blocks", - "pages": [ - "agent", - "api", - "condition", - "evaluator", - "function", - "loop", - "parallel", - "response", - "router", - "workflow" - ], - "defaultOpen": false -} diff --git a/apps/docs/content/docs/connections/meta.json b/apps/docs/content/docs/connections/meta.json deleted file mode 100644 index b86970f3e1..0000000000 --- a/apps/docs/content/docs/connections/meta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "title": "Connections", - "pages": ["basics", "tags", "data-structure"], - "defaultOpen": false -} diff --git a/apps/docs/content/docs/copilot/meta.json b/apps/docs/content/docs/copilot/meta.json deleted file mode 100644 index e87b1b27be..0000000000 --- a/apps/docs/content/docs/copilot/meta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "title": "Copilot", - "pages": ["index"], - "defaultOpen": false -} diff --git a/apps/docs/content/docs/blocks/agent.mdx b/apps/docs/content/docs/en/blocks/agent.mdx similarity index 100% rename from apps/docs/content/docs/blocks/agent.mdx rename to apps/docs/content/docs/en/blocks/agent.mdx diff --git a/apps/docs/content/docs/blocks/api.mdx b/apps/docs/content/docs/en/blocks/api.mdx similarity index 100% rename from apps/docs/content/docs/blocks/api.mdx rename to apps/docs/content/docs/en/blocks/api.mdx diff --git a/apps/docs/content/docs/blocks/condition.mdx b/apps/docs/content/docs/en/blocks/condition.mdx similarity index 100% rename from apps/docs/content/docs/blocks/condition.mdx rename to apps/docs/content/docs/en/blocks/condition.mdx diff --git a/apps/docs/content/docs/blocks/evaluator.mdx b/apps/docs/content/docs/en/blocks/evaluator.mdx similarity index 100% rename from apps/docs/content/docs/blocks/evaluator.mdx rename to apps/docs/content/docs/en/blocks/evaluator.mdx diff --git a/apps/docs/content/docs/blocks/function.mdx b/apps/docs/content/docs/en/blocks/function.mdx similarity index 100% rename from apps/docs/content/docs/blocks/function.mdx rename to apps/docs/content/docs/en/blocks/function.mdx diff --git a/apps/docs/content/docs/blocks/index.mdx b/apps/docs/content/docs/en/blocks/index.mdx similarity index 100% rename from apps/docs/content/docs/blocks/index.mdx rename to apps/docs/content/docs/en/blocks/index.mdx diff --git a/apps/docs/content/docs/blocks/loop.mdx b/apps/docs/content/docs/en/blocks/loop.mdx similarity index 100% rename from apps/docs/content/docs/blocks/loop.mdx rename to apps/docs/content/docs/en/blocks/loop.mdx diff --git a/apps/docs/content/docs/blocks/parallel.mdx b/apps/docs/content/docs/en/blocks/parallel.mdx similarity index 100% rename from apps/docs/content/docs/blocks/parallel.mdx rename to apps/docs/content/docs/en/blocks/parallel.mdx diff --git a/apps/docs/content/docs/blocks/response.mdx b/apps/docs/content/docs/en/blocks/response.mdx similarity index 100% rename from apps/docs/content/docs/blocks/response.mdx rename to apps/docs/content/docs/en/blocks/response.mdx diff --git a/apps/docs/content/docs/blocks/router.mdx b/apps/docs/content/docs/en/blocks/router.mdx similarity index 100% rename from apps/docs/content/docs/blocks/router.mdx rename to apps/docs/content/docs/en/blocks/router.mdx diff --git a/apps/docs/content/docs/blocks/workflow.mdx b/apps/docs/content/docs/en/blocks/workflow.mdx similarity index 100% rename from apps/docs/content/docs/blocks/workflow.mdx rename to apps/docs/content/docs/en/blocks/workflow.mdx diff --git a/apps/docs/content/docs/connections/basics.mdx b/apps/docs/content/docs/en/connections/basics.mdx similarity index 100% rename from apps/docs/content/docs/connections/basics.mdx rename to apps/docs/content/docs/en/connections/basics.mdx diff --git a/apps/docs/content/docs/connections/data-structure.mdx b/apps/docs/content/docs/en/connections/data-structure.mdx similarity index 100% rename from apps/docs/content/docs/connections/data-structure.mdx rename to apps/docs/content/docs/en/connections/data-structure.mdx diff --git a/apps/docs/content/docs/connections/index.mdx b/apps/docs/content/docs/en/connections/index.mdx similarity index 100% rename from apps/docs/content/docs/connections/index.mdx rename to apps/docs/content/docs/en/connections/index.mdx diff --git a/apps/docs/content/docs/connections/tags.mdx b/apps/docs/content/docs/en/connections/tags.mdx similarity index 100% rename from apps/docs/content/docs/connections/tags.mdx rename to apps/docs/content/docs/en/connections/tags.mdx diff --git a/apps/docs/content/docs/copilot/index.mdx b/apps/docs/content/docs/en/copilot/index.mdx similarity index 100% rename from apps/docs/content/docs/copilot/index.mdx rename to apps/docs/content/docs/en/copilot/index.mdx diff --git a/apps/docs/content/docs/execution/api.mdx b/apps/docs/content/docs/en/execution/api.mdx similarity index 100% rename from apps/docs/content/docs/execution/api.mdx rename to apps/docs/content/docs/en/execution/api.mdx diff --git a/apps/docs/content/docs/execution/basics.mdx b/apps/docs/content/docs/en/execution/basics.mdx similarity index 100% rename from apps/docs/content/docs/execution/basics.mdx rename to apps/docs/content/docs/en/execution/basics.mdx diff --git a/apps/docs/content/docs/execution/costs.mdx b/apps/docs/content/docs/en/execution/costs.mdx similarity index 100% rename from apps/docs/content/docs/execution/costs.mdx rename to apps/docs/content/docs/en/execution/costs.mdx diff --git a/apps/docs/content/docs/execution/index.mdx b/apps/docs/content/docs/en/execution/index.mdx similarity index 100% rename from apps/docs/content/docs/execution/index.mdx rename to apps/docs/content/docs/en/execution/index.mdx diff --git a/apps/docs/content/docs/execution/logging.mdx b/apps/docs/content/docs/en/execution/logging.mdx similarity index 100% rename from apps/docs/content/docs/execution/logging.mdx rename to apps/docs/content/docs/en/execution/logging.mdx diff --git a/apps/docs/content/docs/getting-started/index.mdx b/apps/docs/content/docs/en/getting-started/index.mdx similarity index 100% rename from apps/docs/content/docs/getting-started/index.mdx rename to apps/docs/content/docs/en/getting-started/index.mdx diff --git a/apps/docs/content/docs/en/index.mdx b/apps/docs/content/docs/en/index.mdx new file mode 100644 index 0000000000..e3bcf6045a --- /dev/null +++ b/apps/docs/content/docs/en/index.mdx @@ -0,0 +1,60 @@ +--- +title: Documentation +--- + +import { Card, Cards } from 'fumadocs-ui/components/card' + +# Sim Documentation + +Welcome to Sim, a visual workflow builder for AI applications. Build powerful AI agents, automation workflows, and data processing pipelines by connecting blocks on a canvas. + +## Quick Start + + + + Learn what you can build with Sim + + + Create your first workflow in 10 minutes + + + Learn about the building blocks + + + Explore 80+ built-in integrations + + + +## Core Concepts + + + + Understand how data flows between blocks + + + Work with workflow and environment variables + + + Monitor workflow runs and manage costs + + + Start workflows via API, webhooks, or schedules + + + +## Advanced Features + + + + Set up workspace roles and permissions + + + Define workflows as code + + + Connect external services with Model Context Protocol + + + Integrate Sim into your applications + + \ No newline at end of file diff --git a/apps/docs/content/docs/introduction/index.mdx b/apps/docs/content/docs/en/introduction/index.mdx similarity index 92% rename from apps/docs/content/docs/introduction/index.mdx rename to apps/docs/content/docs/en/introduction/index.mdx index 36b8f9934f..c1d776f053 100644 --- a/apps/docs/content/docs/introduction/index.mdx +++ b/apps/docs/content/docs/en/introduction/index.mdx @@ -70,16 +70,16 @@ Need something custom? Use our [MCP integration](/mcp) to connect any external s Ready to build your first AI workflow? - + Create your first workflow in 10 minutes - + Learn about the building blocks - + Explore 60+ built-in integrations - + Set up workspace roles and permissions diff --git a/apps/docs/content/docs/knowledgebase/index.mdx b/apps/docs/content/docs/en/knowledgebase/index.mdx similarity index 95% rename from apps/docs/content/docs/knowledgebase/index.mdx rename to apps/docs/content/docs/en/knowledgebase/index.mdx index 824667a9b4..281d0efa3b 100644 --- a/apps/docs/content/docs/knowledgebase/index.mdx +++ b/apps/docs/content/docs/en/knowledgebase/index.mdx @@ -30,7 +30,7 @@ Sim supports PDF, Word (DOC/DOCX), plain text (TXT), Markdown (MD), HTML, Excel Once your documents are processed, you can view and edit the individual chunks. This gives you full control over how your content is organized and searched. -Document chunks view showing processed content +Document chunks view showing processed content ### Chunk Configuration - **Default chunk size**: 1,024 characters @@ -58,7 +58,7 @@ When configured with Azure or [Mistral OCR](https://docs.mistral.ai/ocr/): Once your documents are processed, you can use them in your AI workflows through the Knowledge block. This enables Retrieval-Augmented Generation (RAG), allowing your AI agents to access and reason over your document content to provide more accurate, contextual responses. -Using Knowledge Block in Workflows +Using Knowledge Block in Workflows ### Knowledge Block Features - **Semantic search**: Find relevant content using natural language queries diff --git a/apps/docs/content/docs/knowledgebase/tags.mdx b/apps/docs/content/docs/en/knowledgebase/tags.mdx similarity index 100% rename from apps/docs/content/docs/knowledgebase/tags.mdx rename to apps/docs/content/docs/en/knowledgebase/tags.mdx diff --git a/apps/docs/content/docs/mcp/index.mdx b/apps/docs/content/docs/en/mcp/index.mdx similarity index 100% rename from apps/docs/content/docs/mcp/index.mdx rename to apps/docs/content/docs/en/mcp/index.mdx diff --git a/apps/docs/content/docs/meta.json b/apps/docs/content/docs/en/meta.json similarity index 100% rename from apps/docs/content/docs/meta.json rename to apps/docs/content/docs/en/meta.json diff --git a/apps/docs/content/docs/permissions/roles-and-permissions.mdx b/apps/docs/content/docs/en/permissions/roles-and-permissions.mdx similarity index 100% rename from apps/docs/content/docs/permissions/roles-and-permissions.mdx rename to apps/docs/content/docs/en/permissions/roles-and-permissions.mdx diff --git a/apps/docs/content/docs/sdks/python.mdx b/apps/docs/content/docs/en/sdks/python.mdx similarity index 100% rename from apps/docs/content/docs/sdks/python.mdx rename to apps/docs/content/docs/en/sdks/python.mdx diff --git a/apps/docs/content/docs/sdks/typescript.mdx b/apps/docs/content/docs/en/sdks/typescript.mdx similarity index 100% rename from apps/docs/content/docs/sdks/typescript.mdx rename to apps/docs/content/docs/en/sdks/typescript.mdx diff --git a/apps/docs/content/docs/tools/airtable.mdx b/apps/docs/content/docs/en/tools/airtable.mdx similarity index 100% rename from apps/docs/content/docs/tools/airtable.mdx rename to apps/docs/content/docs/en/tools/airtable.mdx diff --git a/apps/docs/content/docs/tools/arxiv.mdx b/apps/docs/content/docs/en/tools/arxiv.mdx similarity index 100% rename from apps/docs/content/docs/tools/arxiv.mdx rename to apps/docs/content/docs/en/tools/arxiv.mdx diff --git a/apps/docs/content/docs/tools/browser_use.mdx b/apps/docs/content/docs/en/tools/browser_use.mdx similarity index 100% rename from apps/docs/content/docs/tools/browser_use.mdx rename to apps/docs/content/docs/en/tools/browser_use.mdx diff --git a/apps/docs/content/docs/tools/clay.mdx b/apps/docs/content/docs/en/tools/clay.mdx similarity index 100% rename from apps/docs/content/docs/tools/clay.mdx rename to apps/docs/content/docs/en/tools/clay.mdx diff --git a/apps/docs/content/docs/tools/confluence.mdx b/apps/docs/content/docs/en/tools/confluence.mdx similarity index 100% rename from apps/docs/content/docs/tools/confluence.mdx rename to apps/docs/content/docs/en/tools/confluence.mdx diff --git a/apps/docs/content/docs/tools/discord.mdx b/apps/docs/content/docs/en/tools/discord.mdx similarity index 100% rename from apps/docs/content/docs/tools/discord.mdx rename to apps/docs/content/docs/en/tools/discord.mdx diff --git a/apps/docs/content/docs/tools/elevenlabs.mdx b/apps/docs/content/docs/en/tools/elevenlabs.mdx similarity index 100% rename from apps/docs/content/docs/tools/elevenlabs.mdx rename to apps/docs/content/docs/en/tools/elevenlabs.mdx diff --git a/apps/docs/content/docs/tools/exa.mdx b/apps/docs/content/docs/en/tools/exa.mdx similarity index 100% rename from apps/docs/content/docs/tools/exa.mdx rename to apps/docs/content/docs/en/tools/exa.mdx diff --git a/apps/docs/content/docs/tools/file.mdx b/apps/docs/content/docs/en/tools/file.mdx similarity index 100% rename from apps/docs/content/docs/tools/file.mdx rename to apps/docs/content/docs/en/tools/file.mdx diff --git a/apps/docs/content/docs/tools/firecrawl.mdx b/apps/docs/content/docs/en/tools/firecrawl.mdx similarity index 100% rename from apps/docs/content/docs/tools/firecrawl.mdx rename to apps/docs/content/docs/en/tools/firecrawl.mdx diff --git a/apps/docs/content/docs/tools/generic_webhook.mdx b/apps/docs/content/docs/en/tools/generic_webhook.mdx similarity index 100% rename from apps/docs/content/docs/tools/generic_webhook.mdx rename to apps/docs/content/docs/en/tools/generic_webhook.mdx diff --git a/apps/docs/content/docs/tools/github.mdx b/apps/docs/content/docs/en/tools/github.mdx similarity index 100% rename from apps/docs/content/docs/tools/github.mdx rename to apps/docs/content/docs/en/tools/github.mdx diff --git a/apps/docs/content/docs/tools/gmail.mdx b/apps/docs/content/docs/en/tools/gmail.mdx similarity index 100% rename from apps/docs/content/docs/tools/gmail.mdx rename to apps/docs/content/docs/en/tools/gmail.mdx diff --git a/apps/docs/content/docs/tools/google_calendar.mdx b/apps/docs/content/docs/en/tools/google_calendar.mdx similarity index 100% rename from apps/docs/content/docs/tools/google_calendar.mdx rename to apps/docs/content/docs/en/tools/google_calendar.mdx diff --git a/apps/docs/content/docs/tools/google_docs.mdx b/apps/docs/content/docs/en/tools/google_docs.mdx similarity index 100% rename from apps/docs/content/docs/tools/google_docs.mdx rename to apps/docs/content/docs/en/tools/google_docs.mdx diff --git a/apps/docs/content/docs/tools/google_drive.mdx b/apps/docs/content/docs/en/tools/google_drive.mdx similarity index 100% rename from apps/docs/content/docs/tools/google_drive.mdx rename to apps/docs/content/docs/en/tools/google_drive.mdx diff --git a/apps/docs/content/docs/tools/google_search.mdx b/apps/docs/content/docs/en/tools/google_search.mdx similarity index 100% rename from apps/docs/content/docs/tools/google_search.mdx rename to apps/docs/content/docs/en/tools/google_search.mdx diff --git a/apps/docs/content/docs/tools/google_sheets.mdx b/apps/docs/content/docs/en/tools/google_sheets.mdx similarity index 100% rename from apps/docs/content/docs/tools/google_sheets.mdx rename to apps/docs/content/docs/en/tools/google_sheets.mdx diff --git a/apps/docs/content/docs/tools/huggingface.mdx b/apps/docs/content/docs/en/tools/huggingface.mdx similarity index 100% rename from apps/docs/content/docs/tools/huggingface.mdx rename to apps/docs/content/docs/en/tools/huggingface.mdx diff --git a/apps/docs/content/docs/tools/hunter.mdx b/apps/docs/content/docs/en/tools/hunter.mdx similarity index 100% rename from apps/docs/content/docs/tools/hunter.mdx rename to apps/docs/content/docs/en/tools/hunter.mdx diff --git a/apps/docs/content/docs/tools/image_generator.mdx b/apps/docs/content/docs/en/tools/image_generator.mdx similarity index 100% rename from apps/docs/content/docs/tools/image_generator.mdx rename to apps/docs/content/docs/en/tools/image_generator.mdx diff --git a/apps/docs/content/docs/tools/index.mdx b/apps/docs/content/docs/en/tools/index.mdx similarity index 100% rename from apps/docs/content/docs/tools/index.mdx rename to apps/docs/content/docs/en/tools/index.mdx diff --git a/apps/docs/content/docs/tools/jina.mdx b/apps/docs/content/docs/en/tools/jina.mdx similarity index 100% rename from apps/docs/content/docs/tools/jina.mdx rename to apps/docs/content/docs/en/tools/jina.mdx diff --git a/apps/docs/content/docs/tools/jira.mdx b/apps/docs/content/docs/en/tools/jira.mdx similarity index 100% rename from apps/docs/content/docs/tools/jira.mdx rename to apps/docs/content/docs/en/tools/jira.mdx diff --git a/apps/docs/content/docs/tools/knowledge.mdx b/apps/docs/content/docs/en/tools/knowledge.mdx similarity index 100% rename from apps/docs/content/docs/tools/knowledge.mdx rename to apps/docs/content/docs/en/tools/knowledge.mdx diff --git a/apps/docs/content/docs/tools/linear.mdx b/apps/docs/content/docs/en/tools/linear.mdx similarity index 100% rename from apps/docs/content/docs/tools/linear.mdx rename to apps/docs/content/docs/en/tools/linear.mdx diff --git a/apps/docs/content/docs/tools/linkup.mdx b/apps/docs/content/docs/en/tools/linkup.mdx similarity index 100% rename from apps/docs/content/docs/tools/linkup.mdx rename to apps/docs/content/docs/en/tools/linkup.mdx diff --git a/apps/docs/content/docs/tools/mem0.mdx b/apps/docs/content/docs/en/tools/mem0.mdx similarity index 100% rename from apps/docs/content/docs/tools/mem0.mdx rename to apps/docs/content/docs/en/tools/mem0.mdx diff --git a/apps/docs/content/docs/tools/memory.mdx b/apps/docs/content/docs/en/tools/memory.mdx similarity index 100% rename from apps/docs/content/docs/tools/memory.mdx rename to apps/docs/content/docs/en/tools/memory.mdx diff --git a/apps/docs/content/docs/tools/microsoft_excel.mdx b/apps/docs/content/docs/en/tools/microsoft_excel.mdx similarity index 100% rename from apps/docs/content/docs/tools/microsoft_excel.mdx rename to apps/docs/content/docs/en/tools/microsoft_excel.mdx diff --git a/apps/docs/content/docs/tools/microsoft_planner.mdx b/apps/docs/content/docs/en/tools/microsoft_planner.mdx similarity index 100% rename from apps/docs/content/docs/tools/microsoft_planner.mdx rename to apps/docs/content/docs/en/tools/microsoft_planner.mdx diff --git a/apps/docs/content/docs/tools/microsoft_teams.mdx b/apps/docs/content/docs/en/tools/microsoft_teams.mdx similarity index 100% rename from apps/docs/content/docs/tools/microsoft_teams.mdx rename to apps/docs/content/docs/en/tools/microsoft_teams.mdx diff --git a/apps/docs/content/docs/tools/mistral_parse.mdx b/apps/docs/content/docs/en/tools/mistral_parse.mdx similarity index 100% rename from apps/docs/content/docs/tools/mistral_parse.mdx rename to apps/docs/content/docs/en/tools/mistral_parse.mdx diff --git a/apps/docs/content/docs/tools/mongodb.mdx b/apps/docs/content/docs/en/tools/mongodb.mdx similarity index 100% rename from apps/docs/content/docs/tools/mongodb.mdx rename to apps/docs/content/docs/en/tools/mongodb.mdx diff --git a/apps/docs/content/docs/tools/mysql.mdx b/apps/docs/content/docs/en/tools/mysql.mdx similarity index 100% rename from apps/docs/content/docs/tools/mysql.mdx rename to apps/docs/content/docs/en/tools/mysql.mdx diff --git a/apps/docs/content/docs/tools/notion.mdx b/apps/docs/content/docs/en/tools/notion.mdx similarity index 100% rename from apps/docs/content/docs/tools/notion.mdx rename to apps/docs/content/docs/en/tools/notion.mdx diff --git a/apps/docs/content/docs/tools/onedrive.mdx b/apps/docs/content/docs/en/tools/onedrive.mdx similarity index 100% rename from apps/docs/content/docs/tools/onedrive.mdx rename to apps/docs/content/docs/en/tools/onedrive.mdx diff --git a/apps/docs/content/docs/tools/openai.mdx b/apps/docs/content/docs/en/tools/openai.mdx similarity index 100% rename from apps/docs/content/docs/tools/openai.mdx rename to apps/docs/content/docs/en/tools/openai.mdx diff --git a/apps/docs/content/docs/tools/outlook.mdx b/apps/docs/content/docs/en/tools/outlook.mdx similarity index 100% rename from apps/docs/content/docs/tools/outlook.mdx rename to apps/docs/content/docs/en/tools/outlook.mdx diff --git a/apps/docs/content/docs/tools/parallel_ai.mdx b/apps/docs/content/docs/en/tools/parallel_ai.mdx similarity index 100% rename from apps/docs/content/docs/tools/parallel_ai.mdx rename to apps/docs/content/docs/en/tools/parallel_ai.mdx diff --git a/apps/docs/content/docs/tools/perplexity.mdx b/apps/docs/content/docs/en/tools/perplexity.mdx similarity index 100% rename from apps/docs/content/docs/tools/perplexity.mdx rename to apps/docs/content/docs/en/tools/perplexity.mdx diff --git a/apps/docs/content/docs/tools/pinecone.mdx b/apps/docs/content/docs/en/tools/pinecone.mdx similarity index 100% rename from apps/docs/content/docs/tools/pinecone.mdx rename to apps/docs/content/docs/en/tools/pinecone.mdx diff --git a/apps/docs/content/docs/tools/postgresql.mdx b/apps/docs/content/docs/en/tools/postgresql.mdx similarity index 100% rename from apps/docs/content/docs/tools/postgresql.mdx rename to apps/docs/content/docs/en/tools/postgresql.mdx diff --git a/apps/docs/content/docs/tools/qdrant.mdx b/apps/docs/content/docs/en/tools/qdrant.mdx similarity index 100% rename from apps/docs/content/docs/tools/qdrant.mdx rename to apps/docs/content/docs/en/tools/qdrant.mdx diff --git a/apps/docs/content/docs/tools/reddit.mdx b/apps/docs/content/docs/en/tools/reddit.mdx similarity index 100% rename from apps/docs/content/docs/tools/reddit.mdx rename to apps/docs/content/docs/en/tools/reddit.mdx diff --git a/apps/docs/content/docs/tools/s3.mdx b/apps/docs/content/docs/en/tools/s3.mdx similarity index 100% rename from apps/docs/content/docs/tools/s3.mdx rename to apps/docs/content/docs/en/tools/s3.mdx diff --git a/apps/docs/content/docs/tools/schedule.mdx b/apps/docs/content/docs/en/tools/schedule.mdx similarity index 100% rename from apps/docs/content/docs/tools/schedule.mdx rename to apps/docs/content/docs/en/tools/schedule.mdx diff --git a/apps/docs/content/docs/tools/serper.mdx b/apps/docs/content/docs/en/tools/serper.mdx similarity index 100% rename from apps/docs/content/docs/tools/serper.mdx rename to apps/docs/content/docs/en/tools/serper.mdx diff --git a/apps/docs/content/docs/tools/sharepoint.mdx b/apps/docs/content/docs/en/tools/sharepoint.mdx similarity index 100% rename from apps/docs/content/docs/tools/sharepoint.mdx rename to apps/docs/content/docs/en/tools/sharepoint.mdx diff --git a/apps/docs/content/docs/tools/slack.mdx b/apps/docs/content/docs/en/tools/slack.mdx similarity index 100% rename from apps/docs/content/docs/tools/slack.mdx rename to apps/docs/content/docs/en/tools/slack.mdx diff --git a/apps/docs/content/docs/tools/stagehand.mdx b/apps/docs/content/docs/en/tools/stagehand.mdx similarity index 100% rename from apps/docs/content/docs/tools/stagehand.mdx rename to apps/docs/content/docs/en/tools/stagehand.mdx diff --git a/apps/docs/content/docs/tools/stagehand_agent.mdx b/apps/docs/content/docs/en/tools/stagehand_agent.mdx similarity index 100% rename from apps/docs/content/docs/tools/stagehand_agent.mdx rename to apps/docs/content/docs/en/tools/stagehand_agent.mdx diff --git a/apps/docs/content/docs/tools/supabase.mdx b/apps/docs/content/docs/en/tools/supabase.mdx similarity index 100% rename from apps/docs/content/docs/tools/supabase.mdx rename to apps/docs/content/docs/en/tools/supabase.mdx diff --git a/apps/docs/content/docs/tools/tavily.mdx b/apps/docs/content/docs/en/tools/tavily.mdx similarity index 100% rename from apps/docs/content/docs/tools/tavily.mdx rename to apps/docs/content/docs/en/tools/tavily.mdx diff --git a/apps/docs/content/docs/tools/telegram.mdx b/apps/docs/content/docs/en/tools/telegram.mdx similarity index 100% rename from apps/docs/content/docs/tools/telegram.mdx rename to apps/docs/content/docs/en/tools/telegram.mdx diff --git a/apps/docs/content/docs/tools/thinking.mdx b/apps/docs/content/docs/en/tools/thinking.mdx similarity index 100% rename from apps/docs/content/docs/tools/thinking.mdx rename to apps/docs/content/docs/en/tools/thinking.mdx diff --git a/apps/docs/content/docs/tools/translate.mdx b/apps/docs/content/docs/en/tools/translate.mdx similarity index 100% rename from apps/docs/content/docs/tools/translate.mdx rename to apps/docs/content/docs/en/tools/translate.mdx diff --git a/apps/docs/content/docs/tools/twilio_sms.mdx b/apps/docs/content/docs/en/tools/twilio_sms.mdx similarity index 100% rename from apps/docs/content/docs/tools/twilio_sms.mdx rename to apps/docs/content/docs/en/tools/twilio_sms.mdx diff --git a/apps/docs/content/docs/tools/typeform.mdx b/apps/docs/content/docs/en/tools/typeform.mdx similarity index 100% rename from apps/docs/content/docs/tools/typeform.mdx rename to apps/docs/content/docs/en/tools/typeform.mdx diff --git a/apps/docs/content/docs/tools/vision.mdx b/apps/docs/content/docs/en/tools/vision.mdx similarity index 100% rename from apps/docs/content/docs/tools/vision.mdx rename to apps/docs/content/docs/en/tools/vision.mdx diff --git a/apps/docs/content/docs/tools/wealthbox.mdx b/apps/docs/content/docs/en/tools/wealthbox.mdx similarity index 100% rename from apps/docs/content/docs/tools/wealthbox.mdx rename to apps/docs/content/docs/en/tools/wealthbox.mdx diff --git a/apps/docs/content/docs/tools/webhook.mdx b/apps/docs/content/docs/en/tools/webhook.mdx similarity index 100% rename from apps/docs/content/docs/tools/webhook.mdx rename to apps/docs/content/docs/en/tools/webhook.mdx diff --git a/apps/docs/content/docs/tools/whatsapp.mdx b/apps/docs/content/docs/en/tools/whatsapp.mdx similarity index 100% rename from apps/docs/content/docs/tools/whatsapp.mdx rename to apps/docs/content/docs/en/tools/whatsapp.mdx diff --git a/apps/docs/content/docs/tools/wikipedia.mdx b/apps/docs/content/docs/en/tools/wikipedia.mdx similarity index 100% rename from apps/docs/content/docs/tools/wikipedia.mdx rename to apps/docs/content/docs/en/tools/wikipedia.mdx diff --git a/apps/docs/content/docs/tools/x.mdx b/apps/docs/content/docs/en/tools/x.mdx similarity index 100% rename from apps/docs/content/docs/tools/x.mdx rename to apps/docs/content/docs/en/tools/x.mdx diff --git a/apps/docs/content/docs/tools/youtube.mdx b/apps/docs/content/docs/en/tools/youtube.mdx similarity index 100% rename from apps/docs/content/docs/tools/youtube.mdx rename to apps/docs/content/docs/en/tools/youtube.mdx diff --git a/apps/docs/content/docs/triggers/schedule.mdx b/apps/docs/content/docs/en/triggers/schedule.mdx similarity index 100% rename from apps/docs/content/docs/triggers/schedule.mdx rename to apps/docs/content/docs/en/triggers/schedule.mdx diff --git a/apps/docs/content/docs/triggers/starter.mdx b/apps/docs/content/docs/en/triggers/starter.mdx similarity index 100% rename from apps/docs/content/docs/triggers/starter.mdx rename to apps/docs/content/docs/en/triggers/starter.mdx diff --git a/apps/docs/content/docs/triggers/webhook.mdx b/apps/docs/content/docs/en/triggers/webhook.mdx similarity index 100% rename from apps/docs/content/docs/triggers/webhook.mdx rename to apps/docs/content/docs/en/triggers/webhook.mdx diff --git a/apps/docs/content/docs/variables/environment-variables.mdx b/apps/docs/content/docs/en/variables/environment-variables.mdx similarity index 100% rename from apps/docs/content/docs/variables/environment-variables.mdx rename to apps/docs/content/docs/en/variables/environment-variables.mdx diff --git a/apps/docs/content/docs/variables/workflow-variables.mdx b/apps/docs/content/docs/en/variables/workflow-variables.mdx similarity index 100% rename from apps/docs/content/docs/variables/workflow-variables.mdx rename to apps/docs/content/docs/en/variables/workflow-variables.mdx diff --git a/apps/docs/content/docs/yaml/block-reference.mdx b/apps/docs/content/docs/en/yaml/block-reference.mdx similarity index 100% rename from apps/docs/content/docs/yaml/block-reference.mdx rename to apps/docs/content/docs/en/yaml/block-reference.mdx diff --git a/apps/docs/content/docs/yaml/blocks/agent.mdx b/apps/docs/content/docs/en/yaml/blocks/agent.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/agent.mdx rename to apps/docs/content/docs/en/yaml/blocks/agent.mdx diff --git a/apps/docs/content/docs/yaml/blocks/api.mdx b/apps/docs/content/docs/en/yaml/blocks/api.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/api.mdx rename to apps/docs/content/docs/en/yaml/blocks/api.mdx diff --git a/apps/docs/content/docs/yaml/blocks/condition.mdx b/apps/docs/content/docs/en/yaml/blocks/condition.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/condition.mdx rename to apps/docs/content/docs/en/yaml/blocks/condition.mdx diff --git a/apps/docs/content/docs/yaml/blocks/evaluator.mdx b/apps/docs/content/docs/en/yaml/blocks/evaluator.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/evaluator.mdx rename to apps/docs/content/docs/en/yaml/blocks/evaluator.mdx diff --git a/apps/docs/content/docs/yaml/blocks/function.mdx b/apps/docs/content/docs/en/yaml/blocks/function.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/function.mdx rename to apps/docs/content/docs/en/yaml/blocks/function.mdx diff --git a/apps/docs/content/docs/yaml/blocks/index.mdx b/apps/docs/content/docs/en/yaml/blocks/index.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/index.mdx rename to apps/docs/content/docs/en/yaml/blocks/index.mdx diff --git a/apps/docs/content/docs/yaml/blocks/loop.mdx b/apps/docs/content/docs/en/yaml/blocks/loop.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/loop.mdx rename to apps/docs/content/docs/en/yaml/blocks/loop.mdx diff --git a/apps/docs/content/docs/yaml/blocks/parallel.mdx b/apps/docs/content/docs/en/yaml/blocks/parallel.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/parallel.mdx rename to apps/docs/content/docs/en/yaml/blocks/parallel.mdx diff --git a/apps/docs/content/docs/yaml/blocks/response.mdx b/apps/docs/content/docs/en/yaml/blocks/response.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/response.mdx rename to apps/docs/content/docs/en/yaml/blocks/response.mdx diff --git a/apps/docs/content/docs/yaml/blocks/router.mdx b/apps/docs/content/docs/en/yaml/blocks/router.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/router.mdx rename to apps/docs/content/docs/en/yaml/blocks/router.mdx diff --git a/apps/docs/content/docs/yaml/blocks/starter.mdx b/apps/docs/content/docs/en/yaml/blocks/starter.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/starter.mdx rename to apps/docs/content/docs/en/yaml/blocks/starter.mdx diff --git a/apps/docs/content/docs/yaml/blocks/webhook.mdx b/apps/docs/content/docs/en/yaml/blocks/webhook.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/webhook.mdx rename to apps/docs/content/docs/en/yaml/blocks/webhook.mdx diff --git a/apps/docs/content/docs/yaml/blocks/workflow.mdx b/apps/docs/content/docs/en/yaml/blocks/workflow.mdx similarity index 100% rename from apps/docs/content/docs/yaml/blocks/workflow.mdx rename to apps/docs/content/docs/en/yaml/blocks/workflow.mdx diff --git a/apps/docs/content/docs/yaml/examples.mdx b/apps/docs/content/docs/en/yaml/examples.mdx similarity index 100% rename from apps/docs/content/docs/yaml/examples.mdx rename to apps/docs/content/docs/en/yaml/examples.mdx diff --git a/apps/docs/content/docs/yaml/index.mdx b/apps/docs/content/docs/en/yaml/index.mdx similarity index 100% rename from apps/docs/content/docs/yaml/index.mdx rename to apps/docs/content/docs/en/yaml/index.mdx diff --git a/apps/docs/content/docs/es/blocks/agent.mdx b/apps/docs/content/docs/es/blocks/agent.mdx new file mode 100644 index 0000000000..5592c01ef7 --- /dev/null +++ b/apps/docs/content/docs/es/blocks/agent.mdx @@ -0,0 +1,306 @@ +--- +title: Agente +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +El bloque Agente sirve como interfaz entre tu flujo de trabajo y los Modelos de Lenguaje Grandes (LLMs). Ejecuta solicitudes de inferencia contra varios proveedores de IA, procesa entradas de lenguaje natural según las instrucciones definidas y genera salidas estructuradas o no estructuradas para su consumo posterior. + +
+ Configuración del bloque Agente +
+ +## Descripción general + +El bloque Agente te permite: + + + + Procesar lenguaje natural: Analizar la entrada del usuario y generar respuestas contextuales + + + Ejecutar tareas impulsadas por IA: Realizar análisis de contenido, generación y toma de decisiones + + + Llamar a herramientas externas: Acceder a APIs, bases de datos y servicios durante el procesamiento + + + Generar salida estructurada: Devolver datos JSON que coincidan con los requisitos de tu esquema + + + +## Opciones de configuración + +### Prompt del sistema + +El prompt del sistema establece los parámetros operativos y las restricciones de comportamiento del agente. Esta configuración define el rol del agente, la metodología de respuesta y los límites de procesamiento para todas las solicitudes entrantes. + +```markdown +You are a helpful assistant that specializes in financial analysis. +Always provide clear explanations and cite sources when possible. +When responding to questions about investments, include risk disclaimers. +``` + +### Prompt del usuario + +El prompt del usuario representa los datos de entrada principales para el procesamiento de inferencia. Este parámetro acepta texto en lenguaje natural o datos estructurados que el agente analizará y a los que responderá. Las fuentes de entrada incluyen: + +- **Configuración estática**: Entrada de texto directa especificada en la configuración del bloque +- **Entrada dinámica**: Datos pasados desde bloques anteriores a través de interfaces de conexión +- **Generación en tiempo de ejecución**: Contenido generado programáticamente durante la ejecución del flujo de trabajo + +### Selección de modelo + +El bloque Agente admite múltiples proveedores de LLM a través de una interfaz de inferencia unificada. Los modelos disponibles incluyen: + +**Modelos de OpenAI**: GPT-5, GPT-4o, o1, o3, o4-mini, gpt-4.1 (inferencia basada en API) +**Modelos de Anthropic**: Claude 3.7 Sonnet (inferencia basada en API) +**Modelos de Google**: Gemini 2.5 Pro, Gemini 2.0 Flash (inferencia basada en API) +**Proveedores alternativos**: Groq, Cerebras, xAI, DeepSeek (inferencia basada en API) +**Despliegue local**: Modelos compatibles con Ollama (inferencia autohospedada) + +
+
+ +### Temperatura + +Controla la creatividad y aleatoriedad de las respuestas: + + + + Respuestas más deterministas y enfocadas. Ideal para tareas factuales, atención al cliente y + situaciones donde la precisión es crítica. + + + Equilibrio entre creatividad y enfoque. Adecuado para aplicaciones de uso general que requieren + tanto precisión como cierta creatividad. + + + Respuestas más creativas y variadas. Ideal para escritura creativa, lluvia de ideas y generación + de ideas diversas. + + + +
+ El rango de temperatura (0-1 o 0-2) varía dependiendo del modelo seleccionado. +
+ +### Clave API + +Tu clave API para el proveedor de LLM seleccionado. Se almacena de forma segura y se utiliza para la autenticación. + +### Herramientas + +Las herramientas amplían las capacidades del agente mediante integraciones de API externas y conexiones de servicios. El sistema de herramientas permite la llamada a funciones, permitiendo al agente ejecutar operaciones más allá de la generación de texto. + +**Proceso de integración de herramientas**: +1. Accede a la sección de configuración de Herramientas dentro del bloque del Agente +2. Selecciona entre más de 60 integraciones predefinidas o define funciones personalizadas +3. Configura los parámetros de autenticación y las restricciones operativas + +
+
+ +**Categorías de herramientas disponibles**: +- **Comunicación**: Gmail, Slack, Telegram, WhatsApp, Microsoft Teams +- **Fuentes de datos**: Notion, Google Sheets, Airtable, Supabase, Pinecone +- **Servicios web**: Firecrawl, Google Search, Exa AI, automatización de navegador +- **Desarrollo**: GitHub, Jira, gestión de repositorios y problemas en Linear +- **Servicios de IA**: OpenAI, Perplexity, Hugging Face, ElevenLabs + +**Control de ejecución de herramientas**: +- **Auto**: El modelo determina la invocación de herramientas según el contexto y la necesidad +- **Requerido**: La herramienta debe ser llamada durante cada solicitud de inferencia +- **Ninguno**: Definición de herramienta disponible pero excluida del contexto del modelo + +
+
+ +### Formato de respuesta + +El parámetro de formato de respuesta impone la generación de salidas estructuradas mediante la validación de esquemas JSON. Esto asegura respuestas consistentes y legibles por máquina que se ajustan a estructuras de datos predefinidas: + +```json +{ + "name": "user_analysis", + "schema": { + "type": "object", + "properties": { + "sentiment": { + "type": "string", + "enum": ["positive", "negative", "neutral"] + }, + "confidence": { + "type": "number", + "minimum": 0, + "maximum": 1 + } + }, + "required": ["sentiment", "confidence"] + } +} +``` + +Esta configuración restringe la salida del modelo para que cumpla con el esquema especificado, evitando respuestas de texto libre y asegurando la generación de datos estructurados. + +### Acceso a los resultados + +Después de que un agente completa su tarea, puedes acceder a sus salidas: + +- **``**: El texto de respuesta o datos estructurados del agente +- **``**: Estadísticas de uso de tokens (prompt, completado, total) +- **``**: Detalles de cualquier herramienta que el agente utilizó durante la ejecución +- **``**: Costo estimado de la llamada a la API (si está disponible) + +## Funciones avanzadas + +### Memoria + Agente: Historial de conversación + +Utiliza un bloque `Memory` con un `id` consistente (por ejemplo, `chat`) para persistir mensajes entre ejecuciones, e incluir ese historial en el prompt del agente. + +- Añade el mensaje del usuario antes del agente +- Lee el historial de conversación para contexto +- Añade la respuesta del agente después de que se ejecute + +```yaml +# 1) Add latest user message +- Memory (operation: add) + id: chat + role: user + content: {{input}} + +# 2) Load conversation history +- Memory (operation: get) + id: chat + +# 3) Run the agent with prior messages available +- Agent + System Prompt: ... + User Prompt: | + Use the conversation so far: + {{memory_get.memories}} + Current user message: {{input}} + +# 4) Store the agent reply +- Memory (operation: add) + id: chat + role: assistant + content: {{agent.content}} +``` + +Consulta la referencia del bloque `Memory` para más detalles: [/tools/memory](/tools/memory). + +## Entradas y salidas + + + +
    +
  • + Prompt del sistema: Instrucciones que definen el comportamiento y rol del agente +
  • +
  • + Prompt del usuario: Texto de entrada o datos a procesar +
  • +
  • + Modelo: Selección del modelo de IA (OpenAI, Anthropic, Google, etc.) +
  • +
  • + Temperatura: Control de aleatoriedad de respuesta (0-2) +
  • +
  • + Herramientas: Array de herramientas disponibles para llamadas a funciones +
  • +
  • + Formato de respuesta: Esquema JSON para salida estructurada +
  • +
+
+ +
    +
  • + agent.content: Texto de respuesta o datos estructurados del agente +
  • +
  • + agent.tokens: Objeto de estadísticas de uso de tokens +
  • +
  • + agent.tool_calls: Array de detalles de ejecución de herramientas +
  • +
  • + agent.cost: Costo estimado de la llamada a la API (si está disponible) +
  • +
+
+ +
    +
  • + Contenido: Salida de respuesta principal del agente +
  • +
  • + Metadatos: Estadísticas de uso y detalles de ejecución +
  • +
  • + Acceso: Disponible en bloques después del agente +
  • +
+
+
+ +## Ejemplos de casos de uso + +### Automatización de atención al cliente + +
+

Escenario: Gestionar consultas de clientes con acceso a base de datos

+
    +
  1. El usuario envía un ticket de soporte a través del bloque API
  2. +
  3. El agente verifica pedidos/suscripciones en Postgres y busca en la base de conocimientos para obtener orientación
  4. +
  5. Si se necesita escalamiento, el agente crea una incidencia en Linear con el contexto relevante
  6. +
  7. El agente redacta una respuesta clara por correo electrónico
  8. +
  9. Gmail envía la respuesta al cliente
  10. +
  11. La conversación se guarda en Memoria para mantener el historial para mensajes futuros
  12. +
+
+ +### Análisis de contenido multi-modelo + +
+

Escenario: Analizar contenido con diferentes modelos de IA

+
    +
  1. El bloque de función procesa el documento cargado
  2. +
  3. El agente con GPT-4o realiza análisis técnico
  4. +
  5. El agente con Claude analiza el sentimiento y tono
  6. +
  7. El bloque de función combina los resultados para el informe final
  8. +
+
+ +### Asistente de investigación con herramientas + +
+

Escenario: Asistente de investigación con búsqueda web y acceso a documentos

+
    +
  1. Consulta del usuario recibida a través de entrada
  2. +
  3. El agente busca en la web usando la herramienta de Google Search
  4. +
  5. El agente accede a la base de datos de Notion para documentos internos
  6. +
  7. El agente compila un informe de investigación completo
  8. +
+
+ +## Mejores prácticas + +- **Sé específico en los prompts del sistema**: Define claramente el rol, tono y limitaciones del agente. Cuanto más específicas sean tus instrucciones, mejor podrá el agente cumplir con su propósito previsto. +- **Elige la configuración de temperatura adecuada**: Usa configuraciones de temperatura más bajas (0-0.3) cuando la precisión es importante, o aumenta la temperatura (0.7-2.0) para respuestas más creativas o variadas +- **Aprovecha las herramientas de manera efectiva**: Integra herramientas que complementen el propósito del agente y mejoren sus capacidades. Sé selectivo sobre qué herramientas proporcionas para evitar sobrecargar al agente. Para tareas con poca superposición, usa otro bloque de Agente para obtener los mejores resultados. diff --git a/apps/docs/content/docs/es/blocks/api.mdx b/apps/docs/content/docs/es/blocks/api.mdx new file mode 100644 index 0000000000..24e259cc2e --- /dev/null +++ b/apps/docs/content/docs/es/blocks/api.mdx @@ -0,0 +1,232 @@ +--- +title: API +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +El bloque API te permite conectar tu flujo de trabajo a servicios externos a través de endpoints API utilizando peticiones HTTP. Admite varios métodos como GET, POST, PUT, DELETE y PATCH, permitiéndote interactuar con prácticamente cualquier endpoint API. + +
+ Bloque API +
+ +## Descripción general + +El bloque API te permite: + + + + Conectar con servicios externos: Realizar peticiones HTTP a APIs REST y servicios web + + + Enviar y recibir datos: Procesar respuestas y transformar datos de fuentes externas + + + Integrar plataformas de terceros: Conectar con servicios como Stripe, Slack o APIs personalizadas + + + Gestionar la autenticación: Admitir varios métodos de autenticación, incluyendo tokens Bearer y claves API + + + +## Cómo funciona + +El bloque API procesa las peticiones HTTP a través de un enfoque estructurado: + +1. **Configurar petición** - Establecer URL, método, cabeceras y parámetros del cuerpo +2. **Ejecutar petición** - Enviar petición HTTP al endpoint especificado +3. **Procesar respuesta** - Gestionar datos de respuesta, códigos de estado y cabeceras +4. **Gestión de errores** - Administrar tiempos de espera, reintentos y condiciones de error + +## Opciones de configuración + +### URL + +La URL del endpoint para la petición API. Puede ser: + +- Una URL estática introducida directamente en el bloque +- Una URL dinámica conectada desde la salida de otro bloque +- Una URL con parámetros de ruta + +### Método + +Selecciona el método HTTP para tu petición: + +- **GET**: Recuperar datos del servidor +- **POST**: Enviar datos al servidor para crear un recurso +- **PUT**: Actualizar un recurso existente en el servidor +- **DELETE**: Eliminar un recurso del servidor +- **PATCH**: Actualizar parcialmente un recurso existente + +### Parámetros de consulta + +Define pares clave-valor que se añadirán a la URL como parámetros de consulta. Por ejemplo: + +``` +Key: apiKey +Value: your_api_key_here + +Key: limit +Value: 10 +``` + +Estos se añadirían a la URL como `?apiKey=your_api_key_here&limit=10`. + +### Cabeceras + +Configura las cabeceras HTTP para tu solicitud. Las cabeceras comunes incluyen: + +``` +Key: Content-Type +Value: application/json + +Key: Authorization +Value: Bearer your_token_here +``` + +### Cuerpo de la solicitud + +Para métodos que admiten un cuerpo de solicitud (POST, PUT, PATCH), puedes definir los datos a enviar. El cuerpo puede ser: + +- Datos JSON introducidos directamente en el bloque +- Datos conectados desde la salida de otro bloque +- Generados dinámicamente durante la ejecución del flujo de trabajo + +### Acceso a los resultados + +Después de completar una solicitud API, puedes acceder a sus salidas: + +- **``**: Los datos del cuerpo de respuesta de la API +- **``**: Código de estado HTTP (200, 404, 500, etc.) +- **``**: Cabeceras de respuesta del servidor +- **``**: Detalles del error si la solicitud falló + +## Funciones avanzadas + +### Construcción dinámica de URL + +Construye URLs dinámicamente usando variables de bloques anteriores: + +```javascript +// In a Function block before the API +const userId = ; +const apiUrl = `https://api.example.com/users/${userId}/profile`; +``` + +### Reintentos de solicitud + +El bloque API gestiona automáticamente: +- Tiempos de espera de red con retroceso exponencial +- Respuestas de límite de velocidad (códigos de estado 429) +- Errores del servidor (códigos de estado 5xx) con lógica de reintento +- Fallos de conexión con intentos de reconexión + +### Validación de respuesta + +Valida las respuestas de la API antes de procesarlas: + +```javascript +// In a Function block after the API +if ( === 200) { + const data = ; + // Process successful response +} else { + // Handle error response + console.error(`API Error: ${}`); +} +``` + +## Entradas y salidas + + + +
    +
  • + URL: El endpoint al que enviar la solicitud +
  • +
  • + Method: Método HTTP (GET, POST, PUT, DELETE, PATCH) +
  • +
  • + Query Parameters: Pares clave-valor para parámetros de URL +
  • +
  • + Headers: Cabeceras HTTP para autenticación y tipo de contenido +
  • +
  • + Body: Carga de solicitud para métodos POST/PUT/PATCH +
  • +
+
+ +
    +
  • + api.data: Datos del cuerpo de respuesta de la llamada API +
  • +
  • + api.status: Código de estado HTTP devuelto por el servidor +
  • +
  • + api.headers: Cabeceras de respuesta del servidor +
  • +
  • + api.error: Detalles del error si la solicitud falló +
  • +
+
+ +
    +
  • + Response Data: Contenido principal de respuesta de la API +
  • +
  • + Status Information: Estado HTTP y detalles de error +
  • +
  • + Access: Disponible en bloques después de la llamada API +
  • +
+
+
+ +## Ejemplos de casos de uso + +### Obtener datos de perfil de usuario + +
+

Escenario: Recuperar información de usuario desde un servicio externo

+
    +
  1. El bloque de función construye el ID de usuario desde la entrada
  2. +
  3. El bloque API llama al endpoint GET /users/{id}
  4. +
  5. El bloque de función procesa y formatea los datos del usuario
  6. +
  7. El bloque de respuesta devuelve el perfil formateado
  8. +
+
+ +### Procesamiento de pagos + +
+

Escenario: Procesar pago a través de la API de Stripe

+
    +
  1. El bloque de función valida los datos de pago
  2. +
  3. El bloque API crea la intención de pago a través de Stripe
  4. +
  5. El bloque de condición gestiona el éxito/fracaso del pago
  6. +
  7. El bloque Supabase actualiza el estado del pedido en la base de datos
  8. +
+
+ +## Mejores prácticas + +- **Usa variables de entorno para datos sensibles**: No codifiques directamente claves API o credenciales +- **Maneja los errores con elegancia**: Conecta lógica de manejo de errores para solicitudes fallidas +- **Valida las respuestas**: Comprueba los códigos de estado y formatos de respuesta antes de procesar datos +- **Respeta los límites de tasa**: Ten en cuenta los límites de tasa de la API e implementa la limitación apropiada diff --git a/apps/docs/content/docs/es/blocks/condition.mdx b/apps/docs/content/docs/es/blocks/condition.mdx new file mode 100644 index 0000000000..b92d36bb6c --- /dev/null +++ b/apps/docs/content/docs/es/blocks/condition.mdx @@ -0,0 +1,242 @@ +--- +title: Condición +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Image } from '@/components/ui/image' + +El bloque de Condición te permite ramificar la ruta de ejecución de tu flujo de trabajo basándose en expresiones booleanas, permitiéndote crear flujos de trabajo dinámicos y receptivos con diferentes rutas de ejecución. Evalúa condiciones y dirige el flujo de trabajo en consecuencia, permitiéndote controlar el flujo de ejecución basado en datos o lógica sin requerir un LLM. + +
+ Bloque de Condición +
+ + + Los bloques de Condición permiten una toma de decisiones determinista sin requerir un LLM, haciéndolos ideales + para lógica de ramificación sencilla. + + +## Descripción general + +El bloque de Condición te permite: + + + + Crear lógica de ramificación: dirigir flujos de trabajo basados en expresiones booleanas + + + Tomar decisiones basadas en datos: evaluar condiciones usando salidas de bloques anteriores + + + Manejar múltiples escenarios: definir múltiples condiciones con diferentes rutas + + + Proporcionar enrutamiento determinista: tomar decisiones sin requerir un LLM + + + +## Cómo funciona + +El bloque de Condición opera a través de un proceso de evaluación secuencial: + +1. **Evaluar expresión** - Procesa la expresión booleana de JavaScript/TypeScript usando los datos actuales del flujo de trabajo +2. **Determinar resultado** - Devuelve verdadero o falso basado en la evaluación de la expresión +3. **Dirigir flujo de trabajo** - Dirige la ejecución al bloque de destino apropiado basado en el resultado +4. **Proporcionar contexto** - Genera metadatos sobre la decisión para depuración y monitoreo + +## Opciones de configuración + +### Condiciones + +Define una o más condiciones que serán evaluadas. Cada condición incluye: + +- **Expresión**: una expresión JavaScript/TypeScript que evalúa a verdadero o falso +- **Ruta**: el bloque de destino al que dirigir si la condición es verdadera +- **Descripción**: explicación opcional de lo que comprueba la condición + +Puedes crear múltiples condiciones que se evalúan en orden, donde la primera condición que coincida determina la ruta de ejecución. + +### Formato de expresión de condición + +Las condiciones utilizan sintaxis JavaScript y pueden hacer referencia a valores de entrada de bloques anteriores. + + + + + ```javascript + // Check if a score is above a threshold + > 75 + ``` + + + + + ```javascript + // Check if a text contains specific keywords + .includes('urgent') || .includes('emergency') + ``` + + + + + ```javascript + // Check multiple conditions + >= 18 && === 'US' + ``` + + + + +### Acceso a resultados + +Después de evaluar una condición, puedes acceder a sus salidas: + +- **``**: Resultado booleano de la evaluación de la condición +- **``**: ID de la condición que coincidió +- **``**: Descripción del resultado de la evaluación +- **``**: Detalles del destino de enrutamiento elegido + +## Funciones avanzadas + +### Expresiones complejas + +Usa operadores y funciones de JavaScript en las condiciones: + +```javascript +// String operations +.endsWith('@company.com') + +// Array operations +.includes('urgent') + +// Mathematical operations + * 100 > 85 + +// Date comparisons +new Date() > new Date('2024-01-01') +``` + +### Evaluación de múltiples condiciones + +Las condiciones se evalúan en orden hasta que una coincida: + +```javascript +// Condition 1: Check for high priority + === 'high' + +// Condition 2: Check for urgent keywords +.toLowerCase().includes('urgent') + +// Condition 3: Default fallback +true +``` + +### Manejo de errores + +Las condiciones manejan automáticamente: +- Valores indefinidos o nulos con evaluación segura +- Incompatibilidades de tipo con alternativas apropiadas +- Expresiones inválidas con registro de errores +- Variables faltantes con valores predeterminados + +## Entradas y salidas + + + +
    +
  • + Condiciones: Array de expresiones booleanas para evaluar +
  • +
  • + Expresiones: Condiciones JavaScript/TypeScript usando salidas de bloques +
  • +
  • + Rutas de enrutamiento: Bloques de destino para cada resultado de condición +
  • +
+
+ +
    +
  • + condition.result: Resultado booleano de la evaluación de condición +
  • +
  • + condition.matched_condition: ID de la condición coincidente +
  • +
  • + condition.content: Descripción del resultado de evaluación +
  • +
  • + condition.path: Detalles del destino de enrutamiento elegido +
  • +
+
+ +
    +
  • + Resultado booleano: Resultado principal de la evaluación de condición +
  • +
  • + Información de enrutamiento: Selección de ruta y detalles de condición +
  • +
  • + Acceso: Disponible en bloques después de la condición +
  • +
+
+
+ +## Ejemplos de casos de uso + +### Enrutamiento de atención al cliente + +
+

Escenario: Enrutar tickets de soporte según la prioridad

+
    +
  1. El bloque API obtiene datos de tickets de soporte
  2. +
  3. La condición verifica si `` es igual a 'high'
  4. +
  5. Tickets de alta prioridad → Agente con herramientas de escalación
  6. +
  7. Tickets de prioridad normal → Agente de soporte estándar
  8. +
+
+ +### Moderación de contenido + +
+

Escenario: Filtrar contenido basado en resultados de análisis

+
    +
  1. El agente analiza contenido generado por usuarios
  2. +
  3. La condición verifica si `` > 0.7
  4. +
  5. Contenido tóxico → Flujo de moderación
  6. +
  7. Contenido limpio → Flujo de publicación
  8. +
+
+ +### Flujo de incorporación de usuarios + +
+

Escenario: Personalizar la incorporación según el tipo de usuario

+
    +
  1. El bloque de función procesa datos de registro de usuarios
  2. +
  3. La condición verifica si `` === 'enterprise'
  4. +
  5. Usuarios empresariales → Flujo de configuración avanzada
  6. +
  7. Usuarios individuales → Flujo de incorporación simple
  8. +
+
+ +## Mejores prácticas + +- **Ordenar las condiciones correctamente**: Coloca las condiciones más específicas antes que las generales para asegurar que la lógica específica tenga prioridad sobre las alternativas +- **Incluir una condición predeterminada**: Añade una condición general (`true`) como última condición para manejar casos no coincidentes y evitar que la ejecución del flujo de trabajo se quede atascada +- **Mantener las expresiones simples**: Usa expresiones booleanas claras y directas para mejorar la legibilidad y facilitar la depuración +- **Documentar tus condiciones**: Añade descripciones para explicar el propósito de cada condición para una mejor colaboración en equipo y mantenimiento +- **Probar casos límite**: Verifica que las condiciones manejen correctamente los valores límite probando con valores en los extremos de los rangos de tus condiciones diff --git a/apps/docs/content/docs/es/blocks/evaluator.mdx b/apps/docs/content/docs/es/blocks/evaluator.mdx new file mode 100644 index 0000000000..f149c0d1b8 --- /dev/null +++ b/apps/docs/content/docs/es/blocks/evaluator.mdx @@ -0,0 +1,199 @@ +--- +title: Evaluador +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +El bloque Evaluador utiliza IA para puntuar y evaluar la calidad del contenido mediante métricas de evaluación personalizables que tú defines. Perfecto para control de calidad, pruebas A/B y para garantizar que tus resultados de IA cumplan con estándares específicos. + +
+ Configuración del bloque Evaluador +
+ +## Descripción general + +El bloque Evaluador te permite: + + + + Puntuar la calidad del contenido: Usa IA para evaluar contenido según métricas personalizadas con puntuaciones numéricas + + + Definir métricas personalizadas: Crea criterios de evaluación específicos adaptados a tu caso de uso + + + Automatizar el control de calidad: Construye flujos de trabajo que evalúan y filtran contenido automáticamente + + + Seguir el rendimiento: Monitoriza mejoras y consistencia a lo largo del tiempo con puntuaciones objetivas + + + +## Cómo funciona + +El bloque Evaluador procesa contenido mediante evaluación impulsada por IA: + +1. **Recibe contenido** - Toma el contenido de entrada de bloques previos en tu flujo de trabajo +2. **Aplica métricas** - Evalúa el contenido según tus métricas personalizadas definidas +3. **Genera puntuaciones** - El modelo de IA asigna puntuaciones numéricas para cada métrica +4. **Proporciona resumen** - Devuelve una evaluación detallada con puntuaciones y explicaciones + +## Opciones de configuración + +### Métricas de evaluación + +Define métricas personalizadas para evaluar el contenido. Cada métrica incluye: + +- **Nombre**: Un identificador corto para la métrica +- **Descripción**: Una explicación detallada de lo que mide la métrica +- **Rango**: El rango numérico para la puntuación (p. ej., 1-5, 0-10) + +Ejemplos de métricas: + +``` +Accuracy (1-5): How factually accurate is the content? +Clarity (1-5): How clear and understandable is the content? +Relevance (1-5): How relevant is the content to the original query? +``` + +### Contenido + +El contenido a evaluar. Esto puede ser: + +- Proporcionado directamente en la configuración del bloque +- Conectado desde la salida de otro bloque (típicamente un bloque de Agente) +- Generado dinámicamente durante la ejecución del flujo de trabajo + +### Selección de modelo + +Elige un modelo de IA para realizar la evaluación: + +**OpenAI**: GPT-4o, o1, o3, o4-mini, gpt-4.1 +**Anthropic**: Claude 3.7 Sonnet +**Google**: Gemini 2.5 Pro, Gemini 2.0 Flash +**Otros proveedores**: Groq, Cerebras, xAI, DeepSeek +**Modelos locales**: Cualquier modelo ejecutándose en Ollama + +
+
+ +**Recomendación**: Utiliza modelos con fuertes capacidades de razonamiento como GPT-4o o Claude 3.7 Sonnet para evaluaciones más precisas. + +### Clave API + +Tu clave API para el proveedor de LLM seleccionado. Esta se almacena de forma segura y se utiliza para la autenticación. + +## Cómo funciona + +1. El bloque Evaluador toma el contenido proporcionado y tus métricas personalizadas +2. Genera un prompt especializado que instruye al LLM para evaluar el contenido +3. El prompt incluye directrices claras sobre cómo puntuar cada métrica +4. El LLM evalúa el contenido y devuelve puntuaciones numéricas para cada métrica +5. El bloque Evaluador formatea estas puntuaciones como salida estructurada para su uso en tu flujo de trabajo + +## Ejemplos de casos de uso + +### Evaluación de calidad de contenido + +
+

Escenario: Evaluar la calidad de un artículo de blog antes de su publicación

+
    +
  1. El bloque de Agente genera el contenido del artículo
  2. +
  3. El Evaluador evalúa la precisión, legibilidad y engagement
  4. +
  5. El bloque de Condición verifica si las puntuaciones cumplen con los umbrales mínimos
  6. +
  7. Puntuaciones altas → Publicar, Puntuaciones bajas → Revisar y reintentar
  8. +
+
+ +### Pruebas A/B de contenido + +
+

Escenario: Comparar múltiples respuestas generadas por IA

+
    +
  1. El bloque paralelo genera múltiples variaciones de respuesta
  2. +
  3. El evaluador puntúa cada variación según claridad y relevancia
  4. +
  5. El bloque de función selecciona la respuesta con mayor puntuación
  6. +
  7. El bloque de respuesta devuelve el mejor resultado
  8. +
+
+ +### Control de calidad de atención al cliente + +
+

Escenario: Asegurar que las respuestas de soporte cumplan con los estándares de calidad

+
    +
  1. El agente de soporte genera una respuesta a la consulta del cliente
  2. +
  3. El evaluador puntúa la utilidad, empatía y precisión
  4. +
  5. Las puntuaciones se registran para entrenamiento y monitoreo de rendimiento
  6. +
  7. Las puntuaciones bajas activan un proceso de revisión humana
  8. +
+
+ +## Entradas y salidas + + + +
    +
  • + Contenido: El texto o datos estructurados a evaluar +
  • +
  • + Métricas de evaluación: Criterios personalizados con rangos de puntuación +
  • +
  • + Modelo: Modelo de IA para análisis de evaluación +
  • +
  • + Clave API: Autenticación para el proveedor de LLM seleccionado +
  • +
+
+ +
    +
  • + evaluator.content: Resumen de la evaluación +
  • +
  • + evaluator.model: Modelo utilizado para la evaluación +
  • +
  • + evaluator.tokens: Estadísticas de uso de tokens +
  • +
  • + evaluator.cost: Resumen de costos para la llamada de evaluación +
  • +
+
+ +
    +
  • + Puntuaciones de métricas: Puntuaciones numéricas para cada métrica definida +
  • +
  • + Resumen de evaluación: Evaluación detallada con explicaciones +
  • +
  • + Acceso: Disponible en bloques después del evaluador +
  • +
+
+
+ +## Mejores prácticas + +- **Usar descripciones específicas de métricas**: Define claramente qué mide cada métrica para obtener evaluaciones más precisas +- **Elegir rangos apropiados**: Selecciona rangos de puntuación que proporcionen suficiente detalle sin ser excesivamente complejos +- **Conectar con bloques de agente**: Utiliza bloques evaluadores para evaluar las salidas de bloques de agente y crear bucles de retroalimentación +- **Usar métricas consistentes**: Para análisis comparativos, mantén métricas consistentes en evaluaciones similares +- **Combinar múltiples métricas**: Usa varias métricas para obtener una evaluación integral diff --git a/apps/docs/content/docs/es/blocks/function.mdx b/apps/docs/content/docs/es/blocks/function.mdx new file mode 100644 index 0000000000..fcfe30fc7c --- /dev/null +++ b/apps/docs/content/docs/es/blocks/function.mdx @@ -0,0 +1,156 @@ +--- +title: Función +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +El bloque Función te permite ejecutar código JavaScript o TypeScript personalizado en tus flujos de trabajo. Úsalo para transformar datos, realizar cálculos o implementar lógica personalizada que no está disponible en otros bloques. + +
+ Bloque de función con editor de código +
+ +## Descripción general + +El bloque Función te permite: + + + + Transformar datos: Convertir formatos, analizar texto, manipular arrays y objetos + + + Realizar cálculos: Operaciones matemáticas, estadísticas, cálculos financieros + + + Implementar lógica personalizada: Condicionales complejos, bucles y algoritmos + + + Procesar datos externos: Analizar respuestas, formatear solicitudes, gestionar autenticación + + + +## Cómo funciona + +El bloque Función ejecuta tu código en un entorno seguro y aislado: + +1. **Recibir entrada**: Accede a los datos de bloques anteriores a través del objeto `input` +2. **Ejecutar código**: Ejecuta tu código JavaScript/Python +3. **Devolver resultados**: Usa `return` para pasar datos al siguiente bloque +4. **Manejar errores**: Gestión de errores y registro integrados + +## Ejecución remota (E2B) + + - **Lenguajes**: Ejecuta JavaScript y Python en un sandbox E2B aislado. + - **Cómo activarlo**: Activa “Ejecución de código remoto” en el bloque Función. + - **Cuándo usarlo**: Lógica más pesada, bibliotecas externas o código específico de Python. + - **Rendimiento**: Más lento que JS local debido al inicio del sandbox y la sobrecarga de red. + - **Notas**: Requiere `E2B_API_KEY` si se ejecuta localmente. Para la menor latencia, usa JS nativo local (Modo rápido). + +## Entradas y salidas + + + +
    +
  • + Código: Tu código JavaScript/Python para ejecutar +
  • +
  • + Tiempo de espera: Tiempo máximo de ejecución (por defecto 30 segundos) +
  • +
  • + Datos de entrada: Todas las salidas de bloques conectados disponibles a través de variables +
  • +
+
+ +
    +
  • + function.result: El valor devuelto por tu función +
  • +
  • + function.stdout: Salida de console.log() de tu código +
  • +
+
+
+ +## Casos de uso de ejemplo + +### Pipeline de procesamiento de datos + +
+

Escenario: Transformar respuesta de API en datos estructurados

+
    +
  1. El bloque de API obtiene datos brutos del cliente
  2. +
  3. El bloque de función procesa y valida los datos
  4. +
  5. El bloque de función calcula métricas derivadas
  6. +
  7. El bloque de respuesta devuelve resultados formateados
  8. +
+
+ +### Implementación de lógica de negocio + +
+

Escenario: Calcular puntuaciones y niveles de fidelidad

+
    +
  1. El agente recupera el historial de compras del cliente
  2. +
  3. El bloque de función calcula métricas de fidelidad
  4. +
  5. El bloque de función determina el nivel del cliente
  6. +
  7. El bloque de condición enruta según el nivel
  8. +
+
+ +### Validación y limpieza de datos + +
+

Escenario: Validar y limpiar la entrada del usuario

+
    +
  1. Entrada del usuario recibida desde el envío del formulario
  2. +
  3. El bloque de función valida el formato de correo electrónico y números de teléfono
  4. +
  5. El bloque de función limpia y normaliza los datos
  6. +
  7. El bloque de API guarda los datos validados en la base de datos
  8. +
+
+ +### Ejemplo: Calculadora de puntuación de fidelidad + +```javascript title="loyalty-calculator.js" +// Process customer data and calculate loyalty score +const { purchaseHistory, accountAge, supportTickets } = ; + +// Calculate metrics +const totalSpent = purchaseHistory.reduce((sum, purchase) => sum + purchase.amount, 0); +const purchaseFrequency = purchaseHistory.length / (accountAge / 365); +const ticketRatio = supportTickets.resolved / supportTickets.total; + +// Calculate loyalty score (0-100) +const spendScore = Math.min(totalSpent / 1000 * 30, 30); +const frequencyScore = Math.min(purchaseFrequency * 20, 40); +const supportScore = ticketRatio * 30; + +const loyaltyScore = Math.round(spendScore + frequencyScore + supportScore); + +return { + customer: , + loyaltyScore, + loyaltyTier: loyaltyScore >= 80 ? "Platinum" : loyaltyScore >= 60 ? "Gold" : "Silver", + metrics: { spendScore, frequencyScore, supportScore } +}; +``` + +## Mejores prácticas + +- **Mantén las funciones enfocadas**: Escribe funciones que hagan una sola cosa bien para mejorar la mantenibilidad y la depuración +- **Maneja los errores con elegancia**: Usa bloques try/catch para manejar posibles errores y proporcionar mensajes de error significativos +- **Prueba casos extremos**: Asegúrate de que tu código maneje correctamente entradas inusuales, valores nulos y condiciones límite +- **Optimiza el rendimiento**: Ten en cuenta la complejidad computacional y el uso de memoria para grandes conjuntos de datos +- **Usa console.log() para depuración**: Aprovecha la salida stdout para depurar y monitorear la ejecución de funciones diff --git a/apps/docs/content/docs/es/blocks/index.mdx b/apps/docs/content/docs/es/blocks/index.mdx new file mode 100644 index 0000000000..17cd943aa3 --- /dev/null +++ b/apps/docs/content/docs/es/blocks/index.mdx @@ -0,0 +1,129 @@ +--- +title: Bloques +description: Los componentes de construcción de tus flujos de trabajo de IA +--- + +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Video } from '@/components/ui/video' + +Los bloques son los componentes de construcción que conectas para crear flujos de trabajo de IA. Piensa en ellos como módulos especializados que manejan tareas específicas—desde chatear con modelos de IA hasta realizar llamadas API o procesar datos. + +
+
+ +## Tipos de bloques principales + +Sim proporciona siete tipos de bloques principales que manejan las funciones esenciales de los flujos de trabajo de IA: + +### Bloques de procesamiento +- **[Agente](/blocks/agent)** - Chatea con modelos de IA (OpenAI, Anthropic, Google, modelos locales) +- **[Función](/blocks/function)** - Ejecuta código personalizado de JavaScript/TypeScript +- **[API](/blocks/api)** - Conecta con servicios externos mediante peticiones HTTP + +### Bloques lógicos +- **[Condición](/blocks/condition)** - Ramifica caminos de flujo de trabajo basados en expresiones booleanas +- **[Enrutador](/blocks/router)** - Usa IA para dirigir inteligentemente las solicitudes a diferentes caminos +- **[Evaluador](/blocks/evaluator)** - Puntúa y evalúa la calidad del contenido usando IA + +### Bloques de salida +- **[Respuesta](/blocks/response)** - Formatea y devuelve resultados finales de tu flujo de trabajo + +## Cómo funcionan los bloques + +Cada bloque tiene tres componentes principales: + +**Entradas**: Datos que llegan al bloque desde otros bloques o entrada del usuario +**Configuración**: Ajustes que controlan cómo se comporta el bloque +**Salidas**: Datos que el bloque produce para que otros bloques los utilicen + + + + Recibir entrada: El bloque recibe datos de bloques conectados o entrada del usuario + + + Procesar: El bloque procesa la entrada según su configuración + + + Resultados de salida: El bloque produce datos de salida para los siguientes bloques en el flujo de trabajo + + + +## Conectando bloques + +Creas flujos de trabajo conectando bloques entre sí. La salida de un bloque se convierte en la entrada de otro: + +- **Arrastra para conectar**: Arrastra desde un puerto de salida a un puerto de entrada +- **Conexiones múltiples**: Una salida puede conectarse a múltiples entradas +- **Rutas ramificadas**: Algunos bloques pueden dirigir a diferentes rutas según las condiciones + +
+
+ +## Patrones comunes + +### Procesamiento secuencial +Conecta bloques en cadena donde cada bloque procesa la salida del anterior: + +``` +User Input → Agent → Function → Response +``` + +### Ramificación condicional +Utiliza bloques de Condición o Enrutador para crear diferentes rutas: + +``` +User Input → Router → Agent A (for questions) + → Agent B (for commands) +``` + +### Control de calidad +Utiliza bloques Evaluadores para evaluar y filtrar salidas: + +``` +Agent → Evaluator → Condition → Response (if good) + → Agent (retry if bad) +``` + +## Configuración de bloques + +Cada tipo de bloque tiene opciones de configuración específicas: + +**Todos los bloques**: +- Conexiones de entrada/salida +- Comportamiento de manejo de errores +- Configuración de tiempo de espera de ejecución + +**Bloques de IA** (Agente, Enrutador, Evaluador): +- Selección de modelo (OpenAI, Anthropic, Google, local) +- Claves API y autenticación +- Temperatura y otros parámetros del modelo +- Instrucciones y prompts del sistema + +**Bloques lógicos** (Condición, Función): +- Expresiones o código personalizado +- Referencias de variables +- Configuración del entorno de ejecución + +**Bloques de integración** (API, Respuesta): +- Configuración de endpoint +- Cabeceras y autenticación +- Formato de solicitud/respuesta + + + + Conéctate a modelos de IA y crea respuestas inteligentes + + + Ejecuta código personalizado para procesar y transformar datos + + + Intégrate con servicios externos y APIs + + + Crea lógica de ramificación basada en evaluación de datos + + diff --git a/apps/docs/content/docs/es/blocks/loop.mdx b/apps/docs/content/docs/es/blocks/loop.mdx new file mode 100644 index 0000000000..8e14c51f4f --- /dev/null +++ b/apps/docs/content/docs/es/blocks/loop.mdx @@ -0,0 +1,211 @@ +--- +title: Loop +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +El bloque Loop es un bloque contenedor en Sim que permite crear flujos de trabajo iterativos ejecutando un grupo de bloques repetidamente. Los bucles permiten el procesamiento iterativo en tus flujos de trabajo. + +El bloque Loop admite dos tipos de iteración: + + + Los bloques Loop son nodos contenedores que pueden albergar otros bloques dentro de ellos. Los bloques dentro de un bucle se ejecutarán múltiples veces según tu configuración. + + +## Descripción general + +El bloque Loop te permite: + + + + Iterar sobre colecciones: Procesar arrays u objetos un elemento a la vez + + + Repetir operaciones: Ejecutar bloques un número fijo de veces + + + Procesamiento secuencial: Manejar transformación de datos en iteraciones ordenadas + + + Agregar resultados: Recopilar salidas de todas las iteraciones del bucle + + + +## Cómo funciona + +El bloque Loop ejecuta los bloques contenidos a través de iteración secuencial: + +1. **Inicializar bucle** - Configurar parámetros de iteración (contador o colección) +2. **Ejecutar iteración** - Ejecutar bloques contenidos para la iteración actual +3. **Recopilar resultados** - Almacenar la salida de cada iteración +4. **Continuar o completar** - Pasar a la siguiente iteración o finalizar el bucle + +## Opciones de configuración + +### Tipo de bucle + +Elige entre dos tipos de bucles: + + + + **For Loop (Iteraciones)** - Un bucle numérico que se ejecuta un número fijo de veces: + +
+ Bucle For con iteraciones +
+ + Úsalo cuando necesites repetir una operación un número específico de veces. + + + ``` + Example: Run 5 times + - Iteration 1 + - Iteration 2 + - Iteration 3 + - Iteration 4 + - Iteration 5 + ``` + +
+ + **Bucle ForEach (Colección)** - Un bucle basado en colecciones que itera sobre cada elemento en un array u objeto: + +
+ Bucle ForEach con colección +
+ + Úsalo cuando necesites procesar una colección de elementos. + + + ``` + Example: Process ["apple", "banana", "orange"] + - Iteration 1: Process "apple" + - Iteration 2: Process "banana" + - Iteration 3: Process "orange" + ``` + +
+
+ +## Cómo usar los bucles + +### Creación de un bucle + +1. Arrastra un bloque de bucle desde la barra de herramientas a tu lienzo +2. Configura el tipo de bucle y los parámetros +3. Arrastra otros bloques dentro del contenedor del bucle +4. Conecta los bloques según sea necesario + +### Acceso a los resultados + +Después de que un bucle se completa, puedes acceder a los resultados agregados: + +- **``**: Array de resultados de todas las iteraciones del bucle + +## Ejemplos de casos de uso + +### Procesamiento de resultados de API + +
+

Escenario: Procesar múltiples registros de clientes

+
    +
  1. El bloque API obtiene la lista de clientes
  2. +
  3. El bucle ForEach itera sobre cada cliente
  4. +
  5. Dentro del bucle: El agente analiza los datos del cliente
  6. +
  7. Dentro del bucle: La función almacena los resultados del análisis
  8. +
+
+ +### Generación iterativa de contenido + +
+

Escenario: Generar múltiples variaciones

+
    +
  1. Configurar el bucle For para 5 iteraciones
  2. +
  3. Dentro del bucle: El agente genera una variación de contenido
  4. +
  5. Dentro del bucle: El evaluador puntúa el contenido
  6. +
  7. Después del bucle: La función selecciona la mejor variación
  8. +
+
+ +## Características avanzadas + +### Limitaciones + + + Los bloques contenedores (Bucles y Paralelos) no pueden anidarse unos dentro de otros. Esto significa: + - No puedes colocar un bloque de Bucle dentro de otro bloque de Bucle + - No puedes colocar un bloque Paralelo dentro de un bloque de Bucle + - No puedes colocar ningún bloque contenedor dentro de otro bloque contenedor + + Si necesitas iteración multidimensional, considera reestructurar tu flujo de trabajo para usar bucles secuenciales o procesar datos por etapas. + + + + Los bucles se ejecutan secuencialmente, no en paralelo. Si necesitas ejecución concurrente, utiliza el bloque Paralelo en su lugar. + + +## Entradas y salidas + + + +
    +
  • + Tipo de bucle: Elige entre 'for' o 'forEach' +
  • +
  • + Iteraciones: Número de veces a ejecutar (bucles for) +
  • +
  • + Colección: Array u objeto sobre el que iterar (bucles forEach) +
  • +
+
+ +
    +
  • + loop.currentItem: Elemento actual que se está procesando +
  • +
  • + loop.index: Número de iteración actual (base 0) +
  • +
  • + loop.items: Colección completa (bucles forEach) +
  • +
+
+ +
    +
  • + loop.results: Array con todos los resultados de las iteraciones +
  • +
  • + Estructura: Los resultados mantienen el orden de iteración +
  • +
  • + Acceso: Disponible en bloques después del bucle +
  • +
+
+
+ +## Mejores prácticas + +- **Establece límites razonables**: Mantén un número razonable de iteraciones para evitar tiempos de ejecución largos +- **Usa ForEach para colecciones**: Cuando proceses arrays u objetos, usa bucles ForEach en lugar de bucles For +- **Maneja los errores con elegancia**: Considera añadir manejo de errores dentro de los bucles para flujos de trabajo robustos diff --git a/apps/docs/content/docs/es/blocks/parallel.mdx b/apps/docs/content/docs/es/blocks/parallel.mdx new file mode 100644 index 0000000000..265a81700f --- /dev/null +++ b/apps/docs/content/docs/es/blocks/parallel.mdx @@ -0,0 +1,231 @@ +--- +title: Paralelo +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +El bloque Paralelo es un bloque contenedor en Sim que permite ejecutar múltiples instancias de bloques simultáneamente para un procesamiento más rápido del flujo de trabajo. + +El bloque Paralelo admite dos tipos de ejecución concurrente: + + + Los bloques Paralelos son nodos contenedores que ejecutan su contenido múltiples veces simultáneamente, a diferencia de los bucles que ejecutan secuencialmente. + + +## Descripción general + +El bloque Paralelo te permite: + + + + Distribuir trabajo: Procesar múltiples elementos concurrentemente + + + Acelerar la ejecución: Ejecutar operaciones independientes simultáneamente + + + Manejar operaciones masivas: Procesar grandes conjuntos de datos eficientemente + + + Agregar resultados: Recopilar salidas de todas las ejecuciones paralelas + + + +## Opciones de configuración + +### Tipo de paralelo + +Elige entre dos tipos de ejecución paralela: + + + + **Paralelo basado en conteo** - Ejecuta un número fijo de instancias paralelas: + +
+ Ejecución paralela basada en conteo +
+ + Usa esto cuando necesites ejecutar la misma operación múltiples veces concurrentemente. + + + ``` + Example: Run 5 parallel instances + - Instance 1 ┐ + - Instance 2 ├─ All execute simultaneously + - Instance 3 │ + - Instance 4 │ + - Instance 5 ┘ + ``` + +
+ + **Paralelo basado en colección** - Distribuye una colección entre instancias paralelas: + +
+ Ejecución paralela basada en colección +
+ + Cada instancia procesa un elemento de la colección simultáneamente. + + + ``` + Example: Process ["task1", "task2", "task3"] in parallel + - Instance 1: Process "task1" ┐ + - Instance 2: Process "task2" ├─ All execute simultaneously + - Instance 3: Process "task3" ┘ + ``` + +
+
+ +## Cómo usar bloques paralelos + +### Creación de un bloque paralelo + +1. Arrastra un bloque Paralelo desde la barra de herramientas a tu lienzo +2. Configura el tipo de paralelo y los parámetros +3. Arrastra un solo bloque dentro del contenedor paralelo +4. Conecta el bloque según sea necesario + +### Acceso a los resultados + +Después de que un bloque paralelo se complete, puedes acceder a los resultados agregados: + +- **``**: Array de resultados de todas las instancias paralelas + +## Ejemplos de casos de uso + +### Procesamiento de API por lotes + +
+

Escenario: Procesar múltiples llamadas API simultáneamente

+
    +
  1. Bloque paralelo con colección de endpoints API
  2. +
  3. Dentro del paralelo: El bloque API llama a cada endpoint
  4. +
  5. Después del paralelo: Procesar todas las respuestas juntas
  6. +
+
+ +### Procesamiento de IA con múltiples modelos + +
+

Escenario: Obtener respuestas de múltiples modelos de IA

+
    +
  1. Paralelo basado en colección sobre una lista de IDs de modelos (p. ej., ["gpt-4o", "claude-3.7-sonnet", "gemini-2.5-pro"])
  2. +
  3. Dentro del paralelo: El modelo del agente se establece al elemento actual de la colección
  4. +
  5. Después del paralelo: Comparar y seleccionar la mejor respuesta
  6. +
+
+ +## Características avanzadas + +### Agregación de resultados + +Los resultados de todas las instancias paralelas se recopilan automáticamente: + +```javascript +// In a Function block after the parallel +const allResults = input.parallel.results; +// Returns: [result1, result2, result3, ...] +``` + +### Aislamiento de instancias + +Cada instancia paralela se ejecuta independientemente: +- Ámbitos de variables separados +- Sin estado compartido entre instancias +- Los fallos en una instancia no afectan a las demás + +### Limitaciones + + + Los bloques contenedores (Bucles y Paralelos) no pueden anidarse unos dentro de otros. Esto significa: + - No puedes colocar un bloque de Bucle dentro de un bloque Paralelo + - No puedes colocar otro bloque Paralelo dentro de un bloque Paralelo + - No puedes colocar ningún bloque contenedor dentro de otro bloque contenedor + + + + Los bloques paralelos solo pueden contener un único bloque. No puedes tener múltiples bloques conectados entre sí dentro de un paralelo - en ese caso, solo se ejecutaría el primer bloque. + + + + Aunque la ejecución paralela es más rápida, ten en cuenta: + - Los límites de tasa de las API al realizar solicitudes concurrentes + - El uso de memoria con conjuntos de datos grandes + - Máximo de 20 instancias concurrentes para evitar el agotamiento de recursos + + +## Paralelo vs Bucle + +Entendiendo cuándo usar cada uno: + +| Característica | Paralelo | Bucle | +|---------|----------|------| +| Ejecución | Concurrente | Secuencial | +| Velocidad | Más rápido para operaciones independientes | Más lento pero ordenado | +| Orden | Sin orden garantizado | Mantiene el orden | +| Caso de uso | Operaciones independientes | Operaciones dependientes | +| Uso de recursos | Mayor | Menor | + +## Entradas y Salidas + + + +
    +
  • + Tipo de paralelo: Elige entre 'count' o 'collection' +
  • +
  • + Count: Número de instancias a ejecutar (basado en conteo) +
  • +
  • + Collection: Array u objeto a distribuir (basado en colección) +
  • +
+
+ +
    +
  • + parallel.currentItem: Elemento para esta instancia +
  • +
  • + parallel.index: Número de instancia (base 0) +
  • +
  • + parallel.items: Colección completa (basado en colección) +
  • +
+
+ +
    +
  • + parallel.results: Array de todos los resultados de instancias +
  • +
  • + Access: Disponible en bloques después del paralelo +
  • +
+
+
+ +## Mejores prácticas + +- **Solo operaciones independientes**: Asegúrate de que las operaciones no dependan entre sí +- **Manejo de límites de tasa**: Añade retrasos o limitaciones para flujos de trabajo con uso intensivo de API +- **Manejo de errores**: Cada instancia debe manejar sus propios errores correctamente diff --git a/apps/docs/content/docs/es/blocks/response.mdx b/apps/docs/content/docs/es/blocks/response.mdx new file mode 100644 index 0000000000..b3cde4c940 --- /dev/null +++ b/apps/docs/content/docs/es/blocks/response.mdx @@ -0,0 +1,246 @@ +--- +title: Respuesta +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +El bloque de Respuesta es el paso final en tu flujo de trabajo que formatea y envía una respuesta estructurada a las llamadas API. Es como la declaración "return" para todo tu flujo de trabajo—empaqueta los resultados y los envía de vuelta. + +
+ Configuración del bloque de respuesta +
+ + + Los bloques de respuesta son bloques terminales - finalizan la ejecución del flujo de trabajo y no pueden conectarse a otros bloques. + + +## Descripción general + +El bloque de Respuesta te permite: + + + + Formatear respuestas API: Estructurar los resultados del flujo de trabajo en respuestas HTTP adecuadas + + + Establecer códigos de estado: Configurar códigos de estado HTTP apropiados según los resultados del flujo de trabajo + + + Controlar encabezados: Añadir encabezados personalizados para respuestas API y webhooks + + + Transformar datos: Convertir variables del flujo de trabajo en formatos de respuesta amigables para el cliente + + + +## Cómo funciona + +El bloque de Respuesta finaliza la ejecución del flujo de trabajo: + +1. **Recopilar datos** - Reúne variables y salidas de bloques anteriores +2. **Formatear respuesta** - Estructura los datos según tu configuración +3. **Establecer detalles HTTP** - Aplica códigos de estado y encabezados +4. **Enviar respuesta** - Devuelve la respuesta formateada al solicitante de la API + +## Cuándo necesitas bloques de respuesta + +- **Endpoints API**: Cuando tu flujo de trabajo es llamado vía API, los bloques de Respuesta formatean los datos de retorno +- **Webhooks**: Devuelven confirmación o datos al sistema que realiza la llamada +- **Pruebas**: Ver resultados formateados al probar tu flujo de trabajo + +## Dos formas de construir respuestas + +### Modo constructor (recomendado) +Interfaz visual para construir la estructura de respuesta: +- Arrastrar y soltar campos +- Referenciar variables de flujo de trabajo fácilmente +- Vista previa visual de la estructura de respuesta + +### Modo editor (avanzado) +Escribir JSON directamente: +- Control total sobre el formato de respuesta +- Soporte para estructuras anidadas complejas +- Usar sintaxis `` para valores dinámicos + +## Opciones de configuración + +### Datos de respuesta + +Los datos de respuesta son el contenido principal que se enviará de vuelta al solicitante de la API. Deben estar formateados como JSON y pueden incluir: + +- Valores estáticos +- Referencias dinámicas a variables de flujo de trabajo usando la sintaxis `` +- Objetos y matrices anidados +- Cualquier estructura JSON válida + +### Código de estado + +Establece el código de estado HTTP para la respuesta. Los códigos de estado comunes incluyen: + + + +
    +
  • 200: OK - Respuesta estándar de éxito
  • +
  • 201: Creado - Recurso creado con éxito
  • +
  • 204: Sin contenido - Éxito sin cuerpo de respuesta
  • +
+
+ +
    +
  • 400: Solicitud incorrecta - Parámetros de solicitud inválidos
  • +
  • 401: No autorizado - Se requiere autenticación
  • +
  • 404: No encontrado - El recurso no existe
  • +
  • 422: Entidad no procesable - Errores de validación
  • +
+
+ +
    +
  • 500: Error interno del servidor - Error del lado del servidor
  • +
  • 502: Puerta de enlace incorrecta - Error de servicio externo
  • +
  • 503: Servicio no disponible - Servicio temporalmente inactivo
  • +
+
+
+ +
+ El código de estado predeterminado es 200 si no se especifica. +
+ +### Cabeceras de respuesta + +Configura cabeceras HTTP adicionales para incluir en la respuesta. + +Los encabezados se configuran como pares clave-valor: + +| Clave | Valor | +|-----|-------| +| Content-Type | application/json | +| Cache-Control | no-cache | +| X-API-Version | 1.0 | + +## Ejemplos de casos de uso + +### Respuesta del punto final de la API + +
+

Escenario: Devolver datos estructurados desde una API de búsqueda

+
    +
  1. El flujo de trabajo procesa la consulta de búsqueda y recupera resultados
  2. +
  3. El bloque de función formatea y pagina los resultados
  4. +
  5. El bloque de respuesta devuelve JSON con datos, paginación y metadatos
  6. +
  7. El cliente recibe una respuesta estructurada con estado 200
  8. +
+
+ +### Confirmación de webhook + +
+

Escenario: Confirmar recepción y procesamiento del webhook

+
    +
  1. El disparador de webhook recibe datos del sistema externo
  2. +
  3. El flujo de trabajo procesa los datos entrantes
  4. +
  5. El bloque de respuesta devuelve una confirmación con el estado del procesamiento
  6. +
  7. El sistema externo recibe la confirmación
  8. +
+
+ +### Manejo de respuestas de error + +
+

Escenario: Devolver respuestas de error apropiadas

+
    +
  1. El bloque de condición detecta fallos de validación o errores del sistema
  2. +
  3. El enrutador dirige hacia la ruta de manejo de errores
  4. +
  5. El bloque de respuesta devuelve estado 400/500 con detalles del error
  6. +
  7. El cliente recibe información estructurada del error
  8. +
+
+ +## Entradas y salidas + + + +
    +
  • + Datos de respuesta: Estructura JSON para el cuerpo de la respuesta +
  • +
  • + Código de estado: Código de estado HTTP (predeterminado: 200) +
  • +
  • + Encabezados: Encabezados HTTP personalizados como pares clave-valor +
  • +
  • + Modo: Modo Constructor o Editor para la construcción de respuestas +
  • +
+
+ +
    +
  • + response.data: El cuerpo de respuesta estructurado +
  • +
  • + response.status: Código de estado HTTP enviado +
  • +
  • + response.headers: Encabezados incluidos en la respuesta +
  • +
  • + response.success: Booleano que indica finalización exitosa +
  • +
+
+ +
    +
  • + Respuesta HTTP: Respuesta completa enviada al solicitante de la API +
  • +
  • + Terminación del flujo de trabajo: Finaliza la ejecución del flujo de trabajo +
  • +
  • + Acceso: Los bloques de respuesta son terminales - no hay bloques subsiguientes +
  • +
+
+
+ +## Referencias de variables + +Utiliza la sintaxis `` para insertar dinámicamente variables del flujo de trabajo en tu respuesta: + +```json +{ + "user": { + "id": "", + "name": "", + "email": "" + }, + "query": "", + "results": "", + "totalFound": "", + "processingTime": "ms" +} +``` + + + Los nombres de variables distinguen entre mayúsculas y minúsculas y deben coincidir exactamente con las variables disponibles en tu flujo de trabajo. + + +## Mejores prácticas + +- **Usa códigos de estado significativos**: Elige códigos de estado HTTP apropiados que reflejen con precisión el resultado del flujo de trabajo +- **Estructura tus respuestas de manera consistente**: Mantén una estructura JSON consistente en todos tus endpoints de API para una mejor experiencia del desarrollador +- **Incluye metadatos relevantes**: Añade marcas de tiempo e información de versión para ayudar con la depuración y el monitoreo +- **Maneja los errores con elegancia**: Utiliza lógica condicional en tu flujo de trabajo para establecer respuestas de error apropiadas con mensajes descriptivos +- **Valida las referencias de variables**: Asegúrate de que todas las variables referenciadas existan y contengan los tipos de datos esperados antes de que se ejecute el bloque de Respuesta diff --git a/apps/docs/content/docs/es/blocks/router.mdx b/apps/docs/content/docs/es/blocks/router.mdx new file mode 100644 index 0000000000..2491508ae0 --- /dev/null +++ b/apps/docs/content/docs/es/blocks/router.mdx @@ -0,0 +1,225 @@ +--- +title: Router +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +El bloque Router utiliza IA para decidir de manera inteligente qué camino debe tomar tu flujo de trabajo a continuación, dirigiendo la ejecución del flujo de trabajo según condiciones o lógica específicas. A diferencia de los bloques de Condición que utilizan reglas simples, los bloques Router pueden entender el contexto y tomar decisiones inteligentes de enrutamiento basadas en el análisis de contenido. + +
+ Bloque Router con múltiples caminos +
+ +## Descripción general + +El bloque Router te permite: + + + + Enrutamiento inteligente de contenido: Usa IA para entender la intención y el contexto + + + Selección dinámica de rutas: Dirige flujos de trabajo basados en análisis de contenido no estructurado + + + Decisiones conscientes del contexto: Toma decisiones inteligentes de enrutamiento más allá de reglas simples + + + Gestión de múltiples rutas: Maneja flujos de trabajo complejos con múltiples destinos potenciales + + + +## Router vs bloques de Condición + + + + - Se necesita análisis de contenido impulsado por IA + - Contenido no estructurado o tipos de contenido variables + - Enrutamiento basado en intención (p. ej., "dirigir tickets de soporte a departamentos") + - Se requiere toma de decisiones consciente del contexto + + + - Decisiones simples basadas en reglas + - Datos estructurados o comparaciones numéricas + - Se necesita enrutamiento rápido y determinista + - Lógica booleana suficiente + + + +## Cómo funciona + +El bloque Router: + + + + Analiza el contenido: Utiliza un LLM para entender el contenido y el contexto de entrada + + + Evalúa objetivos: Compara el contenido con los bloques de destino disponibles + + + Selecciona el destino: Identifica la ruta más apropiada basada en la intención + + + Ejecuta el enrutamiento: Dirige el flujo de trabajo al bloque seleccionado + + + +## Opciones de configuración + +### Contenido/Prompt + +El contenido o prompt que el Router analizará para tomar decisiones de enrutamiento. Esto puede ser: + +- Una consulta o entrada directa del usuario +- Resultado de un bloque anterior +- Un mensaje generado por el sistema + +### Bloques de destino + +Los posibles bloques de destino entre los que el Router puede seleccionar. El Router detectará automáticamente los bloques conectados, pero también puedes: + +- Personalizar las descripciones de los bloques de destino para mejorar la precisión del enrutamiento +- Especificar criterios de enrutamiento para cada bloque de destino +- Excluir ciertos bloques para que no sean considerados como destinos de enrutamiento + +### Selección de modelo + +Elige un modelo de IA para potenciar la decisión de enrutamiento: + +**OpenAI**: GPT-4o, o1, o3, o4-mini, gpt-4.1 \ +**Anthropic**: Claude 3.7 Sonnet \ +**Google**: Gemini 2.5 Pro, Gemini 2.0 Flash \ +**Otros proveedores**: Groq, Cerebras, xAI, DeepSeek \ +**Modelos locales**: Cualquier modelo ejecutándose en Ollama + +
+
+ +**Recomendación**: Utiliza modelos con fuertes capacidades de razonamiento como GPT-4o o Claude 3.7 Sonnet para decisiones de enrutamiento más precisas. + +### Clave API + +Tu clave API para el proveedor de LLM seleccionado. Esta se almacena de forma segura y se utiliza para la autenticación. + +### Acceso a los resultados + +Después de que un router tome una decisión, puedes acceder a sus resultados: + +- **``**: Resumen del prompt de enrutamiento utilizado +- **``**: Detalles del bloque de destino elegido +- **``**: Estadísticas de uso de tokens del LLM +- **``**: Resumen de costos para la llamada de enrutamiento (entrada, salida, total) +- **``**: El modelo utilizado para la toma de decisiones + +## Funciones avanzadas + +### Criterios de enrutamiento personalizados + +Define criterios específicos para cada bloque de destino: + +```javascript +// Example routing descriptions +Target Block 1: "Technical support issues, API problems, integration questions" +Target Block 2: "Billing inquiries, subscription changes, payment issues" +Target Block 3: "General questions, feedback, feature requests" +``` + +## Entradas y salidas + + + +
    +
  • + Contenido/Prompt: Texto a analizar para decisiones de enrutamiento +
  • +
  • + Bloques de destino: Bloques conectados como destinos potenciales +
  • +
  • + Modelo: Modelo de IA para análisis de enrutamiento +
  • +
  • + Clave API: Autenticación para el proveedor LLM seleccionado +
  • +
+
+ +
    +
  • + router.prompt: Resumen del prompt de enrutamiento utilizado +
  • +
  • + router.selected_path: Detalles del destino elegido +
  • +
  • + router.tokens: Estadísticas de uso de tokens +
  • +
  • + router.cost: Resumen de costos para la llamada de enrutamiento (entrada, salida, total) +
  • +
  • + router.model: Modelo utilizado para la toma de decisiones +
  • +
+
+
+ +## Ejemplos de casos de uso + +### Clasificación de soporte al cliente + +
+

Escenario: Enrutar tickets de soporte a departamentos especializados

+
    +
  1. El usuario envía una solicitud de soporte mediante un formulario
  2. +
  3. El enrutador analiza el contenido y contexto del ticket
  4. +
  5. Problemas técnicos → Agente de soporte de ingeniería
  6. +
  7. Preguntas de facturación → Agente de soporte financiero
  8. +
+
+ +### Clasificación de contenido + +
+

Escenario: Clasificar y enrutar contenido generado por usuarios

+
    +
  1. El usuario envía contenido o comentarios
  2. +
  3. El enrutador analiza el tipo de contenido y el sentimiento
  4. +
  5. Solicitudes de funciones → Flujo de trabajo del equipo de producto
  6. +
  7. Informes de errores → Flujo de trabajo de soporte técnico
  8. +
+
+ +### Calificación de leads + +
+

Escenario: Enrutar leads según criterios de calificación

+
    +
  1. Información del lead capturada desde un formulario
  2. +
  3. El enrutador analiza el tamaño de la empresa, la industria y las necesidades
  4. +
  5. Leads empresariales → Equipo de ventas con precios personalizados
  6. +
  7. Leads de PYMES → Flujo de incorporación autoservicio
  8. +
+
+ +## Mejores prácticas + +- **Proporcionar descripciones claras de destino**: Ayuda al enrutador a entender cuándo seleccionar cada destino con descripciones específicas y detalladas +- **Usar criterios de enrutamiento específicos**: Define condiciones claras y ejemplos para cada ruta para mejorar la precisión +- **Implementar rutas alternativas**: Conecta un destino predeterminado para cuando ninguna ruta específica sea apropiada +- **Probar con entradas diversas**: Asegúrate de que el enrutador maneja varios tipos de entrada, casos extremos y contenido inesperado +- **Monitorear el rendimiento del enrutamiento**: Revisa las decisiones de enrutamiento regularmente y refina los criterios basándote en patrones de uso reales +- **Elegir modelos apropiados**: Utiliza modelos con fuertes capacidades de razonamiento para decisiones de enrutamiento complejas diff --git a/apps/docs/content/docs/es/blocks/workflow.mdx b/apps/docs/content/docs/es/blocks/workflow.mdx new file mode 100644 index 0000000000..4377d0ac43 --- /dev/null +++ b/apps/docs/content/docs/es/blocks/workflow.mdx @@ -0,0 +1,168 @@ +--- +title: Flujo de trabajo +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +El bloque de Flujo de trabajo te permite ejecutar otros flujos de trabajo como componentes reutilizables dentro de tu flujo de trabajo actual. Esto permite un diseño modular, reutilización de código y la creación de flujos de trabajo complejos anidados que pueden componerse a partir de flujos de trabajo más pequeños y enfocados. + +
+ Bloque de Flujo de trabajo +
+ + + Los bloques de Flujo de trabajo permiten un diseño modular al permitirte componer flujos de trabajo complejos a partir de componentes más pequeños y reutilizables. + + +## Descripción general + +El bloque de Flujo de trabajo sirve como puente entre flujos de trabajo, permitiéndote: + + + + Reutilizar flujos de trabajo existentes: Ejecutar flujos de trabajo previamente creados como componentes dentro de nuevos flujos de trabajo + + + Crear diseños modulares: Desglosar procesos complejos en flujos de trabajo más pequeños y manejables + + + Mantener la separación de responsabilidades: Mantener diferentes lógicas de negocio aisladas en flujos de trabajo separados + + + Facilitar la colaboración en equipo: Compartir y reutilizar flujos de trabajo entre diferentes proyectos y miembros del equipo + + + +## Cómo funciona + +El bloque de Flujo de trabajo: + +1. Toma una referencia a otro flujo de trabajo en tu espacio de trabajo +2. Pasa datos de entrada desde el flujo de trabajo actual al flujo de trabajo hijo (disponible a través de start.input) +3. Ejecuta el flujo de trabajo hijo en un contexto aislado +4. Devuelve el resultado al flujo de trabajo padre para su posterior procesamiento + +## Opciones de configuración + +### Selección de flujo de trabajo + +Elige qué flujo de trabajo ejecutar desde una lista desplegable de flujos de trabajo disponibles en tu espacio de trabajo. La lista incluye: + +- Todos los flujos de trabajo a los que tienes acceso en el espacio de trabajo actual +- Flujos de trabajo compartidos contigo por otros miembros del equipo +- Tanto flujos de trabajo habilitados como deshabilitados (aunque solo los habilitados pueden ser ejecutados) + +### Contexto de ejecución + +El flujo de trabajo secundario se ejecuta con: + +- Su propio contexto de ejecución aislado +- Acceso a los mismos recursos del espacio de trabajo (claves API, variables de entorno) +- Verificaciones adecuadas de permisos y membresía del espacio de trabajo +- Tracespan anidado en el registro de ejecución + + + **Detección de ciclos**: El sistema detecta y previene automáticamente dependencias circulares entre flujos de trabajo para evitar bucles infinitos. + + +## Entradas y salidas + + + +
    +
  • + Selección de flujo de trabajo: Elige qué flujo de trabajo ejecutar +
  • +
  • + Datos de entrada: Variable o referencia de bloque para pasar al flujo de trabajo secundario +
  • +
  • + Contexto de ejecución: Entorno aislado con recursos del espacio de trabajo +
  • +
+
+ +
    +
  • + workflow.success: Booleano que indica el estado de finalización +
  • +
  • + workflow.childWorkflowName: Nombre del flujo de trabajo secundario ejecutado +
  • +
  • + workflow.result: Resultado devuelto por el flujo de trabajo secundario +
  • +
  • + workflow.error: Detalles del error si el flujo de trabajo falló +
  • +
+
+ +
    +
  • + Respuesta del flujo de trabajo: Salida principal del flujo de trabajo secundario +
  • +
  • + Estado de ejecución: Estado de éxito e información de error +
  • +
  • + Acceso: Disponible en bloques después del flujo de trabajo +
  • +
+
+
+ +## Ejemplos de casos de uso + +### Incorporación modular de clientes + +
+

Escenario: Dividir la incorporación compleja en componentes reutilizables

+
    +
  1. El flujo de trabajo principal recibe datos del cliente
  2. +
  3. El bloque de flujo de trabajo ejecuta el flujo de validación
  4. +
  5. El bloque de flujo de trabajo ejecuta el flujo de configuración de cuenta
  6. +
  7. El bloque de flujo de trabajo ejecuta el flujo de correo de bienvenida
  8. +
+
+ +### Arquitectura de microservicios + +
+

Escenario: Crear flujos de trabajo de servicios independientes

+
    +
  1. El flujo de trabajo de procesamiento de pagos gestiona transacciones
  2. +
  3. El flujo de trabajo de gestión de inventario actualiza el stock
  4. +
  5. El flujo de trabajo de notificaciones envía confirmaciones
  6. +
  7. El flujo de trabajo principal orquesta todos los servicios
  8. +
+
+ +### Procesamiento condicional + +
+

Escenario: Ejecutar diferentes flujos de trabajo según condiciones

+
    +
  1. El bloque de condición evalúa el tipo de usuario
  2. +
  3. Usuarios empresariales → Flujo de trabajo de aprobación complejo
  4. +
  5. Usuarios estándar → Flujo de trabajo de aprobación simple
  6. +
  7. Usuarios gratuitos → Flujo de trabajo de procesamiento básico
  8. +
+
+ +## Mejores prácticas + +- **Mantén los flujos de trabajo enfocados**: Diseña flujos de trabajo secundarios para manejar tareas específicas y bien definidas con entradas y salidas claras +- **Minimiza la profundidad de anidación**: Evita jerarquías de flujos de trabajo profundamente anidadas para mejorar la mantenibilidad y el rendimiento +- **Maneja los errores con elegancia**: Implementa un manejo adecuado de errores para fallos en flujos de trabajo secundarios y proporciona mecanismos alternativos +- **Prueba de forma independiente**: Asegúrate de que los flujos de trabajo secundarios puedan ser probados y validados independientemente de los flujos de trabajo principales +- **Usa nomenclatura semántica**: Asigna a los flujos de trabajo nombres descriptivos que indiquen claramente su propósito y funcionalidad diff --git a/apps/docs/content/docs/es/connections/basics.mdx b/apps/docs/content/docs/es/connections/basics.mdx new file mode 100644 index 0000000000..0ff67f9cc5 --- /dev/null +++ b/apps/docs/content/docs/es/connections/basics.mdx @@ -0,0 +1,43 @@ +--- +title: Conceptos básicos de conexión +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' + +## Cómo funcionan las conexiones + +Las conexiones son las vías que permiten que los datos fluyan entre bloques en tu flujo de trabajo. En Sim, las conexiones definen cómo la información pasa de un bloque a otro, permitiendo el flujo de datos a través de tu flujo de trabajo. + + + Cada conexión representa una relación dirigida donde los datos fluyen desde la salida de un bloque de origen + hacia la entrada de un bloque de destino. + + +### Creación de conexiones + + + + Seleccionar bloque de origen: Haz clic en el puerto de salida del bloque desde el que quieres conectar + + + Dibujar conexión: Arrastra hasta el puerto de entrada del bloque de destino + + + Confirmar conexión: Suelta para crear la conexión + + + +### Flujo de conexión + +El flujo de datos a través de las conexiones sigue estos principios: + +1. **Flujo direccional**: Los datos siempre fluyen de las salidas a las entradas +2. **Orden de ejecución**: Los bloques se ejecutan en orden según sus conexiones +3. **Transformación de datos**: Los datos pueden transformarse al pasar entre bloques +4. **Rutas condicionales**: Algunos bloques (como Router y Condition) pueden dirigir el flujo a diferentes rutas + + + Eliminar una conexión detendrá inmediatamente el flujo de datos entre los bloques. Asegúrate de que esto es + lo que deseas antes de eliminar conexiones. + diff --git a/apps/docs/content/docs/es/connections/data-structure.mdx b/apps/docs/content/docs/es/connections/data-structure.mdx new file mode 100644 index 0000000000..bcc9f1e371 --- /dev/null +++ b/apps/docs/content/docs/es/connections/data-structure.mdx @@ -0,0 +1,195 @@ +--- +title: Estructura de datos de conexión +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + +Cuando conectas bloques, entender la estructura de datos de las diferentes salidas de bloques es importante porque la estructura de datos de salida del bloque de origen determina qué valores están disponibles en el bloque de destino. Cada tipo de bloque produce una estructura de salida específica a la que puedes hacer referencia en bloques posteriores. + + + Entender estas estructuras de datos es esencial para utilizar eficazmente las etiquetas de conexión y + acceder a los datos correctos en tus flujos de trabajo. + + +## Estructuras de salida de bloques + +Diferentes tipos de bloques producen diferentes estructuras de salida. Esto es lo que puedes esperar de cada tipo de bloque: + + + + + ```json + { + "content": "The generated text response", + "model": "gpt-4o", + "tokens": { + "prompt": 120, + "completion": 85, + "total": 205 + }, + "toolCalls": [...], + "cost": [...], + "usage": [...] + } + ``` + + ### Campos de salida del bloque de agente + + - **content**: La respuesta de texto principal generada por el agente + - **model**: El modelo de IA utilizado (p. ej., "gpt-4o", "claude-3-opus") + - **tokens**: Estadísticas de uso de tokens + - **prompt**: Número de tokens en el prompt + - **completion**: Número de tokens en la respuesta + - **total**: Total de tokens utilizados + - **toolCalls**: Array de llamadas a herramientas realizadas por el agente (si las hay) + - **cost**: Array de objetos de costo para cada llamada a herramienta (si las hay) + - **usage**: Estadísticas de uso de tokens para toda la respuesta + + + + + ```json + { + "data": "Response data", + "status": 200, + "headers": { + "content-type": "application/json", + "cache-control": "no-cache" + } + } + ``` + + ### Campos de salida del bloque de API + + - **data**: Los datos de respuesta de la API (puede ser de cualquier tipo) + - **status**: Código de estado HTTP de la respuesta + - **headers**: Cabeceras HTTP devueltas por la API + + + + + ```json + { + "result": "Function return value", + "stdout": "Console output", + } + ``` + + ### Campos de salida del bloque de función + + - **result**: El valor de retorno de la función (puede ser de cualquier tipo) + - **stdout**: Salida de consola capturada durante la ejecución de la función + + + + + ```json + { + "content": "Evaluation summary", + "model": "gpt-5", + "tokens": { + "prompt": 120, + "completion": 85, + "total": 205 + }, + "metric1": 8.5, + "metric2": 7.2, + "metric3": 9.0 + } + ``` + + ### Campos de salida del bloque evaluador + + - **content**: Resumen de la evaluación + - **model**: El modelo de IA utilizado para la evaluación + - **tokens**: Estadísticas de uso de tokens + - **[metricName]**: Puntuación para cada métrica definida en el evaluador (campos dinámicos) + + + + + ```json + { + "content": "Original content passed through", + "conditionResult": true, + "selectedPath": { + "blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1", + "blockType": "agent", + "blockTitle": "Follow-up Agent" + }, + "selectedConditionId": "condition-1" + } + ``` + + ### Campos de salida del bloque de condición + + - **content**: El contenido original que se transmite + - **conditionResult**: Resultado booleano de la evaluación de la condición + - **selectedPath**: Información sobre la ruta seleccionada + - **blockId**: ID del siguiente bloque en la ruta seleccionada + - **blockType**: Tipo del siguiente bloque + - **blockTitle**: Título del siguiente bloque + - **selectedConditionId**: ID de la condición seleccionada + + + + + ```json + { + "content": "Routing decision", + "model": "gpt-4o", + "tokens": { + "prompt": 120, + "completion": 85, + "total": 205 + }, + "selectedPath": { + "blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1", + "blockType": "agent", + "blockTitle": "Customer Service Agent" + } + } + ``` + + ### Campos de salida del bloque enrutador + + - **content**: El texto de decisión de enrutamiento + - **model**: El modelo de IA utilizado para el enrutamiento + - **tokens**: Estadísticas de uso de tokens + - **selectedPath**: Información sobre la ruta seleccionada + - **blockId**: ID del bloque de destino seleccionado + - **blockType**: Tipo del bloque seleccionado + - **blockTitle**: Título del bloque seleccionado + + + + +## Estructuras de salida personalizadas + +Algunos bloques pueden producir estructuras de salida personalizadas según su configuración: + +1. **Bloques de agente con formato de respuesta**: Al usar un formato de respuesta en un bloque de agente, la estructura de salida coincidirá con el esquema definido en lugar de la estructura estándar. + +2. **Bloques de función**: El campo `result` puede contener cualquier estructura de datos devuelta por el código de tu función. + +3. **Bloques de API**: El campo `data` contendrá lo que devuelva la API, que podría ser cualquier estructura JSON válida. + + + Verifica siempre la estructura de salida real de tus bloques durante el desarrollo para asegurarte de que + estás referenciando los campos correctos en tus conexiones. + + +## Estructuras de datos anidadas + +Muchas salidas de bloques contienen estructuras de datos anidadas. Puedes acceder a estas utilizando la notación de punto en las etiquetas de conexión: + +``` + +``` + +Por ejemplo: + +- `` - Accede al total de tokens desde un bloque de Agente +- `` - Accede al ID del primer resultado de una respuesta de API +- `` - Accede a un campo anidado en el resultado de un bloque de Función diff --git a/apps/docs/content/docs/es/connections/index.mdx b/apps/docs/content/docs/es/connections/index.mdx new file mode 100644 index 0000000000..39f68624a9 --- /dev/null +++ b/apps/docs/content/docs/es/connections/index.mdx @@ -0,0 +1,42 @@ +--- +title: Conexiones +description: Conecta tus bloques entre sí. +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { ConnectIcon } from '@/components/icons' +import { Video } from '@/components/ui/video' + +Las conexiones son las vías que permiten que los datos fluyan entre bloques en tu flujo de trabajo. Definen cómo se pasa la información de un bloque a otro, permitiéndote crear procesos sofisticados de múltiples pasos. + + + Las conexiones correctamente configuradas son esenciales para crear flujos de trabajo efectivos. Determinan cómo + se mueven los datos a través de tu sistema y cómo los bloques interactúan entre sí. + + +
+
+ +## Tipos de conexiones + +Sim admite diferentes tipos de conexiones que permiten varios patrones de flujo de trabajo: + + + + Aprende cómo funcionan las conexiones y cómo crearlas en tus flujos de trabajo + + + Comprende cómo usar etiquetas de conexión para referenciar datos entre bloques + + + Explora las estructuras de datos de salida de diferentes tipos de bloques + + + Aprende técnicas para acceder y manipular datos conectados + + + Sigue los patrones recomendados para una gestión eficaz de conexiones + + diff --git a/apps/docs/content/docs/es/connections/tags.mdx b/apps/docs/content/docs/es/connections/tags.mdx new file mode 100644 index 0000000000..8a7085e0a0 --- /dev/null +++ b/apps/docs/content/docs/es/connections/tags.mdx @@ -0,0 +1,109 @@ +--- +title: Etiquetas de conexión +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Video } from '@/components/ui/video' + +Las etiquetas de conexión son representaciones visuales de los datos disponibles desde bloques conectados, proporcionando una manera fácil de referenciar datos entre bloques y salidas de bloques anteriores en tu flujo de trabajo. + +
+
+ +### ¿Qué son las etiquetas de conexión? + +Las etiquetas de conexión son elementos interactivos que aparecen cuando los bloques están conectados. Representan los datos que pueden fluir de un bloque a otro y te permiten: + +- Visualizar datos disponibles de bloques de origen +- Referenciar campos de datos específicos en bloques de destino +- Crear flujos de datos dinámicos entre bloques + + + Las etiquetas de conexión facilitan ver qué datos están disponibles de bloques anteriores y usarlos en tu + bloque actual sin tener que recordar estructuras de datos complejas. + + +## Uso de etiquetas de conexión + +Hay dos formas principales de usar etiquetas de conexión en tus flujos de trabajo: + +
+
+

Arrastrar y soltar

+
+ Haz clic en una etiqueta de conexión y arrástrala a los campos de entrada de los bloques de destino. Aparecerá un menú desplegable + mostrando los valores disponibles. +
+
    +
  1. Pasa el cursor sobre una etiqueta de conexión para ver los datos disponibles
  2. +
  3. Haz clic y arrastra la etiqueta a un campo de entrada
  4. +
  5. Selecciona el campo de datos específico del menú desplegable
  6. +
  7. La referencia se inserta automáticamente
  8. +
+
+ +
+

Sintaxis de corchetes angulares

+
+ Escribe <> en los campos de entrada para ver un menú desplegable de valores de conexión disponibles + de bloques anteriores. +
+
    +
  1. Haz clic en cualquier campo de entrada donde quieras usar datos conectados
  2. +
  3. + Escribe <> para activar el menú desplegable de conexión +
  4. +
  5. Navega y selecciona los datos que quieres referenciar
  6. +
  7. Continúa escribiendo o selecciona del menú desplegable para completar la referencia
  8. +
+
+
+ +## Sintaxis de etiquetas + +Las etiquetas de conexión utilizan una sintaxis simple para hacer referencia a los datos: + +``` + +``` + +Donde: + +- `blockName` es el nombre del bloque de origen +- `path.to.data` es la ruta al campo de datos específico + +Por ejemplo: + +- `` - Hace referencia al campo de contenido de un bloque con ID "agent1" +- `` - Hace referencia al nombre del primer usuario en el array de usuarios desde el campo de datos de un bloque con ID "api2" + +## Referencias dinámicas de etiquetas + +Las etiquetas de conexión se evalúan en tiempo de ejecución, lo que significa: + +1. Siempre hacen referencia a los datos más actuales +2. Pueden utilizarse en expresiones y combinarse con texto estático +3. Pueden anidarse dentro de otras estructuras de datos + +### Ejemplos + +```javascript +// Reference in text +"The user's name is " + +// Reference in JSON +{ + "userName": "", + "orderTotal": +} + +// Reference in code +const greeting = "Hello, !"; +const total = * 1.1; // Add 10% tax +``` + + + Cuando utilices etiquetas de conexión en contextos numéricos, asegúrate de que los datos referenciados sean realmente un número + para evitar problemas de conversión de tipos. + diff --git a/apps/docs/content/docs/es/copilot/index.mdx b/apps/docs/content/docs/es/copilot/index.mdx new file mode 100644 index 0000000000..1e004c00ec --- /dev/null +++ b/apps/docs/content/docs/es/copilot/index.mdx @@ -0,0 +1,161 @@ +--- +title: Copilot +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Image } from '@/components/ui/image' +import { MessageCircle, Package, Zap, Infinity as InfinityIcon, Brain, BrainCircuit } from 'lucide-react' + +Copilot es tu asistente integrado en el editor que te ayuda a crear y editar flujos de trabajo con Sim Copilot, así como a entenderlos y mejorarlos. Puede: + +- **Explicar**: Responder preguntas sobre Sim y tu flujo de trabajo actual +- **Guiar**: Sugerir ediciones y mejores prácticas +- **Editar**: Realizar cambios en bloques, conexiones y configuraciones cuando los apruebes + + + Copilot es un servicio gestionado por Sim. Para implementaciones autoalojadas, genera una clave API de Copilot en la aplicación alojada (sim.ai → Configuración → Copilot) + 1. Ve a [sim.ai](https://sim.ai) → Configuración → Copilot y genera una clave API de Copilot + 2. Establece `COPILOT_API_KEY` en tu entorno autoalojado con ese valor + + +## Menú contextual (@) + +Usa el símbolo `@` para hacer referencia a varios recursos y proporcionar a Copilot más contexto sobre tu espacio de trabajo: + +Menú contextual de Copilot mostrando opciones de referencia disponibles + +El menú `@` proporciona acceso a: +- **Chats**: Referencia conversaciones previas con copilot +- **Todos los flujos de trabajo**: Referencia cualquier flujo de trabajo en tu espacio de trabajo +- **Bloques de flujo de trabajo**: Referencia bloques específicos de los flujos de trabajo +- **Bloques**: Referencia tipos de bloques y plantillas +- **Conocimiento**: Referencia tus documentos subidos y base de conocimientos +- **Documentación**: Referencia la documentación de Sim +- **Plantillas**: Referencia plantillas de flujo de trabajo +- **Registros**: Referencia registros de ejecución y resultados + +Esta información contextual ayuda a Copilot a proporcionar asistencia más precisa y relevante para tu caso de uso específico. + +## Modos + + + + + Preguntar + + } + > +
+ Modo de preguntas y respuestas para explicaciones, orientación y sugerencias sin realizar cambios en tu flujo de trabajo. +
+
+ + + Agente + + } + > +
+ Modo de construcción y edición. Copilot propone ediciones específicas (añadir bloques, conectar variables, ajustar configuraciones) y las aplica cuando las apruebas. +
+
+
+ +## Niveles de profundidad + + + + + Rápido + + } + > +
El más rápido y económico. Ideal para ediciones pequeñas, flujos de trabajo simples y ajustes menores.
+
+ + + Auto + + } + > +
Equilibrio entre velocidad y razonamiento. Opción predeterminada recomendada para la mayoría de las tareas.
+
+ + + Avanzado + + } + > +
Mayor capacidad de razonamiento para flujos de trabajo más grandes y ediciones complejas sin perder rendimiento.
+
+ + + Behemoth + + } + > +
Máxima capacidad de razonamiento para planificación profunda, depuración y cambios arquitectónicos complejos.
+
+
+ +### Interfaz de selección de modo + +Puedes cambiar fácilmente entre diferentes modos de razonamiento usando el selector de modo en la interfaz de Copilot: + +Selección de modo de Copilot mostrando el modo Avanzado con el interruptor MAX + +La interfaz te permite: +- **Seleccionar nivel de razonamiento**: Elige entre Rápido, Auto, Avanzado o Behemoth +- **Activar modo MAX**: Activa el interruptor para obtener las máximas capacidades de razonamiento cuando necesites el análisis más exhaustivo +- **Ver descripciones de modos**: Comprende para qué está optimizado cada modo + +Elige tu modo según la complejidad de tu tarea - usa Rápido para preguntas simples y Behemoth para cambios arquitectónicos complejos. + +## Facturación y cálculo de costos + +### Cómo se calculan los costos + +El uso de Copilot se factura por token del LLM subyacente: + +- **Tokens de entrada**: facturados a la tarifa base del proveedor (**a costo**) +- **Tokens de salida**: facturados a **1,5×** la tarifa base de salida del proveedor + +```javascript +copilotCost = (inputTokens × inputPrice + outputTokens × (outputPrice × 1.5)) / 1,000,000 +``` + +| Componente | Tarifa aplicada | +|------------|----------------------| +| Entrada | inputPrice | +| Salida | outputPrice × 1.5 | + + + Los precios mostrados reflejan las tarifas a partir del 4 de septiembre de 2025. Consulte la documentación del proveedor para conocer los precios actuales. + + + + Los precios de los modelos son por millón de tokens. El cálculo divide por 1.000.000 para obtener el costo real. Consulte la página de Cálculo de Costos para antecedentes y ejemplos. + diff --git a/apps/docs/content/docs/es/execution/api.mdx b/apps/docs/content/docs/es/execution/api.mdx new file mode 100644 index 0000000000..f412ac550a --- /dev/null +++ b/apps/docs/content/docs/es/execution/api.mdx @@ -0,0 +1,551 @@ +--- +title: API externa +--- + +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { CodeBlock } from 'fumadocs-ui/components/codeblock' +import { Video } from '@/components/ui/video' + +Sim proporciona una API externa completa para consultar registros de ejecución de flujos de trabajo y configurar webhooks para notificaciones en tiempo real cuando los flujos de trabajo se completan. + +## Autenticación + +Todas las solicitudes a la API requieren una clave de API pasada en el encabezado `x-api-key`: + +```bash +curl -H "x-api-key: YOUR_API_KEY" \ + https://sim.ai/api/v1/logs?workspaceId=YOUR_WORKSPACE_ID +``` + +Puedes generar claves de API desde la configuración de usuario en el panel de control de Sim. + +## API de registros + +Todas las respuestas de la API incluyen información sobre tus límites de ejecución de flujos de trabajo y su uso: + +```json +"limits": { + "workflowExecutionRateLimit": { + "sync": { + "limit": 60, // Max sync workflow executions per minute + "remaining": 58, // Remaining sync workflow executions + "resetAt": "..." // When the window resets + }, + "async": { + "limit": 60, // Max async workflow executions per minute + "remaining": 59, // Remaining async workflow executions + "resetAt": "..." // When the window resets + } + }, + "usage": { + "currentPeriodCost": 1.234, // Current billing period usage in USD + "limit": 10, // Usage limit in USD + "plan": "pro", // Current subscription plan + "isExceeded": false // Whether limit is exceeded + } +} +``` + +**Nota:** Los límites de tasa en el cuerpo de la respuesta son para ejecuciones de flujos de trabajo. Los límites de tasa para llamar a este endpoint de la API están en los encabezados de respuesta (`X-RateLimit-*`). + +### Consultar registros + +Consulta los registros de ejecución de flujos de trabajo con amplias opciones de filtrado. + + + + + ```http + GET /api/v1/logs + ``` + + **Parámetros requeridos:** + - `workspaceId` - Tu ID de espacio de trabajo + + **Filtros opcionales:** + - `workflowIds` - IDs de flujos de trabajo separados por comas + - `folderIds` - IDs de carpetas separados por comas + - `triggers` - Tipos de disparadores separados por comas: `api`, `webhook`, `schedule`, `manual`, `chat` + - `level` - Filtrar por nivel: `info`, `error` + - `startDate` - Marca de tiempo ISO para el inicio del rango de fechas + - `endDate` - Marca de tiempo ISO para el fin del rango de fechas + - `executionId` - Coincidencia exacta de ID de ejecución + - `minDurationMs` - Duración mínima de ejecución en milisegundos + - `maxDurationMs` - Duración máxima de ejecución en milisegundos + - `minCost` - Costo mínimo de ejecución + - `maxCost` - Costo máximo de ejecución + - `model` - Filtrar por modelo de IA utilizado + + **Paginación:** + - `limit` - Resultados por página (predeterminado: 100) + - `cursor` - Cursor para la siguiente página + - `order` - Orden de clasificación: `desc`, `asc` (predeterminado: desc) + + **Nivel de detalle:** + - `details` - Nivel de detalle de la respuesta: `basic`, `full` (predeterminado: básico) + - `includeTraceSpans` - Incluir intervalos de seguimiento (predeterminado: falso) + - `includeFinalOutput` - Incluir salida final (predeterminado: falso) + + + + ```json + { + "data": [ + { + "id": "log_abc123", + "workflowId": "wf_xyz789", + "executionId": "exec_def456", + "level": "info", + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "cost": { + "total": 0.00234 + }, + "files": null + } + ], + "nextCursor": "eyJzIjoiMjAyNS0wMS0wMVQxMjozNDo1Ni43ODlaIiwiaWQiOiJsb2dfYWJjMTIzIn0", + "limits": { + "workflowExecutionRateLimit": { + "sync": { + "limit": 60, + "remaining": 58, + "resetAt": "2025-01-01T12:35:56.789Z" + }, + "async": { + "limit": 60, + "remaining": 59, + "resetAt": "2025-01-01T12:35:56.789Z" + } + }, + "usage": { + "currentPeriodCost": 1.234, + "limit": 10, + "plan": "pro", + "isExceeded": false + } + } + } + ``` + + + + +### Obtener detalles del registro + +Recupera información detallada sobre una entrada de registro específica. + + + + + ```http + GET /api/v1/logs/{id} + ``` + + + + + ```json + { + "data": { + "id": "log_abc123", + "workflowId": "wf_xyz789", + "executionId": "exec_def456", + "level": "info", + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "workflow": { + "id": "wf_xyz789", + "name": "My Workflow", + "description": "Process customer data" + }, + "executionData": { + "traceSpans": [...], + "finalOutput": {...} + }, + "cost": { + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + }, + "models": { + "gpt-4o": { + "input": 0.001, + "output": 0.00134, + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + } + } + } + }, + "limits": { + "workflowExecutionRateLimit": { + "sync": { + "limit": 60, + "remaining": 58, + "resetAt": "2025-01-01T12:35:56.789Z" + }, + "async": { + "limit": 60, + "remaining": 59, + "resetAt": "2025-01-01T12:35:56.789Z" + } + }, + "usage": { + "currentPeriodCost": 1.234, + "limit": 10, + "plan": "pro", + "isExceeded": false + } + } + } + } + ``` + + + + +### Obtener detalles de ejecución + +Recupera detalles de ejecución incluyendo la instantánea del estado del flujo de trabajo. + + + + + ```http + GET /api/v1/logs/executions/{executionId} + ``` + + + + + ```json + { + "executionId": "exec_def456", + "workflowId": "wf_xyz789", + "workflowState": { + "blocks": {...}, + "edges": [...], + "loops": {...}, + "parallels": {...} + }, + "executionMetadata": { + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "cost": {...} + } + } + ``` + + + + +## Suscripciones a webhooks + +Recibe notificaciones en tiempo real cuando se completan las ejecuciones de flujos de trabajo. Los webhooks se configuran a través de la interfaz de usuario de Sim en el editor de flujos de trabajo. + +### Configuración + +Los webhooks pueden configurarse para cada flujo de trabajo a través de la interfaz de usuario del editor de flujos de trabajo. Haz clic en el icono de webhook en la barra de control para configurar tus suscripciones a webhooks. + +
+
+ +**Opciones de configuración disponibles:** +- `url`: URL del punto final de tu webhook +- `secret`: Secreto opcional para verificación de firma HMAC +- `includeFinalOutput`: Incluir la salida final del flujo de trabajo en la carga útil +- `includeTraceSpans`: Incluir intervalos de seguimiento de ejecución detallados +- `includeRateLimits`: Incluir información del límite de tasa del propietario del flujo de trabajo +- `includeUsageData`: Incluir datos de uso y facturación del propietario del flujo de trabajo +- `levelFilter`: Array de niveles de registro a recibir (`info`, `error`) +- `triggerFilter`: Array de tipos de disparadores a recibir (`api`, `webhook`, `schedule`, `manual`, `chat`) +- `active`: Habilitar/deshabilitar la suscripción al webhook + +### Carga útil del webhook + +Cuando se completa la ejecución de un flujo de trabajo, Sim envía una solicitud POST a tu URL de webhook: + +```json +{ + "id": "evt_123", + "type": "workflow.execution.completed", + "timestamp": 1735925767890, + "data": { + "workflowId": "wf_xyz789", + "executionId": "exec_def456", + "status": "success", + "level": "info", + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "cost": { + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + }, + "models": { + "gpt-4o": { + "input": 0.001, + "output": 0.00134, + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + } + } + } + }, + "files": null, + "finalOutput": {...}, // Only if includeFinalOutput=true + "traceSpans": [...], // Only if includeTraceSpans=true + "rateLimits": {...}, // Only if includeRateLimits=true + "usage": {...} // Only if includeUsageData=true + }, + "links": { + "log": "/v1/logs/log_abc123", + "execution": "/v1/logs/executions/exec_def456" + } +} +``` + +### Cabeceras de webhook + +Cada solicitud de webhook incluye estas cabeceras: + +- `sim-event`: Tipo de evento (siempre `workflow.execution.completed`) +- `sim-timestamp`: Marca de tiempo Unix en milisegundos +- `sim-delivery-id`: ID único de entrega para idempotencia +- `sim-signature`: Firma HMAC-SHA256 para verificación (si se configura un secreto) +- `Idempotency-Key`: Igual que el ID de entrega para detección de duplicados + +### Verificación de firma + +Si configuras un secreto de webhook, verifica la firma para asegurar que el webhook proviene de Sim: + + + + + ```javascript + import crypto from 'crypto'; + + function verifyWebhookSignature(body, signature, secret) { + const [timestampPart, signaturePart] = signature.split(','); + const timestamp = timestampPart.replace('t=', ''); + const expectedSignature = signaturePart.replace('v1=', ''); + + const signatureBase = `${timestamp}.${body}`; + const hmac = crypto.createHmac('sha256', secret); + hmac.update(signatureBase); + const computedSignature = hmac.digest('hex'); + + return computedSignature === expectedSignature; + } + + // In your webhook handler + app.post('/webhook', (req, res) => { + const signature = req.headers['sim-signature']; + const body = JSON.stringify(req.body); + + if (!verifyWebhookSignature(body, signature, process.env.WEBHOOK_SECRET)) { + return res.status(401).send('Invalid signature'); + } + + // Process the webhook... + }); + ``` + + + + + ```python + import hmac + import hashlib + import json + + def verify_webhook_signature(body: str, signature: str, secret: str) -> bool: + timestamp_part, signature_part = signature.split(',') + timestamp = timestamp_part.replace('t=', '') + expected_signature = signature_part.replace('v1=', '') + + signature_base = f"{timestamp}.{body}" + computed_signature = hmac.new( + secret.encode(), + signature_base.encode(), + hashlib.sha256 + ).hexdigest() + + return hmac.compare_digest(computed_signature, expected_signature) + + # In your webhook handler + @app.route('/webhook', methods=['POST']) + def webhook(): + signature = request.headers.get('sim-signature') + body = json.dumps(request.json) + + if not verify_webhook_signature(body, signature, os.environ['WEBHOOK_SECRET']): + return 'Invalid signature', 401 + + # Process the webhook... + ``` + + + + +### Política de reintentos + +Las entregas de webhook fallidas se reintentan con retroceso exponencial y fluctuación: + +- Máximo de intentos: 5 +- Retrasos de reintento: 5 segundos, 15 segundos, 1 minuto, 3 minutos, 10 minutos +- Fluctuación: Hasta un 10% de retraso adicional para prevenir el efecto de manada +- Solo las respuestas HTTP 5xx y 429 activan reintentos +- Las entregas agotan el tiempo de espera después de 30 segundos + + + Las entregas de webhook se procesan de forma asíncrona y no afectan al rendimiento de ejecución del flujo de trabajo. + + +## Mejores prácticas + +1. **Estrategia de sondeo**: Al sondear registros, utiliza paginación basada en cursor con `order=asc` y `startDate` para obtener nuevos registros de manera eficiente. + +2. **Seguridad de webhook**: Siempre configura un secreto de webhook y verifica las firmas para asegurar que las solicitudes provienen de Sim. + +3. **Idempotencia**: Utiliza la cabecera `Idempotency-Key` para detectar y manejar entregas duplicadas de webhook. + +4. **Privacidad**: Por defecto, `finalOutput` y `traceSpans` están excluidos de las respuestas. Habilítalos solo si necesitas los datos y comprendes las implicaciones de privacidad. + +5. **Limitación de tasa**: Implementa retroceso exponencial cuando recibas respuestas 429. Consulta la cabecera `Retry-After` para conocer el tiempo de espera recomendado. + +## Limitación de tasa + +La API implementa limitación de tasa para garantizar un uso justo: + +- **Plan gratuito**: 10 solicitudes por minuto +- **Plan Pro**: 30 solicitudes por minuto +- **Plan Team**: 60 solicitudes por minuto +- **Plan Enterprise**: Límites personalizados + +La información del límite de tasa se incluye en los encabezados de respuesta: +- `X-RateLimit-Limit`: Máximo de solicitudes por ventana +- `X-RateLimit-Remaining`: Solicitudes restantes en la ventana actual +- `X-RateLimit-Reset`: Marca de tiempo ISO cuando se reinicia la ventana + +## Ejemplo: Sondeo para nuevos registros + +```javascript +let cursor = null; +const workspaceId = 'YOUR_WORKSPACE_ID'; +const startDate = new Date().toISOString(); + +async function pollLogs() { + const params = new URLSearchParams({ + workspaceId, + startDate, + order: 'asc', + limit: '100' + }); + + if (cursor) { + params.append('cursor', cursor); + } + + const response = await fetch( + `https://sim.ai/api/v1/logs?${params}`, + { + headers: { + 'x-api-key': 'YOUR_API_KEY' + } + } + ); + + if (response.ok) { + const data = await response.json(); + + // Process new logs + for (const log of data.data) { + console.log(`New execution: ${log.executionId}`); + } + + // Update cursor for next poll + if (data.nextCursor) { + cursor = data.nextCursor; + } + } +} + +// Poll every 30 seconds +setInterval(pollLogs, 30000); +``` + +## Ejemplo: Procesamiento de webhooks + +```javascript +import express from 'express'; +import crypto from 'crypto'; + +const app = express(); +app.use(express.json()); + +app.post('/sim-webhook', (req, res) => { + // Verify signature + const signature = req.headers['sim-signature']; + const body = JSON.stringify(req.body); + + if (!verifyWebhookSignature(body, signature, process.env.WEBHOOK_SECRET)) { + return res.status(401).send('Invalid signature'); + } + + // Check timestamp to prevent replay attacks + const timestamp = parseInt(req.headers['sim-timestamp']); + const fiveMinutesAgo = Date.now() - (5 * 60 * 1000); + + if (timestamp < fiveMinutesAgo) { + return res.status(401).send('Timestamp too old'); + } + + // Process the webhook + const event = req.body; + + switch (event.type) { + case 'workflow.execution.completed': + const { workflowId, executionId, status, cost } = event.data; + + if (status === 'error') { + console.error(`Workflow ${workflowId} failed: ${executionId}`); + // Handle error... + } else { + console.log(`Workflow ${workflowId} completed: ${executionId}`); + console.log(`Cost: ${cost.total}`); + // Process successful execution... + } + break; + } + + // Return 200 to acknowledge receipt + res.status(200).send('OK'); +}); + +app.listen(3000, () => { + console.log('Webhook server listening on port 3000'); +}); +``` diff --git a/apps/docs/content/docs/es/execution/basics.mdx b/apps/docs/content/docs/es/execution/basics.mdx new file mode 100644 index 0000000000..12b37c53ee --- /dev/null +++ b/apps/docs/content/docs/es/execution/basics.mdx @@ -0,0 +1,132 @@ +--- +title: Conceptos básicos de ejecución +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +Entender cómo se ejecutan los flujos de trabajo en Sim es clave para crear automatizaciones eficientes y confiables. El motor de ejecución gestiona automáticamente las dependencias, la concurrencia y el flujo de datos para garantizar que tus flujos de trabajo funcionen de manera fluida y predecible. + +## Cómo se ejecutan los flujos de trabajo + +El motor de ejecución de Sim procesa los flujos de trabajo de manera inteligente analizando las dependencias y ejecutando los bloques en el orden más eficiente posible. + +### Ejecución concurrente por defecto + +Múltiples bloques se ejecutan simultáneamente cuando no dependen entre sí. Esta ejecución paralela mejora dramáticamente el rendimiento sin requerir configuración manual. + +Múltiples bloques ejecutándose concurrentemente después del bloque de Inicio + +En este ejemplo, tanto el bloque de agente de Atención al Cliente como el de Investigador Profundo se ejecutan simultáneamente después del bloque de Inicio, maximizando la eficiencia. + +### Combinación automática de salidas + +Cuando los bloques tienen múltiples dependencias, el motor de ejecución espera automáticamente a que todas las dependencias se completen, y luego proporciona sus salidas combinadas al siguiente bloque. No se requiere combinación manual. + +Bloque de función recibiendo automáticamente salidas de múltiples bloques anteriores + +El bloque de Función recibe las salidas de ambos bloques de agente tan pronto como se completan, permitiéndote procesar los resultados combinados. + +### Enrutamiento inteligente + +Los flujos de trabajo pueden ramificarse en múltiples direcciones utilizando bloques de enrutamiento. El motor de ejecución admite tanto el enrutamiento determinista (con bloques de Condición) como el enrutamiento basado en IA (con bloques de Router). + +Flujo de trabajo mostrando ramificación tanto condicional como basada en router + +Este flujo de trabajo demuestra cómo la ejecución puede seguir diferentes caminos basados en condiciones o decisiones de IA, con cada camino ejecutándose independientemente. + +## Tipos de bloques + +Sim proporciona diferentes tipos de bloques que sirven para propósitos específicos en tus flujos de trabajo: + + + + Los **bloques de inicio** inician flujos de trabajo y los **bloques de Webhook** responden a eventos externos. Cada flujo de trabajo necesita un disparador para comenzar la ejecución. + + + + Los **bloques de agente** interactúan con modelos de IA, los **bloques de función** ejecutan código personalizado, y los **bloques de API** conectan con servicios externos. Estos bloques transforman y procesan tus datos. + + + + Los **bloques de enrutador** usan IA para elegir caminos, los **bloques de condición** ramifican basándose en lógica, y los **bloques de bucle/paralelo** manejan iteraciones y concurrencia. + + + + Los **bloques de respuesta** formatean las salidas finales para APIs e interfaces de chat, devolviendo resultados estructurados de tus flujos de trabajo. + + + +Todos los bloques se ejecutan automáticamente basándose en sus dependencias - no necesitas gestionar manualmente el orden de ejecución o el tiempo. + +## Disparadores de ejecución + +Los flujos de trabajo pueden activarse de varias maneras, dependiendo de tu caso de uso: + +### Pruebas manuales +Haz clic en "Ejecutar" en el editor de flujo de trabajo para probar tu flujo de trabajo durante el desarrollo. Perfecto para depuración y validación. + +### Ejecución programada +Configura ejecuciones recurrentes usando expresiones cron. Ideal para procesamiento regular de datos, informes o tareas de mantenimiento. + +### Despliegue de API +Despliega flujos de trabajo como endpoints HTTP que pueden ser llamados programáticamente desde tus aplicaciones. + +### Integración de Webhook +Responde a eventos de servicios externos como GitHub, Stripe o sistemas personalizados en tiempo real. + +### Interfaz de chat +Crea interfaces conversacionales alojadas en subdominios personalizados para aplicaciones de IA orientadas al usuario. + + + Aprende más sobre cada tipo de disparador en la [sección de Disparadores](/triggers) de la documentación. + + +## Monitoreo de ejecución + +Cuando los flujos de trabajo se ejecutan, Sim proporciona visibilidad en tiempo real del proceso de ejecución: + +- **Estados de bloques en vivo**: Ve qué bloques se están ejecutando actualmente, cuáles han completado o fallado +- **Registros de ejecución**: Los registros detallados aparecen en tiempo real mostrando entradas, salidas y cualquier error +- **Métricas de rendimiento**: Realiza seguimiento del tiempo de ejecución y costos para cada bloque +- **Visualización de rutas**: Comprende qué rutas de ejecución se tomaron a través de tu flujo de trabajo + + + Todos los detalles de ejecución son capturados y están disponibles para revisión incluso después de que los flujos de trabajo se completen, ayudando con la depuración y optimización. + + +## Principios clave de ejecución + +Entender estos principios fundamentales te ayudará a construir mejores flujos de trabajo: + +1. **Ejecución basada en dependencias**: Los bloques solo se ejecutan cuando todas sus dependencias han completado +2. **Paralelización automática**: Los bloques independientes se ejecutan simultáneamente sin configuración +3. **Flujo inteligente de datos**: Las salidas fluyen automáticamente a los bloques conectados +4. **Manejo de errores**: Los bloques fallidos detienen su ruta de ejecución pero no afectan rutas independientes +5. **Persistencia de estado**: Todas las salidas de bloques y detalles de ejecución se conservan para depuración + +## Próximos pasos + +Ahora que entiendes los conceptos básicos de ejecución, explora: +- **[Tipos de bloques](/blocks)** - Aprende sobre las capacidades específicas de los bloques +- **[Registro](/execution/logging)** - Monitorea ejecuciones de flujos de trabajo y depura problemas +- **[Cálculo de costos](/execution/costs)** - Comprende y optimiza los costos de flujos de trabajo +- **[Disparadores](/triggers)** - Configura diferentes formas de ejecutar tus flujos de trabajo diff --git a/apps/docs/content/docs/es/execution/costs.mdx b/apps/docs/content/docs/es/execution/costs.mdx new file mode 100644 index 0000000000..78daf6600b --- /dev/null +++ b/apps/docs/content/docs/es/execution/costs.mdx @@ -0,0 +1,186 @@ +--- +title: Cálculo de costos +--- + +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Sim calcula automáticamente los costos de todas las ejecuciones de flujos de trabajo, proporcionando precios transparentes basados en el uso de modelos de IA y cargos de ejecución. Entender estos costos te ayuda a optimizar los flujos de trabajo y gestionar tu presupuesto de manera efectiva. + +## Cómo se calculan los costos + +Cada ejecución de flujo de trabajo incluye dos componentes de costo: + +**Cargo base por ejecución**: $0.001 por ejecución + +**Uso de modelos de IA**: Costo variable basado en el consumo de tokens + +```javascript +modelCost = (inputTokens × inputPrice + outputTokens × outputPrice) / 1,000,000 +totalCost = baseExecutionCharge + modelCost +``` + + + Los precios de los modelos de IA son por millón de tokens. El cálculo divide por 1.000.000 para obtener el costo real. Los flujos de trabajo sin bloques de IA solo incurren en el cargo base de ejecución. + + +## Desglose de modelos en los registros + +Para flujos de trabajo que utilizan bloques de IA, puedes ver información detallada de costos en los registros: + +
+ Desglose de modelos +
+ +El desglose del modelo muestra: +- **Uso de tokens**: Recuentos de tokens de entrada y salida para cada modelo +- **Desglose de costos**: Costos individuales por modelo y operación +- **Distribución de modelos**: Qué modelos se utilizaron y cuántas veces +- **Costo total**: Costo agregado para toda la ejecución del flujo de trabajo + +## Opciones de precios + + + + **Modelos alojados** - Sim proporciona claves API con un multiplicador de precio de 2,5x: + + | Modelo | Precio base (Entrada/Salida) | Precio alojado (Entrada/Salida) | + |-------|---------------------------|----------------------------| + | GPT-4o | $2.50 / $10.00 | $6.25 / $25.00 | + | GPT-4.1 | $2.00 / $8.00 | $5.00 / $20.00 | + | o1 | $15.00 / $60.00 | $37.50 / $150.00 | + | o3 | $2.00 / $8.00 | $5.00 / $20.00 | + | Claude 3.5 Sonnet | $3.00 / $15.00 | $7.50 / $37.50 | + | Claude Opus 4.0 | $15.00 / $75.00 | $37.50 / $187.50 | + + *El multiplicador de 2,5x cubre los costos de infraestructura y gestión de API.* + + + + **Tus propias claves API** - Usa cualquier modelo con precio base: + + | Proveedor | Modelos | Entrada / Salida | + |----------|---------|----------------| + | Google | Gemini 2.5 | $0.15 / $0.60 | + | Deepseek | V3, R1 | $0.75 / $1.00 | + | xAI | Grok 4, Grok 3 | $5.00 / $25.00 | + | Groq | Llama 4 Scout | $0.40 / $0.60 | + | Cerebras | Llama 3.3 70B | $0.94 / $0.94 | + | Ollama | Modelos locales | Gratis | + + *Paga directamente a los proveedores sin recargo* + + + + + Los precios mostrados reflejan las tarifas a partir del 10 de septiembre de 2025. Consulta la documentación del proveedor para conocer los precios actuales. + + +## Estrategias de optimización de costos + + + + Elige modelos según la complejidad de la tarea. Las tareas simples pueden usar GPT-4.1-nano ($0.10/$0.40) mientras que el razonamiento complejo podría necesitar o1 o Claude Opus. + + + + Los prompts bien estructurados y concisos reducen el uso de tokens sin sacrificar la calidad. + + + + Usa Ollama para tareas no críticas para eliminar por completo los costos de API. + + + + Almacena resultados frecuentemente utilizados en variables o archivos para evitar llamadas repetidas al modelo de IA. + + + + Procesa múltiples elementos en una sola solicitud de IA en lugar de hacer llamadas individuales. + + + +## Monitoreo de uso + +Monitorea tu uso y facturación en Configuración → Suscripción: + +- **Uso actual**: Uso y costos en tiempo real para el período actual +- **Límites de uso**: Límites del plan con indicadores visuales de progreso +- **Detalles de facturación**: Cargos proyectados y compromisos mínimos +- **Gestión del plan**: Opciones de actualización e historial de facturación + +### Seguimiento programático del uso + +Puedes consultar tu uso actual y límites de forma programática utilizando la API: + +**Endpoint:** + +```text +GET /api/users/me/usage-limits +``` + +**Autenticación:** +- Incluye tu clave API en el encabezado `X-API-Key` + +**Ejemplo de solicitud:** + +```bash +curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" https://sim.ai/api/users/me/usage-limits +``` + +**Ejemplo de respuesta:** + +```json +{ + "success": true, + "rateLimit": { + "sync": { "isLimited": false, "limit": 10, "remaining": 10, "resetAt": "2025-09-08T22:51:55.999Z" }, + "async": { "isLimited": false, "limit": 50, "remaining": 50, "resetAt": "2025-09-08T22:51:56.155Z" }, + "authType": "api" + }, + "usage": { + "currentPeriodCost": 12.34, + "limit": 100, + "plan": "pro" + } +} +``` + +**Campos de respuesta:** +- `currentPeriodCost` refleja el uso en el período de facturación actual +- `limit` se deriva de límites individuales (Gratuito/Pro) o límites de organización agrupados (Equipo/Empresa) +- `plan` es el plan activo de mayor prioridad asociado a tu usuario + +## Límites del plan + +Los diferentes planes de suscripción tienen diferentes límites de uso: + +| Plan | Límite de uso mensual | Límites de tasa (por minuto) | +|------|-------------------|-------------------------| +| **Gratuito** | $10 | 5 síncronos, 10 asíncronos | +| **Pro** | $100 | 10 síncronos, 50 asíncronos | +| **Equipo** | $500 (agrupado) | 50 síncronos, 100 asíncronos | +| **Empresa** | Personalizado | Personalizado | + +## Mejores prácticas para la gestión de costos + +1. **Monitorear regularmente**: Revisa tu panel de uso frecuentemente para evitar sorpresas +2. **Establecer presupuestos**: Utiliza los límites del plan como guías para tu gasto +3. **Optimizar flujos de trabajo**: Revisa las ejecuciones de alto costo y optimiza los prompts o la selección de modelos +4. **Usar modelos apropiados**: Ajusta la complejidad del modelo a los requisitos de la tarea +5. **Agrupar tareas similares**: Combina múltiples solicitudes cuando sea posible para reducir la sobrecarga + +## Próximos pasos + +- Revisa tu uso actual en [Configuración → Suscripción](https://sim.ai/settings/subscription) +- Aprende sobre [Registro](/execution/logging) para seguir los detalles de ejecución +- Explora la [API externa](/execution/api) para monitoreo programático de costos +- Consulta las [técnicas de optimización de flujo de trabajo](/blocks) para reducir costos \ No newline at end of file diff --git a/apps/docs/content/docs/es/execution/index.mdx b/apps/docs/content/docs/es/execution/index.mdx new file mode 100644 index 0000000000..1eea25ff27 --- /dev/null +++ b/apps/docs/content/docs/es/execution/index.mdx @@ -0,0 +1,136 @@ +--- +title: Ejecución +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' + +El motor de ejecución de Sim da vida a tus flujos de trabajo procesando bloques en el orden correcto, gestionando el flujo de datos y manejando errores con elegancia, para que puedas entender exactamente cómo se ejecutan los flujos de trabajo en Sim. + + + Cada ejecución de flujo de trabajo sigue una ruta determinista basada en tus conexiones de bloques y lógica, asegurando resultados predecibles y confiables. + + +## Resumen de la documentación + + + + Aprende sobre el flujo de ejecución fundamental, tipos de bloques y cómo fluyen los datos a través de tu + flujo de trabajo + + + + Monitorea las ejecuciones de flujos de trabajo con registro completo y visibilidad en tiempo real + + + + Comprende cómo se calculan y optimizan los costos de ejecución de flujos de trabajo + + + + Accede a registros de ejecución y configura webhooks programáticamente a través de API REST + + + +## Conceptos clave + +### Ejecución topológica +Los bloques se ejecutan en orden de dependencia, similar a cómo una hoja de cálculo recalcula celdas. El motor de ejecución determina automáticamente qué bloques pueden ejecutarse basándose en las dependencias completadas. + +### Seguimiento de rutas +El motor rastrea activamente las rutas de ejecución a través de tu flujo de trabajo. Los bloques de enrutador y condición actualizan dinámicamente estas rutas, asegurando que solo se ejecuten los bloques relevantes. + +### Procesamiento basado en capas +En lugar de ejecutar bloques uno por uno, el motor identifica capas de bloques que pueden ejecutarse en paralelo, optimizando el rendimiento para flujos de trabajo complejos. + +### Contexto de ejecución +Cada flujo de trabajo mantiene un contexto enriquecido durante la ejecución que contiene: +- Salidas y estados de bloques +- Rutas de ejecución activas +- Seguimiento de iteraciones de bucle y paralelas +- Variables de entorno +- Decisiones de enrutamiento + +## Disparadores de ejecución + +Los flujos de trabajo pueden ejecutarse a través de múltiples canales: + +- **Manual**: Prueba y depura directamente en el editor +- **Desplegar como API**: Crea un punto de conexión HTTP protegido con claves API +- **Desplegar como Chat**: Crea una interfaz conversacional en un subdominio personalizado +- **Webhooks**: Responde a eventos externos de servicios de terceros +- **Programado**: Ejecuta en un horario recurrente usando expresiones cron + +### Desplegar como API + +Cuando despliegas un flujo de trabajo como API, Sim: +- Crea un punto de conexión HTTP único: `https://sim.ai/api/workflows/{workflowId}/execute` +- Genera una clave API para autenticación +- Acepta solicitudes POST con cargas útiles JSON +- Devuelve los resultados de ejecución del flujo de trabajo como JSON + +Ejemplo de llamada API: + +```bash +curl -X POST https://sim.ai/api/workflows/your-workflow-id/execute \ + -H "X-API-Key: your-api-key" \ + -H "Content-Type: application/json" \ + -d '{"input": "your data here"}' +``` + +### Desplegar como Chat + +El despliegue de chat crea una interfaz conversacional para tu flujo de trabajo: +- Alojado en un subdominio personalizado: `https://your-name.sim.ai` +- Autenticación opcional (pública, con contraseña o basada en correo electrónico) +- Interfaz de usuario personalizable con tu marca +- Respuestas en streaming para interacción en tiempo real +- Perfecto para asistentes de IA, bots de soporte o herramientas interactivas + +Cada método de despliegue pasa datos al bloque inicial de tu flujo de trabajo, comenzando el flujo de ejecución. + +## Ejecución programática + +Ejecuta flujos de trabajo desde tus aplicaciones usando nuestros SDK oficiales: + +```bash +# TypeScript/JavaScript +npm install simstudio-ts-sdk + +# Python +pip install simstudio-sdk +``` + +```typescript +// TypeScript Example +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: 'your-api-key' +}); + +const result = await client.executeWorkflow('workflow-id', { + input: { message: 'Hello' } +}); +``` + +## Mejores prácticas + +### Diseño para fiabilidad +- Maneja los errores con elegancia mediante rutas de respaldo apropiadas +- Usa variables de entorno para datos sensibles +- Añade registro en bloques de Función para depuración + +### Optimiza el rendimiento +- Minimiza las llamadas a API externas cuando sea posible +- Usa ejecución paralela para operaciones independientes +- Almacena en caché los resultados con bloques de Memoria cuando sea apropiado + +### Monitorea las ejecuciones +- Revisa los registros regularmente para entender patrones de rendimiento +- Realiza seguimiento de costos para el uso de modelos de IA +- Usa instantáneas de flujo de trabajo para depurar problemas + +## ¿Qué sigue? + +Comienza con [Conceptos básicos de ejecución](/execution/basics) para entender cómo funcionan los flujos de trabajo, luego explora [Registro](/execution/logging) para monitorear tus ejecuciones y [Cálculo de costos](/execution/costs) para optimizar tu gasto. diff --git a/apps/docs/content/docs/es/execution/logging.mdx b/apps/docs/content/docs/es/execution/logging.mdx new file mode 100644 index 0000000000..2b1705770b --- /dev/null +++ b/apps/docs/content/docs/es/execution/logging.mdx @@ -0,0 +1,150 @@ +--- +title: Registro +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Sim proporciona un registro completo para todas las ejecuciones de flujos de trabajo, dándote visibilidad total sobre cómo se ejecutan tus flujos de trabajo, qué datos fluyen a través de ellos y dónde podrían ocurrir problemas. + +## Sistema de registro + +Sim ofrece dos interfaces de registro complementarias para adaptarse a diferentes flujos de trabajo y casos de uso: + +### Consola en tiempo real + +Durante la ejecución manual o por chat del flujo de trabajo, los registros aparecen en tiempo real en el panel de Consola en el lado derecho del editor de flujo de trabajo: + +
+ Panel de consola en tiempo real +
+ +La consola muestra: +- Progreso de ejecución de bloques con resaltado del bloque activo +- Resultados en tiempo real a medida que se completan los bloques +- Tiempo de ejecución para cada bloque +- Indicadores de estado de éxito/error + +### Página de registros + +Todas las ejecuciones de flujos de trabajo, ya sean activadas manualmente, a través de API, Chat, Programación o Webhook, se registran en la página dedicada de Registros: + +
+ Página de registros +
+ +La página de Registros proporciona: +- Filtrado completo por rango de tiempo, estado, tipo de activación, carpeta y flujo de trabajo +- Funcionalidad de búsqueda en todos los registros +- Modo en vivo para actualizaciones en tiempo real +- Retención de registros de 7 días (ampliable para una retención más larga) + +## Barra lateral de detalles de registro + +Al hacer clic en cualquier entrada de registro se abre una vista detallada en la barra lateral: + +
+ Detalles de la barra lateral de registros +
+ +### Entrada/Salida de bloque + +Visualiza el flujo de datos completo para cada bloque con pestañas para cambiar entre: + + + + **Pestaña de salida** muestra el resultado de la ejecución del bloque: + - Datos estructurados con formato JSON + - Renderizado de Markdown para contenido generado por IA + - Botón de copiar para fácil extracción de datos + + + + **Pestaña de entrada** muestra lo que se pasó al bloque: + - Valores de variables resueltos + - Salidas referenciadas de otros bloques + - Variables de entorno utilizadas + - Las claves API se redactan automáticamente por seguridad + + + +### Cronología de ejecución + +Para los registros a nivel de flujo de trabajo, visualiza métricas detalladas de ejecución: +- Marcas de tiempo de inicio y fin +- Duración total del flujo de trabajo +- Tiempos de ejecución de bloques individuales +- Identificación de cuellos de botella de rendimiento + +## Instantáneas del flujo de trabajo + +Para cualquier ejecución registrada, haz clic en "Ver instantánea" para ver el estado exacto del flujo de trabajo en el momento de la ejecución: + +
+ Instantánea del flujo de trabajo +
+ +La instantánea proporciona: +- Lienzo congelado que muestra la estructura del flujo de trabajo +- Estados de los bloques y conexiones tal como estaban durante la ejecución +- Haz clic en cualquier bloque para ver sus entradas y salidas +- Útil para depurar flujos de trabajo que han sido modificados desde entonces + + + Las instantáneas de flujo de trabajo solo están disponibles para ejecuciones posteriores a la introducción del sistema mejorado de registro. Los registros migrados más antiguos muestran un mensaje de "Estado registrado no encontrado". + + +## Retención de registros + +- **Plan gratuito**: 7 días de retención de registros +- **Plan pro**: 30 días de retención de registros +- **Plan de equipo**: 90 días de retención de registros +- **Plan empresarial**: Períodos de retención personalizados disponibles + +## Mejores prácticas + +### Para desarrollo +- Utiliza la consola en tiempo real para obtener retroalimentación inmediata durante las pruebas +- Verifica las entradas y salidas de los bloques para comprobar el flujo de datos +- Usa instantáneas del flujo de trabajo para comparar versiones funcionales vs. defectuosas + +### Para producción +- Supervisa regularmente la página de registros para detectar errores o problemas de rendimiento +- Configura filtros para centrarte en flujos de trabajo específicos o períodos de tiempo +- Utiliza el modo en vivo durante implementaciones críticas para observar las ejecuciones en tiempo real + +### Para depuración +- Siempre verifica la cronología de ejecución para identificar bloques lentos +- Compara las entradas entre ejecuciones exitosas y fallidas +- Utiliza instantáneas del flujo de trabajo para ver el estado exacto cuando ocurrieron los problemas + +## Próximos pasos + +- Aprende sobre [Cálculo de costos](/execution/costs) para entender los precios de los flujos de trabajo +- Explora la [API externa](/execution/api) para acceso programático a los registros +- Configura [notificaciones por Webhook](/execution/api#webhook-subscriptions) para alertas en tiempo real \ No newline at end of file diff --git a/apps/docs/content/docs/es/getting-started/index.mdx b/apps/docs/content/docs/es/getting-started/index.mdx new file mode 100644 index 0000000000..824b69b624 --- /dev/null +++ b/apps/docs/content/docs/es/getting-started/index.mdx @@ -0,0 +1,193 @@ +--- +title: Primeros pasos +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { File, Files, Folder } from 'fumadocs-ui/components/files' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { + AgentIcon, + ApiIcon, + ChartBarIcon, + CodeIcon, + ConditionalIcon, + ConnectIcon, + ExaAIIcon, + FirecrawlIcon, + GmailIcon, + NotionIcon, + PerplexityIcon, + SlackIcon, +} from '@/components/icons' +import { Video } from '@/components/ui/video' +import { Image } from '@/components/ui/image' + +Este tutorial te guiará en la creación de tu primer flujo de trabajo de IA en Sim. Crearemos un agente de investigación de personas que puede encontrar información sobre individuos utilizando herramientas de búsqueda LLM de última generación. + + + Este tutorial dura aproximadamente 10 minutos y cubre los conceptos esenciales para crear flujos de trabajo en Sim. + + +## Lo que vamos a construir + +Un agente de investigación de personas que: +1. Recibe el nombre de una persona a través de la interfaz de chat +2. Utiliza un agente de IA con capacidades avanzadas de búsqueda +3. Busca en la web utilizando herramientas de búsqueda LLM de última generación (Exa y Linkup) +4. Extrae información estructurada utilizando un formato de respuesta +5. Devuelve datos completos sobre la persona + +Ejemplo de primeros pasos + +## Tutorial paso a paso + + + + Abre Sim y haz clic en "Nuevo flujo de trabajo" en el panel de control. Nómbralo "Primeros pasos". + + Cuando creas un nuevo flujo de trabajo, automáticamente incluye un **bloque de Inicio** - este es el punto de entrada que recibe la entrada de los usuarios. Para este ejemplo, activaremos el flujo de trabajo a través del chat, así que no necesitamos configurar nada en el bloque de Inicio. + + Ahora arrastra un **Bloque de Agente** al lienzo desde el panel de bloques a la izquierda. + + Configura el Bloque de Agente: + - **Modelo**: Selecciona "OpenAI GPT-4o" + - **Prompt del sistema**: "Eres un agente de investigación de personas. Cuando te den el nombre de una persona, utiliza tus herramientas de búsqueda disponibles para encontrar información completa sobre ellos, incluyendo su ubicación, profesión, formación académica y otros detalles relevantes". + - **Prompt del usuario**: Arrastra la conexión desde la salida del bloque de Inicio a este campo (esto conecta `` al prompt del usuario) + +
+
+
+ + + Vamos a mejorar nuestro agente con herramientas para obtener mejores capacidades. Haz clic en el bloque de Agente para seleccionarlo. + + En la sección de **Herramientas**: + - Haz clic en **Añadir herramienta** + - Selecciona **Exa** de las herramientas disponibles + - Selecciona **Linkup** de las herramientas disponibles + - Añade tus claves API para ambas herramientas (esto permite al agente buscar en la web y acceder a información adicional) + +
+
+
+ + + Ahora vamos a probar nuestro flujo de trabajo. Ve al **panel de Chat** en el lado derecho de la pantalla. + + En el panel de chat: + - Haz clic en el menú desplegable y selecciona `agent1.content` (esto nos mostrará la salida de nuestro agente) + - Introduce un mensaje de prueba como: "John es un ingeniero de software de San Francisco que estudió Informática en la Universidad de Stanford". + - Haz clic en "Enviar" para ejecutar el flujo de trabajo + + Deberías ver la respuesta del agente analizando a la persona descrita en tu texto. + +
+
+
+ + + Ahora hagamos que nuestro agente devuelva datos estructurados. Haz clic en el bloque de Agente para seleccionarlo. + + En la sección de **Formato de respuesta**: + - Haz clic en el **icono de varita mágica** (✨) junto al campo de esquema + - En el prompt que aparece, escribe: "crear un esquema llamado persona, que contenga ubicación, profesión y educación" + - La IA generará automáticamente un esquema JSON para ti + +
+
+
+ + + Vuelve al **panel de Chat**. + + Como hemos añadido un formato de respuesta, ahora hay nuevas opciones de salida disponibles: + - Haz clic en el menú desplegable y selecciona la nueva opción de salida estructurada (el esquema que acabamos de crear) + - Introduce un nuevo mensaje de prueba como: "Sarah es una gerente de marketing de Nueva York que tiene un MBA de la Escuela de Negocios de Harvard". + - Haz clic en "Enviar" para ejecutar el flujo de trabajo de nuevo + + Ahora deberías ver una salida JSON estructurada con la información de la persona organizada en campos de ubicación, profesión y educación. + +
+
+
+
+ +## Lo que acabas de construir + +¡Felicidades! Has creado tu primer flujo de trabajo de IA que: +- ✅ Recibe entrada de texto a través de la interfaz de chat +- ✅ Utiliza IA para extraer información de texto no estructurado +- ✅ Integra herramientas externas (Exa y Linkup) para capacidades mejoradas +- ✅ Devuelve datos JSON estructurados utilizando esquemas generados por IA +- ✅ Demuestra pruebas e iteración de flujos de trabajo +- ✅ Muestra el poder de la construcción visual de flujos de trabajo + +## Conceptos clave que has aprendido + +### Tipos de bloques utilizados + + + } + annotation="Punto de entrada para la entrada del usuario (incluido automáticamente)" + /> + } + annotation="Modelo de IA para procesamiento y análisis de texto" + /> + + +### Conceptos fundamentales del flujo de trabajo + +**Flujo de datos**: Las variables fluyen entre bloques arrastrando conexiones + +**Interfaz de chat**: Prueba flujos de trabajo en tiempo real usando el panel de chat con diferentes opciones de salida + +**Integración de herramientas**: Mejora las capacidades del agente añadiendo herramientas externas como Exa y Linkup + +**Referencias de variables**: Accede a las salidas de los bloques usando la sintaxis `` + +**Salida estructurada**: Utiliza esquemas JSON para obtener datos consistentes y estructurados de la IA + +**Esquemas generados por IA**: Usa la varita mágica (✨) para generar esquemas con lenguaje natural + +**Desarrollo iterativo**: Prueba, modifica y vuelve a probar flujos de trabajo fácilmente + +## Próximos pasos + + + + Aprende sobre bloques de API, Función y Condición + + + Integra con servicios externos como Gmail, Slack y Notion + + + Usa bloques de Función para procesamiento personalizado de datos + + + Haz que tu flujo de trabajo sea accesible a través de API REST + + + +## ¿Necesitas ayuda? + +**¿Atascado en algún paso?** Consulta nuestra [documentación de Bloques](/blocks) para explicaciones detalladas de cada componente. + +**¿Quieres ver más ejemplos?** Explora nuestra [documentación de Herramientas](/tools) para ver qué integraciones están disponibles. + +**¿Listo para implementar?** Aprende sobre [Ejecución e Implementación](/execution) para activar tus flujos de trabajo. diff --git a/apps/docs/content/docs/es/index.mdx b/apps/docs/content/docs/es/index.mdx new file mode 100644 index 0000000000..4c4ba1ed43 --- /dev/null +++ b/apps/docs/content/docs/es/index.mdx @@ -0,0 +1,60 @@ +--- +title: Documentación +--- + +import { Card, Cards } from 'fumadocs-ui/components/card' + +# Documentación de Sim + +Bienvenido a Sim, un constructor visual de flujos de trabajo para aplicaciones de IA. Crea potentes agentes de IA, flujos de trabajo de automatización y canales de procesamiento de datos conectando bloques en un lienzo. + +## Inicio rápido + + + + Aprende lo que puedes construir con Sim + + + Crea tu primer flujo de trabajo en 10 minutos + + + Aprende sobre los bloques de construcción + + + Explora más de 80 integraciones incorporadas + + + +## Conceptos fundamentales + + + + Comprende cómo fluyen los datos entre bloques + + + Trabaja con variables de flujo de trabajo y de entorno + + + Monitoriza las ejecuciones de flujos de trabajo y gestiona costos + + + Inicia flujos de trabajo mediante API, webhooks o programaciones + + + +## Características avanzadas + + + + Configura roles y permisos de espacio de trabajo + + + Define flujos de trabajo como código + + + Conecta servicios externos con el Protocolo de Contexto de Modelo + + + Integra Sim en tus aplicaciones + + \ No newline at end of file diff --git a/apps/docs/content/docs/es/introduction/index.mdx b/apps/docs/content/docs/es/introduction/index.mdx new file mode 100644 index 0000000000..7d248a4655 --- /dev/null +++ b/apps/docs/content/docs/es/introduction/index.mdx @@ -0,0 +1,93 @@ +--- +title: Introducción +--- + +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Callout } from 'fumadocs-ui/components/callout' +import { Image } from '@/components/ui/image' + +Sim es un constructor visual de flujos de trabajo para aplicaciones de IA que te permite crear flujos de trabajo de agentes de IA de forma visual. Crea agentes de IA potentes, flujos de trabajo de automatización y pipelines de procesamiento de datos conectando bloques en un lienzo—sin necesidad de código. + +
+ Lienzo visual de flujos de trabajo de Sim +
+ +## Lo Que Puedes Crear + +**Asistentes de IA y Chatbots** +Crea agentes inteligentes que pueden buscar en la web, acceder a tu calendario, enviar correos electrónicos e interactuar con tus herramientas de negocio. + +**Automatización de Procesos de Negocio** +Automatiza tareas repetitivas como entrada de datos, generación de informes, respuestas de soporte al cliente y creación de contenido. + +**Procesamiento y Análisis de Datos** +Extrae información de documentos, analiza conjuntos de datos, genera informes y sincroniza datos entre sistemas. + +**Flujos de Trabajo de Integración de API** +Conecta múltiples servicios en endpoints unificados, orquesta lógica de negocio compleja y maneja automatización basada en eventos. + +## Cómo Funciona + +**Lienzo Visual** +Arrastra y suelta bloques para crear flujos de trabajo. Conecta modelos de IA, bases de datos, APIs y herramientas de negocio con conexiones simples de apuntar y hacer clic. + +**Bloques Inteligentes** +Elige entre bloques de procesamiento (agentes de IA, APIs, funciones), bloques de lógica (condiciones, bucles, enrutadores) y bloques de salida (respuestas, evaluadores). + +**Múltiples Disparadores** +Inicia flujos de trabajo a través de interfaz de chat, API REST, webhooks, trabajos programados o eventos externos de servicios como Slack y GitHub. + +**Colaboración en Equipo** +Trabaja simultáneamente con miembros del equipo en el mismo flujo de trabajo con edición en tiempo real y gestión de permisos. + +## Próximos Pasos + +¿Listo para crear tu primer flujo de trabajo de IA? + + + + Crea tu primer flujo de trabajo en 10 minutos + + + Aprende sobre los bloques de construcción + + + Explora más de 60 integraciones integradas + + + Configura roles y permisos del espacio de trabajo + + + +¿Necesitas algo personalizado? Usa nuestra [integración MCP](/mcp) para conectar cualquier servicio externo. + +## Opciones de implementación + +**Alojado en la nube**: Comienza al instante en [sim.ai](https://sim.ai) con infraestructura gestionada, escalado automático y monitorización integrada. + +**Autoalojado**: Implementa en tu propia infraestructura usando Docker, con soporte para modelos de IA locales a través de Ollama para una privacidad completa de datos. + +## Próximos pasos + +¿Listo para construir tu primer flujo de trabajo de IA? + + + + Crea tu primer flujo de trabajo en 10 minutos + + + Aprende sobre los componentes básicos + + + Explora más de 60 integraciones incorporadas + + + Configura roles y permisos del espacio de trabajo + + \ No newline at end of file diff --git a/apps/docs/content/docs/es/knowledgebase/index.mdx b/apps/docs/content/docs/es/knowledgebase/index.mdx new file mode 100644 index 0000000000..3a04aa5984 --- /dev/null +++ b/apps/docs/content/docs/es/knowledgebase/index.mdx @@ -0,0 +1,113 @@ +--- +title: Base de conocimientos +--- + +import { Video } from '@/components/ui/video' +import { Image } from '@/components/ui/image' + +La base de conocimientos te permite cargar, procesar y buscar a través de tus documentos con búsqueda vectorial inteligente y fragmentación. Los documentos de varios tipos se procesan, incorporan y hacen buscables automáticamente. Tus documentos se fragmentan de manera inteligente, y puedes verlos, editarlos y buscar a través de ellos utilizando consultas en lenguaje natural. + +## Carga y procesamiento + +Simplemente carga tus documentos para comenzar. Sim los procesa automáticamente en segundo plano, extrayendo texto, creando incrustaciones y dividiéndolos en fragmentos buscables. + +
+
+ +El sistema maneja todo el proceso por ti: + +1. **Extracción de texto**: El contenido se extrae de tus documentos utilizando analizadores especializados para cada tipo de archivo +2. **Fragmentación inteligente**: Los documentos se dividen en fragmentos significativos con tamaño y superposición configurables +3. **Generación de incrustaciones**: Se crean incrustaciones vectoriales para capacidades de búsqueda semántica +4. **Estado del procesamiento**: Sigue el progreso mientras tus documentos son procesados + +## Tipos de archivos compatibles + +Sim admite archivos PDF, Word (DOC/DOCX), texto plano (TXT), Markdown (MD), HTML, Excel (XLS/XLSX), PowerPoint (PPT/PPTX) y CSV. Los archivos pueden tener hasta 100MB cada uno, con un rendimiento óptimo para archivos de menos de 50MB. Puedes cargar múltiples documentos simultáneamente, y los archivos PDF incluyen procesamiento OCR para documentos escaneados. + +## Visualización y edición de fragmentos + +Una vez que tus documentos están procesados, puedes ver y editar los fragmentos individuales. Esto te da control total sobre cómo se organiza y busca tu contenido. + +Vista de fragmentos de documentos mostrando contenido procesado + +### Configuración de fragmentos +- **Tamaño predeterminado del fragmento**: 1.024 caracteres +- **Rango configurable**: 100-4.000 caracteres por fragmento +- **Superposición inteligente**: 200 caracteres por defecto para preservar el contexto +- **División jerárquica**: Respeta la estructura del documento (secciones, párrafos, oraciones) + +### Capacidades de edición +- **Editar contenido de fragmentos**: Modificar el contenido de texto de fragmentos individuales +- **Ajustar límites de fragmentos**: Fusionar o dividir fragmentos según sea necesario +- **Añadir metadatos**: Mejorar fragmentos con contexto adicional +- **Operaciones masivas**: Gestionar múltiples fragmentos de manera eficiente + +## Procesamiento avanzado de PDF + +Para documentos PDF, Sim ofrece capacidades de procesamiento mejoradas: + +### Soporte OCR +Cuando se configura con Azure o [Mistral OCR](https://docs.mistral.ai/ocr/): +- **Procesamiento de documentos escaneados**: Extraer texto de PDFs basados en imágenes +- **Manejo de contenido mixto**: Procesar PDFs con texto e imágenes +- **Alta precisión**: Modelos avanzados de IA aseguran una extracción precisa del texto + +## Uso del bloque de conocimiento en flujos de trabajo + +Una vez que tus documentos son procesados, puedes utilizarlos en tus flujos de trabajo de IA a través del bloque de Conocimiento. Esto permite la Generación Aumentada por Recuperación (RAG), permitiendo a tus agentes de IA acceder y razonar sobre el contenido de tus documentos para proporcionar respuestas más precisas y contextuales. + +Uso del bloque de conocimiento en flujos de trabajo + +### Características del bloque de conocimiento +- **Búsqueda semántica**: Encontrar contenido relevante usando consultas en lenguaje natural +- **Integración de contexto**: Incluir automáticamente fragmentos relevantes en los prompts del agente +- **Recuperación dinámica**: La búsqueda ocurre en tiempo real durante la ejecución del flujo de trabajo +- **Puntuación de relevancia**: Resultados clasificados por similitud semántica + +### Opciones de integración +- **Prompts del sistema**: Proporcionar contexto a tus agentes de IA +- **Contexto dinámico**: Buscar e incluir información relevante durante las conversaciones +- **Búsqueda multi-documento**: Consultar a través de toda tu base de conocimiento +- **Búsqueda filtrada**: Combinar con etiquetas para una recuperación precisa de contenido + +## Tecnología de búsqueda vectorial + +Sim utiliza búsqueda vectorial impulsada por [pgvector](https://github.com/pgvector/pgvector) para entender el significado y contexto de tu contenido: + +### Comprensión semántica +- **Búsqueda contextual**: Encuentra contenido relevante incluso cuando las palabras clave exactas no coinciden +- **Recuperación basada en conceptos**: Comprende las relaciones entre ideas +- **Soporte multilingüe**: Funciona en diferentes idiomas +- **Reconocimiento de sinónimos**: Encuentra términos y conceptos relacionados + +### Capacidades de búsqueda +- **Consultas en lenguaje natural**: Haz preguntas en español simple +- **Búsqueda por similitud**: Encuentra contenido conceptualmente similar +- **Búsqueda híbrida**: Combina búsqueda vectorial y tradicional por palabras clave +- **Resultados configurables**: Controla el número y umbral de relevancia de los resultados + +## Gestión de documentos + +### Características de organización +- **Carga masiva**: Sube múltiples archivos a la vez mediante la API asíncrona +- **Estado de procesamiento**: Actualizaciones en tiempo real sobre el procesamiento de documentos +- **Búsqueda y filtrado**: Encuentra documentos rápidamente en grandes colecciones +- **Seguimiento de metadatos**: Captura automática de información de archivos y detalles de procesamiento + +### Seguridad y privacidad +- **Almacenamiento seguro**: Documentos almacenados con seguridad de nivel empresarial +- **Control de acceso**: Permisos basados en espacios de trabajo +- **Aislamiento de procesamiento**: Cada espacio de trabajo tiene procesamiento de documentos aislado +- **Retención de datos**: Configura políticas de retención de documentos + +## Primeros pasos + +1. **Navega a tu base de conocimiento**: Accede desde la barra lateral de tu espacio de trabajo +2. **Sube documentos**: Arrastra y suelta o selecciona archivos para subir +3. **Monitorea el procesamiento**: Observa cómo se procesan y dividen los documentos +4. **Explora fragmentos**: Visualiza y edita el contenido procesado +5. **Añade a flujos de trabajo**: Usa el bloque de Conocimiento para integrarlo con tus agentes de IA + +La base de conocimiento transforma tus documentos estáticos en un recurso inteligente y consultable que tus flujos de trabajo de IA pueden aprovechar para obtener respuestas más informadas y contextuales. \ No newline at end of file diff --git a/apps/docs/content/docs/es/knowledgebase/tags.mdx b/apps/docs/content/docs/es/knowledgebase/tags.mdx new file mode 100644 index 0000000000..b1ab4ec50f --- /dev/null +++ b/apps/docs/content/docs/es/knowledgebase/tags.mdx @@ -0,0 +1,108 @@ +--- +title: Etiquetas y filtrado +--- + +import { Video } from '@/components/ui/video' + +Las etiquetas proporcionan una forma poderosa de organizar tus documentos y crear filtros precisos para tus búsquedas vectoriales. Al combinar el filtrado basado en etiquetas con la búsqueda semántica, puedes recuperar exactamente el contenido que necesitas de tu base de conocimientos. + +## Añadir etiquetas a documentos + +Puedes añadir etiquetas personalizadas a cualquier documento en tu base de conocimientos para organizar y categorizar tu contenido para una recuperación más fácil. + +
+
+ +### Gestión de etiquetas +- **Etiquetas personalizadas**: Crea tu propio sistema de etiquetas que se adapte a tu flujo de trabajo +- **Múltiples etiquetas por documento**: Aplica tantas etiquetas como necesites a cada documento, hay 7 espacios para etiquetas disponibles por base de conocimientos que son compartidos por todos los documentos en la base de conocimientos +- **Organización de etiquetas**: Agrupa documentos relacionados con un etiquetado consistente + +### Mejores prácticas para etiquetas +- **Nomenclatura consistente**: Usa nombres de etiquetas estandarizados en todos tus documentos +- **Etiquetas descriptivas**: Utiliza nombres de etiquetas claros y significativos +- **Limpieza regular**: Elimina periódicamente las etiquetas no utilizadas u obsoletas + +## Uso de etiquetas en bloques de conocimiento + +Las etiquetas se vuelven poderosas cuando se combinan con el bloque de Conocimiento en tus flujos de trabajo. Puedes filtrar tus búsquedas a contenido específico etiquetado, asegurando que tus agentes de IA obtengan la información más relevante. + +
+
+ +## Modos de búsqueda + +El bloque de Conocimiento admite tres modos diferentes de búsqueda dependiendo de lo que proporciones: + +### 1. Búsqueda solo por etiquetas +Cuando **solo proporcionas etiquetas** (sin consulta de búsqueda): +- **Recuperación directa**: Obtiene todos los documentos que tienen las etiquetas especificadas +- **Sin búsqueda vectorial**: Los resultados se basan puramente en la coincidencia de etiquetas +- **Rendimiento rápido**: Recuperación rápida sin procesamiento semántico +- **Coincidencia exacta**: Solo se devuelven documentos con todas las etiquetas especificadas + +**Caso de uso**: Cuando necesitas todos los documentos de una categoría o proyecto específico + +### 2. Solo búsqueda vectorial +Cuando **solo proporcionas una consulta de búsqueda** (sin etiquetas): +- **Búsqueda semántica**: Encuentra contenido basado en significado y contexto +- **Base de conocimiento completa**: Busca en todos los documentos +- **Clasificación por relevancia**: Resultados ordenados por similitud semántica +- **Lenguaje natural**: Usa preguntas o frases para encontrar contenido relevante + +**Caso de uso**: Cuando necesitas el contenido más relevante independientemente de la organización + +### 3. Combinación de filtrado por etiquetas + búsqueda vectorial +Cuando **proporcionas tanto etiquetas como una consulta de búsqueda**: +1. **Primero**: Filtra documentos solo a aquellos con las etiquetas especificadas +2. **Luego**: Realiza una búsqueda vectorial dentro de ese subconjunto filtrado +3. **Resultado**: Contenido semánticamente relevante solo de tus documentos etiquetados + +**Caso de uso**: Cuando necesitas contenido relevante de una categoría o proyecto específico + +### Configuración de búsqueda + +#### Filtrado por etiquetas +- **Múltiples etiquetas**: Usa múltiples etiquetas para lógica OR (el documento debe tener una o más de las etiquetas) +- **Combinaciones de etiquetas**: Mezcla diferentes tipos de etiquetas para un filtrado preciso +- **Sensibilidad a mayúsculas**: La coincidencia de etiquetas no distingue entre mayúsculas y minúsculas +- **Coincidencia parcial**: Se requiere coincidencia exacta del nombre de la etiqueta + +#### Parámetros de búsqueda vectorial +- **Complejidad de consulta**: Las preguntas en lenguaje natural funcionan mejor +- **Límites de resultados**: Configura cuántos fragmentos recuperar +- **Umbral de relevancia**: Establece puntuaciones mínimas de similitud +- **Ventana de contexto**: Ajusta el tamaño del fragmento para tu caso de uso + +## Integración con flujos de trabajo + +### Configuración del bloque de conocimiento +1. **Seleccionar base de conocimiento**: Elige qué base de conocimiento buscar +2. **Añadir etiquetas**: Especifica etiquetas de filtrado (opcional) +3. **Introducir consulta**: Añade tu consulta de búsqueda (opcional) +4. **Configurar resultados**: Establece el número de fragmentos a recuperar +5. **Probar búsqueda**: Vista previa de resultados antes de usar en el flujo de trabajo + +### Uso dinámico de etiquetas +- **Etiquetas variables**: Usa variables de flujo de trabajo como valores de etiquetas +- **Filtrado condicional**: Aplica diferentes etiquetas según la lógica del flujo de trabajo +- **Búsqueda contextual**: Ajusta las etiquetas según el contexto de la conversación +- **Filtrado en múltiples pasos**: Refina las búsquedas a través de los pasos del flujo de trabajo + +### Optimización del rendimiento +- **Filtrado eficiente**: El filtrado por etiquetas ocurre antes de la búsqueda vectorial para un mejor rendimiento +- **Almacenamiento en caché**: Las combinaciones de etiquetas utilizadas con frecuencia se almacenan en caché para mayor velocidad +- **Procesamiento paralelo**: Múltiples búsquedas de etiquetas pueden ejecutarse simultáneamente +- **Gestión de recursos**: Optimización automática de los recursos de búsqueda + +## Primeros pasos con etiquetas + +1. **Planifica tu estructura de etiquetas**: Decide convenciones de nomenclatura consistentes +2. **Comienza a etiquetar**: Añade etiquetas relevantes a tus documentos existentes +3. **Prueba combinaciones**: Experimenta con combinaciones de etiquetas + consultas de búsqueda +4. **Integra en flujos de trabajo**: Usa el bloque de Conocimiento con tu estrategia de etiquetado +5. **Refina con el tiempo**: Ajusta tu enfoque de etiquetado basándote en los resultados de búsqueda + +Las etiquetas transforman tu base de conocimiento de un simple almacén de documentos a un sistema de inteligencia organizado con precisión que tus flujos de trabajo de IA pueden navegar con precisión quirúrgica. \ No newline at end of file diff --git a/apps/docs/content/docs/es/mcp/index.mdx b/apps/docs/content/docs/es/mcp/index.mdx new file mode 100644 index 0000000000..53a087e5b7 --- /dev/null +++ b/apps/docs/content/docs/es/mcp/index.mdx @@ -0,0 +1,140 @@ +--- +title: MCP (Protocolo de Contexto de Modelo) +--- + +import { Video } from '@/components/ui/video' +import { Callout } from 'fumadocs-ui/components/callout' + +El Protocolo de Contexto de Modelo ([MCP](https://modelcontextprotocol.com/)) te permite conectar herramientas y servicios externos utilizando un protocolo estandarizado, permitiéndote integrar APIs y servicios directamente en tus flujos de trabajo. Con MCP, puedes ampliar las capacidades de Sim añadiendo integraciones personalizadas que funcionan perfectamente con tus agentes y flujos de trabajo. + +## ¿Qué es MCP? + +MCP es un estándar abierto que permite a los asistentes de IA conectarse de forma segura a fuentes de datos y herramientas externas. Proporciona una forma estandarizada para: + +- Conectar a bases de datos, APIs y sistemas de archivos +- Acceder a datos en tiempo real desde servicios externos +- Ejecutar herramientas y scripts personalizados +- Mantener un acceso seguro y controlado a recursos externos + +## Añadir servidores MCP + +Los servidores MCP proporcionan colecciones de herramientas que tus agentes pueden utilizar. Puedes añadir servidores MCP de dos maneras: + +### Desde la configuración del espacio de trabajo + +Configura los servidores MCP a nivel de espacio de trabajo para que todos los miembros del equipo puedan utilizarlos: + +
+
+ +1. Navega a la configuración de tu espacio de trabajo +2. Ve a la sección **Servidores MCP** +3. Haz clic en **Añadir servidor MCP** +4. Introduce los detalles de configuración del servidor +5. Guarda la configuración + + +Los servidores MCP configurados en la configuración del espacio de trabajo están disponibles para todos los miembros del espacio de trabajo según sus niveles de permisos. + + +### Desde la configuración del agente + +También puedes añadir y configurar servidores MCP directamente desde un bloque de agente: + +
+
+ +Esto es útil cuando necesitas configurar rápidamente una integración específica para un flujo de trabajo particular. + +## Uso de herramientas MCP en agentes + +Una vez que los servidores MCP están configurados, sus herramientas quedan disponibles dentro de tus bloques de agente: + +
+
+ +1. Abre un bloque de **Agente** +2. En la sección de **Herramientas**, verás las herramientas MCP disponibles +3. Selecciona las herramientas que quieres que el agente utilice +4. El agente ahora puede acceder a estas herramientas durante la ejecución + +## Bloque de herramienta MCP independiente + +Para un control más preciso, puedes usar el bloque dedicado de herramienta MCP para ejecutar herramientas MCP específicas: + +
+
+ +El bloque de herramienta MCP te permite: +- Ejecutar cualquier herramienta MCP configurada directamente +- Pasar parámetros específicos a la herramienta +- Usar la salida de la herramienta en pasos posteriores del flujo de trabajo +- Encadenar múltiples herramientas MCP + +### Cuándo usar herramienta MCP vs agente + +**Usa el agente con herramientas MCP cuando:** +- Quieres que la IA decida qué herramientas usar +- Necesitas un razonamiento complejo sobre cuándo y cómo usar las herramientas +- Deseas una interacción en lenguaje natural con las herramientas + +**Usa el bloque de herramienta MCP cuando:** +- Necesitas una ejecución determinista de herramientas +- Quieres ejecutar una herramienta específica con parámetros conocidos +- Estás construyendo flujos de trabajo estructurados con pasos predecibles + +## Requisitos de permisos + +La funcionalidad MCP requiere permisos específicos del espacio de trabajo: + +| Acción | Permiso requerido | +|--------|-------------------| +| Configurar servidores MCP en ajustes | **Admin** | +| Usar herramientas MCP en agentes | **Write** o **Admin** | +| Ver herramientas MCP disponibles | **Read**, **Write**, o **Admin** | +| Ejecutar bloques de herramienta MCP | **Write** o **Admin** | + +## Casos de uso comunes + +### Integración de bases de datos +Conéctate a bases de datos para consultar, insertar o actualizar datos dentro de tus flujos de trabajo. + +### Integraciones de API +Accede a APIs externas y servicios web que no tienen integraciones Sim incorporadas. + +### Acceso al sistema de archivos +Lee, escribe y manipula archivos en sistemas de archivos locales o remotos. + +### Lógica de negocio personalizada +Ejecuta scripts o herramientas personalizadas específicas para las necesidades de tu organización. + +### Acceso a datos en tiempo real +Obtén datos en vivo de sistemas externos durante la ejecución del flujo de trabajo. + +## Consideraciones de seguridad + +- Los servidores MCP se ejecutan con los permisos del usuario que los configuró +- Verifica siempre las fuentes del servidor MCP antes de la instalación +- Utiliza variables de entorno para datos de configuración sensibles +- Revisa las capacidades del servidor MCP antes de conceder acceso a los agentes + +## Solución de problemas + +### El servidor MCP no aparece +- Verifica que la configuración del servidor sea correcta +- Comprueba que tienes los permisos necesarios +- Asegúrate de que el servidor MCP esté en funcionamiento y sea accesible + +### Fallos en la ejecución de herramientas +- Verifica que los parámetros de la herramienta estén correctamente formateados +- Revisa los registros del servidor MCP para ver mensajes de error +- Asegúrate de que la autenticación requerida esté configurada + +### Errores de permisos +- Confirma tu nivel de permiso en el espacio de trabajo +- Comprueba si el servidor MCP requiere autenticación adicional +- Verifica que el servidor esté configurado correctamente para tu espacio de trabajo \ No newline at end of file diff --git a/apps/docs/content/docs/es/permissions/roles-and-permissions.mdx b/apps/docs/content/docs/es/permissions/roles-and-permissions.mdx new file mode 100644 index 0000000000..ff75ae6196 --- /dev/null +++ b/apps/docs/content/docs/es/permissions/roles-and-permissions.mdx @@ -0,0 +1,161 @@ +--- +title: Roles y permisos +--- + +import { Video } from '@/components/ui/video' + +Cuando invitas a miembros del equipo a tu organización o espacio de trabajo, necesitarás elegir qué nivel de acceso otorgarles. Esta guía explica lo que permite hacer cada nivel de permiso, ayudándote a entender los roles del equipo y qué acceso proporciona cada nivel de permiso. + +## Cómo invitar a alguien a un espacio de trabajo + +
+
+ +## Niveles de permiso del espacio de trabajo + +Al invitar a alguien a un espacio de trabajo, puedes asignar uno de tres niveles de permiso: + +| Permiso | Lo que pueden hacer | +|------------|------------------| +| **Lectura** | Ver flujos de trabajo, ver resultados de ejecución, pero no pueden realizar ningún cambio | +| **Escritura** | Crear y editar flujos de trabajo, ejecutar flujos de trabajo, gestionar variables de entorno | +| **Administrador** | Todo lo que puede hacer Escritura, además de invitar/eliminar usuarios y gestionar la configuración del espacio de trabajo | + +## Lo que puede hacer cada nivel de permiso + +Aquí hay un desglose detallado de lo que los usuarios pueden hacer con cada nivel de permiso: + +### Permiso de lectura +**Perfecto para:** Interesados, observadores o miembros del equipo que necesitan visibilidad pero no deberían hacer cambios + +**Lo que pueden hacer:** +- Ver todos los flujos de trabajo en el espacio de trabajo +- Ver resultados y registros de ejecución de flujos de trabajo +- Explorar configuraciones y ajustes de flujos de trabajo +- Ver variables de entorno (pero no editarlas) + +**Lo que no pueden hacer:** +- Crear, editar o eliminar flujos de trabajo +- Ejecutar o implementar flujos de trabajo +- Cambiar cualquier configuración del espacio de trabajo +- Invitar a otros usuarios + +### Permiso de escritura +**Perfecto para:** Desarrolladores, creadores de contenido o miembros del equipo que trabajan activamente en automatización + +**Lo que pueden hacer:** +- Todo lo que pueden hacer los usuarios de Lectura, además de: +- Crear, editar y eliminar flujos de trabajo +- Ejecutar e implementar flujos de trabajo +- Añadir, editar y eliminar variables de entorno del espacio de trabajo +- Usar todas las herramientas e integraciones disponibles +- Colaborar en tiempo real en la edición de flujos de trabajo + +**Lo que no pueden hacer:** +- Invitar o eliminar usuarios del espacio de trabajo +- Cambiar la configuración del espacio de trabajo +- Eliminar el espacio de trabajo + +### Permiso de administrador +**Perfecto para:** Líderes de equipo, gerentes de proyecto o líderes técnicos que necesitan gestionar el espacio de trabajo + +**Lo que pueden hacer:** +- Todo lo que los usuarios con permiso de escritura pueden hacer, además de: +- Invitar a nuevos usuarios al espacio de trabajo con cualquier nivel de permiso +- Eliminar usuarios del espacio de trabajo +- Gestionar la configuración e integraciones del espacio de trabajo +- Configurar conexiones con herramientas externas +- Eliminar flujos de trabajo creados por otros usuarios + +**Lo que no pueden hacer:** +- Eliminar el espacio de trabajo (solo el propietario del espacio de trabajo puede hacer esto) +- Eliminar al propietario del espacio de trabajo + +--- + +## Propietario del espacio de trabajo vs administrador + +Cada espacio de trabajo tiene un **Propietario** (la persona que lo creó) además de cualquier número de **Administradores**. + +### Propietario del espacio de trabajo +- Tiene todos los permisos de administrador +- Puede eliminar el espacio de trabajo +- No puede ser eliminado del espacio de trabajo +- Puede transferir la propiedad a otro usuario + +### Administrador del espacio de trabajo +- Puede hacer todo excepto eliminar el espacio de trabajo o eliminar al propietario +- Puede ser eliminado del espacio de trabajo por el propietario u otros administradores + +--- + +## Escenarios comunes + +### Añadir un nuevo desarrollador a tu equipo +1. **Nivel de organización**: Invítalo como **Miembro de la organización** +2. **Nivel de espacio de trabajo**: Dale permiso de **Escritura** para que pueda crear y editar flujos de trabajo + +### Añadir un gerente de proyecto +1. **Nivel de organización**: Invítalo como **Miembro de la organización** +2. **Nivel de espacio de trabajo**: Dale permiso de **Administrador** para que pueda gestionar el equipo y ver todo + +### Añadir un interesado o cliente +1. **Nivel de organización**: Invítalo como **Miembro de la organización** +2. **Nivel de espacio de trabajo**: Dale permiso de **Lectura** para que pueda ver el progreso pero no hacer cambios + +--- + +## Variables de entorno + +Los usuarios pueden crear dos tipos de variables de entorno: + +### Variables de entorno personales +- Solo visibles para el usuario individual +- Disponibles en todos los flujos de trabajo que ejecutan +- Gestionadas en la configuración del usuario + +### Variables de entorno del espacio de trabajo +- **Permiso de lectura**: Puede ver nombres y valores de variables +- **Permiso de escritura/administración**: Puede añadir, editar y eliminar variables +- Disponibles para todos los miembros del espacio de trabajo +- Si una variable personal tiene el mismo nombre que una variable del espacio de trabajo, la personal tiene prioridad + +--- + +## Mejores prácticas + +### Comienza con permisos mínimos +Otorga a los usuarios el nivel de permiso más bajo que necesiten para hacer su trabajo. Siempre puedes aumentar los permisos más tarde. + +### Usa la estructura de la organización sabiamente +- Haz que los líderes de equipo de confianza sean **Administradores de la organización** +- La mayoría de los miembros del equipo deberían ser **Miembros de la organización** +- Reserva los permisos de **Administrador** del espacio de trabajo para personas que necesiten gestionar usuarios + +### Revisa los permisos regularmente +Revisa periódicamente quién tiene acceso a qué, especialmente cuando los miembros del equipo cambian de roles o dejan la empresa. + +### Seguridad de las variables de entorno +- Usa variables de entorno personales para claves API sensibles +- Usa variables de entorno del espacio de trabajo para configuración compartida +- Audita regularmente quién tiene acceso a variables sensibles + +--- + +## Roles de la organización + +Al invitar a alguien a tu organización, puedes asignar uno de dos roles: + +### Administrador de la organización +**Lo que pueden hacer:** +- Invitar y eliminar miembros del equipo de la organización +- Crear nuevos espacios de trabajo +- Gestionar la facturación y configuración de suscripción +- Acceder a todos los espacios de trabajo dentro de la organización + +### Miembro de la organización +**Lo que pueden hacer:** +- Acceder a espacios de trabajo a los que han sido específicamente invitados +- Ver la lista de miembros de la organización +- No pueden invitar a nuevas personas ni gestionar la configuración de la organización \ No newline at end of file diff --git a/apps/docs/content/docs/es/sdks/python.mdx b/apps/docs/content/docs/es/sdks/python.mdx new file mode 100644 index 0000000000..4203006117 --- /dev/null +++ b/apps/docs/content/docs/es/sdks/python.mdx @@ -0,0 +1,412 @@ +--- +title: Python SDK +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + +El SDK oficial de Python para Sim te permite ejecutar flujos de trabajo programáticamente desde tus aplicaciones Python utilizando el SDK oficial de Python. + + + El SDK de Python es compatible con Python 3.8+ y proporciona ejecución sincrónica de flujos de trabajo. Todas las ejecuciones de flujos de trabajo son actualmente sincrónicas. + + +## Instalación + +Instala el SDK usando pip: + +```bash +pip install simstudio-sdk +``` + +## Inicio rápido + +Aquí tienes un ejemplo sencillo para empezar: + +```python +from simstudio import SimStudioClient + +# Initialize the client +client = SimStudioClient( + api_key="your-api-key-here", + base_url="https://sim.ai" # optional, defaults to https://sim.ai +) + +# Execute a workflow +try: + result = client.execute_workflow("workflow-id") + print("Workflow executed successfully:", result) +except Exception as error: + print("Workflow execution failed:", error) +``` + +## Referencia de la API + +### SimStudioClient + +#### Constructor + +```python +SimStudioClient(api_key: str, base_url: str = "https://sim.ai") +``` + +**Parámetros:** +- `api_key` (str): Tu clave API de Sim +- `base_url` (str, opcional): URL base para la API de Sim + +#### Métodos + +##### execute_workflow() + +Ejecuta un flujo de trabajo con datos de entrada opcionales. + +```python +result = client.execute_workflow( + "workflow-id", + input_data={"message": "Hello, world!"}, + timeout=30.0 # 30 seconds +) +``` + +**Parámetros:** +- `workflow_id` (str): El ID del flujo de trabajo a ejecutar +- `input_data` (dict, opcional): Datos de entrada para pasar al flujo de trabajo +- `timeout` (float, opcional): Tiempo de espera en segundos (predeterminado: 30.0) + +**Devuelve:** `WorkflowExecutionResult` + +##### get_workflow_status() + +Obtiene el estado de un flujo de trabajo (estado de implementación, etc.). + +```python +status = client.get_workflow_status("workflow-id") +print("Is deployed:", status.is_deployed) +``` + +**Parámetros:** +- `workflow_id` (str): El ID del flujo de trabajo + +**Devuelve:** `WorkflowStatus` + +##### validate_workflow() + +Valida que un flujo de trabajo esté listo para su ejecución. + +```python +is_ready = client.validate_workflow("workflow-id") +if is_ready: + # Workflow is deployed and ready + pass +``` + +**Parámetros:** +- `workflow_id` (str): El ID del flujo de trabajo + +**Devuelve:** `bool` + +##### execute_workflow_sync() + + + Actualmente, este método es idéntico a `execute_workflow()` ya que todas las ejecuciones son síncronas. Este método se proporciona para compatibilidad futura cuando se añada la ejecución asíncrona. + + +Ejecuta un flujo de trabajo (actualmente síncrono, igual que `execute_workflow()`). + +```python +result = client.execute_workflow_sync( + "workflow-id", + input_data={"data": "some input"}, + timeout=60.0 +) +``` + +**Parámetros:** +- `workflow_id` (str): El ID del flujo de trabajo a ejecutar +- `input_data` (dict, opcional): Datos de entrada para pasar al flujo de trabajo +- `timeout` (float): Tiempo de espera para la solicitud inicial en segundos + +**Devuelve:** `WorkflowExecutionResult` + +##### set_api_key() + +Actualiza la clave API. + +```python +client.set_api_key("new-api-key") +``` + +##### set_base_url() + +Actualiza la URL base. + +```python +client.set_base_url("https://my-custom-domain.com") +``` + +##### close() + +Cierra la sesión HTTP subyacente. + +```python +client.close() +``` + +## Clases de datos + +### WorkflowExecutionResult + +```python +@dataclass +class WorkflowExecutionResult: + success: bool + output: Optional[Any] = None + error: Optional[str] = None + logs: Optional[List[Any]] = None + metadata: Optional[Dict[str, Any]] = None + trace_spans: Optional[List[Any]] = None + total_duration: Optional[float] = None +``` + +### WorkflowStatus + +```python +@dataclass +class WorkflowStatus: + is_deployed: bool + deployed_at: Optional[str] = None + is_published: bool = False + needs_redeployment: bool = False +``` + +### SimStudioError + +```python +class SimStudioError(Exception): + def __init__(self, message: str, code: Optional[str] = None, status: Optional[int] = None): + super().__init__(message) + self.code = code + self.status = status +``` + +## Ejemplos + +### Ejecución básica de flujo de trabajo + + + + Configura el SimStudioClient con tu clave API. + + + Comprueba si el flujo de trabajo está desplegado y listo para su ejecución. + + + Ejecuta el flujo de trabajo con tus datos de entrada. + + + Procesa el resultado de la ejecución y maneja cualquier error. + + + +```python +import os +from simstudio import SimStudioClient + +client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) + +def run_workflow(): + try: + # Check if workflow is ready + is_ready = client.validate_workflow("my-workflow-id") + if not is_ready: + raise Exception("Workflow is not deployed or ready") + + # Execute the workflow + result = client.execute_workflow( + "my-workflow-id", + input_data={ + "message": "Process this data", + "user_id": "12345" + } + ) + + if result.success: + print("Output:", result.output) + print("Duration:", result.metadata.get("duration") if result.metadata else None) + else: + print("Workflow failed:", result.error) + + except Exception as error: + print("Error:", error) + +run_workflow() +``` + +### Manejo de errores + +Maneja diferentes tipos de errores que pueden ocurrir durante la ejecución del flujo de trabajo: + +```python +from simstudio import SimStudioClient, SimStudioError +import os + +client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) + +def execute_with_error_handling(): + try: + result = client.execute_workflow("workflow-id") + return result + except SimStudioError as error: + if error.code == "UNAUTHORIZED": + print("Invalid API key") + elif error.code == "TIMEOUT": + print("Workflow execution timed out") + elif error.code == "USAGE_LIMIT_EXCEEDED": + print("Usage limit exceeded") + elif error.code == "INVALID_JSON": + print("Invalid JSON in request body") + else: + print(f"Workflow error: {error}") + raise + except Exception as error: + print(f"Unexpected error: {error}") + raise +``` + +### Uso del administrador de contexto + +Usa el cliente como un administrador de contexto para manejar automáticamente la limpieza de recursos: + +```python +from simstudio import SimStudioClient +import os + +# Using context manager to automatically close the session +with SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) as client: + result = client.execute_workflow("workflow-id") + print("Result:", result) +# Session is automatically closed here +``` + +### Ejecución por lotes de flujos de trabajo + +Ejecuta múltiples flujos de trabajo de manera eficiente: + +```python +from simstudio import SimStudioClient +import os + +client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) + +def execute_workflows_batch(workflow_data_pairs): + """Execute multiple workflows with different input data.""" + results = [] + + for workflow_id, input_data in workflow_data_pairs: + try: + # Validate workflow before execution + if not client.validate_workflow(workflow_id): + print(f"Skipping {workflow_id}: not deployed") + continue + + result = client.execute_workflow(workflow_id, input_data) + results.append({ + "workflow_id": workflow_id, + "success": result.success, + "output": result.output, + "error": result.error + }) + + except Exception as error: + results.append({ + "workflow_id": workflow_id, + "success": False, + "error": str(error) + }) + + return results + +# Example usage +workflows = [ + ("workflow-1", {"type": "analysis", "data": "sample1"}), + ("workflow-2", {"type": "processing", "data": "sample2"}), +] + +results = execute_workflows_batch(workflows) +for result in results: + print(f"Workflow {result['workflow_id']}: {'Success' if result['success'] else 'Failed'}") +``` + +### Configuración del entorno + +Configura el cliente usando variables de entorno: + + + + + ```python + import os + from simstudio import SimStudioClient + + # Development configuration + client = SimStudioClient( + api_key=os.getenv("SIMSTUDIO_API_KEY"), + base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai") + ) + ``` + + + + + ```python + import os + from simstudio import SimStudioClient + + # Production configuration with error handling + api_key = os.getenv("SIMSTUDIO_API_KEY") + if not api_key: + raise ValueError("SIMSTUDIO_API_KEY environment variable is required") + + client = SimStudioClient( + api_key=api_key, + base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai") + ) + ``` + + + + +## Obtener tu clave API + + + + Navega a [Sim](https://sim.ai) e inicia sesión en tu cuenta. + + + Navega al flujo de trabajo que quieres ejecutar programáticamente. + + + Haz clic en "Deploy" para desplegar tu flujo de trabajo si aún no ha sido desplegado. + + + Durante el proceso de despliegue, selecciona o crea una clave API. + + + Copia la clave API para usarla en tu aplicación Python. + + + + + Mantén tu clave API segura y nunca la incluyas en el control de versiones. Utiliza variables de entorno o gestión de configuración segura. + + +## Requisitos + +- Python 3.8+ +- requests >= 2.25.0 + +## Licencia + +Apache-2.0 \ No newline at end of file diff --git a/apps/docs/content/docs/es/sdks/typescript.mdx b/apps/docs/content/docs/es/sdks/typescript.mdx new file mode 100644 index 0000000000..410554d7b7 --- /dev/null +++ b/apps/docs/content/docs/es/sdks/typescript.mdx @@ -0,0 +1,607 @@ +--- +title: TypeScript/JavaScript SDK +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + +El SDK oficial de TypeScript/JavaScript para Sim proporciona seguridad de tipos completa y es compatible tanto con entornos Node.js como con navegadores, lo que te permite ejecutar flujos de trabajo de forma programática desde tus aplicaciones Node.js, aplicaciones web y otros entornos JavaScript. Todas las ejecuciones de flujos de trabajo son actualmente síncronas. + + + El SDK de TypeScript proporciona seguridad de tipos completa y es compatible tanto con entornos Node.js como con navegadores. Todas las ejecuciones de flujos de trabajo son actualmente síncronas. + + +## Instalación + +Instala el SDK usando tu gestor de paquetes preferido: + + + + + ```bash + npm install simstudio-ts-sdk + ``` + + + + + ```bash + yarn add simstudio-ts-sdk + ``` + + + + + ```bash + bun add simstudio-ts-sdk + ``` + + + + +## Inicio rápido + +Aquí tienes un ejemplo sencillo para empezar: + +```typescript +import { SimStudioClient } from 'simstudio-ts-sdk'; + +// Initialize the client +const client = new SimStudioClient({ + apiKey: 'your-api-key-here', + baseUrl: 'https://sim.ai' // optional, defaults to https://sim.ai +}); + +// Execute a workflow +try { + const result = await client.executeWorkflow('workflow-id'); + console.log('Workflow executed successfully:', result); +} catch (error) { + console.error('Workflow execution failed:', error); +} +``` + +## Referencia de la API + +### SimStudioClient + +#### Constructor + +```typescript +new SimStudioClient(config: SimStudioConfig) +``` + +**Configuración:** +- `config.apiKey` (string): Tu clave API de Sim +- `config.baseUrl` (string, opcional): URL base para la API de Sim (por defecto es `https://sim.ai`) + +#### Métodos + +##### executeWorkflow() + +Ejecuta un flujo de trabajo con datos de entrada opcionales. + +```typescript +const result = await client.executeWorkflow('workflow-id', { + input: { message: 'Hello, world!' }, + timeout: 30000 // 30 seconds +}); +``` + +**Parámetros:** +- `workflowId` (string): El ID del flujo de trabajo a ejecutar +- `options` (ExecutionOptions, opcional): + - `input` (any): Datos de entrada para pasar al flujo de trabajo + - `timeout` (number): Tiempo de espera en milisegundos (predeterminado: 30000) + +**Devuelve:** `Promise` + +##### getWorkflowStatus() + +Obtener el estado de un flujo de trabajo (estado de implementación, etc.). + +```typescript +const status = await client.getWorkflowStatus('workflow-id'); +console.log('Is deployed:', status.isDeployed); +``` + +**Parámetros:** +- `workflowId` (string): El ID del flujo de trabajo + +**Devuelve:** `Promise` + +##### validateWorkflow() + +Validar que un flujo de trabajo está listo para su ejecución. + +```typescript +const isReady = await client.validateWorkflow('workflow-id'); +if (isReady) { + // Workflow is deployed and ready +} +``` + +**Parámetros:** +- `workflowId` (string): El ID del flujo de trabajo + +**Devuelve:** `Promise` + +##### executeWorkflowSync() + + + Actualmente, este método es idéntico a `executeWorkflow()` ya que todas las ejecuciones son síncronas. Este método se proporciona para compatibilidad futura cuando se añada la ejecución asíncrona. + + +Ejecutar un flujo de trabajo (actualmente síncrono, igual que `executeWorkflow()`). + +```typescript +const result = await client.executeWorkflowSync('workflow-id', { + input: { data: 'some input' }, + timeout: 60000 +}); +``` + +**Parámetros:** +- `workflowId` (string): El ID del flujo de trabajo a ejecutar +- `options` (ExecutionOptions, opcional): + - `input` (any): Datos de entrada para pasar al flujo de trabajo + - `timeout` (number): Tiempo de espera para la solicitud inicial en milisegundos + +**Devuelve:** `Promise` + +##### setApiKey() + +Actualizar la clave API. + +```typescript +client.setApiKey('new-api-key'); +``` + +##### setBaseUrl() + +Actualizar la URL base. + +```typescript +client.setBaseUrl('https://my-custom-domain.com'); +``` + +## Tipos + +### WorkflowExecutionResult + +```typescript +interface WorkflowExecutionResult { + success: boolean; + output?: any; + error?: string; + logs?: any[]; + metadata?: { + duration?: number; + executionId?: string; + [key: string]: any; + }; + traceSpans?: any[]; + totalDuration?: number; +} +``` + +### WorkflowStatus + +```typescript +interface WorkflowStatus { + isDeployed: boolean; + deployedAt?: string; + isPublished: boolean; + needsRedeployment: boolean; +} +``` + +### SimStudioError + +```typescript +class SimStudioError extends Error { + code?: string; + status?: number; +} +``` + +## Ejemplos + +### Ejecución básica de flujo de trabajo + + + + Configura el SimStudioClient con tu clave API. + + + Comprueba si el flujo de trabajo está implementado y listo para su ejecución. + + + Ejecuta el flujo de trabajo con tus datos de entrada. + + + Procesa el resultado de la ejecución y maneja cualquier error. + + + +```typescript +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +async function runWorkflow() { + try { + // Check if workflow is ready + const isReady = await client.validateWorkflow('my-workflow-id'); + if (!isReady) { + throw new Error('Workflow is not deployed or ready'); + } + + // Execute the workflow + const result = await client.executeWorkflow('my-workflow-id', { + input: { + message: 'Process this data', + userId: '12345' + } + }); + + if (result.success) { + console.log('Output:', result.output); + console.log('Duration:', result.metadata?.duration); + } else { + console.error('Workflow failed:', result.error); + } + } catch (error) { + console.error('Error:', error); + } +} + +runWorkflow(); +``` + +### Manejo de errores + +Maneja diferentes tipos de errores que pueden ocurrir durante la ejecución del flujo de trabajo: + +```typescript +import { SimStudioClient, SimStudioError } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +async function executeWithErrorHandling() { + try { + const result = await client.executeWorkflow('workflow-id'); + return result; + } catch (error) { + if (error instanceof SimStudioError) { + switch (error.code) { + case 'UNAUTHORIZED': + console.error('Invalid API key'); + break; + case 'TIMEOUT': + console.error('Workflow execution timed out'); + break; + case 'USAGE_LIMIT_EXCEEDED': + console.error('Usage limit exceeded'); + break; + case 'INVALID_JSON': + console.error('Invalid JSON in request body'); + break; + default: + console.error('Workflow error:', error.message); + } + } else { + console.error('Unexpected error:', error); + } + throw error; + } +} +``` + +### Configuración del entorno + +Configura el cliente usando variables de entorno: + + + + + ```typescript + import { SimStudioClient } from 'simstudio-ts-sdk'; + + // Development configuration + const apiKey = process.env.SIMSTUDIO_API_KEY; + if (!apiKey) { + throw new Error('SIMSTUDIO_API_KEY environment variable is required'); + } + + const client = new SimStudioClient({ + apiKey, + baseUrl: process.env.SIMSTUDIO_BASE_URL // optional + }); + ``` + + + + + ```typescript + import { SimStudioClient } from 'simstudio-ts-sdk'; + + // Production configuration with validation + const apiKey = process.env.SIMSTUDIO_API_KEY; + if (!apiKey) { + throw new Error('SIMSTUDIO_API_KEY environment variable is required'); + } + + const client = new SimStudioClient({ + apiKey, + baseUrl: process.env.SIMSTUDIO_BASE_URL || 'https://sim.ai' + }); + ``` + + + + +### Integración con Express de Node.js + +Integración con un servidor Express.js: + +```typescript +import express from 'express'; +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const app = express(); +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +app.use(express.json()); + +app.post('/execute-workflow', async (req, res) => { + try { + const { workflowId, input } = req.body; + + const result = await client.executeWorkflow(workflowId, { + input, + timeout: 60000 + }); + + res.json({ + success: true, + data: result + }); + } catch (error) { + console.error('Workflow execution error:', error); + res.status(500).json({ + success: false, + error: error instanceof Error ? error.message : 'Unknown error' + }); + } +}); + +app.listen(3000, () => { + console.log('Server running on port 3000'); +}); +``` + +### Ruta API de Next.js + +Uso con rutas API de Next.js: + +```typescript +// pages/api/workflow.ts or app/api/workflow/route.ts +import { NextApiRequest, NextApiResponse } from 'next'; +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method !== 'POST') { + return res.status(405).json({ error: 'Method not allowed' }); + } + + try { + const { workflowId, input } = req.body; + + const result = await client.executeWorkflow(workflowId, { + input, + timeout: 30000 + }); + + res.status(200).json(result); + } catch (error) { + console.error('Error executing workflow:', error); + res.status(500).json({ + error: 'Failed to execute workflow' + }); + } +} +``` + +### Uso del navegador + +Uso en el navegador (con la configuración CORS adecuada): + +```typescript +import { SimStudioClient } from 'simstudio-ts-sdk'; + +// Note: In production, use a proxy server to avoid exposing API keys +const client = new SimStudioClient({ + apiKey: 'your-public-api-key', // Use with caution in browser + baseUrl: 'https://sim.ai' +}); + +async function executeClientSideWorkflow() { + try { + const result = await client.executeWorkflow('workflow-id', { + input: { + userInput: 'Hello from browser' + } + }); + + console.log('Workflow result:', result); + + // Update UI with result + document.getElementById('result')!.textContent = + JSON.stringify(result.output, null, 2); + } catch (error) { + console.error('Error:', error); + } +} + +// Attach to button click +document.getElementById('executeBtn')?.addEventListener('click', executeClientSideWorkflow); +``` + + + Cuando uses el SDK en el navegador, ten cuidado de no exponer claves API sensibles. Considera usar un proxy de backend o claves API públicas con permisos limitados. + + +### Ejemplo de hook de React + +Crea un hook personalizado de React para la ejecución del flujo de trabajo: + +```typescript +import { useState, useCallback } from 'react'; +import { SimStudioClient, WorkflowExecutionResult } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.NEXT_PUBLIC_SIMSTUDIO_API_KEY! +}); + +interface UseWorkflowResult { + result: WorkflowExecutionResult | null; + loading: boolean; + error: Error | null; + executeWorkflow: (workflowId: string, input?: any) => Promise; +} + +export function useWorkflow(): UseWorkflowResult { + const [result, setResult] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + const executeWorkflow = useCallback(async (workflowId: string, input?: any) => { + setLoading(true); + setError(null); + setResult(null); + + try { + const workflowResult = await client.executeWorkflow(workflowId, { + input, + timeout: 30000 + }); + setResult(workflowResult); + } catch (err) { + setError(err instanceof Error ? err : new Error('Unknown error')); + } finally { + setLoading(false); + } + }, []); + + return { + result, + loading, + error, + executeWorkflow + }; +} + +// Usage in component +function WorkflowComponent() { + const { result, loading, error, executeWorkflow } = useWorkflow(); + + const handleExecute = () => { + executeWorkflow('my-workflow-id', { + message: 'Hello from React!' + }); + }; + + return ( +
+ + + {error &&
Error: {error.message}
} + {result && ( +
+

Result:

+
{JSON.stringify(result, null, 2)}
+
+ )} +
+ ); +} +``` + +## Obtener tu clave API + + + + Navega a [Sim](https://sim.ai) e inicia sesión en tu cuenta. + + + Navega al flujo de trabajo que quieres ejecutar programáticamente. + + + Haz clic en "Deploy" para desplegar tu flujo de trabajo si aún no ha sido desplegado. + + + Durante el proceso de despliegue, selecciona o crea una clave API. + + + Copia la clave API para usarla en tu aplicación TypeScript/JavaScript. + + + + + Mantén tu clave API segura y nunca la incluyas en el control de versiones. Usa variables de entorno o gestión de configuración segura. + + +## Requisitos + +- Node.js 16+ +- TypeScript 5.0+ (para proyectos TypeScript) + +## Soporte para TypeScript + +El SDK está escrito en TypeScript y proporciona seguridad de tipos completa: + +```typescript +import { + SimStudioClient, + WorkflowExecutionResult, + WorkflowStatus, + SimStudioError +} from 'simstudio-ts-sdk'; + +// Type-safe client initialization +const client: SimStudioClient = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +// Type-safe workflow execution +const result: WorkflowExecutionResult = await client.executeWorkflow('workflow-id', { + input: { + message: 'Hello, TypeScript!' + } +}); + +// Type-safe status checking +const status: WorkflowStatus = await client.getWorkflowStatus('workflow-id'); +``` + +## Licencia + +Apache-2.0 \ No newline at end of file diff --git a/apps/docs/content/docs/es/tools/airtable.mdx b/apps/docs/content/docs/es/tools/airtable.mdx new file mode 100644 index 0000000000..3ff9df2e57 --- /dev/null +++ b/apps/docs/content/docs/es/tools/airtable.mdx @@ -0,0 +1,161 @@ +--- +title: Airtable +description: Lee, crea y actualiza Airtable +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + + + + + + + `} +/> + +{/* MANUAL-CONTENT-START:intro */} +[Airtable](https://airtable.com/) es una potente plataforma basada en la nube que combina la funcionalidad de una base de datos con la simplicidad de una hoja de cálculo. Permite a los usuarios crear bases de datos flexibles para organizar, almacenar y colaborar con información. + +Con Airtable, puedes: + +- **Crear bases de datos personalizadas**: Construye soluciones a medida para gestión de proyectos, calendarios de contenido, seguimiento de inventario y más +- **Visualizar datos**: Ve tu información como una cuadrícula, tablero kanban, calendario o galería +- **Automatizar flujos de trabajo**: Configura disparadores y acciones para automatizar tareas repetitivas +- **Integrar con otras herramientas**: Conéctate con cientos de otras aplicaciones a través de integraciones nativas y APIs + +En Sim, la integración de Airtable permite a tus agentes interactuar con tus bases de Airtable de forma programática. Esto permite operaciones de datos fluidas como recuperar información, crear nuevos registros y actualizar datos existentes, todo dentro de los flujos de trabajo de tu agente. Utiliza Airtable como una fuente o destino de datos dinámico para tus agentes, permitiéndoles acceder y manipular información estructurada como parte de sus procesos de toma de decisiones y ejecución de tareas. +{/* MANUAL-CONTENT-END */} + +## Instrucciones de uso + +Integra la funcionalidad de Airtable para gestionar registros de tablas. Listar, obtener, crear, + +## Herramientas + +### `airtable_list_records` + +Leer registros de una tabla de Airtable + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | ----------- | ----------- | +| `baseId` | string | Sí | ID de la base de Airtable | +| `tableId` | string | Sí | ID de la tabla | +| `maxRecords` | number | No | Número máximo de registros a devolver | +| `filterFormula` | string | No | Fórmula para filtrar registros \(p. ej., "\(\{Nombre del campo\} = \'Valor\'\)"\) | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `records` | json | Array de registros de Airtable recuperados | + +### `airtable_get_record` + +Recuperar un solo registro de una tabla de Airtable por su ID + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | ----------- | ----------- | +| `baseId` | string | Sí | ID de la base de Airtable | +| `tableId` | string | Sí | ID o nombre de la tabla | +| `recordId` | string | Sí | ID del registro a recuperar | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `record` | json | Registro de Airtable recuperado con id, createdTime y campos | +| `metadata` | json | Metadatos de la operación incluyendo el recuento de registros | + +### `airtable_create_records` + +Escribir nuevos registros en una tabla de Airtable + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Sí | ID de la base de Airtable | +| `tableId` | string | Sí | ID o nombre de la tabla | +| `records` | json | Sí | Array de registros para crear, cada uno con un objeto `fields` | +| `fields` | string | No | Sin descripción | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `records` | json | Array de registros de Airtable creados | + +### `airtable_update_record` + +Actualizar un registro existente en una tabla de Airtable por ID + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Sí | ID de la base de Airtable | +| `tableId` | string | Sí | ID o nombre de la tabla | +| `recordId` | string | Sí | ID del registro a actualizar | +| `fields` | json | Sí | Un objeto que contiene los nombres de los campos y sus nuevos valores | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `record` | json | Registro de Airtable actualizado con id, createdTime y campos | +| `metadata` | json | Metadatos de la operación incluyendo el recuento de registros y los nombres de campos actualizados | + +### `airtable_update_multiple_records` + +Actualizar múltiples registros existentes en una tabla de Airtable + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Sí | ID de la base de Airtable | +| `tableId` | string | Sí | ID o nombre de la tabla | +| `records` | json | Sí | Array de registros para actualizar, cada uno con un `id` y un objeto `fields` | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `records` | json | Array de registros de Airtable actualizados | + +## Notas + +- Categoría: `tools` +- Tipo: `airtable` diff --git a/apps/docs/content/docs/es/tools/arxiv.mdx b/apps/docs/content/docs/es/tools/arxiv.mdx new file mode 100644 index 0000000000..83e02f55cd --- /dev/null +++ b/apps/docs/content/docs/es/tools/arxiv.mdx @@ -0,0 +1,109 @@ +--- +title: ArXiv +description: Busca y recupera artículos académicos de ArXiv +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + + + + + + `} +/> + +{/* MANUAL-CONTENT-START:intro */} +[ArXiv](https://arxiv.org/) es un repositorio gratuito de acceso abierto de artículos científicos en campos como física, matemáticas, informática, biología cuantitativa, finanzas cuantitativas, estadística, ingeniería eléctrica, ciencias de sistemas y economía. ArXiv proporciona una amplia colección de preprints y artículos publicados, convirtiéndolo en un recurso primario para investigadores y profesionales de todo el mundo. + +Con ArXiv, puedes: + +- **Buscar artículos académicos**: Encuentra investigaciones por palabras clave, nombres de autores, títulos, categorías y más +- **Recuperar metadatos de artículos**: Accede a resúmenes, listas de autores, fechas de publicación y otra información bibliográfica +- **Descargar PDFs completos**: Obtén el texto completo de la mayoría de los artículos para un estudio en profundidad +- **Explorar contribuciones de autores**: Visualiza todos los artículos de un autor específico +- **Mantenerte actualizado**: Descubre las últimas publicaciones y temas tendencia en tu campo + +En Sim, la integración con ArXiv permite a tus agentes buscar, recuperar y analizar artículos científicos de ArXiv de forma programática. Esto te permite automatizar revisiones de literatura, crear asistentes de investigación o incorporar conocimiento científico actualizado en tus flujos de trabajo con agentes. Utiliza ArXiv como una fuente dinámica de datos para investigación, descubrimiento y extracción de conocimiento dentro de tus proyectos de Sim. +{/* MANUAL-CONTENT-END */} + +## Instrucciones de uso + +Busca artículos académicos, recupera metadatos, descarga artículos y accede a la amplia colección de investigación científica en ArXiv. + +## Herramientas + +### `arxiv_search` + +Busca artículos académicos en ArXiv por palabras clave, autores, títulos u otros campos. + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | ----------- | ----------- | +| `searchQuery` | string | Sí | La consulta de búsqueda a ejecutar | +| `searchField` | string | No | Campo en el que buscar: all (todos), ti (título), au (autor), abs (resumen), co (comentario), jr (revista), cat (categoría), rn (número de informe) | +| `maxResults` | number | No | Número máximo de resultados a devolver (predeterminado: 10, máximo: 2000) | +| `sortBy` | string | No | Ordenar por: relevance (relevancia), lastUpdatedDate (fecha de última actualización), submittedDate (fecha de envío) (predeterminado: relevance) | +| `sortOrder` | string | No | Orden de clasificación: ascending (ascendente), descending (descendente) (predeterminado: descending) | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `papers` | json | Array de artículos que coinciden con la consulta de búsqueda | + +### `arxiv_get_paper` + +Obtén información detallada sobre un artículo específico de ArXiv mediante su ID. + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | ----------- | ----------- | +| `paperId` | string | Sí | ID del artículo de ArXiv (p. ej., "1706.03762") | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `paper` | json | Información detallada sobre el artículo de ArXiv solicitado | + +### `arxiv_get_author_papers` + +Busca artículos de un autor específico en ArXiv. + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | ----------- | ----------- | +| `authorName` | string | Sí | Nombre del autor a buscar | +| `maxResults` | number | No | Número máximo de resultados a devolver (predeterminado: 10, máximo: 2000) | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `authorPapers` | json | Array de artículos escritos por el autor especificado | + +## Notas + +- Categoría: `tools` +- Tipo: `arxiv` diff --git a/apps/docs/content/docs/es/tools/browser_use.mdx b/apps/docs/content/docs/es/tools/browser_use.mdx new file mode 100644 index 0000000000..45452302f3 --- /dev/null +++ b/apps/docs/content/docs/es/tools/browser_use.mdx @@ -0,0 +1,90 @@ +--- +title: Uso del navegador +description: Ejecutar tareas de automatización del navegador +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + + + + `} +/> + +{/* MANUAL-CONTENT-START:intro */} +[BrowserUse](https://browser-use.com/) es una potente plataforma de automatización de navegador que te permite crear y ejecutar tareas de navegador de forma programática. Proporciona una manera de automatizar interacciones web mediante instrucciones en lenguaje natural, permitiéndote navegar por sitios web, completar formularios, extraer datos y realizar secuencias complejas de acciones sin escribir código. + +Con BrowserUse, puedes: + +- **Automatizar interacciones web**: Navegar a sitios web, hacer clic en botones, completar formularios y realizar otras acciones de navegador +- **Extraer datos**: Obtener contenido de sitios web, incluyendo texto, imágenes y datos estructurados +- **Ejecutar flujos de trabajo complejos**: Encadenar múltiples acciones para completar tareas web sofisticadas +- **Monitorear la ejecución de tareas**: Observar la ejecución de tareas de navegador en tiempo real con retroalimentación visual +- **Procesar resultados programáticamente**: Recibir salidas estructuradas de tareas de automatización web + +En Sim, la integración de BrowserUse permite a tus agentes interactuar con la web como si fueran usuarios humanos. Esto posibilita escenarios como investigación, recopilación de datos, envío de formularios y pruebas web, todo a través de simples instrucciones en lenguaje natural. Tus agentes pueden recopilar información de sitios web, interactuar con aplicaciones web y realizar acciones que normalmente requerirían navegación manual, ampliando sus capacidades para incluir toda la web como recurso. +{/* MANUAL-CONTENT-END */} + +## Instrucciones de uso + +Ejecuta tareas de automatización de navegador con BrowserUse para navegar por la web, extraer datos y realizar acciones como si un usuario real estuviera interactuando con el navegador. La tarea se ejecuta de forma asíncrona y el bloque realizará sondeos hasta completarse antes de devolver los resultados. + +## Herramientas + +### `browser_use_run_task` + +Ejecuta una tarea de automatización de navegador usando BrowserUse + +#### Entrada + +| Parámetro | Tipo | Obligatorio | Descripción | +| --------- | ---- | ----------- | ----------- | +| `task` | string | Sí | Qué debe hacer el agente de navegador | +| `variables` | json | No | Variables opcionales para usar como secretos \(formato: \{key: value\}\) | +| `format` | string | No | Sin descripción | +| `save_browser_data` | boolean | No | Si se deben guardar los datos del navegador | +| `model` | string | No | Modelo LLM a utilizar \(predeterminado: gpt-4o\) | +| `apiKey` | string | Sí | Clave API para la API de BrowserUse | + +#### Salida + +| Parámetro | Tipo | Descripción | +| --------- | ---- | ----------- | +| `id` | string | Identificador de ejecución de tarea | +| `success` | boolean | Estado de finalización de tarea | +| `output` | json | Datos de salida de la tarea | +| `steps` | json | Pasos de ejecución realizados | + +## Notas + +- Categoría: `tools` +- Tipo: `browser_use` diff --git a/apps/docs/content/docs/es/tools/confluence.mdx b/apps/docs/content/docs/es/tools/confluence.mdx new file mode 100644 index 0000000000..d828ba0e52 --- /dev/null +++ b/apps/docs/content/docs/es/tools/confluence.mdx @@ -0,0 +1,97 @@ +--- +title: Confluence +description: Interactúa con Confluence +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + +