File size: 2,542 Bytes
5ace4e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os

import gradio as gr
from dotenv import load_dotenv
from strands import Agent
from strands.models.litellm import LiteLLMModel
from mcp.client.streamable_http import streamablehttp_client
from strands.tools.mcp.mcp_client import MCPClient


load_dotenv()
os.environ["STRANDS_TOOL_CONSOLE_MODE"] = "enabled"


def create_streamable_http_transport():
   return streamablehttp_client(os.environ["MCP_SERVER"])

streamable_http_mcp_client = MCPClient(create_streamable_http_transport)

model = LiteLLMModel(
    client_args={
        "api_key": os.environ["OPENROUTER_API_KEY"],
        "api_base": "https://openrouter.ai/api/v1",
    },
    model_id="openrouter/google/gemini-2.5-flash"
)



SYSTEM_PROMPT = """
You are an Image Agent that allows users to generate an image using prompt or edit images 
using prompt. Always render the images as markdown
"""

def convert_history(history):
    """
    Convert Gradio 6 history format:
    [{"role": "...", "content": [{"text": "..."}]}]

    Into Required format:
    [{"role": "...", "content": "..."}]
    """
    messages = []
    for msg in history:
        # Gradio packs content into list of content blocks
        if isinstance(msg["content"], list):
            # extract just the text pieces
            text = "".join(block.get("text", "") for block in msg["content"])
        else:
            text = msg["content"]

        messages.append({"role": msg["role"], "content": text})
    return messages


def response_generator(message, history):
    """
    Response Generator
    """
    messages = convert_history(history) if history else []
    agent_messages = []
    for msg in messages:
        agent_messages.append({
            "role": msg["role"],
            "content": [{"text": msg["content"]}]
        })
    with streamable_http_mcp_client:
        # Get the tools from the MCP server
        tools = streamable_http_mcp_client.list_tools_sync()
        image_agent = Agent(
            model=model,
            system_prompt=SYSTEM_PROMPT,
            tools=tools,
            messages=agent_messages
        )
        print(agent_messages)
        messages.append({"role": "user", "content": message})
        response = image_agent(message)
        response = response.message["content"][0]["text"]
        response = response.replace("sandbox:/", "")
        yield response

demo = gr.ChatInterface(
    fn=response_generator,
    examples=[["A scenic landscape with mountains, a river, and a clear blue sky", None]],
    title="Image Agent"
)
demo.launch()