fruitpicker01 commited on
Commit
82dac74
·
verified ·
1 Parent(s): 7934a24

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +8 -121
app.py CHANGED
@@ -1,126 +1,13 @@
1
  import gradio as gr
2
- import requests
3
- import os
4
- import pandas as pd
5
- import time
6
- from langchain.schema import SystemMessage
7
- from langchain.chat_models.gigachat import GigaChat
8
- from PIL import Image, ImageDraw, ImageFont
9
 
10
- # Установка ключа API для OpenAI и GigaChat
11
- openai_api_key = os.getenv('GPT_KEY')
12
- gc_key = os.getenv('GC_KEY')
13
 
14
- # Авторизация в сервисе GigaChat
15
- chat_pro = GigaChat(credentials=gc_key, model='GigaChat-Pro', verify_ssl_certs=False)
16
- chat_lite = GigaChat(credentials=gc_key, model='GigaChat', verify_ssl_certs=False)
17
-
18
- # Загрузка данных из Excel-файла
19
- try:
20
- data = pd.read_excel('Признаки.xlsx', sheet_name=None)
21
- except Exception as e:
22
- print(f"Ошибка при загрузке Excel-файла: {e}")
23
- data = {}
24
-
25
- # Создание списка признаков и их значений
26
- features = {}
27
- for sheet_name, df in data.items():
28
- try:
29
- features[sheet_name] = df.set_index(df.columns[0]).to_dict()[df.columns[1]]
30
- except Exception as e:
31
- print(f"Ошибка при обработке данных листа {sheet_name}: {e}")
32
- features[sheet_name] = {}
33
-
34
- # Функция для генерации промпта
35
- def generate_prompt(*selected_values):
36
- prompt = "Напиши типичное рекламное SMS-сообщение от ПАО Сбербанк, но с учетом следующих правил (длина сообщения не должна превышать 250 знаков с учетом пробелов):\n"
37
- for i, feature in enumerate(features.keys()):
38
- if selected_values[i]:
39
- try:
40
- prompt += f"{features[feature][selected_values[i]]}\n"
41
- except KeyError:
42
- return f"Ошибка: выбранное значение {selected_values[i]} не найдено в данных."
43
- return prompt.strip()
44
-
45
- # Функция для генерации сообщения с помощью GPT-4o
46
- def generate_message_gpt4o(prompt):
47
- try:
48
- headers = {
49
- "Content-Type": "application/json",
50
- "Authorization": f"Bearer {openai_api_key}"
51
- }
52
- data = {
53
- "model": "gpt-4o",
54
- "messages": [{"role": "system", "content": prompt}],
55
- "max_tokens": 700
56
- }
57
- response = requests.post("https://api.openai.com/v1/chat/completions", json=data, headers=headers)
58
- response_data = response.json()
59
- return response_data["choices"][0]["message"]["content"].strip()
60
- except Exception as e:
61
- return f"Ошибка при обращении к GPT-4o: {e}"
62
-
63
- # Функция для генерации сообщения с помощью GigaChat-Pro
64
- def generate_message_gigachat_pro(prompt):
65
- try:
66
- messages = [SystemMessage(content=prompt)]
67
- res = chat_pro(messages)
68
- return res.content.strip()
69
- except Exception as e:
70
- return f"Ошибка при обращении к GigaChat-Pro: {e}"
71
-
72
- # Функция для генерации сообщения с помощью GigaChat
73
- def generate_message_gigachat_lite(prompt):
74
- try:
75
- time.sleep(2) # Задержка 2 секунды перед запросом к GigaChat
76
- messages = [SystemMessage(content=prompt)]
77
- res = chat_lite(messages)
78
- return res.content.strip()
79
- except Exception as e:
80
- return f"Ошибка при обращении к GigaChat-Lite: {e}"
81
-
82
- # Функция для добавления текста на изображение
83
- def add_text_to_image(image_path, prompt, gpt4o_message, gigachat_pro_message, gigachat_lite_message):
84
- img = Image.open(image_path)
85
- draw = ImageDraw.Draw(img)
86
- font = ImageFont.truetype("arial.ttf", 20)
87
-
88
- # Определите позиции, где будут отображаться ваши сообщения
89
- prompt_position = (50, 50)
90
- gpt4o_position = (50, 150)
91
- gigachat_pro_position = (50, 250)
92
- gigachat_lite_position = (50, 350)
93
-
94
- draw.text(prompt_position, prompt, font=font, fill="black")
95
- draw.text(gpt4o_position, gpt4o_message, font=font, fill="black")
96
- draw.text(gigachat_pro_position, gigachat_pro_message, font=font, fill="black")
97
- draw.text(gigachat_lite_position, gigachat_lite_message, font=font, fill="black")
98
-
99
- img.save("output_pipeline.png")
100
- return "output_pipeline.png"
101
-
102
- # Функция для обработки нажатия кнопки Submit
103
- def generate_messages(*selected_values):
104
- prompt = generate_prompt(*selected_values)
105
- if "Ошибка" in prompt:
106
- return prompt, "", "", "", None
107
- message_gpt4o = generate_message_gpt4o(prompt)
108
- message_gigachat_pro = generate_message_gigachat_pro(prompt)
109
- message_gigachat_lite = generate_message_gigachat_lite(prompt)
110
-
111
- # Добавление текста на изображение
112
- image_path = add_text_to_image('pipeline.png', prompt, message_gpt4o, message_gigachat_pro, message_gigachat_lite)
113
-
114
- return prompt, message_gpt4o, message_gigachat_pro, message_gigachat_lite, image_path
115
-
116
- # Создание интерфейса Gradio
117
  with gr.Blocks() as demo:
118
- gr.Markdown("# Генерация SMS-сообщений по заданным признакам")
119
-
120
- with gr.Row():
121
- with gr.Column(scale=1):
122
- selections = []
123
- for feature in features.keys():
124
- selections.append(gr.Dropdown(choices=[None] + list(features[feature].keys()), label=f"Выберите {feature}"))
125
 
126
- submit_btn = gr.Button("Submit") # Оранжевая кнопка
 
1
  import gradio as gr
 
 
 
 
 
 
 
2
 
3
+ def simple_function(name):
4
+ return f"Привет, {name}!"
 
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  with gr.Blocks() as demo:
7
+ name_input = gr.Textbox(label="Введите ваше имя")
8
+ greeting_output = gr.Textbox(label="Приветствие")
9
+ submit_btn = gr.Button("Отправить")
10
+
11
+ submit_btn.click(simple_function, inputs=name_input, outputs=greeting_output)
 
 
12
 
13
+ demo.launch()