Spaces:
Sleeping
Sleeping
import os | |
import time | |
import gradio as gr | |
import google.generativeai as genai | |
# 設定 Gemini API KEY | |
def configure_api_key(api_key): | |
genai.configure(api_key=api_key) | |
print("API Key 已配置成功") | |
# 上傳 PDF 並等待處理完成 | |
def upload_and_process_pdf(file_path, mime_type="application/pdf"): | |
print("上傳 PDF 中...") | |
pdf_file = genai.upload_file(file_path, mime_type=mime_type) | |
print(f"PDF '{pdf_file.display_name}' 上傳成功,URI 為: {pdf_file.uri}") | |
# 等待 PDF 處理完成 | |
while pdf_file.state.name == "PROCESSING": | |
print("等待 PDF 處理中...") | |
time.sleep(10) | |
pdf_file = genai.get_file(pdf_file.name) | |
if pdf_file.state.name == "FAILED": | |
raise ValueError("PDF 處理失敗。") | |
print(f"PDF 處理完成: {pdf_file.uri}") | |
return pdf_file | |
# 使用 PDF 的 URI 來生成描述 | |
def generate_pdf_summary(api_key, pdf_file_path, prompt="仔細讀檔,彙整重點。繁體中文"): | |
configure_api_key(api_key) | |
# 上傳並處理 PDF | |
try: | |
pdf_file = upload_and_process_pdf(pdf_file_path) | |
except Exception as e: | |
return f"PDF 上傳或處理失敗:{e}", None | |
# 設定模型 | |
model = genai.GenerativeModel(model_name="models/gemini-1.5-pro-002") | |
# 發送 LLM 推理請求 | |
try: | |
print("Making LLM inference request...") | |
response = model.generate_content( | |
[prompt, pdf_file], | |
request_options={"timeout": 600} | |
) | |
# 保存模型回應到文件 | |
output_file_path = "/tmp/model_response.txt" | |
with open(output_file_path, "w") as f: | |
f.write(response.text) | |
return response.text, output_file_path | |
except Exception as e: | |
return f"與模型對話時發生錯誤:{e}", None | |
# Gradio 介面 | |
with gr.Blocks() as demo: | |
gr.Markdown("### 上傳 PDF 並生成摘要(Gemini)") | |
# API Key 輸入 | |
api_key_input = gr.Textbox( | |
label="輸入 API Key", | |
placeholder="請輸入您的 Gemini API Key", | |
type="password" | |
) | |
# PDF 上傳 | |
pdf_input = gr.File( | |
label="上傳 PDF", | |
type="filepath", | |
) | |
# 描述提示輸入 | |
prompt = gr.Textbox( | |
label="摘要提示", | |
placeholder="默認為 '仔細讀檔,彙整重點。繁體中文'", | |
lines=5 | |
) | |
# 提交按鈕 | |
submit_button = gr.Button("提交") | |
# 輸出文字框和下載文件按鈕 | |
output_text = gr.Textbox( | |
label="模型回應", | |
placeholder="模型的回應將出現在這裡", | |
lines=10 | |
) | |
download_button = gr.File( | |
label="下載模型回應", | |
interactive=False | |
) | |
# 設置提交按鈕的函數調用 | |
def handle_generate_summary(api_key, pdf_file, prompt): | |
text_response, file_path = generate_pdf_summary(api_key, pdf_file, prompt) | |
return text_response, file_path | |
# 提交按鈕的處理 | |
submit_button.click( | |
handle_generate_summary, | |
inputs=[api_key_input, pdf_input, prompt], | |
outputs=[output_text, download_button] | |
) | |
# 啟動 Gradio 介面 | |
demo.launch() | |