- таблица jobs + очередь с воркером: POST /jobs сразу отвечает, элементы
плейлиста обрабатываются последовательно, есть отмена и живой прогресс
(скачивание %, минуты распознанного Vosk-аудио)
- expand_url: плейлист раскрывается в список видео
- keep_video=false теперь качает только аудио (для 4-5ч лекций)
- настройки (LLM-ключ, модель, длина выжимки, хранение видео, путь Vosk)
хранятся в Postgres: переживают перезапуск и перезагрузку страницы
- длина выжимки прокидывается в LLM-промпт ({n} предложений)
- UI: вкладки «Главная»/«Настройки», карточка задач с автообновлением
каждые 3 сек, прогресс-бар, отмена, библиотека обновляется по мере
готовности элементов
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
40 lines
933 B
Python
40 lines
933 B
Python
import flet as ft
|
|
|
|
from web.api_client import ApiClient
|
|
from web.config import PORT
|
|
import web.designer as d
|
|
from web.views.main_view import MainView
|
|
|
|
|
|
def main(page: ft.Page) -> None:
|
|
page.title = "LLM-infa"
|
|
page.theme_mode = ft.ThemeMode.DARK
|
|
page.bgcolor = d.BG
|
|
page.padding = 0
|
|
page.scroll = ft.ScrollMode.HIDDEN
|
|
page.window.width = 1100
|
|
page.fonts = {}
|
|
|
|
client = ApiClient()
|
|
view = MainView(page, client)
|
|
page.add(view.build())
|
|
|
|
# настройки живут на сервере (БД) — заполняем поля сохранёнными значениями
|
|
try:
|
|
view.apply_settings(client.get_settings())
|
|
except Exception:
|
|
pass
|
|
|
|
view._refresh_library()
|
|
view._start_jobs_poll()
|
|
page.update()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
ft.app(
|
|
target=main,
|
|
view=ft.AppView.WEB_BROWSER,
|
|
port=PORT,
|
|
host="0.0.0.0",
|
|
)
|