Duibonduil commited on
Commit
c5628a4
·
verified ·
1 Parent(s): 1560363

Upload custom_rich_aworld_ui.py

Browse files
examples/stream/custom/custom_rich_aworld_ui.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import asyncio
2
+ import time
3
+ from dataclasses import dataclass, field
4
+ from time import sleep
5
+
6
+ from rich.table import Table
7
+
8
+ from aworld.output.utils import consume_content
9
+ from rich.status import Status
10
+ from rich.console import Console
11
+
12
+ from aworld.output import MessageOutput, WorkSpace
13
+ from aworld.output.base import StepOutput, ToolResultOutput
14
+ from aworld.output.ui.base import AworldUI
15
+
16
+ @dataclass
17
+ class RichAworldUI(AworldUI):
18
+ console: Console = field(default_factory=Console)
19
+ status: Status = None
20
+ workspace: WorkSpace = None
21
+
22
+ async def message_output(self, __output__: MessageOutput):
23
+ result = []
24
+ async def __log_item(item):
25
+ result.append(item)
26
+ self.console.print(item, end="")
27
+
28
+ if __output__.reason_generator or __output__.response_generator:
29
+ if __output__.reason_generator:
30
+ await consume_content(__output__.reason_generator, __log_item)
31
+ if __output__.reason_generator:
32
+ await consume_content(__output__.response_generator, __log_item)
33
+ else:
34
+ await consume_content(__output__.reasoning, __log_item)
35
+ await consume_content(__output__.response, __log_item)
36
+ # if __output__.tool_calls:
37
+ # await consume_content(__output__.tool_calls, __log_item)
38
+ self.console.print("")
39
+
40
+ async def tool_result(self, output: ToolResultOutput):
41
+ """
42
+ tool_result
43
+ """
44
+ table = Table(show_header=False, header_style="bold magenta", title=f"Call Tools#ID_{output.origin_tool_call.id}")
45
+ table.add_column("name", style="dim", width=12)
46
+ table.add_column("content")
47
+ table.add_row("function_name", output.origin_tool_call.function.name)
48
+ table.add_row("arguments", output.origin_tool_call.function.arguments)
49
+ table.add_row("result", output.data)
50
+ self.console.print(table)
51
+
52
+ async def step(self, output: StepOutput):
53
+ if output.status == "START":
54
+ self.console.print(f"[bold green]{output.name} ✈️START ...")
55
+ self.status = self.console.status(f"[bold green]{output.name} RUNNING ...")
56
+ self.status.start()
57
+ elif output.status == "FINISHED":
58
+ self.status.stop()
59
+ self.console.print(f"[bold green]{output.name} 🛬FINISHED ...")
60
+ elif output.status == "FAILED":
61
+ self.status.stop()
62
+ self.console.print(f"[bold red]{output.name} 💥FAILED ...")
63
+ else:
64
+ self.status.stop()
65
+ self.console.print(f"============={output.name} ❓❓❓UNKNOWN#{output.status} ======================")