empathy-framework 3.7.0__py3-none-any.whl → 3.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. coach_wizards/code_reviewer_README.md +60 -0
  2. coach_wizards/code_reviewer_wizard.py +180 -0
  3. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/METADATA +148 -11
  4. empathy_framework-3.8.0.dist-info/RECORD +333 -0
  5. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/top_level.txt +5 -1
  6. empathy_healthcare_plugin/monitors/__init__.py +9 -0
  7. empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
  8. empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
  9. empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
  10. empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
  11. empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
  12. empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
  13. empathy_llm_toolkit/agent_factory/__init__.py +53 -0
  14. empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
  15. empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
  16. empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
  17. empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
  18. empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
  19. empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
  20. empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
  21. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
  22. empathy_llm_toolkit/agent_factory/base.py +305 -0
  23. empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
  24. empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
  25. empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
  26. empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
  27. empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
  28. empathy_llm_toolkit/agent_factory/decorators.py +286 -0
  29. empathy_llm_toolkit/agent_factory/factory.py +558 -0
  30. empathy_llm_toolkit/agent_factory/framework.py +192 -0
  31. empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
  32. empathy_llm_toolkit/agent_factory/resilient.py +320 -0
  33. empathy_llm_toolkit/cli/__init__.py +8 -0
  34. empathy_llm_toolkit/cli/sync_claude.py +487 -0
  35. empathy_llm_toolkit/code_health.py +150 -3
  36. empathy_llm_toolkit/config/__init__.py +29 -0
  37. empathy_llm_toolkit/config/unified.py +295 -0
  38. empathy_llm_toolkit/routing/__init__.py +32 -0
  39. empathy_llm_toolkit/routing/model_router.py +362 -0
  40. empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
  41. empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
  42. empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  43. empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
  44. empathy_llm_toolkit/security/README.md +262 -0
  45. empathy_llm_toolkit/security/__init__.py +62 -0
  46. empathy_llm_toolkit/security/audit_logger.py +929 -0
  47. empathy_llm_toolkit/security/audit_logger_example.py +152 -0
  48. empathy_llm_toolkit/security/pii_scrubber.py +640 -0
  49. empathy_llm_toolkit/security/secrets_detector.py +678 -0
  50. empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
  51. empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
  52. empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
  53. empathy_llm_toolkit/wizards/__init__.py +38 -0
  54. empathy_llm_toolkit/wizards/base_wizard.py +364 -0
  55. empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
  56. empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
  57. empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
  58. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
  59. empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
  60. empathy_os/__init__.py +52 -52
  61. empathy_os/adaptive/__init__.py +13 -0
  62. empathy_os/adaptive/task_complexity.py +127 -0
  63. empathy_os/cache/__init__.py +117 -0
  64. empathy_os/cache/base.py +166 -0
  65. empathy_os/cache/dependency_manager.py +253 -0
  66. empathy_os/cache/hash_only.py +248 -0
  67. empathy_os/cache/hybrid.py +390 -0
  68. empathy_os/cache/storage.py +282 -0
  69. empathy_os/cli.py +118 -8
  70. empathy_os/cli_unified.py +121 -1
  71. empathy_os/config/__init__.py +63 -0
  72. empathy_os/config/xml_config.py +239 -0
  73. empathy_os/config.py +2 -1
  74. empathy_os/dashboard/__init__.py +15 -0
  75. empathy_os/dashboard/server.py +743 -0
  76. empathy_os/memory/__init__.py +195 -0
  77. empathy_os/memory/claude_memory.py +466 -0
  78. empathy_os/memory/config.py +224 -0
  79. empathy_os/memory/control_panel.py +1298 -0
  80. empathy_os/memory/edges.py +179 -0
  81. empathy_os/memory/graph.py +567 -0
  82. empathy_os/memory/long_term.py +1194 -0
  83. empathy_os/memory/nodes.py +179 -0
  84. empathy_os/memory/redis_bootstrap.py +540 -0
  85. empathy_os/memory/security/__init__.py +31 -0
  86. empathy_os/memory/security/audit_logger.py +930 -0
  87. empathy_os/memory/security/pii_scrubber.py +640 -0
  88. empathy_os/memory/security/secrets_detector.py +678 -0
  89. empathy_os/memory/short_term.py +2119 -0
  90. empathy_os/memory/storage/__init__.py +15 -0
  91. empathy_os/memory/summary_index.py +583 -0
  92. empathy_os/memory/unified.py +619 -0
  93. empathy_os/metrics/__init__.py +12 -0
  94. empathy_os/metrics/prompt_metrics.py +190 -0
  95. empathy_os/models/__init__.py +136 -0
  96. empathy_os/models/__main__.py +13 -0
  97. empathy_os/models/cli.py +655 -0
  98. empathy_os/models/empathy_executor.py +354 -0
  99. empathy_os/models/executor.py +252 -0
  100. empathy_os/models/fallback.py +671 -0
  101. empathy_os/models/provider_config.py +563 -0
  102. empathy_os/models/registry.py +382 -0
  103. empathy_os/models/tasks.py +302 -0
  104. empathy_os/models/telemetry.py +548 -0
  105. empathy_os/models/token_estimator.py +378 -0
  106. empathy_os/models/validation.py +274 -0
  107. empathy_os/monitoring/__init__.py +52 -0
  108. empathy_os/monitoring/alerts.py +23 -0
  109. empathy_os/monitoring/alerts_cli.py +268 -0
  110. empathy_os/monitoring/multi_backend.py +271 -0
  111. empathy_os/monitoring/otel_backend.py +363 -0
  112. empathy_os/optimization/__init__.py +19 -0
  113. empathy_os/optimization/context_optimizer.py +272 -0
  114. empathy_os/plugins/__init__.py +28 -0
  115. empathy_os/plugins/base.py +361 -0
  116. empathy_os/plugins/registry.py +268 -0
  117. empathy_os/project_index/__init__.py +30 -0
  118. empathy_os/project_index/cli.py +335 -0
  119. empathy_os/project_index/crew_integration.py +430 -0
  120. empathy_os/project_index/index.py +425 -0
  121. empathy_os/project_index/models.py +501 -0
  122. empathy_os/project_index/reports.py +473 -0
  123. empathy_os/project_index/scanner.py +538 -0
  124. empathy_os/prompts/__init__.py +61 -0
  125. empathy_os/prompts/config.py +77 -0
  126. empathy_os/prompts/context.py +177 -0
  127. empathy_os/prompts/parser.py +285 -0
  128. empathy_os/prompts/registry.py +313 -0
  129. empathy_os/prompts/templates.py +208 -0
  130. empathy_os/resilience/__init__.py +56 -0
  131. empathy_os/resilience/circuit_breaker.py +256 -0
  132. empathy_os/resilience/fallback.py +179 -0
  133. empathy_os/resilience/health.py +300 -0
  134. empathy_os/resilience/retry.py +209 -0
  135. empathy_os/resilience/timeout.py +135 -0
  136. empathy_os/routing/__init__.py +43 -0
  137. empathy_os/routing/chain_executor.py +433 -0
  138. empathy_os/routing/classifier.py +217 -0
  139. empathy_os/routing/smart_router.py +234 -0
  140. empathy_os/routing/wizard_registry.py +307 -0
  141. empathy_os/trust/__init__.py +28 -0
  142. empathy_os/trust/circuit_breaker.py +579 -0
  143. empathy_os/validation/__init__.py +19 -0
  144. empathy_os/validation/xml_validator.py +281 -0
  145. empathy_os/wizard_factory_cli.py +170 -0
  146. empathy_os/workflows/__init__.py +360 -0
  147. empathy_os/workflows/base.py +1660 -0
  148. empathy_os/workflows/bug_predict.py +962 -0
  149. empathy_os/workflows/code_review.py +960 -0
  150. empathy_os/workflows/code_review_adapters.py +310 -0
  151. empathy_os/workflows/code_review_pipeline.py +720 -0
  152. empathy_os/workflows/config.py +600 -0
  153. empathy_os/workflows/dependency_check.py +648 -0
  154. empathy_os/workflows/document_gen.py +1069 -0
  155. empathy_os/workflows/documentation_orchestrator.py +1205 -0
  156. empathy_os/workflows/health_check.py +679 -0
  157. empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
  158. empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
  159. empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
  160. empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
  161. empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
  162. empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
  163. empathy_os/workflows/manage_documentation.py +804 -0
  164. empathy_os/workflows/new_sample_workflow1.py +146 -0
  165. empathy_os/workflows/new_sample_workflow1_README.md +150 -0
  166. empathy_os/workflows/perf_audit.py +687 -0
  167. empathy_os/workflows/pr_review.py +748 -0
  168. empathy_os/workflows/progress.py +445 -0
  169. empathy_os/workflows/progress_server.py +322 -0
  170. empathy_os/workflows/refactor_plan.py +693 -0
  171. empathy_os/workflows/release_prep.py +808 -0
  172. empathy_os/workflows/research_synthesis.py +404 -0
  173. empathy_os/workflows/secure_release.py +585 -0
  174. empathy_os/workflows/security_adapters.py +297 -0
  175. empathy_os/workflows/security_audit.py +1046 -0
  176. empathy_os/workflows/step_config.py +234 -0
  177. empathy_os/workflows/test5.py +125 -0
  178. empathy_os/workflows/test5_README.md +158 -0
  179. empathy_os/workflows/test_gen.py +1855 -0
  180. empathy_os/workflows/test_lifecycle.py +526 -0
  181. empathy_os/workflows/test_maintenance.py +626 -0
  182. empathy_os/workflows/test_maintenance_cli.py +590 -0
  183. empathy_os/workflows/test_maintenance_crew.py +821 -0
  184. empathy_os/workflows/xml_enhanced_crew.py +285 -0
  185. empathy_software_plugin/cli/__init__.py +120 -0
  186. empathy_software_plugin/cli/inspect.py +362 -0
  187. empathy_software_plugin/cli.py +3 -1
  188. empathy_software_plugin/wizards/__init__.py +42 -0
  189. empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
  190. empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
  191. empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
  192. empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
  193. empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
  194. empathy_software_plugin/wizards/base_wizard.py +288 -0
  195. empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
  196. empathy_software_plugin/wizards/code_review_wizard.py +606 -0
  197. empathy_software_plugin/wizards/debugging/__init__.py +50 -0
  198. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
  199. empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
  200. empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
  201. empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
  202. empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
  203. empathy_software_plugin/wizards/debugging/verification.py +369 -0
  204. empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
  205. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
  206. empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
  207. empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
  208. empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
  209. empathy_software_plugin/wizards/performance/__init__.py +9 -0
  210. empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
  211. empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
  212. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
  213. empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
  214. empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
  215. empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
  216. empathy_software_plugin/wizards/security/__init__.py +32 -0
  217. empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
  218. empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
  219. empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
  220. empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
  221. empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
  222. empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
  223. empathy_software_plugin/wizards/testing/__init__.py +27 -0
  224. empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
  225. empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
  226. empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
  227. empathy_software_plugin/wizards/testing_wizard.py +274 -0
  228. hot_reload/README.md +473 -0
  229. hot_reload/__init__.py +62 -0
  230. hot_reload/config.py +84 -0
  231. hot_reload/integration.py +228 -0
  232. hot_reload/reloader.py +298 -0
  233. hot_reload/watcher.py +179 -0
  234. hot_reload/websocket.py +176 -0
  235. scaffolding/README.md +589 -0
  236. scaffolding/__init__.py +35 -0
  237. scaffolding/__main__.py +14 -0
  238. scaffolding/cli.py +240 -0
  239. test_generator/__init__.py +38 -0
  240. test_generator/__main__.py +14 -0
  241. test_generator/cli.py +226 -0
  242. test_generator/generator.py +325 -0
  243. test_generator/risk_analyzer.py +216 -0
  244. workflow_patterns/__init__.py +33 -0
  245. workflow_patterns/behavior.py +249 -0
  246. workflow_patterns/core.py +76 -0
  247. workflow_patterns/output.py +99 -0
  248. workflow_patterns/registry.py +255 -0
  249. workflow_patterns/structural.py +288 -0
  250. workflow_scaffolding/__init__.py +11 -0
  251. workflow_scaffolding/__main__.py +12 -0
  252. workflow_scaffolding/cli.py +206 -0
  253. workflow_scaffolding/generator.py +265 -0
  254. agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
  255. agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
  256. agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
  257. agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
  258. agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
  259. agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
  260. agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
  261. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
  262. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
  263. agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
  264. agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
  265. agents/compliance_anticipation_agent.py +0 -1422
  266. agents/compliance_db.py +0 -339
  267. agents/epic_integration_wizard.py +0 -530
  268. agents/notifications.py +0 -291
  269. agents/trust_building_behaviors.py +0 -872
  270. empathy_framework-3.7.0.dist-info/RECORD +0 -105
  271. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/WHEEL +0 -0
  272. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/entry_points.txt +0 -0
  273. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/licenses/LICENSE +0 -0
  274. /empathy_os/{monitoring.py → agent_monitoring.py} +0 -0
