File size: 3,273 Bytes
1b6fe24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import shutil

from smolagents import CodeAgent, DuckDuckGoSearchTool, Tool, HfApiModel
from dotenv import load_dotenv, dotenv_values 
from tool import FindFilesTool, GitPushTool, FileReplaceTool, ProcessFlowIdentifierTool, GetImageDimensionsTool, FileModifyTool

load_dotenv() 

HF_TOKEN = os.getenv("HF_TOKEN")

image_generation_tool = Tool.from_space(
    "black-forest-labs/FLUX.1-schnell",
    name="image_generator",
    description="Generate an image from a prompt"
)

model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct", token=HF_TOKEN)
"""
Todo:
- prompt cleaning
- ensure github upload pathways
==============
step 1: receive prompt
(deferred for now) step 2: analyze prompt for specific task (asset change, script change, etc) 
step 3: crawl files to search for specific file that matches task and save file location
step 4: run appropriate tool to accomplish task
step 5: upload changes to github
"""

find_files_tool = FindFilesTool()
file_replace_tool = FileReplaceTool()
process_identifier_tool= ProcessFlowIdentifierTool()
get_image_dimensions_tool= GetImageDimensionsTool()
file_modify_tool = FileModifyTool()

def ChatAgent(userPrompt):
    #Identify purpose of prompt
    promptCleanerAgent = CodeAgent(tools=[], model=model)
    instructions = promptCleanerAgent.run(f"""
        determine the purpose of the following string "{userPrompt}" if it is one of the following: [asset_change, script_update, conversation].
        asset_change: The user wants to change an asset in the game.
        script_update: The user wants to update the game script.
        conversation: The user wants to have a conversation with the AI by asking general questions or greetings.
    """)
    
    appDescription = """
        This is a 2d platformer game where the player controls a ball that bounces off platforms falling down. This app
        uses typescript and sandpack. The folder components/sandpack-examples.tsx file contains the game logic and scripts.
    """
    if(instructions == "conversation"):
        contextPrompt = f"""
            User prompt '{userPrompt}'
            1) Reply to the user as a friendly ai agent.
            2) Do not use any tools to modify files.
            3) End process after replying to the user.
        """
    else:
        contextPrompt = f'using process_identifier_tool look for the appropriate instructions for "{instructions}" and apply it to the user prompt after this'

    agent = CodeAgent(tools=[find_files_tool, process_identifier_tool, image_generation_tool, file_modify_tool, get_image_dimensions_tool, file_replace_tool], model=model)
    if instructions == "conversation":
        response = agent.run(f"{contextPrompt}")
    else:
        response = agent.run(f"{appDescription} {contextPrompt} {userPrompt} ")
    # agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=HfApiModel())
    # Step 1: Prompt reception
    print(f"Response made: {response}")
    return response
    # # Run the agent to generate an image based on a prompt
    # # Check if the image path exists
    # update_git_tool = GitPushTool()
    # agent = CodeAgent(tools=[update_git_tool], model=model)
    # agent.run("commit to new branch and push to repo", additional_args={'branch_name': 'image-replace-tool-5'})