Initial project structure
This commit is contained in:
+37
@@ -0,0 +1,37 @@
|
|||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Virtual Environment
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
|
||||||
|
# Build
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
*.egg-info/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Test
|
||||||
|
.pytest_cache/
|
||||||
|
.coverage
|
||||||
|
htmlcov/
|
||||||
|
|
||||||
|
# Ruff / mypy
|
||||||
|
.ruff_cache/
|
||||||
|
.mypy_cache/
|
||||||
|
|
||||||
|
# Experiment Outputs
|
||||||
|
experiments/**/output/
|
||||||
|
experiments/**/results/
|
||||||
|
|
||||||
|
# Lokale Meetings (niemals versionieren)
|
||||||
|
meeting_data/
|
||||||
|
recordings/
|
||||||
@@ -0,0 +1,259 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
The **Meeting Lab** is an experimental environment for developing and evaluating methods to extract structured knowledge from real meeting transcripts.
|
||||||
|
|
||||||
|
Its purpose is not to build a complete meeting assistant, but to answer a single question:
|
||||||
|
|
||||||
|
> **How can knowledge be extracted from real discussions as reliably as possible?**
|
||||||
|
|
||||||
|
Successful approaches will later be integrated into the Meeting Assistant project.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Design Goals
|
||||||
|
|
||||||
|
The architecture follows a small set of guiding principles.
|
||||||
|
|
||||||
|
## Modular Pipeline
|
||||||
|
|
||||||
|
Complex problems are divided into small, well-defined processing steps.
|
||||||
|
|
||||||
|
Each module has exactly one responsibility.
|
||||||
|
|
||||||
|
## Deterministic where possible
|
||||||
|
|
||||||
|
Tasks that can be solved reliably without an LLM should use deterministic algorithms.
|
||||||
|
|
||||||
|
Examples include:
|
||||||
|
|
||||||
|
- transcript normalization
|
||||||
|
- whitespace cleanup
|
||||||
|
- duplicate removal
|
||||||
|
- chunk generation
|
||||||
|
|
||||||
|
LLMs are only used where semantic understanding is required.
|
||||||
|
|
||||||
|
## Preserve Information
|
||||||
|
|
||||||
|
The pipeline should never remove or rewrite information unless it is certain that the content is merely noise.
|
||||||
|
|
||||||
|
Losing information is considered worse than keeping harmless redundancy.
|
||||||
|
|
||||||
|
## Explainable Results
|
||||||
|
|
||||||
|
Every processing step should be understandable.
|
||||||
|
|
||||||
|
Intermediate results should remain inspectable throughout the pipeline.
|
||||||
|
|
||||||
|
## Reproducible Experiments
|
||||||
|
|
||||||
|
Experiments must be repeatable.
|
||||||
|
|
||||||
|
Given the same input, prompt, model and parameters, another developer should be able to reproduce the result.
|
||||||
|
|
||||||
|
## Local First
|
||||||
|
|
||||||
|
The complete pipeline should run locally.
|
||||||
|
|
||||||
|
Cloud services may be supported in the future but are not a design requirement.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Core Idea
|
||||||
|
|
||||||
|
Traditional meeting summarization attempts to solve everything in one step.
|
||||||
|
|
||||||
|
```text
|
||||||
|
Transcript
|
||||||
|
↓
|
||||||
|
LLM
|
||||||
|
↓
|
||||||
|
Summary
|
||||||
|
```
|
||||||
|
|
||||||
|
Real discussions do not work that way.
|
||||||
|
|
||||||
|
Topics are introduced, interrupted, resumed later, expanded, questioned and finally concluded.
|
||||||
|
|
||||||
|
Instead of building a better summarizer, the Meeting Lab develops a **Discussion Analyzer**.
|
||||||
|
|
||||||
|
The analyzer gradually transforms an unstructured discussion into structured knowledge.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# High-Level Pipeline
|
||||||
|
|
||||||
|
```text
|
||||||
|
Transcript
|
||||||
|
↓
|
||||||
|
Normalization
|
||||||
|
↓
|
||||||
|
Discussion Blocks
|
||||||
|
↓
|
||||||
|
Technical Chunking
|
||||||
|
↓
|
||||||
|
Topic Segmentation
|
||||||
|
↓
|
||||||
|
Specialized Extraction
|
||||||
|
↓
|
||||||
|
Consolidation
|
||||||
|
↓
|
||||||
|
Structured Meeting Data
|
||||||
|
↓
|
||||||
|
Protocol Generation
|
||||||
|
```
|
||||||
|
|
||||||
|
Each stage solves one clearly defined problem.
|
||||||
|
|
||||||
|
No module should perform multiple semantic tasks simultaneously.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Module Overview
|
||||||
|
|
||||||
|
The current architecture consists of the following processing stages.
|
||||||
|
|
||||||
|
## normalization/
|
||||||
|
|
||||||
|
Deterministic transcript cleanup.
|
||||||
|
|
||||||
|
Responsibilities:
|
||||||
|
|
||||||
|
- remove filler words
|
||||||
|
- remove immediate repetitions
|
||||||
|
- whitespace cleanup
|
||||||
|
- generate change log
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## chunking/
|
||||||
|
|
||||||
|
Creates model-sized chunks.
|
||||||
|
|
||||||
|
Chunking is purely technical.
|
||||||
|
|
||||||
|
It does **not** recognize discussion topics.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## segmentation/
|
||||||
|
|
||||||
|
Identifies discussion topics.
|
||||||
|
|
||||||
|
Responsibilities:
|
||||||
|
|
||||||
|
- detect topic start
|
||||||
|
- detect topic end
|
||||||
|
- detect topic switches
|
||||||
|
- recognize resumed topics
|
||||||
|
|
||||||
|
This is the next major development milestone.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## extraction/
|
||||||
|
|
||||||
|
Contains specialized LLM modules.
|
||||||
|
|
||||||
|
Planned extractors include:
|
||||||
|
|
||||||
|
- facts
|
||||||
|
- questions
|
||||||
|
- positions
|
||||||
|
- decisions
|
||||||
|
- todos
|
||||||
|
- technical information
|
||||||
|
|
||||||
|
Each extractor has exactly one task and one prompt.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## consolidation/
|
||||||
|
|
||||||
|
Merges information extracted from multiple discussion segments.
|
||||||
|
|
||||||
|
Typical responsibilities:
|
||||||
|
|
||||||
|
- merge duplicates
|
||||||
|
- combine partial information
|
||||||
|
- distinguish positions from decisions
|
||||||
|
- detect contradictions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## protocol/
|
||||||
|
|
||||||
|
Generates human-readable output from structured meeting data.
|
||||||
|
|
||||||
|
Protocol generation never invents information.
|
||||||
|
|
||||||
|
It only reformulates the analysis results.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Repository Layout
|
||||||
|
|
||||||
|
```text
|
||||||
|
meeting-lab/
|
||||||
|
│
|
||||||
|
├── src/
|
||||||
|
├── prompts/
|
||||||
|
├── experiments/
|
||||||
|
├── samples/
|
||||||
|
├── tests/
|
||||||
|
└── docs/
|
||||||
|
```
|
||||||
|
|
||||||
|
Additional documentation is intentionally split into focused documents.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- pipeline.md
|
||||||
|
- segmentation.md
|
||||||
|
- prompts.md
|
||||||
|
- experiments.md
|
||||||
|
|
||||||
|
The architecture document only describes the overall system.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Current State
|
||||||
|
|
||||||
|
Implemented:
|
||||||
|
|
||||||
|
- Transcript normalization
|
||||||
|
- Technical chunk generation
|
||||||
|
- Experimental LLM-based information extraction
|
||||||
|
|
||||||
|
The current extraction step still performs multiple tasks simultaneously.
|
||||||
|
|
||||||
|
This was sufficient as a proof of concept but does not reflect the intended long-term architecture.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Next Milestone
|
||||||
|
|
||||||
|
The next development step is the implementation of **topic segmentation**.
|
||||||
|
|
||||||
|
Its only responsibility is to identify the thematic structure of a discussion.
|
||||||
|
|
||||||
|
It should answer questions such as:
|
||||||
|
|
||||||
|
- Where does a topic begin?
|
||||||
|
- Where does it end?
|
||||||
|
- When does another topic start?
|
||||||
|
- When is an earlier topic resumed?
|
||||||
|
|
||||||
|
No facts, decisions or todos should be extracted at this stage.
|
||||||
|
|
||||||
|
Only after reliable topic segmentation has been achieved will the specialized extraction modules be implemented.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Guiding Principle
|
||||||
|
|
||||||
|
The Meeting Lab assumes that the greatest improvement in transcript quality will not come from increasingly powerful language models.
|
||||||
|
|
||||||
|
Instead, quality is expected to emerge from a pipeline that decomposes a complex problem into many small, clearly defined and independently testable processing steps.
|
||||||
@@ -0,0 +1,275 @@
|
|||||||
|
# Data Models
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This document describes the logical data structures exchanged between the pipeline stages of the Meeting Lab.
|
||||||
|
|
||||||
|
The goal is **not** to define a final database schema.
|
||||||
|
|
||||||
|
Instead, these models represent stable interfaces between processing modules.
|
||||||
|
|
||||||
|
Models should evolve only when required by new functionality.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Design Principles
|
||||||
|
|
||||||
|
## Keep Models Small
|
||||||
|
|
||||||
|
Only include fields that are currently required.
|
||||||
|
|
||||||
|
Avoid speculative attributes.
|
||||||
|
|
||||||
|
Bad:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"priority": "...",
|
||||||
|
"confidence": 0.93,
|
||||||
|
"risk": "...",
|
||||||
|
"category": "...",
|
||||||
|
"importance": "...",
|
||||||
|
"status": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Good:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"text": "...",
|
||||||
|
"owner": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
New fields can always be added later.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Preserve Information
|
||||||
|
|
||||||
|
Models should preserve information rather than interpret it.
|
||||||
|
|
||||||
|
Interpretation belongs to processing modules.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stable Interfaces
|
||||||
|
|
||||||
|
Modules communicate only through documented data models.
|
||||||
|
|
||||||
|
A module must never depend on another module's internal implementation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Transcript
|
||||||
|
|
||||||
|
Represents the complete meeting transcript.
|
||||||
|
|
||||||
|
Example
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"meeting_id": "meeting_001",
|
||||||
|
"language": "en",
|
||||||
|
"blocks": []
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Discussion Block
|
||||||
|
|
||||||
|
The discussion block is the fundamental processing unit.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"block_id": 42,
|
||||||
|
"speaker": "Speaker A",
|
||||||
|
"start": 351.2,
|
||||||
|
"end": 367.8,
|
||||||
|
"text": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Required fields
|
||||||
|
|
||||||
|
- block_id
|
||||||
|
- text
|
||||||
|
|
||||||
|
Optional fields
|
||||||
|
|
||||||
|
- speaker
|
||||||
|
- timestamps
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Chunk
|
||||||
|
|
||||||
|
Technical processing unit.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"chunk_id": 3,
|
||||||
|
"blocks": [
|
||||||
|
40,
|
||||||
|
41,
|
||||||
|
42
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Chunks are implementation details.
|
||||||
|
|
||||||
|
They never represent discussion topics.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Topic
|
||||||
|
|
||||||
|
Represents one discussion topic.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"topic_id": "topic_003",
|
||||||
|
"title": "Ventilation",
|
||||||
|
"segments": []
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Topic Segment
|
||||||
|
|
||||||
|
A continuous part of a topic.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"start_block": 40,
|
||||||
|
"end_block": 152
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
One topic may contain multiple segments.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Fact
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"text": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Question
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"text": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Position
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"text": "...",
|
||||||
|
"speaker": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Decision
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"text": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Todo
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"text": "...",
|
||||||
|
"owner": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Owner remains empty if unknown.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Technical Detail
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"text": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Topic Result
|
||||||
|
|
||||||
|
After extraction, every topic contains the collected information.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"topic_id": "topic_003",
|
||||||
|
"title": "Ventilation",
|
||||||
|
|
||||||
|
"segments": [],
|
||||||
|
|
||||||
|
"facts": [],
|
||||||
|
"questions": [],
|
||||||
|
"positions": [],
|
||||||
|
"decisions": [],
|
||||||
|
"todos": [],
|
||||||
|
"technical_details": []
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This object represents the main output of the analysis pipeline.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Meeting Result
|
||||||
|
|
||||||
|
The complete structured meeting.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"meeting_id": "meeting_001",
|
||||||
|
|
||||||
|
"topics": []
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Protocol generation operates exclusively on this structure.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Future Extensions
|
||||||
|
|
||||||
|
Possible future additions include:
|
||||||
|
|
||||||
|
- confidence values
|
||||||
|
- evidence references
|
||||||
|
- source blocks
|
||||||
|
- priorities
|
||||||
|
- deadlines
|
||||||
|
- status tracking
|
||||||
|
- semantic relationships
|
||||||
|
|
||||||
|
These fields will only be introduced when they provide measurable benefits.
|
||||||
|
|
||||||
|
The Meeting Lab intentionally avoids designing an overly complex schema in advance.
|
||||||
@@ -0,0 +1,428 @@
|
|||||||
|
# Pipeline
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This document describes the processing pipeline of the Meeting Lab.
|
||||||
|
|
||||||
|
Unlike `architecture.md`, which describes the overall system, this document focuses on the individual processing stages, their responsibilities and the data flowing between them.
|
||||||
|
|
||||||
|
The guiding principle is simple:
|
||||||
|
|
||||||
|
> **Each processing stage has exactly one responsibility.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Pipeline Overview
|
||||||
|
|
||||||
|
```text
|
||||||
|
Whisper Transcript
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Normalization
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Discussion Blocks
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Technical Chunking
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Topic Segmentation
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Specialized Extraction
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Consolidation
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Structured Meeting
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Protocol Generation
|
||||||
|
```
|
||||||
|
|
||||||
|
Each stage receives a well-defined input and produces a well-defined output.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 1 – Normalization
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Remove transcription artifacts without changing the meaning of the discussion.
|
||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
Raw transcript generated by Whisper.
|
||||||
|
|
||||||
|
## Output
|
||||||
|
|
||||||
|
Normalized transcript.
|
||||||
|
|
||||||
|
Change log containing every modification.
|
||||||
|
|
||||||
|
## Processing Type
|
||||||
|
|
||||||
|
Deterministic
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
- Remove filler words
|
||||||
|
- Remove immediate duplicate words
|
||||||
|
- Remove immediate duplicate short phrases
|
||||||
|
- Normalize whitespace
|
||||||
|
- Preserve all semantic content
|
||||||
|
|
||||||
|
## Must Not
|
||||||
|
|
||||||
|
- Rephrase text
|
||||||
|
- Summarize
|
||||||
|
- Interpret statements
|
||||||
|
- Correct factual content
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Implemented
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 2 – Discussion Blocks
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Convert the transcript into stable processing units.
|
||||||
|
|
||||||
|
Discussion blocks are the smallest semantic unit used throughout the pipeline.
|
||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
Normalized transcript.
|
||||||
|
|
||||||
|
## Output
|
||||||
|
|
||||||
|
Ordered list of discussion blocks.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"block_id": 42,
|
||||||
|
"speaker": "A",
|
||||||
|
"start": 351.2,
|
||||||
|
"end": 367.8,
|
||||||
|
"text": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Processing Type
|
||||||
|
|
||||||
|
Deterministic
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
- Create stable identifiers
|
||||||
|
- Preserve ordering
|
||||||
|
- Preserve timestamps
|
||||||
|
- Preserve speaker information where available
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Planned
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 3 – Technical Chunking
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Split large meetings into model-sized chunks.
|
||||||
|
|
||||||
|
Chunking exists only because language models have limited context windows.
|
||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
Discussion blocks.
|
||||||
|
|
||||||
|
## Output
|
||||||
|
|
||||||
|
Chunk manifest and chunk files.
|
||||||
|
|
||||||
|
## Processing Type
|
||||||
|
|
||||||
|
Deterministic
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
- Respect block boundaries
|
||||||
|
- Keep chunk size below model limits
|
||||||
|
- Optionally create overlapping context
|
||||||
|
|
||||||
|
## Must Not
|
||||||
|
|
||||||
|
- Detect discussion topics
|
||||||
|
- Merge discussion content
|
||||||
|
- Interpret meaning
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Implemented
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 4 – Topic Segmentation
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Identify the thematic structure of the discussion.
|
||||||
|
|
||||||
|
This is considered the central research problem of the Meeting Lab.
|
||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
Discussion blocks or technical chunks.
|
||||||
|
|
||||||
|
## Output
|
||||||
|
|
||||||
|
Topics consisting of one or more discussion segments.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"topic": "Ventilation",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"start_block": 40,
|
||||||
|
"end_block": 152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"start_block": 1618,
|
||||||
|
"end_block": 1697
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Processing Type
|
||||||
|
|
||||||
|
LLM
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
- Detect topic start
|
||||||
|
- Detect topic end
|
||||||
|
- Detect topic changes
|
||||||
|
- Detect resumed topics
|
||||||
|
- Associate discussion blocks with topics
|
||||||
|
|
||||||
|
## Must Not
|
||||||
|
|
||||||
|
- Extract facts
|
||||||
|
- Detect todos
|
||||||
|
- Generate summaries
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Planned
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 5 – Specialized Extraction
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Extract one specific type of information from each topic.
|
||||||
|
|
||||||
|
Every extractor performs exactly one task.
|
||||||
|
|
||||||
|
## Planned Extractors
|
||||||
|
|
||||||
|
```text
|
||||||
|
extract_facts.py
|
||||||
|
extract_questions.py
|
||||||
|
extract_positions.py
|
||||||
|
extract_decisions.py
|
||||||
|
extract_todos.py
|
||||||
|
extract_technical.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Each extractor has:
|
||||||
|
|
||||||
|
- one prompt
|
||||||
|
- one responsibility
|
||||||
|
- one output schema
|
||||||
|
|
||||||
|
## Processing Type
|
||||||
|
|
||||||
|
LLM
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Prototype exists as a combined extractor.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 6 – Consolidation
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Merge analysis results originating from different discussion segments.
|
||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
Extraction results.
|
||||||
|
|
||||||
|
## Output
|
||||||
|
|
||||||
|
Unified topic representation.
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
- Merge duplicates
|
||||||
|
- Merge complementary information
|
||||||
|
- Preserve contradictions
|
||||||
|
- Separate positions from decisions
|
||||||
|
- Combine related todos
|
||||||
|
|
||||||
|
## Processing Type
|
||||||
|
|
||||||
|
Hybrid
|
||||||
|
|
||||||
|
Deterministic wherever possible.
|
||||||
|
|
||||||
|
LLM support only if necessary.
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Planned
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 7 – Structured Meeting
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Produce a complete machine-readable representation of the meeting.
|
||||||
|
|
||||||
|
This is the primary output of the analysis pipeline.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"topics": [
|
||||||
|
{
|
||||||
|
"title": "...",
|
||||||
|
"facts": [],
|
||||||
|
"questions": [],
|
||||||
|
"positions": [],
|
||||||
|
"decisions": [],
|
||||||
|
"todos": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The exact schema will evolve during development.
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Planned
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stage 8 – Protocol Generation
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Generate human-readable documents from structured meeting data.
|
||||||
|
|
||||||
|
Possible outputs include:
|
||||||
|
|
||||||
|
- Full protocol
|
||||||
|
- Executive summary
|
||||||
|
- Action list
|
||||||
|
- Decision log
|
||||||
|
- Technical report
|
||||||
|
|
||||||
|
Protocol generation never performs additional analysis.
|
||||||
|
|
||||||
|
It only transforms existing structured information into readable text.
|
||||||
|
|
||||||
|
## Processing Type
|
||||||
|
|
||||||
|
LLM
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Planned
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Data Flow
|
||||||
|
|
||||||
|
Each stage consumes only the output of the previous stage.
|
||||||
|
|
||||||
|
```text
|
||||||
|
Stage N
|
||||||
|
│
|
||||||
|
Structured Output
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Stage N + 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Intermediate results remain available for inspection, testing and experimentation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Guiding Principles
|
||||||
|
|
||||||
|
Every pipeline stage should satisfy the following rules.
|
||||||
|
|
||||||
|
## Single Responsibility
|
||||||
|
|
||||||
|
One module.
|
||||||
|
|
||||||
|
One task.
|
||||||
|
|
||||||
|
## Explicit Input
|
||||||
|
|
||||||
|
Every stage expects a clearly defined input format.
|
||||||
|
|
||||||
|
## Explicit Output
|
||||||
|
|
||||||
|
Every stage produces a clearly defined output format.
|
||||||
|
|
||||||
|
## Independent Evaluation
|
||||||
|
|
||||||
|
Each stage should be testable without executing the entire pipeline.
|
||||||
|
|
||||||
|
## Replaceable Components
|
||||||
|
|
||||||
|
A processing stage may be replaced by another implementation as long as it preserves the same interface.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Current Development Roadmap
|
||||||
|
|
||||||
|
```text
|
||||||
|
✔ Normalization
|
||||||
|
|
||||||
|
⬜ Discussion Blocks
|
||||||
|
|
||||||
|
✔ Technical Chunking
|
||||||
|
|
||||||
|
⬜ Topic Segmentation
|
||||||
|
|
||||||
|
⬜ Specialized Extraction
|
||||||
|
|
||||||
|
⬜ Consolidation
|
||||||
|
|
||||||
|
⬜ Structured Meeting
|
||||||
|
|
||||||
|
⬜ Protocol Generation
|
||||||
|
```
|
||||||
|
|
||||||
|
The immediate development focus is **Topic Segmentation**, as it provides the semantic structure on which all subsequent processing stages depend.
|
||||||
Reference in New Issue
Block a user