/**
* relay_policy_execute Tool
*
* Execute a prompt using a pre-configured policy.
* Policies provide standardized execution with fallbacks and cost controls.
*/
import { z } from 'zod';
import { relay } from '@relayplane/sdk';
import { addRun, generateRunId } from './run-store.js';
import { getConfig } from '../config.js';
export const relayPolicyExecuteSchema = z.object({
policyId: z.string().describe('The policy ID to execute'),
prompt: z.string().describe('The prompt to execute'),
variables: z
.record(z.unknown())
.optional()
.describe('Optional variables to interpolate into the prompt'),
systemPrompt: z
.string()
.optional()
.describe('Optional override for the system prompt'),
});
export type RelayPolicyExecuteInput = z.infer<typeof relayPolicyExecuteSchema>;
export interface RelayPolicyExecuteResponse {
success: boolean;
runId: string;
output?: unknown;
error?: string;
model: string;
usedFallback: boolean;
policyId: string;
usage: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
estimatedCostUsd: number;
};
durationMs: number;
traceUrl: string;
}
export async function relayPolicyExecute(
input: RelayPolicyExecuteInput
): Promise<RelayPolicyExecuteResponse> {
const startTime = new Date();
const config = getConfig();
// Check if policy exists
if (!relay.hasPolicy(input.policyId)) {
const availablePolicies = relay.listPolicies();
throw new Error(
`Policy "${input.policyId}" not found. ` +
`Available policies: ${availablePolicies.join(', ') || '(none)'}. ` +
`Configure policies via relay.configure({ policies: {...} }) in your MCP server config.`
);
}
// Execute using the policy
const result = await relay.execute(input.policyId, {
prompt: input.prompt,
variables: input.variables,
systemPrompt: input.systemPrompt,
});
const endTime = new Date();
// Store the run for history
addRun({
runId: result.runId,
type: 'single',
model: result.model,
success: result.success,
startTime,
endTime,
durationMs: result.durationMs,
usage: {
promptTokens: result.usage.promptTokens,
completionTokens: result.usage.completionTokens,
totalTokens: result.usage.totalTokens,
estimatedProviderCostUsd: result.usage.estimatedCostUsd,
},
input: { policyId: input.policyId, prompt: input.prompt },
output: result.output,
error: result.error,
});
return {
success: result.success,
runId: result.runId,
output: result.output,
error: result.error,
model: result.model,
usedFallback: result.usedFallback,
policyId: result.policyId,
usage: result.usage,
durationMs: result.durationMs,
traceUrl: `${config.traceUrlBase}/${result.runId}`,
};
}
export const relayPolicyExecuteDefinition = {
name: 'relay_policy_execute',
description:
'Execute a prompt using a pre-configured policy. Policies provide standardized execution patterns with model selection, automatic fallbacks, and cost controls. Use relay_policies_list to see available policies.',
inputSchema: {
type: 'object' as const,
properties: {
policyId: {
type: 'string',
description: 'The policy ID to execute',
},
prompt: {
type: 'string',
description: 'The prompt to execute',
},
variables: {
type: 'object',
description: 'Optional variables to interpolate into the prompt (e.g., {{variable}})',
},
systemPrompt: {
type: 'string',
description: 'Optional override for the system prompt defined in the policy',
},
},
required: ['policyId', 'prompt'],
},
};