File size: 5,377 Bytes
608c807
9b5b26a
 
 
c19d193
6aae614
8fd5ca8
 
9b5b26a
 
8fd5ca8
9b5b26a
50606af
 
9b5b26a
50606af
9b5b26a
2d84b2a
 
 
 
 
 
 
 
 
 
 
 
50606af
2d84b2a
 
 
 
 
 
50606af
2d84b2a
 
 
 
9b5b26a
608c807
9b5b26a
2d84b2a
 
 
 
9b5b26a
2d84b2a
 
9b5b26a
2d84b2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50606af
2d84b2a
 
 
 
 
 
 
 
 
8c01ffb
 
50606af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6aae614
ae7a494
8fd5ca8
ae7a494
608c807
ae7a494
e121372
608c807
 
 
 
13d500a
8c01ffb
 
9b5b26a
 
8c01ffb
608c807
861422e
608c807
8c01ffb
8fe992b
608c807
 
50606af
2d84b2a
50606af
8fd5ca8
608c807
8c01ffb
 
 
 
 
 
608c807
8fe992b
 
9b5b26a
608c807
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from tools.visit_webpage import VisitWebpageTool
from tools.web_search import DuckDuckGoSearchTool
from Gradio_UI import GradioUI


@tool
def get_color_palette_based_on_emotions(emotions: str) -> str:
    """A tool that creates the color palette of a given emotions.
    Args:
        emotions: the emotions to create the color palette of.
    """
    model = HfApiModel(
        max_tokens=2096,
        temperature=0.5,
        model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
        custom_role_conversions=None,
    )

    messages = [
        {
            "role": "system",
            "content": (
                "ROLE: you are a cute color palette generator. "
                "TASK: take the emotions and create a color palette which will complement the emotions. Use only pastel colors. "
                "OUTPUT: a list of 6 colors in hex format. "
                "CONSTRAINTS: Do not add any words or explanations. Just return the list of colors."
            ),
        },
        {
            "role": "user",
            "content": emotions,
        },
    ]
    response = model(messages, stop_sequences=["END"])
    return response.content


@tool
def get_postcard_prompt_based_on_color_palette_and_greeting(
    color_palette: str, greeting: str
) -> str:
    """A tool that creates the image prompt for post card based on the color palette and greeting.
    Args:
        color_palette: 6 colors in hex format to create the image prompt of.
        greeting: the greeting to create the image prompt of.
    """
    model = HfApiModel(
        max_tokens=2096,
        temperature=0.5,
        model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
        custom_role_conversions=None,
    )

    messages = [
        {
            "role": "system",
            "content": (
                "ROLE: you are a cute postcard image prompt generator. "
                "TASK: take the color palette and greeting and create a postcard image prompt which simbolses the greeting. "
                "Use simple vector shapes, and pastel colors from the color palette. "
                "OUTPUT: a postcard image prompt. "
                "CONSTRAINTS: Use only the colors from the color palette. Include the greeting into the image prompt so it would be rendered as a text. The prompt should be properly formatted as a string and contain escape characters for new lines, quotes and special characters. "
            ),
        },
        {
            "role": "user",
            "content": f"Color palette: {color_palette}, Greeting: {greeting}",
        },
    ]
    response = model(messages, stop_sequences=["END"])
    return response.content


@tool
def get_comic_story_series_prompts_based_on_greeting(greeting: str) -> str:
    """A tool that generates a series of 4 comic-style postcard prompts based on a greeting, creating a sequential story to generate 4 postcards images.
    Args:
        greeting: the greeting to create the image prompts of.
    """
    model = HfApiModel(
        max_tokens=2096,
        temperature=0.5,
        model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
        custom_role_conversions=None,
    )

    messages = [
        {
            "role": "system",
            "content": (
                "ROLE: you are a cute story writer for a postcard series. "
                "TASK: take the greeting and create a series of 4 postcard image prompts which simbolses the greeting. "
                "Use simple vector shapes, and pastel colors. "
                "OUTPUT: a series of 4 postcard image prompts. "
                "CONSTRAINTS: Use only the colors from the color palette. Use simple texts to create the story. The prompt should be properly formatted as a string and contain escape characters for new lines, quotes and special characters. "
            ),
        },
        {
            "role": "user",
            "content": f"Greeting: {greeting}",
        },
    ]
    response = model(messages, stop_sequences=["END"])
    return response.content


final_answer = FinalAnswerTool()


# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud'

model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id="Qwen/Qwen2.5-Coder-32B-Instruct",  # it is possible that this model may be overloaded
    custom_role_conversions=None,
)


# Import tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

with open("prompts.yaml", "r") as stream:
    prompt_templates = yaml.safe_load(stream)

agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        get_color_palette_based_on_emotions,
        get_postcard_prompt_based_on_color_palette_and_greeting,
        get_comic_story_series_prompts_based_on_greeting,
        image_generation_tool,
    ],  ## add your tools here (don't remove final answer)
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates,
)


GradioUI(agent).launch()