| import json |
|
|
|
|
| class OpenaiStreamOutputer: |
| """ |
| Create chat completion - OpenAI API Documentation |
| * https://platform.openai.com/docs/api-reference/chat/create |
| """ |
|
|
| def __init__(self): |
| self.default_data = { |
| "created": 1700000000, |
| "id": "chatcmpl-hugginface", |
| "object": "chat.completion.chunk", |
| |
| "model": "hugginface", |
| "choices": [], |
| } |
|
|
| def data_to_string(self, data={}, content_type=""): |
| data_str = f"{json.dumps(data)}" |
| return data_str |
|
|
| def output(self, content=None, content_type="Completions") -> str: |
| data = self.default_data.copy() |
| if content_type == "Role": |
| data["choices"] = [ |
| { |
| "index": 0, |
| "delta": {"role": "assistant"}, |
| "finish_reason": None, |
| } |
| ] |
| elif content_type in [ |
| "Completions", |
| "InternalSearchQuery", |
| "InternalSearchResult", |
| "SuggestedResponses", |
| ]: |
| if content_type in ["InternalSearchQuery", "InternalSearchResult"]: |
| content += "\n" |
| data["choices"] = [ |
| { |
| "index": 0, |
| "delta": {"content": content}, |
| "finish_reason": None, |
| } |
| ] |
| elif content_type == "Finished": |
| data["choices"] = [ |
| { |
| "index": 0, |
| "delta": {}, |
| "finish_reason": "stop", |
| } |
| ] |
| else: |
| data["choices"] = [ |
| { |
| "index": 0, |
| "delta": {}, |
| "finish_reason": None, |
| } |
| ] |
| return self.data_to_string(data, content_type) |
|
|