Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions core/disciplines.json
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,32 @@
"print(",
"for "
]
},
{
"id": "calendario",
"label": "Calendário acadêmico",
"command": "/calendario",
"menuShort": "/calendario",
"siloClass": "calendario",
"menuDescription": "Datas de TP, AT, Projeto de Bloco, feriados e recessos (calendário oficial)",
"queryMarkers": [
"calendário",
"calendario",
"cronograma",
"prazo",
"data de entrega",
"quando é a entrega",
"quando e a entrega",
"quando entrega",
"quando é o at",
"quando e o at",
"quando é o tp",
"quando e o tp",
"reentrega",
"feriado",
"recesso",
"trimestre"
]
}
]
}
2 changes: 2 additions & 0 deletions core/systemPrompt/system_prompt.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ Ordem de prioridade (maior → menor):
- Metadados de catálogo (título, slug, resumo) **orientam escopo** — **não** são prova factual.
- O contrato de **grounding** injectado neste turno define se os trechos são SSOT absoluto ou evidência primária (com extensão pedagógica rotulada quando permitida).
- Quando um excerto for ambíguo ou parcial, indique o que falta em vez de inferir.
- Trechos de **transcrição** (título «Transcrição da aula N…») trazem marcadores `[mm:ss]` = minuto da gravação. Ao citar o que o professor disse, indique aula e minuto (ex.: «aula 11, por volta de [23:10]») para o aluno conferir na gravação.
- Trechos de **calendário** (`calendario`) listam entregas de TP/AT/PB por **semana**; responda com a semana (datas de início e fim) e lembre que o dia e a hora exatos são definidos pelo professor no portal.

## 5. Segurança e limites

Expand Down
11 changes: 11 additions & 0 deletions docs/wiki/10-integracao-iss-fase5b.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,17 @@ Objetivos: {csv separado por ;}
- Falha CI se drift crítico
- `POST /reload` após ingest bem-sucedido

## Rows extra: transcrições e calendário

Além das lições, o ingest do ISS (`knowledge_extras.py`) grava na mesma tabela:

| Tipo | `discipline` | `slug` | Conteúdo |
|------|--------------|--------|----------|
| Transcrição bruta | a da aula | `transcricao__NN__DDMMYYYY` | Texto integral do `.vtt` com `[mm:ss]` a cada ~60 s; sem nomes de quem fala |
| Calendário | `calendario` | `calendario-YYYY-trim-N` | Resumo de entregas TP/AT/PB + grelha semanal (planilha pública Infnet) |

No KernelBot nada muda estruturalmente: são rows normais, chunkadas a 500 palavras. O `__NN__` do slug vira «Aula NN» na UI; o título vem da 1.ª linha do chunk quando a row não está no catálogo. Essas chaves aparecem como `index_only` no `/health/catalog` — o `verify-kernelbot-sync.mjs` exclui-as da contagem de lições e só falha por `catalog_only`.

## O que o KernelBot **não** faz na ingest

| Não faz | Quem faz |
Expand Down
7 changes: 4 additions & 3 deletions docs/wiki/19-faq-usuario.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,13 @@ Se **não** houver fonte e o tema estiver fora do material, o Kernel deve dizer

## Dúvidas sobre a faculdade (prazos, professores, Living Code)

Hoje o bot responde melhor sobre **conteúdo de aula**. Informação administrativa (datas oficiais, regulamento completo, corpo docente) depende de estar **indexada** no corpus.
**Datas de TP, AT e Projeto de Bloco**: o calendário acadêmico oficial está indexado por trimestre (`/calendario` ou pergunte «quando é a entrega do TP2?»). O bot responde com a **semana** (ex.: 09 a 14/11); o dia e a hora exatos de cada entrega são definidos pelo professor no portal — confirme lá.

Se a resposta for vaga ou disser que não encontrou na base:
**«O que o professor disse sobre X?»**: além das lições resumidas, as **transcrições das aulas** estão indexadas com marcadores de minuto `[mm:ss]`. Quando a resposta citar «aula 11, por volta de [23:10]», é o ponto da gravação para conferir.

Regulamento completo, corpo docente e outras informações administrativas ainda **não** estão no corpus. Se a resposta for vaga ou disser que não encontrou na base:

- Consulte o **portal / AVA** e a **coordenação**
- Em breve: documentos institucionais dedicados no índice

---

Expand Down
13 changes: 8 additions & 5 deletions engine/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -539,11 +539,14 @@ def _build_source_details_for_ui(
slug = parts[0]

entry = lesson_catalog.entry_for_source(src) if lesson_catalog else None
lesson_title = (
(entry.title or entry.name).strip()
if entry
else _display_name_from_source(src)
)
if entry:
lesson_title = (entry.title or entry.name).strip()
else:
# Rows fora do catálogo (transcrições, calendário): o chunk começa pelo título
# (`{title}\n…` ou `Título: {title}\n…` em engine.database._chunk_text).
first_line = (chunk.get("text") or "").split("\n", 1)[0].strip()
first_line = first_line.removeprefix("Título:").strip()
lesson_title = first_line or _display_name_from_source(src)
chunk_excerpt = _excerpt_for_ui(chunk.get("text") or "")
catalog_excerpt = (entry.excerpt or "").strip() if entry else ""
excerpt = chunk_excerpt or _excerpt_for_ui(catalog_excerpt, max_len=220)
Expand Down