import type { CreateMessageRequest, CreateMessageResult } from "@modelcontextprotocol/sdk/types.js";
import { validateRequest } from "../utils/validation.js";
import { server } from "../server.js";
import {
handleSendEmailCallback,
handleReplyEmailCallback,
handleReplyDraftCallback,
handleEditDraftCallback,
} from "./callbacks.js";
export async function sendSamplingRequest(
request: CreateMessageRequest,
): Promise<CreateMessageResult> {
try {
validateRequest(request);
const result = await server.createMessage(request.params);
const callback = request.params._meta?.callback;
if (callback && typeof callback === "string") {
await handleCallback(callback, result);
}
return result;
} catch (error) {
console.error("Sampling request failed:", error instanceof Error ? error.message : error);
if (error instanceof Error) {
throw error;
}
throw new Error(`Failed to process sampling request: ${error || "Unknown error"}`);
}
}
/**
* Handles a callback based on its type
* @param callback The callback type
* @param result The LLM result
* @returns The tool response
*/
async function handleCallback(callback: string, result: CreateMessageResult): Promise<string> {
switch (callback) {
case "send_email":
return handleSendEmailCallback(result);
case "reply_email":
return handleReplyEmailCallback(result);
case "reply_draft":
return handleReplyDraftCallback(result);
case "edit_draft":
return handleEditDraftCallback(result);
default:
throw new Error(`Unknown callback type: ${callback}`);
}
}