abusy commited on
Commit
ee56a3e
·
verified ·
1 Parent(s): dd83aed

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +83 -0
  2. requirements.txt +6 -0
  3. smma5_dataset_500_plus.jsonl +0 -0
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import json
3
+ import numpy as np
4
+ import requests
5
+ from sentence_transformers import SentenceTransformer
6
+ from sklearn.metrics.pairwise import cosine_similarity
7
+
8
+ # Load dataset
9
+ @st.cache_resource
10
+ def load_data():
11
+ with open("smma5_dataset_500_plus.jsonl", "r", encoding="utf-8") as f:
12
+ return [json.loads(line) for line in f]
13
+
14
+ @st.cache_resource
15
+ def load_model():
16
+ return SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
17
+
18
+ def embed_dataset(data, model):
19
+ texts = [d["instruction"] for d in data]
20
+ return model.encode(texts, convert_to_tensor=False)
21
+
22
+ def find_best_match(query, data, model, embeddings):
23
+ query_embedding = model.encode([query])
24
+ scores = cosine_similarity(query_embedding, embeddings)[0]
25
+ top_idx = int(np.argmax(scores))
26
+ return data[top_idx], scores[top_idx]
27
+
28
+ def generate_with_qwen(prompt, hf_token):
29
+ API_URL = "https://api-inference.huggingface.co/models/Qwen/Qwen1.5-0.5B"
30
+ headers = {"Authorization": f"Bearer {hf_token}"}
31
+ payload = {"inputs": prompt, "parameters": {"max_new_tokens": 300}}
32
+
33
+ try:
34
+ response = requests.post(API_URL, headers=headers, json=payload, timeout=60)
35
+ response.raise_for_status()
36
+ result = response.json()
37
+ if isinstance(result, list):
38
+ return result[0]["generated_text"][len(prompt):].strip()
39
+ else:
40
+ return "⚠️ Unexpected response format."
41
+ except Exception as e:
42
+ return f"❌ Error contacting Qwen model: {str(e)}"
43
+
44
+ # UI setup
45
+ st.set_page_config(page_title="SMMA 5.0 Chatbot + Qwen", layout="centered")
46
+ st.title("💬 SMMA 5.0 – Enhanced by Qwen")
47
+ st.markdown("اسأل أي سؤال عن التسويق، واحصل على إجابة مدعّمة من قاعدة بياناتك الخاصة ومُحسّنة بواسطة نموذج Qwen.")
48
+
49
+ hf_token = st.text_input("🔐 أدخل توكن Hugging Face الخاص بك:", type="password")
50
+
51
+ user_input = st.text_input("اكتب سؤالك هنا:")
52
+
53
+ if user_input and hf_token:
54
+ data = load_data()
55
+ model = load_model()
56
+ embeddings = embed_dataset(data, model)
57
+ result, score = find_best_match(user_input, data, model, embeddings)
58
+
59
+ # Display base response
60
+ st.markdown("### 📌 الرد من قاعدة البيانات")
61
+ st.write(result["response"])
62
+
63
+ # Format prompt
64
+ prompt = f"""أنت خبير تسويق سوشيال ميديا محترف. المستخدم سأل:
65
+ "{user_input}"
66
+
67
+ وهذه إجابة من قاعدة بياناتك:
68
+ "{result['response']}"
69
+
70
+ من فضلك قدّم إجابة محسّنة وقوية باللغة العربية للفيسبوك أو إنستجرام أو تيك توك.
71
+ """
72
+
73
+ st.markdown("### 🤖 الرد المحسن من Qwen")
74
+ with st.spinner("يتم توليد الرد المحسن..."):
75
+ enhanced = generate_with_qwen(prompt, hf_token)
76
+ st.write(enhanced)
77
+
78
+ # Extra info
79
+ with st.expander("📊 تفاصيل إضافية"):
80
+ st.write("🧠 استراتيجية البوست:", result["format_strategy"])
81
+ st.write("📝 نوع البوست:", result["post_type"])
82
+ st.write("🪄 الكابشن:", result["caption_strategy"])
83
+ st.write("✍️ تقنية الكتابة:", result["copywriting_technique"])
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ streamlit
2
+ sentence-transformers
3
+ scikit-learn
4
+ numpy
5
+
6
+ requests
smma5_dataset_500_plus.jsonl ADDED
The diff for this file is too large to render. See raw diff