File size: 2,989 Bytes
c48128e
cac4e7b
4d969ce
 
 
6d51c46
562af8d
a768bed
 
 
 
 
9ea371a
 
 
 
6141f1b
 
 
 
 
9ea371a
6141f1b
 
0e9c24d
5bcc2da
 
 
 
c48128e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9ea371a
409696f
722929d
ed306c8
4d969ce
 
 
ed306c8
cac4e7b
4d969ce
 
 
 
d8a9c24
9cdbe75
ed306c8
cac4e7b
4d969ce
 
722929d
4d969ce
722929d
 
a768bed
 
 
 
 
 
 
 
 
 
d56f6b1
05c2b03
 
409696f
05c2b03
 
b1c069d
230a192
719b83b
230a192
 
719b83b
 
 
409696f
c48128e
230a192
409696f
9ea371a
d8f2386
230a192
e90039b
49eb139
 
 
cac4e7b
576e7cf
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import base64, datetime, json, os

from autogen import ConversableAgent, AssistantAgent
from autogen.coding import LocalCommandLineCodeExecutor

from typing_extensions import Annotated

###
def get_today() -> Annotated[str, "Get today's date"]:
    return str(date.today())
###

def read_file(file_path: str) -> str:
    with open(file_path, "r", encoding="utf-8") as file:
        return file.read()

def read_image_file(image_file_path: str) -> str:
    with open(image_file_path, "rb") as image_file:
        image_data = image_file.read()
        return base64.b64encode(image_data).decode("utf-8")

def generate_markdown_image(image_data: str) -> str:
    return f"![Image](data:image/png;base64,{image_data})"

def format_as_markdown(code: str) -> str:
    markdown_code = '```\n'
    markdown_code += code
    markdown_code += '\n```'
    return markdown_code

def get_latest_file(directory, file_extension):
    latest_file = None
    latest_date = datetime.datetime.min

    for file in os.listdir(directory):
        if file:
            _, file_ext = os.path.splitext(file)

            if file_ext == file_extension:
                file_path = os.path.join(directory, file)
                file_date = datetime.datetime.fromtimestamp(os.path.getmtime(file_path))

                if file_date > latest_date:
                    latest_date = file_date
                    latest_file = file

    return latest_file
    
def run_multi_agent(llm, task):
    llm_config = {"model": llm}
    
    executor = LocalCommandLineCodeExecutor(
        timeout=60,
        work_dir="coding",
    )

    code_executor_agent = ConversableAgent(
        name="code_executor_agent",
        llm_config=False,
        code_execution_config={"executor": executor},
        human_input_mode="NEVER",
        default_auto_reply="TERMINATE",
    )

    code_writer_agent = AssistantAgent(
        name="code_writer_agent",
        llm_config=llm_config,
        code_execution_config=False,
        human_input_mode="NEVER",
    )

    ###
    register_function(
        get_today,
        caller=code_writer_agent,
        executor=code_writer_agent,
        name="get_today",
        description="Call this tool to get today's date.",
    )    
    ###
    
    chat_result = code_executor_agent.initiate_chat(
        code_writer_agent,
        message=task,
        max_turns=10
    )

    chat = ""
    first_message = True
    
    for message in chat_result.chat_history:
        if not first_message:
            chat += f"**{message['role'].replace('assistant', 'Code Executor').replace('user', 'Code Writer')}**\n{message['content']}\n\n"
        first_message = False

    file_name_png = get_latest_file("coding", ".png")
    
    image_data = read_image_file(f"/home/user/app/coding/{file_name_png}")
    markdown_code_png = generate_markdown_image(image_data)

    result = f"{markdown_code_png}\n\n{chat}"

    print("===")
    print(result)
    print("===")
    
    return result