Roberta2024 commited on
Commit
c1f3388
·
verified ·
1 Parent(s): 87f48c8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -48
app.py CHANGED
@@ -5,13 +5,11 @@ from PyPDF2 import PdfReader
5
  import google.generativeai as genai
6
  import os
7
  from langsmith import Client
8
- from ragas.metrics import (
9
- faithfulness, answer_relevancy, context_relevancy
10
- )
11
 
12
  # 加載模型
13
  openelm_model = AutoModelForCausalLM.from_pretrained("apple/OpenELM-270M", trust_remote_code=True)
14
- openelm_tokenizer = AutoTokenizer.from_pretrained("NousResearch/Llama-2-7b-hf")
15
 
16
  # Gemini API 設置
17
  GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
@@ -36,10 +34,6 @@ def gemini_generate(prompt, max_tokens):
36
  response = model.generate_content(prompt, max_output_tokens=max_tokens)
37
  return response.text
38
 
39
- def nvidia_generate(prompt, max_tokens):
40
- # 這裡需要實現 Nvidia API 調用
41
- return "Nvidia API 尚未實現"
42
-
43
  def openelm_generate(prompt, max_tokens):
44
  tokenized_prompt = openelm_tokenizer(prompt, return_tensors="pt")
45
  output_ids = openelm_model.generate(
@@ -50,41 +44,41 @@ def openelm_generate(prompt, max_tokens):
50
  return openelm_tokenizer.decode(output_ids[0], skip_special_tokens=True)
51
 
52
  def evaluate_response(response, context, query):
53
- # 使用 RAGAS 評估回答
54
  faith_score = faithfulness.score([response], [context], [query])
55
  ans_rel_score = answer_relevancy.score([response], [query])
56
  ctx_rel_score = context_relevancy.score([response], [context], [query])
57
  return faith_score, ans_rel_score, ctx_rel_score
58
 
59
  def process_query(pdf_file, llm_choice, query, max_tokens, api_key):
60
- global GOOGLE_API_KEY
61
- if api_key:
62
- GOOGLE_API_KEY = api_key
63
- genai.configure(api_key=GOOGLE_API_KEY)
64
-
65
- # 從 PDF 提取文本
66
- pdf_path = pdf_file.name
67
- context = extract_text_from_pdf(pdf_path)
68
-
69
- # 根據選擇的 LLM 生成回應
70
- if llm_choice == "Gemini":
71
- response = gemini_generate(f"上下文: {context}\n問題: {query}", max_tokens)
72
- elif llm_choice == "Nvidia":
73
- response = nvidia_generate(f"上下文: {context}\n問題: {query}", max_tokens)
74
- else: # OpenELM
75
- response = openelm_generate(f"上下文: {context}\n問題: {query}", max_tokens)
76
-
77
- # 評估回應
78
- faith_score, ans_rel_score, ctx_rel_score = evaluate_response(response, context, query)
79
-
80
- return response, faith_score, ans_rel_score, ctx_rel_score
 
81
 
82
  # Gradio 介面
83
  iface = gr.Interface(
84
  fn=process_query,
85
  inputs=[
86
  gr.File(label="上傳 PDF"),
87
- gr.Dropdown(["Gemini", "Nvidia", "OpenELM"], label="選擇 LLM"),
88
  gr.Textbox(label="輸入您的問題"),
89
  gr.Slider(minimum=50, maximum=1000, step=50, label="最大令牌數"),
90
  gr.Textbox(label="Gemini API Key (可選)", type="password")
@@ -96,23 +90,7 @@ iface = gr.Interface(
96
  gr.Number(label="上下文相關性得分")
97
  ],
98
  title="多模型 LLM 查詢介面,支持 PDF 上下文",
99
- description="上傳 PDF,選擇 LLM,並提出問題。回應將使用 RAGAS 指標進行評估。",
100
- css="""
101
- #dev-info {
102
- font-size: 0.8rem;
103
- color: #888;
104
- margin-top: 1rem;
105
- text-align: center;
106
- }
107
- .gr-input text {
108
- padding: 10px;
109
- border-radius: 5px;
110
- font-size: 1rem;
111
- }
112
- .gr-output.gr-slider label {
113
- font-weight: bold;
114
- }
115
- """
116
  )
117
 
118
  if __name__ == "__main__":
 
5
  import google.generativeai as genai
6
  import os
7
  from langsmith import Client
8
+ from ragas.metrics import faithfulness, answer_relevancy, context_relevancy
 
 
9
 
10
  # 加載模型
11
  openelm_model = AutoModelForCausalLM.from_pretrained("apple/OpenELM-270M", trust_remote_code=True)
12
+ openelm_tokenizer = AutoTokenizer.from_pretrained("apple/OpenELM-270M")
13
 
14
  # Gemini API 設置
15
  GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
 
34
  response = model.generate_content(prompt, max_output_tokens=max_tokens)
35
  return response.text
36
 
 
 
 
 
37
  def openelm_generate(prompt, max_tokens):
38
  tokenized_prompt = openelm_tokenizer(prompt, return_tensors="pt")
39
  output_ids = openelm_model.generate(
 
44
  return openelm_tokenizer.decode(output_ids[0], skip_special_tokens=True)
45
 
46
  def evaluate_response(response, context, query):
 
47
  faith_score = faithfulness.score([response], [context], [query])
48
  ans_rel_score = answer_relevancy.score([response], [query])
49
  ctx_rel_score = context_relevancy.score([response], [context], [query])
50
  return faith_score, ans_rel_score, ctx_rel_score
51
 
52
  def process_query(pdf_file, llm_choice, query, max_tokens, api_key):
53
+ try:
54
+ global GOOGLE_API_KEY
55
+ if api_key:
56
+ GOOGLE_API_KEY = api_key
57
+ genai.configure(api_key=GOOGLE_API_KEY)
58
+
59
+ # PDF 提取文本
60
+ pdf_path = pdf_file.name
61
+ context = extract_text_from_pdf(pdf_path)
62
+
63
+ # 根據選擇的 LLM 生成回應
64
+ if llm_choice == "Gemini":
65
+ response = gemini_generate(f"上下文: {context}\n問題: {query}", max_tokens)
66
+ else: # OpenELM
67
+ response = openelm_generate(f"上下文: {context}\n問題: {query}", max_tokens)
68
+
69
+ # 評估回應
70
+ faith_score, ans_rel_score, ctx_rel_score = evaluate_response(response, context, query)
71
+
72
+ return response, faith_score, ans_rel_score, ctx_rel_score
73
+ except Exception as e:
74
+ return str(e), 0, 0, 0 # 返回錯誤消息和零分數
75
 
76
  # Gradio 介面
77
  iface = gr.Interface(
78
  fn=process_query,
79
  inputs=[
80
  gr.File(label="上傳 PDF"),
81
+ gr.Dropdown(["Gemini", "OpenELM"], label="選擇 LLM"),
82
  gr.Textbox(label="輸入您的問題"),
83
  gr.Slider(minimum=50, maximum=1000, step=50, label="最大令牌數"),
84
  gr.Textbox(label="Gemini API Key (可選)", type="password")
 
90
  gr.Number(label="上下文相關性得分")
91
  ],
92
  title="多模型 LLM 查詢介面,支持 PDF 上下文",
93
+ description="上傳 PDF,選擇 LLM,並提出問題。回應將使用 RAGAS 指標進行評估。"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  )
95
 
96
  if __name__ == "__main__":