abdull4h commited on
Commit
f63c425
·
verified ·
1 Parent(s): 6116543

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +296 -38
app.py CHANGED
@@ -1,4 +1,4 @@
1
- # Minimal app.py for Hugging Face Spaces - Vision 2030 Virtual Assistant
2
  import gradio as gr
3
  import time
4
  import logging
@@ -32,13 +32,16 @@ logger.info(f"GPU available: {has_gpu}")
32
 
33
  class Vision2030Assistant:
34
  def __init__(self):
35
- """Initialize the Vision 2030 Assistant with embedding models and sample data"""
36
  logger.info("Initializing Vision 2030 Assistant...")
37
 
38
  # Initialize embedding models
39
  self.load_embedding_models()
40
 
41
- # Use sample data to start
 
 
 
42
  self._create_sample_data()
43
  self._create_indices()
44
 
@@ -52,8 +55,159 @@ class Vision2030Assistant:
52
  "factual_accuracy": []
53
  }
54
  self.response_history = []
 
 
 
 
55
  logger.info("Vision 2030 Assistant initialized successfully")
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  @spaces.GPU
58
  def load_embedding_models(self):
59
  """Load embedding models for retrieval with GPU support"""
@@ -103,35 +257,11 @@ class Vision2030Assistant:
103
 
104
  def _create_sample_data(self):
105
  """Create sample Vision 2030 data"""
106
- logger.info("Creating sample Vision 2030 data")
107
-
108
- # English sample texts
109
- self.english_texts = [
110
- "Vision 2030 is Saudi Arabia's strategic framework to reduce dependence on oil, diversify the economy, and develop public sectors.",
111
- "The key pillars of Vision 2030 are a vibrant society, a thriving economy, and an ambitious nation.",
112
- "The Saudi Public Investment Fund (PIF) plays a crucial role in Vision 2030 by investing in strategic sectors.",
113
- "NEOM is a planned cross-border smart city in the Tabuk Province of northwestern Saudi Arabia, a key project of Vision 2030.",
114
- "Vision 2030 aims to increase women's participation in the workforce from 22% to 30%.",
115
- "The Red Sea Project is a Vision 2030 initiative to develop luxury tourism destinations across 50 islands off Saudi Arabia's Red Sea coast.",
116
- "Qiddiya is a entertainment mega-project being built in Riyadh as part of Vision 2030.",
117
- "Vision 2030 targets increasing the private sector's contribution to GDP from 40% to 65%.",
118
- "One goal of Vision 2030 is to increase foreign direct investment from 3.8% to 5.7% of GDP.",
119
- "Vision 2030 includes plans to develop the digital infrastructure and support for tech startups in Saudi Arabia."
120
- ]
121
 
122
- # Arabic sample texts (same content as English)
123
- self.arabic_texts = [
124
- "رؤية 2030 هي الإطار الاستراتيجي للمملكة العربية السعودية للحد من الاعتماد على النفط وتنويع الاقتصاد وتطوير القطاعات العامة.",
125
- "الركائز الرئيسية لرؤية 2030 هي مجتمع حيوي، واقتصاد مزدهر، ووطن طموح.",
126
- "يلعب صندوق الاستثمارات العامة السعودي دورًا محوريًا في رؤية 2030 من خلال الاستثمار في القطاعات الاستراتيجية.",
127
- "نيوم هي مدينة ذكية مخططة عبر الحدود في مقاطعة تبوك شمال غرب المملكة العربية السعودية، وهي مشروع رئيسي من رؤية 2030.",
128
- "تهدف رؤية 2030 إلى زيادة مشاركة المرأة في القوى العاملة من 22٪ إلى 30٪.",
129
- "مشروع البحر الأحمر هو مبادرة رؤية 2030 لتطوير وجهات سياحية فاخرة عبر 50 جزيرة قبالة ساحل البحر الأحمر السعودي.",
130
- "القدية هي مشروع ترفيهي ضخم يتم بناؤه في الرياض كجزء من رؤية 2030.",
131
- "تستهدف رؤية 2030 زيادة مساهمة القطاع الخاص في الناتج المحلي الإجمالي من 40٪ إلى 65٪.",
132
- "أحد أهداف رؤية 2030 هو زيادة الاستثمار الأجنبي المباشر من 3.8٪ إلى 5.7٪ من الناتج المحلي الإجمالي.",
133
- "تتضمن رؤية 2030 خططًا لتطوير البنية التحتية الرقمية والدعم للشركات الناشئة التكنولوجية في المملكة العربية السعودية."
134
- ]
135
 
