Spaces:
Sleeping
Sleeping
Add calculator tool using numexpr for math expressions
Browse files- pyproject.toml +1 -0
- tools/calculator.py +27 -0
- uv.lock +31 -0
pyproject.toml
CHANGED
|
@@ -10,6 +10,7 @@ dependencies = [
|
|
| 10 |
"langchain-community>=0.3.26",
|
| 11 |
"langchain[google-genai]>=0.3.26",
|
| 12 |
"langgraph>=0.4.10",
|
|
|
|
| 13 |
"pandas>=2.3.0",
|
| 14 |
"python-dotenv>=1.1.1",
|
| 15 |
"requests>=2.32.4",
|
|
|
|
| 10 |
"langchain-community>=0.3.26",
|
| 11 |
"langchain[google-genai]>=0.3.26",
|
| 12 |
"langgraph>=0.4.10",
|
| 13 |
+
"numexpr>=2.11.0",
|
| 14 |
"pandas>=2.3.0",
|
| 15 |
"python-dotenv>=1.1.1",
|
| 16 |
"requests>=2.32.4",
|
tools/calculator.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import math
|
| 2 |
+
import numexpr
|
| 3 |
+
from langchain_core.tools import StructuredTool
|
| 4 |
+
|
| 5 |
+
def calculator(expression: str) -> str:
|
| 6 |
+
"""Calculate expression using Python's numexpr library.
|
| 7 |
+
|
| 8 |
+
Expression should be a single line mathematical expression
|
| 9 |
+
that solves the problem.
|
| 10 |
+
|
| 11 |
+
Examples:
|
| 12 |
+
"37593 * 67" for "37593 times 67"
|
| 13 |
+
"37593**(1/5)" for "37593^(1/5)"
|
| 14 |
+
"""
|
| 15 |
+
local_dict = {"pi": math.pi, "e": math.e}
|
| 16 |
+
return str(
|
| 17 |
+
numexpr.evaluate(
|
| 18 |
+
expression.strip(),
|
| 19 |
+
global_dict={}, # restrict access to globals
|
| 20 |
+
local_dict=local_dict, # add common mathematical functions
|
| 21 |
+
)
|
| 22 |
+
)
|
| 23 |
+
|
| 24 |
+
calculator_tool = StructuredTool.from_function(func=calculator)
|
| 25 |
+
|
| 26 |
+
if __name__ == "__main__":
|
| 27 |
+
print(calculator_tool.invoke("551368 / 82"))
|
uv.lock
CHANGED
|
@@ -344,6 +344,7 @@ dependencies = [
|
|
| 344 |
{ name = "langchain", extra = ["google-genai"] },
|
| 345 |
{ name = "langchain-community" },
|
| 346 |
{ name = "langgraph" },
|
|
|
|
| 347 |
{ name = "pandas" },
|
| 348 |
{ name = "python-dotenv" },
|
| 349 |
{ name = "requests" },
|
|
@@ -357,6 +358,7 @@ requires-dist = [
|
|
| 357 |
{ name = "langchain", extras = ["google-genai"], specifier = ">=0.3.26" },
|
| 358 |
{ name = "langchain-community", specifier = ">=0.3.26" },
|
| 359 |
{ name = "langgraph", specifier = ">=0.4.10" },
|
|
|
|
| 360 |
{ name = "pandas", specifier = ">=2.3.0" },
|
| 361 |
{ name = "python-dotenv", specifier = ">=1.1.1" },
|
| 362 |
{ name = "requests", specifier = ">=2.32.4" },
|
|
@@ -1079,6 +1081,35 @@ wheels = [
|
|
| 1079 |
{ url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" },
|
| 1080 |
]
|
| 1081 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1082 |
[[package]]
|
| 1083 |
name = "numpy"
|
| 1084 |
version = "2.3.1"
|
|
|
|
| 344 |
{ name = "langchain", extra = ["google-genai"] },
|
| 345 |
{ name = "langchain-community" },
|
| 346 |
{ name = "langgraph" },
|
| 347 |
+
{ name = "numexpr" },
|
| 348 |
{ name = "pandas" },
|
| 349 |
{ name = "python-dotenv" },
|
| 350 |
{ name = "requests" },
|
|
|
|
| 358 |
{ name = "langchain", extras = ["google-genai"], specifier = ">=0.3.26" },
|
| 359 |
{ name = "langchain-community", specifier = ">=0.3.26" },
|
| 360 |
{ name = "langgraph", specifier = ">=0.4.10" },
|
| 361 |
+
{ name = "numexpr", specifier = ">=2.11.0" },
|
| 362 |
{ name = "pandas", specifier = ">=2.3.0" },
|
| 363 |
{ name = "python-dotenv", specifier = ">=1.1.1" },
|
| 364 |
{ name = "requests", specifier = ">=2.32.4" },
|
|
|
|
| 1081 |
{ url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" },
|
| 1082 |
]
|
| 1083 |
|
| 1084 |
+
[[package]]
|
| 1085 |
+
name = "numexpr"
|
| 1086 |
+
version = "2.11.0"
|
| 1087 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1088 |
+
dependencies = [
|
| 1089 |
+
{ name = "numpy" },
|
| 1090 |
+
]
|
| 1091 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d2/8f/2cc977e91adbfbcdb6b49fdb9147e1d1c7566eb2c0c1e737e9a47020b5ca/numexpr-2.11.0.tar.gz", hash = "sha256:75b2c01a4eda2e7c357bc67a3f5c3dd76506c15b5fd4dc42845ef2e182181bad", size = 108960, upload-time = "2025-06-09T11:05:56.79Z" }
|
| 1092 |
+
wheels = [
|
| 1093 |
+
{ url = "https://files.pythonhosted.org/packages/38/45/7a0e5a0b800d92e73825494ac695fa05a52c7fc7088d69a336880136b437/numexpr-2.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4229060be866813122385c608bbd3ea48fe0b33e91f2756810d28c1cdbfc98f1", size = 147494, upload-time = "2025-06-09T11:05:17.015Z" },
|
| 1094 |
+
{ url = "https://files.pythonhosted.org/packages/74/46/3a26b84e44f4739ec98de0ede4b95b4b8096f721e22d0e97517eeb02017e/numexpr-2.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:097aa8835d32d6ac52f2be543384019b4b134d1fb67998cbfc4271155edfe54a", size = 136832, upload-time = "2025-06-09T11:05:18.55Z" },
|
| 1095 |
+
{ url = "https://files.pythonhosted.org/packages/75/05/e3076ff25d4a108b47640c169c0a64811748c43b63d9cc052ea56de1631e/numexpr-2.11.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f082321c244ff5d0e252071fb2c4fe02063a45934144a1456a5370ca139bec2", size = 412618, upload-time = "2025-06-09T11:05:20.093Z" },
|
| 1096 |
+
{ url = "https://files.pythonhosted.org/packages/70/e8/15e0e077a004db0edd530da96c60c948689c888c464ee5d14b82405ebd86/numexpr-2.11.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7a19435ca3d7dd502b8d8dce643555eb1b6013989e3f7577857289f6db6be16", size = 403363, upload-time = "2025-06-09T11:05:21.217Z" },
|
| 1097 |
+
{ url = "https://files.pythonhosted.org/packages/10/14/f22afb3a7ae41d03ba87f62d00fbcfb76389f9cc91b7a82593c39c509318/numexpr-2.11.0-cp312-cp312-win32.whl", hash = "sha256:f326218262c8d8537887cc4bbd613c8409d62f2cac799835c0360e0d9cefaa5c", size = 153307, upload-time = "2025-06-09T11:05:22.855Z" },
|
| 1098 |
+
{ url = "https://files.pythonhosted.org/packages/18/70/abc585269424582b3cd6db261e33b2ec96b5d4971da3edb29fc9b62a8926/numexpr-2.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:0a184e5930c77ab91dd9beee4df403b825cd9dfc4e9ba4670d31c9fcb4e2c08e", size = 146337, upload-time = "2025-06-09T11:05:23.976Z" },
|
| 1099 |
+
{ url = "https://files.pythonhosted.org/packages/74/63/dbf4fb6c48006d413a82db138d03c3c007d0ed0684f693c4b77196448660/numexpr-2.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eb766218abad05c7c3ddad5367d0ec702d6152cb4a48d9fd56a6cef6abade70c", size = 147495, upload-time = "2025-06-09T11:05:25.105Z" },
|
| 1100 |
+
{ url = "https://files.pythonhosted.org/packages/3a/e4/2fbbf5b9121f54722dc4d4dfc75bc0b4e8ee2675f92ec86ee5697aecc53f/numexpr-2.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2036be213a6a1b5ce49acf60de99b911a0f9d174aab7679dde1fae315134f826", size = 136839, upload-time = "2025-06-09T11:05:26.171Z" },
|
| 1101 |
+
{ url = "https://files.pythonhosted.org/packages/a8/3f/aa36415919c90f712a11127eaa7c0c8d045768d62a484a29364e4801c383/numexpr-2.11.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:096ec768bee2ef14ac757b4178e3c5f05e5f1cb6cae83b2eea9b4ba3ec1a86dd", size = 416240, upload-time = "2025-06-09T11:05:27.634Z" },
|
| 1102 |
+
{ url = "https://files.pythonhosted.org/packages/b9/7d/4911f40d3610fc5557029f0d1f20ef9f571488319567ac4d8ee6d0978ee6/numexpr-2.11.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a1719788a787808c15c9bb98b6ff0c97d64a0e59c1a6ebe36d4ae4d7c5c09b95", size = 406641, upload-time = "2025-06-09T11:05:29.408Z" },
|
| 1103 |
+
{ url = "https://files.pythonhosted.org/packages/6f/bc/d00e717e77691c410c6c461d7880b4c498896874316acc0e044d7eafacbf/numexpr-2.11.0-cp313-cp313-win32.whl", hash = "sha256:6b5fdfc86cbf5373ea67d554cc6f08863825ea8e928416bed8d5285e387420c6", size = 153313, upload-time = "2025-06-09T11:05:30.633Z" },
|
| 1104 |
+
{ url = "https://files.pythonhosted.org/packages/52/a2/93346789e6d73a76fdb68171904ade25c112f25df363a8f602c6b21bc220/numexpr-2.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ff337b36db141a1a0b49f01282783744f49f0d401cc83a512fc5596eb7db5c6", size = 146340, upload-time = "2025-06-09T11:05:31.771Z" },
|
| 1105 |
+
{ url = "https://files.pythonhosted.org/packages/0b/20/c0e3aaf3cc4497e5253df2523a55c83b9d316cb5c9d5caaa4a1156cef6e3/numexpr-2.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b9854fa70edbe93242b8bb4840e58d1128c45766d9a70710f05b4f67eb0feb6e", size = 148206, upload-time = "2025-06-09T11:05:33.3Z" },
|
| 1106 |
+
{ url = "https://files.pythonhosted.org/packages/de/49/22fd38ac990ba333f25b771305a5ffcd98c771f4d278868661ffb26deac1/numexpr-2.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:321736cb98f090ce864b58cc5c37661cb5548e394e0fe24d5f2c7892a89070c3", size = 137573, upload-time = "2025-06-09T11:05:34.422Z" },
|
| 1107 |
+
{ url = "https://files.pythonhosted.org/packages/fb/1e/50074e472e9e6bea4fe430869708d9ede333a187d8d0740e70d5a9560aad/numexpr-2.11.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5cc434eb4a4df2fe442bcc50df114e82ff7aa234657baf873b2c9cf3f851e8e", size = 426674, upload-time = "2025-06-09T11:05:35.553Z" },
|
| 1108 |
+
{ url = "https://files.pythonhosted.org/packages/8e/6d/7ccbc72b950653df62d29e2531c811ed80cfff93c927a5bfd86a71edb4da/numexpr-2.11.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:238d19465a272ada3967600fada55e4c6900485aefb42122a78dfcaf2efca65f", size = 416037, upload-time = "2025-06-09T11:05:36.601Z" },
|
| 1109 |
+
{ url = "https://files.pythonhosted.org/packages/31/7c/bbccad2734dd4b251cc6bdff8cf5ded18b5383f5a05aa8de7bf02acbb65b/numexpr-2.11.0-cp313-cp313t-win32.whl", hash = "sha256:0db4c2dcad09f9594b45fce794f4b903345195a8c216e252de2aa92884fd81a8", size = 153967, upload-time = "2025-06-09T11:05:37.907Z" },
|
| 1110 |
+
{ url = "https://files.pythonhosted.org/packages/75/d7/41287384e413e8d20457d35e264d9c9754e65eb13a988af51ceb7057f61b/numexpr-2.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a69b5c02014448a412012752dc46091902d28932c3be0c6e02e73cecceffb700", size = 147207, upload-time = "2025-06-09T11:05:39.011Z" },
|
| 1111 |
+
]
|
| 1112 |
+
|
| 1113 |
[[package]]
|
| 1114 |
name = "numpy"
|
| 1115 |
version = "2.3.1"
|