utils.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from contextlib import contextmanager
  2. from datetime import datetime
  3. from typing import Optional, Union
  4. from extensions.ext_database import db
  5. from models.model import Message
  6. def filter_none_values(data: dict):
  7. new_data = {}
  8. for key, value in data.items():
  9. if value is None:
  10. continue
  11. if isinstance(value, datetime):
  12. new_data[key] = value.isoformat()
  13. else:
  14. new_data[key] = value
  15. return new_data
  16. def get_message_data(message_id: str):
  17. return db.session.query(Message).filter(Message.id == message_id).first()
  18. @contextmanager
  19. def measure_time():
  20. timing_info = {"start": datetime.now(), "end": None}
  21. try:
  22. yield timing_info
  23. finally:
  24. timing_info["end"] = datetime.now()
  25. def replace_text_with_content(data):
  26. if isinstance(data, dict):
  27. new_data = {}
  28. for key, value in data.items():
  29. if key == "text":
  30. new_data["content"] = value
  31. else:
  32. new_data[key] = replace_text_with_content(value)
  33. return new_data
  34. elif isinstance(data, list):
  35. return [replace_text_with_content(item) for item in data]
  36. else:
  37. return data
  38. def generate_dotted_order(
  39. run_id: str, start_time: Union[str, datetime], parent_dotted_order: Optional[str] = None
  40. ) -> str:
  41. """
  42. generate dotted_order for langsmith
  43. """
  44. start_time = datetime.fromisoformat(start_time) if isinstance(start_time, str) else start_time
  45. timestamp = start_time.strftime("%Y%m%dT%H%M%S%f")[:-3] + "Z"
  46. current_segment = f"{timestamp}{run_id}"
  47. if parent_dotted_order is None:
  48. return current_segment
  49. return f"{parent_dotted_order}.{current_segment}"