Spaces:
Sleeping
Sleeping
| 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() | |