PlanOpticon

Deployed 05c83d1 with MkDocs version: 1.6.1

anonymous 2026-03-08 00:21 UTC gh-pages
Commit 0d7a634173d0830f328c00b27c66570e331ce267dec36ee80ccfe8a52f6d6257
81 files changed +1532 +1 +4888 +5379 +4198 +5718 +5890 +3113 +1827 +2407 +1983 +237 +156 +12 +12 +16 +7 +1 +18 +18 +18 +1 +18 +18 +18 +1 +1 +18 +1 +18 +1 +1 +1 +1 +1 +18 +18 +18 +18 +18 +1 +1 +18 +1 +1 +1 +18 +1 +1 +206 +6708 +42 +7 +1 +1 +1 +1 +3790 +2637 +2685 +2261 +1915 +2002 +2936 +2112 +2371 +2663 +2781 +3588 +3306 +2596 +2803 +2290 +1808 +1 +111 +2119
+ .nojekyll + 404.html + CNAME + api/agent/index.html + api/analyzers/index.html + api/auth/index.html + api/models/index.html + api/providers/index.html + api/sources/index.html + architecture/overview/index.html + architecture/pipeline/index.html + architecture/providers/index.html + assets/_mkdocstrings.css + assets/css/custom.css + assets/images/conflict-logo-black.svg + assets/images/conflict-logo.svg + assets/images/favicon.png + assets/javascripts/bundle.79ae519e.min.js + assets/javascripts/bundle.79ae519e.min.js.map + assets/javascripts/lunr/min/lunr.ar.min.js + assets/javascripts/lunr/min/lunr.da.min.js + assets/javascripts/lunr/min/lunr.de.min.js + assets/javascripts/lunr/min/lunr.du.min.js + assets/javascripts/lunr/min/lunr.el.min.js + assets/javascripts/lunr/min/lunr.es.min.js + assets/javascripts/lunr/min/lunr.fi.min.js + assets/javascripts/lunr/min/lunr.fr.min.js + assets/javascripts/lunr/min/lunr.he.min.js + assets/javascripts/lunr/min/lunr.hi.min.js + assets/javascripts/lunr/min/lunr.hu.min.js + assets/javascripts/lunr/min/lunr.hy.min.js + assets/javascripts/lunr/min/lunr.it.min.js + assets/javascripts/lunr/min/lunr.ja.min.js + assets/javascripts/lunr/min/lunr.jp.min.js + assets/javascripts/lunr/min/lunr.kn.min.js + assets/javascripts/lunr/min/lunr.ko.min.js + assets/javascripts/lunr/min/lunr.multi.min.js + assets/javascripts/lunr/min/lunr.nl.min.js + assets/javascripts/lunr/min/lunr.no.min.js + assets/javascripts/lunr/min/lunr.pt.min.js + assets/javascripts/lunr/min/lunr.ro.min.js + assets/javascripts/lunr/min/lunr.ru.min.js + assets/javascripts/lunr/min/lunr.sa.min.js + assets/javascripts/lunr/min/lunr.stemmer.support.min.js + assets/javascripts/lunr/min/lunr.sv.min.js + assets/javascripts/lunr/min/lunr.ta.min.js + assets/javascripts/lunr/min/lunr.te.min.js + assets/javascripts/lunr/min/lunr.th.min.js + assets/javascripts/lunr/min/lunr.tr.min.js + assets/javascripts/lunr/min/lunr.vi.min.js + assets/javascripts/lunr/min/lunr.zh.min.js + assets/javascripts/lunr/tinyseg.js + assets/javascripts/lunr/wordcut.js + assets/javascripts/workers/search.2c215733.min.js + assets/javascripts/workers/search.2c215733.min.js.map + assets/stylesheets/main.484c7ddc.min.css + assets/stylesheets/main.484c7ddc.min.css.map + assets/stylesheets/palette.ab4e12ef.min.css + assets/stylesheets/palette.ab4e12ef.min.css.map + cli-reference/index.html + contributing/index.html + faq/index.html + getting-started/configuration/index.html + getting-started/installation/index.html + getting-started/quickstart/index.html + guide/authentication/index.html + guide/batch/index.html + guide/cloud-sources/index.html + guide/companion/index.html + guide/document-ingestion/index.html + guide/export/index.html + guide/knowledge-graphs/index.html + guide/output-formats/index.html + guide/planning-agent/index.html + guide/single-video/index.html + index.html + objects.inv + search/search_index.json + sitemap.xml + sitemap.xml.gz + use-cases/index.html

No diff available

