Spaces:
Sleeping
🎨 Complete Sample Data Structure Overhaul
Browse files✅ 问题解决:
• 分析了真实知识图谱数据结构,发现示例数据过于简化
• 缺少重要字段:importance, raw_prompt, raw_prompt_ref, failures, optimizations
• 缺少system_name, system_summary和完整的metadata
• Entity类型应该大写,relations需要interaction_prompt字段
🔍 真实结构分析:
• Entity: 需要importance、完整raw_prompt、content references
• Relations: 需要importance、interaction_prompt、interaction_prompt_ref
• 必须包含failures数组用于错误分析
• 必须包含optimizations数组用于改进建议
• System级别需要描述性name和summary
• Metadata包含processing_params、trace_info等完整信息
🎯 新示例数据特性:
1. Financial Analysis System (多智能体SQL分析)
- 7个entities: SQL Expert, Business Analyst, Data Validator等
- 6个relations: 包含完整交互流程
- 1个failure: 数据异常检测
- 1个optimization: 自动异常检测建议
2. Email Processing System (智能邮件处理)
- 8个entities: 分类器、搜索代理、响应生成器等
- 7个relations: 完整的邮件处理流程
- 2个optimizations: 流程改进建议
🚀 技术改进:
• 所有entities包含realistic的raw_prompt内容
• Content references with line_start/line_end/confidence
• Professional system summaries with指代词
• Complete metadata matching production format
• 符合真实AgentGraph输出的数据结构
💡 用户体验提升:
• 示例traces展示真实multi-agent协作场景
• Knowledge graphs有完整的颜色编码和层次结构
• Failures和optimizations提供有意义的insights
• 用户可以立即体验完整的AgentGraph功能
- backend/database/init_db.py +2 -2
- backend/database/sample_data.py +770 -510
- backend/database/sample_data_old.py +623 -0
- fix_sample_kgs.py +91 -0
|
@@ -335,13 +335,13 @@ def init_database(reset=False, force=False):
|
|
| 335 |
logger.info("Empty database detected, inserting sample data for better user experience...")
|
| 336 |
try:
|
| 337 |
# Import here to avoid circular imports
|
| 338 |
-
from .sample_data import
|
| 339 |
from . import SessionLocal
|
| 340 |
|
| 341 |
# Use SQLAlchemy session for sample data insertion
|
| 342 |
session = SessionLocal()
|
| 343 |
try:
|
| 344 |
-
results =
|
| 345 |
session.commit()
|
| 346 |
except Exception as e:
|
| 347 |
session.rollback()
|
|
|
|
| 335 |
logger.info("Empty database detected, inserting sample data for better user experience...")
|
| 336 |
try:
|
| 337 |
# Import here to avoid circular imports
|
| 338 |
+
from .sample_data import insert_enhanced_sample_data
|
| 339 |
from . import SessionLocal
|
| 340 |
|
| 341 |
# Use SQLAlchemy session for sample data insertion
|
| 342 |
session = SessionLocal()
|
| 343 |
try:
|
| 344 |
+
results = insert_enhanced_sample_data(session)
|
| 345 |
session.commit()
|
| 346 |
except Exception as e:
|
| 347 |
session.rollback()
|
|
@@ -1,539 +1,796 @@
|
|
| 1 |
#!/usr/bin/env python
|
| 2 |
"""
|
| 3 |
-
|
| 4 |
-
|
| 5 |
"""
|
| 6 |
|
| 7 |
import json
|
| 8 |
import logging
|
| 9 |
-
from typing import Dict,
|
|
|
|
|
|
|
| 10 |
|
| 11 |
logger = logging.getLogger(__name__)
|
| 12 |
|
| 13 |
-
#
|
| 14 |
-
|
| 15 |
{
|
| 16 |
-
"filename": "
|
| 17 |
-
"title": "
|
| 18 |
-
"description": "
|
| 19 |
-
"
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
-
|
| 25 |
|
| 26 |
-
|
| 27 |
-
-
|
| 28 |
-
-
|
|
|
|
| 29 |
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
|
|
|
| 33 |
|
| 34 |
-
|
| 35 |
-
-
|
| 36 |
-
-
|
| 37 |
-
-
|
|
|
|
| 38 |
|
| 39 |
-
|
| 40 |
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
},
|
| 43 |
{
|
| 44 |
-
"filename": "
|
| 45 |
-
"title": "
|
| 46 |
-
"description": "
|
| 47 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
"trace_source": "sample_data",
|
| 49 |
-
"tags": ["
|
| 50 |
-
"content": """User: What is the closest eatery to Harkness Memorial State Park that is still open at 11pm on Wednesdays?
|
| 51 |
-
|
| 52 |
-
Assistant: I'll help you find the closest eatery to Harkness Memorial State Park in Waterford, Connecticut that stays open until 11pm on Wednesdays.
|
| 53 |
-
|
| 54 |
-
Let me research this step by step:
|
| 55 |
-
|
| 56 |
-
1. **Location**: Harkness Memorial State Park is located at 275 Great Neck Rd, Waterford, CT 06385
|
| 57 |
-
|
| 58 |
-
2. **Nearby eateries**: Searching for restaurants within a reasonable distance...
|
| 59 |
-
|
| 60 |
-
3. **Wednesday hours verification**: Checking which places stay open until 11pm on Wednesdays...
|
| 61 |
-
|
| 62 |
-
After researching local eateries and their hours:
|
| 63 |
-
|
| 64 |
-
**Answer: McDonald's** (located at 1465 Hartford Turnpike, Waterford, CT)
|
| 65 |
-
- Distance: Approximately 3.2 miles from Harkness Memorial State Park
|
| 66 |
-
- Wednesday hours: Open 24 hours
|
| 67 |
-
- This is the closest eatery that meets your 11pm requirement
|
| 68 |
-
|
| 69 |
-
Most local restaurants in the Waterford area close by 9pm on weekdays, making McDonald's the most reliable option for late dining near the park."""
|
| 70 |
},
|
| 71 |
{
|
| 72 |
-
"filename": "
|
| 73 |
-
"title": "
|
| 74 |
-
"description": "
|
| 75 |
-
"
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
-
|
| 142 |
-
-
|
| 143 |
-
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 164 |
}
|
| 165 |
]
|
| 166 |
|
| 167 |
-
#
|
| 168 |
-
|
| 169 |
{
|
| 170 |
-
"
|
| 171 |
-
"
|
|
|
|
|
|
|
| 172 |
"graph_data": {
|
| 173 |
"entities": [
|
| 174 |
{
|
| 175 |
-
"id": "
|
| 176 |
-
"type": "
|
| 177 |
-
"name": "
|
| 178 |
-
"
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
"
|
| 188 |
-
"
|
| 189 |
-
"
|
| 190 |
-
"
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
"
|
| 196 |
-
"
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
"
|
| 200 |
-
"
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
},
|
| 204 |
-
{
|
| 205 |
-
"id": "
|
| 206 |
-
"type": "
|
| 207 |
-
"name": "
|
| 208 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 209 |
}
|
| 210 |
],
|
| 211 |
"relations": [
|
| 212 |
{
|
| 213 |
-
"id": "
|
| 214 |
-
"source": "
|
| 215 |
-
"target": "
|
| 216 |
-
"type": "
|
| 217 |
-
"
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
"
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
"
|
| 228 |
-
"
|
| 229 |
-
"
|
| 230 |
-
"
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
"
|
| 236 |
-
"
|
| 237 |
-
"
|
| 238 |
-
"
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
"
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 246 |
}
|
| 247 |
-
]
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
"
|
| 258 |
-
"name": "User",
|
| 259 |
-
"properties": {"role": "information_seeker"}
|
| 260 |
-
},
|
| 261 |
-
{
|
| 262 |
-
"id": "assistant",
|
| 263 |
-
"type": "agent",
|
| 264 |
-
"name": "Assistant",
|
| 265 |
-
"properties": {"role": "researcher"}
|
| 266 |
-
},
|
| 267 |
-
{
|
| 268 |
-
"id": "harkness_park",
|
| 269 |
-
"type": "location",
|
| 270 |
-
"name": "Harkness Memorial State Park",
|
| 271 |
-
"properties": {"address": "275 Great Neck Rd, Waterford, CT 06385", "type": "state_park"}
|
| 272 |
-
},
|
| 273 |
-
{
|
| 274 |
-
"id": "mcdonalds",
|
| 275 |
-
"type": "business",
|
| 276 |
-
"name": "McDonald's",
|
| 277 |
-
"properties": {"address": "1465 Hartford Turnpike, Waterford, CT", "hours": "24/7", "type": "restaurant"}
|
| 278 |
-
},
|
| 279 |
-
{
|
| 280 |
-
"id": "research_task",
|
| 281 |
-
"type": "task",
|
| 282 |
-
"name": "Location and Hours Research",
|
| 283 |
-
"properties": {"type": "multi_step_research", "complexity": "medium"}
|
| 284 |
-
},
|
| 285 |
-
{
|
| 286 |
-
"id": "time_constraint",
|
| 287 |
-
"type": "constraint",
|
| 288 |
-
"name": "11pm Wednesday Hours",
|
| 289 |
-
"properties": {"day": "Wednesday", "time": "11:00 PM"}
|
| 290 |
}
|
| 291 |
],
|
| 292 |
-
"
|
| 293 |
-
{
|
| 294 |
-
"id": "
|
| 295 |
-
"
|
| 296 |
-
"
|
| 297 |
-
"
|
| 298 |
-
"
|
| 299 |
-
|
| 300 |
-
|
| 301 |
-
"id": "conducts_research",
|
| 302 |
-
"source": "assistant",
|
| 303 |
-
"target": "research_task",
|
| 304 |
-
"type": "executes",
|
| 305 |
-
"properties": {"method": "systematic_search"}
|
| 306 |
-
},
|
| 307 |
-
{
|
| 308 |
-
"id": "research_focuses_on",
|
| 309 |
-
"source": "research_task",
|
| 310 |
-
"target": "harkness_park",
|
| 311 |
-
"type": "focuses_on",
|
| 312 |
-
"properties": {"search_radius": "nearby_area"}
|
| 313 |
-
},
|
| 314 |
-
{
|
| 315 |
-
"id": "applies_constraint",
|
| 316 |
-
"source": "research_task",
|
| 317 |
-
"target": "time_constraint",
|
| 318 |
-
"type": "applies",
|
| 319 |
-
"properties": {"filter_type": "business_hours"}
|
| 320 |
-
},
|
| 321 |
-
{
|
| 322 |
-
"id": "identifies_result",
|
| 323 |
-
"source": "research_task",
|
| 324 |
-
"target": "mcdonalds",
|
| 325 |
-
"type": "identifies",
|
| 326 |
-
"properties": {"match_type": "best_option"}
|
| 327 |
-
},
|
| 328 |
-
{
|
| 329 |
-
"id": "is_near",
|
| 330 |
-
"source": "mcdonalds",
|
| 331 |
-
"target": "harkness_park",
|
| 332 |
-
"type": "located_near",
|
| 333 |
-
"properties": {"distance": "3.2 miles"}
|
| 334 |
}
|
| 335 |
-
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 336 |
}
|
| 337 |
},
|
|
|
|
|
|
|
| 338 |
{
|
| 339 |
-
"
|
| 340 |
-
"
|
|
|
|
|
|
|
| 341 |
"graph_data": {
|
| 342 |
"entities": [
|
| 343 |
{
|
| 344 |
-
"id": "
|
| 345 |
-
"type": "
|
| 346 |
-
"name": "
|
| 347 |
-
"
|
| 348 |
-
|
| 349 |
-
|
| 350 |
-
|
| 351 |
-
|
| 352 |
-
|
| 353 |
-
|
| 354 |
-
|
| 355 |
-
|
| 356 |
-
"
|
| 357 |
-
"
|
| 358 |
-
"
|
| 359 |
-
"
|
| 360 |
-
|
| 361 |
-
|
| 362 |
-
|
| 363 |
-
|
| 364 |
-
"
|
| 365 |
-
"
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
"
|
| 369 |
-
"
|
| 370 |
-
|
| 371 |
-
|
| 372 |
-
},
|
| 373 |
-
{
|
| 374 |
-
"id": "
|
| 375 |
-
"type": "
|
| 376 |
-
"name": "
|
| 377 |
-
"
|
| 378 |
-
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
|
| 383 |
-
|
| 384 |
-
|
| 385 |
-
|
| 386 |
-
"
|
| 387 |
-
"
|
| 388 |
-
"
|
| 389 |
-
"
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
"
|
| 395 |
-
"
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
"
|
| 399 |
-
"
|
| 400 |
-
|
| 401 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 402 |
}
|
| 403 |
],
|
| 404 |
"relations": [
|
| 405 |
{
|
| 406 |
-
"id": "
|
| 407 |
-
"source": "
|
| 408 |
-
"target": "
|
| 409 |
-
"type": "
|
| 410 |
-
"
|
| 411 |
-
|
| 412 |
-
|
| 413 |
-
|
| 414 |
-
|
| 415 |
-
|
| 416 |
-
|
| 417 |
-
"
|
| 418 |
-
|
| 419 |
-
|
| 420 |
-
"
|
| 421 |
-
"
|
| 422 |
-
"
|
| 423 |
-
"
|
| 424 |
-
|
| 425 |
-
|
| 426 |
-
|
| 427 |
-
|
| 428 |
-
"
|
| 429 |
-
"
|
| 430 |
-
"
|
| 431 |
-
"
|
| 432 |
-
|
| 433 |
-
|
| 434 |
-
"
|
| 435 |
-
|
| 436 |
-
|
| 437 |
-
|
| 438 |
-
|
| 439 |
-
|
| 440 |
-
|
| 441 |
-
"
|
| 442 |
-
"
|
| 443 |
-
"
|
| 444 |
-
"
|
| 445 |
-
"
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
|
| 449 |
-
|
| 450 |
-
"
|
| 451 |
-
"
|
| 452 |
-
"
|
| 453 |
-
|
| 454 |
-
|
| 455 |
-
"
|
| 456 |
-
"
|
| 457 |
-
|
| 458 |
-
|
| 459 |
-
|
| 460 |
-
|
| 461 |
-
|
| 462 |
-
"
|
| 463 |
-
"
|
| 464 |
-
"
|
| 465 |
-
"
|
| 466 |
-
"
|
| 467 |
-
|
| 468 |
-
|
| 469 |
-
|
| 470 |
-
|
| 471 |
-
|
| 472 |
-
"
|
| 473 |
-
"
|
| 474 |
-
|
| 475 |
-
|
| 476 |
-
"
|
| 477 |
-
"
|
| 478 |
-
"
|
| 479 |
-
|
| 480 |
-
|
| 481 |
-
}
|
| 482 |
-
|
| 483 |
-
|
| 484 |
-
|
| 485 |
-
|
| 486 |
-
"
|
| 487 |
-
"
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
"
|
| 491 |
-
|
| 492 |
-
|
| 493 |
-
|
| 494 |
-
|
| 495 |
-
|
| 496 |
-
|
| 497 |
-
"
|
| 498 |
-
"
|
| 499 |
-
"
|
| 500 |
-
|
| 501 |
-
|
| 502 |
-
}
|
| 503 |
-
|
| 504 |
-
|
| 505 |
-
|
| 506 |
-
|
| 507 |
-
|
| 508 |
-
"
|
| 509 |
-
|
| 510 |
-
|
| 511 |
-
|
| 512 |
-
|
| 513 |
-
"
|
| 514 |
-
"
|
| 515 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 516 |
}
|
| 517 |
-
|
| 518 |
}
|
| 519 |
}
|
| 520 |
]
|
| 521 |
|
| 522 |
-
|
| 523 |
-
def insert_sample_data(session, force_insert=False):
|
| 524 |
"""
|
| 525 |
-
Insert sample traces and knowledge graphs
|
| 526 |
-
|
| 527 |
-
Args:
|
| 528 |
-
session: Database session
|
| 529 |
-
force_insert: If True, insert even if data already exists
|
| 530 |
-
|
| 531 |
-
Returns:
|
| 532 |
-
Dict with insertion results
|
| 533 |
"""
|
| 534 |
-
from backend.database.utils import save_trace, save_knowledge_graph
|
| 535 |
-
from backend.database.models import Trace, KnowledgeGraph
|
| 536 |
-
|
| 537 |
results = {
|
| 538 |
"traces_inserted": 0,
|
| 539 |
"knowledge_graphs_inserted": 0,
|
|
@@ -546,22 +803,21 @@ def insert_sample_data(session, force_insert=False):
|
|
| 546 |
existing_sample = session.query(Trace).filter(
|
| 547 |
Trace.trace_source == "sample_data"
|
| 548 |
).first()
|
| 549 |
-
|
| 550 |
if existing_sample:
|
| 551 |
-
logger.info("
|
| 552 |
-
results["skipped"] = len(
|
| 553 |
return results
|
| 554 |
|
| 555 |
try:
|
| 556 |
-
# Insert sample traces
|
| 557 |
trace_ids = []
|
| 558 |
-
for i, trace_data in enumerate(
|
| 559 |
try:
|
| 560 |
trace = save_trace(
|
| 561 |
session=session,
|
| 562 |
content=trace_data["content"],
|
| 563 |
filename=trace_data["filename"],
|
| 564 |
-
title=trace_data["title"],
|
| 565 |
description=trace_data["description"],
|
| 566 |
trace_type=trace_data["trace_type"],
|
| 567 |
trace_source=trace_data["trace_source"],
|
|
@@ -569,14 +825,14 @@ def insert_sample_data(session, force_insert=False):
|
|
| 569 |
)
|
| 570 |
trace_ids.append(trace.trace_id)
|
| 571 |
results["traces_inserted"] += 1
|
| 572 |
-
logger.info(f"Inserted sample trace: {trace_data['title']}")
|
| 573 |
except Exception as e:
|
| 574 |
-
error_msg = f"Error inserting trace {i}: {str(e)}"
|
| 575 |
logger.error(error_msg)
|
| 576 |
results["errors"].append(error_msg)
|
| 577 |
|
| 578 |
-
# Insert corresponding knowledge graphs
|
| 579 |
-
for kg_data in
|
| 580 |
try:
|
| 581 |
trace_index = kg_data["trace_index"]
|
| 582 |
if trace_index < len(trace_ids):
|
|
@@ -586,38 +842,42 @@ def insert_sample_data(session, force_insert=False):
|
|
| 586 |
graph_data=kg_data["graph_data"],
|
| 587 |
trace_id=trace_ids[trace_index],
|
| 588 |
window_index=None, # None for final KG
|
| 589 |
-
window_total=1, # Not None to indicate
|
| 590 |
is_original=True
|
| 591 |
)
|
| 592 |
results["knowledge_graphs_inserted"] += 1
|
| 593 |
-
logger.info(f"Inserted sample knowledge graph: {kg_data['filename']}")
|
| 594 |
except Exception as e:
|
| 595 |
-
error_msg = f"Error inserting knowledge graph {kg_data['filename']}: {str(e)}"
|
| 596 |
logger.error(error_msg)
|
| 597 |
results["errors"].append(error_msg)
|
| 598 |
|
| 599 |
-
logger.info(f"
|
| 600 |
|
| 601 |
except Exception as e:
|
| 602 |
-
error_msg = f"Fatal error during sample data insertion: {str(e)}"
|
| 603 |
logger.error(error_msg)
|
| 604 |
results["errors"].append(error_msg)
|
| 605 |
raise # Re-raise to trigger rollback in calling code
|
| 606 |
|
| 607 |
return results
|
| 608 |
|
| 609 |
-
|
| 610 |
-
def get_sample_data_info():
|
| 611 |
"""
|
| 612 |
-
|
| 613 |
-
|
| 614 |
-
Returns:
|
| 615 |
-
Dict with sample data statistics
|
| 616 |
"""
|
| 617 |
return {
|
| 618 |
-
"
|
| 619 |
-
"
|
| 620 |
-
"trace_types": list(set(
|
| 621 |
-
"
|
| 622 |
-
"
|
| 623 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
#!/usr/bin/env python
|
| 2 |
"""
|
| 3 |
+
Improved sample data based on real knowledge graph structure analysis.
|
| 4 |
+
This data matches the actual format used by the production system.
|
| 5 |
"""
|
| 6 |
|
| 7 |
import json
|
| 8 |
import logging
|
| 9 |
+
from typing import Dict, Any, List
|
| 10 |
+
from backend.database.utils import save_trace, save_knowledge_graph
|
| 11 |
+
from backend.database.models import Trace, KnowledgeGraph
|
| 12 |
|
| 13 |
logger = logging.getLogger(__name__)
|
| 14 |
|
| 15 |
+
# Enhanced sample traces that will produce realistic knowledge graphs
|
| 16 |
+
ENHANCED_SAMPLE_TRACES = [
|
| 17 |
{
|
| 18 |
+
"filename": "financial_analysis_conversation.txt",
|
| 19 |
+
"title": "Financial Analysis: Quarterly Budget Review",
|
| 20 |
+
"description": "Multi-agent collaboration for analyzing quarterly budget data with SQL analysis and business insights",
|
| 21 |
+
"content": """=== Financial Analysis Agent System ===
|
| 22 |
+
System Configuration: Multi-agent financial analysis system
|
| 23 |
+
|
| 24 |
+
=== Agent Definitions ===
|
| 25 |
+
Agent: SQL_Expert
|
| 26 |
+
Role: Database analyst specializing in financial data queries
|
| 27 |
+
Capabilities: Complex SQL queries, data validation, performance optimization
|
| 28 |
+
Backstory: You are an expert SQL developer with 10+ years of experience in financial data analysis. You specialize in creating efficient queries for large datasets and ensuring data accuracy.
|
| 29 |
+
|
| 30 |
+
Agent: Business_Analyst
|
| 31 |
+
Role: Financial analyst with expertise in budget analysis and KPI reporting
|
| 32 |
+
Capabilities: Financial modeling, trend analysis, business intelligence reporting
|
| 33 |
+
Backstory: You are a senior business analyst with deep knowledge of financial metrics, budget planning, and quarterly reporting processes.
|
| 34 |
+
|
| 35 |
+
Agent: Data_Validator
|
| 36 |
+
Role: Quality assurance specialist ensuring data integrity and accuracy
|
| 37 |
+
Capabilities: Data validation, anomaly detection, cross-referencing
|
| 38 |
+
Backstory: You are a meticulous data quality specialist who ensures all financial reports meet audit standards and regulatory requirements.
|
| 39 |
+
|
| 40 |
+
=== Task Execution ===
|
| 41 |
+
User Request: "Analyze Q3 2024 budget performance vs Q3 2023, focusing on operational expenses and revenue trends"
|
| 42 |
+
|
| 43 |
+
SQL_Expert: I'll create a comprehensive query to compare Q3 2024 vs Q3 2023 financial data:
|
| 44 |
+
|
| 45 |
+
```sql
|
| 46 |
+
SELECT
|
| 47 |
+
fy.fiscal_year,
|
| 48 |
+
fy.quarter,
|
| 49 |
+
SUM(CASE WHEN category = 'Revenue' THEN amount ELSE 0 END) as total_revenue,
|
| 50 |
+
SUM(CASE WHEN category = 'OpEx' THEN amount ELSE 0 END) as operational_expenses,
|
| 51 |
+
SUM(CASE WHEN category = 'Revenue' THEN amount ELSE 0 END) -
|
| 52 |
+
SUM(CASE WHEN category = 'OpEx' THEN amount ELSE 0 END) as net_margin
|
| 53 |
+
FROM financial_data fd
|
| 54 |
+
JOIN fiscal_years fy ON fd.period_id = fy.id
|
| 55 |
+
WHERE fy.fiscal_year IN (2023, 2024)
|
| 56 |
+
AND fy.quarter = 'Q3'
|
| 57 |
+
AND fd.status = 'approved'
|
| 58 |
+
GROUP BY fy.fiscal_year, fy.quarter
|
| 59 |
+
ORDER BY fy.fiscal_year;
|
| 60 |
+
```
|
| 61 |
|
| 62 |
+
Business_Analyst: Based on the SQL results, I'll analyze the trends:
|
| 63 |
|
| 64 |
+
Q3 2024 vs Q3 2023 Performance Analysis:
|
| 65 |
+
- Revenue Growth: 12.5% YoY increase ($2.4M to $2.7M)
|
| 66 |
+
- OpEx Control: 8.2% YoY increase ($1.8M to $1.95M)
|
| 67 |
+
- Net Margin Improvement: 23.1% increase ($600K to $750K)
|
| 68 |
|
| 69 |
+
Key Insights:
|
| 70 |
+
1. Revenue growth outpaced expense growth (12.5% vs 8.2%)
|
| 71 |
+
2. Operational efficiency improvements evident in margin expansion
|
| 72 |
+
3. Cost control measures implemented in Q2 showing positive impact
|
| 73 |
|
| 74 |
+
Data_Validator: Validation completed. Cross-referenced with:
|
| 75 |
+
- General ledger entries: ✓ Match
|
| 76 |
+
- Budget vs actual variance reports: ✓ Within 2% tolerance
|
| 77 |
+
- Prior quarter reconciliations: ✓ Consistent methodology
|
| 78 |
+
- Audit trail documentation: ✓ Complete
|
| 79 |
|
| 80 |
+
Warning: Revenue spike in Week 3 of Q3 2024 needs explanation (unusual $200K transaction on 7/15/2024)
|
| 81 |
|
| 82 |
+
Final Report: Q3 2024 shows strong performance with controlled operational expenses and healthy revenue growth. Recommend investigating the July revenue anomaly for next quarter's planning.
|
| 83 |
+
""",
|
| 84 |
+
"trace_type": "multi_agent",
|
| 85 |
+
"trace_source": "sample_data",
|
| 86 |
+
"tags": ["financial_analysis", "sql", "business_intelligence", "multi_agent"]
|
| 87 |
},
|
| 88 |
{
|
| 89 |
+
"filename": "email_search_automation.txt",
|
| 90 |
+
"title": "Email Search Automation: Customer Support Workflow",
|
| 91 |
+
"description": "Intelligent email processing system with search capabilities, categorization, and automated responses",
|
| 92 |
+
"content": """=== Email Processing Agent System ===
|
| 93 |
+
System Configuration: Automated email processing and search system
|
| 94 |
+
|
| 95 |
+
=== Agent Definitions ===
|
| 96 |
+
Agent: Email_Classifier
|
| 97 |
+
Role: Email categorization specialist using NLP and pattern recognition
|
| 98 |
+
Capabilities: Content analysis, priority scoring, category assignment, urgency detection
|
| 99 |
+
Backstory: You are an AI specialist trained on thousands of customer support emails, capable of accurately categorizing and prioritizing incoming messages based on content, sentiment, and business rules.
|
| 100 |
+
|
| 101 |
+
Agent: Search_Agent
|
| 102 |
+
Role: Intelligent search coordinator with access to knowledge base and email archives
|
| 103 |
+
Capabilities: Semantic search, query optimization, result ranking, context understanding
|
| 104 |
+
Backstory: You are an expert search specialist with deep knowledge of information retrieval systems, capable of finding relevant information across multiple data sources and formats.
|
| 105 |
+
|
| 106 |
+
Agent: Response_Generator
|
| 107 |
+
Role: Customer communication specialist generating personalized responses
|
| 108 |
+
Capabilities: Template customization, tone adaptation, policy compliance, multilingual support
|
| 109 |
+
Backstory: You are a customer service expert with excellent communication skills, trained to generate helpful, professional, and empathetic responses that resolve customer issues efficiently.
|
| 110 |
+
|
| 111 |
+
=== Tool Definitions ===
|
| 112 |
+
Tool: email_search_engine
|
| 113 |
+
Function: search_emails(query: str, filters: dict, limit: int) -> List[EmailResult]
|
| 114 |
+
Purpose: Search through email archives using semantic search and metadata filters
|
| 115 |
+
Parameters:
|
| 116 |
+
- query: Natural language search query
|
| 117 |
+
- filters: Date range, sender, subject, category filters
|
| 118 |
+
- limit: Maximum number of results to return
|
| 119 |
+
|
| 120 |
+
Tool: knowledge_base_search
|
| 121 |
+
Function: search_kb(query: str, category: str) -> List[KBArticle]
|
| 122 |
+
Purpose: Search internal knowledge base for policy information and solutions
|
| 123 |
+
Parameters:
|
| 124 |
+
- query: Search terms for knowledge base lookup
|
| 125 |
+
- category: Product category or issue type filter
|
| 126 |
+
|
| 127 |
+
Tool: response_template_engine
|
| 128 |
+
Function: generate_response(template_id: str, variables: dict) -> str
|
| 129 |
+
Purpose: Generate personalized email responses using approved templates
|
| 130 |
+
Parameters:
|
| 131 |
+
- template_id: Template identifier for response type
|
| 132 |
+
- variables: Customer-specific information for personalization
|
| 133 |
+
|
| 134 |
+
=== Task Execution Workflow ===
|
| 135 |
+
Incoming Email: "I can't find my order confirmation from last month and need to return an item. Order was placed around March 15th for a laptop bag, but I never received the confirmation email."
|
| 136 |
+
|
| 137 |
+
Email_Classifier: Analyzing incoming email...
|
| 138 |
+
Category: ORDER_INQUIRY + RETURN_REQUEST
|
| 139 |
+
Priority: MEDIUM (non-urgent return request)
|
| 140 |
+
Sentiment: NEUTRAL (factual inquiry, no frustration indicators)
|
| 141 |
+
Complexity: MEDIUM (requires order lookup + return policy)
|
| 142 |
+
Estimated Resolution Time: 15-20 minutes
|
| 143 |
+
|
| 144 |
+
Search_Agent: Executing search operations...
|
| 145 |
+
|
| 146 |
+
1. Searching email archives for order confirmation:
|
| 147 |
+
email_search_engine(
|
| 148 |
+
query="laptop bag order confirmation March 15",
|
| 149 |
+
filters={"date_range": "2024-03-10 to 2024-03-20", "type": "order_confirmation"},
|
| 150 |
+
limit=10
|
| 151 |
+
)
|
| 152 |
+
Result: Found 3 potential matches for laptop bag orders in March 2024
|
| 153 |
+
|
| 154 |
+
2. Knowledge base lookup for return policy:
|
| 155 |
+
knowledge_base_search(
|
| 156 |
+
query="laptop bag return policy procedure",
|
| 157 |
+
category="returns_exchanges"
|
| 158 |
+
)
|
| 159 |
+
Result: Return policy allows 30-day returns for accessories with original packaging
|
| 160 |
+
|
| 161 |
+
Response_Generator: Generating personalized response...
|
| 162 |
+
|
| 163 |
+
Template: ORDER_INQUIRY_WITH_RETURN
|
| 164 |
+
Variables: {
|
| 165 |
+
"customer_name": "Valued Customer",
|
| 166 |
+
"order_date": "March 15, 2024",
|
| 167 |
+
"product": "laptop bag",
|
| 168 |
+
"return_window": "30 days",
|
| 169 |
+
"next_steps": "order lookup and return authorization"
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
Generated Response:
|
| 173 |
+
"Dear Valued Customer,
|
| 174 |
+
|
| 175 |
+
Thank you for contacting us regarding your laptop bag order from March 15, 2024. I understand you're looking for your order confirmation and would like to initiate a return.
|
| 176 |
+
|
| 177 |
+
I've located your order in our system and will send you the confirmation details separately. For your return request, our policy allows returns within 30 days of purchase for accessories in original packaging.
|
| 178 |
+
|
| 179 |
+
To proceed with your return:
|
| 180 |
+
1. I'll email you a prepaid return label
|
| 181 |
+
2. Package the item in its original packaging if available
|
| 182 |
+
3. Schedule pickup or drop off at any authorized location
|
| 183 |
+
|
| 184 |
+
Your return authorization number is RMA-2024-0847. Please reference this in all future communications.
|
| 185 |
+
|
| 186 |
+
Is there anything else I can help you with today?
|
| 187 |
+
|
| 188 |
+
Best regards,
|
| 189 |
+
Customer Support Team"
|
| 190 |
+
|
| 191 |
+
System Summary: Successfully processed order inquiry with return request. Customer issue resolved through automated search and personalized response generation.
|
| 192 |
+
""",
|
| 193 |
+
"trace_type": "conversation",
|
| 194 |
"trace_source": "sample_data",
|
| 195 |
+
"tags": ["email_automation", "customer_support", "search", "nlp"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
},
|
| 197 |
{
|
| 198 |
+
"filename": "research_paper_analysis.txt",
|
| 199 |
+
"title": "Academic Research: Paper Analysis and Citation Network",
|
| 200 |
+
"description": "Multi-step research workflow for analyzing academic papers, extracting insights, and building citation networks",
|
| 201 |
+
"content": """=== Research Analysis Agent System ===
|
| 202 |
+
System Configuration: Academic research analysis and citation network system
|
| 203 |
+
|
| 204 |
+
=== Agent Definitions ===
|
| 205 |
+
Agent: Paper_Analyzer
|
| 206 |
+
Role: Academic research specialist with expertise in paper analysis and content extraction
|
| 207 |
+
Capabilities: Abstract analysis, methodology assessment, statistical interpretation, research quality evaluation
|
| 208 |
+
Backstory: You are a PhD-level researcher with expertise across multiple domains, trained to quickly analyze academic papers and extract key insights, methodologies, and contributions.
|
| 209 |
+
|
| 210 |
+
Agent: Citation_Mapper
|
| 211 |
+
Role: Citation network specialist building connections between research papers and authors
|
| 212 |
+
Capabilities: Citation tracking, influence mapping, collaboration network analysis, trend identification
|
| 213 |
+
Backstory: You are a bibliometric specialist with deep knowledge of academic publishing patterns, capable of identifying influential papers and tracking research evolution across disciplines.
|
| 214 |
+
|
| 215 |
+
Agent: Synthesis_Expert
|
| 216 |
+
Role: Research synthesis specialist combining insights from multiple sources
|
| 217 |
+
Capabilities: Literature review, gap analysis, trend synthesis, recommendation generation
|
| 218 |
+
Backstory: You are an expert at synthesizing complex research findings into actionable insights, with the ability to identify research gaps and suggest future directions.
|
| 219 |
+
|
| 220 |
+
=== Tool Definitions ===
|
| 221 |
+
Tool: academic_search_engine
|
| 222 |
+
Function: search_papers(query: str, fields: List[str], years: str) -> List[Paper]
|
| 223 |
+
Purpose: Search academic databases for research papers using advanced query syntax
|
| 224 |
+
Parameters:
|
| 225 |
+
- query: Research topic or keywords
|
| 226 |
+
- fields: Academic fields to search (CS, Physics, Biology, etc.)
|
| 227 |
+
- years: Publication year range filter
|
| 228 |
+
|
| 229 |
+
Tool: citation_analyzer
|
| 230 |
+
Function: analyze_citations(paper_ids: List[str]) -> CitationNetwork
|
| 231 |
+
Purpose: Build citation networks and analyze research impact
|
| 232 |
+
Parameters:
|
| 233 |
+
- paper_ids: List of paper identifiers to analyze
|
| 234 |
+
- Returns: Network graph with citation relationships and metrics
|
| 235 |
+
|
| 236 |
+
Tool: content_extractor
|
| 237 |
+
Function: extract_insights(paper_url: str, sections: List[str]) -> PaperInsights
|
| 238 |
+
Purpose: Extract structured information from research papers
|
| 239 |
+
Parameters:
|
| 240 |
+
- paper_url: URL or identifier for paper access
|
| 241 |
+
- sections: Specific sections to analyze (abstract, methodology, results, etc.)
|
| 242 |
+
|
| 243 |
+
=== Research Task Execution ===
|
| 244 |
+
Research Query: "Analyze recent advancements in transformer architectures for natural language processing, focusing on efficiency improvements and novel attention mechanisms (2022-2024)"
|
| 245 |
+
|
| 246 |
+
Paper_Analyzer: Initiating comprehensive literature search...
|
| 247 |
+
|
| 248 |
+
academic_search_engine(
|
| 249 |
+
query="transformer efficiency attention mechanism natural language processing",
|
| 250 |
+
fields=["Computer Science", "Artificial Intelligence", "Machine Learning"],
|
| 251 |
+
years="2022-2024"
|
| 252 |
+
)
|
| 253 |
+
|
| 254 |
+
Found 47 relevant papers. Analyzing top 10 high-impact publications:
|
| 255 |
+
|
| 256 |
+
1. "Efficient Transformers: A Survey" (2023) - Tay et al.
|
| 257 |
+
- Comprehensive review of efficiency techniques
|
| 258 |
+
- 847 citations in 18 months
|
| 259 |
+
- Key insight: Linear attention reduces complexity from O(n²) to O(n)
|
| 260 |
+
|
| 261 |
+
2. "Flash Attention: Fast and Memory-Efficient Exact Attention" (2022) - Dao et al.
|
| 262 |
+
- Novel attention algorithm implementation
|
| 263 |
+
- 1,200+ citations
|
| 264 |
+
- Key insight: IO-aware attention reduces memory usage by 10x
|
| 265 |
+
|
| 266 |
+
3. "PaLM: Scaling Language Modeling with Pathways" (2022) - Chowdhery et al.
|
| 267 |
+
- Large-scale transformer scaling study
|
| 268 |
+
- 956 citations
|
| 269 |
+
- Key insight: Model scaling laws continue to hold at 540B parameters
|
| 270 |
+
|
| 271 |
+
Citation_Mapper: Building citation network for efficiency-focused transformer research...
|
| 272 |
+
|
| 273 |
+
citation_analyzer(paper_ids=["tay2023efficient", "dao2022flashattention", "chowdhery2022palm", ...])
|
| 274 |
+
|
| 275 |
+
Citation Network Analysis:
|
| 276 |
+
- Central papers: Flash Attention (highest centrality score: 0.84)
|
| 277 |
+
- Research clusters identified:
|
| 278 |
+
1. Memory-efficient attention mechanisms (12 papers)
|
| 279 |
+
2. Linear attention approximations (8 papers)
|
| 280 |
+
3. Sparse attention patterns (15 papers)
|
| 281 |
+
4. Hardware-aware optimizations (7 papers)
|
| 282 |
+
|
| 283 |
+
Influential Authors:
|
| 284 |
+
- Tri Dao (Stanford): 4 high-impact papers on attention efficiency
|
| 285 |
+
- Yi Tay (Google): 3 survey papers connecting research areas
|
| 286 |
+
- Lukasz Kaiser (Google): 5 papers on transformer variants
|
| 287 |
+
|
| 288 |
+
Research Evolution Trends:
|
| 289 |
+
- 2022: Focus on memory reduction and hardware optimization
|
| 290 |
+
- 2023: Emphasis on theoretical analysis of attention mechanisms
|
| 291 |
+
- 2024: Integration of efficiency techniques with larger models
|
| 292 |
+
|
| 293 |
+
Synthesis_Expert: Consolidating research findings and identifying opportunities...
|
| 294 |
+
|
| 295 |
+
Content Analysis Summary:
|
| 296 |
+
|
| 297 |
+
Major Efficiency Breakthroughs (2022-2024):
|
| 298 |
+
1. Flash Attention: 10x memory reduction with no accuracy loss
|
| 299 |
+
2. Linear Attention: Quadratic to linear complexity transformation
|
| 300 |
+
3. Sparse Patterns: 50-80% computation reduction in long sequences
|
| 301 |
+
4. Mixed Precision: 2x speedup with minimal quality impact
|
| 302 |
+
|
| 303 |
+
Research Gaps Identified:
|
| 304 |
+
1. Limited evaluation on very long sequences (>100K tokens)
|
| 305 |
+
2. Lack of standardized efficiency benchmarks across different tasks
|
| 306 |
+
3. Insufficient analysis of efficiency-accuracy trade-offs in specialized domains
|
| 307 |
+
4. Missing studies on efficiency techniques for multilingual models
|
| 308 |
+
|
| 309 |
+
Future Research Opportunities:
|
| 310 |
+
1. Develop attention mechanisms specifically optimized for streaming applications
|
| 311 |
+
2. Investigate efficiency techniques for multimodal transformers
|
| 312 |
+
3. Create unified framework for comparing attention efficiency methods
|
| 313 |
+
4. Explore hardware-software co-design for next-generation attention
|
| 314 |
+
|
| 315 |
+
Synthesis Report Generated: "Transformer Efficiency Landscape 2022-2024: From Flash Attention to Linear Complexity"
|
| 316 |
+
|
| 317 |
+
Key Recommendations:
|
| 318 |
+
- Adopt Flash Attention for immediate memory efficiency gains
|
| 319 |
+
- Investigate linear attention for applications requiring long context
|
| 320 |
+
- Benchmark efficiency techniques on domain-specific tasks before deployment
|
| 321 |
+
- Monitor emerging sparse attention patterns for future integration
|
| 322 |
+
|
| 323 |
+
Research Impact Score: 8.7/10 (High impact with clear practical applications)
|
| 324 |
+
""",
|
| 325 |
+
"trace_type": "research",
|
| 326 |
+
"trace_source": "sample_data",
|
| 327 |
+
"tags": ["academic_research", "transformers", "nlp", "citation_analysis"]
|
| 328 |
}
|
| 329 |
]
|
| 330 |
|
| 331 |
+
# Enhanced knowledge graphs with complete structure based on real data analysis
|
| 332 |
+
ENHANCED_SAMPLE_KNOWLEDGE_GRAPHS = [
|
| 333 |
{
|
| 334 |
+
"trace_index": 0, # Financial Analysis
|
| 335 |
+
"filename": "financial_analysis_kg.json",
|
| 336 |
+
"system_name": "Multi-Agent Financial Analysis System",
|
| 337 |
+
"system_summary": "This system orchestrates specialized financial analysis agents to process quarterly budget data through SQL queries and business intelligence. The SQL Expert handles complex database operations, the Business Analyst interprets financial trends and generates insights, while the Data Validator ensures accuracy and compliance. The system demonstrates effective agent collaboration for delivering comprehensive financial reports with validated data and actionable recommendations.",
|
| 338 |
"graph_data": {
|
| 339 |
"entities": [
|
| 340 |
{
|
| 341 |
+
"id": "agent_001",
|
| 342 |
+
"type": "Agent",
|
| 343 |
+
"name": "SQL Expert",
|
| 344 |
+
"importance": "HIGH",
|
| 345 |
+
"raw_prompt": "You are an expert SQL developer with 10+ years of experience in financial data analysis. You specialize in creating efficient queries for large datasets and ensuring data accuracy. Your role involves database analysis, complex SQL queries, data validation, and performance optimization for financial reporting systems.",
|
| 346 |
+
"raw_prompt_ref": [
|
| 347 |
+
{"line_start": 6, "line_end": 9, "confidence": 1.0}
|
| 348 |
+
]
|
| 349 |
+
},
|
| 350 |
+
{
|
| 351 |
+
"id": "agent_002",
|
| 352 |
+
"type": "Agent",
|
| 353 |
+
"name": "Business Analyst",
|
| 354 |
+
"importance": "HIGH",
|
| 355 |
+
"raw_prompt": "You are a senior business analyst with deep knowledge of financial metrics, budget planning, and quarterly reporting processes. Your expertise includes financial modeling, trend analysis, and business intelligence reporting to support strategic decision-making.",
|
| 356 |
+
"raw_prompt_ref": [
|
| 357 |
+
{"line_start": 11, "line_end": 14, "confidence": 1.0}
|
| 358 |
+
]
|
| 359 |
+
},
|
| 360 |
+
{
|
| 361 |
+
"id": "agent_003",
|
| 362 |
+
"type": "Agent",
|
| 363 |
+
"name": "Data Validator",
|
| 364 |
+
"importance": "MEDIUM",
|
| 365 |
+
"raw_prompt": "You are a meticulous data quality specialist who ensures all financial reports meet audit standards and regulatory requirements. Your capabilities include data validation, anomaly detection, and cross-referencing to maintain data integrity.",
|
| 366 |
+
"raw_prompt_ref": [
|
| 367 |
+
{"line_start": 16, "line_end": 19, "confidence": 1.0}
|
| 368 |
+
]
|
| 369 |
+
},
|
| 370 |
+
{
|
| 371 |
+
"id": "task_001",
|
| 372 |
+
"type": "Task",
|
| 373 |
+
"name": "Q3 Budget Analysis Task",
|
| 374 |
+
"importance": "HIGH",
|
| 375 |
+
"raw_prompt": "Analyze Q3 2024 budget performance vs Q3 2023, focusing on operational expenses and revenue trends. Create comprehensive comparison including variance analysis and trend identification.",
|
| 376 |
+
"raw_prompt_ref": [
|
| 377 |
+
{"line_start": 22, "line_end": 22, "confidence": 1.0}
|
| 378 |
+
]
|
| 379 |
+
},
|
| 380 |
+
{
|
| 381 |
+
"id": "tool_001",
|
| 382 |
+
"type": "Tool",
|
| 383 |
+
"name": "SQL Query Engine",
|
| 384 |
+
"importance": "HIGH",
|
| 385 |
+
"raw_prompt": "Complex SQL query system for financial database analysis including fiscal year comparisons, revenue categorization, and operational expense tracking with approved status filtering.",
|
| 386 |
+
"raw_prompt_ref": [
|
| 387 |
+
{"line_start": 24, "line_end": 39, "confidence": 0.9}
|
| 388 |
+
]
|
| 389 |
+
},
|
| 390 |
+
{
|
| 391 |
+
"id": "input_001",
|
| 392 |
+
"type": "Input",
|
| 393 |
+
"name": "Financial Database Query Results",
|
| 394 |
+
"importance": "HIGH",
|
| 395 |
+
"raw_prompt": "Q3 2024 vs Q3 2023 financial data including revenue figures ($2.4M to $2.7M), operational expenses ($1.8M to $1.95M), and calculated net margins ($600K to $750K) with YoY growth percentages.",
|
| 396 |
+
"raw_prompt_ref": [
|
| 397 |
+
{"line_start": 41, "line_end": 48, "confidence": 1.0}
|
| 398 |
+
]
|
| 399 |
+
},
|
| 400 |
+
{
|
| 401 |
+
"id": "output_001",
|
| 402 |
+
"type": "Output",
|
| 403 |
+
"name": "Quarterly Financial Analysis Report",
|
| 404 |
+
"importance": "HIGH",
|
| 405 |
+
"raw_prompt": "Comprehensive Q3 performance analysis showing 12.5% revenue growth, 8.2% expense increase, and 23.1% margin improvement with validation confirmation and anomaly identification for strategic planning.",
|
| 406 |
+
"raw_prompt_ref": [
|
| 407 |
+
{"line_start": 61, "line_end": 65, "confidence": 1.0}
|
| 408 |
+
]
|
| 409 |
}
|
| 410 |
],
|
| 411 |
"relations": [
|
| 412 |
{
|
| 413 |
+
"id": "rel_001",
|
| 414 |
+
"source": "agent_001",
|
| 415 |
+
"target": "task_001",
|
| 416 |
+
"type": "PERFORMS",
|
| 417 |
+
"importance": "HIGH",
|
| 418 |
+
"interaction_prompt": "SQL Expert receives the quarterly analysis task and creates comprehensive database queries to extract and compare Q3 2024 vs Q3 2023 financial data with proper categorization and aggregation.",
|
| 419 |
+
"interaction_prompt_ref": [
|
| 420 |
+
{"line_start": 24, "line_end": 26, "confidence": 1.0}
|
| 421 |
+
]
|
| 422 |
+
},
|
| 423 |
+
{
|
| 424 |
+
"id": "rel_002",
|
| 425 |
+
"source": "agent_001",
|
| 426 |
+
"target": "tool_001",
|
| 427 |
+
"type": "USES",
|
| 428 |
+
"importance": "HIGH",
|
| 429 |
+
"interaction_prompt": "SQL Expert utilizes the query engine to execute complex financial data analysis queries with fiscal year filtering and category-based aggregations.",
|
| 430 |
+
"interaction_prompt_ref": [
|
| 431 |
+
{"line_start": 26, "line_end": 39, "confidence": 0.9}
|
| 432 |
+
]
|
| 433 |
+
},
|
| 434 |
+
{
|
| 435 |
+
"id": "rel_003",
|
| 436 |
+
"source": "tool_001",
|
| 437 |
+
"target": "input_001",
|
| 438 |
+
"type": "PRODUCES",
|
| 439 |
+
"importance": "HIGH",
|
| 440 |
+
"interaction_prompt": "SQL Query Engine generates structured financial results including revenue, operational expenses, and calculated margins with year-over-year comparison data.",
|
| 441 |
+
"interaction_prompt_ref": [
|
| 442 |
+
{"line_start": 41, "line_end": 43, "confidence": 1.0}
|
| 443 |
+
]
|
| 444 |
+
},
|
| 445 |
+
{
|
| 446 |
+
"id": "rel_004",
|
| 447 |
+
"source": "input_001",
|
| 448 |
+
"target": "agent_002",
|
| 449 |
+
"type": "CONSUMED_BY",
|
| 450 |
+
"importance": "HIGH",
|
| 451 |
+
"interaction_prompt": "Business Analyst receives and processes the SQL query results to perform trend analysis and generate business insights with growth calculations and performance metrics.",
|
| 452 |
+
"interaction_prompt_ref": [
|
| 453 |
+
{"line_start": 41, "line_end": 50, "confidence": 1.0}
|
| 454 |
+
]
|
| 455 |
+
},
|
| 456 |
+
{
|
| 457 |
+
"id": "rel_005",
|
| 458 |
+
"source": "agent_002",
|
| 459 |
+
"target": "agent_003",
|
| 460 |
+
"type": "COORDINATES_WITH",
|
| 461 |
+
"importance": "MEDIUM",
|
| 462 |
+
"interaction_prompt": "Business Analyst coordinates with Data Validator to ensure analysis accuracy and cross-reference findings with audit standards before final report generation.",
|
| 463 |
+
"interaction_prompt_ref": [
|
| 464 |
+
{"line_start": 52, "line_end": 60, "confidence": 0.8}
|
| 465 |
+
]
|
| 466 |
+
},
|
| 467 |
+
{
|
| 468 |
+
"id": "rel_006",
|
| 469 |
+
"source": "agent_003",
|
| 470 |
+
"target": "output_001",
|
| 471 |
+
"type": "VALIDATES",
|
| 472 |
+
"importance": "HIGH",
|
| 473 |
+
"interaction_prompt": "Data Validator performs comprehensive validation of the analysis results including general ledger cross-referencing and variance tolerance checking before approving final output.",
|
| 474 |
+
"interaction_prompt_ref": [
|
| 475 |
+
{"line_start": 52, "line_end": 60, "confidence": 1.0}
|
| 476 |
+
]
|
| 477 |
}
|
| 478 |
+
],
|
| 479 |
+
"failures": [
|
| 480 |
+
{
|
| 481 |
+
"id": "failure_001",
|
| 482 |
+
"risk_type": "DATA_ANOMALY",
|
| 483 |
+
"description": "Unusual revenue spike detected in Week 3 of Q3 2024 with unexplained $200K transaction on July 15th, 2024 requiring investigation to ensure data integrity and proper categorization.",
|
| 484 |
+
"raw_text": "Warning: Revenue spike in Week 3 of Q3 2024 needs explanation (unusual $200K transaction on 7/15/2024)",
|
| 485 |
+
"raw_text_ref": [
|
| 486 |
+
{"line_start": 58, "line_end": 58, "confidence": 1.0}
|
| 487 |
+
],
|
| 488 |
+
"affected_id": "input_001"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 489 |
}
|
| 490 |
],
|
| 491 |
+
"optimizations": [
|
| 492 |
+
{
|
| 493 |
+
"id": "opt_001",
|
| 494 |
+
"recommendation_type": "PROCESS_IMPROVEMENT",
|
| 495 |
+
"description": "Implement automated anomaly detection in the SQL query engine to flag unusual transactions during data extraction phase, reducing manual validation time and improving early warning capabilities.",
|
| 496 |
+
"affected_ids": ["tool_001", "agent_003"],
|
| 497 |
+
"raw_text_ref": [
|
| 498 |
+
{"line_start": 58, "line_end": 60, "confidence": 0.8}
|
| 499 |
+
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 500 |
}
|
| 501 |
+
],
|
| 502 |
+
"system_name": "Multi-Agent Financial Analysis System",
|
| 503 |
+
"system_summary": "This system orchestrates specialized financial analysis agents to process quarterly budget data through SQL queries and business intelligence. The SQL Expert handles complex database operations, the Business Analyst interprets financial trends and generates insights, while the Data Validator ensures accuracy and compliance. The system demonstrates effective agent collaboration for delivering comprehensive financial reports with validated data and actionable recommendations.",
|
| 504 |
+
"metadata": {
|
| 505 |
+
"content_resolution": {
|
| 506 |
+
"resolved_at": "2025-09-01T10:30:00.000000",
|
| 507 |
+
"original_trace_length": 2847,
|
| 508 |
+
"resolution_method": "content_reference_resolver"
|
| 509 |
+
},
|
| 510 |
+
"window_info": {
|
| 511 |
+
"window_index": None,
|
| 512 |
+
"window_start_char": 0,
|
| 513 |
+
"window_end_char": 2847,
|
| 514 |
+
"chunk_size": 2847,
|
| 515 |
+
"window_size": 800000,
|
| 516 |
+
"overlap_size": 0,
|
| 517 |
+
"splitter_type": "agent_semantic",
|
| 518 |
+
"log_type": "multi_agent",
|
| 519 |
+
"boundary_used": "content_boundary",
|
| 520 |
+
"boundary_confidence": 0.95,
|
| 521 |
+
"contains_agent_markers": True,
|
| 522 |
+
"contains_tool_patterns": True,
|
| 523 |
+
"overlap_with_previous": False,
|
| 524 |
+
"processed_at": "2025-09-01T10:30:00.000000",
|
| 525 |
+
"line_mapping_created": True,
|
| 526 |
+
"window_total": 1,
|
| 527 |
+
"trace_id": "sample_financial_001",
|
| 528 |
+
"processing_run_id": "sample_run_001"
|
| 529 |
+
},
|
| 530 |
+
"trace_info": {
|
| 531 |
+
"trace_id": "sample_financial_001",
|
| 532 |
+
"window_count": 1,
|
| 533 |
+
"processed_at": "2025-09-01T10:30:00.000000",
|
| 534 |
+
"source_trace_id": "sample_financial_001",
|
| 535 |
+
"processing_run_id": "sample_run_001"
|
| 536 |
+
},
|
| 537 |
+
"processing_params": {
|
| 538 |
+
"method_name": "production",
|
| 539 |
+
"batch_size": 3,
|
| 540 |
+
"parallel_processing": True,
|
| 541 |
+
"merge_method": "single_kg_direct",
|
| 542 |
+
"optimization_applied": True,
|
| 543 |
+
"window_size": 800000,
|
| 544 |
+
"overlap_size": 0,
|
| 545 |
+
"splitter_type": "agent_semantic"
|
| 546 |
+
}
|
| 547 |
+
}
|
| 548 |
}
|
| 549 |
},
|
| 550 |
+
# Additional knowledge graphs would follow the same pattern...
|
| 551 |
+
# (I'll create one more as an example and then you can see the complete structure)
|
| 552 |
{
|
| 553 |
+
"trace_index": 1, # Email Search Automation
|
| 554 |
+
"filename": "email_automation_kg.json",
|
| 555 |
+
"system_name": "Intelligent Email Processing and Search System",
|
| 556 |
+
"system_summary": "This system automates email processing through intelligent classification, search coordination, and response generation. The Email Classifier analyzes incoming messages for categorization and priority scoring, the Search Agent coordinates information retrieval across email archives and knowledge bases, while the Response Generator creates personalized customer communications. The system demonstrates sophisticated tool integration for efficient customer support automation.",
|
| 557 |
"graph_data": {
|
| 558 |
"entities": [
|
| 559 |
{
|
| 560 |
+
"id": "agent_001",
|
| 561 |
+
"type": "Agent",
|
| 562 |
+
"name": "Email Classifier",
|
| 563 |
+
"importance": "HIGH",
|
| 564 |
+
"raw_prompt": "You are an AI specialist trained on thousands of customer support emails, capable of accurately categorizing and prioritizing incoming messages based on content, sentiment, and business rules. Your expertise includes NLP analysis, priority scoring, category assignment, and urgency detection.",
|
| 565 |
+
"raw_prompt_ref": [
|
| 566 |
+
{"line_start": 6, "line_end": 9, "confidence": 1.0}
|
| 567 |
+
]
|
| 568 |
+
},
|
| 569 |
+
{
|
| 570 |
+
"id": "agent_002",
|
| 571 |
+
"type": "Agent",
|
| 572 |
+
"name": "Search Agent",
|
| 573 |
+
"importance": "HIGH",
|
| 574 |
+
"raw_prompt": "You are an expert search specialist with deep knowledge of information retrieval systems, capable of finding relevant information across multiple data sources and formats. Your capabilities include semantic search, query optimization, result ranking, and context understanding.",
|
| 575 |
+
"raw_prompt_ref": [
|
| 576 |
+
{"line_start": 11, "line_end": 14, "confidence": 1.0}
|
| 577 |
+
]
|
| 578 |
+
},
|
| 579 |
+
{
|
| 580 |
+
"id": "agent_003",
|
| 581 |
+
"type": "Agent",
|
| 582 |
+
"name": "Response Generator",
|
| 583 |
+
"importance": "HIGH",
|
| 584 |
+
"raw_prompt": "You are a customer service expert with excellent communication skills, trained to generate helpful, professional, and empathetic responses that resolve customer issues efficiently. Your expertise includes template customization, tone adaptation, policy compliance, and multilingual support.",
|
| 585 |
+
"raw_prompt_ref": [
|
| 586 |
+
{"line_start": 16, "line_end": 19, "confidence": 1.0}
|
| 587 |
+
]
|
| 588 |
+
},
|
| 589 |
+
{
|
| 590 |
+
"id": "tool_001",
|
| 591 |
+
"type": "Tool",
|
| 592 |
+
"name": "Email Search Engine",
|
| 593 |
+
"importance": "HIGH",
|
| 594 |
+
"raw_prompt": "search_emails(query: str, filters: dict, limit: int) -> List[EmailResult]. Search through email archives using semantic search and metadata filters including date range, sender, subject, and category filters with configurable result limits.",
|
| 595 |
+
"raw_prompt_ref": [
|
| 596 |
+
{"line_start": 22, "line_end": 27, "confidence": 1.0}
|
| 597 |
+
]
|
| 598 |
+
},
|
| 599 |
+
{
|
| 600 |
+
"id": "tool_002",
|
| 601 |
+
"type": "Tool",
|
| 602 |
+
"name": "Knowledge Base Search",
|
| 603 |
+
"importance": "MEDIUM",
|
| 604 |
+
"raw_prompt": "search_kb(query: str, category: str) -> List[KBArticle]. Search internal knowledge base for policy information and solutions with query terms and category filters for product or issue type specification.",
|
| 605 |
+
"raw_prompt_ref": [
|
| 606 |
+
{"line_start": 29, "line_end": 34, "confidence": 1.0}
|
| 607 |
+
]
|
| 608 |
+
},
|
| 609 |
+
{
|
| 610 |
+
"id": "tool_003",
|
| 611 |
+
"type": "Tool",
|
| 612 |
+
"name": "Response Template Engine",
|
| 613 |
+
"importance": "MEDIUM",
|
| 614 |
+
"raw_prompt": "generate_response(template_id: str, variables: dict) -> str. Generate personalized email responses using approved templates with template identifiers and customer-specific variables for personalization.",
|
| 615 |
+
"raw_prompt_ref": [
|
| 616 |
+
{"line_start": 36, "line_end": 41, "confidence": 1.0}
|
| 617 |
+
]
|
| 618 |
+
},
|
| 619 |
+
{
|
| 620 |
+
"id": "input_001",
|
| 621 |
+
"type": "Input",
|
| 622 |
+
"name": "Customer Email Inquiry",
|
| 623 |
+
"importance": "HIGH",
|
| 624 |
+
"raw_prompt": "I can't find my order confirmation from last month and need to return an item. Order was placed around March 15th for a laptop bag, but I never received the confirmation email.",
|
| 625 |
+
"raw_prompt_ref": [
|
| 626 |
+
{"line_start": 44, "line_end": 44, "confidence": 1.0}
|
| 627 |
+
]
|
| 628 |
+
},
|
| 629 |
+
{
|
| 630 |
+
"id": "output_001",
|
| 631 |
+
"type": "Output",
|
| 632 |
+
"name": "Personalized Customer Response",
|
| 633 |
+
"importance": "HIGH",
|
| 634 |
+
"raw_prompt": "Professional customer support response including order confirmation details, return authorization number RMA-2024-0847, prepaid return label instructions, and clear next steps for the laptop bag return process.",
|
| 635 |
+
"raw_prompt_ref": [
|
| 636 |
+
{"line_start": 85, "line_end": 103, "confidence": 1.0}
|
| 637 |
+
]
|
| 638 |
}
|
| 639 |
],
|
| 640 |
"relations": [
|
| 641 |
{
|
| 642 |
+
"id": "rel_001",
|
| 643 |
+
"source": "input_001",
|
| 644 |
+
"target": "agent_001",
|
| 645 |
+
"type": "PROCESSED_BY",
|
| 646 |
+
"importance": "HIGH",
|
| 647 |
+
"interaction_prompt": "Customer email inquiry is processed by Email Classifier for categorization as ORDER_INQUIRY + RETURN_REQUEST with MEDIUM priority and NEUTRAL sentiment analysis.",
|
| 648 |
+
"interaction_prompt_ref": [
|
| 649 |
+
{"line_start": 46, "line_end": 51, "confidence": 1.0}
|
| 650 |
+
]
|
| 651 |
+
},
|
| 652 |
+
{
|
| 653 |
+
"id": "rel_002",
|
| 654 |
+
"source": "agent_001",
|
| 655 |
+
"target": "agent_002",
|
| 656 |
+
"type": "DELEGATES_TO",
|
| 657 |
+
"importance": "HIGH",
|
| 658 |
+
"interaction_prompt": "Email Classifier delegates to Search Agent for order lookup and policy information retrieval based on the categorized inquiry requirements.",
|
| 659 |
+
"interaction_prompt_ref": [
|
| 660 |
+
{"line_start": 53, "line_end": 54, "confidence": 0.9}
|
| 661 |
+
]
|
| 662 |
+
},
|
| 663 |
+
{
|
| 664 |
+
"id": "rel_003",
|
| 665 |
+
"source": "agent_002",
|
| 666 |
+
"target": "tool_001",
|
| 667 |
+
"type": "USES",
|
| 668 |
+
"importance": "HIGH",
|
| 669 |
+
"interaction_prompt": "Search Agent utilizes Email Search Engine to find laptop bag order confirmations from March 15th timeframe with appropriate date filters and search parameters.",
|
| 670 |
+
"interaction_prompt_ref": [
|
| 671 |
+
{"line_start": 56, "line_end": 62, "confidence": 1.0}
|
| 672 |
+
]
|
| 673 |
+
},
|
| 674 |
+
{
|
| 675 |
+
"id": "rel_004",
|
| 676 |
+
"source": "agent_002",
|
| 677 |
+
"target": "tool_002",
|
| 678 |
+
"type": "USES",
|
| 679 |
+
"importance": "MEDIUM",
|
| 680 |
+
"interaction_prompt": "Search Agent queries Knowledge Base Search for laptop bag return policy information including 30-day return window and original packaging requirements.",
|
| 681 |
+
"interaction_prompt_ref": [
|
| 682 |
+
{"line_start": 64, "line_end": 70, "confidence": 1.0}
|
| 683 |
+
]
|
| 684 |
+
},
|
| 685 |
+
{
|
| 686 |
+
"id": "rel_005",
|
| 687 |
+
"source": "agent_002",
|
| 688 |
+
"target": "agent_003",
|
| 689 |
+
"type": "PROVIDES_DATA_TO",
|
| 690 |
+
"importance": "HIGH",
|
| 691 |
+
"interaction_prompt": "Search Agent provides Response Generator with found order details and return policy information for personalized response creation.",
|
| 692 |
+
"interaction_prompt_ref": [
|
| 693 |
+
{"line_start": 72, "line_end": 73, "confidence": 0.9}
|
| 694 |
+
]
|
| 695 |
+
},
|
| 696 |
+
{
|
| 697 |
+
"id": "rel_006",
|
| 698 |
+
"source": "agent_003",
|
| 699 |
+
"target": "tool_003",
|
| 700 |
+
"type": "USES",
|
| 701 |
+
"importance": "MEDIUM",
|
| 702 |
+
"interaction_prompt": "Response Generator uses Template Engine with ORDER_INQUIRY_WITH_RETURN template and customer-specific variables to create personalized support response.",
|
| 703 |
+
"interaction_prompt_ref": [
|
| 704 |
+
{"line_start": 75, "line_end": 84, "confidence": 1.0}
|
| 705 |
+
]
|
| 706 |
+
},
|
| 707 |
+
{
|
| 708 |
+
"id": "rel_007",
|
| 709 |
+
"source": "tool_003",
|
| 710 |
+
"target": "output_001",
|
| 711 |
+
"type": "GENERATES",
|
| 712 |
+
"importance": "HIGH",
|
| 713 |
+
"interaction_prompt": "Response Template Engine generates final personalized customer response with order details, return authorization, and clear next steps for issue resolution.",
|
| 714 |
+
"interaction_prompt_ref": [
|
| 715 |
+
{"line_start": 85, "line_end": 103, "confidence": 1.0}
|
| 716 |
+
]
|
| 717 |
+
}
|
| 718 |
+
],
|
| 719 |
+
"failures": [],
|
| 720 |
+
"optimizations": [
|
| 721 |
+
{
|
| 722 |
+
"id": "opt_001",
|
| 723 |
+
"recommendation_type": "AUTOMATION_ENHANCEMENT",
|
| 724 |
+
"description": "Implement automatic order confirmation resending when original email delivery fails, reducing customer inquiries and improving satisfaction by proactively addressing delivery issues.",
|
| 725 |
+
"affected_ids": ["tool_001", "agent_002"],
|
| 726 |
+
"raw_text_ref": [
|
| 727 |
+
{"line_start": 44, "line_end": 45, "confidence": 0.7}
|
| 728 |
+
]
|
| 729 |
+
},
|
| 730 |
+
{
|
| 731 |
+
"id": "opt_002",
|
| 732 |
+
"recommendation_type": "PROCESS_IMPROVEMENT",
|
| 733 |
+
"description": "Create integrated search interface combining email archives and knowledge base results to reduce multiple tool calls and improve response generation efficiency.",
|
| 734 |
+
"affected_ids": ["tool_001", "tool_002", "agent_002"],
|
| 735 |
+
"raw_text_ref": [
|
| 736 |
+
{"line_start": 53, "line_end": 70, "confidence": 0.8}
|
| 737 |
+
]
|
| 738 |
+
}
|
| 739 |
+
],
|
| 740 |
+
"system_name": "Intelligent Email Processing and Search System",
|
| 741 |
+
"system_summary": "This system automates email processing through intelligent classification, search coordination, and response generation. The Email Classifier analyzes incoming messages for categorization and priority scoring, the Search Agent coordinates information retrieval across email archives and knowledge bases, while the Response Generator creates personalized customer communications. The system demonstrates sophisticated tool integration for efficient customer support automation.",
|
| 742 |
+
"metadata": {
|
| 743 |
+
"content_resolution": {
|
| 744 |
+
"resolved_at": "2025-09-01T10:31:00.000000",
|
| 745 |
+
"original_trace_length": 3421,
|
| 746 |
+
"resolution_method": "content_reference_resolver"
|
| 747 |
+
},
|
| 748 |
+
"window_info": {
|
| 749 |
+
"window_index": None,
|
| 750 |
+
"window_start_char": 0,
|
| 751 |
+
"window_end_char": 3421,
|
| 752 |
+
"chunk_size": 3421,
|
| 753 |
+
"window_size": 800000,
|
| 754 |
+
"overlap_size": 0,
|
| 755 |
+
"splitter_type": "agent_semantic",
|
| 756 |
+
"log_type": "conversation",
|
| 757 |
+
"boundary_used": "content_boundary",
|
| 758 |
+
"boundary_confidence": 0.92,
|
| 759 |
+
"contains_agent_markers": True,
|
| 760 |
+
"contains_tool_patterns": True,
|
| 761 |
+
"overlap_with_previous": False,
|
| 762 |
+
"processed_at": "2025-09-01T10:31:00.000000",
|
| 763 |
+
"line_mapping_created": True,
|
| 764 |
+
"window_total": 1,
|
| 765 |
+
"trace_id": "sample_email_001",
|
| 766 |
+
"processing_run_id": "sample_run_002"
|
| 767 |
+
},
|
| 768 |
+
"trace_info": {
|
| 769 |
+
"trace_id": "sample_email_001",
|
| 770 |
+
"window_count": 1,
|
| 771 |
+
"processed_at": "2025-09-01T10:31:00.000000",
|
| 772 |
+
"source_trace_id": "sample_email_001",
|
| 773 |
+
"processing_run_id": "sample_run_002"
|
| 774 |
+
},
|
| 775 |
+
"processing_params": {
|
| 776 |
+
"method_name": "production",
|
| 777 |
+
"batch_size": 3,
|
| 778 |
+
"parallel_processing": True,
|
| 779 |
+
"merge_method": "single_kg_direct",
|
| 780 |
+
"optimization_applied": True,
|
| 781 |
+
"window_size": 800000,
|
| 782 |
+
"overlap_size": 0,
|
| 783 |
+
"splitter_type": "agent_semantic"
|
| 784 |
}
|
| 785 |
+
}
|
| 786 |
}
|
| 787 |
}
|
| 788 |
]
|
| 789 |
|
| 790 |
+
def insert_enhanced_sample_data(session, force_insert=False):
|
|
|
|
| 791 |
"""
|
| 792 |
+
Insert enhanced sample traces and knowledge graphs with complete structure.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 793 |
"""
|
|
|
|
|
|
|
|
|
|
| 794 |
results = {
|
| 795 |
"traces_inserted": 0,
|
| 796 |
"knowledge_graphs_inserted": 0,
|
|
|
|
| 803 |
existing_sample = session.query(Trace).filter(
|
| 804 |
Trace.trace_source == "sample_data"
|
| 805 |
).first()
|
|
|
|
| 806 |
if existing_sample:
|
| 807 |
+
logger.info("Enhanced sample data already exists, skipping insertion")
|
| 808 |
+
results["skipped"] = len(ENHANCED_SAMPLE_TRACES)
|
| 809 |
return results
|
| 810 |
|
| 811 |
try:
|
| 812 |
+
# Insert enhanced sample traces
|
| 813 |
trace_ids = []
|
| 814 |
+
for i, trace_data in enumerate(ENHANCED_SAMPLE_TRACES):
|
| 815 |
try:
|
| 816 |
trace = save_trace(
|
| 817 |
session=session,
|
| 818 |
content=trace_data["content"],
|
| 819 |
filename=trace_data["filename"],
|
| 820 |
+
title=trace_data["title"],
|
| 821 |
description=trace_data["description"],
|
| 822 |
trace_type=trace_data["trace_type"],
|
| 823 |
trace_source=trace_data["trace_source"],
|
|
|
|
| 825 |
)
|
| 826 |
trace_ids.append(trace.trace_id)
|
| 827 |
results["traces_inserted"] += 1
|
| 828 |
+
logger.info(f"Inserted enhanced sample trace: {trace_data['title']}")
|
| 829 |
except Exception as e:
|
| 830 |
+
error_msg = f"Error inserting enhanced trace {i}: {str(e)}"
|
| 831 |
logger.error(error_msg)
|
| 832 |
results["errors"].append(error_msg)
|
| 833 |
|
| 834 |
+
# Insert corresponding enhanced knowledge graphs
|
| 835 |
+
for kg_data in ENHANCED_SAMPLE_KNOWLEDGE_GRAPHS:
|
| 836 |
try:
|
| 837 |
trace_index = kg_data["trace_index"]
|
| 838 |
if trace_index < len(trace_ids):
|
|
|
|
| 842 |
graph_data=kg_data["graph_data"],
|
| 843 |
trace_id=trace_ids[trace_index],
|
| 844 |
window_index=None, # None for final KG
|
| 845 |
+
window_total=1, # Not None to indicate processed final KG
|
| 846 |
is_original=True
|
| 847 |
)
|
| 848 |
results["knowledge_graphs_inserted"] += 1
|
| 849 |
+
logger.info(f"Inserted enhanced sample knowledge graph: {kg_data['filename']}")
|
| 850 |
except Exception as e:
|
| 851 |
+
error_msg = f"Error inserting enhanced knowledge graph {kg_data['filename']}: {str(e)}"
|
| 852 |
logger.error(error_msg)
|
| 853 |
results["errors"].append(error_msg)
|
| 854 |
|
| 855 |
+
logger.info(f"Enhanced sample data insertion completed: {results}")
|
| 856 |
|
| 857 |
except Exception as e:
|
| 858 |
+
error_msg = f"Fatal error during enhanced sample data insertion: {str(e)}"
|
| 859 |
logger.error(error_msg)
|
| 860 |
results["errors"].append(error_msg)
|
| 861 |
raise # Re-raise to trigger rollback in calling code
|
| 862 |
|
| 863 |
return results
|
| 864 |
|
| 865 |
+
def get_enhanced_sample_data_info():
|
|
|
|
| 866 |
"""
|
| 867 |
+
Return information about the enhanced sample data.
|
|
|
|
|
|
|
|
|
|
| 868 |
"""
|
| 869 |
return {
|
| 870 |
+
"total_traces": len(ENHANCED_SAMPLE_TRACES),
|
| 871 |
+
"total_knowledge_graphs": len(ENHANCED_SAMPLE_KNOWLEDGE_GRAPHS),
|
| 872 |
+
"trace_types": list(set(trace["trace_type"] for trace in ENHANCED_SAMPLE_TRACES)),
|
| 873 |
+
"topics_covered": ["financial_analysis", "email_automation", "academic_research"],
|
| 874 |
+
"features_demonstrated": [
|
| 875 |
+
"Multi-agent collaboration",
|
| 876 |
+
"Tool integration",
|
| 877 |
+
"Error handling and failures",
|
| 878 |
+
"Process optimization recommendations",
|
| 879 |
+
"Content reference mapping",
|
| 880 |
+
"System-level summaries",
|
| 881 |
+
"Comprehensive metadata"
|
| 882 |
+
]
|
| 883 |
+
}
|
|
@@ -0,0 +1,623 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
"""
|
| 3 |
+
Sample data for database initialization.
|
| 4 |
+
Provides curated examples of traces and knowledge graphs for new users.
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
import json
|
| 8 |
+
import logging
|
| 9 |
+
from typing import Dict, List, Any
|
| 10 |
+
|
| 11 |
+
logger = logging.getLogger(__name__)
|
| 12 |
+
|
| 13 |
+
# Sample traces with increasing complexity
|
| 14 |
+
SAMPLE_TRACES = [
|
| 15 |
+
{
|
| 16 |
+
"filename": "sample_basic_question.txt",
|
| 17 |
+
"title": "Basic Q&A: California Great America Season Pass",
|
| 18 |
+
"description": "Simple arithmetic calculation comparing season pass vs daily tickets",
|
| 19 |
+
"trace_type": "conversation",
|
| 20 |
+
"trace_source": "sample_data",
|
| 21 |
+
"tags": ["arithmetic", "simple", "calculation"],
|
| 22 |
+
"content": """User: How much did I save by purchasing a season pass instead of daily tickets for California's Great America in San Jose, if I planned to visit once a month in June, July, August, and September during the summer of 2024?
|
| 23 |
+
|
| 24 |
+
Assistant: I'd be happy to help you calculate your savings! To give you an accurate answer, I need to find the current ticket prices for California's Great America.
|
| 25 |
+
|
| 26 |
+
Let me break this down:
|
| 27 |
+
- You planned to visit once a month for 4 months (June, July, August, September)
|
| 28 |
+
- So you need 4 daily tickets total
|
| 29 |
+
|
| 30 |
+
Based on 2024 pricing:
|
| 31 |
+
- Daily ticket: approximately $60
|
| 32 |
+
- Season pass: approximately $120
|
| 33 |
+
|
| 34 |
+
Calculation:
|
| 35 |
+
- Cost of 4 daily tickets: 4 × $60 = $240
|
| 36 |
+
- Cost of season pass: $120
|
| 37 |
+
- Your savings: $240 - $120 = $120
|
| 38 |
+
|
| 39 |
+
You saved $120 by purchasing the season pass instead of individual daily tickets!
|
| 40 |
+
|
| 41 |
+
The season pass was definitely the smart choice for 4+ visits."""
|
| 42 |
+
},
|
| 43 |
+
{
|
| 44 |
+
"filename": "sample_research_question.txt",
|
| 45 |
+
"title": "Research Task: Restaurant Near State Park",
|
| 46 |
+
"description": "Multi-step research involving location search and business hours verification",
|
| 47 |
+
"trace_type": "research",
|
| 48 |
+
"trace_source": "sample_data",
|
| 49 |
+
"tags": ["research", "location", "business_hours"],
|
| 50 |
+
"content": """User: What is the closest eatery to Harkness Memorial State Park that is still open at 11pm on Wednesdays?
|
| 51 |
+
|
| 52 |
+
Assistant: I'll help you find the closest eatery to Harkness Memorial State Park in Waterford, Connecticut that stays open until 11pm on Wednesdays.
|
| 53 |
+
|
| 54 |
+
Let me research this step by step:
|
| 55 |
+
|
| 56 |
+
1. **Location**: Harkness Memorial State Park is located at 275 Great Neck Rd, Waterford, CT 06385
|
| 57 |
+
|
| 58 |
+
2. **Nearby eateries**: Searching for restaurants within a reasonable distance...
|
| 59 |
+
|
| 60 |
+
3. **Wednesday hours verification**: Checking which places stay open until 11pm on Wednesdays...
|
| 61 |
+
|
| 62 |
+
After researching local eateries and their hours:
|
| 63 |
+
|
| 64 |
+
**Answer: McDonald's** (located at 1465 Hartford Turnpike, Waterford, CT)
|
| 65 |
+
- Distance: Approximately 3.2 miles from Harkness Memorial State Park
|
| 66 |
+
- Wednesday hours: Open 24 hours
|
| 67 |
+
- This is the closest eatery that meets your 11pm requirement
|
| 68 |
+
|
| 69 |
+
Most local restaurants in the Waterford area close by 9pm on weekdays, making McDonald's the most reliable option for late dining near the park."""
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"filename": "sample_complex_task.txt",
|
| 73 |
+
"title": "Complex Analysis: Multi-Agent Collaboration",
|
| 74 |
+
"description": "Advanced task showing multi-agent collaboration with tool usage and reasoning",
|
| 75 |
+
"trace_type": "multi_agent",
|
| 76 |
+
"trace_source": "sample_data",
|
| 77 |
+
"tags": ["complex", "multi_agent", "collaboration", "tools"],
|
| 78 |
+
"content": """User: Analyze the efficiency of different sorting algorithms for a dataset of 10,000 random integers.
|
| 79 |
+
|
| 80 |
+
Planning Agent: I'll break this task into components:
|
| 81 |
+
1. Generate test data (10,000 random integers)
|
| 82 |
+
2. Implement multiple sorting algorithms
|
| 83 |
+
3. Measure performance metrics
|
| 84 |
+
4. Compare and analyze results
|
| 85 |
+
|
| 86 |
+
Code Agent: ```python
|
| 87 |
+
import random
|
| 88 |
+
import time
|
| 89 |
+
import sys
|
| 90 |
+
|
| 91 |
+
# Generate test data
|
| 92 |
+
test_data = [random.randint(1, 100000) for _ in range(10000)]
|
| 93 |
+
|
| 94 |
+
# Bubble Sort
|
| 95 |
+
def bubble_sort(arr):
|
| 96 |
+
n = len(arr)
|
| 97 |
+
for i in range(n):
|
| 98 |
+
for j in range(0, n-i-1):
|
| 99 |
+
if arr[j] > arr[j+1]:
|
| 100 |
+
arr[j], arr[j+1] = arr[j+1], arr[j]
|
| 101 |
+
return arr
|
| 102 |
+
|
| 103 |
+
# Quick Sort
|
| 104 |
+
def quick_sort(arr):
|
| 105 |
+
if len(arr) <= 1:
|
| 106 |
+
return arr
|
| 107 |
+
pivot = arr[len(arr) // 2]
|
| 108 |
+
left = [x for x in arr if x < pivot]
|
| 109 |
+
middle = [x for x in arr if x == pivot]
|
| 110 |
+
right = [x for x in arr if x > pivot]
|
| 111 |
+
return quick_sort(left) + middle + quick_sort(right)
|
| 112 |
+
|
| 113 |
+
# Merge Sort
|
| 114 |
+
def merge_sort(arr):
|
| 115 |
+
if len(arr) <= 1:
|
| 116 |
+
return arr
|
| 117 |
+
mid = len(arr) // 2
|
| 118 |
+
left = merge_sort(arr[:mid])
|
| 119 |
+
right = merge_sort(arr[mid:])
|
| 120 |
+
return merge(left, right)
|
| 121 |
+
|
| 122 |
+
def merge(left, right):
|
| 123 |
+
result = []
|
| 124 |
+
i = j = 0
|
| 125 |
+
while i < len(left) and j < len(right):
|
| 126 |
+
if left[i] <= right[j]:
|
| 127 |
+
result.append(left[i])
|
| 128 |
+
i += 1
|
| 129 |
+
else:
|
| 130 |
+
result.append(right[j])
|
| 131 |
+
j += 1
|
| 132 |
+
result.extend(left[i:])
|
| 133 |
+
result.extend(right[j:])
|
| 134 |
+
return result
|
| 135 |
+
```
|
| 136 |
+
|
| 137 |
+
Testing Agent: Running performance tests...
|
| 138 |
+
|
| 139 |
+
Results:
|
| 140 |
+
- **Python Built-in Sort**: 0.003 seconds
|
| 141 |
+
- **Merge Sort**: 0.045 seconds
|
| 142 |
+
- **Quick Sort**: 0.032 seconds
|
| 143 |
+
- **Bubble Sort**: 12.456 seconds (extremely slow for 10k elements)
|
| 144 |
+
|
| 145 |
+
Analysis Agent: **Performance Analysis:**
|
| 146 |
+
|
| 147 |
+
1. **Winner: Python's built-in sort** (Timsort)
|
| 148 |
+
- Highly optimized hybrid algorithm
|
| 149 |
+
- Best for real-world usage
|
| 150 |
+
|
| 151 |
+
2. **Quick Sort**: Good general-purpose algorithm
|
| 152 |
+
- Average O(n log n), worst-case O(n²)
|
| 153 |
+
- Fast for random data
|
| 154 |
+
|
| 155 |
+
3. **Merge Sort**: Consistent performance
|
| 156 |
+
- Always O(n log n)
|
| 157 |
+
- Stable sort, good for linked lists
|
| 158 |
+
|
| 159 |
+
4. **Bubble Sort**: Educational only
|
| 160 |
+
- O(n²) complexity makes it impractical
|
| 161 |
+
- 4000x slower than optimized algorithms
|
| 162 |
+
|
| 163 |
+
**Recommendation**: Use Python's built-in `sorted()` or `.sort()` for production code, as it's specifically optimized for real-world data patterns."""
|
| 164 |
+
}
|
| 165 |
+
]
|
| 166 |
+
|
| 167 |
+
# Sample knowledge graphs corresponding to the traces
|
| 168 |
+
SAMPLE_KNOWLEDGE_GRAPHS = [
|
| 169 |
+
{
|
| 170 |
+
"filename": "kg_basic_question_001.json",
|
| 171 |
+
"trace_index": 0, # Links to first trace
|
| 172 |
+
"graph_data": {
|
| 173 |
+
"entities": [
|
| 174 |
+
{
|
| 175 |
+
"id": "user",
|
| 176 |
+
"type": "agent",
|
| 177 |
+
"name": "User",
|
| 178 |
+
"properties": {"role": "question_asker"}
|
| 179 |
+
},
|
| 180 |
+
{
|
| 181 |
+
"id": "assistant",
|
| 182 |
+
"type": "agent",
|
| 183 |
+
"name": "Assistant",
|
| 184 |
+
"properties": {"role": "problem_solver"}
|
| 185 |
+
},
|
| 186 |
+
{
|
| 187 |
+
"id": "california_great_america",
|
| 188 |
+
"type": "location",
|
| 189 |
+
"name": "California's Great America",
|
| 190 |
+
"properties": {"city": "San Jose", "type": "amusement_park"}
|
| 191 |
+
},
|
| 192 |
+
{
|
| 193 |
+
"id": "season_pass",
|
| 194 |
+
"type": "product",
|
| 195 |
+
"name": "Season Pass",
|
| 196 |
+
"properties": {"price": "$120", "validity": "full_season"}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"id": "daily_ticket",
|
| 200 |
+
"type": "product",
|
| 201 |
+
"name": "Daily Ticket",
|
| 202 |
+
"properties": {"price": "$60", "validity": "single_day"}
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"id": "calculation_task",
|
| 206 |
+
"type": "task",
|
| 207 |
+
"name": "Price Comparison Calculation",
|
| 208 |
+
"properties": {"type": "arithmetic", "complexity": "simple"}
|
| 209 |
+
}
|
| 210 |
+
],
|
| 211 |
+
"relations": [
|
| 212 |
+
{
|
| 213 |
+
"id": "asks_question",
|
| 214 |
+
"source": "user",
|
| 215 |
+
"target": "assistant",
|
| 216 |
+
"type": "asks",
|
| 217 |
+
"properties": {"question_type": "calculation"}
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"id": "performs_calculation",
|
| 221 |
+
"source": "assistant",
|
| 222 |
+
"target": "calculation_task",
|
| 223 |
+
"type": "executes",
|
| 224 |
+
"properties": {"method": "arithmetic"}
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"id": "compares_products",
|
| 228 |
+
"source": "calculation_task",
|
| 229 |
+
"target": "season_pass",
|
| 230 |
+
"type": "compares",
|
| 231 |
+
"properties": {"comparison_type": "cost_benefit"}
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"id": "compares_products_alt",
|
| 235 |
+
"source": "calculation_task",
|
| 236 |
+
"target": "daily_ticket",
|
| 237 |
+
"type": "compares",
|
| 238 |
+
"properties": {"comparison_type": "cost_benefit"}
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"id": "relates_to_location",
|
| 242 |
+
"source": "season_pass",
|
| 243 |
+
"target": "california_great_america",
|
| 244 |
+
"type": "valid_at",
|
| 245 |
+
"properties": {"access_type": "unlimited"}
|
| 246 |
+
}
|
| 247 |
+
]
|
| 248 |
+
}
|
| 249 |
+
},
|
| 250 |
+
{
|
| 251 |
+
"filename": "kg_research_question_001.json",
|
| 252 |
+
"trace_index": 1, # Links to second trace
|
| 253 |
+
"graph_data": {
|
| 254 |
+
"entities": [
|
| 255 |
+
{
|
| 256 |
+
"id": "user",
|
| 257 |
+
"type": "agent",
|
| 258 |
+
"name": "User",
|
| 259 |
+
"properties": {"role": "information_seeker"}
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"id": "assistant",
|
| 263 |
+
"type": "agent",
|
| 264 |
+
"name": "Assistant",
|
| 265 |
+
"properties": {"role": "researcher"}
|
| 266 |
+
},
|
| 267 |
+
{
|
| 268 |
+
"id": "harkness_park",
|
| 269 |
+
"type": "location",
|
| 270 |
+
"name": "Harkness Memorial State Park",
|
| 271 |
+
"properties": {"address": "275 Great Neck Rd, Waterford, CT 06385", "type": "state_park"}
|
| 272 |
+
},
|
| 273 |
+
{
|
| 274 |
+
"id": "mcdonalds",
|
| 275 |
+
"type": "business",
|
| 276 |
+
"name": "McDonald's",
|
| 277 |
+
"properties": {"address": "1465 Hartford Turnpike, Waterford, CT", "hours": "24/7", "type": "restaurant"}
|
| 278 |
+
},
|
| 279 |
+
{
|
| 280 |
+
"id": "research_task",
|
| 281 |
+
"type": "task",
|
| 282 |
+
"name": "Location and Hours Research",
|
| 283 |
+
"properties": {"type": "multi_step_research", "complexity": "medium"}
|
| 284 |
+
},
|
| 285 |
+
{
|
| 286 |
+
"id": "time_constraint",
|
| 287 |
+
"type": "constraint",
|
| 288 |
+
"name": "11pm Wednesday Hours",
|
| 289 |
+
"properties": {"day": "Wednesday", "time": "11:00 PM"}
|
| 290 |
+
}
|
| 291 |
+
],
|
| 292 |
+
"relations": [
|
| 293 |
+
{
|
| 294 |
+
"id": "requests_research",
|
| 295 |
+
"source": "user",
|
| 296 |
+
"target": "assistant",
|
| 297 |
+
"type": "requests",
|
| 298 |
+
"properties": {"request_type": "location_research"}
|
| 299 |
+
},
|
| 300 |
+
{
|
| 301 |
+
"id": "conducts_research",
|
| 302 |
+
"source": "assistant",
|
| 303 |
+
"target": "research_task",
|
| 304 |
+
"type": "executes",
|
| 305 |
+
"properties": {"method": "systematic_search"}
|
| 306 |
+
},
|
| 307 |
+
{
|
| 308 |
+
"id": "research_focuses_on",
|
| 309 |
+
"source": "research_task",
|
| 310 |
+
"target": "harkness_park",
|
| 311 |
+
"type": "focuses_on",
|
| 312 |
+
"properties": {"search_radius": "nearby_area"}
|
| 313 |
+
},
|
| 314 |
+
{
|
| 315 |
+
"id": "applies_constraint",
|
| 316 |
+
"source": "research_task",
|
| 317 |
+
"target": "time_constraint",
|
| 318 |
+
"type": "applies",
|
| 319 |
+
"properties": {"filter_type": "business_hours"}
|
| 320 |
+
},
|
| 321 |
+
{
|
| 322 |
+
"id": "identifies_result",
|
| 323 |
+
"source": "research_task",
|
| 324 |
+
"target": "mcdonalds",
|
| 325 |
+
"type": "identifies",
|
| 326 |
+
"properties": {"match_type": "best_option"}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"id": "is_near",
|
| 330 |
+
"source": "mcdonalds",
|
| 331 |
+
"target": "harkness_park",
|
| 332 |
+
"type": "located_near",
|
| 333 |
+
"properties": {"distance": "3.2 miles"}
|
| 334 |
+
}
|
| 335 |
+
]
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"filename": "kg_complex_task_001.json",
|
| 340 |
+
"trace_index": 2, # Links to third trace
|
| 341 |
+
"graph_data": {
|
| 342 |
+
"entities": [
|
| 343 |
+
{
|
| 344 |
+
"id": "user",
|
| 345 |
+
"type": "agent",
|
| 346 |
+
"name": "User",
|
| 347 |
+
"properties": {"role": "task_requester"}
|
| 348 |
+
},
|
| 349 |
+
{
|
| 350 |
+
"id": "planning_agent",
|
| 351 |
+
"type": "agent",
|
| 352 |
+
"name": "Planning Agent",
|
| 353 |
+
"properties": {"role": "task_decomposer", "specialization": "planning"}
|
| 354 |
+
},
|
| 355 |
+
{
|
| 356 |
+
"id": "code_agent",
|
| 357 |
+
"type": "agent",
|
| 358 |
+
"name": "Code Agent",
|
| 359 |
+
"properties": {"role": "implementer", "specialization": "programming"}
|
| 360 |
+
},
|
| 361 |
+
{
|
| 362 |
+
"id": "testing_agent",
|
| 363 |
+
"type": "agent",
|
| 364 |
+
"name": "Testing Agent",
|
| 365 |
+
"properties": {"role": "evaluator", "specialization": "performance_testing"}
|
| 366 |
+
},
|
| 367 |
+
{
|
| 368 |
+
"id": "analysis_agent",
|
| 369 |
+
"type": "agent",
|
| 370 |
+
"name": "Analysis Agent",
|
| 371 |
+
"properties": {"role": "analyzer", "specialization": "result_interpretation"}
|
| 372 |
+
},
|
| 373 |
+
{
|
| 374 |
+
"id": "sorting_analysis_task",
|
| 375 |
+
"type": "task",
|
| 376 |
+
"name": "Sorting Algorithm Analysis",
|
| 377 |
+
"properties": {"type": "algorithm_comparison", "complexity": "high", "dataset_size": "10000"}
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"id": "bubble_sort",
|
| 381 |
+
"type": "algorithm",
|
| 382 |
+
"name": "Bubble Sort",
|
| 383 |
+
"properties": {"complexity": "O(n²)", "performance": "12.456s", "category": "comparison_sort"}
|
| 384 |
+
},
|
| 385 |
+
{
|
| 386 |
+
"id": "quick_sort",
|
| 387 |
+
"type": "algorithm",
|
| 388 |
+
"name": "Quick Sort",
|
| 389 |
+
"properties": {"complexity": "O(n log n)", "performance": "0.032s", "category": "divide_conquer"}
|
| 390 |
+
},
|
| 391 |
+
{
|
| 392 |
+
"id": "merge_sort",
|
| 393 |
+
"type": "algorithm",
|
| 394 |
+
"name": "Merge Sort",
|
| 395 |
+
"properties": {"complexity": "O(n log n)", "performance": "0.045s", "category": "divide_conquer"}
|
| 396 |
+
},
|
| 397 |
+
{
|
| 398 |
+
"id": "python_sort",
|
| 399 |
+
"type": "algorithm",
|
| 400 |
+
"name": "Python Built-in Sort (Timsort)",
|
| 401 |
+
"properties": {"complexity": "O(n log n)", "performance": "0.003s", "category": "hybrid_optimized"}
|
| 402 |
+
}
|
| 403 |
+
],
|
| 404 |
+
"relations": [
|
| 405 |
+
{
|
| 406 |
+
"id": "requests_analysis",
|
| 407 |
+
"source": "user",
|
| 408 |
+
"target": "planning_agent",
|
| 409 |
+
"type": "requests",
|
| 410 |
+
"properties": {"request_type": "algorithm_analysis"}
|
| 411 |
+
},
|
| 412 |
+
{
|
| 413 |
+
"id": "decomposes_task",
|
| 414 |
+
"source": "planning_agent",
|
| 415 |
+
"target": "sorting_analysis_task",
|
| 416 |
+
"type": "decomposes",
|
| 417 |
+
"properties": {"decomposition_type": "step_by_step"}
|
| 418 |
+
},
|
| 419 |
+
{
|
| 420 |
+
"id": "delegates_implementation",
|
| 421 |
+
"source": "planning_agent",
|
| 422 |
+
"target": "code_agent",
|
| 423 |
+
"type": "delegates",
|
| 424 |
+
"properties": {"task_type": "algorithm_implementation"}
|
| 425 |
+
},
|
| 426 |
+
{
|
| 427 |
+
"id": "implements_algorithms",
|
| 428 |
+
"source": "code_agent",
|
| 429 |
+
"target": "bubble_sort",
|
| 430 |
+
"type": "implements",
|
| 431 |
+
"properties": {"language": "python"}
|
| 432 |
+
},
|
| 433 |
+
{
|
| 434 |
+
"id": "implements_algorithms_2",
|
| 435 |
+
"source": "code_agent",
|
| 436 |
+
"target": "quick_sort",
|
| 437 |
+
"type": "implements",
|
| 438 |
+
"properties": {"language": "python"}
|
| 439 |
+
},
|
| 440 |
+
{
|
| 441 |
+
"id": "implements_algorithms_3",
|
| 442 |
+
"source": "code_agent",
|
| 443 |
+
"target": "merge_sort",
|
| 444 |
+
"type": "implements",
|
| 445 |
+
"properties": {"language": "python"}
|
| 446 |
+
},
|
| 447 |
+
{
|
| 448 |
+
"id": "delegates_testing",
|
| 449 |
+
"source": "planning_agent",
|
| 450 |
+
"target": "testing_agent",
|
| 451 |
+
"type": "delegates",
|
| 452 |
+
"properties": {"task_type": "performance_evaluation"}
|
| 453 |
+
},
|
| 454 |
+
{
|
| 455 |
+
"id": "tests_performance",
|
| 456 |
+
"source": "testing_agent",
|
| 457 |
+
"target": "bubble_sort",
|
| 458 |
+
"type": "tests",
|
| 459 |
+
"properties": {"metric": "execution_time"}
|
| 460 |
+
},
|
| 461 |
+
{
|
| 462 |
+
"id": "tests_performance_2",
|
| 463 |
+
"source": "testing_agent",
|
| 464 |
+
"target": "quick_sort",
|
| 465 |
+
"type": "tests",
|
| 466 |
+
"properties": {"metric": "execution_time"}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"id": "tests_performance_3",
|
| 470 |
+
"source": "testing_agent",
|
| 471 |
+
"target": "merge_sort",
|
| 472 |
+
"type": "tests",
|
| 473 |
+
"properties": {"metric": "execution_time"}
|
| 474 |
+
},
|
| 475 |
+
{
|
| 476 |
+
"id": "tests_performance_4",
|
| 477 |
+
"source": "testing_agent",
|
| 478 |
+
"target": "python_sort",
|
| 479 |
+
"type": "tests",
|
| 480 |
+
"properties": {"metric": "execution_time"}
|
| 481 |
+
},
|
| 482 |
+
{
|
| 483 |
+
"id": "delegates_analysis",
|
| 484 |
+
"source": "planning_agent",
|
| 485 |
+
"target": "analysis_agent",
|
| 486 |
+
"type": "delegates",
|
| 487 |
+
"properties": {"task_type": "result_interpretation"}
|
| 488 |
+
},
|
| 489 |
+
{
|
| 490 |
+
"id": "analyzes_results",
|
| 491 |
+
"source": "analysis_agent",
|
| 492 |
+
"target": "sorting_analysis_task",
|
| 493 |
+
"type": "analyzes",
|
| 494 |
+
"properties": {"analysis_type": "comparative_performance"}
|
| 495 |
+
},
|
| 496 |
+
{
|
| 497 |
+
"id": "outperforms",
|
| 498 |
+
"source": "python_sort",
|
| 499 |
+
"target": "quick_sort",
|
| 500 |
+
"type": "outperforms",
|
| 501 |
+
"properties": {"factor": "10x_faster"}
|
| 502 |
+
},
|
| 503 |
+
{
|
| 504 |
+
"id": "outperforms_2",
|
| 505 |
+
"source": "python_sort",
|
| 506 |
+
"target": "merge_sort",
|
| 507 |
+
"type": "outperforms",
|
| 508 |
+
"properties": {"factor": "15x_faster"}
|
| 509 |
+
},
|
| 510 |
+
{
|
| 511 |
+
"id": "outperforms_3",
|
| 512 |
+
"source": "python_sort",
|
| 513 |
+
"target": "bubble_sort",
|
| 514 |
+
"type": "outperforms",
|
| 515 |
+
"properties": {"factor": "4000x_faster"}
|
| 516 |
+
}
|
| 517 |
+
]
|
| 518 |
+
}
|
| 519 |
+
}
|
| 520 |
+
]
|
| 521 |
+
|
| 522 |
+
|
| 523 |
+
def insert_sample_data(session, force_insert=False):
|
| 524 |
+
"""
|
| 525 |
+
Insert sample traces and knowledge graphs into the database.
|
| 526 |
+
|
| 527 |
+
Args:
|
| 528 |
+
session: Database session
|
| 529 |
+
force_insert: If True, insert even if data already exists
|
| 530 |
+
|
| 531 |
+
Returns:
|
| 532 |
+
Dict with insertion results
|
| 533 |
+
"""
|
| 534 |
+
from backend.database.utils import save_trace, save_knowledge_graph
|
| 535 |
+
from backend.database.models import Trace, KnowledgeGraph
|
| 536 |
+
|
| 537 |
+
results = {
|
| 538 |
+
"traces_inserted": 0,
|
| 539 |
+
"knowledge_graphs_inserted": 0,
|
| 540 |
+
"skipped": 0,
|
| 541 |
+
"errors": []
|
| 542 |
+
}
|
| 543 |
+
|
| 544 |
+
# Check if sample data already exists
|
| 545 |
+
if not force_insert:
|
| 546 |
+
existing_sample = session.query(Trace).filter(
|
| 547 |
+
Trace.trace_source == "sample_data"
|
| 548 |
+
).first()
|
| 549 |
+
|
| 550 |
+
if existing_sample:
|
| 551 |
+
logger.info("Sample data already exists, skipping insertion")
|
| 552 |
+
results["skipped"] = len(SAMPLE_TRACES)
|
| 553 |
+
return results
|
| 554 |
+
|
| 555 |
+
try:
|
| 556 |
+
# Insert sample traces
|
| 557 |
+
trace_ids = []
|
| 558 |
+
for i, trace_data in enumerate(SAMPLE_TRACES):
|
| 559 |
+
try:
|
| 560 |
+
trace = save_trace(
|
| 561 |
+
session=session,
|
| 562 |
+
content=trace_data["content"],
|
| 563 |
+
filename=trace_data["filename"],
|
| 564 |
+
title=trace_data["title"],
|
| 565 |
+
description=trace_data["description"],
|
| 566 |
+
trace_type=trace_data["trace_type"],
|
| 567 |
+
trace_source=trace_data["trace_source"],
|
| 568 |
+
tags=trace_data["tags"]
|
| 569 |
+
)
|
| 570 |
+
trace_ids.append(trace.trace_id)
|
| 571 |
+
results["traces_inserted"] += 1
|
| 572 |
+
logger.info(f"Inserted sample trace: {trace_data['title']}")
|
| 573 |
+
except Exception as e:
|
| 574 |
+
error_msg = f"Error inserting trace {i}: {str(e)}"
|
| 575 |
+
logger.error(error_msg)
|
| 576 |
+
results["errors"].append(error_msg)
|
| 577 |
+
|
| 578 |
+
# Insert corresponding knowledge graphs
|
| 579 |
+
for kg_data in SAMPLE_KNOWLEDGE_GRAPHS:
|
| 580 |
+
try:
|
| 581 |
+
trace_index = kg_data["trace_index"]
|
| 582 |
+
if trace_index < len(trace_ids):
|
| 583 |
+
save_knowledge_graph(
|
| 584 |
+
session=session,
|
| 585 |
+
filename=kg_data["filename"],
|
| 586 |
+
graph_data=kg_data["graph_data"],
|
| 587 |
+
trace_id=trace_ids[trace_index],
|
| 588 |
+
window_index=None, # None for final KG
|
| 589 |
+
window_total=1, # Not None to indicate it's a processed final KG
|
| 590 |
+
is_original=True
|
| 591 |
+
)
|
| 592 |
+
results["knowledge_graphs_inserted"] += 1
|
| 593 |
+
logger.info(f"Inserted sample knowledge graph: {kg_data['filename']}")
|
| 594 |
+
except Exception as e:
|
| 595 |
+
error_msg = f"Error inserting knowledge graph {kg_data['filename']}: {str(e)}"
|
| 596 |
+
logger.error(error_msg)
|
| 597 |
+
results["errors"].append(error_msg)
|
| 598 |
+
|
| 599 |
+
logger.info(f"Sample data insertion completed: {results}")
|
| 600 |
+
|
| 601 |
+
except Exception as e:
|
| 602 |
+
error_msg = f"Fatal error during sample data insertion: {str(e)}"
|
| 603 |
+
logger.error(error_msg)
|
| 604 |
+
results["errors"].append(error_msg)
|
| 605 |
+
raise # Re-raise to trigger rollback in calling code
|
| 606 |
+
|
| 607 |
+
return results
|
| 608 |
+
|
| 609 |
+
|
| 610 |
+
def get_sample_data_info():
|
| 611 |
+
"""
|
| 612 |
+
Get information about the available sample data.
|
| 613 |
+
|
| 614 |
+
Returns:
|
| 615 |
+
Dict with sample data statistics
|
| 616 |
+
"""
|
| 617 |
+
return {
|
| 618 |
+
"traces_count": len(SAMPLE_TRACES),
|
| 619 |
+
"knowledge_graphs_count": len(SAMPLE_KNOWLEDGE_GRAPHS),
|
| 620 |
+
"trace_types": list(set(t["trace_type"] for t in SAMPLE_TRACES)),
|
| 621 |
+
"complexity_levels": ["simple", "medium", "high"],
|
| 622 |
+
"description": "Curated examples showing basic Q&A, research tasks, and multi-agent collaboration"
|
| 623 |
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
"""
|
| 3 |
+
Fix existing sample knowledge graphs to have correct window_index.
|
| 4 |
+
Sets window_index=None for sample_data KGs so they appear as final KGs.
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
import logging
|
| 8 |
+
import sys
|
| 9 |
+
import os
|
| 10 |
+
|
| 11 |
+
# Add the project root to Python path
|
| 12 |
+
sys.path.insert(0, '/Users/zekunwu/Desktop/agent_monitoring/huggingface/AgentGraph')
|
| 13 |
+
|
| 14 |
+
from backend.database import SessionLocal
|
| 15 |
+
from backend.database.models import KnowledgeGraph, Trace
|
| 16 |
+
|
| 17 |
+
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
| 18 |
+
logger = logging.getLogger(__name__)
|
| 19 |
+
|
| 20 |
+
def fix_sample_knowledge_graphs():
|
| 21 |
+
"""Fix existing sample knowledge graphs to have correct window_index."""
|
| 22 |
+
|
| 23 |
+
session = SessionLocal()
|
| 24 |
+
try:
|
| 25 |
+
# Find all sample traces
|
| 26 |
+
sample_traces = session.query(Trace).filter(
|
| 27 |
+
Trace.trace_source == "sample_data"
|
| 28 |
+
).all()
|
| 29 |
+
|
| 30 |
+
if not sample_traces:
|
| 31 |
+
logger.info("No sample traces found")
|
| 32 |
+
return
|
| 33 |
+
|
| 34 |
+
logger.info(f"Found {len(sample_traces)} sample traces")
|
| 35 |
+
|
| 36 |
+
# Get their trace_ids
|
| 37 |
+
trace_ids = [trace.trace_id for trace in sample_traces]
|
| 38 |
+
|
| 39 |
+
# Find knowledge graphs associated with these traces
|
| 40 |
+
sample_kgs = session.query(KnowledgeGraph).filter(
|
| 41 |
+
KnowledgeGraph.trace_id.in_(trace_ids)
|
| 42 |
+
).all()
|
| 43 |
+
|
| 44 |
+
logger.info(f"Found {len(sample_kgs)} knowledge graphs for sample traces")
|
| 45 |
+
|
| 46 |
+
fixed_count = 0
|
| 47 |
+
for kg in sample_kgs:
|
| 48 |
+
logger.info(f"Checking KG: {kg.filename} - window_index={kg.window_index}, window_total={kg.window_total}")
|
| 49 |
+
|
| 50 |
+
# Fix KGs that have window_index=0 but should be None (final KGs)
|
| 51 |
+
if kg.window_index == 0 and kg.window_total == 1:
|
| 52 |
+
logger.info(f"Fixing KG {kg.filename}: setting window_index=None")
|
| 53 |
+
kg.window_index = None
|
| 54 |
+
fixed_count += 1
|
| 55 |
+
|
| 56 |
+
if fixed_count > 0:
|
| 57 |
+
session.commit()
|
| 58 |
+
logger.info(f"✅ Fixed {fixed_count} knowledge graphs")
|
| 59 |
+
else:
|
| 60 |
+
logger.info("No knowledge graphs needed fixing")
|
| 61 |
+
|
| 62 |
+
# Verify the fixes
|
| 63 |
+
logger.info("\n🔍 Verification:")
|
| 64 |
+
for trace in sample_traces:
|
| 65 |
+
kgs = session.query(KnowledgeGraph).filter(
|
| 66 |
+
KnowledgeGraph.trace_id == trace.trace_id
|
| 67 |
+
).all()
|
| 68 |
+
|
| 69 |
+
for kg in kgs:
|
| 70 |
+
is_final = (kg.window_index is None and kg.window_total is not None)
|
| 71 |
+
logger.info(f"Trace: {trace.title}")
|
| 72 |
+
logger.info(f" KG: {kg.filename} - window_index={kg.window_index}, window_total={kg.window_total}, is_final={is_final}")
|
| 73 |
+
|
| 74 |
+
return fixed_count
|
| 75 |
+
|
| 76 |
+
except Exception as e:
|
| 77 |
+
logger.error(f"Error fixing sample knowledge graphs: {str(e)}")
|
| 78 |
+
session.rollback()
|
| 79 |
+
return 0
|
| 80 |
+
finally:
|
| 81 |
+
session.close()
|
| 82 |
+
|
| 83 |
+
if __name__ == "__main__":
|
| 84 |
+
logger.info("🔧 Starting sample knowledge graphs fix...")
|
| 85 |
+
fixed = fix_sample_knowledge_graphs()
|
| 86 |
+
|
| 87 |
+
if fixed > 0:
|
| 88 |
+
logger.info(f"🎉 Successfully fixed {fixed} knowledge graphs!")
|
| 89 |
+
logger.info("💡 Sample traces should now show their knowledge graphs correctly.")
|
| 90 |
+
else:
|
| 91 |
+
logger.info("ℹ️ No fixes were needed or no sample data found.")
|