fruitpicker01 commited on
Commit
fb14645
·
verified ·
1 Parent(s): e3603e4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +84 -17
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
- path = "messages.xlsx"
 
 
 
 
 
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"Обновлен файл messages.xlsx",
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=download_link
 
 
 
 
 
 
 
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()