Valerianikooooo commited on
Commit
d616b83
·
verified ·
1 Parent(s): eb6197c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +105 -0
app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import logging
3
+ import io
4
+ import json
5
+ import tempfile
6
+ from pptx import Presentation
7
+ from docx import Document
8
+ from pdf2image import convert_from_path
9
+ from PIL import Image
10
+ import pytesseract
11
+ import base64
12
+ from mistralai import Mistral
13
+ import gradio as gr
14
+ from dotenv import load_dotenv
15
+ from utils import preprocess_text, convert_pptx_to_json, convert_pdf_to_json, convert_docx_to_json
16
+
17
+
18
+ logging.basicConfig(level=logging.INFO)
19
+ load_dotenv()
20
+
21
+ api_key = os.environ.get("MISTRAL_API_KEY")
22
+ model = "mistral-large-latest"
23
+ client = Mistral(api_key=api_key)
24
+
25
+ def convert_file_to_json(file1, file2):
26
+ results = {}
27
+
28
+ ext1 = file1.name.split('.')[-1].lower()
29
+ ext2 = file2.name.split('.')[-1].lower()
30
+
31
+ if ext1 == 'pptx':
32
+ json_1 = convert_pptx_to_json(file1, file1.name)
33
+ elif ext1 == 'docx':
34
+ json_1 = convert_docx_to_json(file1, file1.name)
35
+ elif ext1 == 'pdf':
36
+ json_1 = convert_pdf_to_json(file1, api_key)
37
+ else:
38
+ return "Unsupported file type for file 1."
39
+
40
+ if ext2 == 'pptx':
41
+ json_2 = convert_pptx_to_json(file2, file2.name)
42
+ elif ext2 == 'docx':
43
+ json_2 = convert_docx_to_json(file2, file2.name)
44
+ elif ext2 == 'pdf':
45
+ json_2 = convert_pdf_to_json(file2, api_key)
46
+ else:
47
+ return "Unsupported file type for file 2."
48
+
49
+ text_file1 = preprocess_text("\n".join(slide["text"] for slide in json_1.get('slides', [])) if 'slides' in json_1 else \
50
+ "\n".join(paragraph["text"] for paragraph in json_1.get('paragraphs', [])) if 'paragraphs' in json_1 else \
51
+ "\n".join(json_1.get('text', [])))
52
+
53
+ text_file2 = preprocess_text("\n".join(slide["text"] for slide in json_2.get('slides', [])) if 'slides' in json_2 else \
54
+ "\n".join(paragraph["text"] for paragraph in json_2.get('paragraphs', [])) if 'paragraphs' in json_2 else \
55
+ "\n".join(json_2.get('text', [])))
56
+
57
+ input_data = f"""
58
+ Ты специалист, который должен произвести анализ текста финального дизайн-макета и прототипа
59
+ digital продукта. Тебе нужно внимательно сравнить следующие тексты:
60
+
61
+ 1. **Текст прототипа**:
62
+ {text_file1}
63
+
64
+ 2. **Текст макета**:
65
+ {text_file2}
66
+
67
+ Пожалуйста, укажи следующие аспекты:
68
+
69
+ - **Сравнение содержимого**: Отметь, если есть какие-либо важные различия в сообщениях, которые были изменены, добавлены или удалены.
70
+ - **Грамматические и стилистические ошибки**: Укажи, если в тексте макета есть ошибки или стилистические несоответствия по сравнению с прототипом.
71
+ - **Конкретные примеры**: Приведи конкретные примеры из текста, где прототип и макет отличаются друг от друга.
72
+
73
+ Сформируй отчет в виде четкого списка с использованием нумерации, чтобы было удобно для дальнейшего анализа.
74
+ """
75
+
76
+ print("Входные данные для модели:\n", input_data)
77
+
78
+ chat_response = client.chat.complete(
79
+ model=model,
80
+ messages=[
81
+ {
82
+ "role": "user",
83
+ "content": input_data,
84
+ },
85
+ ]
86
+ )
87
+
88
+ analysis = chat_response.choices[0].message.content
89
+ logging.info(f"Model output: {analysis}")
90
+
91
+ analysis_file_path = "analysis_report.txt"
92
+ with open(analysis_file_path, 'w', encoding='utf-8') as analysis_file:
93
+ analysis_file.write(analysis)
94
+
95
+ return analysis_file_path
96
+
97
+ iface = gr.Interface(
98
+ fn=convert_file_to_json,
99
+ inputs=[gr.File(label="Прототип вашего проекта"), gr.File(label="Дизайн-макет проекта")],
100
+ outputs=gr.File(label="Анализ отчёт (TXT файл)"),
101
+ title="Конвертер файлов в JSON и анализ текста",
102
+ description="Загрузите два файла (PPTX, DOCX, PDF), а модель проведёт анализ текста в макете на основе прототипа."
103
+ )
104
+
105
+ iface.launch(share=True)