136
  @spaces.GPU
137
  def _create_indices(self):
@@ -215,6 +345,16 @@ class Vision2030Assistant:
215
  "question": "ما هو مشروع البحر الأحمر؟",
216
  "lang": "ar",
217
  "reference_answer": "مشروع البحر الأحمر هو مبادرة رؤية 2030 لتطوير وجهات سياحية فاخرة عبر 50 جزيرة قبالة ساحل البحر الأحمر السعودي."
 
 
 
 
 
 
 
 
 
 
218
  }
219
  ]
220
  logger.info(f"Created {len(self.eval_data)} sample evaluation examples")
@@ -252,8 +392,8 @@ class Vision2030Assistant:
252
  logger.error(f"Error retrieving context: {str(e)}")
253
  return ""
254
 
255
- def generate_response(self, user_input):
256
- """Generate a response to user input using retrieval and predefined responses"""
257
  if not user_input or user_input.strip() == "":
258
  return ""
259
 
@@ -290,7 +430,7 @@ class Vision2030Assistant:
290
  elif "المرأة" in user_input or "النساء" in user_input:
291
  reply = "تهدف رؤية 2030 إلى زيادة مشاركة المرأة في القوى العاملة من 22٪ إلى 30٪."
292
  elif "القدية" in user_input:
293
- reply = "القدية هي مشروع ترفيهي ضخم يتم بناؤه في الرياض كجزء من رؤية 2030."
294
  elif "ماهي" in user_input or "ما هي" in user_input:
295
  reply = "رؤية 2030 هي الإطار الاستراتيجي للمملكة العربية السعودية للحد من الاعتماد على النفط وتنويع الاقتصاد وتطوير القطاعات العامة. الركائز الرئيسية لرؤية 2030 هي مجتمع حيوي، واقتصاد مزدهر، ووطن طموح."
296
  else:
@@ -306,7 +446,7 @@ class Vision2030Assistant:
306
  elif "women" in user_input.lower() or "female" in user_input.lower():
307
  reply = "Vision 2030 aims to increase women's participation in the workforce from 22% to 30%."
308
  elif "qiddiya" in user_input.lower():
309
- reply = "Qiddiya is a entertainment mega-project being built in Riyadh as part of Vision 2030."
310
  elif "what is" in user_input.lower():
311
  reply = "Vision 2030 is Saudi Arabia's strategic framework to reduce dependence on oil, diversify the economy, and develop public sectors. The key pillars are a vibrant society, a thriving economy, and an ambitious nation."
312
  else:
@@ -335,6 +475,124 @@ class Vision2030Assistant:
335
 
336
  return reply
337
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  def evaluate_factual_accuracy(self, response, reference):
339
  """Simple evaluation of factual accuracy by keyword matching"""
340
  # This is a simplified approach - in production, use more sophisticated methods
@@ -497,9 +755,9 @@ class Vision2030Assistant:
497
  # If language detection fails, assume English
498
  english_chunks.append(chunk)
499
 
500
- # Update the assistant's knowledge base
501
- self.english_texts = english_chunks
502
- self.arabic_texts = arabic_chunks
503
 
504
  # Recreate indices
505
  self._create_indices()
 
1
+ # Modified app.py for Hugging Face Spaces - Vision 2030 Virtual Assistant with Enhanced Knowledge Base
2
  import gradio as gr
3
  import time
4
  import logging
 
32
 
33
  class Vision2030Assistant:
34
  def __init__(self):
35
+ """Initialize the Vision 2030 Assistant with embedding models and enhanced knowledge base"""
36
  logger.info("Initializing Vision 2030 Assistant...")
37
 
38
  # Initialize embedding models
39
  self.load_embedding_models()
40
 
41
+ # Create an enhanced knowledge base
42
+ self._create_enhanced_knowledge_base()
43
+
44
+ # Create sample data with the enhanced knowledge
45
  self._create_sample_data()
46
  self._create_indices()
47
 
 
55
  "factual_accuracy": []
56
  }
57
  self.response_history = []
58
+
59
+ # Save original generate_response for fallback
60
+ self.original_generate_response = self._basic_generate_response
61
+
62
  logger.info("Vision 2030 Assistant initialized successfully")
63
 
64
+ def _create_enhanced_knowledge_base(self):
65
+ """Create an enhanced knowledge base with detailed information about Vision 2030"""
66
+ logger.info("Creating enhanced Vision 2030 knowledge base")
67
+
68
+ # Create a more comprehensive knowledge base
69
+ self.vision2030_knowledge = {
70
+ "general": {
71
+ "en": [
72
+ "Vision 2030 is Saudi Arabia's strategic framework to reduce dependence on oil, diversify the economy, and develop public sectors.",
73
+ "The key pillars of Vision 2030 are a vibrant society, a thriving economy, and an ambitious nation.",
74
+ "Vision 2030 was announced by Crown Prince Mohammed bin Salman in April 2016.",
75
+ "The true wealth of Saudi Arabia, as mentioned in Vision 2030, is its people and their potential."
76
+ ],
77
+ "ar": [
78
+ "رؤية 2030 هي الإطار الاستراتيجي للمملكة العربية السعودية للحد من الاعتماد على النفط وتنويع الاقتصاد وتطوير القطاعات العامة.",
79
+ "الركائز الرئيسية لرؤية 2030 هي مجتمع حيوي، واقتصاد مزدهر، ووطن طموح.",
80
+ "تم الإعلان عن رؤية 2030 من قبل ولي العهد محمد بن سلمان في أبريل 2016.",
81
+ "الثروة الحقيقية للمملكة العربية السعودية، كما ذكر في رؤية 2030، هي شعبها وإمكاناته."
82
+ ]
83
+ },
84
+ "real_wealth": {
85
+ "en": [
86
+ "The real wealth of Saudi Arabia, as emphasized in Vision 2030, is its people, particularly the youth.",
87
+ "Vision 2030 recognizes that the Saudi people, with their strong values and capabilities, are the true wealth of the nation.",
88
+ "The document states: 'Our people are our most valuable asset and the enablers of our success'."
89
+ ],
90
+ "ar": [
91
+ "الثروة الحقيقية للمملكة العربية السعودية، كما أكدت رؤية 2030، هي شعبها، وخاصة الشباب.",
92
+ "تعترف رؤية 2030 بأن الشعب السعودي، بقيمه وقدراته القوية، هو الثروة الحقيقية للأمة.",
93
+ "تنص الوثيقة على: 'شعبنا هو أثمن أصولنا وأساس نجاحنا'."
94
+ ]
95
+ },
96
+ "global_gateway": {
97
+ "en": [
98
+ "Saudi Arabia aims to strengthen its position as a global gateway by leveraging its strategic location between Asia, Europe, and Africa.",
99
+ "The Kingdom plans to build a unique logistical hub connecting three continents and improve infrastructure to facilitate trade.",
100
+ "Vision 2030 intends to establish special economic zones with competitive regulations to attract international investors.",
101
+ "The plan includes enhancing seaports, building regional connectivity through railways, and expanding airports."
102
+ ],
103
+ "ar": [
104
+ "تهدف المملكة العربية السعودية إلى تعزيز مكانتها كبوابة عالمية من خلال الاستفادة من موقعها الاستراتيجي بين آسيا وأوروبا وأفريقيا.",
105
+ "تخطط المملكة لبناء مركز لوجستي فريد يربط بين ثلاث قارات وتحسين البنية التحتية لتسهيل التجارة.",
106
+ "تعتزم رؤية 2030 إنشاء مناطق اقتصادية خاصة ذات لوائح تنافسية لجذب المستثمرين الدوليين.",
107
+ "تتضمن الخطة تعزيز الموانئ البحرية، وبناء الربط الإقليمي من خلال السكك الحديدية، وتوسيع المطارات."
108
+ ]
109
+ },
110
+ "tourism": {
111
+ "en": [
112
+ "Vision 2030 aims to develop tourism as a key non-oil sector, including religious, cultural, and leisure tourism.",
113
+ "The plan includes developing the Red Sea as a world-class luxury tourist destination, with a focus on sustainability.",
114
+ "Vision 2030 targets increasing tourism's contribution to GDP from 3% to 10% and hosting 100 million tourists annually by 2030.",
115
+ "The Al-Ula region is being developed as a major archaeological and cultural tourism destination."
116
+ ],
117
+ "ar": [
118
+ "تهدف رؤية 2030 إلى تطوير السياحة كقطاع غير نفطي رئيسي، بما في ذلك السياحة الدينية والثقافية والترفيهية.",
119
+ "تتضمن الخطة تطوير البحر الأحمر كوجهة سياحية فاخرة على مستوى عالمي، مع التركيز على الاستدامة.",
120
+ "تستهدف رؤية 2030 زيادة مساهمة السياحة في الناتج المحلي الإجمالي من 3٪ إلى 10٪ واستضافة 100 مليون سائح سنويًا بحلول عام 2030.",
121
+ "يتم تطوير منطقة العلا كوجهة سياحية أثرية وثقافية رئيسية."
122
+ ]
123
+ },
124
+ "youth": {
125
+ "en": [
126
+ "Vision 2030 recognizes youth as the Kingdom's most valuable resource, with 60% of the population under 30 years old.",
127
+ "The plan aims to reduce youth unemployment from 30% to 7% through education reform and economic growth.",
128
+ "Vision 2030 includes building a culture of entrepreneurship to harness the creative energy of Saudi youth.",
129
+ "The plan supports youth development programs, sports initiatives, and enhanced educational opportunities."
130
+ ],
131
+ "ar": [
132
+ "تعترف رؤية 2030 بالشباب كأثمن موارد المملكة، حيث يشكلون 60٪ من السكان تحت سن 30 عامًا.",
133
+ "تهدف الخطة إلى خفض بطالة الشباب من 30٪ إلى 7٪ من خلال إصلاح التعليم والنمو الاقتصادي.",
134
+ "تتضمن رؤية 2030 بناء ثقافة ريادة الأعمال للاستفادة من الطاقة الإبداعية للشباب السعودي.",
135
+ "تدعم الخطة برامج تنمية الشباب، والمبادرات الرياضية، وتعزيز الفرص التعليمية."
136
+ ]
137
+ },
138
+ "women": {
139
+ "en": [
140
+ "Vision 2030 aims to increase women's participation in the workforce from 22% to 30%.",
141
+ "The plan supports women's rights and empowerment across economic, social, and political spheres.",
142
+ "Vision 2030 has already resulted in policy changes allowing women to drive, travel independently, and participate more fully in public life.",
143
+ "The plan includes initiatives to increase female leadership positions in both public and private sectors."
144
+ ],
145
+ "ar": [
146
+ "تهدف رؤية 2030 إلى زيادة مشاركة المرأة في القوى العاملة من 22٪ إلى 30٪.",
147
+ "تدعم الخطة حقوق المرأة وتمكينها في المجالات الاقتصادية والاجتماعية والسياسية.",
148
+ "أدت رؤية 2030 بالفعل إلى تغييرات في السياسات تسمح للمرأة بالقيادة، والسفر بشكل مستقل، والمشاركة بشكل أكبر في الحياة العامة.",
149
+ "تتضمن الخطة مبادرات لزيادة المناصب القيادية النسائية في القطاعين العام والخاص."
150
+ ]
151
+ },
152
+ "projects": {
153
+ "en": [
154
+ "NEOM is a planned cross-border smart city in the Tabuk Province of northwestern Saudi Arabia, a key project of Vision 2030.",
155
+ "The Red Sea Project is a Vision 2030 initiative to develop luxury tourism destinations across 50 islands off Saudi Arabia's Red Sea coast.",
156
+ "Qiddiya is an entertainment mega-project being built in Riyadh as part of Vision 2030, intended to be the world's largest entertainment city.",
157
+ "The Line is a revolutionary urban development project within NEOM featuring a 170 km-long linear city without cars or streets.",
158
+ "AMAALA is an ultra-luxury tourism project on the Red Sea that focuses on wellness, healthy living, and meditation."
159
+ ],
160
+ "ar": [
161
+ "نيوم هي مدينة ذكية مخططة عبر الحدود في مقاطعة تبوك شمال غرب المملكة العربية السعودية، وهي مشروع رئيسي من رؤية 2030.",
162
+ "مشروع البحر الأحمر هو مبادرة رؤية 2030 لتطوير وجهات سياحية فاخرة عبر 50 جزيرة قبالة ساحل البحر الأحمر السعودي.",
163
+ "القدية هي مشروع ترفيهي ضخم يتم بناؤه في الرياض كجزء من رؤية 2030، ويهدف إلى أن يكون أكبر مدينة ترفيهية في العالم.",
164
+ "ذا لاين هو مشروع تطوير حضري ثوري ضمن نيوم يتميز بمدينة خطية طولها 170 كم بدون سيارات أو شوارع.",
165
+ "أمالا هو مشروع سياحي فائق الفخامة على البحر الأحمر يركز على العافية والحياة الصحية والتأمل."
166
+ ]
167
+ },
168
+ "economic_goals": {
169
+ "en": [
170
+ "Vision 2030 targets increasing the private sector's contribution to GDP from 40% to 65%.",
171
+ "One goal of Vision 2030 is to increase foreign direct investment from 3.8% to 5.7% of GDP.",
172
+ "Vision 2030 aims to raise the share of non-oil exports in non-oil GDP from 16% to 50%.",
173
+ "The plan targets increasing SME contribution to GDP from 20% to 35%.",
174
+ "Vision 2030 aims to lower the unemployment rate from 11.6% to 7%."
175
+ ],
176
+ "ar": [
177
+ "تستهدف رؤية 2030 زيادة مساهمة القطاع الخاص في الناتج المحلي الإجمالي من 40٪ إلى 65٪.",
178
+ "أحد أهداف رؤية 2030 هو زيادة الاستثمار الأجنبي المباشر من 3.8٪ إلى 5.7٪ من الناتج المحلي الإجمالي.",
179
+ "تهدف رؤية 2030 إلى رفع حصة الصادرات غير النفطية في الناتج المحلي الإجمالي غير النفطي من 16٪ إلى 50٪.",
180
+ "تستهدف الخطة زيادة مساهمة المنشآت الصغيرة والمتوسطة في الناتج المحلي الإجمالي من 20٪ إلى 35٪.",
181
+ "تهدف رؤية 2030 إلى خفض معدل البطالة من 11.6٪ إلى 7٪."
182
+ ]
183
+ },
184
+ "digital_transformation": {
185
+ "en": [
186
+ "Vision 2030 includes plans to develop the digital infrastructure and support for tech startups in Saudi Arabia.",
187
+ "The plan aims to increase internet penetration to 95% of households in urban areas and 65% in rural areas.",
188
+ "Vision 2030 focuses on building a digital economy, enhancing e-government services, and developing digital skills.",
189
+ "The plan includes initiatives to position Saudi Arabia as a leader in the Fourth Industrial Revolution technologies."
190
+ ],
191
+ "ar": [
192
+ "تتضمن رؤية 2030 خططًا لتطوير البنية التحتية الرقمية ودعم الشركات الناشئة التكنولوجية في المملكة العربية السعودية.",
193
+ "تهدف الخطة إلى زيادة انتشار الإنترنت إلى 95٪ من الأسر في المناطق الحضرية و 65٪ في المناطق الريفية.",
194
+ "تركز رؤية 2030 على بناء اقتصاد رقمي، وتعزيز خدمات الحكومة الإلكترونية، وتطوير المهارات الرقمية.",
195
+ "تتضمن الخطة مبادرات لوضع المملكة العربية السعودية كرائدة في تقنيات الثورة الصناعية الرابعة."
196
+ ]
197
+ }
198
+ }
199
+
200
+ # Initialize text lists before adding knowledge base content
201
+ self.english_texts = []
202
+ self.arabic_texts = []
203
+
204
+ # Add all knowledge to the text collections
205
+ for category in self.vision2030_knowledge:
206
+ self.english_texts.extend(self.vision2030_knowledge[category]["en"])
207
+ self.arabic_texts.extend(self.vision2030_knowledge[category]["ar"])
208
+
209
+ logger.info(f"Created enhanced knowledge base: {len(self.english_texts)} English, {len(self.arabic_texts)} Arabic texts")
210
+
211
  @spaces.GPU
