- Started addition of Assets (to e.g. handle document templates).

- To be continued (Models, first views are ready)
This commit is contained in:
Josako
2025-03-17 17:40:42 +01:00
parent a6402524ce
commit cf2201a1f7
13 changed files with 778 additions and 39 deletions

View File

@@ -1,4 +1,5 @@
import os
import time
import uuid
from contextlib import contextmanager
from datetime import datetime
@@ -82,15 +83,21 @@ class BusinessEvent:
self.span_name = span_name
self.parent_span_id = parent_span_id
# Track start time for the span
span_start_time = time.time()
self.log(f"Start")
try:
yield
finally:
# Calculate total time for this span
span_total_time = time.time() - span_start_time
if self.llm_metrics['call_count'] > 0:
self.log_final_metrics()
self.reset_llm_metrics()
self.log(f"End")
self.log(f"End", extra_fields={'span_duration': span_total_time})
# Restore the previous span info
if self.spans:
self.span_id, self.span_name, self.parent_span_id = self.spans.pop()
@@ -99,7 +106,7 @@ class BusinessEvent:
self.span_name = None
self.parent_span_id = None
def log(self, message: str, level: str = 'info'):
def log(self, message: str, level: str = 'info', extra_fields: Dict[str, Any] = None):
log_data = {
'timestamp': dt.now(tz=tz.utc),
'event_type': self.event_type,
@@ -115,6 +122,15 @@ class BusinessEvent:
'environment': self.environment,
'message': message,
}
# Add any extra fields
if extra_fields:
for key, value in extra_fields.items():
# For span/trace duration, use the llm_metrics_total_time field
if key == 'span_duration' or key == 'trace_duration':
log_data['llm_metrics_total_time'] = value
else:
log_data[key] = value
self._log_buffer.append(log_data)
def log_llm_metrics(self, metrics: dict, level: str = 'info'):
@@ -226,13 +242,17 @@ class BusinessEvent:
self._log_buffer = []
def __enter__(self):
self.trace_start_time = time.time()
self.log(f'Starting Trace for {self.event_type}')
return BusinessEventContext(self).__enter__()
def __exit__(self, exc_type, exc_val, exc_tb):
trace_total_time = time.time() - self.trace_start_time
if self.llm_metrics['call_count'] > 0:
self.log_final_metrics()
self.reset_llm_metrics()
self.log(f'Ending Trace for {self.event_type}')
self.log(f'Ending Trace for {self.event_type}', extra_fields={'trace_duration': trace_total_time})
self._flush_log_buffer()
return BusinessEventContext(self).__exit__(exc_type, exc_val, exc_tb)