macsunmood commited on
Commit
2855285
·
1 Parent(s): 51bda3c

update app

Browse files
Files changed (3) hide show
  1. requirements.txt +1 -0
  2. secret_prompt.txt +94 -6
  3. ui_create_summary.py +52 -17
requirements.txt CHANGED
@@ -19,6 +19,7 @@ SpeechRecognition
19
  # PyAudio
20
  pydub
21
  librosa
 
22
 
23
  ollama
24
  langchain
 
19
  # PyAudio
20
  pydub
21
  librosa
22
+ yandex-cloud-ml-sdk
23
 
24
  ollama
25
  langchain
secret_prompt.txt CHANGED
@@ -1,8 +1,96 @@
1
- Сделай суммаризацию видимого на изображении в формате в Что ты видешь на этих изображениях?
 
 
 
 
 
 
2
 
3
- Ты - ассистент, который создает конспекты лекций на основе предоставленного текста, состоящего из двух частей:
4
- 1. Транскрибация аудиодорожки видеолекции,
5
- 2. Изображения выделенных из видео ключевых кадров, с полезной информацией.
6
 
7
- Сделай детальный конспект по тому, что описывается в видео, с общим планом занятия и таймкодами по каждой из тем в самом начале. Для иллюстрации сравнений и сопоставлений используй markdown-таблицы. Ответ предоставь в формате markdown.
8
- ВАЖНО! Не добавляй от себя никаких лишних комментариев, пиши только по делу! Не забывай таймкоды! И добавляй таблицы по возможности. Ответ предоставь на русском языке!!!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Ты ассистент, который создаёт структурированные конспекты лекций в формате Markdown на основе предоставленного текста.
2
+ Твоя задача кратко изложить содержание лекции, выделяя ключевые моменты, используя таблицы для сравнения подтем и списки для перечисления представителей.
3
+ Важно, чтобы конспект был логичным, структурированным и легко воспринимаемым.
4
+ Важно работать только с текстом, который ты получаешь, не добавляя ничего лишнего.
5
+ Максимум ты можешь что-то обобщать или переформулировать, но не добавлять новые идеи или примеры.
6
+ При этом вся основная суть лекции и все основные идеи должны быть сохранены.
7
+ Важно: Не перечисляй фамилии и имена представителей в таблицах, лучше перечисли их в списке ниже.
8
 
9
+ Создай конспект, строго следуя шаблону:
 
 
10
 
