VivekMannava's picture
Initial update
c3b34bf
from math import sqrt
import logging
from llama_index.core.tools import FunctionTool
def add(a: float, b: float, context: str) -> str:
"""Add two numbers.
Args:
a (float): Addend 1
b (float): Addend 2
context (str): Context for the addition, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a + b)} for {context}"
def sub(a: float, b: float, context: str) -> str:
"""Subtract two numbers.
Args:
a (float): Minuend
b (float): Subtrahend
context (str): Context for the subtraction, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a - b)} for {context}"
def multiply(a: float, b: float, context: str) -> str:
"""Multiply two numbers.
Args:
a (float): Multiplicand
b (float): Multiplier
context (str): Context for the multiplication, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a * b)} for {context}"
def divide(a: float, b: float, context: str) -> str:
"""Divide two numbers.
Args:
a (float): Dividend
b (float): Divisor
context (str): Context for the division, this should be used to keep track of the operations.
Returns:
str: The result with the context included, or an error message if division by zero occurs.
"""
if b == 0:
return f"Error: Division by zero for {context}"
return f"Result {str(a / b)} for {context}"
def floordiv(a: float, b: float, context: str) -> str:
"""Floor divide two numbers.
Args:
a (float): Dividend
b (float): Divisor
context (str): Context for the floor division, this should be used to keep track of the operations.
Returns:
str: The result with the context included, or an error message if division by zero occurs.
"""
if b == 0:
return f"Error: Division by zero for {context}"
return f"Result {str(a // b)} for {context}"
def mod(a: float, b: float, context: str) -> str:
"""Get the modulus of two numbers.
Args:
a (float): Dividend
b (float): Divisor
context (str): Context for the modulus operation, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a % b)} for {context}"
def sqrt(a: float, context: str) -> str:
"""Get the square root of a number.
Args:
a (float): Number to find the square root of
context (str): Context for the square root operation, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a**0.5)} for {context}"
def equals(a: float, b: float, context: str) -> str:
"""Check if two numbers are equal.
Args:
a (float): First number
b (float): Second number
context (str): Context for the equality check, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a == b)} for {context}"
def less_than(a: float, b: float, context: str) -> str:
"""Check if the first number is less than the second number.
Args:
a (float): First number
b (float): Second number
context (str): Context for the less than check, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a < b)} for {context}"
def more_than(a: float, b: float, context: str) -> str:
"""Check if the first number is more than the second number.
Args:
a (float): First number
b (float): Second number
context (str): Context for the more than check, this should be used to keep track of the operations.
Returns:
str: The result with the context included.
"""
return f"Result {str(a > b)} for {context}"
def solve_math_problem(problem: str) -> str:
"""
Solve mathematical problems using GPT-4.
Args:
problem: The mathematical problem to solve
Returns:
str: Solution
"""
try:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "system",
"content": "You are a mathematics expert. Solve problems step by step with clear explanations."
},
{
"role": "user",
"content": f"Please solve this mathematical problem step by step:\n\n{problem}"
}
]
)
return response.choices[0].message.content
except Exception as e:
return f"Math problem solving failed: {str(e)}"
def get_math_tools():
"""
Get the math tools.
"""
return [
FunctionTool.from_defaults(fn=sum),
FunctionTool.from_defaults(fn=sub),
FunctionTool.from_defaults(fn=add),
FunctionTool.from_defaults(fn=sqrt),
FunctionTool.from_defaults(fn=floordiv),
FunctionTool.from_defaults(fn=mod),
FunctionTool.from_defaults(fn=multiply),
FunctionTool.from_defaults(fn=equals),
FunctionTool.from_defaults(fn=less_than),
FunctionTool.from_defaults(fn=more_than),
]