call-gpt5-tool.ts•2.77 kB
import { z } from 'zod';
import { BaseTool, ToolDefinition, ToolResponse } from './base-tool.js';
import { OpenAIClient } from '../openai-client.js';
import { PromptOptimizer } from '../prompt-optimizer.js';
const CallGPT5Schema = z.object({
prompt: z.string().describe('User prompt/question'),
taskType: z.enum(['analysis', 'generation', 'reasoning', 'coding']).describe('Type of task'),
domain: z.string().optional().describe('Specific domain (e.g., security, performance)'),
context: z.record(z.any()).optional().describe('Additional context from Claude session'),
customSystemPrompt: z.string().optional().describe('Custom system prompt override'),
optimizationLevel: z.enum(['balanced', 'creative', 'precise']).optional().describe('Response optimization level'),
temperature: z.number().min(0).max(2).optional().describe('Response creativity (0-2)'),
maxTokens: z.number().positive().optional().describe('Maximum response tokens'),
model: z.string().optional().describe('Override model (e.g., gpt-4o, gpt-4, gpt-5)'),
reasoningEffort: z.enum(['minimal', 'low', 'medium', 'high']).optional().describe('GPT-5 reasoning effort level'),
verbosity: z.enum(['low', 'medium', 'high']).optional().describe('GPT-5 response verbosity level')
});
export class CallGPT5Tool extends BaseTool {
readonly definition: ToolDefinition = {
name: 'call_gpt5',
description: 'Call OpenAI models (GPT-5 default, GPT-4o/GPT-4 available) with optimized system prompts and GPT-5 reasoning features',
inputSchema: CallGPT5Schema
};
constructor(
private openaiClient: OpenAIClient,
private promptOptimizer: PromptOptimizer
) {
super();
}
async execute(args: z.infer<typeof CallGPT5Schema>): Promise<ToolResponse> {
try {
let systemPrompt: string;
if (args.customSystemPrompt) {
systemPrompt = args.customSystemPrompt;
} else {
systemPrompt = this.promptOptimizer.optimizeSystemPrompt({
taskType: args.taskType,
domain: args.domain,
context: args.context,
optimizationLevel: args.optimizationLevel || 'balanced',
claudeContext: args.context?.claudeSession ? String(args.context.claudeSession) : undefined
});
}
const response = await this.openaiClient.chat({
prompt: args.prompt,
systemPrompt,
temperature: args.temperature,
maxTokens: args.maxTokens,
model: args.model,
reasoningEffort: args.reasoningEffort,
verbosity: args.verbosity
});
return this.createSuccessResponse(response.content);
} catch (error) {
return this.createErrorResponse(`GPT-5 call failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
}