conflict-nuxt-4/app/server/api/ai/index.post.js
2026-02-12 11:24:27 +03:30

140 lines
5.7 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default defineEventHandler(async (event) => {
try {
const body = await readBody(event);
const { action, text, language = "fa" } = body;
// بررسی پارامترهای ورودی
if (!action || !text) {
throw createError({
statusCode: 400,
statusMessage: "پارامترهای action و text الزامی هستند",
});
}
// API keyها از .env
const config = useRuntimeConfig();
const OPENAI_API_KEY = config.OPENAI_API_KEY;
const GEMINI_API_KEY = config.GEMINI_API_KEY;
// انتخاب سرویس AI
const useOpenAI = !!OPENAI_API_KEY;
const useGemini = !!GEMINI_API_KEY && !useOpenAI;
let aiResult = "";
if (useOpenAI) {
// OpenAI API
const response = await fetch(
"https://api.openai.com/v1/chat/completions",
{
method: "POST",
headers: {
Authorization: `Bearer ${OPENAI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gpt-3.5-turbo",
messages: [
{
role: "system",
content:
"تو یک دستیار فارسی‌زبان هستی که به کاربران در نوشتن کمک می‌کنی.",
},
{
role: "user",
content: getPrompt(action, text, language),
},
],
temperature: 0.7,
max_tokens: 500,
}),
}
);
if (!response.ok) {
throw new Error(`OpenAI API error: ${response.status}`);
}
const data = await response.json();
aiResult = data.choices[0]?.message?.content || "خطا در پردازش";
} else if (useGemini) {
// Google Gemini API
const response = await fetch(
`https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${GEMINI_API_KEY}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
contents: [
{
parts: [
{
text: getPrompt(action, text, language),
},
],
},
],
}),
}
);
if (!response.ok) {
throw new Error(`Gemini API error: ${response.status}`);
}
const data = await response.json();
aiResult =
data.candidates?.[0]?.content?.parts?.[0]?.text || "خطا در پردازش";
} else {
// پاسخ تستی (اگر API key ندارید)
aiResult = getMockResponse(action, text, language);
}
return {
success: true,
action,
result: aiResult,
timestamp: new Date().toISOString(),
};
} catch (error) {
console.error("AI API Error:", error);
return {
success: false,
error: error.message,
mockResponse: getMockResponse(action, text, language),
};
}
});
// تولید prompt بر اساس action
function getPrompt(action, text, language) {
const prompts = {
summarize: `لطفاً این متن را به فارسی خلاصه کن و نکات اصلی آن را استخراج کن. متن:\n\n${text}\n\nخلاصه:`,
improve: `این متن را از نظر دستوری، نگارشی و سبک نوشتار بهبود بده و آن را حرفه‌ای‌تر کن. متن:\n\n${text}\n\nمتن بهبود یافته:`,
translate: `این متن فارسی را به انگلیسی ترجمه کن. متن:\n\n${text}\n\nترجمه:`,
explain: `این متن را به زبان ساده توضیح بده و مفاهیم آن را شفاف سازی کن. متن:\n\n${text}\n\nتوضیح:`,
continue: `بر اساس این متن، آن را ادامه بده و محتوای مرتبط اضافه کن. متن:\n\n${text}\n\nادامه متن:`,
};
return prompts[action] || `در مورد این متن نظر بده:\n\n${text}\n\nنظر:`;
}
// پاسخ‌های تستی
function getMockResponse(action, text, language) {
const responses = {
summarize: `📝 خلاصه متن: این یک خلاصه آزمایشی از متن شماست که نکات کلیدی را پوشش می‌دهد. متن اصلی حدود ${text.length} کاراکتر داشت و شامل موضوعاتی مانند نمونه‌گیری و تست است.`,
improve: `✨ متن بهبود یافته: این نسخه اصلاح شده متن شماست با رعایت اصول نگارشی و ساختار بهتر. جملات روان‌تر شده و از واژگان مناسب‌تری استفاده شده است.`,
translate: `🌍 Translation: This is a sample translation of your Persian text into English. The original text was about testing and demonstration purposes.`,
explain: `💡 توضیح: این مفهوم به زبان ساده توضیح داده می‌شود تا درک آن آسان‌تر شود. منظور از این متن نمایش قابلیت‌های سیستم هوش مصنوعی است.`,
continue: `↪️ ادامه متن: این بخش ادامه منطقی متن شماست که ایده‌های مطرح شده را توسعه می‌دهد. با توجه به محتوای قبلی، می‌توان به موضوعات مرتبط دیگری نیز پرداخت.`,
};
return (
responses[action] ||
"پردازش AI انجام شد. برای استفاده از قابلیت‌های واقعی، لطفاً API key مناسب را تنظیم کنید."
);
}