1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Analyzers API Reference
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
::: video_processor.analyzers.diagram_analyzer
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
::: video_processor.analyzers.content_analyzer
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
::: video_processor.analyzers.action_detector
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Overview
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The analyzers module contains the core content extraction logic for PlanOpticon. These analyzers process video frames and transcripts to extract structured knowledge: diagrams, key points, action items, and cross-referenced entities.
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All analyzers accept an optional `ProviderManager` instance. When provided, they use LLM capabilities for richer extraction. Without one, they fall back to heuristic/pattern-based methods where possible.
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## DiagramAnalyzer
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.analyzers.diagram_analyzer import DiagramAnalyzer
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Vision model-based diagram detection and analysis. Classifies video frames as diagrams, slides, screenshots, or other content, then performs full extraction on high-confidence frames.
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Constructor
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def __init__(
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
provider_manager: Optional[ProviderManager] = None,
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
confidence_threshold: float = 0.3,
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Default | Description |
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `provider_manager` | `Optional[ProviderManager]` | `None` | LLM provider (creates a default if not provided) |
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `confidence_threshold` | `float` | `0.3` | Minimum confidence to process a frame at all |
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### classify_frame()
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def classify_frame(self, image_path: Union[str, Path]) -> dict
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Classify a single frame using a vision model. Determines whether the frame contains a diagram, slide, or other visual content worth extracting.
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Description |
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `image_path` | `Union[str, Path]` | Path to the frame image file |
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `dict` with the following keys:
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Key | Type | Description |
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `is_diagram` | `bool` | Whether the frame contains extractable content |
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `diagram_type` | `str` | One of: `flowchart`, `sequence`, `architecture`, `whiteboard`, `chart`, `table`, `slide`, `screenshot`, `unknown` |
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `confidence` | `float` | Detection confidence from 0.0 to 1.0 |
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `content_type` | `str` | Content category: `slide`, `diagram`, `document`, `screen_share`, `whiteboard`, `chart`, `person`, `other` |
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `brief_description` | `str` | One-sentence description of the frame content |
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Important:** Frames showing people, webcam feeds, or video conference participant views return `confidence: 0.0`. The classifier is tuned to detect only shared/presented content.
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
analyzer = DiagramAnalyzer()
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result = analyzer.classify_frame("/path/to/frame_042.jpg")
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if result["confidence"] >= 0.7:
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"Diagram detected: {result['diagram_type']}")
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### analyze_diagram_single_pass()
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def analyze_diagram_single_pass(self, image_path: Union[str, Path]) -> dict
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Full single-pass diagram analysis. Extracts description, text content, elements, relationships, Mermaid syntax, and chart data in a single LLM call.
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `dict` with the following keys:
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Key | Type | Description |
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `diagram_type` | `str` | Diagram classification |
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `description` | `str` | Detailed description of the visual content |
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `text_content` | `str` | All visible text, preserving structure |
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `elements` | `list[str]` | Identified elements/components |
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `relationships` | `list[str]` | Relationships in `"A -> B: label"` format |
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `mermaid` | `str` | Valid Mermaid diagram syntax |
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `chart_data` | `dict \| None` | Chart data with `labels`, `values`, `chart_type` (only for data charts) |
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns an empty `dict` on failure.
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### caption_frame()
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def caption_frame(self, image_path: Union[str, Path]) -> str
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Get a brief 1-2 sentence caption for a frame. Used as a fallback when full diagram analysis is not warranted.
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `str` -- a brief description of the frame content.
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### process_frames()
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def process_frames(
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
frame_paths: List[Union[str, Path]],
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagrams_dir: Optional[Path] = None,
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
captures_dir: Optional[Path] = None,
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> Tuple[List[DiagramResult], List[ScreenCapture]]
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Process a batch of extracted video frames through the full classification and analysis pipeline.
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Default | Description |
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `frame_paths` | `List[Union[str, Path]]` | *required* | Paths to frame images |
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `diagrams_dir` | `Optional[Path]` | `None` | Output directory for diagram files (images, mermaid, JSON) |
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `captures_dir` | `Optional[Path]` | `None` | Output directory for screengrab fallback files |
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `Tuple[List[DiagramResult], List[ScreenCapture]]`
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Confidence thresholds:**
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Confidence Range | Action |
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| >= 0.7 | Full diagram analysis -- extracts elements, relationships, Mermaid syntax |
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| 0.3 to 0.7 | Screengrab fallback -- saves frame with a brief caption |
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| < 0.3 | Skipped entirely |
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Output files (when directories are provided):**
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For diagrams (`diagrams_dir`):
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `diagram_N.jpg` -- original frame image
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `diagram_N.mermaid` -- Mermaid source (if generated)
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `diagram_N.json` -- full DiagramResult as JSON
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For screen captures (`captures_dir`):
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `capture_N.jpg` -- original frame image
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `capture_N.json` -- ScreenCapture metadata as JSON
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from pathlib import Path
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.analyzers.diagram_analyzer import DiagramAnalyzer
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.providers.manager import ProviderManager
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
analyzer = DiagramAnalyzer(
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
provider_manager=ProviderManager(),
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
confidence_threshold=0.3,
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
frame_paths = list(Path("output/frames").glob("*.jpg"))
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagrams, captures = analyzer.process_frames(
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
frame_paths,
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagrams_dir=Path("output/diagrams"),
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
captures_dir=Path("output/captures"),
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"Found {len(diagrams)} diagrams, {len(captures)} screengrabs")
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for d in diagrams:
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f" [{d.diagram_type.value}] {d.description}")
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## ContentAnalyzer
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.analyzers.content_analyzer import ContentAnalyzer
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Cross-references transcript and diagram entities for richer knowledge extraction. Merges entities found in different sources and enriches key points with diagram links.
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Constructor
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def __init__(self, provider_manager: Optional[ProviderManager] = None)
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Default | Description |
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `provider_manager` | `Optional[ProviderManager]` | `None` | Required for LLM-based fuzzy matching |
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### cross_reference()
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def cross_reference(
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
transcript_entities: List[Entity],
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagram_entities: List[Entity],
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> List[Entity]
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Merge entities from transcripts and diagrams into a unified list with source attribution.
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Merge strategy:**
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. Index all transcript entities by lowercase name, marked with `source="transcript"`
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. Merge diagram entities: if a name matches, set `source="both"` and combine descriptions/occurrences; otherwise add as `source="diagram"`
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. If a `ProviderManager` is available, use LLM fuzzy matching to find additional matches among unmatched entities (e.g., "PostgreSQL" from transcript matching "Postgres" from diagram)
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Description |
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `transcript_entities` | `List[Entity]` | Entities extracted from transcript |
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `diagram_entities` | `List[Entity]` | Entities extracted from diagrams |
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `List[Entity]` -- merged entity list with `source` attribution.
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.analyzers.content_analyzer import ContentAnalyzer
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.models import Entity
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
analyzer = ContentAnalyzer(provider_manager=pm)
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
transcript_entities = [
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Entity(name="PostgreSQL", type="technology"),
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Entity(name="Alice", type="person"),
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
]
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagram_entities = [
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Entity(name="Postgres", type="technology"),
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Entity(name="Redis", type="technology"),
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
]
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
merged = analyzer.cross_reference(transcript_entities, diagram_entities)
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# "PostgreSQL" and "Postgres" may be fuzzy-matched and merged
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### enrich_key_points()
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def enrich_key_points(
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
key_points: List[KeyPoint],
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagrams: list,
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
transcript_text: str,
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> List[KeyPoint]
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Link key points to relevant diagrams by entity overlap. Examines word overlap between key point text and diagram elements/text content.
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Description |
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `key_points` | `List[KeyPoint]` | Key points to enrich |
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `diagrams` | `list` | List of `DiagramResult` objects or dicts |
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `transcript_text` | `str` | Full transcript text (reserved for future use) |
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `List[KeyPoint]` -- key points with `related_diagrams` indices populated.
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A key point is linked to a diagram when they share 2 or more words (excluding short words) between the key point text/details and the diagram's elements/text content.
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## ActionDetector
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.analyzers.action_detector import ActionDetector
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Detects action items from transcripts and diagram content using LLM extraction with a regex pattern fallback.
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Constructor
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def __init__(self, provider_manager: Optional[ProviderManager] = None)
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Default | Description |
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `provider_manager` | `Optional[ProviderManager]` | `None` | Required for LLM-based extraction |
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### detect_from_transcript()
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def detect_from_transcript(
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
text: str,
290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
segments: Optional[List[TranscriptSegment]] = None,
291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> List[ActionItem]
292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Detect action items from transcript text.
295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Default | Description |
299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `text` | `str` | *required* | Transcript text to analyze |
301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `segments` | `Optional[List[TranscriptSegment]]` | `None` | Transcript segments for timestamp attachment |
302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `List[ActionItem]` -- detected action items with `source="transcript"`.
304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Extraction modes:**
306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **LLM mode** (when `provider_manager` is set): Sends the transcript to the LLM with a structured extraction prompt. Extracts action, assignee, deadline, priority, and context.
308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Pattern mode** (fallback): Matches sentences against regex patterns for action-oriented language.
309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Pattern matching** detects sentences containing:
311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- "need/needs to", "should/must/shall"
313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- "will/going to", "action item/todo/follow-up"
314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- "assigned to/responsible for", "deadline/due by"
315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- "let's/let us", "make sure/ensure"
316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- "can you/could you/please"
317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Timestamp attachment:** When `segments` are provided, each action item is matched to the most relevant transcript segment (by word overlap, minimum 3 matching words), and a timestamp is added to `context`.
319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### detect_from_diagrams()
321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def detect_from_diagrams(self, diagrams: list) -> List[ActionItem]
324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Extract action items from diagram text content and elements. Processes each diagram's combined text using either LLM or pattern extraction.
327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Description |
331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `diagrams` | `list` | List of `DiagramResult` objects or dicts |
333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `List[ActionItem]` -- action items with `source="diagram"`.
335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### merge_action_items()
337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def merge_action_items(
340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
transcript_items: List[ActionItem],
342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagram_items: List[ActionItem],
343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> List[ActionItem]
344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Merge action items from multiple sources, deduplicating by action text (case-insensitive, whitespace-normalized).
347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `List[ActionItem]` -- deduplicated merged list.
349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Usage example
351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.analyzers.action_detector import ActionDetector
354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.providers.manager import ProviderManager
355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
detector = ActionDetector(provider_manager=ProviderManager())
357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# From transcript
359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
transcript_items = detector.detect_from_transcript(
360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
text="Alice needs to update the API docs by Friday. "
361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"Bob should review the PR before merging.",
362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
segments=transcript_segments,
363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# From diagrams
366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
diagram_items = detector.detect_from_diagrams(diagram_results)
367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Merge and deduplicate
369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
all_items = detector.merge_action_items(transcript_items, diagram_items)
370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for item in all_items:
372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"[{item.priority or 'unset'}] {item.action}")
373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if item.assignee:
374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f" Assignee: {item.assignee}")
375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if item.deadline:
376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f" Deadline: {item.deadline}")
377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Pattern fallback (no LLM)
380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Works without any API keys
383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
detector = ActionDetector() # No provider_manager
384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
items = detector.detect_from_transcript(
385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"We need to finalize the database schema. "
386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"Please update the deployment scripts."
387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Returns ActionItems matched by regex patterns
389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!