diginoron commited on
Commit
8bb4acb
·
verified ·
1 Parent(s): 0765207

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -7
app.py CHANGED
@@ -4,19 +4,26 @@ import os
4
  import json
5
  import torch
6
  import gradio as gr
 
7
  from pinecone import Pinecone
8
  from sentence_transformers import SentenceTransformer
9
  from transformers import AutoTokenizer, AutoModelForCausalLM
10
 
11
- # 🔐 گرفتن سکرت‌ها از محیط
12
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
13
  PINECONE_INDEX_NAME = os.environ.get("INDEX_NAME", "tiyam-chat")
14
  HF_TOKEN = os.environ.get("HF_TOKEN")
15
 
16
- # 🔹 بارگذاری مدل عمومی embedding (بدون نیاز به توکن)
17
- embedding_model = SentenceTransformer('sentence-transformers/distiluse-base-multilingual-cased-v2')
18
 
19
- # 🔹 بارگذاری داده‌های اولیه (اختیاری)
 
 
 
 
 
 
20
  with open("tiyam_qa_data.json", "r", encoding="utf-8") as f:
21
  data = json.load(f)
22
 
@@ -24,13 +31,13 @@ with open("tiyam_qa_data.json", "r", encoding="utf-8") as f:
24
  pc = Pinecone(api_key=PINECONE_API_KEY)
25
  index = pc.Index(PINECONE_INDEX_NAME)
26
 
27
- # 🔹 بارگذاری مدل GEMMA برای بازنویسی
28
  tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b-it", token=HF_TOKEN)
29
  model = AutoModelForCausalLM.from_pretrained("google/gemma-2b-it", token=HF_TOKEN)
30
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
31
  model = model.to(device)
32
 
33
- # 🔹 بازیابی پاسخ اولیه از Pinecone
34
  def retrieve_answer(query, threshold=0.65, top_k=3):
35
  query_embedding = embedding_model.encode([query])[0]
36
  result = index.query(vector=query_embedding.tolist(), top_k=top_k, include_metadata=True)
@@ -41,7 +48,7 @@ def retrieve_answer(query, threshold=0.65, top_k=3):
41
  else:
42
  return "متأسفم، پاسخ دقیقی برای این سوال نداریم. لطفاً با ما تماس بگیرید."
43
 
44
- # 🔹 بازنویسی پاسخ با GEMMA
45
  def rewrite_answer(question, retrieved_answer):
46
  prompt = f"""سؤال: {question}
47
  پاسخ اولیه: {retrieved_answer}
 
4
  import json
5
  import torch
6
  import gradio as gr
7
+ from huggingface_hub import login
8
  from pinecone import Pinecone
9
  from sentence_transformers import SentenceTransformer
10
  from transformers import AutoTokenizer, AutoModelForCausalLM
11
 
12
+ # 🔐 خواندن سکرت‌ها
13
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
14
  PINECONE_INDEX_NAME = os.environ.get("INDEX_NAME", "tiyam-chat")
15
  HF_TOKEN = os.environ.get("HF_TOKEN")
16
 
17
+ if not HF_TOKEN:
18
+ raise ValueError("❌ سکرت HF_TOKEN یافت نشد. لطفاً آن را در Settings > Secrets ثبت کنید.")
19
 
20
+ # 🔐 ورود به Hugging Face برای دسترسی به مدل خصوصی
21
+ login(token=HF_TOKEN)
22
+
23
+ # 🔹 بارگذاری مدل embedding خصوصی
24
+ embedding_model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')
25
+
26
+ # 🔹 بارگذاری داده محلی (اختیاری برای تست یا توسعه)
27
  with open("tiyam_qa_data.json", "r", encoding="utf-8") as f:
28
  data = json.load(f)
29
 
 
31
  pc = Pinecone(api_key=PINECONE_API_KEY)
32
  index = pc.Index(PINECONE_INDEX_NAME)
33
 
34
+ # 🔹 بارگذاری مدل GEMMA برای بازنویسی طبیعی پاسخ
35
  tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b-it", token=HF_TOKEN)
36
  model = AutoModelForCausalLM.from_pretrained("google/gemma-2b-it", token=HF_TOKEN)
37
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
38
  model = model.to(device)
39
 
40
+ # 🔹 گرفتن پاسخ خام از Pinecone
41
  def retrieve_answer(query, threshold=0.65, top_k=3):
42
  query_embedding = embedding_model.encode([query])[0]
43
  result = index.query(vector=query_embedding.tolist(), top_k=top_k, include_metadata=True)
 
48
  else:
49
  return "متأسفم، پاسخ دقیقی برای این سوال نداریم. لطفاً با ما تماس بگیرید."
50
 
51
+ # 🔹 بازنویسی پاسخ خام با GEMMA
52
  def rewrite_answer(question, retrieved_answer):
53
  prompt = f"""سؤال: {question}
54
  پاسخ اولیه: {retrieved_answer}