File size: 4,230 Bytes
4c9b469
 
bb37148
63998ab
6ad10eb
 
 
63998ab
6ad10eb
82cb440
6ad10eb
4c9b469
6ad10eb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1bbf682
63998ab
 
 
 
 
6ad10eb
4c9b469
 
 
82cb440
4c9b469
e4f31be
 
 
 
4c9b469
e4f31be
4c9b469
 
 
 
6ad10eb
 
 
e4f31be
4c9b469
 
 
 
 
6ad10eb
 
e4f31be
4c9b469
 
 
 
 
6ad10eb
 
1bbf682
 
82cb440
 
 
 
 
 
6ad10eb
 
 
82cb440
 
6ad10eb
 
 
 
 
4c9b469
63998ab
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import json

from utils.logger import logger
from networks import OpenaiStreamOutputer


class MessageParser:
    def __init__(self, outputer=OpenaiStreamOutputer()):
        self.delta_content_pointer = 0
        self.outputer = outputer

    def parse(self, data, return_output=False):
        arguments = data["arguments"][0]
        if arguments.get("throttling"):
            throttling = arguments.get("throttling")
            # pprint.pprint(throttling)
        if arguments.get("messages"):
            for message in arguments.get("messages"):
                message_type = message.get("messageType")
                # Message: Displayed answer
                if message_type is None:
                    content = message["adaptiveCards"][0]["body"][0]["text"]
                    delta_content = content[self.delta_content_pointer :]
                    logger.line(delta_content, end="")
                    self.delta_content_pointer = len(content)
                    # Message: Suggested Questions
                    if message.get("suggestedResponses"):
                        logger.note("\nSuggested Questions: ")
                        suggestion_texts = [
                            suggestion.get("text")
                            for suggestion in message.get("suggestedResponses")
                        ]
                        for suggestion_text in suggestion_texts:
                            logger.file(f"- {suggestion_text}")
                    if return_output:
                        output_bytes = self.outputer.output(
                            delta_content, content_type="Completions"
                        )
                        if message.get("suggestedResponses"):
                            suggestion_texts_str = "\nSuggested Questions:\n"
                            suggestion_texts_str += "\n".join(
                                f"- {item}" for item in suggestion_texts
                            )
                            output_bytes += self.outputer.output(
                                suggestion_texts_str,
                                content_type="SuggestedResponses",
                            )
                        return output_bytes

                # Message: Search Query
                elif message_type in ["InternalSearchQuery"]:
                    message_hidden_text = message["hiddenText"]
                    search_str = f"\n[Searching: [{message_hidden_text}]]\n"
                    logger.note(search_str)
                    if return_output:
                        return self.outputer.output(
                            search_str, content_type="InternalSearchQuery"
                        )
                # Message: Internal Search Results
                elif message_type in ["InternalSearchResult"]:
                    analysis_str = f"\n[Analyzing search results ...]\n"
                    logger.note(analysis_str)
                    if return_output:
                        return self.outputer.output(
                            analysis_str, content_type="InternalSearchResult"
                        )
                # Message: Loader status, such as "Generating Answers"
                elif message_type in ["InternalLoaderMessage"]:
                    # logger.note("[Generating answers ...]\n")
                    pass
                # Message: Internal thoughts, such as "I will generate my response to the user message"
                elif message_type in ["Internal"]:
                    pass
                # Message: Internal Action Marker, no value
                elif message_type in ["InternalActionMarker"]:
                    continue
                # Message: Render Cards for Webpages
                elif message_type in ["RenderCardRequest"]:
                    continue
                elif message_type in ["ChatName"]:
                    continue
                # Message: Not Implemented
                else:
                    raise NotImplementedError(
                        f"Not Supported Message Type: {message_type}"
                    )

        # return OpenaiStreamOutputer().output(content="", content_type="NotImplemented")
        return b""