212
  def load_embedding_models(self):
213
  """Load embedding models for retrieval with GPU support"""
 
257
 
258
  def _create_sample_data(self):
259
  """Create sample Vision 2030 data"""
260
+ logger.info("Creating additional sample data")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
 
262
+ # We already loaded the comprehensive knowledge base in _create_enhanced_knowledge_base
263
+ # Add any additional sample data here if needed
264
+ pass
 
 
 
 
 
 
 
 
 
 
265
 
266
  @spaces.GPU
267
  def _create_indices(self):
 
345
  "question": "ما هو مشروع البحر الأحمر؟",
346
  "lang": "ar",
347
  "reference_answer": "مشروع البحر الأحمر هو مبادرة رؤية 2030 لتطوير وجهات سياحية فاخرة عبر 50 جزيرة قبالة ساحل البحر الأحمر السعودي."
348
+ },
349
+ {
350
+ "question": "ما هي الثروة الحقيقية التي تعتز بها المملكة كما وردت في الرؤية؟",
351
+ "lang": "ar",
352
+ "reference_answer": "الثروة الحقيقية للمملكة العربية السعودية، كما أكدت رؤية 2030، هي شعبها، وخاصة الشباب."
353
+ },
354
+ {
355
+ "question": "كيف تسعى المملكة إلى تعزيز مكانتها كبوابة للعالم؟",
356
+ "lang": "ar",
357
+ "reference_answer": "تهدف المملكة العربية السعودية إلى تعزيز مكانتها كبوابة عالمية من خلال الاستفادة من موقعها الاستراتيجي بين آسيا وأوروبا وأفريقيا."
358
  }
