File size: 4,155 Bytes
4fcacf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
08ae9e1
 
 
 
 
47229c4
 
 
 
 
 
 
 
 
 
 
 
 
 
08ae9e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47229c4
e90b046
08ae9e1
 
 
53bf813
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import asyncio
import mimetypes
import os
import tempfile
import glob
import fitz  # PyMuPDF
import random
import gradio as gr
from docx import Document
from content_generation import create_content, CONTENT_TYPES
from openai import OpenAI

# Khởi tạo client OpenAI với API key từ biến môi trường
client = OpenAI(api_key=os.environ.get('OPENAI_API_KEY'))

def create_docx(content, output_path):
    """
    Tạo file docx từ nội dung.
    """
    doc = Document()
    doc.add_paragraph(content)
    doc.save(output_path)

def process_pdf(file_path):
    """
    Xử lý file PDF và trích xuất nội dung.
    """
    doc = fitz.open(file_path)
    text = ""
    for page in doc:
        text += page.get_text()
    return text

def process_docx(file_path):
    """
    Xử lý file DOCX và trích xuất nội dung.
    """
    doc = Document(file_path)
    text = ""
    for para in doc.paragraphs:
        text += para.text
    return text

def interface():
    with gr.Blocks() as app:
        gr.Markdown("# Ứng dụng Tạo Nội dung và Video")

        with gr.Tab("Tạo Nội dung"):
            with gr.Row():
                with gr.Column():
                    prompt = gr.Textbox(label="Nhập yêu cầu nội dung")
                    file_upload = gr.File(label="Tải lên file kèm theo", type="filepath")
                    content_type = gr.Radio(label="Chọn loại nội dung",
                                            choices=CONTENT_TYPES,
                                            value=None)  # Giá trị mặc định là không có gì được chọn
                    content_button = gr.Button("Tạo Nội dung")
                
                with gr.Column():
                    content_output = gr.Textbox(label="Nội dung tạo ra", interactive=True)
                    confirm_button = gr.Button("Xác nhận nội dung")
                    download_docx = gr.File(label="Tải xuống file DOCX", interactive=False)
                    status_message = gr.Label(label="Trạng thái")

            def generate_content(prompt, file, content_type):
                try:
                    status = "Đang xử lý..."
                    if file and os.path.exists(file):
                        mime_type, _ = mimetypes.guess_type(file)
                        if mime_type == "application/pdf":
                            file_content = process_pdf(file)
                            prompt = f"{prompt}\n\nDưới đây là nội dung của file tài liệu:\n\n{file_content}"
                        elif mime_type in (
                            "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
                            "application/msword"):
                            file_content = process_docx(file)
                            prompt = f"{prompt}\n\nDưới đây là nội dung của file tài liệu:\n\n{file_content}"
                        else:
                            raise ValueError("Định dạng file không được hỗ trợ.")

                    if not content_type:
                        raise ValueError("Vui lòng chọn một loại nội dung")

                    script_content = create_content(prompt, content_type, "Tiếng Việt")
                    docx_path = "script.docx"
                    create_docx(script_content, docx_path)

                    status = "Đã tạo nội dung thành công!"
                    return script_content, docx_path, status
                except Exception as e:
                    status = f"Đã xảy ra lỗi: {str(e)}"
                    return "", None, status

            async def confirm_content(content):
                docx_path = "script.docx"
                create_docx(content, docx_path)

            content_button.click(generate_content,
                                 inputs=[prompt, file_upload, content_type],
                                 outputs=[content_output, download_docx, status_message])

    return app



# Khởi chạy ứng dụng
if __name__ == "__main__":
    app = interface()
    app.launch(share=True)