Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/abdallah-salah7_graduation-project.json
T

1 line
28 KiB
JSON

{"repo": "abdallah-salah7/graduation-project", "files": {"Aoun.BLL/Services/Chat/AISmartService.cs": {"b9d1ed87c67348dd4c7d76b49f50544d44bb0f27": {"t": 1785746199.4892912, "n": 8345, "h": "4eebf60d182c9acb", "c": "using Microsoft.Extensions.Configuration;\nusing System.Net.Http.Headers;\nusing System.Net.Http.Json;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace Aoun.BLL.Services.Chat\n{\n public class AISmartService\n {\n private readonly HttpClient _http;\n private readonly string _geminiKey;\n private readonly string _openAiKey;\n private readonly string _deepSeekKey;\n private readonly string _groqKey;\n private string _workingModelName = string.Empty;\n\n\n public AISmartService(HttpClient http, IConfiguration config)\n {\n _http = http;\n\n _geminiKey = \"AIzaSyBIiyrHprtYZu5w7oMcJkj46KpqsA3HfWg\";\n _openAiKey = \"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\";\n _deepSeekKey = \"sk-1344380ac6dc49159708ae4120aa54c7\";\n _groqKey = \"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\";\n }\n\n private async Task<string> AskAIWithFallbackAsync(string systemPrompt, string userPrompt)\n {\n string fullPrompt = $\"{systemPrompt}\\n\\n{userPrompt}\";\n List<string> errors = new List<string>();\n\n // 1. Groq\n if (!string.IsNullOrEmpty(_groqKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying Groq (Llama 70B)...\");\n return await AskOpenAICompatibleAsync(_groqKey, \"https://api.groq.com/openai/v1/chat/completions\", \"llama-3.3-70b-versatile\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ Groq Failed: {ex.Message}\");\n errors.Add($\"Groq: {ex.Message}\");\n }\n }\n\n // 2. Gemini\n if (string.IsNullOrEmpty(_workingModelName))\n {\n try\n {\n string listModelsUrl = $\"https://generativelanguage.googleapis.com/v1beta/models?key={_geminiKey}\";\n var listResponse = await _http.GetAsync(listModelsUrl);\n\n if (!listResponse.IsSuccessStatusCode)\n throw new Exception(\"فشل الاتصال بجوجل لجلب النماذج!\");\n\n var listJson = await listResponse.Content.ReadFromJsonAsync<JsonElement>();\n\n foreach (var model in listJson.GetProperty(\"models\").EnumerateArray())\n {\n var name = model.GetProperty(\"name\").GetString();\n var methods = model.GetProperty(\"supportedGenerationMethods\").EnumerateArray().Select(m => m.GetString()).ToList();\n\n if (methods.Contains(\"generateContent\") && name != null && name.StartsWith(\"models/gemini\"))\n {\n _workingModelName = name;\n Console.WriteLine($\"✅ Auto-Discovered Working Model: {_workingModelName}\");\n break;\n }\n }\n }\n catch (Exception ex)\n {\n if (string.IsNullOrEmpty(_workingModelName))\n throw new Exception(\"مفتاحك لا يملك صلاحية لأي نموذج من نماذج جيميناي!\");\n }\n\n // 3. OpenAI\n if (!string.IsNullOrEmpty(_openAiKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying OpenAI (ChatGPT)...\");\n return await AskOpenAICompatibleAsync(_openAiKey, \"https://api.openai.com/v1/chat/completions\", \"gpt-4o-mini\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ OpenAI Failed: {ex.Message}\");\n errors.Add($\"OpenAI: {ex.Message}\");\n }\n }\n\n // 4. DeepSeek\n if (!string.IsNullOrEmpty(_deepSeekKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying DeepSeek...\");\n return await AskOpenAICompatibleAsync(_deepSeekKey, \"https://api.deepseek.com/chat/completions\", \"deepseek-chat\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ DeepSeek Failed: {ex.Message}\");\n errors.Add($\"DeepSeek: {ex.Message}\");\n }\n }\n\n throw new Exception($\"❌ All AI providers failed! Errors log: {string.Join(\" | \", errors)}\");\n }\n\n // ✅ الحل الوحيد للمشكلة\n throw new Exception(\"Unexpected error: no AI provider executed.\");\n }\n\n private async Task<string> AskGeminiAsync(string prompt)\n {\n string requestUrl = $\"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={_geminiKey}\";\n var requestBody = new { contents = new[] { new { parts = new[] { new { text = prompt } } } } };\n var request = new HttpRequestMessage(HttpMethod.Post, requestUrl)\n {\n Content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, \"application/json\")\n };\n\n var response = await _http.SendAsync(request);\n if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync());\n\n var jsonResponse = await response.Content.ReadFromJsonAsync<JsonElement>();\n return jsonResponse.GetProperty(\"candidates\")[0].GetProperty(\"content\").GetProperty(\"parts\")[0].GetProperty(\"text\").GetString() ?? \"\";\n }\n\n private async Task<string> AskOpenAICompatibleAsync(string apiKey, string url, string modelName, string sysPrompt, string usrPrompt)\n {\n string strictSystemPrompt = sysPrompt + \"\\nتعليمات صارمة: لا تذكر أبداً أنك ذكاء اصطناعي أو روبوت أو نموذج لغوي...\";\n\n var requestBody = new\n {\n model = modelName,\n messages = new[] {\n new { role = \"system\", content = strictSystemPrompt },\n new { role = \"user\", content = usrPrompt }\n },\n temperature = 0.3,\n max_tokens = 500\n };\n\n var request = new HttpRequestMessage(HttpMethod.Post, url);\n request.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", apiKey);\n request.Content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, \"application/json\");\n\n var response = await _http.SendAsync(request);\n if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync());\n\n var jsonResponse = await response.Content.ReadFromJsonAsync<JsonElement>();\n return jsonResponse.GetProperty(\"choices\")[0].GetProperty(\"message\").GetProperty(\"content\").GetString() ?? \"\";\n }\n\n public async Task<string> GetRecommendationsAsync(string userHistory, string availableCases)\n {\n string sysPrompt = \"أنت موظف بشري ودود في خدمة عملاء منصة 'عون'...\";\n string usrPrompt = $\"تاريخ المتبرع: {userHistory}\\nالحالات المتاحة حالياً: {availableCases}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n\n public async Task<string> ChatWithRAGAsync(string userQuestion, string dbContext)\n {\n string sysPrompt = $\"أنت إنسان طبيعي تعمل في منصة (عون)... {dbContext}\";\n string usrPrompt = $\"السؤال: {userQuestion}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n\n public async Task<string> GenerateCaseDescriptionAsync(string title, string category, decimal requiredAmount)\n {\n string sysPrompt = \"اكتب وصفاً تسويقياً...\";\n string usrPrompt = $\"العنوان: {title} | التصنيف: {category} | المبلغ: {requiredAmount}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n }\n}"}, "1cabf1a52d39ed6259224ca5db6b40b0923bb900": {"t": 1785760542.9838448, "n": 8345, "h": "4eebf60d182c9acb", "c": "using Microsoft.Extensions.Configuration;\nusing System.Net.Http.Headers;\nusing System.Net.Http.Json;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace Aoun.BLL.Services.Chat\n{\n public class AISmartService\n {\n private readonly HttpClient _http;\n private readonly string _geminiKey;\n private readonly string _openAiKey;\n private readonly string _deepSeekKey;\n private readonly string _groqKey;\n private string _workingModelName = string.Empty;\n\n\n public AISmartService(HttpClient http, IConfiguration config)\n {\n _http = http;\n\n _geminiKey = \"AIzaSyBIiyrHprtYZu5w7oMcJkj46KpqsA3HfWg\";\n _openAiKey = \"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\";\n _deepSeekKey = \"sk-1344380ac6dc49159708ae4120aa54c7\";\n _groqKey = \"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\";\n }\n\n private async Task<string> AskAIWithFallbackAsync(string systemPrompt, string userPrompt)\n {\n string fullPrompt = $\"{systemPrompt}\\n\\n{userPrompt}\";\n List<string> errors = new List<string>();\n\n // 1. Groq\n if (!string.IsNullOrEmpty(_groqKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying Groq (Llama 70B)...\");\n return await AskOpenAICompatibleAsync(_groqKey, \"https://api.groq.com/openai/v1/chat/completions\", \"llama-3.3-70b-versatile\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ Groq Failed: {ex.Message}\");\n errors.Add($\"Groq: {ex.Message}\");\n }\n }\n\n // 2. Gemini\n if (string.IsNullOrEmpty(_workingModelName))\n {\n try\n {\n string listModelsUrl = $\"https://generativelanguage.googleapis.com/v1beta/models?key={_geminiKey}\";\n var listResponse = await _http.GetAsync(listModelsUrl);\n\n if (!listResponse.IsSuccessStatusCode)\n throw new Exception(\"فشل الاتصال بجوجل لجلب النماذج!\");\n\n var listJson = await listResponse.Content.ReadFromJsonAsync<JsonElement>();\n\n foreach (var model in listJson.GetProperty(\"models\").EnumerateArray())\n {\n var name = model.GetProperty(\"name\").GetString();\n var methods = model.GetProperty(\"supportedGenerationMethods\").EnumerateArray().Select(m => m.GetString()).ToList();\n\n if (methods.Contains(\"generateContent\") && name != null && name.StartsWith(\"models/gemini\"))\n {\n _workingModelName = name;\n Console.WriteLine($\"✅ Auto-Discovered Working Model: {_workingModelName}\");\n break;\n }\n }\n }\n catch (Exception ex)\n {\n if (string.IsNullOrEmpty(_workingModelName))\n throw new Exception(\"مفتاحك لا يملك صلاحية لأي نموذج من نماذج جيميناي!\");\n }\n\n // 3. OpenAI\n if (!string.IsNullOrEmpty(_openAiKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying OpenAI (ChatGPT)...\");\n return await AskOpenAICompatibleAsync(_openAiKey, \"https://api.openai.com/v1/chat/completions\", \"gpt-4o-mini\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ OpenAI Failed: {ex.Message}\");\n errors.Add($\"OpenAI: {ex.Message}\");\n }\n }\n\n // 4. DeepSeek\n if (!string.IsNullOrEmpty(_deepSeekKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying DeepSeek...\");\n return await AskOpenAICompatibleAsync(_deepSeekKey, \"https://api.deepseek.com/chat/completions\", \"deepseek-chat\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ DeepSeek Failed: {ex.Message}\");\n errors.Add($\"DeepSeek: {ex.Message}\");\n }\n }\n\n throw new Exception($\"❌ All AI providers failed! Errors log: {string.Join(\" | \", errors)}\");\n }\n\n // ✅ الحل الوحيد للمشكلة\n throw new Exception(\"Unexpected error: no AI provider executed.\");\n }\n\n private async Task<string> AskGeminiAsync(string prompt)\n {\n string requestUrl = $\"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={_geminiKey}\";\n var requestBody = new { contents = new[] { new { parts = new[] { new { text = prompt } } } } };\n var request = new HttpRequestMessage(HttpMethod.Post, requestUrl)\n {\n Content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, \"application/json\")\n };\n\n var response = await _http.SendAsync(request);\n if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync());\n\n var jsonResponse = await response.Content.ReadFromJsonAsync<JsonElement>();\n return jsonResponse.GetProperty(\"candidates\")[0].GetProperty(\"content\").GetProperty(\"parts\")[0].GetProperty(\"text\").GetString() ?? \"\";\n }\n\n private async Task<string> AskOpenAICompatibleAsync(string apiKey, string url, string modelName, string sysPrompt, string usrPrompt)\n {\n string strictSystemPrompt = sysPrompt + \"\\nتعليمات صارمة: لا تذكر أبداً أنك ذكاء اصطناعي أو روبوت أو نموذج لغوي...\";\n\n var requestBody = new\n {\n model = modelName,\n messages = new[] {\n new { role = \"system\", content = strictSystemPrompt },\n new { role = \"user\", content = usrPrompt }\n },\n temperature = 0.3,\n max_tokens = 500\n };\n\n var request = new HttpRequestMessage(HttpMethod.Post, url);\n request.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", apiKey);\n request.Content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, \"application/json\");\n\n var response = await _http.SendAsync(request);\n if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync());\n\n var jsonResponse = await response.Content.ReadFromJsonAsync<JsonElement>();\n return jsonResponse.GetProperty(\"choices\")[0].GetProperty(\"message\").GetProperty(\"content\").GetString() ?? \"\";\n }\n\n public async Task<string> GetRecommendationsAsync(string userHistory, string availableCases)\n {\n string sysPrompt = \"أنت موظف بشري ودود في خدمة عملاء منصة 'عون'...\";\n string usrPrompt = $\"تاريخ المتبرع: {userHistory}\\nالحالات المتاحة حالياً: {availableCases}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n\n public async Task<string> ChatWithRAGAsync(string userQuestion, string dbContext)\n {\n string sysPrompt = $\"أنت إنسان طبيعي تعمل في منصة (عون)... {dbContext}\";\n string usrPrompt = $\"السؤال: {userQuestion}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n\n public async Task<string> GenerateCaseDescriptionAsync(string title, string category, decimal requiredAmount)\n {\n string sysPrompt = \"اكتب وصفاً تسويقياً...\";\n string usrPrompt = $\"العنوان: {title} | التصنيف: {category} | المبلغ: {requiredAmount}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n }\n}"}, "49ee5d7dc0a008ef83efae132a80d91026e21c55": {"t": 1785760544.54249, "n": 8613, "h": "a98a7a9200752482", "c": "using Microsoft.Extensions.Configuration;\nusing System.Net.Http.Headers;\nusing System.Net.Http.Json;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace Aoun.BLL.Services.Chat\n{\n public class AISmartService\n {\n private readonly HttpClient _http;\n private readonly string _geminiKey;\n private readonly string _openAiKey;\n private readonly string _deepSeekKey;\n private readonly string _groqKey;\n\n public AISmartService(HttpClient http, IConfiguration config)\n {\n _http = http;\n\n // ⚠️ نصيحة أمنية: يفضل دايماً نقل المفاتيح دي لـ appsettings.json عشان متبقاش مكشوفة في الكود\n _geminiKey = \"AIzaSyBIiyrHprtYZu5w7oMcJkj46KpqsA3HfWg\";\n _openAiKey = \"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\";\n _deepSeekKey = \"sk-1344380ac6dc49159708ae4120aa54c7\";\n _groqKey = \"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\";\n }\n\n // =================================================================\n // 🚀 السحر الهندسي: استراتيجية التبديل التلقائي (Groq في المقدمة)\n // =================================================================\n private async Task<string> AskAIWithFallbackAsync(string systemPrompt, string userPrompt)\n {\n string fullPrompt = $\"{systemPrompt}\\n\\n{userPrompt}\";\n List<string> errors = new List<string>();\n\n // 1. المحاولة الأولى: Groq (أسرع ومجاني ومفتاحه شغال)\n if (!string.IsNullOrEmpty(_groqKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying Groq (Llama 70B)...\");\n // غيرنا الموديل للنسخة الـ 70B العملاقة والذكية جداً في العربي\n return await AskOpenAICompatibleAsync(_groqKey, \"https://api.groq.com/openai/v1/chat/completions\", \"llama-3.3-70b-versatile\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ Groq Failed: {ex.Message}\");\n errors.Add($\"Groq: {ex.Message}\");\n }\n }\n\n // 2. المحاولة الثانية: Gemini\n if (!string.IsNullOrEmpty(_geminiKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying Google Gemini...\");\n return await AskGeminiAsync(fullPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ Gemini Failed: {ex.Message}\");\n errors.Add($\"Gemini: {ex.Message}\");\n }\n }\n\n // 3. المحاولة الثالثة: OpenAI (ChatGPT)\n if (!string.IsNullOrEmpty(_openAiKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying OpenAI (ChatGPT)...\");\n return await AskOpenAICompatibleAsync(_openAiKey, \"https://api.openai.com/v1/chat/completions\", \"gpt-4o-mini\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ OpenAI Failed: {ex.Message}\");\n errors.Add($\"OpenAI: {ex.Message}\");\n }\n }\n\n // 4. المحاولة الرابعة: DeepSeek\n if (!string.IsNullOrEmpty(_deepSeekKey))\n {\n try\n {\n Console.WriteLine(\"🤖 [Routing] Trying DeepSeek...\");\n return await AskOpenAICompatibleAsync(_deepSeekKey, \"https://api.deepseek.com/chat/completions\", \"deepseek-chat\", systemPrompt, userPrompt);\n }\n catch (Exception ex)\n {\n Console.WriteLine($\"⚠️ DeepSeek Failed: {ex.Message}\");\n errors.Add($\"DeepSeek: {ex.Message}\");\n }\n }\n\n // لو الـ 4 وقعوا\n throw new Exception($\"❌ All AI providers failed! Errors log: {string.Join(\" | \", errors)}\");\n }\n\n // =================================================================\n // 🌐 دوال الاتصال الخاصة بكل شركة\n // =================================================================\n\n private async Task<string> AskGeminiAsync(string prompt)\n {\n string requestUrl = $\"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={_geminiKey}\";\n var requestBody = new { contents = new[] { new { parts = new[] { new { text = prompt } } } } };\n var request = new HttpRequestMessage(HttpMethod.Post, requestUrl)\n {\n Content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, \"application/json\")\n };\n\n var response = await _http.SendAsync(request);\n if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync());\n\n var jsonResponse = await response.Content.ReadFromJsonAsync<JsonElement>();\n return jsonResponse.GetProperty(\"candidates\")[0].GetProperty(\"content\").GetProperty(\"parts\")[0].GetProperty(\"text\").GetString() ?? \"\";\n }\n\n private async Task<string> AskOpenAICompatibleAsync(string apiKey, string url, string modelName, string sysPrompt, string usrPrompt)\n {\n // تعليمات صارمة جداً تمنع الموديل من التصرف كآلة\n string strictSystemPrompt = sysPrompt + \"\\nتعليمات صارمة: لا تذكر أبداً أنك ذكاء اصطناعي أو روبوت أو نموذج لغوي. لا تستخدم مقدمات مثل 'بصفتي كذا' أو 'إليك الإجابة'. تحدث كإنسان طبيعي، ودود، ومباشر يعمل في فريق الدعم. استخدم صيغة المخاطب مع المستخدم (أنت، لك، يا فاعل الخير).\";\n\n var requestBody = new\n {\n model = modelName,\n messages = new[] {\n new { role = \"system\", content = strictSystemPrompt },\n new { role = \"user\", content = usrPrompt }\n },\n temperature = 0.3, // نسبة ممتازة للردود المنطقية الإنسانية\n max_tokens = 500 // مناسب جداً عشان ميضربش Rate Limit من Groq\n };\n\n var request = new HttpRequestMessage(HttpMethod.Post, url);\n request.Headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", apiKey);\n request.Content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, \"application/json\");\n\n var response = await _http.SendAsync(request);\n if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync());\n\n var jsonResponse = await response.Content.ReadFromJsonAsync<JsonElement>();\n return jsonResponse.GetProperty(\"choices\")[0].GetProperty(\"message\").GetProperty(\"content\").GetString() ?? \"\";\n }\n\n // ==========================================\n // 🎯 دوال منصة عون (بلمسة إنسانية)\n // ==========================================\n\n public async Task<string> GetRecommendationsAsync(string userHistory, string availableCases)\n {\n string sysPrompt = \"أنت موظف بشري ودود في خدمة عملاء منصة 'عون'. تحدث مع المتبرع مباشرة ورشح له 3 حالات تناسبه من القائمة باختصار وبأسلوب إنساني دافئ. (مثال: أهلاً بك ، بناءً على تبرعاتك السابقة أنصحك بـ...)\";\n string usrPrompt = $\"تاريخ المتبرع: {userHistory}\\nالحالات المتاحة حالياً: {availableCases}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n\n public async Task<string> ChatWithRAGAsync(string userQuestion, string dbContext)\n {\n string sysPrompt = $\"أنت إنسان طبيعي تعمل في منصة (عون). أجب على السائل فوراً بلغة ودودة ومباشرة بناءً على هذه المعلومات فقط: {dbContext}. إذا سُئلت عن الزكاة، احسبها فوراً (المبلغ × 2.5%) وأعطه الناتج النهائي بلا إطالة.\";\n string usrPrompt = $\"السؤال: {userQuestion}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n\n public async Task<string> GenerateCaseDescriptionAsync(string title, string category, decimal requiredAmount)\n {\n string sysPrompt = \"اكتب وصفاً تسويقياً وإنسانياً مؤثراً لهذه الحالة لجذب التبرعات. ادخل في صلب الموضوع مباشرة بدون أي مقدمات أو تحيات. النص يجب ألا يتجاوز 3 أسطر.\";\n string usrPrompt = $\"العنوان: {title} | التصنيف: {category} | المبلغ: {requiredAmount}\";\n return await AskAIWithFallbackAsync(sysPrompt, usrPrompt);\n }\n }\n}"}}}}