+1532
--- a/404.html
+++ b/404.html
@@ -0,0 +1,1532 @@
1
+
2
+<!doctype html>
3
+<html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+ <meta name="description" content="AI-powered video analysis and knowledge extraction">
10
+
11
+
12
+ <meta name="author" content="CONFLICT LLC">
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ <link rel="icon" href="/assets/images/favicon.png">
22
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.4">
23
+
24
+
25
+
26
+ <title>PlanOpticon</title>
27
+
28
+
29
+
30
+ <link rel="stylesheet" href="/assets/stylesheets/main.484c7ddc.min.css">
31
+
32
+
33
+ <link rel="stylesheet" href="/assets/stylesheets/palette.ab4e12ef.min.css">
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
47
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
48
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
49
+
50
+
51
+
52
+ <link rel="stylesheet" href="/assets/_mkdocstrings.css">
53
+
54
+ <link rel="stylesheet" href="/assets/css/custom.css">
55
+
56
+ <script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
57
+
58
+
59
+
60
+
61
+
62
+ </head>
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+ <body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom">
73
+
74
+
75
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
76
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
77
+ <label class="md-overlay" for="__drawer"></label>
78
+ <div data-md-component="skip">
79
+
80
+ </div>
81
+ <div data-md-component="announce">
82
+
83
+ </div>
84
+
85
+
86
+
87
+
88
+<header class="md-header" data-md-component="header">
89
+ <nav class="md-header__inner md-grid" aria-label="Header">
90
+ <a href="/." title="PlanOpticon" class="md-header__button md-logo" aria-label="PlanOpticon" data-md-component="logo">
91
+
92
+ <img src="/assets/images/conflict-logo.svg" alt="logo">
93
+
94
+ </a>
95
+ <label class="md-header__button md-icon" for="__drawer">
96
+
97
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
98
+ </label>
99
+ <div class="md-header__title" data-md-component="header-title">
100
+ <div class="md-header__ellipsis">
101
+ <div class="md-header__topic">
102
+ <span class="md-ellipsis">
103
+ PlanOpticon
104
+ </span>
105
+ </div>
106
+ <div class="md-header__topic" data-md-component="header-topic">
107
+ <span class="md-ellipsis">
108
+
109
+
110
+
111
+ </span>
112
+ </div>
113
+ </div>
114
+ </div>
115
+
116
+
117
+ <form class="md-header__option" data-md-component="palette">
118
+
119
+
120
+
121
+
122
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
123
+
124
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
125
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
126
+ </label>
127
+
128
+
129
+
130
+
131
+
132
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
133
+
134
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
135
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
136
+ </label>
137
+
138
+
139
+</form>
140
+
141
+
142
+
143
+ <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
144
+
145
+
146
+
147
+
148
+
149
+ <label class="md-header__button md-icon" for="__search">
150
+
151
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
152
+ </label>
153
+ <div class="md-search" data-md-component="search" role="dialog">
154
+ <label class="md-search__overlay" for="__search"></label>
155
+ <div class="md-search__inner" role="search">
156
+ <form class="md-search__form" name="search">
157
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
158
+ <label class="md-search__icon md-icon" for="__search">
159
+
160
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
161
+
162
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
163
+ </label>
164
+ <nav class="md-search__options" aria-label="Search">
165
+
166
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
167
+
168
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
169
+ </button>
170
+ </nav>
171
+
172
+ <div class="md-search__suggest" data-md-component="search-suggest"></div>
173
+
174
+ </form>
175
+ <div class="md-search__output">
176
+ <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
177
+ <div class="md-search-result" data-md-component="search-result">
178
+ <div class="md-search-result__meta">
179
+ Initializing search
180
+ </div>
181
+ <ol class="md-search-result__list" role="presentation"></ol>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ </div>
186
+</div>
187
+
188
+
189
+
190
+ <div class="md-header__source">
191
+ <a href="https://github.com/ConflictHQ/PlanOpticon" title="Go to repository" class="md-source" data-md-component="source">
192
+ <div class="md-source__icon md-icon">
193
+
194
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
195
+ </div>
196
+ <div class="md-source__repository">
197
+ ConflictHQ/PlanOpticon
198
+ </div>
199
+</a>
200
+ </div>
201
+
202
+ </nav>
203
+
204
+</header>
205
+
206
+ <div class="md-container" data-md-component="container">
207
+
208
+
209
+
210
+
211
+
212
+<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
213
+ <div class="md-grid">
214
+ <ul class="md-tabs__list">
215
+
216
+
217
+
218
+
219
+
220
+
221
+ <li class="md-tabs__item">
222
+ <a href="/." class="md-tabs__link">
223
+
224
+
225
+
226
+
227
+
228
+ Home
229
+
230
+ </a>
231
+ </li>
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+ <li class="md-tabs__item">
243
+ <a href="/getting-started/installation/" class="md-tabs__link">
244
+
245
+
246
+
247
+ Getting Started
248
+
249
+ </a>
250
+ </li>
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+ <li class="md-tabs__item">
263
+ <a href="/guide/single-video/" class="md-tabs__link">
264
+
265
+
266
+
267
+ User Guide
268
+
269
+ </a>
270
+ </li>
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+ <li class="md-tabs__item">
281
+ <a href="/use-cases/" class="md-tabs__link">
282
+
283
+
284
+
285
+
286
+
287
+ Use Cases
288
+
289
+ </a>
290
+ </li>
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+ <li class="md-tabs__item">
300
+ <a href="/cli-reference/" class="md-tabs__link">
301
+
302
+
303
+
304
+
305
+
306
+ CLI Reference
307
+
308
+ </a>
309
+ </li>
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+ <li class="md-tabs__item">
321
+ <a href="/architecture/overview/" class="md-tabs__link">
322
+
323
+
324
+
325
+ Architecture
326
+
327
+ </a>
328
+ </li>
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+ <li class="md-tabs__item">
341
+ <a href="/api/models/" class="md-tabs__link">
342
+
343
+
344
+
345
+ API Reference
346
+
347
+ </a>
348
+ </li>
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+ <li class="md-tabs__item">
359
+ <a href="/faq/" class="md-tabs__link">
360
+
361
+
362
+
363
+
364
+
365
+ FAQ & Troubleshooting
366
+
367
+ </a>
368
+ </li>
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+ <li class="md-tabs__item">
378
+ <a href="/contributing/" class="md-tabs__link">
379
+
380
+
381
+
382
+
383
+
384
+ Contributing
385
+
386
+ </a>
387
+ </li>
388
+
389
+
390
+
391
+ </ul>
392
+ </div>
393
+</nav>
394
+
395
+
396
+
397
+ <main class="md-main" data-md-component="main">
398
+ <div class="md-main__inner md-grid">
399
+
400
+
401
+
402
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
403
+ <div class="md-sidebar__scrollwrap">
404
+ <div class="md-sidebar__inner">
405
+
406
+
407
+
408
+
409
+
410
+
411
+<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
412
+ <label class="md-nav__title" for="__drawer">
413
+ <a href="/." title="PlanOpticon" class="md-nav__button md-logo" aria-label="PlanOpticon" data-md-component="logo">
414
+
415
+ <img src="/assets/images/conflict-logo.svg" alt="logo">
416
+
417
+ </a>
418
+ PlanOpticon
419
+ </label>
420
+
421
+ <div class="md-nav__source">
422
+ <a href="https://github.com/ConflictHQ/PlanOpticon" title="Go to repository" class="md-source" data-md-component="source">
423
+ <div class="md-source__icon md-icon">
424
+
425
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
426
+ </div>
427
+ <div class="md-source__repository">
428
+ ConflictHQ/PlanOpticon
429
+ </div>
430
+</a>
431
+ </div>
432
+
433
+ <ul class="md-nav__list" data-md-scrollfix>
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+ <li class="md-nav__item">
442
+ <a href="/." class="md-nav__link">
443
+
444
+
445
+
446
+ <span class="md-ellipsis">
447
+
448
+
449
+ Home
450
+
451
+
452
+
453
+ </span>
454
+
455
+
456
+
457
+ </a>
458
+ </li>
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+ <li class="md-nav__item md-nav__item--nested">
479
+
480
+
481
+
482
+
483
+
484
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
485
+
486
+
487
+ <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
488
+
489
+
490
+
491
+ <span class="md-ellipsis">
492
+
493
+
494
+ Getting Started
495
+
496
+
497
+
498
+ </span>
499
+
500
+
501
+
502
+ <span class="md-nav__icon md-icon"></span>
503
+ </label>
504
+
505
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
506
+ <label class="md-nav__title" for="__nav_2">
507
+ <span class="md-nav__icon md-icon"></span>
508
+
509
+
510
+ Getting Started
511
+
512
+
513
+ </label>
514
+ <ul class="md-nav__list" data-md-scrollfix>
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+ <li class="md-nav__item">
523
+ <a href="/getting-started/installation/" class="md-nav__link">
524
+
525
+
526
+
527
+ <span class="md-ellipsis">
528
+
529
+
530
+ Installation
531
+
532
+
533
+
534
+ </span>
535
+
536
+
537
+
538
+ </a>
539
+ </li>
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+ <li class="md-nav__item">
551
+ <a href="/getting-started/quickstart/" class="md-nav__link">
552
+
553
+
554
+
555
+ <span class="md-ellipsis">
556
+
557
+
558
+ Quick Start
559
+
560
+
561
+
562
+ </span>
563
+
564
+
565
+
566
+ </a>
567
+ </li>
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+ <li class="md-nav__item">
579
+ <a href="/getting-started/configuration/" class="md-nav__link">
580
+
581
+
582
+
583
+ <span class="md-ellipsis">
584
+
585
+
586
+ Configuration
587
+
588
+
589
+
590
+ </span>
591
+
592
+
593
+
594
+ </a>
595
+ </li>
596
+
597
+
598
+
599
+
600
+ </ul>
601
+ </nav>
602
+
603
+ </li>
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+ <li class="md-nav__item md-nav__item--nested">
624
+
625
+
626
+
627
+
628
+
629
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
630
+
631
+
632
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
633
+
634
+
635
+
636
+ <span class="md-ellipsis">
637
+
638
+
639
+ User Guide
640
+
641
+
642
+
643
+ </span>
644
+
645
+
646
+
647
+ <span class="md-nav__icon md-icon"></span>
648
+ </label>
649
+
650
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
651
+ <label class="md-nav__title" for="__nav_3">
652
+ <span class="md-nav__icon md-icon"></span>
653
+
654
+
655
+ User Guide
656
+
657
+
658
+ </label>
659
+ <ul class="md-nav__list" data-md-scrollfix>
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+ <li class="md-nav__item">
668
+ <a href="/guide/single-video/" class="md-nav__link">
669
+
670
+
671
+
672
+ <span class="md-ellipsis">
673
+
674
+
675
+ Single Video Analysis
676
+
677
+
678
+
679
+ </span>
680
+
681
+
682
+
683
+ </a>
684
+ </li>
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+ <li class="md-nav__item">
696
+ <a href="/guide/batch/" class="md-nav__link">
697
+
698
+
699
+
700
+ <span class="md-ellipsis">
701
+
702
+
703
+ Batch Processing
704
+
705
+
706
+
707
+ </span>
708
+
709
+
710
+
711
+ </a>
712
+ </li>
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+ <li class="md-nav__item">
724
+ <a href="/guide/document-ingestion/" class="md-nav__link">
725
+
726
+
727
+
728
+ <span class="md-ellipsis">
729
+
730
+
731
+ Document Ingestion
732
+
733
+
734
+
735
+ </span>
736
+
737
+
738
+
739
+ </a>
740
+ </li>
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+ <li class="md-nav__item">
752
+ <a href="/guide/cloud-sources/" class="md-nav__link">
753
+
754
+
755
+
756
+ <span class="md-ellipsis">
757
+
758
+
759
+ Cloud Sources
760
+
761
+
762
+
763
+ </span>
764
+
765
+
766
+
767
+ </a>
768
+ </li>
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+ <li class="md-nav__item">
780
+ <a href="/guide/knowledge-graphs/" class="md-nav__link">
781
+
782
+
783
+
784
+ <span class="md-ellipsis">
785
+
786
+
787
+ Knowledge Graphs
788
+
789
+
790
+
791
+ </span>
792
+
793
+
794
+
795
+ </a>
796
+ </li>
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+ <li class="md-nav__item">
808
+ <a href="/guide/companion/" class="md-nav__link">
809
+
810
+
811
+
812
+ <span class="md-ellipsis">
813
+
814
+
815
+ Interactive Companion
816
+
817
+
818
+
819
+ </span>
820
+
821
+
822
+
823
+ </a>
824
+ </li>
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+ <li class="md-nav__item">
836
+ <a href="/guide/planning-agent/" class="md-nav__link">
837
+
838
+
839
+
840
+ <span class="md-ellipsis">
841
+
842
+
843
+ Planning Agent
844
+
845
+
846
+
847
+ </span>
848
+
849
+
850
+
851
+ </a>
852
+ </li>
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+ <li class="md-nav__item">
864
+ <a href="/guide/authentication/" class="md-nav__link">
865
+
866
+
867
+
868
+ <span class="md-ellipsis">
869
+
870
+
871
+ Authentication
872
+
873
+
874
+
875
+ </span>
876
+
877
+
878
+
879
+ </a>
880
+ </li>
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+ <li class="md-nav__item">
892
+ <a href="/guide/export/" class="md-nav__link">
893
+
894
+
895
+
896
+ <span class="md-ellipsis">
897
+
898
+
899
+ Export & Documents
900
+
901
+
902
+
903
+ </span>
904
+
905
+
906
+
907
+ </a>
908
+ </li>
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+ <li class="md-nav__item">
920
+ <a href="/guide/output-formats/" class="md-nav__link">
921
+
922
+
923
+
924
+ <span class="md-ellipsis">
925
+
926
+
927
+ Output Formats
928
+
929
+
930
+
931
+ </span>
932
+
933
+
934
+
935
+ </a>
936
+ </li>
937
+
938
+
939
+
940
+
941
+ </ul>
942
+ </nav>
943
+
944
+ </li>
945
+
946
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+ <li class="md-nav__item">
955
+ <a href="/use-cases/" class="md-nav__link">
956
+
957
+
958
+
959
+ <span class="md-ellipsis">
960
+
961
+
962
+ Use Cases
963
+
964
+
965
+
966
+ </span>
967
+
968
+
969
+
970
+ </a>
971
+ </li>
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+ <li class="md-nav__item">
982
+ <a href="/cli-reference/" class="md-nav__link">
983
+
984
+
985
+
986
+ <span class="md-ellipsis">
987
+
988
+
989
+ CLI Reference
990
+
991
+
992
+
993
+ </span>
994
+
995
+
996
+
997
+ </a>
998
+ </li>
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+ <li class="md-nav__item md-nav__item--nested">
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
1025
+
1026
+
1027
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
1028
+
1029
+
1030
+
1031
+ <span class="md-ellipsis">
1032
+
1033
+
1034
+ Architecture
1035
+
1036
+
1037
+
1038
+ </span>
1039
+
1040
+
1041
+
1042
+ <span class="md-nav__icon md-icon"></span>
1043
+ </label>
1044
+
1045
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
1046
+ <label class="md-nav__title" for="__nav_6">
1047
+ <span class="md-nav__icon md-icon"></span>
1048
+
1049
+
1050
+ Architecture
1051
+
1052
+
1053
+ </label>
1054
+ <ul class="md-nav__list" data-md-scrollfix>
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+ <li class="md-nav__item">
1063
+ <a href="/architecture/overview/" class="md-nav__link">
1064
+
1065
+
1066
+
1067
+ <span class="md-ellipsis">
1068
+
1069
+
1070
+ Overview
1071
+
1072
+
1073
+
1074
+ </span>
1075
+
1076
+
1077
+
1078
+ </a>
1079
+ </li>
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+ <li class="md-nav__item">
1091
+ <a href="/architecture/providers/" class="md-nav__link">
1092
+
1093
+
1094
+
1095
+ <span class="md-ellipsis">
1096
+
1097
+
1098
+ Provider System
1099
+
1100
+
1101
+
1102
+ </span>
1103
+
1104
+
1105
+
1106
+ </a>
1107
+ </li>
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+ <li class="md-nav__item">
1119
+ <a href="/architecture/pipeline/" class="md-nav__link">
1120
+
1121
+
1122
+
1123
+ <span class="md-ellipsis">
1124
+
1125
+
1126
+ Processing Pipeline
1127
+
1128
+
1129
+
1130
+ </span>
1131
+
1132
+
1133
+
1134
+ </a>
1135
+ </li>
1136
+
1137
+
1138
+
1139
+
1140
+ </ul>
1141
+ </nav>
1142
+
1143
+ </li>
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+ <li class="md-nav__item md-nav__item--nested">
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
1170
+
1171
+
1172
+ <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
1173
+
1174
+
1175
+
1176
+ <span class="md-ellipsis">
1177
+
1178
+
1179
+ API Reference
1180
+
1181
+
1182
+
1183
+ </span>
1184
+
1185
+
1186
+
1187
+ <span class="md-nav__icon md-icon"></span>
1188
+ </label>
1189
+
1190
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
1191
+ <label class="md-nav__title" for="__nav_7">
1192
+ <span class="md-nav__icon md-icon"></span>
1193
+
1194
+
1195
+ API Reference
1196
+
1197
+
1198
+ </label>
1199
+ <ul class="md-nav__list" data-md-scrollfix>
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+ <li class="md-nav__item">
1208
+ <a href="/api/models/" class="md-nav__link">
1209
+
1210
+
1211
+
1212
+ <span class="md-ellipsis">
1213
+
1214
+
1215
+ Models
1216
+
1217
+
1218
+
1219
+ </span>
1220
+
1221
+
1222
+
1223
+ </a>
1224
+ </li>
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+ <li class="md-nav__item">
1236
+ <a href="/api/providers/" class="md-nav__link">
1237
+
1238
+
1239
+
1240
+ <span class="md-ellipsis">
1241
+
1242
+
1243
+ Providers
1244
+
1245
+
1246
+
1247
+ </span>
1248
+
1249
+
1250
+
1251
+ </a>
1252
+ </li>
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+ <li class="md-nav__item">
1264
+ <a href="/api/analyzers/" class="md-nav__link">
1265
+
1266
+
1267
+
1268
+ <span class="md-ellipsis">
1269
+
1270
+
1271
+ Analyzers
1272
+
1273
+
1274
+
1275
+ </span>
1276
+
1277
+
1278
+
1279
+ </a>
1280
+ </li>
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+ <li class="md-nav__item">
1292
+ <a href="/api/agent/" class="md-nav__link">
1293
+
1294
+
1295
+
1296
+ <span class="md-ellipsis">
1297
+
1298
+
1299
+ Agent & Skills
1300
+
1301
+
1302
+
1303
+ </span>
1304
+
1305
+
1306
+
1307
+ </a>
1308
+ </li>
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+ <li class="md-nav__item">
1320
+ <a href="/api/sources/" class="md-nav__link">
1321
+
1322
+
1323
+
1324
+ <span class="md-ellipsis">
1325
+
1326
+
1327
+ Sources
1328
+
1329
+
1330
+
1331
+ </span>
1332
+
1333
+
1334
+
1335
+ </a>
1336
+ </li>
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+ <li class="md-nav__item">
1348
+ <a href="/api/auth/" class="md-nav__link">
1349
+
1350
+
1351
+
1352
+ <span class="md-ellipsis">
1353
+
1354
+
1355
+ Authentication
1356
+
1357
+
1358
+
1359
+ </span>
1360
+
1361
+
1362
+
1363
+ </a>
1364
+ </li>
1365
+
1366
+
1367
+
1368
+
1369
+ </ul>
1370
+ </nav>
1371
+
1372
+ </li>
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+ <li class="md-nav__item">
1383
+ <a href="/faq/" class="md-nav__link">
1384
+
1385
+
1386
+
1387
+ <span class="md-ellipsis">
1388
+
1389
+
1390
+ FAQ & Troubleshooting
1391
+
1392
+
1393
+
1394
+ </span>
1395
+
1396
+
1397
+
1398
+ </a>
1399
+ </li>
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+ <li class="md-nav__item">
1410
+ <a href="/contributing/" class="md-nav__link">
1411
+
1412
+
1413
+
1414
+ <span class="md-ellipsis">
1415
+
1416
+
1417
+ Contributing
1418
+
1419
+
1420
+
1421
+ </span>
1422
+
1423
+
1424
+
1425
+ </a>
1426
+ </li>
1427
+
1428
+
1429
+
1430
+ </ul>
1431
+</nav>
1432
+ </div>
1433
+ </div>
1434
+ </div>
1435
+
1436
+
1437
+
1438
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1439
+ <div class="md-sidebar__scrollwrap">
1440
+ <div class="md-sidebar__inner">
1441
+
1442
+
1443
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1444
+
1445
+
1446
+
1447
+
1448
+</nav>
1449
+ </div>
1450
+ </div>
1451
+ </div>
1452
+
1453
+
1454
+
1455
+ <div class="md-content" data-md-component="content">
1456
+
1457
+ <article class="md-content__inner md-typeset">
1458
+
1459
+ <h1>404 - Not found</h1>
1460
+
1461
+ </article>
1462
+ </div>
1463
+
1464
+
1465
+ <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
1466
+
1467
+<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
1468
+ </div>
1469
+
1470
+ <button type="button" class="md-top md-icon" data-md-component="top" hidden>
1471
+
1472
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
1473
+ Back to top
1474
+</button>
1475
+
1476
+ </main>
1477
+
1478
+ <footer class="md-footer">
1479
+
1480
+ <div class="md-footer-meta md-typeset">
1481
+ <div class="md-footer-meta__inner md-grid">
1482
+ <div class="md-copyright">
1483
+
1484
+ <div class="md-copyright__highlight">
1485
+ Copyright &copy; 2026 CONFLICT LLC
1486
+ </div>
1487
+
1488
+
1489
+ Made with
1490
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
1491
+ Material for MkDocs
1492
+ </a>
1493
+
1494
+</div>
1495
+
1496
+
1497
+<div class="md-social">
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+ <a href="https://github.com/ConflictHQ/PlanOpticon" target="_blank" rel="noopener" title="github.com" class="md-social__link">
1507
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
1508
+ </a>
1509
+
1510
+</div>
1511
+
1512
+ </div>
1513
+ </div>
1514
+</footer>
1515
+
1516
+ </div>
1517
+ <div class="md-dialog" data-md-component="dialog">
1518
+ <div class="md-dialog__inner md-typeset"></div>
1519
+ </div>
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+ <script id="__config" type="application/json">{"annotate": null, "base": "/", "features": ["navigation.instant", "navigation.tabs", "navigation.sections", "navigation.expand", "navigation.top", "search.suggest", "search.highlight", "content.code.copy", "content.tabs.link", "header.autohide"], "search": "/assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
1526
+
1527
+
1528
+ <script src="/assets/javascripts/bundle.79ae519e.min.js"></script>
1529
+
1530
+
1531
+ </body>
1532
+</html>
--- a/404.html
+++ b/404.html
@@ -0,0 +1,1532 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/404.html
+++ b/404.html
@@ -0,0 +1,1532 @@
1
2 <!doctype html>
3 <html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
8
9 <meta name="description" content="AI-powered video analysis and knowledge extraction">
10
11
12 <meta name="author" content="CONFLICT LLC">
13
14
15
16
17
18
19
20
21 <link rel="icon" href="/assets/images/favicon.png">
22 <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.4">
23
24
25
26 <title>PlanOpticon</title>
27
28
29
30 <link rel="stylesheet" href="/assets/stylesheets/main.484c7ddc.min.css">
31
32
33 <link rel="stylesheet" href="/assets/stylesheets/palette.ab4e12ef.min.css">
34
35
36
37
38
39
40
41
42
43
44
45
46 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
47 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
48 <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
49
50
51
52 <link rel="stylesheet" href="/assets/_mkdocstrings.css">
53
54 <link rel="stylesheet" href="/assets/css/custom.css">
55
56 <script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
57
58
59
60
61
62 </head>
63
64
65
66
67
68
69
70
71
72 <body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom">
73
74
75 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
76 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
77 <label class="md-overlay" for="__drawer"></label>
78 <div data-md-component="skip">
79
80 </div>
81 <div data-md-component="announce">
82
83 </div>
84
85
86
87
88 <header class="md-header" data-md-component="header">
89 <nav class="md-header__inner md-grid" aria-label="Header">
90 <a href="/." title="PlanOpticon" class="md-header__button md-logo" aria-label="PlanOpticon" data-md-component="logo">
91
92 <img src="/assets/images/conflict-logo.svg" alt="logo">
93
94 </a>
95 <label class="md-header__button md-icon" for="__drawer">
96
97 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
98 </label>
99 <div class="md-header__title" data-md-component="header-title">
100 <div class="md-header__ellipsis">
101 <div class="md-header__topic">
102 <span class="md-ellipsis">
103 PlanOpticon
104 </span>
105 </div>
106 <div class="md-header__topic" data-md-component="header-topic">
107 <span class="md-ellipsis">
108
109
110
111 </span>
112 </div>
113 </div>
114 </div>
115
116
117 <form class="md-header__option" data-md-component="palette">
118
119
120
121
122 <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
123
124 <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
125 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
126 </label>
127
128
129
130
131
132 <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
133
134 <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
135 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
136 </label>
137
138
139 </form>
140
141
142
143 <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
144
145
146
147
148
149 <label class="md-header__button md-icon" for="__search">
150
151 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
152 </label>
153 <div class="md-search" data-md-component="search" role="dialog">
154 <label class="md-search__overlay" for="__search"></label>
155 <div class="md-search__inner" role="search">
156 <form class="md-search__form" name="search">
157 <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
158 <label class="md-search__icon md-icon" for="__search">
159
160 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
161
162 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
163 </label>
164 <nav class="md-search__options" aria-label="Search">
165
166 <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
167
168 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
169 </button>
170 </nav>
171
172 <div class="md-search__suggest" data-md-component="search-suggest"></div>
173
174 </form>
175 <div class="md-search__output">
176 <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
177 <div class="md-search-result" data-md-component="search-result">
178 <div class="md-search-result__meta">
179 Initializing search
180 </div>
181 <ol class="md-search-result__list" role="presentation"></ol>
182 </div>
183 </div>
184 </div>
185 </div>
186 </div>
187
188
189
190 <div class="md-header__source">
191 <a href="https://github.com/ConflictHQ/PlanOpticon" title="Go to repository" class="md-source" data-md-component="source">
192 <div class="md-source__icon md-icon">
193
194 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
195 </div>
196 <div class="md-source__repository">
197 ConflictHQ/PlanOpticon
198 </div>
199 </a>
200 </div>
201
202 </nav>
203
204 </header>
205
206 <div class="md-container" data-md-component="container">
207
208
209
210
211
212 <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
213 <div class="md-grid">
214 <ul class="md-tabs__list">
215
216
217
218
219
220
221 <li class="md-tabs__item">
222 <a href="/." class="md-tabs__link">
223
224
225
226
227
228 Home
229
230 </a>
231 </li>
232
233
234
235
236
237
238
239
240
241
242 <li class="md-tabs__item">
243 <a href="/getting-started/installation/" class="md-tabs__link">
244
245
246
247 Getting Started
248
249 </a>
250 </li>
251
252
253
254
255
256
257
258
259
260
261
262 <li class="md-tabs__item">
263 <a href="/guide/single-video/" class="md-tabs__link">
264
265
266
267 User Guide
268
269 </a>
270 </li>
271
272
273
274
275
276
277
278
279
280 <li class="md-tabs__item">
281 <a href="/use-cases/" class="md-tabs__link">
282
283
284
285
286
287 Use Cases
288
289 </a>
290 </li>
291
292
293
294
295
296
297
298
299 <li class="md-tabs__item">
300 <a href="/cli-reference/" class="md-tabs__link">
301
302
303
304
305
306 CLI Reference
307
308 </a>
309 </li>
310
311
312
313
314
315
316
317
318
319
320 <li class="md-tabs__item">
321 <a href="/architecture/overview/" class="md-tabs__link">
322
323
324
325 Architecture
326
327 </a>
328 </li>
329
330
331
332
333
334
335
336
337
338
339
340 <li class="md-tabs__item">
341 <a href="/api/models/" class="md-tabs__link">
342
343
344
345 API Reference
346
347 </a>
348 </li>
349
350
351
352
353
354
355
356
357
358 <li class="md-tabs__item">
359 <a href="/faq/" class="md-tabs__link">
360
361
362
363
364
365 FAQ & Troubleshooting
366
367 </a>
368 </li>
369
370
371
372
373
374
375
376
377 <li class="md-tabs__item">
378 <a href="/contributing/" class="md-tabs__link">
379
380
381
382
383
384 Contributing
385
386 </a>
387 </li>
388
389
390
391 </ul>
392 </div>
393 </nav>
394
395
396
397 <main class="md-main" data-md-component="main">
398 <div class="md-main__inner md-grid">
399
400
401
402 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
403 <div class="md-sidebar__scrollwrap">
404 <div class="md-sidebar__inner">
405
406
407
408
409
410
411 <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
412 <label class="md-nav__title" for="__drawer">
413 <a href="/." title="PlanOpticon" class="md-nav__button md-logo" aria-label="PlanOpticon" data-md-component="logo">
414
415 <img src="/assets/images/conflict-logo.svg" alt="logo">
416
417 </a>
418 PlanOpticon
419 </label>
420
421 <div class="md-nav__source">
422 <a href="https://github.com/ConflictHQ/PlanOpticon" title="Go to repository" class="md-source" data-md-component="source">
423 <div class="md-source__icon md-icon">
424
425 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
426 </div>
427 <div class="md-source__repository">
428 ConflictHQ/PlanOpticon
429 </div>
430 </a>
431 </div>
432
433 <ul class="md-nav__list" data-md-scrollfix>
434
435
436
437
438
439
440
441 <li class="md-nav__item">
442 <a href="/." class="md-nav__link">
443
444
445
446 <span class="md-ellipsis">
447
448
449 Home
450
451
452
453 </span>
454
455
456
457 </a>
458 </li>
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478 <li class="md-nav__item md-nav__item--nested">
479
480
481
482
483
484 <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
485
486
487 <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
488
489
490
491 <span class="md-ellipsis">
492
493
494 Getting Started
495
496
497
498 </span>
499
500
501
502 <span class="md-nav__icon md-icon"></span>
503 </label>
504
505 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
506 <label class="md-nav__title" for="__nav_2">
507 <span class="md-nav__icon md-icon"></span>
508
509
510 Getting Started
511
512
513 </label>
514 <ul class="md-nav__list" data-md-scrollfix>
515
516
517
518
519
520
521
522 <li class="md-nav__item">
523 <a href="/getting-started/installation/" class="md-nav__link">
524
525
526
527 <span class="md-ellipsis">
528
529
530 Installation
531
532
533
534 </span>
535
536
537
538 </a>
539 </li>
540
541
542
543
544
545
546
547
548
549
550 <li class="md-nav__item">
551 <a href="/getting-started/quickstart/" class="md-nav__link">
552
553
554
555 <span class="md-ellipsis">
556
557
558 Quick Start
559
560
561
562 </span>
563
564
565
566 </a>
567 </li>
568
569
570
571
572
573
574
575
576
577
578 <li class="md-nav__item">
579 <a href="/getting-started/configuration/" class="md-nav__link">
580
581
582
583 <span class="md-ellipsis">
584
585
586 Configuration
587
588
589
590 </span>
591
592
593
594 </a>
595 </li>
596
597
598
599
600 </ul>
601 </nav>
602
603 </li>
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623 <li class="md-nav__item md-nav__item--nested">
624
625
626
627
628
629 <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
630
631
632 <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
633
634
635
636 <span class="md-ellipsis">
637
638
639 User Guide
640
641
642
643 </span>
644
645
646
647 <span class="md-nav__icon md-icon"></span>
648 </label>
649
650 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
651 <label class="md-nav__title" for="__nav_3">
652 <span class="md-nav__icon md-icon"></span>
653
654
655 User Guide
656
657
658 </label>
659 <ul class="md-nav__list" data-md-scrollfix>
660
661
662
663
664
665
666
667 <li class="md-nav__item">
668 <a href="/guide/single-video/" class="md-nav__link">
669
670
671
672 <span class="md-ellipsis">
673
674
675 Single Video Analysis
676
677
678
679 </span>
680
681
682
683 </a>
684 </li>
685
686
687
688
689
690
691
692
693
694
695 <li class="md-nav__item">
696 <a href="/guide/batch/" class="md-nav__link">
697
698
699
700 <span class="md-ellipsis">
701
702
703 Batch Processing
704
705
706
707 </span>
708
709
710
711 </a>
712 </li>
713
714
715
716
717
718
719
720
721
722
723 <li class="md-nav__item">
724 <a href="/guide/document-ingestion/" class="md-nav__link">
725
726
727
728 <span class="md-ellipsis">
729
730
731 Document Ingestion
732
733
734
735 </span>
736
737
738
739 </a>
740 </li>
741
742
743
744
745
746
747
748
749
750
751 <li class="md-nav__item">
752 <a href="/guide/cloud-sources/" class="md-nav__link">
753
754
755
756 <span class="md-ellipsis">
757
758
759 Cloud Sources
760
761
762
763 </span>
764
765
766
767 </a>
768 </li>
769
770
771
772
773
774
775
776
777
778
779 <li class="md-nav__item">
780 <a href="/guide/knowledge-graphs/" class="md-nav__link">
781
782
783
784 <span class="md-ellipsis">
785
786
787 Knowledge Graphs
788
789
790
791 </span>
792
793
794
795 </a>
796 </li>
797
798
799
800
801
802
803
804
805
806
807 <li class="md-nav__item">
808 <a href="/guide/companion/" class="md-nav__link">
809
810
811
812 <span class="md-ellipsis">
813
814
815 Interactive Companion
816
817
818
819 </span>
820
821
822
823 </a>
824 </li>
825
826
827
828
829
830
831
832
833
834
835 <li class="md-nav__item">
836 <a href="/guide/planning-agent/" class="md-nav__link">
837
838
839
840 <span class="md-ellipsis">
841
842
843 Planning Agent
844
845
846
847 </span>
848
849
850
851 </a>
852 </li>
853
854
855
856
857
858
859
860
861
862
863 <li class="md-nav__item">
864 <a href="/guide/authentication/" class="md-nav__link">
865
866
867
868 <span class="md-ellipsis">
869
870
871 Authentication
872
873
874
875 </span>
876
877
878
879 </a>
880 </li>
881
882
883
884
885
886
887
888
889
890
891 <li class="md-nav__item">
892 <a href="/guide/export/" class="md-nav__link">
893
894
895
896 <span class="md-ellipsis">
897
898
899 Export & Documents
900
901
902
903 </span>
904
905
906
907 </a>
908 </li>
909
910
911
912
913
914
915
916
917
918
919 <li class="md-nav__item">
920 <a href="/guide/output-formats/" class="md-nav__link">
921
922
923
924 <span class="md-ellipsis">
925
926
927 Output Formats
928
929
930
931 </span>
932
933
934
935 </a>
936 </li>
937
938
939
940
941 </ul>
942 </nav>
943
944 </li>
945
946
947
948
949
950
951
952
953
954 <li class="md-nav__item">
955 <a href="/use-cases/" class="md-nav__link">
956
957
958
959 <span class="md-ellipsis">
960
961
962 Use Cases
963
964
965
966 </span>
967
968
969
970 </a>
971 </li>
972
973
974
975
976
977
978
979
980
981 <li class="md-nav__item">
982 <a href="/cli-reference/" class="md-nav__link">
983
984
985
986 <span class="md-ellipsis">
987
988
989 CLI Reference
990
991
992
993 </span>
994
995
996
997 </a>
998 </li>
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018 <li class="md-nav__item md-nav__item--nested">
1019
1020
1021
1022
1023
1024 <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
1025
1026
1027 <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
1028
1029
1030
1031 <span class="md-ellipsis">
1032
1033
1034 Architecture
1035
1036
1037
1038 </span>
1039
1040
1041
1042 <span class="md-nav__icon md-icon"></span>
1043 </label>
1044
1045 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
1046 <label class="md-nav__title" for="__nav_6">
1047 <span class="md-nav__icon md-icon"></span>
1048
1049
1050 Architecture
1051
1052
1053 </label>
1054 <ul class="md-nav__list" data-md-scrollfix>
1055
1056
1057
1058
1059
1060
1061
1062 <li class="md-nav__item">
1063 <a href="/architecture/overview/" class="md-nav__link">
1064
1065
1066
1067 <span class="md-ellipsis">
1068
1069
1070 Overview
1071
1072
1073
1074 </span>
1075
1076
1077
1078 </a>
1079 </li>
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090 <li class="md-nav__item">
1091 <a href="/architecture/providers/" class="md-nav__link">
1092
1093
1094
1095 <span class="md-ellipsis">
1096
1097
1098 Provider System
1099
1100
1101
1102 </span>
1103
1104
1105
1106 </a>
1107 </li>
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118 <li class="md-nav__item">
1119 <a href="/architecture/pipeline/" class="md-nav__link">
1120
1121
1122
1123 <span class="md-ellipsis">
1124
1125
1126 Processing Pipeline
1127
1128
1129
1130 </span>
1131
1132
1133
1134 </a>
1135 </li>
1136
1137
1138
1139
1140 </ul>
1141 </nav>
1142
1143 </li>
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163 <li class="md-nav__item md-nav__item--nested">
1164
1165
1166
1167
1168
1169 <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
1170
1171
1172 <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
1173
1174
1175
1176 <span class="md-ellipsis">
1177
1178
1179 API Reference
1180
1181
1182
1183 </span>
1184
1185
1186
1187 <span class="md-nav__icon md-icon"></span>
1188 </label>
1189
1190 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
1191 <label class="md-nav__title" for="__nav_7">
1192 <span class="md-nav__icon md-icon"></span>
1193
1194
1195 API Reference
1196
1197
1198 </label>
1199 <ul class="md-nav__list" data-md-scrollfix>
1200
1201
1202
1203
1204
1205
1206
1207 <li class="md-nav__item">
1208 <a href="/api/models/" class="md-nav__link">
1209
1210
1211
1212 <span class="md-ellipsis">
1213
1214
1215 Models
1216
1217
1218
1219 </span>
1220
1221
1222
1223 </a>
1224 </li>
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235 <li class="md-nav__item">
1236 <a href="/api/providers/" class="md-nav__link">
1237
1238
1239
1240 <span class="md-ellipsis">
1241
1242
1243 Providers
1244
1245
1246
1247 </span>
1248
1249
1250
1251 </a>
1252 </li>
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263 <li class="md-nav__item">
1264 <a href="/api/analyzers/" class="md-nav__link">
1265
1266
1267
1268 <span class="md-ellipsis">
1269
1270
1271 Analyzers
1272
1273
1274
1275 </span>
1276
1277
1278
1279 </a>
1280 </li>
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291 <li class="md-nav__item">
1292 <a href="/api/agent/" class="md-nav__link">
1293
1294
1295
1296 <span class="md-ellipsis">
1297
1298
1299 Agent & Skills
1300
1301
1302
1303 </span>
1304
1305
1306
1307 </a>
1308 </li>
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319 <li class="md-nav__item">
1320 <a href="/api/sources/" class="md-nav__link">
1321
1322
1323
1324 <span class="md-ellipsis">
1325
1326
1327 Sources
1328
1329
1330
1331 </span>
1332
1333
1334
1335 </a>
1336 </li>
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347 <li class="md-nav__item">
1348 <a href="/api/auth/" class="md-nav__link">
1349
1350
1351
1352 <span class="md-ellipsis">
1353
1354
1355 Authentication
1356
1357
1358
1359 </span>
1360
1361
1362
1363 </a>
1364 </li>
1365
1366
1367
1368
1369 </ul>
1370 </nav>
1371
1372 </li>
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382 <li class="md-nav__item">
1383 <a href="/faq/" class="md-nav__link">
1384
1385
1386
1387 <span class="md-ellipsis">
1388
1389
1390 FAQ & Troubleshooting
1391
1392
1393
1394 </span>
1395
1396
1397
1398 </a>
1399 </li>
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409 <li class="md-nav__item">
1410 <a href="/contributing/" class="md-nav__link">
1411
1412
1413
1414 <span class="md-ellipsis">
1415
1416
1417 Contributing
1418
1419
1420
1421 </span>
1422
1423
1424
1425 </a>
1426 </li>
1427
1428
1429
1430 </ul>
1431 </nav>
1432 </div>
1433 </div>
1434 </div>
1435
1436
1437
1438 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1439 <div class="md-sidebar__scrollwrap">
1440 <div class="md-sidebar__inner">
1441
1442
1443 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1444
1445
1446
1447
1448 </nav>
1449 </div>
1450 </div>
1451 </div>
1452
1453
1454
1455 <div class="md-content" data-md-component="content">
1456
1457 <article class="md-content__inner md-typeset">
1458
1459 <h1>404 - Not found</h1>
1460
1461 </article>
1462 </div>
1463
1464
1465 <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
1466
1467 <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
1468 </div>
1469
1470 <button type="button" class="md-top md-icon" data-md-component="top" hidden>
1471
1472 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
1473 Back to top
1474 </button>
1475
1476 </main>
1477
1478 <footer class="md-footer">
1479
1480 <div class="md-footer-meta md-typeset">
1481 <div class="md-footer-meta__inner md-grid">
1482 <div class="md-copyright">
1483
1484 <div class="md-copyright__highlight">
1485 Copyright &copy; 2026 CONFLICT LLC
1486 </div>
1487
1488
1489 Made with
1490 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
1491 Material for MkDocs
1492 </a>
1493
1494 </div>
1495
1496
1497 <div class="md-social">
1498
1499
1500
1501
1502
1503
1504
1505
1506 <a href="https://github.com/ConflictHQ/PlanOpticon" target="_blank" rel="noopener" title="github.com" class="md-social__link">
1507 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
1508 </a>
1509
1510 </div>
1511
1512 </div>
1513 </div>
1514 </footer>
1515
1516 </div>
1517 <div class="md-dialog" data-md-component="dialog">
1518 <div class="md-dialog__inner md-typeset"></div>
1519 </div>
1520
1521
1522
1523
1524
1525 <script id="__config" type="application/json">{"annotate": null, "base": "/", "features": ["navigation.instant", "navigation.tabs", "navigation.sections", "navigation.expand", "navigation.top", "search.suggest", "search.highlight", "content.code.copy", "content.tabs.link", "header.autohide"], "search": "/assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
1526
1527
1528 <script src="/assets/javascripts/bundle.79ae519e.min.js"></script>
1529
1530
1531 </body>
1532 </html>
A CNAME
+1
--- a/CNAME
+++ b/CNAME
@@ -0,0 +1 @@
1
+planopticon.dev
--- a/CNAME
+++ b/CNAME
@@ -0,0 +1 @@
 
--- a/CNAME
+++ b/CNAME
@@ -0,0 +1 @@
1 planopticon.dev
--- a/api/agent/index.html
+++ b/api/agent/index.html
@@ -0,0 +1,4888 @@
1
+
2
+<!doctype html>
3
+<html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+ <meta name="description" content="AI-powered video analysis and knowledge extraction">
10
+
11
+
12
+ <meta name="author" content="CONFLICT LLC">
13
+
14
+
15
+ <link rel="canonical" href="https://planopticon.dev/api/agent/">
16
+
17
+
18
+ <link rel="prev" href="../analyzers/">
19
+
20
+
21
+ <link rel="next" href="../sources/">
22
+
23
+
24
+
25
+
26
+
27
+ <link rel="icon" href="../../assets/images/favicon.png">
28
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.4">
29
+
30
+
31
+
32
+ <title>Agent & Skills - PlanOpticon</title>
33
+
34
+
35
+
36
+ <link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
37
+
38
+
39
+ <link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
53
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
54
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
55
+
56
+
57
+
58
+ <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
59
+
60
+ <link rel="stylesheet" href="../../assets/css/custom.css">
61
+
62
+ <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
63
+
64
+
65
+
66
+
67
+
68
+ </head>
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+ <body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom">
79
+
80
+
81
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
82
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
83
+ <label class="md-overlay" for="__drawer"></label>
84
+ <div data-md-component="skip">
85
+
86
+
87
+ <a href="#agent-api-reference" class="md-skip">
88
+ Skip to content
89
+ </a>
90
+
91
+ </div>
92
+ <div data-md-component="announce">
93
+
94
+ </div>
95
+
96
+
97
+
98
+
99
+<header class="md-header" data-md-component="header">
100
+ <nav class="md-header__inner md-grid" aria-label="Header">
101
+ <a href="../.." title="PlanOpticon" class="md-header__button md-logo" aria-label="PlanOpticon" data-md-component="logo">
102
+
103
+ <img src="../../assets/images/conflict-logo.svg" alt="logo">
104
+
105
+ </a>
106
+ <label class="md-header__button md-icon" for="__drawer">
107
+
108
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
109
+ </label>
110
+ <div class="md-header__title" data-md-component="header-title">
111
+ <div class="md-header__ellipsis">
112
+ <div class="md-header__topic">
113
+ <span class="md-ellipsis">
114
+ PlanOpticon
115
+ </span>
116
+ </div>
117
+ <div class="md-header__topic" data-md-component="header-topic">
118
+ <span class="md-ellipsis">
119
+
120
+ Agent & Skills
121
+
122
+ </span>
123
+ </div>
124
+ </div>
125
+ </div>
126
+
127
+
128
+ <form class="md-header__option" data-md-component="palette">
129
+
130
+
131
+
132
+
133
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
134
+
135
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
136
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
137
+ </label>
138
+
139
+
140
+
141
+
142
+
143
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
144
+
145
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
146
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
147
+ </label>
148
+
149
+
150
+</form>
151
+
152
+
153
+
154
+ <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
155
+
156
+
157
+
158
+
159
+
160
+ <label class="md-header__button md-icon" for="__search">
161
+
162
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
163
+ </label>
164
+ <div class="md-search" data-md-component="search" role="dialog">
165
+ <label class="md-search__overlay" for="__search"></label>
166
+ <div class="md-search__inner" role="search">
167
+ <form class="md-search__form" name="search">
168
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
169
+ <label class="md-search__icon md-icon" for="__search">
170
+
171
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
172
+
173
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
174
+ </label>
175
+ <nav class="md-search__options" aria-label="Search">
176
+
177
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
178
+
179
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
180
+ </button>
181
+ </nav>
182
+
183
+ <div class="md-search__suggest" data-md-component="search-suggest"></div>
184
+
185
+ </form>
186
+ <div class="md-search__output">
187
+ <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
188
+ <div class="md-search-result" data-md-component="search-result">
189
+ <div class="md-search-result__meta">
190
+ Initializing search
191
+ </div>
192
+ <ol class="md-search-result__list" role="presentation"></ol>
193
+ </div>
194
+ </div>
195
+ </div>
196
+ </div>
197
+</div>
198
+
199
+
200
+
201
+ <div class="md-header__source">
202
+ <a href="https://github.com/ConflictHQ/PlanOpticon" title="Go to repository" class="md-source" data-md-component="source">
203
+ <div class="md-source__icon md-icon">
204
+
205
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
206
+ </div>
207
+ <div class="md-source__repository">
208
+ ConflictHQ/PlanOpticon
209
+ </div>
210
+</a>
211
+ </div>
212
+
213
+ </nav>
214
+
215
+</header>
216
+
217
+ <div class="md-container" data-md-component="container">
218
+
219
+
220
+
221
+
222
+
223
+<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
224
+ <div class="md-grid">
225
+ <ul class="md-tabs__list">
226
+
227
+
228
+
229
+
230
+
231
+
232
+ <li class="md-tabs__item">
233
+ <a href="../.." class="md-tabs__link">
234
+
235
+
236
+
237
+
238
+
239
+ Home
240
+
241
+ </a>
242
+ </li>
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+ <li class="md-tabs__item">
254
+ <a href="../../getting-started/installation/" class="md-tabs__link">
255
+
256
+
257
+
258
+ Getting Started
259
+
260
+ </a>
261
+ </li>
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+ <li class="md-tabs__item">
274
+ <a href="../../guide/single-video/" class="md-tabs__link">
275
+
276
+
277
+
278
+ User Guide
279
+
280
+ </a>
281
+ </li>
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+ <li class="md-tabs__item">
292
+ <a href="../../use-cases/" class="md-tabs__link">
293
+
294
+
295
+
296
+
297
+
298
+ Use Cases
299
+
300
+ </a>
301
+ </li>
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+ <li class="md-tabs__item">
311
+ <a href="../../cli-reference/" class="md-tabs__link">
312
+
313
+
314
+
315
+
316
+
317
+ CLI Reference
318
+
319
+ </a>
320
+ </li>
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+ <li class="md-tabs__item">
332
+ <a href="../../architecture/overview/" class="md-tabs__link">
333
+
334
+
335
+
336
+ Architecture
337
+
338
+ </a>
339
+ </li>
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+ <li class="md-tabs__item md-tabs__item--active">
354
+ <a href="../models/" class="md-tabs__link">
355
+
356
+
357
+
358
+ API Reference
359
+
360
+ </a>
361
+ </li>
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+ <li class="md-tabs__item">
372
+ <a href="../../faq/" class="md-tabs__link">
373
+
374
+
375
+
376
+
377
+
378
+ FAQ & Troubleshooting
379
+
380
+ </a>
381
+ </li>
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+ <li class="md-tabs__item">
391
+ <a href="../../contributing/" class="md-tabs__link">
392
+
393
+
394
+
395
+
396
+
397
+ Contributing
398
+
399
+ </a>
400
+ </li>
401
+
402
+
403
+
404
+ </ul>
405
+ </div>
406
+</nav>
407
+
408
+
409
+
410
+ <main class="md-main" data-md-component="main">
411
+ <div class="md-main__inner md-grid">
412
+
413
+
414
+
415
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
416
+ <div class="md-sidebar__scrollwrap">
417
+ <div class="md-sidebar__inner">
418
+
419
+
420
+
421
+
422
+
423
+
424
+<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
425
+ <label class="md-nav__title" for="__drawer">
426
+ <a href="../.." title="PlanOpticon" class="md-nav__button md-logo" aria-label="PlanOpticon" data-md-component="logo">
427
+
428
+ <img src="../../assets/images/conflict-logo.svg" alt="logo">
429
+
430
+ </a>
431
+ PlanOpticon
432
+ </label>
433
+
434
+ <div class="md-nav__source">
435
+ <a href="https://github.com/ConflictHQ/PlanOpticon" title="Go to repository" class="md-source" data-md-component="source">
436
+ <div class="md-source__icon md-icon">
437
+
438
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
439
+ </div>
440
+ <div class="md-source__repository">
441
+ ConflictHQ/PlanOpticon
442
+ </div>
443
+</a>
444
+ </div>
445
+
446
+ <ul class="md-nav__list" data-md-scrollfix>
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+ <li class="md-nav__item">
455
+ <a href="../.." class="md-nav__link">
456
+
457
+
458
+
459
+ <span class="md-ellipsis">
460
+
461
+
462
+ Home
463
+
464
+
465
+
466
+ </span>
467
+
468
+
469
+
470
+ </a>
471
+ </li>
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+ <li class="md-nav__item md-nav__item--nested">
492
+
493
+
494
+
495
+
496
+
497
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
498
+
499
+
500
+ <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
501
+
502
+
503
+
504
+ <span class="md-ellipsis">
505
+
506
+
507
+ Getting Started
508
+
509
+
510
+
511
+ </span>
512
+
513
+
514
+
515
+ <span class="md-nav__icon md-icon"></span>
516
+ </label>
517
+
518
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
519
+ <label class="md-nav__title" for="__nav_2">
520
+ <span class="md-nav__icon md-icon"></span>
521
+
522
+
523
+ Getting Started
524
+
525
+
526
+ </label>
527
+ <ul class="md-nav__list" data-md-scrollfix>
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+ <li class="md-nav__item">
536
+ <a href="../../getting-started/installation/" class="md-nav__link">
537
+
538
+
539
+
540
+ <span class="md-ellipsis">
541
+
542
+
543
+ Installation
544
+
545
+
546
+
547
+ </span>
548
+
549
+
550
+
551
+ </a>
552
+ </li>
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+ <li class="md-nav__item">
564
+ <a href="../../getting-started/quickstart/" class="md-nav__link">
565
+
566
+
567
+
568
+ <span class="md-ellipsis">
569
+
570
+
571
+ Quick Start
572
+
573
+
574
+
575
+ </span>
576
+
577
+
578
+
579
+ </a>
580
+ </li>
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+ <li class="md-nav__item">
592
+ <a href="../../getting-started/configuration/" class="md-nav__link">
593
+
594
+
595
+
596
+ <span class="md-ellipsis">
597
+
598
+
599
+ Configuration
600
+
601
+
602
+
603
+ </span>
604
+
605
+
606
+
607
+ </a>
608
+ </li>
609
+
610
+
611
+
612
+
613
+ </ul>
614
+ </nav>
615
+
616
+ </li>
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+ <li class="md-nav__item md-nav__item--nested">
637
+
638
+
639
+
640
+
641
+
642
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
643
+
644
+
645
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
646
+
647
+
648
+
649
+ <span class="md-ellipsis">
650
+
651
+
652
+ User Guide
653
+
654
+
655
+
656
+ </span>
657
+
658
+
659
+
660
+ <span class="md-nav__icon md-icon"></span>
661
+ </label>
662
+
663
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
664
+ <label class="md-nav__title" for="__nav_3">
665
+ <span class="md-nav__icon md-icon"></span>
666
+
667
+
668
+ User Guide
669
+
670
+
671
+ </label>
672
+ <ul class="md-nav__list" data-md-scrollfix>
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+ <li class="md-nav__item">
681
+ <a href="../../guide/single-video/" class="md-nav__link">
682
+
683
+
684
+
685
+ <span class="md-ellipsis">
686
+
687
+
688
+ Single Video Analysis
689
+
690
+
691
+
692
+ </span>
693
+
694
+
695
+
696
+ </a>
697
+ </li>
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+ <li class="md-nav__item">
709
+ <a href="../../guide/batch/" class="md-nav__link">
710
+
711
+
712
+
713
+ <span class="md-ellipsis">
714
+
715
+
716
+ Batch Processing
717
+
718
+
719
+
720
+ </span>
721
+
722
+
723
+
724
+ </a>
725
+ </li>
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+ <li class="md-nav__item">
737
+ <a href="../../guide/document-ingestion/" class="md-nav__link">
738
+
739
+
740
+
741
+ <span class="md-ellipsis">
742
+
743
+
744
+ Document Ingestion
745
+
746
+
747
+
748
+ </span>
749
+
750
+
751
+
752
+ </a>
753
+ </li>
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+ <li class="md-nav__item">
765
+ <a href="../../guide/cloud-sources/" class="md-nav__link">
766
+
767
+
768
+
769
+ <span class="md-ellipsis">
770
+
771
+
772
+ Cloud Sources
773
+
774
+
775
+
776
+ </span>
777
+
778
+
779
+
780
+ </a>
781
+ </li>
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+ <li class="md-nav__item">
793
+ <a href="../../guide/knowledge-graphs/" class="md-nav__link">
794
+
795
+
796
+
797
+ <span class="md-ellipsis">
798
+
799
+
800
+ Knowledge Graphs
801
+
802
+
803
+
804
+ </span>
805
+
806
+
807
+
808
+ </a>
809
+ </li>
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+ <li class="md-nav__item">
821
+ <a href="../../guide/companion/" class="md-nav__link">
822
+
823
+
824
+
825
+ <span class="md-ellipsis">
826
+
827
+
828
+ Interactive Companion
829
+
830
+
831
+
832
+ </span>
833
+
834
+
835
+
836
+ </a>
837
+ </li>
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+ <li class="md-nav__item">
849
+ <a href="../../guide/planning-agent/" class="md-nav__link">
850
+
851
+
852
+
853
+ <span class="md-ellipsis">
854
+
855
+
856
+ Planning Agent
857
+
858
+
859
+
860
+ </span>
861
+
862
+
863
+
864
+ </a>
865
+ </li>
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+
876
+ <li class="md-nav__item">
877
+ <a href="../../guide/authentication/" class="md-nav__link">
878
+
879
+
880
+
881
+ <span class="md-ellipsis">
882
+
883
+
884
+ Authentication
885
+
886
+
887
+
888
+ </span>
889
+
890
+
891
+
892
+ </a>
893
+ </li>
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+ <li class="md-nav__item">
905
+ <a href="../../guide/export/" class="md-nav__link">
906
+
907
+
908
+
909
+ <span class="md-ellipsis">
910
+
911
+
912
+ Export & Documents
913
+
914
+
915
+
916
+ </span>
917
+
918
+
919
+
920
+ </a>
921
+ </li>
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+ <li class="md-nav__item">
933
+ <a href="../../guide/output-formats/" class="md-nav__link">
934
+
935
+
936
+
937
+ <span class="md-ellipsis">
938
+
939
+
940
+ Output Formats
941
+
942
+
943
+
944
+ </span>
945
+
946
+
947
+
948
+ </a>
949
+ </li>
950
+
951
+
952
+
953
+
954
+ </ul>
955
+ </nav>
956
+
957
+ </li>
958
+
959
+
960
+
961
+
962
+
963
+
964
+
965
+
966
+
967
+ <li class="md-nav__item">
968
+ <a href="../../use-cases/" class="md-nav__link">
969
+
970
+
971
+
972
+ <span class="md-ellipsis">
973
+
974
+
975
+ Use Cases
976
+
977
+
978
+
979
+ </span>
980
+
981
+
982
+
983
+ </a>
984
+ </li>
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+ <li class="md-nav__item">
995
+ <a href="../../cli-reference/" class="md-nav__link">
996
+
997
+
998
+
999
+ <span class="md-ellipsis">
1000
+
1001
+
1002
+ CLI Reference
1003
+
1004
+
1005
+
1006
+ </span>
1007
+
1008
+
1009
+
1010
+ </a>
1011
+ </li>
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+ <li class="md-nav__item md-nav__item--nested">
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
1038
+
1039
+
1040
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
1041
+
1042
+
1043
+
1044
+ <span class="md-ellipsis">
1045
+
1046
+
1047
+ Architecture
1048
+
1049
+
1050
+
1051
+ </span>
1052
+
1053
+
1054
+
1055
+ <span class="md-nav__icon md-icon"></span>
1056
+ </label>
1057
+
1058
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
1059
+ <label class="md-nav__title" for="__nav_6">
1060
+ <span class="md-nav__icon md-icon"></span>
1061
+
1062
+
1063
+ Architecture
1064
+
1065
+
1066
+ </label>
1067
+ <ul class="md-nav__list" data-md-scrollfix>
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+ <li class="md-nav__item">
1076
+ <a href="../../architecture/overview/" class="md-nav__link">
1077
+
1078
+
1079
+
1080
+ <span class="md-ellipsis">
1081
+
1082
+
1083
+ Overview
1084
+
1085
+
1086
+
1087
+ </span>
1088
+
1089
+
1090
+
1091
+ </a>
1092
+ </li>
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+ <li class="md-nav__item">
1104
+ <a href="../../architecture/providers/" class="md-nav__link">
1105
+
1106
+
1107
+
1108
+ <span class="md-ellipsis">
1109
+
1110
+
1111
+ Provider System
1112
+
1113
+
1114
+
1115
+ </span>
1116
+
1117
+
1118
+
1119
+ </a>
1120
+ </li>
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+ <li class="md-nav__item">
1132
+ <a href="../../architecture/pipeline/" class="md-nav__link">
1133
+
1134
+
1135
+
1136
+ <span class="md-ellipsis">
1137
+
1138
+
1139
+ Processing Pipeline
1140
+
1141
+
1142
+
1143
+ </span>
1144
+
1145
+
1146
+
1147
+ </a>
1148
+ </li>
1149
+
1150
+
1151
+
1152
+
1153
+ </ul>
1154
+ </nav>
1155
+
1156
+ </li>
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+ <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
1182
+
1183
+
1184
+
1185
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" checked>
1186
+
1187
+
1188
+ <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="">
1189
+
1190
+
1191
+
1192
+ <span class="md-ellipsis">
1193
+
1194
+
1195
+ API Reference
1196
+
1197
+
1198
+
1199
+ </span>
1200
+
1201
+
1202
+
1203
+ <span class="md-nav__icon md-icon"></span>
1204
+ </label>
1205
+
1206
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="true">
1207
+ <label class="md-nav__title" for="__nav_7">
1208
+ <span class="md-nav__icon md-icon"></span>
1209
+
1210
+
1211
+ API Reference
1212
+
1213
+
1214
+ </label>
1215
+ <ul class="md-nav__list" data-md-scrollfix>
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+ <li class="md-nav__item">
1224
+ <a href="../models/" class="md-nav__link">
1225
+
1226
+
1227
+
1228
+ <span class="md-ellipsis">
1229
+
1230
+
1231
+ Models
1232
+
1233
+
1234
+
1235
+ </span>
1236
+
1237
+
1238
+
1239
+ </a>
1240
+ </li>
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+ <li class="md-nav__item">
1252
+ <a href="../providers/" class="md-nav__link">
1253
+
1254
+
1255
+
1256
+ <span class="md-ellipsis">
1257
+
1258
+
1259
+ Providers
1260
+
1261
+
1262
+
1263
+ </span>
1264
+
1265
+
1266
+
1267
+ </a>
1268
+ </li>
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+ <li class="md-nav__item">
1280
+ <a href="../analyzers/" class="md-nav__link">
1281
+
1282
+
1283
+
1284
+ <span class="md-ellipsis">
1285
+
1286
+
1287
+ Analyzers
1288
+
1289
+
1290
+
1291
+ </span>
1292
+
1293
+
1294
+
1295
+ </a>
1296
+ </li>
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+ <li class="md-nav__item md-nav__item--active">
1310
+
1311
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+ <label class="md-nav__link md-nav__link--active" for="__toc">
1318
+
1319
+
1320
+
1321
+ <span class="md-ellipsis">
1322
+
1323
+
1324
+ Agent & Skills
1325
+
1326
+
1327
+
1328
+ </span>
1329
+
1330
+
1331
+
1332
+ <span class="md-nav__icon md-icon"></span>
1333
+ </label>
1334
+
1335
+ <a href="./" class="md-nav__link md-nav__link--active">
1336
+
1337
+
1338
+
1339
+ <span class="md-ellipsis">
1340
+
1341
+
1342
+ Agent & Skills
1343
+
1344
+
1345
+
1346
+ </span>
1347
+
1348
+
1349
+
1350
+ </a>
1351
+
1352
+
1353
+
1354
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1355
+
1356
+
1357
+
1358
+
1359
+
1360
+
1361
+ <label class="md-nav__title" for="__toc">
1362
+ <span class="md-nav__icon md-icon"></span>
1363
+ Table of contents
1364
+ </label>
1365
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1366
+
1367
+ <li class="md-nav__item">
1368
+ <a href="#video_processor.agent.agent_loop" class="md-nav__link">
1369
+ <span class="md-ellipsis">
1370
+
1371
+ agent_loop
1372
+
1373
+ </span>
1374
+ </a>
1375
+
1376
+ <nav class="md-nav" aria-label="agent_loop">
1377
+ <ul class="md-nav__list">
1378
+
1379
+ <li class="md-nav__item">
1380
+ <a href="#video_processor.agent.agent_loop.PlanningAgent" class="md-nav__link">
1381
+ <span class="md-ellipsis">
1382
+
1383
+ PlanningAgent
1384
+
1385
+ </span>
1386
+ </a>
1387
+
1388
+ <nav class="md-nav" aria-label="PlanningAgent">
1389
+ <ul class="md-nav__list">
1390
+
1391
+ <li class="md-nav__item">
1392
+ <a href="#video_processor.agent.agent_loop.PlanningAgent.chat" class="md-nav__link">
1393
+ <span class="md-ellipsis">
1394
+
1395
+ chat
1396
+
1397
+ </span>
1398
+ </a>
1399
+
1400
+</li>
1401
+
1402
+ <li class="md-nav__item">
1403
+ <a href="#video_processor.agent.agent_loop.PlanningAgent.execute" class="md-nav__link">
1404
+ <span class="md-ellipsis">
1405
+
1406
+ execute
1407
+
1408
+ </span>
1409
+ </a>
1410
+
1411
+</li>
1412
+
1413
+ <li class="md-nav__item">
1414
+ <a href="#video_processor.agent.agent_loop.PlanningAgent.from_kb_paths" class="md-nav__link">
1415
+ <span class="md-ellipsis">
1416
+
1417
+ from_kb_paths
1418
+
1419
+ </span>
1420
+ </a>
1421
+
1422
+</li>
1423
+
1424
+ </ul>
1425
+ </nav>
1426
+
1427
+</li>
1428
+
1429
+ </ul>
1430
+ </nav>
1431
+
1432
+</li>
1433
+
1434
+ <li class="md-nav__item">
1435
+ <a href="#video_processor.agent.skills.base" class="md-nav__link">
1436
+ <span class="md-ellipsis">
1437
+
1438
+ base
1439
+
1440
+ </span>
1441
+ </a>
1442
+
1443
+ <nav class="md-nav" aria-label="base">
1444
+ <ul class="md-nav__list">
1445
+
1446
+ <li class="md-nav__item">
1447
+ <a href="#video_processor.agent.skills.base.AgentContext" class="md-nav__link">
1448
+ <span class="md-ellipsis">
1449
+
1450
+ AgentContext
1451
+
1452
+ </span>
1453
+ </a>
1454
+
1455
+</li>
1456
+
1457
+ <li class="md-nav__item">
1458
+ <a href="#video_processor.agent.skills.base.Artifact" class="md-nav__link">
1459
+ <span class="md-ellipsis">
1460
+
1461
+ Artifact
1462
+
1463
+ </span>
1464
+ </a>
1465
+
1466
+</li>
1467
+
1468
+ <li class="md-nav__item">
1469
+ <a href="#video_processor.agent.skills.base.Skill" class="md-nav__link">
1470
+ <span class="md-ellipsis">
1471
+
1472
+ Skill
1473
+
1474
+ </span>
1475
+ </a>
1476
+
1477
+ <nav class="md-nav" aria-label="Skill">
1478
+ <ul class="md-nav__list">
1479
+
1480
+ <li class="md-nav__item">
1481
+ <a href="#video_processor.agent.skills.base.Skill.can_execute" class="md-nav__link">
1482
+ <span class="md-ellipsis">
1483
+
1484
+ can_execute
1485
+
1486
+ </span>
1487
+ </a>
1488
+
1489
+</li>
1490
+
1491
+ <li class="md-nav__item">
1492
+ <a href="#video_processor.agent.skills.base.Skill.execute" class="md-nav__link">
1493
+ <span class="md-ellipsis">
1494
+
1495
+ execute
1496
+
1497
+ </span>
1498
+ </a>
1499
+
1500
+</li>
1501
+
1502
+ </ul>
1503
+ </nav>
1504
+
1505
+</li>
1506
+
1507
+ <li class="md-nav__item">
1508
+ <a href="#video_processor.agent.skills.base.get_skill" class="md-nav__link">
1509
+ <span class="md-ellipsis">
1510
+
1511
+ get_skill
1512
+
1513
+ </span>
1514
+ </a>
1515
+
1516
+</li>
1517
+
1518
+ <li class="md-nav__item">
1519
+ <a href="#video_processor.agent.skills.base.list_skills" class="md-nav__link">
1520
+ <span class="md-ellipsis">
1521
+
1522
+ list_skills
1523
+
1524
+ </span>
1525
+ </a>
1526
+
1527
+</li>
1528
+
1529
+ <li class="md-nav__item">
1530
+ <a href="#video_processor.agent.skills.base.register_skill" class="md-nav__link">
1531
+ <span class="md-ellipsis">
1532
+
1533
+ register_skill
1534
+
1535
+ </span>
1536
+ </a>
1537
+
1538
+</li>
1539
+
1540
+ </ul>
1541
+ </nav>
1542
+
1543
+</li>
1544
+
1545
+ <li class="md-nav__item">
1546
+ <a href="#video_processor.agent.kb_context" class="md-nav__link">
1547
+ <span class="md-ellipsis">
1548
+
1549
+ kb_context
1550
+
1551
+ </span>
1552
+ </a>
1553
+
1554
+ <nav class="md-nav" aria-label="kb_context">
1555
+ <ul class="md-nav__list">
1556
+
1557
+ <li class="md-nav__item">
1558
+ <a href="#video_processor.agent.kb_context.KBContext" class="md-nav__link">
1559
+ <span class="md-ellipsis">
1560
+
1561
+ KBContext
1562
+
1563
+ </span>
1564
+ </a>
1565
+
1566
+ <nav class="md-nav" aria-label="KBContext">
1567
+ <ul class="md-nav__list">
1568
+
1569
+ <li class="md-nav__item">
1570
+ <a href="#video_processor.agent.kb_context.KBContext.knowledge_graph" class="md-nav__link">
1571
+ <span class="md-ellipsis">
1572
+
1573
+ knowledge_graph
1574
+
1575
+ </span>
1576
+ </a>
1577
+
1578
+</li>
1579
+
1580
+ <li class="md-nav__item">
1581
+ <a href="#video_processor.agent.kb_context.KBContext.query_engine" class="md-nav__link">
1582
+ <span class="md-ellipsis">
1583
+
1584
+ query_engine
1585
+
1586
+ </span>
1587
+ </a>
1588
+
1589
+</li>
1590
+
1591
+ <li class="md-nav__item">
1592
+ <a href="#video_processor.agent.kb_context.KBContext.sources" class="md-nav__link">
1593
+ <span class="md-ellipsis">
1594
+
1595
+ sources
1596
+
1597
+ </span>
1598
+ </a>
1599
+
1600
+</li>
1601
+
1602
+ <li class="md-nav__item">
1603
+ <a href="#video_processor.agent.kb_context.KBContext.add_source" class="md-nav__link">
1604
+ <span class="md-ellipsis">
1605
+
1606
+ add_source
1607
+
1608
+ </span>
1609
+ </a>
1610
+
1611
+</li>
1612
+
1613
+ <li class="md-nav__item">
1614
+ <a href="#video_processor.agent.kb_context.KBContext.auto_discover" class="md-nav__link">
1615
+ <span class="md-ellipsis">
1616
+
1617
+ auto_discover
1618
+
1619
+ </span>
1620
+ </a>
1621
+
1622
+</li>
1623
+
1624
+ <li class="md-nav__item">
1625
+ <a href="#video_processor.agent.kb_context.KBContext.load" class="md-nav__link">
1626
+ <span class="md-ellipsis">
1627
+
1628
+ load
1629
+
1630
+ </span>
1631
+ </a>
1632
+
1633
+</li>
1634
+
1635
+ <li class="md-nav__item">
1636
+ <a href="#video_processor.agent.kb_context.KBContext.summary" class="md-nav__link">
1637
+ <span class="md-ellipsis">
1638
+
1639
+ summary
1640
+
1641
+ </span>
1642
+ </a>
1643
+
1644
+</li>
1645
+
1646
+ </ul>
1647
+ </nav>
1648
+
1649
+</li>
1650
+
1651
+ </ul>
1652
+ </nav>
1653
+
1654
+</li>
1655
+
1656
+ <li class="md-nav__item">
1657
+ <a href="#overview" class="md-nav__link">
1658
+ <span class="md-ellipsis">
1659
+
1660
+ Overview
1661
+
1662
+ </span>
1663
+ </a>
1664
+
1665
+</li>
1666
+
1667
+ <li class="md-nav__item">
1668
+ <a href="#planningagent" class="md-nav__link">
1669
+ <span class="md-ellipsis">
1670
+
1671
+ PlanningAgent
1672
+
1673
+ </span>
1674
+ </a>
1675
+
1676
+ <nav class="md-nav" aria-label="PlanningAgent">
1677
+ <ul class="md-nav__list">
1678
+
1679
+ <li class="md-nav__item">
1680
+ <a href="#constructor" class="md-nav__link">
1681
+ <span class="md-ellipsis">
1682
+
1683
+ Constructor
1684
+
1685
+ </span>
1686
+ </a>
1687
+
1688
+</li>
1689
+
1690
+ <li class="md-nav__item">
1691
+ <a href="#from_kb_paths" class="md-nav__link">
1692
+ <span class="md-ellipsis">
1693
+
1694
+ from_kb_paths()
1695
+
1696
+ </span>
1697
+ </a>
1698
+
1699
+</li>
1700
+
1701
+ <li class="md-nav__item">
1702
+ <a href="#execute" class="md-nav__link">
1703
+ <span class="md-ellipsis">
1704
+
1705
+ execute()
1706
+
1707
+ </span>
1708
+ </a>
1709
+
1710
+</li>
1711
+
1712
+ <li class="md-nav__item">
1713
+ <a href="#chat" class="md-nav__link">
1714
+ <span class="md-ellipsis">
1715
+
1716
+ chat()
1717
+
1718
+ </span>
1719
+ </a>
1720
+
1721
+</li>
1722
+
1723
+ </ul>
1724
+ </nav>
1725
+
1726
+</li>
1727
+
1728
+ <li class="md-nav__item">
1729
+ <a href="#agentcontext" class="md-nav__link">
1730
+ <span class="md-ellipsis">
1731
+
1732
+ AgentContext
1733
+
1734
+ </span>
1735
+ </a>
1736
+
1737
+</li>
1738
+
1739
+ <li class="md-nav__item">
1740
+ <a href="#skill-abc" class="md-nav__link">
1741
+ <span class="md-ellipsis">
1742
+
1743
+ Skill (ABC)
1744
+
1745
+ </span>
1746
+ </a>
1747
+
1748
+ <nav class="md-nav" aria-label="Skill (ABC)">
1749
+ <ul class="md-nav__list">
1750
+
1751
+ <li class="md-nav__item">
1752
+ <a href="#execute_1" class="md-nav__link">
1753
+ <span class="md-ellipsis">
1754
+
1755
+ execute()
1756
+
1757
+ </span>
1758
+ </a>
1759
+
1760
+</li>
1761
+
1762
+ <li class="md-nav__item">
1763
+ <a href="#can_execute" class="md-nav__link">
1764
+ <span class="md-ellipsis">
1765
+
1766
+ can_execute()
1767
+
1768
+ </span>
1769
+ </a>
1770
+
1771
+</li>
1772
+
1773
+ <li class="md-nav__item">
1774
+ <a href="#implementing-a-custom-skill" class="md-nav__link">
1775
+ <span class="md-ellipsis">
1776
+
1777
+ Implementing a custom skill
1778
+
1779
+ </span>
1780
+ </a>
1781
+
1782
+</li>
1783
+
1784
+ </ul>
1785
+ </nav>
1786
+
1787
+</li>
1788
+
1789
+ <li class="md-nav__item">
1790
+ <a href="#artifact" class="md-nav__link">
1791
+ <span class="md-ellipsis">
1792
+
1793
+ Artifact
1794
+
1795
+ </span>
1796
+ </a>
1797
+
1798
+</li>
1799
+
1800
+ <li class="md-nav__item">
1801
+ <a href="#skill-registry-functions" class="md-nav__link">
1802
+ <span class="md-ellipsis">
1803
+
1804
+ Skill Registry Functions
1805
+
1806
+ </span>
1807
+ </a>
1808
+
1809
+ <nav class="md-nav" aria-label="Skill Registry Functions">
1810
+ <ul class="md-nav__list">
1811
+
1812
+ <li class="md-nav__item">
1813
+ <a href="#register_skill" class="md-nav__link">
1814
+ <span class="md-ellipsis">
1815
+
1816
+ register_skill()
1817
+
1818
+ </span>
1819
+ </a>
1820
+
1821
+</li>
1822
+
1823
+ <li class="md-nav__item">
1824
+ <a href="#get_skill" class="md-nav__link">
1825
+ <span class="md-ellipsis">
1826
+
1827
+ get_skill()
1828
+
1829
+ </span>
1830
+ </a>
1831
+
1832
+</li>
1833
+
1834
+ <li class="md-nav__item">
1835
+ <a href="#list_skills" class="md-nav__link">
1836
+ <span class="md-ellipsis">
1837
+
1838
+ list_skills()
1839
+
1840
+ </span>
1841
+ </a>
1842
+
1843
+</li>
1844
+
1845
+ </ul>
1846
+ </nav>
1847
+
1848
+</li>
1849
+
1850
+ <li class="md-nav__item">
1851
+ <a href="#kbcontext" class="md-nav__link">
1852
+ <span class="md-ellipsis">
1853
+
1854
+ KBContext
1855
+
1856
+ </span>
1857
+ </a>
1858
+
1859
+ <nav class="md-nav" aria-label="KBContext">
1860
+ <ul class="md-nav__list">
1861
+
1862
+ <li class="md-nav__item">
1863
+ <a href="#constructor_1" class="md-nav__link">
1864
+ <span class="md-ellipsis">
1865
+
1866
+ Constructor
1867
+
1868
+ </span>
1869
+ </a>
1870
+
1871
+</li>
1872
+
1873
+ <li class="md-nav__item">
1874
+ <a href="#add_source" class="md-nav__link">
1875
+ <span class="md-ellipsis">
1876
+
1877
+ add_source()
1878
+
1879
+ </span>
1880
+ </a>
1881
+
1882
+</li>
1883
+
1884
+ <li class="md-nav__item">
1885
+ <a href="#load" class="md-nav__link">
1886
+ <span class="md-ellipsis">
1887
+
1888
+ load()
1889
+
1890
+ </span>
1891
+ </a>
1892
+
1893
+</li>
1894
+
1895
+ <li class="md-nav__item">
1896
+ <a href="#properties" class="md-nav__link">
1897
+ <span class="md-ellipsis">
1898
+
1899
+ Properties
1900
+
1901
+ </span>
1902
+ </a>
1903
+
1904
+</li>
1905
+
1906
+ <li class="md-nav__item">
1907
+ <a href="#summary" class="md-nav__link">
1908
+ <span class="md-ellipsis">
1909
+
1910
+ summary()
1911
+
1912
+ </span>
1913
+ </a>
1914
+
1915
+</li>
1916
+
1917
+ <li class="md-nav__item">
1918
+ <a href="#auto_discover" class="md-nav__link">
1919
+ <span class="md-ellipsis">
1920
+
1921
+ auto_discover()
1922
+
1923
+ </span>
1924
+ </a>
1925
+
1926
+</li>
1927
+
1928
+ <li class="md-nav__item">
1929
+ <a href="#usage-examples" class="md-nav__link">
1930
+ <span class="md-ellipsis">
1931
+
1932
+ Usage examples
1933
+
1934
+ </span>
1935
+ </a>
1936
+
1937
+</li>
1938
+
1939
+ </ul>
1940
+ </nav>
1941
+
1942
+</li>
1943
+
1944
+ </ul>
1945
+
1946
+</nav>
1947
+
1948
+ </li>
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1957
+
1958
+
1959
+ <li class="md-nav__item">
1960
+ <a href="../sources/" class="md-nav__link">
1961
+
1962
+
1963
+
1964
+ <span class="md-ellipsis">
1965
+
1966
+
1967
+ Sources
1968
+
1969
+
1970
+
1971
+ </span>
1972
+
1973
+
1974
+
1975
+ </a>
1976
+ </li>
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1986
+
1987
+ <li class="md-nav__item">
1988
+ <a href="../auth/" class="md-nav__link">
1989
+
1990
+
1991
+
1992
+ <span class="md-ellipsis">
1993
+
1994
+
1995
+ Authentication
1996
+
1997
+
1998
+
1999
+ </span>
2000
+
2001
+
2002
+
2003
+ </a>
2004
+ </li>
2005
+
2006
+
2007
+
2008
+
2009
+ </ul>
2010
+ </nav>
2011
+
2012
+ </li>
2013
+
2014
+
2015
+
2016
+
2017
+
2018
+
2019
+
2020
+
2021
+
2022
+ <li class="md-nav__item">
2023
+ <a href="../../faq/" class="md-nav__link">
2024
+
2025
+
2026
+
2027
+ <span class="md-ellipsis">
2028
+
2029
+
2030
+ FAQ & Troubleshooting
2031
+
2032
+
2033
+
2034
+ </span>
2035
+
2036
+
2037
+
2038
+ </a>
2039
+ </li>
2040
+
2041
+
2042
+
2043
+
2044
+
2045
+
2046
+
2047
+
2048
+
2049
+ <li class="md-nav__item">
2050
+ <a href="../../contributing/" class="md-nav__link">
2051
+
2052
+
2053
+
2054
+ <span class="md-ellipsis">
2055
+
2056
+
2057
+ Contributing
2058
+
2059
+
2060
+
2061
+ </span>
2062
+
2063
+
2064
+
2065
+ </a>
2066
+ </li>
2067
+
2068
+
2069
+
2070
+ </ul>
2071
+</nav>
2072
+ </div>
2073
+ </div>
2074
+ </div>
2075
+
2076
+
2077
+
2078
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
2079
+ <div class="md-sidebar__scrollwrap">
2080
+ <div class="md-sidebar__inner">
2081
+
2082
+
2083
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+ <label class="md-nav__title" for="__toc">
2091
+ <span class="md-nav__icon md-icon"></span>
2092
+ Table of contents
2093
+ </label>
2094
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2095
+
2096
+ <li class="md-nav__item">
2097
+ <a href="#video_processor.agent.agent_loop" class="md-nav__link">
2098
+ <span class="md-ellipsis">
2099
+
2100
+ agent_loop
2101
+
2102
+ </span>
2103
+ </a>
2104
+
2105
+ <nav class="md-nav" aria-label="agent_loop">
2106
+ <ul class="md-nav__list">
2107
+
2108
+ <li class="md-nav__item">
2109
+ <a href="#video_processor.agent.agent_loop.PlanningAgent" class="md-nav__link">
2110
+ <span class="md-ellipsis">
2111
+
2112
+ PlanningAgent
2113
+
2114
+ </span>
2115
+ </a>
2116
+
2117
+ <nav class="md-nav" aria-label="PlanningAgent">
2118
+ <ul class="md-nav__list">
2119
+
2120
+ <li class="md-nav__item">
2121
+ <a href="#video_processor.agent.agent_loop.PlanningAgent.chat" class="md-nav__link">
2122
+ <span class="md-ellipsis">
2123
+
2124
+ chat
2125
+
2126
+ </span>
2127
+ </a>
2128
+
2129
+</li>
2130
+
2131
+ <li class="md-nav__item">
2132
+ <a href="#video_processor.agent.agent_loop.PlanningAgent.execute" class="md-nav__link">
2133
+ <span class="md-ellipsis">
2134
+
2135
+ execute
2136
+
2137
+ </span>
2138
+ </a>
2139
+
2140
+</li>
2141
+
2142
+ <li class="md-nav__item">
2143
+ <a href="#video_processor.agent.agent_loop.PlanningAgent.from_kb_paths" class="md-nav__link">
2144
+ <span class="md-ellipsis">
2145
+
2146
+ from_kb_paths
2147
+
2148
+ </span>
2149
+ </a>
2150
+
2151
+</li>
2152
+
2153
+ </ul>
2154
+ </nav>
2155
+
2156
+</li>
2157
+
2158
+ </ul>
2159
+ </nav>
2160
+
2161
+</li>
2162
+
2163
+ <li class="md-nav__item">
2164
+ <a href="#video_processor.agent.skills.base" class="md-nav__link">
2165
+ <span class="md-ellipsis">
2166
+
2167
+ base
2168
+
2169
+ </span>
2170
+ </a>
2171
+
2172
+ <nav class="md-nav" aria-label="base">
2173
+ <ul class="md-nav__list">
2174
+
2175
+ <li class="md-nav__item">
2176
+ <a href="#video_processor.agent.skills.base.AgentContext" class="md-nav__link">
2177
+ <span class="md-ellipsis">
2178
+
2179
+ AgentContext
2180
+
2181
+ </span>
2182
+ </a>
2183
+
2184
+</li>
2185
+
2186
+ <li class="md-nav__item">
2187
+ <a href="#video_processor.agent.skills.base.Artifact" class="md-nav__link">
2188
+ <span class="md-ellipsis">
2189
+
2190
+ Artifact
2191
+
2192
+ </span>
2193
+ </a>
2194
+
2195
+</li>
2196
+
2197
+ <li class="md-nav__item">
2198
+ <a href="#video_processor.agent.skills.base.Skill" class="md-nav__link">
2199
+ <span class="md-ellipsis">
2200
+
2201
+ Skill
2202
+
2203
+ </span>
2204
+ </a>
2205
+
2206
+ <nav class="md-nav" aria-label="Skill">
2207
+ <ul class="md-nav__list">
2208
+
2209
+ <li class="md-nav__item">
2210
+ <a href="#video_processor.agent.skills.base.Skill.can_execute" class="md-nav__link">
2211
+ <span class="md-ellipsis">
2212
+
2213
+ can_execute
2214
+
2215
+ </span>
2216
+ </a>
2217
+
2218
+</li>
2219
+
2220
+ <li class="md-nav__item">
2221
+ <a href="#video_processor.agent.skills.base.Skill.execute" class="md-nav__link">
2222
+ <span class="md-ellipsis">
2223
+
2224
+ execute
2225
+
2226
+ </span>
2227
+ </a>
2228
+
2229
+</li>
2230
+
2231
+ </ul>
2232
+ </nav>
2233
+
2234
+</li>
2235
+
2236
+ <li class="md-nav__item">
2237
+ <a href="#video_processor.agent.skills.base.get_skill" class="md-nav__link">
2238
+ <span class="md-ellipsis">
2239
+
2240
+ get_skill
2241
+
2242
+ </span>
2243
+ </a>
2244
+
2245
+</li>
2246
+
2247
+ <li class="md-nav__item">
2248
+ <a href="#video_processor.agent.skills.base.list_skills" class="md-nav__link">
2249
+ <span class="md-ellipsis">
2250
+
2251
+ list_skills
2252
+
2253
+ </span>
2254
+ </a>
2255
+
2256
+</li>
2257
+
2258
+ <li class="md-nav__item">
2259
+ <a href="#video_processor.agent.skills.base.register_skill" class="md-nav__link">
2260
+ <span class="md-ellipsis">
2261
+
2262
+ register_skill
2263
+
2264
+ </span>
2265
+ </a>
2266
+
2267
+</li>
2268
+
2269
+ </ul>
2270
+ </nav>
2271
+
2272
+</li>
2273
+
2274
+ <li class="md-nav__item">
2275
+ <a href="#video_processor.agent.kb_context" class="md-nav__link">
2276
+ <span class="md-ellipsis">
2277
+
2278
+ kb_context
2279
+
2280
+ </span>
2281
+ </a>
2282
+
2283
+ <nav class="md-nav" aria-label="kb_context">
2284
+ <ul class="md-nav__list">
2285
+
2286
+ <li class="md-nav__item">
2287
+ <a href="#video_processor.agent.kb_context.KBContext" class="md-nav__link">
2288
+ <span class="md-ellipsis">
2289
+
2290
+ KBContext
2291
+
2292
+ </span>
2293
+ </a>
2294
+
2295
+ <nav class="md-nav" aria-label="KBContext">
2296
+ <ul class="md-nav__list">
2297
+
2298
+ <li class="md-nav__item">
2299
+ <a href="#video_processor.agent.kb_context.KBContext.knowledge_graph" class="md-nav__link">
2300
+ <span class="md-ellipsis">
2301
+
2302
+ knowledge_graph
2303
+
2304
+ </span>
2305
+ </a>
2306
+
2307
+</li>
2308
+
2309
+ <li class="md-nav__item">
2310
+ <a href="#video_processor.agent.kb_context.KBContext.query_engine" class="md-nav__link">
2311
+ <span class="md-ellipsis">
2312
+
2313
+ query_engine
2314
+
2315
+ </span>
2316
+ </a>
2317
+
2318
+</li>
2319
+
2320
+ <li class="md-nav__item">
2321
+ <a href="#video_processor.agent.kb_context.KBContext.sources" class="md-nav__link">
2322
+ <span class="md-ellipsis">
2323
+
2324
+ sources
2325
+
2326
+ </span>
2327
+ </a>
2328
+
2329
+</li>
2330
+
2331
+ <li class="md-nav__item">
2332
+ <a href="#video_processor.agent.kb_context.KBContext.add_source" class="md-nav__link">
2333
+ <span class="md-ellipsis">
2334
+
2335
+ add_source
2336
+
2337
+ </span>
2338
+ </a>
2339
+
2340
+</li>
2341
+
2342
+ <li class="md-nav__item">
2343
+ <a href="#video_processor.agent.kb_context.KBContext.auto_discover" class="md-nav__link">
2344
+ <span class="md-ellipsis">
2345
+
2346
+ auto_discover
2347
+
2348
+ </span>
2349
+ </a>
2350
+
2351
+</li>
2352
+
2353
+ <li class="md-nav__item">
2354
+ <a href="#video_processor.agent.kb_context.KBContext.load" class="md-nav__link">
2355
+ <span class="md-ellipsis">
2356
+
2357
+ load
2358
+
2359
+ </span>
2360
+ </a>
2361
+
2362
+</li>
2363
+
2364
+ <li class="md-nav__item">
2365
+ <a href="#video_processor.agent.kb_context.KBContext.summary" class="md-nav__link">
2366
+ <span class="md-ellipsis">
2367
+
2368
+ summary
2369
+
2370
+ </span>
2371
+ </a>
2372
+
2373
+</li>
2374
+
2375
+ </ul>
2376
+ </nav>
2377
+
2378
+</li>
2379
+
2380
+ </ul>
2381
+ </nav>
2382
+
2383
+</li>
2384
+
2385
+ <li class="md-nav__item">
2386
+ <a href="#overview" class="md-nav__link">
2387
+ <span class="md-ellipsis">
2388
+
2389
+ Overview
2390
+
2391
+ </span>
2392
+ </a>
2393
+
2394
+</li>
2395
+
2396
+ <li class="md-nav__item">
2397
+ <a href="#planningagent" class="md-nav__link">
2398
+ <span class="md-ellipsis">
2399
+
2400
+ PlanningAgent
2401
+
2402
+ </span>
2403
+ </a>
2404
+
2405
+ <nav class="md-nav" aria-label="PlanningAgent">
2406
+ <ul class="md-nav__list">
2407
+
2408
+ <li class="md-nav__item">
2409
+ <a href="#constructor" class="md-nav__link">
2410
+ <span class="md-ellipsis">
2411
+
2412
+ Constructor
2413
+
2414
+ </span>
2415
+ </a>
2416
+
2417
+</li>
2418
+
2419
+ <li class="md-nav__item">
2420
+ <a href="#from_kb_paths" class="md-nav__link">
2421
+ <span class="md-ellipsis">
2422
+
2423
+ from_kb_paths()
2424
+
2425
+ </span>
2426
+ </a>
2427
+
2428
+</li>
2429
+
2430
+ <li class="md-nav__item">
2431
+ <a href="#execute" class="md-nav__link">
2432
+ <span class="md-ellipsis">
2433
+
2434
+ execute()
2435
+
2436
+ </span>
2437
+ </a>
2438
+
2439
+</li>
2440
+
2441
+ <li class="md-nav__item">
2442
+ <a href="#chat" class="md-nav__link">
2443
+ <span class="md-ellipsis">
2444
+
2445
+ chat()
2446
+
2447
+ </span>
2448
+ </a>
2449
+
2450
+</li>
2451
+
2452
+ </ul>
2453
+ </nav>
2454
+
2455
+</li>
2456
+
2457
+ <li class="md-nav__item">
2458
+ <a href="#agentcontext" class="md-nav__link">
2459
+ <span class="md-ellipsis">
2460
+
2461
+ AgentContext
2462
+
2463
+ </span>
2464
+ </a>
2465
+
2466
+</li>
2467
+
2468
+ <li class="md-nav__item">
2469
+ <a href="#skill-abc" class="md-nav__link">
2470
+ <span class="md-ellipsis">
2471
+
2472
+ Skill (ABC)
2473
+
2474
+ </span>
2475
+ </a>
2476
+
2477
+ <nav class="md-nav" aria-label="Skill (ABC)">
2478
+ <ul class="md-nav__list">
2479
+
2480
+ <li class="md-nav__item">
2481
+ <a href="#execute_1" class="md-nav__link">
2482
+ <span class="md-ellipsis">
2483
+
2484
+ execute()
2485
+
2486
+ </span>
2487
+ </a>
2488
+
2489
+</li>
2490
+
2491
+ <li class="md-nav__item">
2492
+ <a href="#can_execute" class="md-nav__link">
2493
+ <span class="md-ellipsis">
2494
+
2495
+ can_execute()
2496
+
2497
+ </span>
2498
+ </a>
2499
+
2500
+</li>
2501
+
2502
+ <li class="md-nav__item">
2503
+ <a href="#implementing-a-custom-skill" class="md-nav__link">
2504
+ <span class="md-ellipsis">
2505
+
2506
+ Implementing a custom skill
2507
+
2508
+ </span>
2509
+ </a>
2510
+
2511
+</li>
2512
+
2513
+ </ul>
2514
+ </nav>
2515
+
2516
+</li>
2517
+
2518
+ <li class="md-nav__item">
2519
+ <a href="#artifact" class="md-nav__link">
2520
+ <span class="md-ellipsis">
2521
+
2522
+ Artifact
2523
+
2524
+ </span>
2525
+ </a>
2526
+
2527
+</li>
2528
+
2529
+ <li class="md-nav__item">
2530
+ <a href="#skill-registry-functions" class="md-nav__link">
2531
+ <span class="md-ellipsis">
2532
+
2533
+ Skill Registry Functions
2534
+
2535
+ </span>
2536
+ </a>
2537
+
2538
+ <nav class="md-nav" aria-label="Skill Registry Functions">
2539
+ <ul class="md-nav__list">
2540
+
2541
+ <li class="md-nav__item">
2542
+ <a href="#register_skill" class="md-nav__link">
2543
+ <span class="md-ellipsis">
2544
+
2545
+ register_skill()
2546
+
2547
+ </span>
2548
+ </a>
2549
+
2550
+</li>
2551
+
2552
+ <li class="md-nav__item">
2553
+ <a href="#get_skill" class="md-nav__link">
2554
+ <span class="md-ellipsis">
2555
+
2556
+ get_skill()
2557
+
2558
+ </span>
2559
+ </a>
2560
+
2561
+</li>
2562
+
2563
+ <li class="md-nav__item">
2564
+ <a href="#list_skills" class="md-nav__link">
2565
+ <span class="md-ellipsis">
2566
+
2567
+ list_skills()
2568
+
2569
+ </span>
2570
+ </a>
2571
+
2572
+</li>
2573
+
2574
+ </ul>
2575
+ </nav>
2576
+
2577
+</li>
2578
+
2579
+ <li class="md-nav__item">
2580
+ <a href="#kbcontext" class="md-nav__link">
2581
+ <span class="md-ellipsis">
2582
+
2583
+ KBContext
2584
+
2585
+ </span>
2586
+ </a>
2587
+
2588
+ <nav class="md-nav" aria-label="KBContext">
2589
+ <ul class="md-nav__list">
2590
+
2591
+ <li class="md-nav__item">
2592
+ <a href="#constructor_1" class="md-nav__link">
2593
+ <span class="md-ellipsis">
2594
+
2595
+ Constructor
2596
+
2597
+ </span>
2598
+ </a>
2599
+
2600
+</li>
2601
+
2602
+ <li class="md-nav__item">
2603
+ <a href="#add_source" class="md-nav__link">
2604
+ <span class="md-ellipsis">
2605
+
2606
+ add_source()
2607
+
2608
+ </span>
2609
+ </a>
2610
+
2611
+</li>
2612
+
2613
+ <li class="md-nav__item">
2614
+ <a href="#load" class="md-nav__link">
2615
+ <span class="md-ellipsis">
2616
+
2617
+ load()
2618
+
2619
+ </span>
2620
+ </a>
2621
+
2622
+</li>
2623
+
2624
+ <li class="md-nav__item">
2625
+ <a href="#properties" class="md-nav__link">
2626
+ <span class="md-ellipsis">
2627
+
2628
+ Properties
2629
+
2630
+ </span>
2631
+ </a>
2632
+
2633
+</li>
2634
+
2635
+ <li class="md-nav__item">
2636
+ <a href="#summary" class="md-nav__link">
2637
+ <span class="md-ellipsis">
2638
+
2639
+ summary()
2640
+
2641
+ </span>
2642
+ </a>
2643
+
2644
+</li>
2645
+
2646
+ <li class="md-nav__item">
2647
+ <a href="#auto_discover" class="md-nav__link">
2648
+ <span class="md-ellipsis">
2649
+
2650
+ auto_discover()
2651
+
2652
+ </span>
2653
+ </a>
2654
+
2655
+</li>
2656
+
2657
+ <li class="md-nav__item">
2658
+ <a href="#usage-examples" class="md-nav__link">
2659
+ <span class="md-ellipsis">
2660
+
2661
+ Usage examples
2662
+
2663
+ </span>
2664
+ </a>
2665
+
2666
+</li>
2667
+
2668
+ </ul>
2669
+ </nav>
2670
+
2671
+</li>
2672
+
2673
+ </ul>
2674
+
2675
+</nav>
2676
+ </div>
2677
+ </div>
2678
+ </div>
2679
+
2680
+
2681
+
2682
+ <div class="md-content" data-md-component="content">
2683
+
2684
+ <article class="md-content__inner md-typeset">
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+
2691
+
2692
+
2693
+<h1 id="agent-api-reference">Agent API Reference<a class="headerlink" href="#agent-api-reference" title="Permanent link">&para;</a></h1>
2694
+
2695
+
2696
+<div class="doc doc-object doc-module">
2697
+
2698
+
2699
+
2700
+<h2 id="video_processor.agent.agent_loop" class="doc doc-heading">
2701
+ <code>video_processor.agent.agent_loop</code>
2702
+
2703
+
2704
+<a href="#video_processor.agent.agent_loop" class="headerlink" title="Permanent link">&para;</a></h2>
2705
+
2706
+ <div class="doc doc-contents first">
2707
+
2708
+ <p>Planning agent loop for synthesizing knowledge into artifacts.</p>
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2719
+<div class="doc doc-children">
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+
2727
+
2728
+
2729
+<div class="doc doc-object doc-class">
2730
+
2731
+
2732
+
2733
+<h3 id="video_processor.agent.agent_loop.PlanningAgent" class="doc doc-heading">
2734
+ <code>PlanningAgent</code>
2735
+
2736
+
2737
+<a href="#video_processor.agent.agent_loop.PlanningAgent" class="headerlink" title="Permanent link">&para;</a></h3>
2738
+
2739
+
2740
+ <div class="doc doc-contents ">
2741
+
2742
+
2743
+
2744
+ <p>AI agent that synthesizes knowledge into planning artifacts.</p>
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+
2752
+
2753
+ <details class="mkdocstrings-source">
2754
+ <summary>Source code in <code>video_processor/agent/agent_loop.py</code></summary>
2755
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
2756
+<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
2757
+<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
2758
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
2759
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
2760
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
2761
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
2762
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
2763
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
2764
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
2765
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
2766
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
2767
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
2768
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
2769
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
2770
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
2771
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
2772
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
2773
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
2774
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
2775
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
2776
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
2777
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
2778
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
2779
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
2780
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
2781
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
2782
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
2783
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
2784
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
2785
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
2786
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
2787
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
2788
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
2789
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
2790
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
2791
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
2792
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
2793
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
2794
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
2795
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
2796
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
2797
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
2798
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
2799
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
2800
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
2801
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
2802
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
2803
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
2804
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
2805
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
2806
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
2807
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
2808
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
2809
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
2810
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
2811
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
2812
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
2813
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
2814
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2815
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2816
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2817
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2818
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2819
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2820
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2821
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2822
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2823
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2824
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2825
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2826
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2827
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2828
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2829
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2830
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2831
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2832
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2833
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2834
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2835
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2836
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2837
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2838
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2839
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2840
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2841
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2842
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2843
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2844
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2845
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2846
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2847
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2848
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2849
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2850
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2851
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2852
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
2853
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
2854
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
2855
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
2856
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
2857
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
2858
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
2859
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
2860
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
2861
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
2862
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
2863
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
2864
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
2865
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
2866
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
2867
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2868
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2869
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2870
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2871
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2872
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2873
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2874
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2875
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2876
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2877
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
2878
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
2879
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
2880
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
2881
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
2882
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
2883
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
2884
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
2885
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
2886
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
2887
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
2888
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
2889
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
2890
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
2891
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
2892
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
2893
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
2894
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
2895
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
2896
+<span class="normal"><a href="#__codelineno-0-159">159</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="k">class</span><span class="w"> </span><span class="nc">PlanningAgent</span><span class="p">:</span>
2897
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;AI agent that synthesizes knowledge into planning artifacts.&quot;&quot;&quot;</span>
2898
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
2899
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">AgentContext</span><span class="p">):</span>
2900
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="n">context</span>
2901
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
2902
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="nd">@classmethod</span>
2903
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span><span class="w"> </span><span class="nf">from_kb_paths</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">kb_paths</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Path</span><span class="p">],</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;PlanningAgent&quot;</span><span class="p">:</span>
2904
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an agent from knowledge base paths.&quot;&quot;&quot;</span>
2905
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">kb</span> <span class="o">=</span> <span class="n">KBContext</span><span class="p">()</span>
2906
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">kb_paths</span><span class="p">:</span>
2907
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">kb</span><span class="o">.</span><span class="n">add_source</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
2908
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">kb</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
2909
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2910
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">context</span> <span class="o">=</span> <span class="n">AgentContext</span><span class="p">(</span>
2911
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">knowledge_graph</span><span class="o">=</span><span class="n">kb</span><span class="o">.</span><span class="n">knowledge_graph</span><span class="p">,</span>
2912
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">query_engine</span><span class="o">=</span><span class="n">kb</span><span class="o">.</span><span class="n">query_engine</span><span class="p">,</span>
2913
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">,</span>
2914
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">)</span>
2915
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
2916
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
2917
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">def</span><span class="w"> </span><span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Artifact</span><span class="p">]:</span>
2918
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute a user request by selecting and running appropriate skills.&quot;&quot;&quot;</span>
2919
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="c1"># Step 1: Build context summary for LLM</span>
2920
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
2921
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="p">:</span>
2922
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">stats</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span>
2923
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="n">stats</span><span class="o">.</span><span class="n">to_text</span><span class="p">()</span>
2924
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
2925
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">available_skills</span> <span class="o">=</span> <span class="n">list_skills</span><span class="p">()</span>
2926
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">skill_descriptions</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;- </span><span class="si">{</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">s</span><span class="o">.</span><span class="n">description</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">available_skills</span><span class="p">)</span>
2927
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
2928
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="c1"># Step 2: Ask LLM to select skills</span>
2929
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">plan_prompt</span> <span class="o">=</span> <span class="p">(</span>
2930
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;You are a planning agent. Given a user request and available skills, &quot;</span>
2931
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;select which skills to execute and in what order.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
2932
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="sa">f</span><span class="s2">&quot;Knowledge base:</span><span class="se">\n</span><span class="si">{</span><span class="n">kb_summary</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
2933
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="sa">f</span><span class="s2">&quot;Available skills:</span><span class="se">\n</span><span class="si">{</span><span class="n">skill_descriptions</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
2934
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="sa">f</span><span class="s2">&quot;User request: </span><span class="si">{</span><span class="n">request</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
2935
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">&quot;Return a JSON array of skill names to execute in order:</span><span class="se">\n</span><span class="s2">&quot;</span>
2936
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s1">&#39;[{&quot;skill&quot;: &quot;skill_name&quot;, &quot;params&quot;: </span><span class="si">{}</span><span class="s1">}]</span><span class="se">\n</span><span class="s1">&#39;</span>
2937
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="s2">&quot;Return ONLY the JSON array.&quot;</span>
2938
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="p">)</span>
2939
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
2940
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="p">:</span>
2941
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="c1"># No LLM -- try to match skills by keyword</span>
2942
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_keyword_match_execute</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
2943
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a>
2944
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">raw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="o">.</span><span class="n">chat</span><span class="p">(</span>
2945
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">[{</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;user&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">plan_prompt</span><span class="p">}],</span>
2946
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">max_tokens</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
2947
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">temperature</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span>
2948
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="p">)</span>
2949
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a>
2950
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.utils.json_parsing</span><span class="w"> </span><span class="kn">import</span> <span class="n">parse_json_from_response</span>
2951
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
2952
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">plan</span> <span class="o">=</span> <span class="n">parse_json_from_response</span><span class="p">(</span><span class="n">raw</span><span class="p">)</span>
2953
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
2954
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">artifacts</span> <span class="o">=</span> <span class="p">[]</span>
2955
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plan</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
2956
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">plan</span><span class="p">:</span>
2957
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">step</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;skill&quot;</span> <span class="ow">in</span> <span class="n">step</span><span class="p">:</span>
2958
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">skill</span> <span class="o">=</span> <span class="n">get_skill</span><span class="p">(</span><span class="n">step</span><span class="p">[</span><span class="s2">&quot;skill&quot;</span><span class="p">])</span>
2959
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="n">skill</span> <span class="ow">and</span> <span class="n">skill</span><span class="o">.</span><span class="n">can_execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">):</span>
2960
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">params</span> <span class="o">=</span> <span class="n">step</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="p">{})</span>
2961
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="n">artifact</span> <span class="o">=</span> <span class="n">skill</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="o">**</span><span class="n">params</span><span class="p">)</span>
2962
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">artifacts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">artifact</span><span class="p">)</span>
2963
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">artifacts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">artifact</span><span class="p">)</span>
2964
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
2965
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="n">artifacts</span>
2966
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
2967
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">def</span><span class="w"> </span><span class="nf">_keyword_match_execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Artifact</span><span class="p">]:</span>
2968
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Fallback: match skills by keywords in the request.&quot;&quot;&quot;</span>
2969
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">request_lower</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
2970
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="n">artifacts</span> <span class="o">=</span> <span class="p">[]</span>
2971
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">for</span> <span class="n">skill</span> <span class="ow">in</span> <span class="n">list_skills</span><span class="p">():</span>
2972
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="c1"># Simple keyword matching</span>
2973
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">skill_words</span> <span class="o">=</span> <span class="n">skill</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="s2">&quot; &quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
2974
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">word</span> <span class="ow">in</span> <span class="n">request_lower</span> <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">skill_words</span><span class="p">):</span>
2975
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">if</span> <span class="n">skill</span><span class="o">.</span><span class="n">can_execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">):</span>
2976
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="n">artifact</span> <span class="o">=</span> <span class="n">skill</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">)</span>
2977
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="n">artifacts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">artifact</span><span class="p">)</span>
2978
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">artifacts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">artifact</span><span class="p">)</span>
2979
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="n">artifacts</span>
2980
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a>
2981
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="k">def</span><span class="w"> </span><span class="nf">chat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
2982
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Interactive chat -- accumulate context and answer questions.&quot;&quot;&quot;</span>
2983
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">conversation_history</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;user&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">message</span><span class="p">})</span>
2984
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
2985
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="p">:</span>
2986
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="s2">&quot;Agent requires a configured LLM provider for chat mode.&quot;</span>
2987
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
2988
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="c1"># Build system context</span>
2989
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
2990
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="p">:</span>
2991
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">stats</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span>
2992
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">Knowledge base:</span><span class="se">\n</span><span class="si">{</span><span class="n">stats</span><span class="o">.</span><span class="n">to_text</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
2993
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a>
2994
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="n">artifacts_summary</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
2995
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">artifacts</span><span class="p">:</span>
2996
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">artifacts_summary</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">Generated artifacts:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
2997
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="sa">f</span><span class="s2">&quot;- </span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">artifact_type</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">artifacts</span>
2998
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">)</span>
2999
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
3000
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">system_msg</span> <span class="o">=</span> <span class="p">(</span>
3001
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="s2">&quot;You are PlanOpticon, an AI planning companion built into the PlanOpticon CLI. &quot;</span>
3002
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="s2">&quot;PlanOpticon is a video analysis and knowledge extraction tool that processes &quot;</span>
3003
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="s2">&quot;recordings into structured knowledge graphs.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3004
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="s2">&quot;You are running inside the interactive companion REPL. The user can use these &quot;</span>
3005
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="s2">&quot;built-in commands (suggest them when relevant):</span><span class="se">\n</span><span class="s2">&quot;</span>
3006
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="s2">&quot; /status - Show workspace status (loaded KG, videos, docs)</span><span class="se">\n</span><span class="s2">&quot;</span>
3007
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">&quot; /entities [--type T] - List knowledge graph entities</span><span class="se">\n</span><span class="s2">&quot;</span>
3008
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="s2">&quot; /search TERM - Search entities by name</span><span class="se">\n</span><span class="s2">&quot;</span>
3009
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="s2">&quot; /neighbors ENTITY - Show entity relationships</span><span class="se">\n</span><span class="s2">&quot;</span>
3010
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="s2">&quot; /export FORMAT - Export KG (markdown, obsidian, notion, csv)</span><span class="se">\n</span><span class="s2">&quot;</span>
3011
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="s2">&quot; /analyze PATH - Analyze a video or document</span><span class="se">\n</span><span class="s2">&quot;</span>
3012
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="s2">&quot; /ingest PATH - Ingest a file into the knowledge graph</span><span class="se">\n</span><span class="s2">&quot;</span>
3013
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot; /auth SERVICE - Authenticate with a service &quot;</span>
3014
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;(zoom, google, microsoft, notion, dropbox, github)</span><span class="se">\n</span><span class="s2">&quot;</span>
3015
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot; /provider [NAME] - List or switch LLM provider</span><span class="se">\n</span><span class="s2">&quot;</span>
3016
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="s2">&quot; /model [NAME] - Show or switch chat model</span><span class="se">\n</span><span class="s2">&quot;</span>
3017
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="s2">&quot; /plan - Generate a project plan</span><span class="se">\n</span><span class="s2">&quot;</span>
3018
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="s2">&quot; /prd - Generate a PRD</span><span class="se">\n</span><span class="s2">&quot;</span>
3019
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="s2">&quot; /tasks - Generate a task breakdown</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3020
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="s2">&quot;PlanOpticon CLI commands the user can run outside the REPL:</span><span class="se">\n</span><span class="s2">&quot;</span>
3021
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot; planopticon auth zoom|google|microsoft - Authenticate with cloud services</span><span class="se">\n</span><span class="s2">&quot;</span>
3022
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">&quot; planopticon recordings zoom-list|teams-list|meet-list - List cloud recordings</span><span class="se">\n</span><span class="s2">&quot;</span>
3023
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="s2">&quot; planopticon analyze -i VIDEO - Analyze a video file</span><span class="se">\n</span><span class="s2">&quot;</span>
3024
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="s2">&quot; planopticon query - Query the knowledge graph</span><span class="se">\n</span><span class="s2">&quot;</span>
3025
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="s2">&quot; planopticon export FORMAT PATH - Export knowledge graph</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3026
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kb_summary</span><span class="si">}{</span><span class="n">artifacts_summary</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3027
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="s2">&quot;Help the user with their planning tasks. When they ask about capabilities, &quot;</span>
3028
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="s2">&quot;refer them to the appropriate built-in commands. Ask clarifying questions &quot;</span>
3029
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="s2">&quot;to gather requirements. When ready, suggest using specific skills or commands &quot;</span>
3030
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">&quot;to generate artifacts.&quot;</span>
3031
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="p">)</span>
3032
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
3033
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">messages</span> <span class="o">=</span> <span class="p">[{</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;system&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">system_msg</span><span class="p">}]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">conversation_history</span>
3034
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
3035
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="o">.</span><span class="n">chat</span><span class="p">(</span><span class="n">messages</span><span class="p">,</span> <span class="n">max_tokens</span><span class="o">=</span><span class="mi">2048</span><span class="p">,</span> <span class="n">temperature</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
3036
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">conversation_history</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;assistant&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">response</span><span class="p">})</span>
3037
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="k">return</span> <span class="n">response</span>
3038
+</code></pre></div></td></tr></table></div>
3039
+ </details>
3040
+
3041
+
3042
+
3043
+<div class="doc doc-children">
3044
+
3045
+
3046
+
3047
+
3048
+
3049
+
3050
+
3051
+
3052
+
3053
+
3054
+<div class="doc doc-object doc-function">
3055
+
3056
+
3057
+<h4 id="video_processor.agent.agent_loop.PlanningAgent.chat" class="doc doc-heading">
3058
+ <code class="highlight language-python"><span class="n">chat</span><span class="p">(</span><span class="n">message</span><span class="p">)</span></code>
3059
+
3060
+<a href="#video_processor.agent.agent_loop.PlanningAgent.chat" class="headerlink" title="Permanent link">&para;</a></h4>
3061
+
3062
+
3063
+ <div class="doc doc-contents ">
3064
+
3065
+ <p>Interactive chat -- accumulate context and answer questions.</p>
3066
+
3067
+
3068
+ <details class="mkdocstrings-source">
3069
+ <summary>Source code in <code>video_processor/agent/agent_loop.py</code></summary>
3070
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-103">103</a></span>
3071
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
3072
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
3073
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
3074
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
3075
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
3076
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
3077
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
3078
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
3079
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
3080
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
3081
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
3082
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
3083
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
3084
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
3085
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
3086
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
3087
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
3088
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
3089
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
3090
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
3091
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
3092
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
3093
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
3094
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
3095
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
3096
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
3097
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3098
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3099
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3100
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3101
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
3102
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
3103
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
3104
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3105
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3106
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3107
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3108
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3109
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3110
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3111
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3112
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3113
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3114
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3115
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3116
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3117
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3118
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3119
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3120
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3121
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3122
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3123
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3124
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3125
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3126
+<span class="normal"><a href="#__codelineno-0-159">159</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="k">def</span><span class="w"> </span><span class="nf">chat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
3127
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Interactive chat -- accumulate context and answer questions.&quot;&quot;&quot;</span>
3128
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">conversation_history</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;user&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">message</span><span class="p">})</span>
3129
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
3130
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="p">:</span>
3131
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="s2">&quot;Agent requires a configured LLM provider for chat mode.&quot;</span>
3132
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
3133
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="c1"># Build system context</span>
3134
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
3135
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="p">:</span>
3136
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">stats</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span>
3137
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">Knowledge base:</span><span class="se">\n</span><span class="si">{</span><span class="n">stats</span><span class="o">.</span><span class="n">to_text</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
3138
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a>
3139
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="n">artifacts_summary</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
3140
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">artifacts</span><span class="p">:</span>
3141
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">artifacts_summary</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">Generated artifacts:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
3142
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="sa">f</span><span class="s2">&quot;- </span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">artifact_type</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">artifacts</span>
3143
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">)</span>
3144
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
3145
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">system_msg</span> <span class="o">=</span> <span class="p">(</span>
3146
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="s2">&quot;You are PlanOpticon, an AI planning companion built into the PlanOpticon CLI. &quot;</span>
3147
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="s2">&quot;PlanOpticon is a video analysis and knowledge extraction tool that processes &quot;</span>
3148
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="s2">&quot;recordings into structured knowledge graphs.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3149
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="s2">&quot;You are running inside the interactive companion REPL. The user can use these &quot;</span>
3150
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="s2">&quot;built-in commands (suggest them when relevant):</span><span class="se">\n</span><span class="s2">&quot;</span>
3151
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="s2">&quot; /status - Show workspace status (loaded KG, videos, docs)</span><span class="se">\n</span><span class="s2">&quot;</span>
3152
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">&quot; /entities [--type T] - List knowledge graph entities</span><span class="se">\n</span><span class="s2">&quot;</span>
3153
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="s2">&quot; /search TERM - Search entities by name</span><span class="se">\n</span><span class="s2">&quot;</span>
3154
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="s2">&quot; /neighbors ENTITY - Show entity relationships</span><span class="se">\n</span><span class="s2">&quot;</span>
3155
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="s2">&quot; /export FORMAT - Export KG (markdown, obsidian, notion, csv)</span><span class="se">\n</span><span class="s2">&quot;</span>
3156
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="s2">&quot; /analyze PATH - Analyze a video or document</span><span class="se">\n</span><span class="s2">&quot;</span>
3157
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="s2">&quot; /ingest PATH - Ingest a file into the knowledge graph</span><span class="se">\n</span><span class="s2">&quot;</span>
3158
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot; /auth SERVICE - Authenticate with a service &quot;</span>
3159
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;(zoom, google, microsoft, notion, dropbox, github)</span><span class="se">\n</span><span class="s2">&quot;</span>
3160
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot; /provider [NAME] - List or switch LLM provider</span><span class="se">\n</span><span class="s2">&quot;</span>
3161
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="s2">&quot; /model [NAME] - Show or switch chat model</span><span class="se">\n</span><span class="s2">&quot;</span>
3162
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="s2">&quot; /plan - Generate a project plan</span><span class="se">\n</span><span class="s2">&quot;</span>
3163
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="s2">&quot; /prd - Generate a PRD</span><span class="se">\n</span><span class="s2">&quot;</span>
3164
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="s2">&quot; /tasks - Generate a task breakdown</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3165
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="s2">&quot;PlanOpticon CLI commands the user can run outside the REPL:</span><span class="se">\n</span><span class="s2">&quot;</span>
3166
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot; planopticon auth zoom|google|microsoft - Authenticate with cloud services</span><span class="se">\n</span><span class="s2">&quot;</span>
3167
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">&quot; planopticon recordings zoom-list|teams-list|meet-list - List cloud recordings</span><span class="se">\n</span><span class="s2">&quot;</span>
3168
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="s2">&quot; planopticon analyze -i VIDEO - Analyze a video file</span><span class="se">\n</span><span class="s2">&quot;</span>
3169
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="s2">&quot; planopticon query - Query the knowledge graph</span><span class="se">\n</span><span class="s2">&quot;</span>
3170
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="s2">&quot; planopticon export FORMAT PATH - Export knowledge graph</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3171
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kb_summary</span><span class="si">}{</span><span class="n">artifacts_summary</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3172
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="s2">&quot;Help the user with their planning tasks. When they ask about capabilities, &quot;</span>
3173
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="s2">&quot;refer them to the appropriate built-in commands. Ask clarifying questions &quot;</span>
3174
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="s2">&quot;to gather requirements. When ready, suggest using specific skills or commands &quot;</span>
3175
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">&quot;to generate artifacts.&quot;</span>
3176
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="p">)</span>
3177
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
3178
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">messages</span> <span class="o">=</span> <span class="p">[{</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;system&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">system_msg</span><span class="p">}]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">conversation_history</span>
3179
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
3180
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="o">.</span><span class="n">chat</span><span class="p">(</span><span class="n">messages</span><span class="p">,</span> <span class="n">max_tokens</span><span class="o">=</span><span class="mi">2048</span><span class="p">,</span> <span class="n">temperature</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
3181
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">conversation_history</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;assistant&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">response</span><span class="p">})</span>
3182
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="k">return</span> <span class="n">response</span>
3183
+</code></pre></div></td></tr></table></div>
3184
+ </details>
3185
+ </div>
3186
+
3187
+</div>
3188
+
3189
+<div class="doc doc-object doc-function">
3190
+
3191
+
3192
+<h4 id="video_processor.agent.agent_loop.PlanningAgent.execute" class="doc doc-heading">
3193
+ <code class="highlight language-python"><span class="n">execute</span><span class="p">(</span><span class="n">request</span><span class="p">)</span></code>
3194
+
3195
+<a href="#video_processor.agent.agent_loop.PlanningAgent.execute" class="headerlink" title="Permanent link">&para;</a></h4>
3196
+
3197
+
3198
+ <div class="doc doc-contents ">
3199
+
3200
+ <p>Execute a user request by selecting and running appropriate skills.</p>
3201
+
3202
+
3203
+ <details class="mkdocstrings-source">
3204
+ <summary>Source code in <code>video_processor/agent/agent_loop.py</code></summary>
3205
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-39">39</a></span>
3206
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
3207
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
3208
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
3209
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
3210
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
3211
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3212
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
3213
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
3214
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
3215
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
3216
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
3217
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
3218
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
3219
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
3220
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3221
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
3222
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
3223
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3224
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3225
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3226
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3227
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
3228
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
3229
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
3230
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3231
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3232
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3233
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3234
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3235
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3236
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3237
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3238
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3239
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3240
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3241
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3242
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3243
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3244
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3245
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
3246
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
3247
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
3248
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
3249
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
3250
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
3251
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
3252
+<span class="normal"><a href="#__codelineno-0-86">86</a></span>
3253
+<span class="normal"><a href="#__codelineno-0-87">87</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="k">def</span><span class="w"> </span><span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Artifact</span><span class="p">]:</span>
3254
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute a user request by selecting and running appropriate skills.&quot;&quot;&quot;</span>
3255
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="c1"># Step 1: Build context summary for LLM</span>
3256
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
3257
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="p">:</span>
3258
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">stats</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">query_engine</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span>
3259
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">kb_summary</span> <span class="o">=</span> <span class="n">stats</span><span class="o">.</span><span class="n">to_text</span><span class="p">()</span>
3260
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
3261
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">available_skills</span> <span class="o">=</span> <span class="n">list_skills</span><span class="p">()</span>
3262
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">skill_descriptions</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;- </span><span class="si">{</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">s</span><span class="o">.</span><span class="n">description</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">available_skills</span><span class="p">)</span>
3263
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
3264
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="c1"># Step 2: Ask LLM to select skills</span>
3265
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">plan_prompt</span> <span class="o">=</span> <span class="p">(</span>
3266
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;You are a planning agent. Given a user request and available skills, &quot;</span>
3267
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;select which skills to execute and in what order.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3268
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="sa">f</span><span class="s2">&quot;Knowledge base:</span><span class="se">\n</span><span class="si">{</span><span class="n">kb_summary</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3269
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="sa">f</span><span class="s2">&quot;Available skills:</span><span class="se">\n</span><span class="si">{</span><span class="n">skill_descriptions</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3270
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="sa">f</span><span class="s2">&quot;User request: </span><span class="si">{</span><span class="n">request</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
3271
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">&quot;Return a JSON array of skill names to execute in order:</span><span class="se">\n</span><span class="s2">&quot;</span>
3272
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s1">&#39;[{&quot;skill&quot;: &quot;skill_name&quot;, &quot;params&quot;: </span><span class="si">{}</span><span class="s1">}]</span><span class="se">\n</span><span class="s1">&#39;</span>
3273
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="s2">&quot;Return ONLY the JSON array.&quot;</span>
3274
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="p">)</span>
3275
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
3276
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="p">:</span>
3277
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="c1"># No LLM -- try to match skills by keyword</span>
3278
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_keyword_match_execute</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
3279
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a>
3280
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">raw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span><span class="o">.</span><span class="n">chat</span><span class="p">(</span>
3281
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">[{</span><span class="s2">&quot;role&quot;</span><span class="p">:</span> <span class="s2">&quot;user&quot;</span><span class="p">,</span> <span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">plan_prompt</span><span class="p">}],</span>
3282
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">max_tokens</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
3283
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">temperature</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span>
3284
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="p">)</span>
3285
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a>
3286
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.utils.json_parsing</span><span class="w"> </span><span class="kn">import</span> <span class="n">parse_json_from_response</span>
3287
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
3288
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">plan</span> <span class="o">=</span> <span class="n">parse_json_from_response</span><span class="p">(</span><span class="n">raw</span><span class="p">)</span>
3289
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
3290
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">artifacts</span> <span class="o">=</span> <span class="p">[]</span>
3291
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plan</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
3292
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">plan</span><span class="p">:</span>
3293
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">step</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;skill&quot;</span> <span class="ow">in</span> <span class="n">step</span><span class="p">:</span>
3294
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">skill</span> <span class="o">=</span> <span class="n">get_skill</span><span class="p">(</span><span class="n">step</span><span class="p">[</span><span class="s2">&quot;skill&quot;</span><span class="p">])</span>
3295
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="n">skill</span> <span class="ow">and</span> <span class="n">skill</span><span class="o">.</span><span class="n">can_execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">):</span>
3296
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">params</span> <span class="o">=</span> <span class="n">step</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="p">{})</span>
3297
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="n">artifact</span> <span class="o">=</span> <span class="n">skill</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="o">**</span><span class="n">params</span><span class="p">)</span>
3298
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">artifacts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">artifact</span><span class="p">)</span>
3299
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="bp">self</span><span class="o">.</span><span class="n">context</span><span class="o">.</span><span class="n">artifacts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">artifact</span><span class="p">)</span>
3300
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
3301
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="n">artifacts</span>
3302
+</code></pre></div></td></tr></table></div>
3303
+ </details>
3304
+ </div>
3305
+
3306
+</div>
3307
+
3308
+<div class="doc doc-object doc-function">
3309
+
3310
+
3311
+<h4 id="video_processor.agent.agent_loop.PlanningAgent.from_kb_paths" class="doc doc-heading">
3312
+ <code class="highlight language-python"><span class="n">from_kb_paths</span><span class="p">(</span><span class="n">kb_paths</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
3313
+
3314
+ <span class="doc doc-labels">
3315
+ <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
3316
+ </span>
3317
+
3318
+<a href="#video_processor.agent.agent_loop.PlanningAgent.from_kb_paths" class="headerlink" title="Permanent link">&para;</a></h4>
3319
+
3320
+
3321
+ <div class="doc doc-contents ">
3322
+
3323
+ <p>Create an agent from knowledge base paths.</p>
3324
+
3325
+
3326
+ <details class="mkdocstrings-source">
3327
+ <summary>Source code in <code>video_processor/agent/agent_loop.py</code></summary>
3328
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-24">24</a></span>
3329
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
3330
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
3331
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
3332
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
3333
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
3334
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
3335
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
3336
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
3337
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
3338
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
3339
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
3340
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
3341
+<span class="normal"><a href="#__codelineno-0-37">37</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="nd">@classmethod</span>
3342
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="k">def</span><span class="w"> </span><span class="nf">from_kb_paths</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">kb_paths</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Path</span><span class="p">],</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;PlanningAgent&quot;</span><span class="p">:</span>
3343
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an agent from knowledge base paths.&quot;&quot;&quot;</span>
3344
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">kb</span> <span class="o">=</span> <span class="n">KBContext</span><span class="p">()</span>
3345
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">kb_paths</span><span class="p">:</span>
3346
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">kb</span><span class="o">.</span><span class="n">add_source</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
3347
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">kb</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
3348
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
3349
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">context</span> <span class="o">=</span> <span class="n">AgentContext</span><span class="p">(</span>
3350
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">knowledge_graph</span><span class="o">=</span><span class="n">kb</span><span class="o">.</span><span class="n">knowledge_graph</span><span class="p">,</span>
3351
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">query_engine</span><span class="o">=</span><span class="n">kb</span><span class="o">.</span><span class="n">query_engine</span><span class="p">,</span>
3352
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">,</span>
3353
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">)</span>
3354
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
3355
+</code></pre></div></td></tr></table></div>
3356
+ </details>
3357
+ </div>
3358
+
3359
+</div>
3360
+
3361
+
3362
+
3363
+ </div>
3364
+
3365
+ </div>
3366
+
3367
+</div>
3368
+
3369
+
3370
+
3371
+
3372
+ </div>
3373
+
3374
+ </div>
3375
+
3376
+</div>
3377
+
3378
+<div class="doc doc-object doc-module">
3379
+
3380
+
3381
+
3382
+<h2 id="video_processor.agent.skills.base" class="doc doc-heading">
3383
+ <code>video_processor.agent.skills.base</code>
3384
+
3385
+
3386
+<a href="#video_processor.agent.skills.base" class="headerlink" title="Permanent link">&para;</a></h2>
3387
+
3388
+ <div class="doc doc-contents first">
3389
+
3390
+ <p>Skill interface for the PlanOpticon planning agent.</p>
3391
+
3392
+
3393
+
3394
+
3395
+
3396
+
3397
+
3398
+
3399
+
3400
+
3401
+<div class="doc doc-children">
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
3411
+<div class="doc doc-object doc-class">
3412
+
3413
+
3414
+
3415
+<h3 id="video_processor.agent.skills.base.AgentContext" class="doc doc-heading">
3416
+ <code>AgentContext</code>
3417
+
3418
+
3419
+ <span class="doc doc-labels">
3420
+ <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
3421
+ </span>
3422
+
3423
+<a href="#video_processor.agent.skills.base.AgentContext" class="headerlink" title="Permanent link">&para;</a></h3>
3424
+
3425
+
3426
+ <div class="doc doc-contents ">
3427
+
3428
+
3429
+
3430
+ <p>Shared context for agent skills.</p>
3431
+
3432
+
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+
3439
+ <details class="mkdocstrings-source">
3440
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3441
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-19">19</a></span>
3442
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
3443
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
3444
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
3445
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
3446
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
3447
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
3448
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
3449
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
3450
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
3451
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
3452
+<span class="normal"><a href="#__codelineno-0-30">30</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="nd">@dataclass</span>
3453
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">class</span><span class="w"> </span><span class="nc">AgentContext</span><span class="p">:</span>
3454
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Shared context for agent skills.&quot;&quot;&quot;</span>
3455
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a>
3456
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">knowledge_graph</span><span class="p">:</span> <span class="n">Any</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># KnowledgeGraph instance</span>
3457
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">query_engine</span><span class="p">:</span> <span class="n">Any</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># GraphQueryEngine instance</span>
3458
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">provider_manager</span><span class="p">:</span> <span class="n">Any</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># ProviderManager instance</span>
3459
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">planning_entities</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
3460
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">user_requirements</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
3461
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">conversation_history</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
3462
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">artifacts</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Artifact</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
3463
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">config</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
3464
+</code></pre></div></td></tr></table></div>
3465
+ </details>
3466
+
3467
+
3468
+
3469
+<div class="doc doc-children">
3470
+
3471
+
3472
+
3473
+
3474
+
3475
+
3476
+
3477
+
3478
+
3479
+
3480
+
3481
+
3482
+ </div>
3483
+
3484
+ </div>
3485
+
3486
+</div>
3487
+
3488
+<div class="doc doc-object doc-class">
3489
+
3490
+
3491
+
3492
+<h3 id="video_processor.agent.skills.base.Artifact" class="doc doc-heading">
3493
+ <code>Artifact</code>
3494
+
3495
+
3496
+ <span class="doc doc-labels">
3497
+ <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
3498
+ </span>
3499
+
3500
+<a href="#video_processor.agent.skills.base.Artifact" class="headerlink" title="Permanent link">&para;</a></h3>
3501
+
3502
+
3503
+ <div class="doc doc-contents ">
3504
+
3505
+
3506
+
3507
+ <p>Output from a skill execution.</p>
3508
+
3509
+
3510
+
3511
+
3512
+
3513
+
3514
+
3515
+
3516
+ <details class="mkdocstrings-source">
3517
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3518
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
3519
+<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
3520
+<span class="normal"><a href="#__codelineno-0-10">10</a></span>
3521
+<span class="normal"><a href="#__codelineno-0-11">11</a></span>
3522
+<span class="normal"><a href="#__codelineno-0-12">12</a></span>
3523
+<span class="normal"><a href="#__codelineno-0-13">13</a></span>
3524
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
3525
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
3526
+<span class="normal"><a href="#__codelineno-0-16">16</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="nd">@dataclass</span>
3527
+<a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="k">class</span><span class="w"> </span><span class="nc">Artifact</span><span class="p">:</span>
3528
+<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Output from a skill execution.&quot;&quot;&quot;</span>
3529
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a>
3530
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
3531
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a> <span class="n">content</span><span class="p">:</span> <span class="nb">str</span> <span class="c1"># The generated content (markdown, json, etc.)</span>
3532
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a> <span class="n">artifact_type</span><span class="p">:</span> <span class="nb">str</span> <span class="c1"># &quot;project_plan&quot;, &quot;prd&quot;, &quot;roadmap&quot;, &quot;task_list&quot;, &quot;document&quot;, &quot;issues&quot;</span>
3533
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a> <span class="nb">format</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;markdown&quot;</span> <span class="c1"># &quot;markdown&quot;, &quot;json&quot;, &quot;mermaid&quot;</span>
3534
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a> <span class="n">metadata</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
3535
+</code></pre></div></td></tr></table></div>
3536
+ </details>
3537
+
3538
+
3539
+
3540
+<div class="doc doc-children">
3541
+
3542
+
3543
+
3544
+
3545
+
3546
+
3547
+
3548
+
3549
+
3550
+
3551
+
3552
+
3553
+ </div>
3554
+
3555
+ </div>
3556
+
3557
+</div>
3558
+
3559
+<div class="doc doc-object doc-class">
3560
+
3561
+
3562
+
3563
+<h3 id="video_processor.agent.skills.base.Skill" class="doc doc-heading">
3564
+ <code>Skill</code>
3565
+
3566
+
3567
+<a href="#video_processor.agent.skills.base.Skill" class="headerlink" title="Permanent link">&para;</a></h3>
3568
+
3569
+
3570
+ <div class="doc doc-contents ">
3571
+ <p class="doc doc-class-bases">
3572
+ Bases: <code><span title="abc.ABC">ABC</span></code></p>
3573
+
3574
+
3575
+
3576
+ <p>Base class for agent skills.</p>
3577
+
3578
+
3579
+
3580
+
3581
+
3582
+
3583
+
3584
+
3585
+ <details class="mkdocstrings-source">
3586
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3587
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-33">33</a></span>
3588
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
3589
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
3590
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
3591
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
3592
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
3593
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
3594
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
3595
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
3596
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
3597
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
3598
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
3599
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3600
+<span class="normal"><a href="#__codelineno-0-46">46</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">class</span><span class="w"> </span><span class="nc">Skill</span><span class="p">(</span><span class="n">ABC</span><span class="p">):</span>
3601
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Base class for agent skills.&quot;&quot;&quot;</span>
3602
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
3603
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
3604
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
3605
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
3606
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="nd">@abstractmethod</span>
3607
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="k">def</span><span class="w"> </span><span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">AgentContext</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Artifact</span><span class="p">:</span>
3608
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute this skill and return an artifact.&quot;&quot;&quot;</span>
3609
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="o">...</span>
3610
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
3611
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">def</span><span class="w"> </span><span class="nf">can_execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">AgentContext</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
3612
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Check if this skill can execute given the current context.&quot;&quot;&quot;</span>
3613
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="n">context</span><span class="o">.</span><span class="n">knowledge_graph</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
3614
+</code></pre></div></td></tr></table></div>
3615
+ </details>
3616
+
3617
+
3618
+
3619
+<div class="doc doc-children">
3620
+
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3627
+
3628
+
3629
+
3630
+<div class="doc doc-object doc-function">
3631
+
3632
+
3633
+<h4 id="video_processor.agent.skills.base.Skill.can_execute" class="doc doc-heading">
3634
+ <code class="highlight language-python"><span class="n">can_execute</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
3635
+
3636
+<a href="#video_processor.agent.skills.base.Skill.can_execute" class="headerlink" title="Permanent link">&para;</a></h4>
3637
+
3638
+
3639
+ <div class="doc doc-contents ">
3640
+
3641
+ <p>Check if this skill can execute given the current context.</p>
3642
+
3643
+
3644
+ <details class="mkdocstrings-source">
3645
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3646
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-44">44</a></span>
3647
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3648
+<span class="normal"><a href="#__codelineno-0-46">46</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="k">def</span><span class="w"> </span><span class="nf">can_execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">AgentContext</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
3649
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Check if this skill can execute given the current context.&quot;&quot;&quot;</span>
3650
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="n">context</span><span class="o">.</span><span class="n">knowledge_graph</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">context</span><span class="o">.</span><span class="n">provider_manager</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
3651
+</code></pre></div></td></tr></table></div>
3652
+ </details>
3653
+ </div>
3654
+
3655
+</div>
3656
+
3657
+<div class="doc doc-object doc-function">
3658
+
3659
+
3660
+<h4 id="video_processor.agent.skills.base.Skill.execute" class="doc doc-heading">
3661
+ <code class="highlight language-python"><span class="n">execute</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
3662
+
3663
+ <span class="doc doc-labels">
3664
+ <small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small>
3665
+ </span>
3666
+
3667
+<a href="#video_processor.agent.skills.base.Skill.execute" class="headerlink" title="Permanent link">&para;</a></h4>
3668
+
3669
+
3670
+ <div class="doc doc-contents ">
3671
+
3672
+ <p>Execute this skill and return an artifact.</p>
3673
+
3674
+
3675
+ <details class="mkdocstrings-source">
3676
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3677
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-39">39</a></span>
3678
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
3679
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
3680
+<span class="normal"><a href="#__codelineno-0-42">42</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="nd">@abstractmethod</span>
3681
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="k">def</span><span class="w"> </span><span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">AgentContext</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Artifact</span><span class="p">:</span>
3682
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute this skill and return an artifact.&quot;&quot;&quot;</span>
3683
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="o">...</span>
3684
+</code></pre></div></td></tr></table></div>
3685
+ </details>
3686
+ </div>
3687
+
3688
+</div>
3689
+
3690
+
3691
+
3692
+ </div>
3693
+
3694
+ </div>
3695
+
3696
+</div>
3697
+
3698
+
3699
+<div class="doc doc-object doc-function">
3700
+
3701
+
3702
+<h3 id="video_processor.agent.skills.base.get_skill" class="doc doc-heading">
3703
+ <code class="highlight language-python"><span class="n">get_skill</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
3704
+
3705
+<a href="#video_processor.agent.skills.base.get_skill" class="headerlink" title="Permanent link">&para;</a></h3>
3706
+
3707
+
3708
+ <div class="doc doc-contents ">
3709
+
3710
+ <p>Look up a skill by name.</p>
3711
+
3712
+
3713
+ <details class="mkdocstrings-source">
3714
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3715
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
3716
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3717
+<span class="normal"><a href="#__codelineno-0-60">60</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span><span class="w"> </span><span class="nf">get_skill</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="s2">&quot;Skill&quot;</span><span class="p">]:</span>
3718
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Look up a skill by name.&quot;&quot;&quot;</span>
3719
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">return</span> <span class="n">_skills</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
3720
+</code></pre></div></td></tr></table></div>
3721
+ </details>
3722
+ </div>
3723
+
3724
+</div>
3725
+
3726
+<div class="doc doc-object doc-function">
3727
+
3728
+
3729
+<h3 id="video_processor.agent.skills.base.list_skills" class="doc doc-heading">
3730
+ <code class="highlight language-python"><span class="n">list_skills</span><span class="p">()</span></code>
3731
+
3732
+<a href="#video_processor.agent.skills.base.list_skills" class="headerlink" title="Permanent link">&para;</a></h3>
3733
+
3734
+
3735
+ <div class="doc doc-contents ">
3736
+
3737
+ <p>Return all registered skills.</p>
3738
+
3739
+
3740
+ <details class="mkdocstrings-source">
3741
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3742
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-63">63</a></span>
3743
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3744
+<span class="normal"><a href="#__codelineno-0-65">65</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="k">def</span><span class="w"> </span><span class="nf">list_skills</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="s2">&quot;Skill&quot;</span><span class="p">]:</span>
3745
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return all registered skills.&quot;&quot;&quot;</span>
3746
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">_skills</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
3747
+</code></pre></div></td></tr></table></div>
3748
+ </details>
3749
+ </div>
3750
+
3751
+</div>
3752
+
3753
+<div class="doc doc-object doc-function">
3754
+
3755
+
3756
+<h3 id="video_processor.agent.skills.base.register_skill" class="doc doc-heading">
3757
+ <code class="highlight language-python"><span class="n">register_skill</span><span class="p">(</span><span class="n">skill</span><span class="p">)</span></code>
3758
+
3759
+<a href="#video_processor.agent.skills.base.register_skill" class="headerlink" title="Permanent link">&para;</a></h3>
3760
+
3761
+
3762
+ <div class="doc doc-contents ">
3763
+
3764
+ <p>Register a skill instance in the global registry.</p>
3765
+
3766
+
3767
+ <details class="mkdocstrings-source">
3768
+ <summary>Source code in <code>video_processor/agent/skills/base.py</code></summary>
3769
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-53">53</a></span>
3770
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3771
+<span class="normal"><a href="#__codelineno-0-55">55</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="k">def</span><span class="w"> </span><span class="nf">register_skill</span><span class="p">(</span><span class="n">skill</span><span class="p">:</span> <span class="s2">&quot;Skill&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3772
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Register a skill instance in the global registry.&quot;&quot;&quot;</span>
3773
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">_skills</span><span class="p">[</span><span class="n">skill</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">skill</span>
3774
+</code></pre></div></td></tr></table></div>
3775
+ </details>
3776
+ </div>
3777
+
3778
+</div>
3779
+
3780
+
3781
+
3782
+ </div>
3783
+
3784
+ </div>
3785
+
3786
+</div>
3787
+
3788
+<div class="doc doc-object doc-module">
3789
+
3790
+
3791
+
3792
+<h2 id="video_processor.agent.kb_context" class="doc doc-heading">
3793
+ <code>video_processor.agent.kb_context</code>
3794
+
3795
+
3796
+<a href="#video_processor.agent.kb_context" class="headerlink" title="Permanent link">&para;</a></h2>
3797
+
3798
+ <div class="doc doc-contents first">
3799
+
3800
+ <p>Knowledge base context manager for loading and merging knowledge graphs.</p>
3801
+
3802
+
3803
+
3804
+
3805
+
3806
+
3807
+
3808
+
3809
+
3810
+
3811
+<div class="doc doc-children">
3812
+
3813
+
3814
+
3815
+
3816
+
3817
+
3818
+
3819
+
3820
+
3821
+<div class="doc doc-object doc-class">
3822
+
3823
+
3824
+
3825
+<h3 id="video_processor.agent.kb_context.KBContext" class="doc doc-heading">
3826
+ <code>KBContext</code>
3827
+
3828
+
3829
+<a href="#video_processor.agent.kb_context.KBContext" class="headerlink" title="Permanent link">&para;</a></h3>
3830
+
3831
+
3832
+ <div class="doc doc-contents ">
3833
+
3834
+
3835
+
3836
+ <p>Load and merge multiple knowledge graphs into a unified context.</p>
3837
+
3838
+
3839
+
3840
+
3841
+
3842
+
3843
+
3844
+
3845
+ <details class="mkdocstrings-source">
3846
+ <summary>Source code in <code>video_processor/agent/kb_context.py</code></summary>
3847
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-11">11</a></span>
3848
+<span class="normal"><a href="#__codelineno-0-12">12</a></span>
3849
+<span class="normal"><a href="#__codelineno-0-13">13</a></span>
3850
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
3851
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
3852
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
3853
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
3854
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
3855
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
3856
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
3857
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
3858
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
3859
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
3860
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
3861
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
3862
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
3863
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
3864
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
3865
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
3866
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
3867
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
3868
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
3869
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
3870
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
3871
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
3872
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
3873
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
3874
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
3875
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
3876
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
3877
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
3878
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
3879
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
3880
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
3881
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3882
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
3883
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
3884
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
3885
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
3886
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
3887
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
3888
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
3889
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
3890
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3891
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
3892
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
3893
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3894
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3895
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3896
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3897
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
3898
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
3899
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
3900
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3901
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3902
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3903
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3904
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3905
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3906
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3907
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3908
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3909
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3910
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3911
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3912
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3913
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3914
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3915
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
3916
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
3917
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
3918
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
3919
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
3920
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
3921
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
3922
+<span class="normal"><a href="#__codelineno-0-86">86</a></span>
3923
+<span class="normal"><a href="#__codelineno-0-87">87</a></span>
3924
+<span class="normal"><a href="#__codelineno-0-88">88</a></span>
3925
+<span class="normal"><a href="#__codelineno-0-89">89</a></span>
3926
+<span class="normal"><a href="#__codelineno-0-90">90</a></span>
3927
+<span class="normal"><a href="#__codelineno-0-91">91</a></span>
3928
+<span class="normal"><a href="#__codelineno-0-92">92</a></span>
3929
+<span class="normal"><a href="#__codelineno-0-93">93</a></span>
3930
+<span class="normal"><a href="#__codelineno-0-94">94</a></span>
3931
+<span class="normal"><a href="#__codelineno-0-95">95</a></span>
3932
+<span class="normal"><a href="#__codelineno-0-96">96</a></span>
3933
+<span class="normal"><a href="#__codelineno-0-97">97</a></span>
3934
+<span class="normal"><a href="#__codelineno-0-98">98</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="k">class</span><span class="w"> </span><span class="nc">KBContext</span><span class="p">:</span>
3935
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Load and merge multiple knowledge graphs into a unified context.&quot;&quot;&quot;</span>
3936
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
3937
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3938
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
3939
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># KnowledgeGraph instance</span>
3940
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># GraphQueryEngine instance</span>
3941
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
3942
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="k">def</span><span class="w"> </span><span class="nf">add_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3943
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Add a knowledge graph source (.db or .json file, or directory to search).&quot;&quot;&quot;</span>
3944
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
3945
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
3946
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.graph_discovery</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_knowledge_graphs</span>
3947
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
3948
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">graphs</span> <span class="o">=</span> <span class="n">find_knowledge_graphs</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
3949
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">graphs</span><span class="p">)</span>
3950
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
3951
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
3952
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">else</span><span class="p">:</span>
3953
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not found: </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3954
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
3955
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span><span class="w"> </span><span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;KBContext&quot;</span><span class="p">:</span>
3956
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Load and merge all added sources into a single knowledge graph.&quot;&quot;&quot;</span>
3957
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.graph_query</span><span class="w"> </span><span class="kn">import</span> <span class="n">GraphQueryEngine</span>
3958
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.knowledge_graph</span><span class="w"> </span><span class="kn">import</span> <span class="n">KnowledgeGraph</span>
3959
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
3960
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span> <span class="o">=</span> <span class="n">KnowledgeGraph</span><span class="p">(</span><span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
3961
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
3962
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">for</span> <span class="n">source_path</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">:</span>
3963
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="k">if</span> <span class="n">source_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.db&quot;</span><span class="p">:</span>
3964
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">other</span> <span class="o">=</span> <span class="n">KnowledgeGraph</span><span class="p">(</span><span class="n">db_path</span><span class="o">=</span><span class="n">source_path</span><span class="p">)</span>
3965
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
3966
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">elif</span> <span class="n">source_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.json&quot;</span><span class="p">:</span>
3967
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">source_path</span><span class="o">.</span><span class="n">read_text</span><span class="p">())</span>
3968
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">other</span> <span class="o">=</span> <span class="n">KnowledgeGraph</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
3969
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
3970
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
3971
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span> <span class="o">=</span> <span class="n">GraphQueryEngine</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="o">.</span><span class="n">_store</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
3972
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">return</span> <span class="bp">self</span>
3973
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
3974
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="nd">@property</span>
3975
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">def</span><span class="w"> </span><span class="nf">knowledge_graph</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3976
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the merged KnowledgeGraph, or None if not loaded.&quot;&quot;&quot;</span>
3977
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="p">:</span>
3978
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Call load() first&quot;</span><span class="p">)</span>
3979
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span>
3980
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
3981
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="nd">@property</span>
3982
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">def</span><span class="w"> </span><span class="nf">query_engine</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3983
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the GraphQueryEngine, or None if not loaded.&quot;&quot;&quot;</span>
3984
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span><span class="p">:</span>
3985
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Call load() first&quot;</span><span class="p">)</span>
3986
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span>
3987
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
3988
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="nd">@property</span>
3989
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">def</span><span class="w"> </span><span class="nf">sources</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Path</span><span class="p">]:</span>
3990
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the list of source paths.&quot;&quot;&quot;</span>
3991
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">)</span>
3992
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a>
3993
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">def</span><span class="w"> </span><span class="nf">summary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
3994
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Generate a brief summary of the loaded knowledge base.&quot;&quot;&quot;</span>
3995
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="p">:</span>
3996
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">return</span> <span class="s2">&quot;No knowledge base loaded.&quot;</span>
3997
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
3998
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">stats</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span><span class="o">.</span><span class="n">data</span>
3999
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">lines</span> <span class="o">=</span> <span class="p">[</span>
4000
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="sa">f</span><span class="s2">&quot;Knowledge base: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">)</span><span class="si">}</span><span class="s2"> source(s)&quot;</span><span class="p">,</span>
4001
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="sa">f</span><span class="s2">&quot; Entities: </span><span class="si">{</span><span class="n">stats</span><span class="p">[</span><span class="s1">&#39;entity_count&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4002
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="sa">f</span><span class="s2">&quot; Relationships: </span><span class="si">{</span><span class="n">stats</span><span class="p">[</span><span class="s1">&#39;relationship_count&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4003
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">]</span>
4004
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="n">stats</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;entity_types&quot;</span><span class="p">):</span>
4005
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; Entity types:&quot;</span><span class="p">)</span>
4006
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">for</span> <span class="n">t</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">stats</span><span class="p">[</span><span class="s2">&quot;entity_types&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
4007
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">t</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4008
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
4009
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
4010
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="nd">@classmethod</span>
4011
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">def</span><span class="w"> </span><span class="nf">auto_discover</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">start_dir</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;KBContext&quot;</span><span class="p">:</span>
4012
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create a KBContext by auto-discovering knowledge graphs near start_dir.&quot;&quot;&quot;</span>
4013
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.graph_discovery</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_knowledge_graphs</span>
4014
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
4015
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="n">ctx</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
4016
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="n">graphs</span> <span class="o">=</span> <span class="n">find_knowledge_graphs</span><span class="p">(</span><span class="n">start_dir</span><span class="p">)</span>
4017
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">graphs</span><span class="p">:</span>
4018
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">ctx</span><span class="o">.</span><span class="n">_sources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
4019
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">if</span> <span class="n">ctx</span><span class="o">.</span><span class="n">_sources</span><span class="p">:</span>
4020
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">ctx</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
4021
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="n">ctx</span>
4022
+</code></pre></div></td></tr></table></div>
4023
+ </details>
4024
+
4025
+
4026
+
4027
+<div class="doc doc-children">
4028
+
4029
+
4030
+
4031
+
4032
+
4033
+
4034
+
4035
+<div class="doc doc-object doc-attribute">
4036
+
4037
+
4038
+
4039
+<h4 id="video_processor.agent.kb_context.KBContext.knowledge_graph" class="doc doc-heading">
4040
+ <code class="highlight language-python"><span class="n">knowledge_graph</span></code>
4041
+
4042
+ <span class="doc doc-labels">
4043
+ <small class="doc doc-label doc-label-property"><code>property</code></small>
4044
+ </span>
4045
+
4046
+<a href="#video_processor.agent.kb_context.KBContext.knowledge_graph" class="headerlink" title="Permanent link">&para;</a></h4>
4047
+
4048
+
4049
+ <div class="doc doc-contents ">
4050
+
4051
+ <p>Return the merged KnowledgeGraph, or None if not loaded.</p>
4052
+
4053
+ </div>
4054
+
4055
+</div>
4056
+
4057
+<div class="doc doc-object doc-attribute">
4058
+
4059
+
4060
+
4061
+<h4 id="video_processor.agent.kb_context.KBContext.query_engine" class="doc doc-heading">
4062
+ <code class="highlight language-python"><span class="n">query_engine</span></code>
4063
+
4064
+ <span class="doc doc-labels">
4065
+ <small class="doc doc-label doc-label-property"><code>property</code></small>
4066
+ </span>
4067
+
4068
+<a href="#video_processor.agent.kb_context.KBContext.query_engine" class="headerlink" title="Permanent link">&para;</a></h4>
4069
+
4070
+
4071
+ <div class="doc doc-contents ">
4072
+
4073
+ <p>Return the GraphQueryEngine, or None if not loaded.</p>
4074
+
4075
+ </div>
4076
+
4077
+</div>
4078
+
4079
+<div class="doc doc-object doc-attribute">
4080
+
4081
+
4082
+
4083
+<h4 id="video_processor.agent.kb_context.KBContext.sources" class="doc doc-heading">
4084
+ <code class="highlight language-python"><span class="n">sources</span></code>
4085
+
4086
+ <span class="doc doc-labels">
4087
+ <small class="doc doc-label doc-label-property"><code>property</code></small>
4088
+ </span>
4089
+
4090
+<a href="#video_processor.agent.kb_context.KBContext.sources" class="headerlink" title="Permanent link">&para;</a></h4>
4091
+
4092
+
4093
+ <div class="doc doc-contents ">
4094
+
4095
+ <p>Return the list of source paths.</p>
4096
+
4097
+ </div>
4098
+
4099
+</div>
4100
+
4101
+
4102
+
4103
+
4104
+<div class="doc doc-object doc-function">
4105
+
4106
+
4107
+<h4 id="video_processor.agent.kb_context.KBContext.add_source" class="doc doc-heading">
4108
+ <code class="highlight language-python"><span class="n">add_source</span><span class="p">(</span><span class="n">path</span><span class="p">)</span></code>
4109
+
4110
+<a href="#video_processor.agent.kb_context.KBContext.add_source" class="headerlink" title="Permanent link">&para;</a></h4>
4111
+
4112
+
4113
+ <div class="doc doc-contents ">
4114
+
4115
+ <p>Add a knowledge graph source (.db or .json file, or directory to search).</p>
4116
+
4117
+
4118
+ <details class="mkdocstrings-source">
4119
+ <summary>Source code in <code>video_processor/agent/kb_context.py</code></summary>
4120
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-19">19</a></span>
4121
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
4122
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
4123
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
4124
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
4125
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
4126
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
4127
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
4128
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
4129
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
4130
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
4131
+<span class="normal"><a href="#__codelineno-0-30">30</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="k">def</span><span class="w"> </span><span class="nf">add_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
4132
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Add a knowledge graph source (.db or .json file, or directory to search).&quot;&quot;&quot;</span>
4133
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
4134
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
4135
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.graph_discovery</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_knowledge_graphs</span>
4136
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
4137
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">graphs</span> <span class="o">=</span> <span class="n">find_knowledge_graphs</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
4138
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">graphs</span><span class="p">)</span>
4139
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
4140
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
4141
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">else</span><span class="p">:</span>
4142
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not found: </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4143
+</code></pre></div></td></tr></table></div>
4144
+ </details>
4145
+ </div>
4146
+
4147
+</div>
4148
+
4149
+<div class="doc doc-object doc-function">
4150
+
4151
+
4152
+<h4 id="video_processor.agent.kb_context.KBContext.auto_discover" class="doc doc-heading">
4153
+ <code class="highlight language-python"><span class="n">auto_discover</span><span class="p">(</span><span class="n">start_dir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
4154
+
4155
+ <span class="doc doc-labels">
4156
+ <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
4157
+ </span>
4158
+
4159
+<a href="#video_processor.agent.kb_context.KBContext.auto_discover" class="headerlink" title="Permanent link">&para;</a></h4>
4160
+
4161
+
4162
+ <div class="doc doc-contents ">
4163
+
4164
+ <p>Create a KBContext by auto-discovering knowledge graphs near start_dir.</p>
4165
+
4166
+
4167
+ <details class="mkdocstrings-source">
4168
+ <summary>Source code in <code>video_processor/agent/kb_context.py</code></summary>
4169
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-87">87</a></span>
4170
+<span class="normal"><a href="#__codelineno-0-88">88</a></span>
4171
+<span class="normal"><a href="#__codelineno-0-89">89</a></span>
4172
+<span class="normal"><a href="#__codelineno-0-90">90</a></span>
4173
+<span class="normal"><a href="#__codelineno-0-91">91</a></span>
4174
+<span class="normal"><a href="#__codelineno-0-92">92</a></span>
4175
+<span class="normal"><a href="#__codelineno-0-93">93</a></span>
4176
+<span class="normal"><a href="#__codelineno-0-94">94</a></span>
4177
+<span class="normal"><a href="#__codelineno-0-95">95</a></span>
4178
+<span class="normal"><a href="#__codelineno-0-96">96</a></span>
4179
+<span class="normal"><a href="#__codelineno-0-97">97</a></span>
4180
+<span class="normal"><a href="#__codelineno-0-98">98</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="nd">@classmethod</span>
4181
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="k">def</span><span class="w"> </span><span class="nf">auto_discover</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">start_dir</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;KBContext&quot;</span><span class="p">:</span>
4182
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create a KBContext by auto-discovering knowledge graphs near start_dir.&quot;&quot;&quot;</span>
4183
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.graph_discovery</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_knowledge_graphs</span>
4184
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
4185
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="n">ctx</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
4186
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="n">graphs</span> <span class="o">=</span> <span class="n">find_knowledge_graphs</span><span class="p">(</span><span class="n">start_dir</span><span class="p">)</span>
4187
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">graphs</span><span class="p">:</span>
4188
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">ctx</span><span class="o">.</span><span class="n">_sources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
4189
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">if</span> <span class="n">ctx</span><span class="o">.</span><span class="n">_sources</span><span class="p">:</span>
4190
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">ctx</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
4191
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="n">ctx</span>
4192
+</code></pre></div></td></tr></table></div>
4193
+ </details>
4194
+ </div>
4195
+
4196
+</div>
4197
+
4198
+<div class="doc doc-object doc-function">
4199
+
4200
+
4201
+<h4 id="video_processor.agent.kb_context.KBContext.load" class="doc doc-heading">
4202
+ <code class="highlight language-python"><span class="n">load</span><span class="p">(</span><span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
4203
+
4204
+<a href="#video_processor.agent.kb_context.KBContext.load" class="headerlink" title="Permanent link">&para;</a></h4>
4205
+
4206
+
4207
+ <div class="doc doc-contents ">
4208
+
4209
+ <p>Load and merge all added sources into a single knowledge graph.</p>
4210
+
4211
+
4212
+ <details class="mkdocstrings-source">
4213
+ <summary>Source code in <code>video_processor/agent/kb_context.py</code></summary>
4214
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-32">32</a></span>
4215
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
4216
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
4217
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
4218
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
4219
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
4220
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
4221
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
4222
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
4223
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
4224
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
4225
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
4226
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
4227
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
4228
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
4229
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
4230
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
4231
+<span class="normal"><a href="#__codelineno-0-49">49</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="k">def</span><span class="w"> </span><span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;KBContext&quot;</span><span class="p">:</span>
4232
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Load and merge all added sources into a single knowledge graph.&quot;&quot;&quot;</span>
4233
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.graph_query</span><span class="w"> </span><span class="kn">import</span> <span class="n">GraphQueryEngine</span>
4234
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.integrators.knowledge_graph</span><span class="w"> </span><span class="kn">import</span> <span class="n">KnowledgeGraph</span>
4235
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
4236
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span> <span class="o">=</span> <span class="n">KnowledgeGraph</span><span class="p">(</span><span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
4237
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
4238
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">for</span> <span class="n">source_path</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">:</span>
4239
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="k">if</span> <span class="n">source_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.db&quot;</span><span class="p">:</span>
4240
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">other</span> <span class="o">=</span> <span class="n">KnowledgeGraph</span><span class="p">(</span><span class="n">db_path</span><span class="o">=</span><span class="n">source_path</span><span class="p">)</span>
4241
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
4242
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">elif</span> <span class="n">source_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.json&quot;</span><span class="p">:</span>
4243
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">source_path</span><span class="o">.</span><span class="n">read_text</span><span class="p">())</span>
4244
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">other</span> <span class="o">=</span> <span class="n">KnowledgeGraph</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
4245
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
4246
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
4247
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span> <span class="o">=</span> <span class="n">GraphQueryEngine</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="o">.</span><span class="n">_store</span><span class="p">,</span> <span class="n">provider_manager</span><span class="o">=</span><span class="n">provider_manager</span><span class="p">)</span>
4248
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">return</span> <span class="bp">self</span>
4249
+</code></pre></div></td></tr></table></div>
4250
+ </details>
4251
+ </div>
4252
+
4253
+</div>
4254
+
4255
+<div class="doc doc-object doc-function">
4256
+
4257
+
4258
+<h4 id="video_processor.agent.kb_context.KBContext.summary" class="doc doc-heading">
4259
+ <code class="highlight language-python"><span class="n">summary</span><span class="p">()</span></code>
4260
+
4261
+<a href="#video_processor.agent.kb_context.KBContext.summary" class="headerlink" title="Permanent link">&para;</a></h4>
4262
+
4263
+
4264
+ <div class="doc doc-contents ">
4265
+
4266
+ <p>Generate a brief summary of the loaded knowledge base.</p>
4267
+
4268
+
4269
+ <details class="mkdocstrings-source">
4270
+ <summary>Source code in <code>video_processor/agent/kb_context.py</code></summary>
4271
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-70">70</a></span>
4272
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
4273
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
4274
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
4275
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
4276
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
4277
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
4278
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
4279
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
4280
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
4281
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
4282
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
4283
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
4284
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
4285
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
4286
+<span class="normal"><a href="#__codelineno-0-85">85</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="k">def</span><span class="w"> </span><span class="nf">summary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
4287
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Generate a brief summary of the loaded knowledge base.&quot;&quot;&quot;</span>
4288
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kg</span><span class="p">:</span>
4289
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">return</span> <span class="s2">&quot;No knowledge base loaded.&quot;</span>
4290
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
4291
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">stats</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span><span class="o">.</span><span class="n">data</span>
4292
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">lines</span> <span class="o">=</span> <span class="p">[</span>
4293
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="sa">f</span><span class="s2">&quot;Knowledge base: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">)</span><span class="si">}</span><span class="s2"> source(s)&quot;</span><span class="p">,</span>
4294
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="sa">f</span><span class="s2">&quot; Entities: </span><span class="si">{</span><span class="n">stats</span><span class="p">[</span><span class="s1">&#39;entity_count&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4295
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="sa">f</span><span class="s2">&quot; Relationships: </span><span class="si">{</span><span class="n">stats</span><span class="p">[</span><span class="s1">&#39;relationship_count&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4296
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">]</span>
4297
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="n">stats</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;entity_types&quot;</span><span class="p">):</span>
4298
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; Entity types:&quot;</span><span class="p">)</span>
4299
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">for</span> <span class="n">t</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">stats</span><span class="p">[</span><span class="s2">&quot;entity_types&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
4300
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">t</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4301
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
4302
+</code></pre></div></td></tr></table></div>
4303
+ </details>
4304
+ </div>
4305
+
4306
+</div>
4307
+
4308
+
4309
+
4310
+ </div>
4311
+
4312
+ </div>
4313
+
4314
+</div>
4315
+
4316
+
4317
+
4318
+
4319
+ </div>
4320
+
4321
+ </div>
4322
+
4323
+</div><hr />
4324
+<h2 id="overview">Overview<a class="headerlink" href="#overview" title="Permanent link">&para;</a></h2>
4325
+<p>The agent module implements a planning agent that synthesizes knowledge from processed video content into actionable artifacts such as project plans, PRDs, task breakdowns, and roadmaps. The agent operates on knowledge graphs loaded via <code>KBContext</code> and uses a skill-based architecture for extensibility.</p>
4326
+<p><strong>Key components:</strong></p>
4327
+<ul>
4328
+<li><strong><code>PlanningAgent</code></strong> -- orchestrates skill selection and execution based on user requests</li>
4329
+<li><strong><code>AgentContext</code></strong> -- shared state passed between skills during execution</li>
4330
+<li><strong><code>Skill</code></strong> (ABC) -- base class for pluggable agent capabilities</li>
4331
+<li><strong><code>Artifact</code></strong> -- output produced by skill execution</li>
4332
+<li><strong><code>KBContext</code></strong> -- loads and merges multiple knowledge graph sources</li>
4333
+</ul>
4334
+<hr />
4335
+<h2 id="planningagent">PlanningAgent<a class="headerlink" href="#planningagent" title="Permanent link">&para;</a></h2>
4336
+<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.agent_loop</span><span class="w"> </span><span class="kn">import</span> <span class="n">PlanningAgent</span>
4337
+</code></pre></div>
4338
+<p>AI agent that synthesizes knowledge into planning artifacts. Uses an LLM to select which skills to execute for a given request, or falls back to keyword matching when no LLM is available.</p>
4339