File size: 2,066 Bytes
77320e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import asyncio

from ..schemas import Message, RoleType
from ..schemas import chat_request_to_response, ChatCompleteRequest, update_chat_response_with_message

DONE = "DONE"

FINISH_STATUS = "FINISH"
FAILED_STATUS = "FAILED"
PROCESSING_STATUS = "PROCESSING"


def message_generator(messages):
    for message in messages:
        yield message


def update_chat_status_local(async_chat_generator):
    """Yields pairs (current_item, is_last) for each item in async_gen."""
    buffered_chat = None
    for item in async_chat_generator:
        if buffered_chat is not None:
            yield buffered_chat, False
        buffered_chat = item
    if buffered_chat is not None:
        yield buffered_chat, True


async def chat_local_event_generator(chat_request: ChatCompleteRequest):
    """
    Init a chat session and start pushing response back
    """
    message1 = Message(role=RoleType.User, content="你好,我是豆包")
    message2 = Message(role=RoleType.Agent, content="今天天气很好")
    message3 = Message(role=RoleType.Agent, content="再见")
    messages = [message1, message2, message3]

    base_response = chat_request_to_response(chat_request)
    try:
        for message, is_last in update_chat_status_local(message_generator(messages)):
            status = FINISH_STATUS if is_last else PROCESSING_STATUS
            yield update_chat_response_with_message(base_response.copy(), message, status=status).dict()
            await asyncio.sleep(2)
    except Exception as e:
        failed_message = Message(role=RoleType.System, content="Failed: {}".format(str(e)))
        yield update_chat_response_with_message(base_response.copy(), failed_message, status=FAILED_STATUS).dict()

    yield DONE


async def chat_local_event(chat_request: ChatCompleteRequest):
    """
    Init a chat session and start pushing response back
    """
    message = Message(role=RoleType.User, content="Hi")

    base_response = chat_request_to_response(chat_request)
    return update_chat_response_with_message(base_response.copy(), message).dict()