Spaces:
Sleeping
Sleeping
File size: 3,533 Bytes
4e28ae5 d9df9ba 53b8322 95bfed4 4e28ae5 9fe1456 95bfed4 ab23d27 d9df9ba 95bfed4 0d2afb1 4e28ae5 d9df9ba 53b8322 d9df9ba 0d2afb1 d9df9ba 53b8322 d9df9ba 53b8322 d9df9ba 53b8322 d9df9ba 53b8322 4e28ae5 d9df9ba 53b8322 4e28ae5 53b8322 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import requests
import pdfkit
from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
import os
# Thiết lập API token từ Hugging Face
api_token = os.getenv("api_token")
if api_token is None:
raise ValueError("API token is not set. Please set it in your Hugging Face settings.")
# Tải mô hình và tokenizer từ Hugging Face
model_name = "meta-llama/Meta-Llama-3.1-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name, use_auth_token=api_token)
model = AutoModelForCausalLM.from_pretrained(model_name, use_auth_token=api_token).to("cpu")
def analyze_chat(link, extraction_request, system_message, max_tokens, temperature, top_p):
response = requests.get(link)
if response.status_code != 200:
return "Không thể lấy nội dung từ link."
chat_content = response.text
prompt = f"{system_message}\n\nChat Content:\n{chat_content}\n\nExtraction Request: {extraction_request}"
inputs = tokenizer(prompt, return_tensors="pt", max_length=8192, truncation=True).to("cpu")
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=max_tokens, temperature=temperature, top_p=top_p)
extracted_content = tokenizer.decode(outputs[0], skip_special_tokens=True)
return extracted_content
def generate_file(content, file_type):
if file_type == "PDF":
pdfkit.from_string(content, 'output.pdf')
return "output.pdf"
elif file_type == "Docx":
doc = Document()
doc.styles['Normal'].font.name = 'Arial'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), 'Arial')
p = doc.add_paragraph()
run = p.add_run(content)
run.font.size = Pt(12)
doc.save('output.docx')
return "output.docx"
with gr.Blocks() as demo:
gr.Markdown("# Chatbot Trợ Lý Cá Nhân")
link = gr.Textbox(label="Đường link đoạn chat")
extraction_request = gr.Textbox(label="Yêu cầu trích xuất nội dung")
analyze_button = gr.Button("Phân tích")
extracted_output = gr.Textbox(label="Nội dung đã trích xuất", interactive=True)
generate_button = gr.Button("Tạo file")
file_type = gr.Radio(["PDF", "Docx"], label="Loại file", value="PDF")
file_output = gr.File(label="File kết quả")
def analyze_link(link, extraction_request, system_message, max_tokens, temperature, top_p):
extracted_content = analyze_chat(link, extraction_request, system_message, max_tokens, temperature, top_p)
return extracted_content
def generate_file_action(content, file_type):
file_path = generate_file(content, file_type)
return file_path
system_message = gr.Textbox(value="You are a friendly Chatbot.", label="System message")
max_tokens = gr.Slider(minimum=1, maximum=8192, value=512, step=1, label="Max new tokens") # Adjust maximum based on model capabilities
temperature = gr.Slider(minimum=0.1, maximum=1.0, value=0.7, step=0.1, label="Temperature")
top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)")
analyze_button.click(analyze_link, inputs=[link, extraction_request, system_message, max_tokens, temperature, top_p], outputs=extracted_output)
generate_button.click(generate_file_action, inputs=[extracted_output, file_type], outputs=file_output)
if __name__ == "__main__":
demo.launch()
|