openai_to_response.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎
  5. @file: openai_to_response.py
  6. @date:2024/9/6 16:08
  7. @desc:
  8. """
  9. import datetime
  10. from django.http import JsonResponse
  11. from django.utils import timezone
  12. from openai.types import CompletionUsage
  13. from openai.types.chat import ChatCompletionChunk, ChatCompletionMessage, ChatCompletion
  14. from openai.types.chat.chat_completion import Choice as BlockChoice
  15. from openai.types.chat.chat_completion_chunk import Choice, ChoiceDelta
  16. from rest_framework import status
  17. from common.handle.base_to_response import BaseToResponse
  18. class OpenaiToResponse(BaseToResponse):
  19. def to_block_response(self, chat_id, chat_record_id, content, is_end, prompt_tokens, completion_tokens,
  20. other_params: dict = None,
  21. _status=status.HTTP_200_OK):
  22. if other_params is None:
  23. other_params = {}
  24. data = ChatCompletion(id=chat_record_id, choices=[
  25. BlockChoice(finish_reason='stop', index=0, chat_id=chat_id,
  26. answer_list=other_params.get('answer_list', ""),
  27. message=ChatCompletionMessage(role='assistant', content=content))],
  28. created=timezone.now().second, model='', object='chat.completion',
  29. usage=CompletionUsage(completion_tokens=completion_tokens,
  30. prompt_tokens=prompt_tokens,
  31. total_tokens=completion_tokens + prompt_tokens)
  32. ).dict()
  33. return JsonResponse(data=data, status=_status)
  34. def to_stream_chunk_response(self, chat_id, chat_record_id, node_id, up_node_id_list, content, is_end,
  35. prompt_tokens,
  36. completion_tokens, other_params: dict = None):
  37. if other_params is None:
  38. other_params = {}
  39. chunk = ChatCompletionChunk(id=chat_record_id, model='', object='chat.completion.chunk',
  40. created=timezone.now().second, choices=[
  41. Choice(delta=ChoiceDelta(content=content, reasoning_content=other_params.get('reasoning_content', ""),
  42. chat_id=chat_id),
  43. finish_reason='stop' if is_end else None,
  44. index=0)],
  45. usage=CompletionUsage(completion_tokens=completion_tokens,
  46. prompt_tokens=prompt_tokens,
  47. total_tokens=completion_tokens + prompt_tokens)).json()
  48. return super().format_stream_chunk(chunk)