Update modules/ai_assistant/ai_app.py
Browse files
modules/ai_assistant/ai_app.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1 |
#!/usr/bin/env python3
|
2 |
# -*- coding: utf-8 -*-
|
3 |
"""
|
4 |
-
وحدة مساعد الذكاء الاصطناعي
|
5 |
-
|
|
|
6 |
"""
|
7 |
|
8 |
import os
|
@@ -36,11 +37,50 @@ def _get_huggingface_secret(secret_name):
|
|
36 |
"""
|
37 |
# تحويل اسم السر إلى الصيغة المستخدمة في متغيرات البيئة في هجين فيس
|
38 |
env_var_name = f"HF_SECRET_{secret_name.upper()}"
|
|
|
|
|
39 |
secret_value = os.environ.get(env_var_name, '')
|
40 |
|
41 |
-
# إذا لم يتم العثور على
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
if not secret_value:
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
return secret_value
|
46 |
|
@@ -49,9 +89,25 @@ class ClaudeAIService:
|
|
49 |
"""خدمة التفاعل مع Claude AI API"""
|
50 |
|
51 |
def __init__(self, api_key=None):
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
if self.api_key:
|
54 |
-
|
|
|
|
|
|
|
|
|
55 |
else:
|
56 |
self.client = None
|
57 |
|
@@ -117,6 +173,13 @@ class AIAssistantApp:
|
|
117 |
# تهيئة خدمة Claude AI
|
118 |
self.claude_service = ClaudeAIService(api_key=st.session_state.anthropic_api_key)
|
119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
def run(self):
|
121 |
"""تشغيل تطبيق مساعد الذكاء الاصطناعي"""
|
122 |
# عرض عنوان التطبيق
|
|
|
1 |
#!/usr/bin/env python3
|
2 |
# -*- coding: utf-8 -*-
|
3 |
"""
|
4 |
+
وحدة مساعد الذكاء الاصطناعي (ai_app.py)
|
5 |
+
توفر فئة AIAssistantApp للتوافق مع التطبيق الرئيسي
|
6 |
+
تم إصلاح مشكلة الوصول إلى مفاتيح API ومشكلة دالة render المفقودة
|
7 |
"""
|
8 |
|
9 |
import os
|
|
|
37 |
"""
|
38 |
# تحويل اسم السر إلى الصيغة المستخدمة في متغيرات البيئة في هجين فيس
|
39 |
env_var_name = f"HF_SECRET_{secret_name.upper()}"
|
40 |
+
|
41 |
+
# محاولة الحصول على القيمة من متغيرات البيئة
|
42 |
secret_value = os.environ.get(env_var_name, '')
|
43 |
|
44 |
+
# إذا لم يتم العثور على القيمة، نحاول الحصول عليها من st.secrets
|
45 |
+
if not secret_value and hasattr(st, 'secrets'):
|
46 |
+
try:
|
47 |
+
# محاولة الوصول إلى السر مباشرة
|
48 |
+
if hasattr(st.secrets, secret_name):
|
49 |
+
secret_value = getattr(st.secrets, secret_name)
|
50 |
+
# محاولة الوصول إلى السر كعنصر في القاموس
|
51 |
+
elif secret_name in st.secrets:
|
52 |
+
secret_value = st.secrets[secret_name]
|
53 |
+
# محاولة الوصول إلى السر من خلال طريقة get
|
54 |
+
else:
|
55 |
+
secret_value = st.secrets.get(secret_name, '')
|
56 |
+
except:
|
57 |
+
pass
|
58 |
+
|
59 |
+
# محاولة ثالثة: البحث عن المفتاح بشكل مباشر في متغيرات البيئة
|
60 |
if not secret_value:
|
61 |
+
# محاولة البحث عن المفتاح بأشكال مختلفة
|
62 |
+
possible_names = [
|
63 |
+
secret_name,
|
64 |
+
secret_name.upper(),
|
65 |
+
f"HF_{secret_name}",
|
66 |
+
f"HF_{secret_name.upper()}",
|
67 |
+
f"HUGGINGFACE_{secret_name}",
|
68 |
+
f"HUGGINGFACE_{secret_name.upper()}"
|
69 |
+
]
|
70 |
+
|
71 |
+
for name in possible_names:
|
72 |
+
if name in os.environ:
|
73 |
+
secret_value = os.environ[name]
|
74 |
+
break
|
75 |
+
|
76 |
+
# محاولة رابعة: قيم افتراضية للاختبار (فقط في بيئة التطوير)
|
77 |
+
if not secret_value and os.environ.get('DEVELOPMENT_MODE') == 'true':
|
78 |
+
if secret_name.lower() == 'anthropic':
|
79 |
+
# قيمة افتراضية للاختبار فقط
|
80 |
+
secret_value = 'sk-ant-api-test-key'
|
81 |
+
elif secret_name.lower() == 'ai':
|
82 |
+
# قيمة افتراضية للاختبار فقط
|
83 |
+
secret_value = 'sk-ai-api-test-key'
|
84 |
|
85 |
return secret_value
|
86 |
|
|
|
89 |
"""خدمة التفاعل مع Claude AI API"""
|
90 |
|
91 |
def __init__(self, api_key=None):
|
92 |
+
# محاولة الحصول على المفتاح بعدة طرق
|
93 |
+
if not api_key:
|
94 |
+
api_key = _get_huggingface_secret("anthropic")
|
95 |
+
|
96 |
+
# إذا لم يتم العثور على المفتاح، نحاول بأسماء بديلة
|
97 |
+
if not api_key:
|
98 |
+
for alt_name in ["ANTHROPIC_API_KEY", "CLAUDE_API_KEY", "CLAUDE"]:
|
99 |
+
api_key = _get_huggingface_secret(alt_name)
|
100 |
+
if api_key:
|
101 |
+
break
|
102 |
+
|
103 |
+
self.api_key = api_key
|
104 |
+
|
105 |
if self.api_key:
|
106 |
+
try:
|
107 |
+
self.client = anthropic.Anthropic(api_key=self.api_key)
|
108 |
+
except Exception as e:
|
109 |
+
print(f"خطأ في تهيئة عميل Anthropic: {str(e)}")
|
110 |
+
self.client = None
|
111 |
else:
|
112 |
self.client = None
|
113 |
|
|
|
173 |
# تهيئة خدمة Claude AI
|
174 |
self.claude_service = ClaudeAIService(api_key=st.session_state.anthropic_api_key)
|
175 |
|
176 |
+
def render(self):
|
177 |
+
"""
|
178 |
+
عرض واجهة تطبيق مساعد الذكاء الاصطناعي
|
179 |
+
هذه الدالة مطلوبة للتوافق مع التطبيق الرئيسي
|
180 |
+
"""
|
181 |
+
self.run()
|
182 |
+
|
183 |
def run(self):
|
184 |
"""تشغيل تطبيق مساعد الذكاء الاصطناعي"""
|
185 |
# عرض عنوان التطبيق
|