PlanOpticon

planopticon / api / agent / index.html
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
<h3 id="constructor">Constructor<a class="headerlink" href="#constructor" title="Permanent link">&para;</a></h3>
4340
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></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>
4341
</code></pre></div>
4342
<table>
4343
<thead>
4344
<tr>
4345
<th>Parameter</th>
4346
<th>Type</th>
4347
<th>Description</th>
4348
</tr>
4349
</thead>
4350
<tbody>
4351
<tr>
4352
<td><code>context</code></td>
4353
<td><code>AgentContext</code></td>
4354
<td>Shared context containing knowledge graph, query engine, and provider</td>
4355
</tr>
4356
</tbody>
4357
</table>
4358
<h3 id="from_kb_paths">from_kb_paths()<a class="headerlink" href="#from_kb_paths" title="Permanent link">&para;</a></h3>
4359
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="nd">@classmethod</span>
4360
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="k">def</span><span class="w"> </span><span class="nf">from_kb_paths</span><span class="p">(</span>
4361
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> <span class="bp">cls</span><span class="p">,</span>
4362
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <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>
4363
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
4364
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">PlanningAgent</span>
4365
</code></pre></div>
4366
<p>Factory method that creates an agent from one or more knowledge base file paths. Handles loading and merging knowledge graphs automatically.</p>
4367
<p><strong>Parameters:</strong></p>
4368
<table>
4369
<thead>
4370
<tr>
4371
<th>Parameter</th>
4372
<th>Type</th>
4373
<th>Default</th>
4374
<th>Description</th>
4375
</tr>
4376
</thead>
4377
<tbody>
4378
<tr>
4379
<td><code>kb_paths</code></td>
4380
<td><code>List[Path]</code></td>
4381
<td><em>required</em></td>
4382
<td>Paths to <code>.db</code> or <code>.json</code> knowledge graph files, or directories to search</td>
4383
</tr>
4384
<tr>
4385
<td><code>provider_manager</code></td>
4386
<td><code>ProviderManager</code></td>
4387
<td><code>None</code></td>
4388
<td>LLM provider for agent operations</td>
4389
</tr>
4390
</tbody>
4391
</table>
4392
<p><strong>Returns:</strong> <code>PlanningAgent</code> -- configured agent with loaded knowledge base.</p>
4393
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
4394
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></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>
4395
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.providers.manager</span><span class="w"> </span><span class="kn">import</span> <span class="n">ProviderManager</span>
4396
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a>
4397
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="n">agent</span> <span class="o">=</span> <span class="n">PlanningAgent</span><span class="o">.</span><span class="n">from_kb_paths</span><span class="p">(</span>
4398
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a> <span class="n">kb_paths</span><span class="o">=</span><span class="p">[</span><span class="n">Path</span><span class="p">(</span><span class="s2">&quot;results/knowledge_graph.db&quot;</span><span class="p">)],</span>
4399
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> <span class="n">provider_manager</span><span class="o">=</span><span class="n">ProviderManager</span><span class="p">(),</span>
4400
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a><span class="p">)</span>
4401
</code></pre></div>
4402
<h3 id="execute">execute()<a class="headerlink" href="#execute" title="Permanent link">&para;</a></h3>
4403
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></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>
4404
</code></pre></div>
4405
<p>Execute a user request by selecting and running appropriate skills.</p>
4406
<p><strong>Process:</strong></p>
4407
<ol>
4408
<li>Build a context summary from the knowledge base statistics</li>
4409
<li>Format available skills with their descriptions</li>
4410
<li>Ask the LLM to select skills and parameters (or use keyword matching as fallback)</li>
4411
<li>Execute selected skills in order, accumulating artifacts</li>
4412
</ol>
4413
<p><strong>Parameters:</strong></p>
4414
<table>
4415
<thead>
4416
<tr>
4417
<th>Parameter</th>
4418
<th>Type</th>
4419
<th>Description</th>
4420
</tr>
4421
</thead>
4422
<tbody>
4423
<tr>
4424
<td><code>request</code></td>
4425
<td><code>str</code></td>
4426
<td>Natural language request (e.g., "Generate a project plan")</td>
4427
</tr>
4428
</tbody>
4429
</table>
4430
<p><strong>Returns:</strong> <code>List[Artifact]</code> -- generated artifacts from skill execution.</p>
4431
<p><strong>LLM mode:</strong> The LLM receives the knowledge base summary, available skills, and user request, then returns a JSON array of <code>{"skill": "name", "params": {}}</code> objects to execute.</p>
4432
<p><strong>Keyword fallback:</strong> Without an LLM, skills are matched by splitting the skill name into words and checking if any appear in the request text.</p>
4433
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="n">artifacts</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;Create a PRD and task breakdown&quot;</span><span class="p">)</span>
4434
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="k">for</span> <span class="n">artifact</span> <span class="ow">in</span> <span class="n">artifacts</span><span class="p">:</span>
4435
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">artifact</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">artifact</span><span class="o">.</span><span class="n">artifact_type</span><span class="si">}</span><span class="s2">) ---&quot;</span><span class="p">)</span>
4436
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a> <span class="nb">print</span><span class="p">(</span><span class="n">artifact</span><span class="o">.</span><span class="n">content</span><span class="p">[:</span><span class="mi">500</span><span class="p">])</span>
4437
</code></pre></div>
4438
<h3 id="chat">chat()<a class="headerlink" href="#chat" title="Permanent link">&para;</a></h3>
4439
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></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>
4440
</code></pre></div>
4441
<p>Interactive chat mode. Maintains conversation history and provides contextual responses about the loaded knowledge base.</p>
4442
<p><strong>Parameters:</strong></p>
4443
<table>
4444
<thead>
4445
<tr>
4446
<th>Parameter</th>
4447
<th>Type</th>
4448
<th>Description</th>
4449
</tr>
4450
</thead>
4451
<tbody>
4452
<tr>
4453
<td><code>message</code></td>
4454
<td><code>str</code></td>
4455
<td>User message</td>
4456
</tr>
4457
</tbody>
4458
</table>
4459
<p><strong>Returns:</strong> <code>str</code> -- assistant response.</p>
4460
<p>The chat mode provides the LLM with:</p>
4461
<ul>
4462
<li>Knowledge base statistics (entity counts, relationship counts)</li>
4463
<li>List of previously generated artifacts</li>
4464
<li>Full conversation history</li>
4465
<li>Available REPL commands (e.g., <code>/entities</code>, <code>/search</code>, <code>/plan</code>, <code>/export</code>)</li>
4466
</ul>
4467
<p><strong>Requires</strong> a configured <code>provider_manager</code>. Returns a static error message if no LLM is available.</p>
4468
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="n">response</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">chat</span><span class="p">(</span><span class="s2">&quot;What technologies were discussed in the meetings?&quot;</span><span class="p">)</span>
4469
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
4470
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>
4471
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="n">response</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">chat</span><span class="p">(</span><span class="s2">&quot;Which of those have the most dependencies?&quot;</span><span class="p">)</span>
4472
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
4473
</code></pre></div>
4474
<hr />
4475
<h2 id="agentcontext">AgentContext<a class="headerlink" href="#agentcontext" title="Permanent link">&para;</a></h2>
4476
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.skills.base</span><span class="w"> </span><span class="kn">import</span> <span class="n">AgentContext</span>
4477
</code></pre></div>
4478
<p>Shared state dataclass passed to all skills during execution. Accumulates artifacts and conversation history across the agent session.</p>
4479
<table>
4480
<thead>
4481
<tr>
4482
<th>Field</th>
4483
<th>Type</th>
4484
<th>Default</th>
4485
<th>Description</th>
4486
</tr>
4487
</thead>
4488
<tbody>
4489
<tr>
4490
<td><code>knowledge_graph</code></td>
4491
<td><code>Any</code></td>
4492
<td><code>None</code></td>
4493
<td><code>KnowledgeGraph</code> instance</td>
4494
</tr>
4495
<tr>
4496
<td><code>query_engine</code></td>
4497
<td><code>Any</code></td>
4498
<td><code>None</code></td>
4499
<td><code>GraphQueryEngine</code> instance for querying the KG</td>
4500
</tr>
4501
<tr>
4502
<td><code>provider_manager</code></td>
4503
<td><code>Any</code></td>
4504
<td><code>None</code></td>
4505
<td><code>ProviderManager</code> instance for LLM calls</td>
4506
</tr>
4507
<tr>
4508
<td><code>planning_entities</code></td>
4509
<td><code>List[Any]</code></td>
4510
<td><code>[]</code></td>
4511
<td>Extracted <code>PlanningEntity</code> instances</td>
4512
</tr>
4513
<tr>
4514
<td><code>user_requirements</code></td>
4515
<td><code>Dict[str, Any]</code></td>
4516
<td><code>{}</code></td>
4517
<td>User-specified requirements and constraints</td>
4518
</tr>
4519
<tr>
4520
<td><code>conversation_history</code></td>
4521
<td><code>List[Dict[str, str]]</code></td>
4522
<td><code>[]</code></td>
4523
<td>Chat message history (<code>role</code>, <code>content</code> dicts)</td>
4524
</tr>
4525
<tr>
4526
<td><code>artifacts</code></td>
4527
<td><code>List[Artifact]</code></td>
4528
<td><code>[]</code></td>
4529
<td>Previously generated artifacts</td>
4530
</tr>
4531
<tr>
4532
<td><code>config</code></td>
4533
<td><code>Dict[str, Any]</code></td>
4534
<td><code>{}</code></td>
4535
<td>Additional configuration</td>
4536
</tr>
4537
</tbody>
4538
</table>
4539
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.skills.base</span><span class="w"> </span><span class="kn">import</span> <span class="n">AgentContext</span>
4540
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
4541
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="n">context</span> <span class="o">=</span> <span class="n">AgentContext</span><span class="p">(</span>
4542
<a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a> <span class="n">knowledge_graph</span><span class="o">=</span><span class="n">kg</span><span class="p">,</span>
4543
<a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a> <span class="n">query_engine</span><span class="o">=</span><span class="n">engine</span><span class="p">,</span>
4544
<a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> <span class="n">provider_manager</span><span class="o">=</span><span class="n">pm</span><span class="p">,</span>
4545
<a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a> <span class="n">config</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;output_format&quot;</span><span class="p">:</span> <span class="s2">&quot;markdown&quot;</span><span class="p">},</span>
4546
<a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a><span class="p">)</span>
4547
</code></pre></div>
4548
<hr />
4549
<h2 id="skill-abc">Skill (ABC)<a class="headerlink" href="#skill-abc" title="Permanent link">&para;</a></h2>
4550
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.skills.base</span><span class="w"> </span><span class="kn">import</span> <span class="n">Skill</span>
4551
</code></pre></div>
4552
<p>Base class for agent skills. Each skill represents a discrete capability that produces an artifact from the agent context.</p>
4553
<p><strong>Class attributes:</strong></p>
4554
<table>
4555
<thead>
4556
<tr>
4557
<th>Attribute</th>
4558
<th>Type</th>
4559
<th>Description</th>
4560
</tr>
4561
</thead>
4562
<tbody>
4563
<tr>
4564
<td><code>name</code></td>
4565
<td><code>str</code></td>
4566
<td>Skill identifier (e.g., <code>"project_plan"</code>, <code>"prd"</code>)</td>
4567
</tr>
4568
<tr>
4569
<td><code>description</code></td>
4570
<td><code>str</code></td>
4571
<td>Human-readable description shown to the LLM for skill selection</td>
4572
</tr>
4573
</tbody>
4574
</table>
4575
<h3 id="execute_1">execute()<a class="headerlink" href="#execute_1" title="Permanent link">&para;</a></h3>
4576
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="nd">@abstractmethod</span>
4577
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></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>
4578
</code></pre></div>
4579
<p>Execute this skill and return an artifact. Receives the shared agent context and any parameters selected by the LLM planner.</p>
4580
<h3 id="can_execute">can_execute()<a class="headerlink" href="#can_execute" title="Permanent link">&para;</a></h3>
4581
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></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>
4582
</code></pre></div>
4583
<p>Check if this skill can execute given the current context. The default implementation requires both <code>knowledge_graph</code> and <code>provider_manager</code> to be set. Override for skills with different requirements.</p>
4584
<p><strong>Returns:</strong> <code>bool</code></p>
4585
<h3 id="implementing-a-custom-skill">Implementing a custom skill<a class="headerlink" href="#implementing-a-custom-skill" title="Permanent link">&para;</a></h3>
4586
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.skills.base</span><span class="w"> </span><span class="kn">import</span> <span class="n">Skill</span><span class="p">,</span> <span class="n">Artifact</span><span class="p">,</span> <span class="n">AgentContext</span><span class="p">,</span> <span class="n">register_skill</span>
4587
<a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>
4588
<a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="k">class</span><span class="w"> </span><span class="nc">SummarySkill</span><span class="p">(</span><span class="n">Skill</span><span class="p">):</span>
4589
<a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;summary&quot;</span>
4590
<a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a> <span class="n">description</span> <span class="o">=</span> <span class="s2">&quot;Generate a concise summary of the knowledge base&quot;</span>
4591
<a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a>
4592
<a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></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>
4593
<a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a> <span class="n">stats</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>
4594
<a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a> <span class="n">prompt</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Summarize this 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>
4595
<a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a> <span class="n">content</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>
4596
<a id="__codelineno-13-11" name="__codelineno-13-11" href="#__codelineno-13-11"></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">prompt</span><span class="p">}]</span>
4597
<a id="__codelineno-13-12" name="__codelineno-13-12" href="#__codelineno-13-12"></a> <span class="p">)</span>
4598
<a id="__codelineno-13-13" name="__codelineno-13-13" href="#__codelineno-13-13"></a> <span class="k">return</span> <span class="n">Artifact</span><span class="p">(</span>
4599
<a id="__codelineno-13-14" name="__codelineno-13-14" href="#__codelineno-13-14"></a> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;Knowledge Base Summary&quot;</span><span class="p">,</span>
4600
<a id="__codelineno-13-15" name="__codelineno-13-15" href="#__codelineno-13-15"></a> <span class="n">content</span><span class="o">=</span><span class="n">content</span><span class="p">,</span>
4601
<a id="__codelineno-13-16" name="__codelineno-13-16" href="#__codelineno-13-16"></a> <span class="n">artifact_type</span><span class="o">=</span><span class="s2">&quot;document&quot;</span><span class="p">,</span>
4602
<a id="__codelineno-13-17" name="__codelineno-13-17" href="#__codelineno-13-17"></a> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;markdown&quot;</span><span class="p">,</span>
4603
<a id="__codelineno-13-18" name="__codelineno-13-18" href="#__codelineno-13-18"></a> <span class="p">)</span>
4604
<a id="__codelineno-13-19" name="__codelineno-13-19" href="#__codelineno-13-19"></a>
4605
<a id="__codelineno-13-20" name="__codelineno-13-20" href="#__codelineno-13-20"></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>
4606
<a id="__codelineno-13-21" name="__codelineno-13-21" href="#__codelineno-13-21"></a> <span class="k">return</span> <span class="n">context</span><span class="o">.</span><span class="n">query_engine</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>
4607
<a id="__codelineno-13-22" name="__codelineno-13-22" href="#__codelineno-13-22"></a>
4608
<a id="__codelineno-13-23" name="__codelineno-13-23" href="#__codelineno-13-23"></a><span class="c1"># Register the skill so the agent can discover it</span>
4609
<a id="__codelineno-13-24" name="__codelineno-13-24" href="#__codelineno-13-24"></a><span class="n">register_skill</span><span class="p">(</span><span class="n">SummarySkill</span><span class="p">())</span>
4610
</code></pre></div>
4611
<hr />
4612
<h2 id="artifact">Artifact<a class="headerlink" href="#artifact" title="Permanent link">&para;</a></h2>
4613
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.skills.base</span><span class="w"> </span><span class="kn">import</span> <span class="n">Artifact</span>
4614
</code></pre></div>
4615
<p>Dataclass representing the output of a skill execution.</p>
4616
<table>
4617
<thead>
4618
<tr>
4619
<th>Field</th>
4620
<th>Type</th>
4621
<th>Default</th>
4622
<th>Description</th>
4623
</tr>
4624
</thead>
4625
<tbody>
4626
<tr>
4627
<td><code>name</code></td>
4628
<td><code>str</code></td>
4629
<td><em>required</em></td>
4630
<td>Human-readable artifact name</td>
4631
</tr>
4632
<tr>
4633
<td><code>content</code></td>
4634
<td><code>str</code></td>
4635
<td><em>required</em></td>
4636
<td>Generated content (Markdown, JSON, Mermaid, etc.)</td>
4637
</tr>
4638
<tr>
4639
<td><code>artifact_type</code></td>
4640
<td><code>str</code></td>
4641
<td><em>required</em></td>
4642
<td>Type: <code>"project_plan"</code>, <code>"prd"</code>, <code>"roadmap"</code>, <code>"task_list"</code>, <code>"document"</code>, <code>"issues"</code></td>
4643
</tr>
4644
<tr>
4645
<td><code>format</code></td>
4646
<td><code>str</code></td>
4647
<td><code>"markdown"</code></td>
4648
<td>Content format: <code>"markdown"</code>, <code>"json"</code>, <code>"mermaid"</code></td>
4649
</tr>
4650
<tr>
4651
<td><code>metadata</code></td>
4652
<td><code>Dict[str, Any]</code></td>
4653
<td><code>{}</code></td>
4654
<td>Additional metadata</td>
4655
</tr>
4656
</tbody>
4657
</table>
4658
<hr />
4659
<h2 id="skill-registry-functions">Skill Registry Functions<a class="headerlink" href="#skill-registry-functions" title="Permanent link">&para;</a></h2>
4660
<h3 id="register_skill">register_skill()<a class="headerlink" href="#register_skill" title="Permanent link">&para;</a></h3>
4661
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></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="n">Skill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
4662
</code></pre></div>
4663
<p>Register a skill instance in the global registry. Skills must be registered before the agent can discover and execute them.</p>
4664
<h3 id="get_skill">get_skill()<a class="headerlink" href="#get_skill" title="Permanent link">&para;</a></h3>
4665
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></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="n">Skill</span><span class="p">]</span>
4666
</code></pre></div>
4667
<p>Look up a registered skill by name.</p>
4668
<p><strong>Returns:</strong> <code>Optional[Skill]</code> -- the skill instance, or <code>None</code> if not found.</p>
4669
<h3 id="list_skills">list_skills()<a class="headerlink" href="#list_skills" title="Permanent link">&para;</a></h3>
4670
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></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="n">Skill</span><span class="p">]</span>
4671
</code></pre></div>
4672
<p>Return all registered skill instances.</p>
4673
<hr />
4674
<h2 id="kbcontext">KBContext<a class="headerlink" href="#kbcontext" title="Permanent link">&para;</a></h2>
4675
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.kb_context</span><span class="w"> </span><span class="kn">import</span> <span class="n">KBContext</span>
4676
</code></pre></div>
4677
<p>Loads and merges multiple knowledge graph sources into a unified context for agent consumption. Supports both FalkorDB (<code>.db</code>) and JSON (<code>.json</code>) formats, and can auto-discover graphs in a directory tree.</p>
4678
<h3 id="constructor_1">Constructor<a class="headerlink" href="#constructor_1" title="Permanent link">&para;</a></h3>
4679
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></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>
4680
</code></pre></div>
4681
<p>Creates an empty context. Use <code>add_source()</code> to add knowledge graph paths, then <code>load()</code> to initialize.</p>
4682
<h3 id="add_source">add_source()<a class="headerlink" href="#add_source" title="Permanent link">&para;</a></h3>
4683
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></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>
4684
</code></pre></div>
4685
<p>Add a knowledge graph source.</p>
4686
<p><strong>Parameters:</strong></p>
4687
<table>
4688
<thead>
4689
<tr>
4690
<th>Parameter</th>
4691
<th>Type</th>
4692
<th>Description</th>
4693
</tr>
4694
</thead>
4695
<tbody>
4696
<tr>
4697
<td><code>path</code></td>
4698
<td><code>str \| Path</code></td>
4699
<td>Path to a <code>.db</code> file, <code>.json</code> file, or directory to search for knowledge graphs</td>
4700
</tr>
4701
</tbody>
4702
</table>
4703
<p>If <code>path</code> is a directory, it is searched recursively for knowledge graph files using <code>find_knowledge_graphs()</code>.</p>
4704
<p><strong>Raises:</strong> <code>FileNotFoundError</code> if the path does not exist.</p>
4705
<h3 id="load">load()<a class="headerlink" href="#load" title="Permanent link">&para;</a></h3>
4706
<div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></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="n">KBContext</span>
4707
</code></pre></div>
4708
<p>Load and merge all added sources into a single knowledge graph and query engine.</p>
4709
<p><strong>Parameters:</strong></p>
4710
<table>
4711
<thead>
4712
<tr>
4713
<th>Parameter</th>
4714
<th>Type</th>
4715
<th>Default</th>
4716
<th>Description</th>
4717
</tr>
4718
</thead>
4719
<tbody>
4720
<tr>
4721
<td><code>provider_manager</code></td>
4722
<td><code>ProviderManager</code></td>
4723
<td><code>None</code></td>
4724
<td>LLM provider for the knowledge graph and query engine</td>
4725
</tr>
4726
</tbody>
4727
</table>
4728
<p><strong>Returns:</strong> <code>KBContext</code> -- self, for method chaining.</p>
4729
<h3 id="properties">Properties<a class="headerlink" href="#properties" title="Permanent link">&para;</a></h3>
4730
<table>
4731
<thead>
4732
<tr>
4733
<th>Property</th>
4734
<th>Type</th>
4735
<th>Description</th>
4736
</tr>
4737
</thead>
4738
<tbody>
4739
<tr>
4740
<td><code>knowledge_graph</code></td>
4741
<td><code>KnowledgeGraph</code></td>
4742
<td>The merged knowledge graph (raises <code>RuntimeError</code> if not loaded)</td>
4743
</tr>
4744
<tr>
4745
<td><code>query_engine</code></td>
4746
<td><code>GraphQueryEngine</code></td>
4747
<td>Query engine for the merged graph (raises <code>RuntimeError</code> if not loaded)</td>
4748
</tr>
4749
<tr>
4750
<td><code>sources</code></td>
4751
<td><code>List[Path]</code></td>
4752
<td>List of resolved source paths</td>
4753
</tr>
4754
</tbody>
4755
</table>
4756
<h3 id="summary">summary()<a class="headerlink" href="#summary" title="Permanent link">&para;</a></h3>
4757
<div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></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>
4758
</code></pre></div>
4759
<p>Generate a brief text summary of the loaded knowledge base, including entity counts by type and relationship counts.</p>
4760
<p><strong>Returns:</strong> <code>str</code> -- multi-line summary text.</p>
4761
<h3 id="auto_discover">auto_discover()<a class="headerlink" href="#auto_discover" title="Permanent link">&para;</a></h3>
4762
<div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="nd">@classmethod</span>
4763
<a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="k">def</span><span class="w"> </span><span class="nf">auto_discover</span><span class="p">(</span>
4764
<a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a> <span class="bp">cls</span><span class="p">,</span>
4765
<a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a> <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>
4766
<a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a> <span class="n">provider_manager</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
4767
<a id="__codelineno-23-6" name="__codelineno-23-6" href="#__codelineno-23-6"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">KBContext</span>
4768
</code></pre></div>
4769
<p>Factory method that creates a <code>KBContext</code> by auto-discovering knowledge graphs near <code>start_dir</code> (defaults to current directory).</p>
4770
<p><strong>Returns:</strong> <code>KBContext</code> -- loaded context (may have zero sources if none found).</p>
4771
<h3 id="usage-examples">Usage examples<a class="headerlink" href="#usage-examples" title="Permanent link">&para;</a></h3>
4772
<div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
4773
<a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.kb_context</span><span class="w"> </span><span class="kn">import</span> <span class="n">KBContext</span>
4774
<a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a>
4775
<a id="__codelineno-24-4" name="__codelineno-24-4" href="#__codelineno-24-4"></a><span class="c1"># Manual source management</span>
4776
<a id="__codelineno-24-5" name="__codelineno-24-5" href="#__codelineno-24-5"></a><span class="n">kb</span> <span class="o">=</span> <span class="n">KBContext</span><span class="p">()</span>
4777
<a id="__codelineno-24-6" name="__codelineno-24-6" href="#__codelineno-24-6"></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><span class="s2">&quot;project_a/knowledge_graph.db&quot;</span><span class="p">))</span>
4778
<a id="__codelineno-24-7" name="__codelineno-24-7" href="#__codelineno-24-7"></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><span class="s2">&quot;project_b/results/&quot;</span><span class="p">))</span> <span class="c1"># searches directory</span>
4779
<a id="__codelineno-24-8" name="__codelineno-24-8" href="#__codelineno-24-8"></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">pm</span><span class="p">)</span>
4780
<a id="__codelineno-24-9" name="__codelineno-24-9" href="#__codelineno-24-9"></a>
4781
<a id="__codelineno-24-10" name="__codelineno-24-10" href="#__codelineno-24-10"></a><span class="nb">print</span><span class="p">(</span><span class="n">kb</span><span class="o">.</span><span class="n">summary</span><span class="p">())</span>
4782
<a id="__codelineno-24-11" name="__codelineno-24-11" href="#__codelineno-24-11"></a><span class="c1"># Knowledge base: 3 source(s)</span>
4783
<a id="__codelineno-24-12" name="__codelineno-24-12" href="#__codelineno-24-12"></a><span class="c1"># Entities: 142</span>
4784
<a id="__codelineno-24-13" name="__codelineno-24-13" href="#__codelineno-24-13"></a><span class="c1"># Relationships: 89</span>
4785
<a id="__codelineno-24-14" name="__codelineno-24-14" href="#__codelineno-24-14"></a><span class="c1"># Entity types:</span>
4786
<a id="__codelineno-24-15" name="__codelineno-24-15" href="#__codelineno-24-15"></a><span class="c1"># technology: 45</span>
4787
<a id="__codelineno-24-16" name="__codelineno-24-16" href="#__codelineno-24-16"></a><span class="c1"># person: 23</span>
4788
<a id="__codelineno-24-17" name="__codelineno-24-17" href="#__codelineno-24-17"></a><span class="c1"># concept: 74</span>
4789
<a id="__codelineno-24-18" name="__codelineno-24-18" href="#__codelineno-24-18"></a>
4790
<a id="__codelineno-24-19" name="__codelineno-24-19" href="#__codelineno-24-19"></a><span class="c1"># Auto-discover from current directory</span>
4791
<a id="__codelineno-24-20" name="__codelineno-24-20" href="#__codelineno-24-20"></a><span class="n">kb</span> <span class="o">=</span> <span class="n">KBContext</span><span class="o">.</span><span class="n">auto_discover</span><span class="p">()</span>
4792
<a id="__codelineno-24-21" name="__codelineno-24-21" href="#__codelineno-24-21"></a>
4793
<a id="__codelineno-24-22" name="__codelineno-24-22" href="#__codelineno-24-22"></a><span class="c1"># Use with the agent</span>
4794
<a id="__codelineno-24-23" name="__codelineno-24-23" href="#__codelineno-24-23"></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>
4795
<a id="__codelineno-24-24" name="__codelineno-24-24" href="#__codelineno-24-24"></a><span class="kn">from</span><span class="w"> </span><span class="nn">video_processor.agent.skills.base</span><span class="w"> </span><span class="kn">import</span> <span class="n">AgentContext</span>
4796
<a id="__codelineno-24-25" name="__codelineno-24-25" href="#__codelineno-24-25"></a>
4797
<a id="__codelineno-24-26" name="__codelineno-24-26" href="#__codelineno-24-26"></a><span class="n">context</span> <span class="o">=</span> <span class="n">AgentContext</span><span class="p">(</span>
4798
<a id="__codelineno-24-27" name="__codelineno-24-27" href="#__codelineno-24-27"></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>
4799
<a id="__codelineno-24-28" name="__codelineno-24-28" href="#__codelineno-24-28"></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>
4800
<a id="__codelineno-24-29" name="__codelineno-24-29" href="#__codelineno-24-29"></a> <span class="n">provider_manager</span><span class="o">=</span><span class="n">pm</span><span class="p">,</span>
4801
<a id="__codelineno-24-30" name="__codelineno-24-30" href="#__codelineno-24-30"></a><span class="p">)</span>
4802
<a id="__codelineno-24-31" name="__codelineno-24-31" href="#__codelineno-24-31"></a><span class="n">agent</span> <span class="o">=</span> <span class="n">PlanningAgent</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
4803
</code></pre></div>
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
</article>
4818
</div>
4819
4820
4821
<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>
4822
4823
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
4824
</div>
4825
4826
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
4827
4828
<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>
4829
Back to top
4830
</button>
4831
4832
</main>
4833
4834
<footer class="md-footer">
4835
4836
<div class="md-footer-meta md-typeset">
4837
<div class="md-footer-meta__inner md-grid">
4838
<div class="md-copyright">
4839
4840
<div class="md-copyright__highlight">
4841
Copyright &copy; 2026 CONFLICT LLC
4842
</div>
4843
4844
4845
Made with
4846
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
4847
Material for MkDocs
4848
</a>
4849
4850
</div>
4851
4852
4853
<div class="md-social">
4854
4855
4856
4857
4858
4859
4860
4861
4862
<a href="https://github.com/ConflictHQ/PlanOpticon" target="_blank" rel="noopener" title="github.com" class="md-social__link">
4863
<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>
4864
</a>
4865
4866
</div>
4867
4868
</div>
4869
</div>
4870
</footer>
4871
4872
</div>
4873
<div class="md-dialog" data-md-component="dialog">
4874
<div class="md-dialog__inner md-typeset"></div>
4875
</div>
4876
4877
4878
4879
4880
4881
<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>
4882
4883
4884
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
4885
4886
4887
</body>
4888
</html>

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button