Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -16,6 +16,7 @@ import re
|
|
16 |
import string
|
17 |
import io
|
18 |
from datetime import datetime, timedelta
|
|
|
19 |
|
20 |
morph = pymorphy2.MorphAnalyzer()
|
21 |
|
@@ -157,6 +158,10 @@ def download_current_message_database():
|
|
157 |
|
158 |
for idx, col in enumerate(df.columns, 1):
|
159 |
column_letter = get_column_letter(idx)
|
|
|
|
|
|
|
|
|
160 |
if col in columns_fit_content:
|
161 |
max_length = 0
|
162 |
column = df[col].astype(str)
|
@@ -165,12 +170,18 @@ def download_current_message_database():
|
|
165 |
max_length = max(max_length, len(cell_value))
|
166 |
adjusted_width = (max_length + 2)
|
167 |
worksheet.column_dimensions[column_letter].width = adjusted_width
|
|
|
|
|
|
|
168 |
elif col in columns_wrap_text:
|
169 |
worksheet.column_dimensions[column_letter].width = 50 # Устанавливаем фиксированную ширину
|
170 |
for cell in worksheet[column_letter]:
|
171 |
-
cell.alignment = Alignment(wrap_text=True)
|
172 |
else:
|
173 |
worksheet.column_dimensions[column_letter].width = 20 # Ширина по умолчанию
|
|
|
|
|
|
|
174 |
|
175 |
output.seek(0) # Сбрасываем указатель
|
176 |
|
@@ -179,7 +190,12 @@ def download_current_message_database():
|
|
179 |
|
180 |
# Параметры для загрузки файла на GitHub
|
181 |
repo = "fruitpicker01/Storage_dev"
|
182 |
-
|
|
|
|
|
|
|
|
|
|
|
183 |
url = f"https://api.github.com/repos/{repo}/contents/{path}"
|
184 |
|
185 |
# Проверяем, существует ли файл уже
|
@@ -190,7 +206,7 @@ def download_current_message_database():
|
|
190 |
sha = None
|
191 |
|
192 |
data = {
|
193 |
-
"message": f"Обновлен файл
|
194 |
"content": content,
|
195 |
}
|
196 |
if sha:
|
@@ -201,13 +217,51 @@ def download_current_message_database():
|
|
201 |
if put_response.status_code in [200, 201]:
|
202 |
# Получаем ссылку для скачивания файла
|
203 |
download_url = f"https://raw.githubusercontent.com/{repo}/main/{path}"
|
204 |
-
return download_url # Возвращаем URL файла
|
205 |
else:
|
206 |
print(f"Ошибка при загрузке файла на GitHub: {put_response.status_code}, {put_response.text}")
|
207 |
-
return "Ошибка при загрузке файла на GitHub."
|
208 |
else:
|
209 |
-
return "Нет данных для формирования файла."
|
210 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
|
212 |
def correct_dash_usage(text):
|
213 |
# Step 1: Replace any dash with long dash if surrounded by spaces
|
@@ -1937,6 +1991,19 @@ with gr.Blocks() as demo:
|
|
1937 |
|
1938 |
gr.Markdown("---")
|
1939 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1940 |
# Очистка всех полей кроме prompt_display
|
1941 |
description_input.change(
|
1942 |
fn=clear_on_change, # Сначала вызываем функцию очистки полей
|
@@ -2597,19 +2664,19 @@ with gr.Blocks() as demo:
|
|
2597 |
fn=reset_button_text,
|
2598 |
outputs=[save_meta_llama_405b_btn]
|
2599 |
)
|
2600 |
-
|
2601 |
-
#
|
2602 |
-
def update_download_link():
|
2603 |
-
link = download_current_message_database()
|
2604 |
-
if link.startswith("http"):
|
2605 |
-
return f"[Скачать базу сообщений]({link})"
|
2606 |
-
else:
|
2607 |
-
return link # Возвращаем сообщение об ошибке
|
2608 |
-
|
2609 |
download_btn.click(
|
2610 |
fn=update_download_link,
|
2611 |
inputs=[],
|
2612 |
-
outputs=
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2613 |
)
|
2614 |
|
2615 |
demo.launch()
|
|
|
16 |
import string
|
17 |
import io
|
18 |
from datetime import datetime, timedelta
|
19 |
+
import plotly.express as px
|
20 |
|
21 |
morph = pymorphy2.MorphAnalyzer()
|
22 |
|
|
|
158 |
|
159 |
for idx, col in enumerate(df.columns, 1):
|
160 |
column_letter = get_column_letter(idx)
|
161 |
+
# Установка выравнивания для заголовков
|
162 |
+
header_cell = worksheet.cell(row=1, column=idx)
|
163 |
+
header_cell.alignment = Alignment(wrap_text=True, vertical='center', horizontal='left')
|
164 |
+
|
165 |
if col in columns_fit_content:
|
166 |
max_length = 0
|
167 |
column = df[col].astype(str)
|
|
|
170 |
max_length = max(max_length, len(cell_value))
|
171 |
adjusted_width = (max_length + 2)
|
172 |
worksheet.column_dimensions[column_letter].width = adjusted_width
|
173 |
+
# Установка выравнивания для всех ячеек в столбце
|
174 |
+
for cell in worksheet[column_letter]:
|
175 |
+
cell.alignment = Alignment(wrap_text=True, vertical='center', horizontal='left')
|
176 |
elif col in columns_wrap_text:
|
177 |
worksheet.column_dimensions[column_letter].width = 50 # Устанавливаем фиксированную ширину
|
178 |
for cell in worksheet[column_letter]:
|
179 |
+
cell.alignment = Alignment(wrap_text=True, vertical='center', horizontal='left')
|
180 |
else:
|
181 |
worksheet.column_dimensions[column_letter].width = 20 # Ширина по умолчанию
|
182 |
+
# Установка выравнивания для всех ячеек в столбце
|
183 |
+
for cell in worksheet[column_letter]:
|
184 |
+
cell.alignment = Alignment(wrap_text=True, vertical='center', horizontal='left')
|
185 |
|
186 |
output.seek(0) # Сбрасываем указатель
|
187 |
|
|
|
190 |
|
191 |
# Параметры для загрузки файла на GitHub
|
192 |
repo = "fruitpicker01/Storage_dev"
|
193 |
+
|
194 |
+
# Получаем текущее время и корректируем на +3 часа
|
195 |
+
current_time = datetime.utcnow() + timedelta(hours=3)
|
196 |
+
filename = f"db_{current_time.strftime('%d.%m.%Y_%H.%M')}.xlsx"
|
197 |
+
|
198 |
+
path = filename # Используем новое имя файла
|
199 |
url = f"https://api.github.com/repos/{repo}/contents/{path}"
|
200 |
|
201 |
# Проверяем, существует ли файл уже
|
|
|
206 |
sha = None
|
207 |
|
208 |
data = {
|
209 |
+
"message": f"Обновлен файл {filename}",
|
210 |
"content": content,
|
211 |
}
|
212 |
if sha:
|
|
|
217 |
if put_response.status_code in [200, 201]:
|
218 |
# Получаем ссылку для скачивания файла
|
219 |
download_url = f"https://raw.githubusercontent.com/{repo}/main/{path}"
|
220 |
+
return download_url, df # Возвращаем URL файла и DataFrame
|
221 |
else:
|
222 |
print(f"Ошибка при загрузке файла на GitHub: {put_response.status_code}, {put_response.text}")
|
223 |
+
return "Ошибка при загрузке файла на GitHub.", None
|
224 |
else:
|
225 |
+
return "Нет данных для формирования файла.", None
|
226 |
+
|
227 |
+
|
228 |
+
def update_download_link():
|
229 |
+
result = download_current_message_database()
|
230 |
+
link, df = result if isinstance(result, tuple) else (result, None)
|
231 |
+
if isinstance(link, str) and link.startswith("http") and df is not None:
|
232 |
+
# Вычисляем аналитику
|
233 |
+
total_messages = len(df)
|
234 |
+
# Количество сообщений по моделям
|
235 |
+
model_counts = df['Модель'].value_counts()
|
236 |
+
# Количество чистых сообщений по моделям
|
237 |
+
clean_df = df[df['Комментарий'].isna() & df['Откорректированное сообщение'].isna()]
|
238 |
+
clean_model_counts = clean_df['Модель'].value_counts()
|
239 |
+
# Наиболее активные контрибьюторы
|
240 |
+
contributor_counts = df['Автор'].value_counts()
|
241 |
+
# Количество сообщений по датам
|
242 |
+
df['Дата сохранения'] = pd.to_datetime(df['Дата сохранения'], errors='coerce')
|
243 |
+
date_counts = df['Дата сохранения'].dt.date.value_counts().sort_index()
|
244 |
+
|
245 |
+
# Подготовка вывода
|
246 |
+
total_messages_display_value = f"**Общее количество сообщений:** {total_messages}"
|
247 |
+
|
248 |
+
# Создаем диаграммы с помощью plotly
|
249 |
+
model_pie_fig = px.pie(values=model_counts.values, names=model_counts.index, title='Количество сообщений по моделям')
|
250 |
+
clean_model_pie_fig = px.pie(values=clean_model_counts.values, names=clean_model_counts.index, title='Количество чистых сообщений по моделям')
|
251 |
+
contributor_pie_fig = px.pie(values=contributor_counts.values, names=contributor_counts.index, title='Наиболее активные контрибьюторы')
|
252 |
+
date_message_fig = px.bar(x=date_counts.index, y=date_counts.values, labels={'x': 'Дата', 'y': 'Количество сообщений'}, title='Количество добавленных сообщений по датам')
|
253 |
+
|
254 |
+
return (
|
255 |
+
f"[Скачать базу сообщений]({link})",
|
256 |
+
total_messages_display_value,
|
257 |
+
model_pie_fig,
|
258 |
+
clean_model_pie_fig,
|
259 |
+
contributor_pie_fig,
|
260 |
+
date_message_fig
|
261 |
+
)
|
262 |
+
else:
|
263 |
+
return link, "", None, None, None, None
|
264 |
+
|
265 |
|
266 |
def correct_dash_usage(text):
|
267 |
# Step 1: Replace any dash with long dash if surrounded by spaces
|
|
|
1991 |
|
1992 |
gr.Markdown("---")
|
1993 |
|
1994 |
+
gr.Markdown("## Аналитика")
|
1995 |
+
|
1996 |
+
total_messages_display = gr.Markdown(value="", label="Общее количество сообщений")
|
1997 |
+
|
1998 |
+
with gr.Row():
|
1999 |
+
model_pie_chart = gr.Plot(label="Количество сообщений по моделям")
|
2000 |
+
clean_model_pie_chart = gr.Plot(label="Количество чистых сообщений по моделям")
|
2001 |
+
contributor_pie_chart = gr.Plot(label="Наиболее активные контрибьюторы")
|
2002 |
+
|
2003 |
+
date_message_chart = gr.Plot(label="Количество добавленных сообщений по датам")
|
2004 |
+
|
2005 |
+
gr.Markdown("---")
|
2006 |
+
|
2007 |
# Очистка всех полей кроме prompt_display
|
2008 |
description_input.change(
|
2009 |
fn=clear_on_change, # Сначала вызываем функцию очистки полей
|
|
|
2664 |
fn=reset_button_text,
|
2665 |
outputs=[save_meta_llama_405b_btn]
|
2666 |
)
|
2667 |
+
|
2668 |
+
# Связываем кнопку с функцией
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2669 |
download_btn.click(
|
2670 |
fn=update_download_link,
|
2671 |
inputs=[],
|
2672 |
+
outputs=[
|
2673 |
+
download_link,
|
2674 |
+
total_messages_display,
|
2675 |
+
model_pie_chart,
|
2676 |
+
clean_model_pie_chart,
|
2677 |
+
contributor_pie_chart,
|
2678 |
+
date_message_chart
|
2679 |
+
]
|
2680 |
)
|
2681 |
|
2682 |
demo.launch()
|