359
  ]
360
  logger.info(f"Created {len(self.eval_data)} sample evaluation examples")
 
392
  logger.error(f"Error retrieving context: {str(e)}")
393
  return ""
394
 
395
+ def _basic_generate_response(self, user_input):
396
+ """Basic response generation with retrieval-based approach"""
397
  if not user_input or user_input.strip() == "":
398
  return ""
399
 
 
430
  elif "المرأة" in user_input or "النساء" in user_input:
431
  reply = "تهدف رؤية 2030 إلى زيادة مشاركة المرأة في القوى العاملة من 22٪ إلى 30٪."
432
  elif "القدية" in user_input:
433
+ reply = "القدية هي مشروع ترفيهي ضخم يتم بناؤه في الرياض كجزء من رؤية 2030، ويهدف إلى أن يكون أكبر مدينة ترفيهية في العالم."
434
  elif "ماهي" in user_input or "ما هي" in user_input:
435
  reply = "رؤية 2030 هي الإطار الاستراتيجي للمملكة العربية السعودية للحد من الاعتماد على النفط وتنويع الاقتصاد وتطوير القطاعات العامة. الركائز الرئيسية لرؤية 2030 هي مجتمع حيوي، واقتصاد مزدهر، ووطن طموح."
436
  else:
 
446
  elif "women" in user_input.lower() or "female" in user_input.lower():
