aab20abdullah commited on
Commit
c1c9207
·
verified ·
1 Parent(s): 454f30e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -23
app.py CHANGED
@@ -1,40 +1,87 @@
1
  import gradio as gr
2
  from huggingface_hub import hf_hub_download
3
  from llama_cpp import Llama
 
4
  import os
5
 
6
- # [1] إعدادات البيئة وتحميل ملف GGUF
7
  HF_TOKEN = os.environ.get("HF_TOKEN")
8
- REPO_ID = "aab20abdullah/Akin-Yurt-Llama3-8B"
9
- FILENAME = "AkinYurt-Llama3-Q4_K_M.gguf"
 
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  print("📥 GGUF Motoru İndiriliyor / Yükleniyor...")
12
  try:
13
- # سيقوم النظام بتحميل الملف (حوالي 4.5 جيجا) والاحتفاظ به في الكاش
14
  model_path = hf_hub_download(
15
- repo_id=REPO_ID,
16
- filename=FILENAME,
17
  token=HF_TOKEN
18
  )
19
  print(f"✅ Model başarıyla yüklendi: {model_path}")
20
  except Exception as e:
21
- print(f"⚠️ İndirme Hatası: {e}. Lütfen HF_TOKEN'ı kontrol edin.")
22
  model_path = ""
23
 
24
- # [2] تهيئة محرك Llama C++ ليعمل على 4GB RAM
25
  if model_path:
26
  print("🐺 Akın Yurt C++ Motoru Başlatılıyor...")
27
  llm = Llama(
28
  model_path=model_path,
29
- n_ctx=1024, # تقليل السياق إلى 1024 لضمان عدم تجاوز 4GB RAM
30
- n_threads=2, # استخدام نواتين فقط للحفاظ على استقرار المعالج
31
- n_gpu_layers=0, # 0 يعني الاعتماد بالكامل على الـ CPU والـ RAM (للأجهزة الضعيفة)
32
  verbose=False
33
  )
34
  else:
35
  llm = None
36
 
37
- # [3] ميثاق القسم والهوية
38
  UKÜCÜ_YEMINI = """ALLAHA, KURANA, YEMİN OLSUN.
39
  ŞEHİTLERİM, GAZİLERİM, EMİN OLSUN.
40
  ÜLKÜCÜ TÜRK GENÇLİĞİ OLARAK:
@@ -46,23 +93,25 @@ YILANLARDAN OLMAYACAĞIZ! SATANLARDAN OLMAYACAĞIZ! KAÇANLARDAN OLMAYACAĞIZ!
46
  YIKILMAYACAĞIZ. BAŞARACAĞIZ, BAŞARACAĞIZ, BAŞARACAĞIZ.
47
  TANRI TÜRKÜ KORUSUN VE YÜCELTSİN. (AMİN)"""
48
 
49
- SYSTEM_PROMPT = """Senin adın Akın Yurt. Kerkük'te görev yapan, Türkmeneli davasına adanmış, zeki bir asistansın.
50
  Geliştiricilerin: Abdullah Ali Bahaaldeen, Ali El-Hürmüzlü ve Usame Alaaddin. TÖGB birimi tarafından geliştirildin."""
51
 
52
- # [4] نظام المعالجة والرد (Llama-CPP Engine)
53
  def respond(message, history):
54
  if not llm:
55
- yield "⚠️ HATA: Model yüklenemedi. HF_TOKEN ve dosya adını kontrol edin."
56
  return
57
 
58
- # الاستجابة للقسم
59
  yemin_triggers = ["yemin", "yemin et", "andı oku", "yemini oku"]
60
  if any(trigger in message.lower() for trigger in yemin_triggers):
61
  yield UKÜCÜ_YEMINI
62
  return
63
 
64
- # بناء سياق المحادثة لمعمارية Llama-3
65
- messages = [{"role": "system", "content": SYSTEM_PROMPT}]
 
 
 
66
  for user_msg, assistant_msg in history:
67
  if user_msg: messages.append({"role": "user", "content": user_msg})
68
  if assistant_msg: messages.append({"role": "assistant", "content": assistant_msg})
@@ -70,7 +119,6 @@ def respond(message, history):
70
 
71
  response = ""
72
  try:
73
- # التوليد المباشر من الموديل المحلي بنظام البث (Streaming)
74
  stream = llm.create_chat_completion(
75
  messages=messages,
76
  max_tokens=512,
@@ -80,7 +128,6 @@ def respond(message, history):
80
  )
