Skip to content

Instantly share code, notes, and snippets.

@cocodrino
Created April 25, 2025 01:35

Revisions

  1. cocodrino created this gist Apr 25, 2025.
    90 changes: 90 additions & 0 deletions mastra.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,90 @@
    import { Mastra } from "@mastra/core";
    import { Agent, Step, Workflow } from "@mastra/core/workflows";
    import { z } from "zod";
    import { openai } from "@ai-sdk/openai";

    // 1. Definición de Agentes :cite[1]:cite[7]
    const researcher = new Agent({
    name: "Investigador",
    instructions: "Investiga temas técnicos y devuelve 5 puntos clave en formato markdown",
    model: openai("gpt-4o-mini"),
    });

    const summarizer = new Agent({
    name: "Resumidor",
    instructions: "Genera resúmenes concisos de 3 líneas en español",
    model: openai("gpt-4o-mini"),
    });

    const translator = new Agent({
    name: "Traductor",
    instructions: "Traduce textos técnicos del inglés al español manteniendo el significado preciso",
    model: openai("claude-3-opus"),
    });

    // 2. Definición de Pasos del Workflow :cite[1]:cite[7]
    const researchStep = new Step({
    id: "investigacion",
    description: "Recopila información técnica",
    inputSchema: z.object({
    topic: z.string().describe("Tema de investigación"),
    }),
    execute: async ({ input }) => {
    return researcher.generate([
    { role: "user", content: `Investiga sobre ${input.topic} y devuelve 5 puntos clave` }
    ]);
    },
    });

    const summaryStep = new Step({
    id: "resumen",
    description: "Genera un resumen ejecutivo",
    inputSchema: z.object({
    researchData: z.string(),
    }),
    execute: async ({ input }) => {
    return summarizer.generate([
    { role: "user", content: `Resume este texto en 3 líneas: ${input.researchData}` }
    ]);
    },
    });

    const translationStep = new Step({
    id: "traduccion",
    description: "Traduce el contenido al español",
    inputSchema: z.object({
    summaryText: z.string(),
    }),
    execute: async ({ input }) => {
    return translator.generate([
    { role: "user", content: `Traduce a español: ${input.summaryText}` }
    ]);
    },
    });

    // 3. Configuración del Workflow :cite[1]:cite[3]
    const workflow = new Workflow({
    name: "workflow-investigacion",
    triggerSchema: z.object({
    topic: z.string().describe("Tema principal para investigación"),
    }),
    })
    .step(researchStep)
    .then(summaryStep)
    .then(translationStep)
    .commit();

    // 4. Ejecución del Workflow :cite[1]:cite[7]
    const mastra = new Mastra({
    workflows: { workflow },
    });

    async function main() {
    const result = await mastra.runWorkflow("workflow-investigacion", {
    topic: "Agentic Workflows en Mastra",
    });

    console.log("Resultado Final:\n", result.translationStep.output);
    }

    main();