feat(ingest): transcrições brutas com minuto e calendário acadêmico na knowledge - #3
Open
Adailtononato wants to merge 1 commit into
Conversation
…a knowledge Além das lições resumidas, o ingest passa a gravar no MySQL do KernelBot: - Transcrição integral de cada .vtt (downloads/<Pasta>/Aula_NN_-_DDMMYYYY.vtt) com marcadores [mm:ss] a cada ~60 s, sem nomes de quem fala. slug transcricao__NN__DDMMYYYY, discipline da aula. - Calendário acadêmico Infnet (planilha pública, export CSV) — uma row por trimestre com resumo de entregas TP/AT/PB e grelha semanal. discipline calendario, slug calendario-YYYY-trim-N. Novo módulo .github/scripts/knowledge_extras.py (CLI --dry-run/--dump). As rows extra entram no mesmo UPSERT e na lista de ativos do ingest, senão a desativação NOT IN (rows) apagava-as a cada sync. O verify exclui essas rows da contagem comparada com lessons.json. Workflow de sync: - workflow_run encadeado ao resumidor: o commit automático leva [skip ci], logo o gatilho push em content/** nunca disparava a partir dele. - JOB_STATUS do notify em bloco >- : a expressão em várias linhas era YAML inválido e impedia o parse do ficheiro. Testado com os 84 .vtt da branch: 1942 chunks de 500 palavras no KernelBot, todos com marcador de minuto exceto 1 ponta final. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Author
|
Contexto da série de PRs (mesmo objetivo: aulas no bot na mesma manhã, dúvida pontual com minuto da gravação, datas de TP/AT):
O 3 só faz efeito depois do 2. Fico à disposição para ajustar o que preferires. |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivação
O bot responde bem a "o que é X", mas mal a dúvida pontual sobre o que foi dito em aula ("como o professor tratou a exceção com
finally?", "que comando ele rodou quando deu erro no pandas?"). Só o resumo gerado por LLM vai para o MySQL; a transcrição fica emdownloads/sem ser indexada. E não há nada sobre datas (TP, AT, PB), que é a segunda pergunta mais comum dos alunos.O que muda
.github/scripts/knowledge_extras.py(novo)Gera rows extra para a tabela
knowledge, no mesmo formato das lições:disciplineslugconfig/vtt-to-content.json)transcricao__NN__DDMMYYYY.vttcom[mm:ss]a cada ~60 s; nomes de quem fala removidos (alunos aparecem na transcrição)calendariocalendario-YYYY-trim-N__NN__no slug é o padrão que o KernelBot usa para rotular "Aula NN".KNOWLEDGE_EXTRAS=0desliga;CALENDAR_CSV_URLtroca a fonte;TRANSCRIPT_MARKER_SECONDSajusta o intervalo.python3 .github/scripts/knowledge_extras.py --dry-run/--dump <slug>.ingest-knowledge.pyAs rows extra entram no mesmo UPSERT e na mesma lista de ativos. Isso é essencial: a desativação
NOT IN (rows)apagaria qualquer row gravada por fora.processed_keyscontinua só com lições (é o que o verify compara comlessons.json). Report ganhaextras_count.verify-kernelbot-sync.mjsA contagem MySQL exclui
discipline = 'calendario'eslug LIKE 'transcricao\_\_%', senãomysql_count !== lesson_countfalharia sempre. O gate decatalog_onlynão muda; as chaves extra aparecem comoindex_onlyno/health/catalog, que o verify não penaliza.sync-kernelbot-knowledge.ymlworkflow_runencadeado ao "Resumir transcrições (Cursor SDK)": o commit automático do resumidor leva[skip ci], logo o gatilhopushemcontent/**nunca dispara a partir dele. Sem isto, lições novas não chegam ao MySQL sozinhas.ingestsó corre emworkflow_runse o resumidor terminou com sucesso.JOB_STATUSdo notify: a expressão${{ … }}quebrada em várias linhas é YAML inválido (implicit keys need to be on a single line); agora é bloco>-. Era pré-existente e impedia o parse do ficheiro.Teste (dados reais da branch)
Chunking do KernelBot (
engine.database._chunk_text, 500 palavras) sobre as 84 transcrições: 1.942 chunks, 0 sem marcador no meio, 1 ponta final curta sem marcador. Maior lacuna entre marcadores: 266 palavras. Aula mais longa: 143 min.Row do calendário (trimestre 4) gerada via URL pública, início:
Não testei contra MySQL real (sem credenciais); o UPSERT usa exatamente o mesmo SQL e a mesma tupla das lições.
Notas
workflow_runsó dispara a partir do ficheiro na branch padrão; enquanto este workflow viver só emfeatures, o encadeamento fica inativo.__pycache__/no.gitignore(há um.pycversionado em.github/scripts/).🤖 Generated with Claude Code