| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { Tool } from "./tool"
- import DESCRIPTION from "./task.txt"
- import { z } from "zod"
- import { Session } from "../session"
- import { Bus } from "../bus"
- import { Message } from "../session/message"
- export const TaskTool = Tool.define({
- id: "task",
- description: DESCRIPTION,
- parameters: z.object({
- description: z
- .string()
- .describe("A short (3-5 words) description of the task"),
- prompt: z.string().describe("The task for the agent to perform"),
- }),
- async execute(params, ctx) {
- const session = await Session.create(ctx.sessionID)
- const msg = await Session.getMessage(ctx.sessionID, ctx.messageID)
- const metadata = msg.metadata.assistant!
- function summary(input: Message.Info) {
- const result = []
- for (const part of input.parts) {
- if (part.type === "tool-invocation") {
- result.push({
- toolInvocation: part.toolInvocation,
- metadata: input.metadata.tool[part.toolInvocation.toolCallId],
- })
- }
- }
- return result
- }
- const unsub = Bus.subscribe(Message.Event.Updated, async (evt) => {
- if (evt.properties.info.metadata.sessionID !== session.id) return
- ctx.metadata({
- title: params.description,
- summary: summary(evt.properties.info),
- })
- })
- ctx.abort.addEventListener("abort", () => {
- Session.abort(session.id)
- })
- const result = await Session.chat({
- sessionID: session.id,
- modelID: metadata.modelID,
- providerID: metadata.providerID,
- parts: [
- {
- type: "text",
- text: params.prompt,
- },
- ],
- })
- unsub()
- return {
- metadata: {
- title: params.description,
- summary: summary(result),
- },
- output: result.parts.findLast((x) => x.type === "text")!.text,
- }
- },
- })
|