history_dialogue_service.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # vim:fenc=utf-8
  4. import requests
  5. import logging
  6. import json
  7. import configs
  8. class HistoryDialogueService:
  9. def __init__(self, base_url: str):
  10. self.base_url = base_url
  11. def get_dialogue_history(self, staff_id: str, user_id: str, max_count: int = 10):
  12. url = f"{self.base_url}?sender={staff_id}&receiver={user_id}"
  13. response = requests.post(url, headers={
  14. 'Content-Type': 'application/json'
  15. })
  16. if response.status_code != 200:
  17. raise Exception("Request error [{}]: {}".format(response.status_code, response.text))
  18. data = response.json()
  19. if not data.get('success', False):
  20. raise Exception("Error in response: {}".format(data.get('message', 'no message returned')))
  21. data = data.get('data', [])
  22. ret = []
  23. for record in data:
  24. sender = record.get('sender')
  25. if sender == user_id:
  26. role = 'user'
  27. elif sender == staff_id:
  28. role = 'assistant'
  29. else:
  30. logging.warning("Unknown sender in dialogue history: {}".format(sender))
  31. continue
  32. ret.append({
  33. 'role': role,
  34. 'content': record.get('content', ''),
  35. 'timestamp': record.get('sendtime', 0)
  36. })
  37. ret = sorted(ret, key=lambda x: x['timestamp'])
  38. return ret[-max_count:] if len(ret) > max_count else ret
  39. if __name__ == '__main__':
  40. api_url = configs.get()['storage']['history_dialogue']['api_base_url']
  41. service = HistoryDialogueService(api_url)
  42. resp = service.get_dialogue_history(staff_id='1688854492669990', user_id='7881301263964433')
  43. print(resp)