@@ -0,0 +1,190 @@
1
+ """Prompt performance metrics tracking
2
+
3
+ Tracks token usage, latency, success rates, and other metrics for
4
+ XML-enhanced prompts to enable optimization and A/B testing.
5
+
6
+ Copyright 2026 Smart-AI-Memory
7
+ Licensed under Fair Source License 0.9
8
+ """
9
+
10
+ import json
11
+ import logging
12
+ from dataclasses import asdict, dataclass
13
+ from datetime import datetime
14
+ from pathlib import Path
15
+ from typing import Any
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ @dataclass
21
+ class PromptMetrics:
22
+ """Metrics for a single prompt execution.
23
+
24
+ Tracks comprehensive performance data for prompt optimization
25
+ and A/B testing.
26
+
27
+ Attributes:
28
+ timestamp: ISO format timestamp of execution
29
+ workflow: Workflow name (e.g., "code_review", "bug_predict")
30
+ agent_role: Role of the agent (e.g., "Code Reviewer")
31
+ task_description: Brief description of task (truncated to 100 chars)
32
+ model: Model name (e.g., "gpt-4", "claude-sonnet")
33
+ prompt_tokens: Number of input tokens
34
+ completion_tokens: Number of output tokens
35
+ total_tokens: Total tokens (input + output)
36
+ latency_ms: Execution time in milliseconds
37
+ retry_count: Number of retry attempts
38
+ parsing_success: Whether XML parsing succeeded
39
+ validation_success: Whether XML validation succeeded (None if not validated)
40
+ error_message: Error message if execution failed (None if successful)
41
+ xml_structure_used: Whether XML-enhanced prompts were used
42
+ """
43
+
44
+ timestamp: str
45
+ workflow: str
46
+ agent_role: str
47
+ task_description: str
48
+ model: str
49
+ prompt_tokens: int
50
+ completion_tokens: int
51
+ total_tokens: int
52
+ latency_ms: float
53
+ retry_count: int
54
+ parsing_success: bool
55
+ validation_success: bool | None
56
+ error_message: str | None
57
+ xml_structure_used: bool
58
+
59
+ def to_dict(self) -> dict:
60
+ """Convert to dictionary for JSON serialization."""
61
+ return asdict(self)
62
+
63
+ @classmethod
64
+ def from_dict(cls, data: dict) -> "PromptMetrics":
65
+ """Create from dictionary (deserialization)."""
66
+ return cls(**data)
67
+
68
+
69
+ class MetricsTracker:
70
+ """Tracks and persists prompt metrics to disk.
71
+
72
+ Uses JSON Lines format for append-only writes and efficient reading.
73
+ Metrics are stored in .empathy/prompt_metrics.json by default.
74
+
75
+ Usage:
76
+ tracker = MetricsTracker()
77
+ metric = PromptMetrics(...)
78
+ tracker.log_metric(metric)
79
+
80
+ summary = tracker.get_summary(workflow="code_review")
81
+ print(f"Avg tokens: {summary['avg_tokens']}")
82
+ """
83
+
84
+ def __init__(self, metrics_file: str = ".empathy/prompt_metrics.json"):
85
+ """Initialize metrics tracker.
86
+
87
+ Args:
88
+ metrics_file: Path to metrics file (JSON Lines format)
89
+ """
90
+ self.metrics_file = Path(metrics_file)
91
+ self.metrics_file.parent.mkdir(parents=True, exist_ok=True)
92
+
93
+ # Create file if it doesn't exist
94
+ if not self.metrics_file.exists():
95
+ self.metrics_file.write_text("")
96
+
97
+ def log_metric(self, metric: PromptMetrics) -> None:
98
+ """Log a single metric to file (JSON Lines format).
99
+
100
+ Args:
101
+ metric: PromptMetrics instance to log
102
+ """
103
+ try:
104
+ with open(self.metrics_file, "a") as f:
105
+ f.write(json.dumps(metric.to_dict()) + "\n")
106
+ except Exception as e:
107
+ logger.error(f"Failed to log metric: {e}")
108
+
109
+ def get_metrics(
110
+ self,
111
+ workflow: str | None = None,
112
+ start_date: datetime | None = None,
113
+ end_date: datetime | None = None,
114
+ ) -> list[PromptMetrics]:
115
+ """Retrieve metrics with optional filtering.
116
+
117
+ Args:
118
+ workflow: Filter by workflow name (None = all workflows)
119
+ start_date: Filter by start date (None = no lower bound)
120
+ end_date: Filter by end date (None = no upper bound)
121
+
122
+ Returns:
123
+ List of PromptMetrics matching filters
124
+ """
125
+ metrics: list[PromptMetrics] = []
126
+
127
+ try:
128
+ if not self.metrics_file.exists():
129
+ return metrics
130
+
131
+ with open(self.metrics_file) as f:
132
+ for line in f:
133
+ if line.strip():
134
+ data = json.loads(line)
135
+ metric = PromptMetrics.from_dict(data)
136
+
137
+ # Apply filters
138
+ if workflow and metric.workflow != workflow:
139
+ continue
140
+
141
+ metric_time = datetime.fromisoformat(metric.timestamp)
142
+ if start_date and metric_time < start_date:
143
+ continue
144
+ if end_date and metric_time > end_date:
145
+ continue
146
+
147
+ metrics.append(metric)
148
+ except Exception as e:
149
+ logger.error(f"Failed to read metrics: {e}")
150
+
151
+ return metrics
152
+
153
+ def get_summary(self, workflow: str | None = None) -> dict[str, Any]:
154
+ """Get aggregated metrics summary.
155
+
156
+ Args:
157
+ workflow: Filter by workflow name (None = all workflows)
158
+
159
+ Returns:
160
+ Dictionary with aggregated metrics:
161
+ - total_prompts: Total number of prompts
162
+ - avg_tokens: Average total tokens
163
+ - avg_latency_ms: Average latency in milliseconds
164
+ - success_rate: Ratio of successful parses
165
+ - retry_rate: Average retry count per prompt
166
+ """
167
+ metrics = self.get_metrics(workflow=workflow)
168
+
169
+ if not metrics:
170
+ return {
171
+ "total_prompts": 0,
172
+ "avg_tokens": 0,
173
+ "avg_latency_ms": 0,
174
+ "success_rate": 0,
175
+ "retry_rate": 0,
176
+ }
177
+
178
+ total_prompts = len(metrics)
179
+ total_tokens = sum(m.total_tokens for m in metrics)
180
+ total_latency = sum(m.latency_ms for m in metrics)
181
+ successful = sum(1 for m in metrics if m.parsing_success)
182
+ retries = sum(m.retry_count for m in metrics)
183
+
184
+ return {
185
+ "total_prompts": total_prompts,
186
+ "avg_tokens": total_tokens / total_prompts,
187
+ "avg_latency_ms": total_latency / total_prompts,
188
+ "success_rate": successful / total_prompts,
189
+ "retry_rate": retries / total_prompts,
190
+ }
@@ -0,0 +1,136 @@
1
+ """Unified Model Registry for Empathy Framework
2
+
3
+ Single source of truth for model configurations across:
4
+ - empathy_llm_toolkit.routing.ModelRouter
5
+ - src/empathy_os/workflows.WorkflowConfig
6
+ - src/empathy_os.cost_tracker
7
+
8
+ Copyright 2025 Smart-AI-Memory
9
+ Licensed under Fair Source License 0.9
10
+ """
11
+
12
+ from .empathy_executor import EmpathyLLMExecutor
13
+ from .executor import ExecutionContext, LLMExecutor, LLMResponse, MockLLMExecutor
14
+ from .fallback import (
15
+ DEFAULT_FALLBACK_POLICY,
16
+ DEFAULT_RETRY_POLICY,
17
+ CircuitBreaker,
18
+ CircuitBreakerState,
19
+ FallbackPolicy,
20
+ FallbackStep,
21
+ FallbackStrategy,
22
+ ResilientExecutor,
23
+ RetryPolicy,
24
+ )
25
+ from .provider_config import (
26
+ ProviderConfig,
27
+ ProviderMode,
28
+ configure_provider_cli,
29
+ configure_provider_interactive,
30
+ get_provider_config,
31
+ reset_provider_config,
32
+ set_provider_config,
33
+ )
34
+ from .registry import (
35
+ MODEL_REGISTRY,
36
+ ModelInfo,
37
+ ModelProvider,
38
+ ModelTier,
39
+ get_all_models,
40
+ get_model,
41
+ get_pricing_for_model,
42
+ )
43
+ from .tasks import (
44
+ CAPABLE_TASKS,
45
+ CHEAP_TASKS,
46
+ PREMIUM_TASKS,
47
+ TASK_TIER_MAP,
48
+ TaskInfo,
49
+ TaskType,
50
+ get_all_tasks,
51
+ get_tasks_for_tier,
52
+ get_tier_for_task,
53
+ is_known_task,
54
+ normalize_task_type,
55
+ )
56
+ from .telemetry import (
57
+ LLMCallRecord,
58
+ TelemetryAnalytics,
59
+ TelemetryBackend,
60
+ TelemetryStore,
61
+ WorkflowRunRecord,
62
+ WorkflowStageRecord,
63
+ get_telemetry_store,
64
+ log_llm_call,
65
+ log_workflow_run,
66
+ )
67
+ from .validation import (
68
+ ConfigValidator,
69
+ ValidationError,
70
+ ValidationResult,
71
+ validate_config,
72
+ validate_yaml_file,
73
+ )
74
+
75
+ __all__ = [
76
+ "CAPABLE_TASKS",
77
+ "CHEAP_TASKS",
78
+ "DEFAULT_FALLBACK_POLICY",
79
+ "DEFAULT_RETRY_POLICY",
80
+ "MODEL_REGISTRY",
81
+ "PREMIUM_TASKS",
82
+ "TASK_TIER_MAP",
83
+ "CircuitBreaker",
84
+ "CircuitBreakerState",
85
+ "ConfigValidator",
86
+ "EmpathyLLMExecutor",
87
+ "ExecutionContext",
88
+ "FallbackPolicy",
89
+ "FallbackStep",
90
+ # Fallback exports
91
+ "FallbackStrategy",
92
+ # Telemetry exports
93
+ "LLMCallRecord",
94
+ # Executor exports
95
+ "LLMExecutor",
96
+ "LLMResponse",
97
+ "MockLLMExecutor",
98
+ "ModelInfo",
99
+ "ModelProvider",
100
+ # Registry exports
101
+ "ModelTier",
102
+ "ProviderConfig",
103
+ # Provider config exports
104
+ "ProviderMode",
105
+ "ResilientExecutor",
106
+ "RetryPolicy",
107
+ "TaskInfo",
108
+ # Task exports
109
+ "TaskType",
110
+ "TelemetryAnalytics",
111
+ "TelemetryBackend",
112
+ "TelemetryStore",
113
+ # Validation exports
114
+ "ValidationError",
115
+ "ValidationResult",
116
+ "WorkflowRunRecord",
117
+ "WorkflowStageRecord",
118
+ "configure_provider_cli",
119
+ "configure_provider_interactive",
120
+ "get_all_models",
121
+ "get_all_tasks",
122
+ "get_model",
123
+ "get_pricing_for_model",
124
+ "get_provider_config",
125
+ "get_tasks_for_tier",
126
+ "get_telemetry_store",
127
+ "get_tier_for_task",
128
+ "is_known_task",
129
+ "log_llm_call",
130
+ "log_workflow_run",
131
+ "normalize_task_type",
132
+ "reset_provider_config",
133
+ "set_provider_config",
134
+ "validate_config",
135
+ "validate_yaml_file",
136
+ ]
@@ -0,0 +1,13 @@
1
+ """Enable running the models CLI as a module.
2
+
3
+ Usage:
4
+ python -m empathy_os.models registry
5
+ python -m empathy_os.models tasks
6
+ python -m empathy_os.models validate config.yaml
7
+ python -m empathy_os.models costs
8
+ """
9
+
10
+ from .cli import main
11
+
12
+ if __name__ == "__main__":
13
+ exit(main())