Spaces:
Build error
Build error
Markiian Tsalyk
commited on
Commit
·
8eea4d3
1
Parent(s):
8a5e198
Added task files
Browse files
7bd855d8-463d-4ed5-93ca-5fe35145f733.xlsx
ADDED
|
Binary file (5.29 kB). View file
|
|
|
__pycache__/f918266a-b3e0-4914-865d-4faa564f1aef.cpython-313.pyc
ADDED
|
Binary file (1.92 kB). View file
|
|
|
__pycache__/tools.cpython-313.pyc
CHANGED
|
Binary files a/__pycache__/tools.cpython-313.pyc and b/__pycache__/tools.cpython-313.pyc differ
|
|
|
f918266a-b3e0-4914-865d-4faa564f1aef.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from random import randint
|
| 2 |
+
import time
|
| 3 |
+
|
| 4 |
+
class UhOh(Exception):
|
| 5 |
+
pass
|
| 6 |
+
|
| 7 |
+
class Hmm:
|
| 8 |
+
def __init__(self):
|
| 9 |
+
self.value = randint(-100, 100)
|
| 10 |
+
|
| 11 |
+
def Yeah(self):
|
| 12 |
+
if self.value == 0:
|
| 13 |
+
return True
|
| 14 |
+
else:
|
| 15 |
+
raise UhOh()
|
| 16 |
+
|
| 17 |
+
def Okay():
|
| 18 |
+
while True:
|
| 19 |
+
yield Hmm()
|
| 20 |
+
|
| 21 |
+
def keep_trying(go, first_try=True):
|
| 22 |
+
maybe = next(go)
|
| 23 |
+
try:
|
| 24 |
+
if maybe.Yeah():
|
| 25 |
+
return maybe.value
|
| 26 |
+
except UhOh:
|
| 27 |
+
if first_try:
|
| 28 |
+
print("Working...")
|
| 29 |
+
print("Please wait patiently...")
|
| 30 |
+
time.sleep(0.1)
|
| 31 |
+
return keep_trying(go, first_try=False)
|
| 32 |
+
|
| 33 |
+
if __name__ == "__main__":
|
| 34 |
+
go = Okay()
|
| 35 |
+
print(f"{keep_trying(go)}")
|
llama_index_agent.py
CHANGED
|
@@ -98,6 +98,11 @@ class LlamaIndexAgent:
|
|
| 98 |
name="pandas_column_sum",
|
| 99 |
description="Use this to compute sum on pandas dataframe column",
|
| 100 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
# Create the agent
|
| 103 |
self.agent = ReActAgent.from_tools(
|
|
@@ -114,6 +119,7 @@ class LlamaIndexAgent:
|
|
| 114 |
fetch_historical_event_data_tool,
|
| 115 |
read_excel_tool,
|
| 116 |
pandas_column_sum_tool,
|
|
|
|
| 117 |
],
|
| 118 |
llm=self.llm,
|
| 119 |
verbose=verbose,
|
|
@@ -180,6 +186,7 @@ if __name__ == "__main__":
|
|
| 180 |
# """
|
| 181 |
# On June 6, 2023, an article by Carolyn Collins Petersen was published in Universe Today. This article mentions a team that produced a paper about their observations, linked at the bottom of the article. Find this paper. Under what NASA award number was the work performed by R. G. Arendt supported by?
|
| 182 |
# """,
|
|
|
|
| 183 |
]
|
| 184 |
|
| 185 |
for query in example_queries:
|
|
|
|
| 98 |
name="pandas_column_sum",
|
| 99 |
description="Use this to compute sum on pandas dataframe column",
|
| 100 |
)
|
| 101 |
+
compute_sum_tool = FunctionTool.from_defaults(
|
| 102 |
+
fn=tools.compute_sum,
|
| 103 |
+
name="compute_sum",
|
| 104 |
+
description="Use this to compute sum of provided values",
|
| 105 |
+
)
|
| 106 |
|
| 107 |
# Create the agent
|
| 108 |
self.agent = ReActAgent.from_tools(
|
|
|
|
| 119 |
fetch_historical_event_data_tool,
|
| 120 |
read_excel_tool,
|
| 121 |
pandas_column_sum_tool,
|
| 122 |
+
compute_sum_tool,
|
| 123 |
],
|
| 124 |
llm=self.llm,
|
| 125 |
verbose=verbose,
|
|
|
|
| 186 |
# """
|
| 187 |
# On June 6, 2023, an article by Carolyn Collins Petersen was published in Universe Today. This article mentions a team that produced a paper about their observations, linked at the bottom of the article. Find this paper. Under what NASA award number was the work performed by R. G. Arendt supported by?
|
| 188 |
# """,
|
| 189 |
+
# "The attached Excel file contains the sales of menu items for a local fast-food chain. What were the total sales that the chain made from food (not including drinks)? Express your answer in USD with two decimal places.\nAttached file: 7bd855d8-463d-4ed5-93ca-5fe35145f733.xlsx",
|
| 190 |
]
|
| 191 |
|
| 192 |
for query in example_queries:
|
requirements.txt
CHANGED
|
@@ -11,4 +11,5 @@ llama-index
|
|
| 11 |
llama-index-llms-openrouter
|
| 12 |
wikipedia
|
| 13 |
youtube-transcript-api
|
| 14 |
-
python-dotenv
|
|
|
|
|
|
| 11 |
llama-index-llms-openrouter
|
| 12 |
wikipedia
|
| 13 |
youtube-transcript-api
|
| 14 |
+
python-dotenv
|
| 15 |
+
openpyxl
|
tools.py
CHANGED
|
@@ -143,6 +143,18 @@ def multiply(a: float, b: float, **kwargs) -> float:
|
|
| 143 |
return a * b
|
| 144 |
|
| 145 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
def length(iterable: Any, **kwargs) -> int:
|
| 147 |
"""
|
| 148 |
Return the length of an iterable.
|
|
@@ -162,7 +174,8 @@ def execute_python_file(file_path: str) -> Any:
|
|
| 162 |
|
| 163 |
This function takes a path to a Python file, executes it by importing it as a module,
|
| 164 |
and returns the result. The file should contain a function call that produces
|
| 165 |
-
the result to be returned.
|
|
|
|
| 166 |
|
| 167 |
Args:
|
| 168 |
file_path (str): Path to the Python file to execute.
|
|
@@ -197,16 +210,13 @@ def execute_python_file(file_path: str) -> Any:
|
|
| 197 |
stdout_capture = io.StringIO()
|
| 198 |
stderr_capture = io.StringIO()
|
| 199 |
|
| 200 |
-
#
|
| 201 |
-
original_main = sys.modules.get("__main__")
|
| 202 |
-
|
| 203 |
try:
|
| 204 |
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
| 205 |
if spec is None or spec.loader is None:
|
| 206 |
raise ImportError(f"Could not load module spec from {file_path}")
|
| 207 |
|
| 208 |
module = importlib.util.module_from_spec(spec)
|
| 209 |
-
|
| 210 |
sys.modules[module_name] = module
|
| 211 |
|
| 212 |
# Execute the module
|
|
@@ -215,11 +225,21 @@ def execute_python_file(file_path: str) -> Any:
|
|
| 215 |
):
|
| 216 |
spec.loader.exec_module(module)
|
| 217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 218 |
if hasattr(module, "result"):
|
| 219 |
return module.result
|
| 220 |
else:
|
| 221 |
-
|
| 222 |
-
|
|
|
|
| 223 |
|
| 224 |
except Exception as e:
|
| 225 |
error_output = stderr_capture.getvalue()
|
|
|
|
| 143 |
return a * b
|
| 144 |
|
| 145 |
|
| 146 |
+
def compute_sum(values: list[int | float], **kwargs) -> float:
|
| 147 |
+
"""
|
| 148 |
+
Computes sum of provided values
|
| 149 |
+
|
| 150 |
+
Args:
|
| 151 |
+
values: list of integer or float values
|
| 152 |
+
Return:
|
| 153 |
+
Sum of the values
|
| 154 |
+
"""
|
| 155 |
+
return sum(values)
|
| 156 |
+
|
| 157 |
+
|
| 158 |
def length(iterable: Any, **kwargs) -> int:
|
| 159 |
"""
|
| 160 |
Return the length of an iterable.
|
|
|
|
| 174 |
|
| 175 |
This function takes a path to a Python file, executes it by importing it as a module,
|
| 176 |
and returns the result. The file should contain a function call that produces
|
| 177 |
+
the result to be returned. This version also executes code under the
|
| 178 |
+
'if __name__ == "__main__":' block.
|
| 179 |
|
| 180 |
Args:
|
| 181 |
file_path (str): Path to the Python file to execute.
|
|
|
|
| 210 |
stdout_capture = io.StringIO()
|
| 211 |
stderr_capture = io.StringIO()
|
| 212 |
|
| 213 |
+
# First approach: Import normally to get module definitions
|
|
|
|
|
|
|
| 214 |
try:
|
| 215 |
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
| 216 |
if spec is None or spec.loader is None:
|
| 217 |
raise ImportError(f"Could not load module spec from {file_path}")
|
| 218 |
|
| 219 |
module = importlib.util.module_from_spec(spec)
|
|
|
|
| 220 |
sys.modules[module_name] = module
|
| 221 |
|
| 222 |
# Execute the module
|
|
|
|
| 225 |
):
|
| 226 |
spec.loader.exec_module(module)
|
| 227 |
|
| 228 |
+
# After module is loaded, directly execute the main block by reading the file
|
| 229 |
+
# and executing the content with __name__ = "__main__"
|
| 230 |
+
with open(file_path, "r") as f:
|
| 231 |
+
file_content = f.read()
|
| 232 |
+
# Create a namespace with everything from the module
|
| 233 |
+
namespace = {**module.__dict__}
|
| 234 |
+
namespace["__name__"] = "__main__"
|
| 235 |
+
exec(file_content, namespace)
|
| 236 |
+
|
| 237 |
if hasattr(module, "result"):
|
| 238 |
return module.result
|
| 239 |
else:
|
| 240 |
+
output = stdout_capture.getvalue().strip()
|
| 241 |
+
print(f"RESULT PYTHON: {output}")
|
| 242 |
+
return output
|
| 243 |
|
| 244 |
except Exception as e:
|
| 245 |
error_output = stderr_capture.getvalue()
|