Skip to content

feat(ingest): transcrições brutas com minuto e calendário acadêmico na knowledge - #3

Open
Adailtononato wants to merge 1 commit into
GaabDevWeb:featuresfrom
Adailtononato:feat/knowledge-transcripts-calendar
Open

Adailtononato wants to merge 1 commit into
GaabDevWeb:featuresfrom
Adailtononato:feat/knowledge-transcripts-calendar

Conversation

@Adailtononato

Copy link
Copy Markdown

Base: features (é onde vivem ingest-knowledge.py, verify-kernelbot-sync.mjs e o workflow de sync). PR complementar no KernelBot: prompt + disciplina calendario + rótulo de fonte.

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 em downloads/ 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:

Tipo discipline slug Conteúdo
Transcrição bruta a da aula (config/vtt-to-content.json) transcricao__NN__DDMMYYYY Texto integral do .vtt com [mm:ss] a cada ~60 s; nomes de quem fala removidos (alunos aparecem na transcrição)
Calendário calendario calendario-YYYY-trim-N Uma row por trimestre: resumo de entregas TP/AT/PB + grelha semanal, a partir da planilha pública do calendário acadêmico Infnet (export CSV, sem login)
  • __NN__ no slug é o padrão que o KernelBot usa para rotular "Aula NN".
  • Calendário indisponível (rede, planilha) vira aviso, nunca erro do ingest.
  • KNOWLEDGE_EXTRAS=0 desliga; CALENDAR_CSV_URL troca a fonte; TRANSCRIPT_MARKER_SECONDS ajusta o intervalo.
  • CLI local: python3 .github/scripts/knowledge_extras.py --dry-run / --dump <slug>.

ingest-knowledge.py

As 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_keys continua só com lições (é o que o verify compara com lessons.json). Report ganha extras_count.

verify-kernelbot-sync.mjs

A contagem MySQL exclui discipline = 'calendario' e slug LIKE 'transcricao\_\_%', senão mysql_count !== lesson_count falharia sempre. O gate de catalog_only não muda; as chaves extra aparecem como index_only no /health/catalog, que o verify não penaliza.

sync-kernelbot-knowledge.yml

  • workflow_run encadeado ao "Resumir transcrições (Cursor SDK)": o commit automático do resumidor leva [skip ci], logo o gatilho push em content/** nunca dispara a partir dele. Sem isto, lições novas não chegam ao MySQL sozinhas.
  • Job ingest só corre em workflow_run se o resumidor terminou com sucesso.
  • Corrigido JOB_STATUS do 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)

$ python3 .github/scripts/knowledge_extras.py --dry-run
rows extra: 88  (84 transcrições + 4 trimestres de 2026)
maior content: 107.076 chars  (limite: 4.000.000)

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:

Calendário acadêmico 2026 — Trimestre 4
Período: 05/10 a 19/12/2026. Fonte: calendário oficial da Infnet (…)
Resumo de entregas e avaliações:
- Entrega do TP1 — Disciplinas regulares: semana 4, 26 a 31/10/2026
- Entrega do TP2 — Disciplinas regulares: semana 6, 09 a 14/11/2026
- Entrega e arguição do AT (Assessment) — Disciplinas regulares: semana 10, 07 a 12/12/2026
…

Não testei contra MySQL real (sem credenciais); o UPSERT usa exatamente o mesmo SQL e a mesma tupla das lições.

Notas

  • Transcrições contêm falas de alunos. Os nomes são removidos, mas o conteúdo continua sendo o que foi dito em aula. Vale um aviso no grupo.
  • workflow_run só dispara a partir do ficheiro na branch padrão; enquanto este workflow viver só em features, o encadeamento fica inativo.
  • Sugestão: ignorar __pycache__/ no .gitignore (há um .pyc versionado em .github/scripts/).

🤖 Generated with Claude Code

…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>
@Adailtononato

Copy link
Copy Markdown
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):

  1. fix(ci): reutilizar sessão autenticada — wp-login.php está atrás do Cloudflare STRIPPERscrapper#3 — destrava o scraper (wp-login.php atrás do Cloudflare desde maio; sessão reutilizada).
  2. Este PR — transcrições brutas + calendário na knowledge, e o sync encadeado ao resumidor.
  3. feat: fontes extra do ISS — transcrições com minuto e calendário acadêmico KernelBot#14 — o KernelBot aprende a citar minuto e a disciplina /calendario.

O 3 só faz efeito depois do 2. Fico à disposição para ajustar o que preferires.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant