File size: 1,863 Bytes
b28f4f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from dotenv import load_dotenv
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
import gradio as gr
load_dotenv()

@tool(description="Calculate math expressions like '2+2' or '10*5'")
def calculator(expression: str) -> str:
    try: return str(eval(expression))
    except: return "Error"

def calculate(message: str, history: list) -> str:
    llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash-lite")
    system_message = "You are a helpful math assistant. Use the calculator tool when you need to perform calculations."
    prompt = ChatPromptTemplate.from_messages([("system", system_message), ("human", "{input}"), ("placeholder", "{agent_scratchpad}")])
    agent = create_tool_calling_agent(llm, [calculator], prompt)
    executor = AgentExecutor(agent=agent, tools=[calculator], verbose=True)
    result = executor.invoke({"input": message})
    return result["output"]

if __name__ == "__main__":
    print(calculate("2+2",[]))

LOGO_URL = "https://raw.githubusercontent.com/hereandnowai/images/refs/heads/main/logos/logo-of-here-and-now-ai.png"
ASSISTANT_AVATAR_URL = "https://raw.githubusercontent.com/hereandnowai/images/refs/heads/main/logos/caramel-face.jpeg"

with gr.Blocks() as demo:
    gr.HTML(f'<div style="text-align: center;"><img src="{LOGO_URL}" style="height: 60px;"><h1>Caramel AI from HERE AND NOW AI !</h1></div>')
    gr.ChatInterface(
        fn=calculate,
        description="Ask me to perform calculations or solve math problems!",
        examples=["What is 25 * 47?", "Calculate 144 divide 12", "What's 15% of 200?", "Solve: (10 + 5) multiply 3 and then subract by 8"],
        type="messages"
    )

if __name__ == "__main__":
    demo.launch(share=True)