agent-respond

Next

A function to respond to a message with an agent.

Docs
simple-ailib

Preview

Loading preview…
./src/registry/ai/agent-route-respond.ts
import type { Experimental_Agent as Agent } from "ai";
import { convertToModelMessages } from "ai";
import { AGENTS, type agentId } from "@/registry/ai/agents/agents-registry";
import type { AIUIMessage } from "@/registry/ai/messages";
import { idToReadableText } from "@/registry/lib/id-to-readable-text";

export function agentRoute(mentions: { id: string; name: string }[]): agentId {
	let mentionedAgentId = mentions?.[0]?.id;

	if (!mentionedAgentId) {
		mentionedAgentId = AGENTS[0];
	}

	return mentionedAgentId as agentId;
}

export async function agentExecute({
	agentId,
	agent,
	messages,
}: {
	agentId: string;
	// biome-ignore lint/suspicious/noExplicitAny: Agent type is not known
	agent: Agent<any, any, any>;
	messages: AIUIMessage[];
}) {
	const agentStream = agent.stream({
		messages: convertToModelMessages(messages),
	});

	return agentStream.toUIMessageStreamResponse<AIUIMessage>({
		originalMessages: messages,
		sendReasoning: true,
		messageMetadata: ({ part }) => {
			if (part.type === "start") {
				return {
					timestamp: new Date().toISOString(),
					agent: {
						id: agentId,
						name: idToReadableText(agentId),
					},
				};
			}

			if (part.type === "finish") {
				return {
					outputTokens: part.totalUsage.outputTokens,
				};
			}
		},
	});
}

Installation

npx shadcn@latest add @simple-ai/agent-respond

Usage

import { AgentRespond } from "@/lib/agent-respond"
AgentRespond()