/**
* 텍스트 생성 도구
*/
import { z } from 'zod';
import { generateText as generateTextService, type GeminiModel, type GeminiProvider, getDefaultProvider } from '../services/gemini.js';
export const generateTextSchema = z.object({
prompt: z.string().describe('생성 프롬프트'),
context: z.string().optional().describe('추가 컨텍스트 (번역할 텍스트, 요약할 내용 등)'),
model: z.enum(['flash', 'pro']).optional().default('flash').describe('모델 선택'),
maxTokens: z.number().optional().default(8192).describe('최대 출력 토큰'),
provider: z.enum(['api', 'cli']).optional().describe('백엔드 선택: api(직접 API) 또는 cli(Gemini CLI, 높은 쿼터)'),
});
export type GenerateTextInput = z.infer<typeof generateTextSchema>;
export async function generateText(input: GenerateTextInput) {
const result = await generateTextService({
prompt: input.prompt,
context: input.context,
model: input.model as GeminiModel,
maxTokens: input.maxTokens,
provider: (input.provider || getDefaultProvider()) as GeminiProvider,
});
if (!result.success) {
return {
content: [{ type: 'text' as const, text: `오류: ${result.error}` }],
isError: true,
};
}
const providerLabel = result.provider === 'cli' ? 'CLI (높은 쿼터)' : 'API';
const summary = [
`## 생성 결과`,
`- **모델**: ${result.model}`,
`- **백엔드**: ${providerLabel}`,
result.tokenUsage
? `- **토큰**: ${result.tokenUsage.totalTokens} (입력: ${result.tokenUsage.promptTokens}, 출력: ${result.tokenUsage.completionTokens})`
: '',
'',
'---',
'',
result.text,
]
.filter(Boolean)
.join('\n');
return {
content: [{ type: 'text' as const, text: summary }],
};
}