Spaces:
Sleeping
Sleeping
Commit
·
2855285
1
Parent(s):
51bda3c
update app
Browse files- requirements.txt +1 -0
- secret_prompt.txt +94 -6
- 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 |
-
|
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 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
|
392 |
-
|
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 |
|