File size: 4,155 Bytes
4fcacf9
 
 
 
1e23c4b
4fcacf9
 
 
 
 
 
7350c68
4fcacf9
1e23c4b
4fcacf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
08ae9e1
1e23c4b
08ae9e1
1e23c4b
08ae9e1
f3595bc
 
 
 
 
 
 
 
 
 
 
 
 
 
1e23c4b
08ae9e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e23c4b
08ae9e1
 
1e23c4b
08ae9e1
 
 
1e23c4b
08ae9e1
1e23c4b
08ae9e1
 
1e23c4b
 
 
 
 
 
08ae9e1
 
1e23c4b
 
f3595bc
1e23c4b
 
08ae9e1
 
 
 
f3595bc
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)