docs: update HANDOFF.md — Stages 10+11 completed, Stage 12 next

This commit is contained in:
NSCT Agent
2026-08-25 15:42:00 +00:00
parent 10a083aa02
commit d76d48a0ee
5 changed files with 10 additions and 6 deletions

View File

@@ -65,9 +65,8 @@ Wenn ein neuer Thread weiterarbeiten soll, einfach **Stage X** nennen und mit de
|| 7 | ~~Claim Clustering & Contradiction Candidates~~ (✅ **ABGESCHLOSSEN** `d1e6bb6`) || || 7 | ~~Claim Clustering & Contradiction Candidates~~ (✅ **ABGESCHLOSSEN** `d1e6bb6`) ||
|| 8 | ~~Evidence Scoring~~ (✅ **ABGESCHLOSSEN** `719e218`) | || 8 | ~~Evidence Scoring~~ (✅ **ABGESCHLOSSEN** `719e218`) |
|| 9 | ~~Neutral Synthesis Engine~~ (✅ **ABGESCHLOSSEN** `d87e2b4`) || || 9 | ~~Neutral Synthesis Engine~~ (✅ **ABGESCHLOSSEN** `d87e2b4`) ||
|| 9 | ~~Neutral Synthesis Engine~~ (✅ **ABGESCHLOSSEN** `d87e2b4`) || || **10** | **Vision Integration** — Qwen2.5-VL-3B für Diagramme, Screenshots, Infografiken, PDF-Layouts. Provenance-Pflicht. (**ABGESCHLOSSEN** `3ab875d`) ||
| **10** | **Vision Integration**Qwen2.5-VL-3B für Diagramme, Screenshots, Infografiken, PDF-Layouts. Provenance-Pflicht. | || **11** | **Audio Integration**STT-Transkription von Interviews, Podcasts, Pressekonferenzen. Timestamped Claims. (**ABGESCHLOSSEN** `10a083a`) ||
| **11** | **Audio Integration** — Transkription von Interviews, Podcasts, Pressekonferenzen. Timestamped Claims. |
| **12** | **Research Orchestrator** — State Machine (CREATED→PLANNING→SEARCHING→...→COMPLETED/FAILED). Harte Budgets (max_search_queries, max_sources, max_llm_requests, ...). | | **12** | **Research Orchestrator** — State Machine (CREATED→PLANNING→SEARCHING→...→COMPLETED/FAILED). Harte Budgets (max_search_queries, max_sources, max_llm_requests, ...). |
| **13** | **Iterative Research / Gap Analysis** — Max 3 Research-Rounds. Lückenerkennung: welche Claims nur eine Quelle? Wo fehlen Primärquellen? | | **13** | **Iterative Research / Gap Analysis** — Max 3 Research-Rounds. Lückenerkennung: welche Claims nur eine Quelle? Wo fehlen Primärquellen? |
| **14** | **REST API** — POST/GET/DELETE für research, status, sources, claims, evidence, report. Depth: quick/normal/deep. | | **14** | **REST API** — POST/GET/DELETE für research, status, sources, claims, evidence, report. Depth: quick/normal/deep. |

View File

@@ -107,6 +107,10 @@ def create_app() -> FastAPI:
from nsct.api.vision import router as vision_router from nsct.api.vision import router as vision_router
app.include_router(vision_router, tags=["vision"]) app.include_router(vision_router, tags=["vision"])
# Mount audio router (Stage 11)
from nsct.api.audio import router as audio_router
app.include_router(audio_router, tags=["audio"])
return app return app

View File

@@ -23,8 +23,6 @@ from nsct.models.schemas import (
SearchQuery, SearchQuery,
Source, Source,
SourceType, SourceType,
)
from nsct.models.schemas import (
SynthesisReportModel, SynthesisReportModel,
) )
from nsct.models.vision import ( from nsct.models.vision import (

View File

@@ -2,9 +2,12 @@
from nsct.stages.stage5_extract_claims import Stage5Extractor from nsct.stages.stage5_extract_claims import Stage5Extractor
from nsct.stages.stage10_vision import VisionStage, VisionEvidence from nsct.stages.stage10_vision import VisionStage, VisionEvidence
from nsct.stages.stage11_audio import AudioStage, AudioClaim
__all__ = [ __all__ = [
"Stage5Extractor", "Stage5Extractor",
"VisionStage", "VisionStage",
"VisionEvidence", "VisionEvidence",
"AudioStage",
"AudioClaim",
] ]

View File

@@ -789,9 +789,9 @@ class AudioStage:
) )
elif isinstance(stt_result, dict): elif isinstance(stt_result, dict):
transcript = stt_result.get("transcript_text", "") transcript = stt_result.get("transcript_text", "")
source_url = stt_result.get("source_url", "unknown")
if transcript and transcript.strip(): if transcript and transcript.strip():
language = stt_result.get("language", "unknown") language = stt_result.get("language", "unknown")
source_url = stt_result.get("source_url", "unknown")
source_title = stt_result.get("source_title") source_title = stt_result.get("source_title")
claim_tasks.append( claim_tasks.append(
asyncio.ensure_future( asyncio.ensure_future(