447
  reply = "Vision 2030 aims to increase women's participation in the workforce from 22% to 30%."
448
  elif "qiddiya" in user_input.lower():
449
+ reply = "Qiddiya is an entertainment mega-project being built in Riyadh as part of Vision 2030, intended to be the world's largest entertainment city."
450
  elif "what is" in user_input.lower():
451
  reply = "Vision 2030 is Saudi Arabia's strategic framework to reduce dependence on oil, diversify the economy, and develop public sectors. The key pillars are a vibrant society, a thriving economy, and an ambitious nation."
452
  else:
 
475
 
476
  return reply
477
 
478
+ def generate_response(self, user_input):
479
+ """Enhanced response generation with specific question handling"""
480
+ if not user_input or user_input.strip() == "":
481
+ return ""
482
+
483
+ start_time = time.time()
484
+
485
+ try:
486
+ # Detect language
487
+ try:
488
+ lang = detect(user_input)
489
+ if lang != "ar": # Simplify to just Arabic vs non-Arabic
490
+ lang = "en"
491
+ except:
492
+ lang = "en" # Default fallback
493
+
494
+ logger.info(f"Detected language: {lang}")
495
+
496
+ # Check for specific question patterns first
497
+ if lang == "ar":
498
+ # About real wealth
499
+ if "الثروة الحقيقية" in user_input or "أثمن" in user_input or "ثروة" in user_input:
500
+ response = self.vision2030_knowledge["real_wealth"]["ar"][0]
501
+ # Record metrics and return
502
+ self._record_metrics(user_input, response, lang, start_time)
503
+ return response
504
+
505
+ # About global gateway
506
+ if "بوابة للعالم" in user_input or "مكانتها" in user_input or "موقعها الاستراتيجي" in user_input or "تعزيز مكانتها" in user_input:
507
+ response = self.vision2030_knowledge["global_gateway"]["ar"][0]
508
+ # Record metrics and return
509
+ self._record_metrics(user_input, response, lang, start_time)
510
+ return response
511
+
512
+ # About youth
513
+ if "الشباب" in user_input:
514
+ response = self.vision2030_knowledge["youth"]["ar"][0]
515
+ # Record metrics and return
516
+ self._record_metrics(user_input, response, lang, start_time)
517
+ return response
518
+
519
+ # About women
520
+ if "المرأة" in user_input or "النساء" in user_input:
521
+ response = self.vision2030_knowledge["women"]["ar"][0]
522
+ # Record metrics and return
523
+ self._record_metrics(user_input, response, lang, start_time)
524
+ return response
525
+
526
+ # About tourism
527
+ if "سياحة" in user_input or "السياحة" in user_input:
528
+ response = self.vision2030_knowledge["tourism"]["ar"][0]
529
+ # Record metrics and return
530
+ self._record_metrics(user_input, response, lang, start_time)
531
+ return response
532
+ else:
533
+ # English questions
534
+ # About real wealth
535
+ if "real wealth" in user_input.lower() or "valuable asset" in user_input.lower():
536
+ response = self.vision2030_knowledge["real_wealth"]["en"][0]
537
+ # Record metrics and return
538
+ self._record_metrics(user_input, response, lang, start_time)
539
+ return response
540
+
541
+ # About global gateway
542
+ if "global gateway" in user_input.lower() or "strategic location" in user_input.lower():
543
+ response = self.vision2030_knowledge["global_gateway"]["en"][0]
544
+ # Record metrics and return
545
+ self._record_metrics(user_input, response, lang, start_time)
546
+ return response
547
+
548
+ # About youth
549
+ if "youth" in user_input.lower() or "young" in user_input.lower():
550
+ response = self.vision2030_knowledge["youth"]["en"][0]
551
+ # Record metrics and return
552
+ self._record_metrics(user_input, response, lang, start_time)
553
+ return response
554
+
555
+ # About women
556
+ if "women" in user_input.lower() or "female" in user_input.lower():
557
+ response = self.vision2030_knowledge["women"]["en"][0]
558
+ # Record metrics and return
559
+ self._record_metrics(user_input, response, lang, start_time)
560
+ return response
561
+
562
+ # About tourism
563
+ if "tourism" in user_input.lower() or "tourist" in user_input.lower():
564
+ response = self.vision2030_knowledge["tourism"]["en"][0]
565
+ # Record metrics and return
566
+ self._record_metrics(user_input, response, lang, start_time)
567
+ return response
568
+
569
+ # If no specific match, fall back to the regular response generation
570
+ response = self.original_generate_response(user_input)
571
+ return response
572
+
573
+ except Exception as e:
574
+ logger.error(f"Error in enhanced generation: {str(e)}")
575
+ # Fall back to regular generation
576
+ return self.original_generate_response(user_input)
577
+
578
+ def _record_metrics(self, user_input, response, lang, start_time):
579
+ """Record metrics for a generated response"""
580
+ # Record response time
581
+ response_time = time.time() - start_time
582
+ self.metrics["response_times"].append(response_time)
583
+
584
+ logger.info(f"Generated response in {response_time:.2f}s")
585
+
586
+ # Store the interaction for later evaluation
587
+ interaction = {
588
+ "timestamp": datetime.now().isoformat(),
589
+ "user_input": user_input,
590
+ "response": response,
591
+ "language": lang,
592
+ "response_time": response_time
593
+ }
594
+ self.response_history.append(interaction)
595
+
596
  def evaluate_factual_accuracy(self, response, reference):
597
  """Simple evaluation of factual accuracy by keyword matching"""
598
  # This is a simplified approach - in production, use more sophisticated methods
 
755
  # If language detection fails, assume English
756
  english_chunks.append(chunk)
757
 
758
+ # Add the extracted chunks to our knowledge base
759
+ self.english_texts.extend(english_chunks)
760
+ self.arabic_texts.extend(arabic_chunks)
761
 
762
  # Recreate indices
763
  self._create_indices()