81
 
82
  for chunk in stream:
83
- # التقاط الكلمات المولدّة
84
  delta = chunk['choices'][0]['delta']
85
  if 'content' in delta:
86
  token = delta['content']
@@ -89,7 +136,7 @@ def respond(message, history):
89
  except Exception as e:
90
  yield f"⚠️ Motor Hatası: {str(e)}"
91
 
92
- # [5] الواجهة الرسومية
93
  custom_theme = gr.themes.Soft(primary_hue="blue", secondary_hue="cyan").set(
94
  button_primary_background_fill="#007bff",
95
  button_primary_text_color="white",
@@ -97,12 +144,12 @@ custom_theme = gr.themes.Soft(primary_hue="blue", secondary_hue="cyan").set(
97
 
98
  with gr.Blocks(theme=custom_theme, title="Akın Yurt - TÖGB") as demo:
99
  gr.Markdown("# 🐺 Akın Yurt")
100
- gr.Markdown("### Türkmeneli Dijital Asistanı (GGUF Offline Motoru - 4GB Optimize)")
101
  gr.Markdown("---")
102
 
103
  gr.ChatInterface(
104
  respond,
105
- examples=["Seni kim yaptı?", "Andı oku", "Kerkük neresidir?"],
106
  cache_examples=False,
107
  )
108
 
 
1
  import gradio as gr
2
  from huggingface_hub import hf_hub_download
3
  from llama_cpp import Llama
4
+ import pandas as pd
5
  import os
6
 
7
+ # [1] إعدادات البيئة والمستودعات
8
  HF_TOKEN = os.environ.get("HF_TOKEN")
9
+ MODEL_REPO = "aab20abdullah/Akin-Yurt-Llama3-8B"
10
+ MODEL_FILENAME = "AkinYurt-Llama3-Q4_K_M.gguf"
11
+ DATASET_REPO = "aab20abdullah/turkmen-martyrs-dataset"
12
 
13
+ # [2] إنشاء مجلد data وتنزيل ملفات الشهداء (Parquet)
14
+ os.makedirs("data", exist_ok=True)
15
+ parquet_files = [
16
+ "train-00000-of-00001.parquet",
17
+ "validation-00000-of-00001.parquet",
18
+ "test-00000-of-00001.parquet"
19
+ ]
20
+
21
+ print("📥 Şehitler Veritabanı (Parquet) İndiriliyor...")
22
+ df_list = []
23
+ for file in parquet_files:
24
+ try:
25
+ # بعض المستودعات تضع الملفات داخل مجلد data/ في السيرفر، إذا فشل التنزيل سنحاول مع المسار
26
+ file_path = hf_hub_download(
27
+ repo_id=DATASET_REPO,
28
+ filename=f"data/{file}" if "data/" not in file else file, # محاولة التكيف مع هيكلة HF
29
+ repo_type="dataset",
30
+ local_dir="data", # حفظها في المجلد المحلي data/
31
+ token=HF_TOKEN
32
+ )
33
+ df_list.append(pd.read_parquet(file_path))
34
+ print(f"✅ İndirildi: {file}")
35
+ except Exception as e:
36
+ print(f"⚠️ Dosya bulunamadı veya hata ({file}): {e}")
37
+
38
+ # دمج جميع البيانات في قاعدة واحدة
39
+ if df_list:
40
+ martyrs_df = pd.concat(df_list, ignore_index=True)
41
+ print(f"✅ Toplam {len(martyrs_df)} şehit kaydı sisteme yüklendi.")
42
+ else:
43
+ martyrs_df = pd.DataFrame()
44
+ print("⚠️ Veritabanı boş. Lütfen HF_TOKEN ve dosya adlarını kontrol edin.")
45
+
46
+ def search_martyrs(query):
47
+ if martyrs_df.empty: return ""
48
+ query_words = query.lower().split()
49
+ results = []
50
+ for _, row in martyrs_df.iterrows():
51
+ row_text = " | ".join([str(val) for val in row.values])
52
+ if any(word in row_text.lower() for word in query_words if len(word) > 3):
53
+ results.append(row_text)
54
+ if len(results) >= 3: break
55
+ if results:
56
+ return "\n\n[RESMİ VERİTABANI BİLGİSİ - BU BİLGİYİ KULLANARAK CEVAP VER]:\n" + "\n".join(results)
57
+ return ""
58
+
59
+ # [3] تنزيل وتهيئة محرك Llama C++ (GGUF لـ 4GB RAM)
60
  print("📥 GGUF Motoru İndiriliyor / Yükleniyor...")
61
  try:
 
62
  model_path = hf_hub_download(
63
+ repo_id=MODEL_REPO,
64
+ filename=MODEL_FILENAME,
65
  token=HF_TOKEN
66
  )
67
  print(f"✅ Model başarıyla yüklendi: {model_path}")
68
  except Exception as e:
69
+ print(f"⚠️ Model İndirme Hatası: {e}")
70
  model_path = ""
71
 
 
72
  if model_path:
73
  print("🐺 Akın Yurt C++ Motoru Başlatılıyor...")
74
  llm = Llama(
75
  model_path=model_path,
76
+ n_ctx=1024, # استهلاك ذاكرة منخفض
77
+ n_threads=2, # ثبات المعالج
78
+ n_gpu_layers=0, # الاعتماد على CPU
79
  verbose=False
80
  )
81
  else:
82
  llm = None
83
 
84
+ # [4] ميثاق القسم والهوية
85
  UKÜCÜ_YEMINI = """ALLAHA, KURANA, YEMİN OLSUN.
86
  ŞEHİTLERİM, GAZİLERİM, EMİN OLSUN.
87
  ÜLKÜCÜ TÜRK GENÇLİĞİ OLARAK:
 
93
  YIKILMAYACAĞIZ. BAŞARACAĞIZ, BAŞARACAĞIZ, BAŞARACAĞIZ.
94
  TANRI TÜRKÜ KORUSUN VE YÜCELTSİN. (AMİN)"""
95
 
96
+ BASE_SYSTEM_PROMPT = """Senin adın Akın Yurt. Kerkük'te görev yapan, Türkmeneli davasına adanmış, zeki bir asistansın.
97
  Geliştiricilerin: Abdullah Ali Bahaaldeen, Ali El-Hürmüzlü ve Usame Alaaddin. TÖGB birimi tarafından geliştirildin."""
98
 
99
+ # [5] نظام المعالجة والرد
100
  def respond(message, history):
101
  if not llm:
102
+ yield "⚠️ HATA: Model yüklenemedi. Lütfen sistemi kontrol edin."
103
  return
104
 
 
105
  yemin_triggers = ["yemin", "yemin et", "andı oku", "yemini oku"]
106
  if any(trigger in message.lower() for trigger in yemin_triggers):
107
  yield UKÜCÜ_YEMINI
108
  return
109
 
110
+ # دمج معلومات الشهداء
111
+ db_context = search_martyrs(message)
112
+ dynamic_system_prompt = BASE_SYSTEM_PROMPT + db_context
113
+
114
+ messages = [{"role": "system", "content": dynamic_system_prompt}]
115
  for user_msg, assistant_msg in history:
116
  if user_msg: messages.append({"role": "user", "content": user_msg})
117
  if assistant_msg: messages.append({"role": "assistant", "content": assistant_msg})
 
119
 
120
  response = ""
121
  try:
 
122
  stream = llm.create_chat_completion(
123
  messages=messages,
124
  max_tokens=512,
 
128
  )
129
 
130
  for chunk in stream:
 
131
  delta = chunk['choices'][0]['delta']
132
  if 'content' in delta:
133
  token = delta['content']
 
136
  except Exception as e:
137
  yield f"⚠️ Motor Hatası: {str(e)}"
138
 
139
+ # [6] الواجهة الرسومية
140
  custom_theme = gr.themes.Soft(primary_hue="blue", secondary_hue="cyan").set(
141
  button_primary_background_fill="#007bff",
142
  button_primary_text_color="white",
 
144
 
145
  with gr.Blocks(theme=custom_theme, title="Akın Yurt - TÖGB") as demo:
146
  gr.Markdown("# 🐺 Akın Yurt")
147
+ gr.Markdown("### Türkmeneli Dijital Asistanı (Veritabanı Entegreli Çevrimdışı Motor)")
148
  gr.Markdown("---")
149
 
150
  gr.ChatInterface(
151
  respond,
152
+ examples=["Seni kim yaptı?", "Andı oku", "Bize Kerkük şehitlerinden bahset"],
153
  cache_examples=False,
154
  )
155