Rootsystem2101's picture
Update app.py
e1de573 verified
import gradio as gr
from llama_cpp import Llama
from huggingface_hub import hf_hub_download
# ----------------------------------------------------------------------
# 1. إعداد النموذج (سحب من مستودع عام لتجاوز حدود التخزين)
# ----------------------------------------------------------------------
# نستخدم نموذج Qwen2.5-3B القوي والصغير (متوفر مسبقاً ولا يحتاج رفع)
REPO_ID = "Qwen/Qwen2.5-3B-Instruct-GGUF"
FILENAME = "qwen2.5-3b-instruct-q4_k_m.gguf"
def load_model():
print(f"Downloading model {FILENAME} from {REPO_ID}...")
try:
# تحميل النموذج إلى الذاكرة المؤقتة للسيرفر
model_path = hf_hub_download(
repo_id=REPO_ID,
filename=FILENAME
)
print(f"Model downloaded to: {model_path}")
# تشغيل النموذج (CPU)
llm = Llama(
model_path=model_path,
n_ctx=2048,
n_threads=2,
verbose=True
)
return llm
except Exception as e:
print(f"Error loading model: {e}")
return None
# تحميل النموذج عند الإقلاع
ZEROCYBER_MODEL = load_model()
# ----------------------------------------------------------------------
# 2. منطق التحليل
# ----------------------------------------------------------------------
def generate_response(prompt_text, file_obj):
if ZEROCYBER_MODEL is None:
return "❌ Error: Model failed to load."
# قراءة الملف إذا وجد
context = ""
if file_obj:
try:
with open(file_obj.name, 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()[:2000]
context = f"\n\nFile Content to Analyze:\n{content}\n"
except Exception as e:
return f"Error reading file: {e}"
# تجهيز البرومبت
# نماذج Qwen/Mistral تفضل هذا التنسيق
full_prompt = f"<|im_start|>system\nYou are a Cybersecurity Analyst.<|im_end|>\n<|im_start|>user\n{prompt_text}\n{context}<|im_end|>\n<|im_start|>assistant\n"
output = ZEROCYBER_MODEL(
full_prompt,
max_tokens=512,
stop=["<|im_end|>"],
echo=False
)
return output['choices'][0]['text']
# ----------------------------------------------------------------------
# 3. واجهة المستخدم
# ----------------------------------------------------------------------
if __name__ == "__main__":
interface = gr.Interface(
fn=generate_response,
inputs=[
gr.Textbox(label="1. استفسارك الأمني:", placeholder="كيف أقوم بتأمين قاعدة البيانات؟"),
gr.File(label="2. تحليل ملف (Log/Code)")
],
outputs=gr.Textbox(label="التقرير الأمني"),
title="🛡️ ZeroCyber Cloud Platform",
description="تطبيق سحابي للتحليل الأمني يعمل بنموذج Qwen2.5-3B (GGUF).",
allow_flagging="never"
)
interface.launch()