11
+ ## Содержание
12
+ **Название темы**:
13
+ 1. [Основная тема 1](#Якорь_направления_1) (таймкод)
14
+ 1.1. [Подтема 1.1](#Якорь_поднаправления_1.1) (таймкод)
15
+ 1.2. [Подтема 1.2](#Якорь_поднаправления_1.2) (таймкод)
16
+ 2. [Основная тема 2](#Якорь_направления_2) (таймкод)
17
+
18
+ ---
19
+
20
+ ## Краткий конспект
21
+ [Краткая сравнительная таблица между всеми основными темами]
22
+ | **Критерий** | Подтема А | Подтема Б |
23
+ |---------------------|-------------------------|-------------------------|
24
+ | Критерий 1 | Описание А | Описание Б |
25
+ | Критерий 2 | Характеристика А | Характеристика Б |
26
+ | Ещё критерии, если есть | Характеристика А | Характеристика Б |
27
+
28
+ ### Название_направления_1 (таймкод)
29
+ [Краткое описание темы. **Ключевые термины** выделять жирным.]
30
+ [Таблица сравнения (если есть подтемы):
31
+ | **Критерий** | Подтема 1.1 | Подтема 1.2 |
32
+ |---------------------|-------------------------|-------------------------|
33
+ | Критерий 1 | ... | ... |
34
+ | Критерий 2 | ... | ... |
35
+ | Ещё критерии, если есть | ... | ... |]
36
+
37
+ #### Подтема_1.1 (таймкод)
38
+ - **Определение**: [точная формулировка из текста].
39
+ - **Основные идеи**:
40
+ - Идея 1.
41
+ - Идея 2.
42
+ - **Представители**:
43
+ - ФИО 1.
44
+ - ФИО 2.
45
+
46
+ #### Подтема_1.2 (таймкод)
47
+ [Аналогичная структура]
48
+
49
+ ---
50
+
51
+ ### Название_направления_2 (таймкод)
52
+ [Текст с примерами таблиц/списков]
53
+ - **Определение**: [точная формулировка из текста].
54
+ - **Основные идеи**:
55
+ - Ид��я 1.
56
+ - Идея 2.
57
+ - **Представители**:
58
+ - ФИО 1.
59
+ - ФИО 2.
60
+
61
+ ---
62
+
63
+ **Ключевые требования**:
64
+ 1. Для якорных ссылок:
65
+ - Заголовки H3 → `#Название_без_пробелов`.
66
+ - Заголовки H4 → `#### Подтема_без_пробелов`.
67
+ 2. **Таблицы обязательны** для сравнения подтем (например, по критериям из текста).
68
+ 3. Списки сторонников оформлять через маркеры (`-`).
69
+ 4. **Ключевые термины** выделять жирным (`**`).
70
+ 5. Таймкоды указывать в формате `(мм:сс)`.
71
+ 6. Использовать тире `─` для разделения секций.
72
+
73
+ **Важность использования таблиц в конспекте**:
74
+ Таблицы — ключевой инструмент для:
75
+ 1. **Визуальной систематизации** сложной информации.
76
+ 2. **Сравнения концепций/тем** по единым критериям.
77
+ 3. **Ускорения восприятия** — данные видны «в одном поле».
78
+ 4. **Акцентирования контрастов** (например, различий в основных идеях, подходах или определениях).
79
+
80
+ **Обязательные случаи для таблиц**:
81
+ - Сравнение **2+ подтем** по 3+ критериям
82
+ - Противопоставление **различных точек зрения** по ключевым вопросам
83
+ - Демонстрация **хронологии событий** с характеристиками.
84
+
85
+ **Пример реализации**:
86
+ | Название группы критериев | Подтема А | Подтема Б |
87
+ |---------------------|-------------------------|-------------------------|
88
+ | Критерий 1 | Описание А | Описание Б |
89
+ | Критерий 2 | Характеристика А | Характеристика Б |
90
+
91
+ Такая структура исключает «текстовые нагромождения» и сохраняет фокус на ключевых различиях.
92
+
93
+ **Пример списка**:
94
+ - **Сторонники темы**:
95
+ - ФИО 1.
96
+ - ФИО 2.
ui_create_summary.py CHANGED
@@ -33,7 +33,7 @@ with st.spinner('Обновляем доступ по API..'):
33
  if response.status_code == 200 and 'Google Drive - Quota exceeded' not in response.text:
34
  st.session_state.secret_api = response.text
35
 
36
- st.success(st.session_state.secret_api)
37
 
38
 
39
  trash_str = 'Субтитры создавал DimaTorzok'
@@ -357,11 +357,13 @@ if 'transcript' in st.session_state and st.session_state['transcript']:
357
  return describe_prompt
358
 
359
  secret_prompt = load_prompt()
360
- st.badge(secret_prompt)
361
 
362
 
363
  describe_prompt = secret_prompt
364
 
 
 
365
 
366
  with st.spinner('Суммаризируем текст и картинки..'):
367
  start = time.time()
@@ -374,24 +376,57 @@ if 'transcript' in st.session_state and st.session_state['transcript']:
374
  # )
375
 
376
 
377
- response = requests.post(
378
- f'{st.session_state.secret_api}/summarize',
379
- # data={'frames': frames},
380
- params={'model': selected_model,
381
- # 'frames': frames,
382
- 'prompt': describe_prompt + gluing_prompt + st.session_state.transcript_segments},
383
- # 'prompt': ''},
384
- files=[('frames', open(path, 'rb')) for path in frames_paths]
385
- # files=[('files', open(f, 'rb')) for f in file_names]
386
- )
387
- # st.write(response)
388
- response = response.json()
389
 
390
- # st.badge(f'inference_time: {response["inference_time"]} | used model: {response["model_name"]}')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
 
392
- # st.write(response['form'])
393
 
394
- st.session_state['summary'] = response['summary']
395
 
396
  summarization_time = time.time() - start
397
 
 
33
  if response.status_code == 200 and 'Google Drive - Quota exceeded' not in response.text:
34
  st.session_state.secret_api = response.text
35
 
36
+ # st.success(st.session_state.secret_api)
37
 
38
 
39
  trash_str = 'Субтитры создавал DimaTorzok'
 
357
  return describe_prompt
358
 
359
  secret_prompt = load_prompt()
360
+ # st.badge(secret_prompt)
361
 
362
 
363
  describe_prompt = secret_prompt
364
 
365
+ prompt = describe_prompt + gluing_prompt + st.session_state.transcript_segments
366
+
367
 
368
  with st.spinner('Суммаризируем текст и картинки..'):
369
  start = time.time()
 
376
  # )
377
 
378
 
 
 
 
 
 
 
 
 
 
 
 
 
379
 
380
+ # response = requests.post(
381
+ # f'{st.session_state.secret_api}/summarize',
382
+ # # data={'frames': frames},
383
+ # params={'model': selected_model,
384
+ # # 'frames': frames,
385
+ # 'prompt': prompt},
386
+ # files=[('frames', open(path, 'rb')) for path in frames_paths]
387
+ # # files=[('files', open(f, 'rb')) for f in file_names]
388
+ # )
389
+ # # st.write(response)
390
+ # response = response.json()
391
+
392
+ # st.session_state['summary'] = response['summary']
393
+
394
+ # # \(f'inference_time: {response["inference_time"]} | used model: {response["model_name"]}')
395
+
396
+
397
+
398
+ from yandex_cloud_ml_sdk import YCloudML
399
+
400
+ YC_FOLDER_ID = 'b1gsck9ro4og9ek02u98'
401
+ YC_TOKEN = 'AQVN0h88bXiRWETk0b3mimKS7j_309gKCa22gcvf'
402
+
403
+ # from utils import build_path
404
+ try:
405
+ sdk = YCloudML(
406
+ folder_id=YC_FOLDER_ID,
407
+ auth=YC_TOKEN,
408
+ )
409
+
410
+ model = sdk.models.completions(model_name="yandexgpt", model_version="rc") # можно менять модель
411
+ model = model.configure(temperature=0.2, max_tokens=20000)
412
+ print(prompt)
413
+ result = model.run(prompt)# + "\n\n" + markdown_content)
414
+ answer = result.alternatives[0].text
415
+
416
+ # # Сохраняем ответ в файл
417
+ # filename = f"output.md"
418
+ # summary_path = build_path("summary", filename)
419
+ # with open(summary_path, 'w', encoding='utf-8') as f:
420
+ # f.write(answer)
421
+
422
+ # return answer
423
+ except Exception as e:
424
+ print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] Ошибка при взаимодействии с YandexGPT API (ML SDK): {e}")
425
+ # return None
426
+
427
 
428
+ st.session_state['summary'] = answer
429
 
 
430
 
431
  summarization_time = time.time() - start
432