UNPKG

@langchain/community

Version:
1 lines 7.2 kB
{"version":3,"file":"pyinterpreter.cjs","names":["Tool"],"sources":["../../../src/experimental/tools/pyinterpreter.ts"],"sourcesContent":["import { loadPyodide, type PyodideInterface } from \"pyodide\";\nimport { Tool, ToolParams } from \"@langchain/core/tools\";\n\nexport type PythonInterpreterToolParams = Parameters<typeof loadPyodide>[0] &\n ToolParams & {\n instance: PyodideInterface;\n };\n\nexport class PythonInterpreterTool extends Tool {\n static lc_name() {\n return \"PythonInterpreterTool\";\n }\n\n name = \"python_interpreter\";\n\n description = `Evaluates python code in a sandbox environment. The environment resets on every execution. You must send the whole script every time and print your outputs. Script should be pure python code that can be evaluated. Packages available:\n${this.availableDefaultPackages}`;\n\n pyodideInstance: PyodideInterface;\n\n stdout = \"\";\n\n stderr = \"\";\n\n constructor(options: PythonInterpreterToolParams) {\n super(options);\n this.pyodideInstance = options.instance;\n this.pyodideInstance.setStderr({\n batched: (text: string) => {\n this.stderr += text;\n },\n });\n\n this.pyodideInstance.setStdout({\n batched: (text: string) => {\n this.stdout += text;\n },\n });\n }\n\n async addPackage(packageName: string) {\n await this.pyodideInstance.loadPackage(packageName);\n this.description += `, ${packageName}`;\n }\n\n get availableDefaultPackages(): string {\n return [\n \"asciitree\",\n \"astropy\",\n \"atomicwrites\",\n \"attrs\",\n \"autograd\",\n \"awkward-cpp\",\n \"bcrypt\",\n \"beautifulsoup4\",\n \"biopython\",\n \"bitarray\",\n \"bitstring\",\n \"bleach\",\n \"bokeh\",\n \"boost-histogram\",\n \"brotli\",\n \"cachetools\",\n \"Cartopy\",\n \"cbor-diag\",\n \"certifi\",\n \"cffi\",\n \"cffi_example\",\n \"cftime\",\n \"click\",\n \"cligj\",\n \"cloudpickle\",\n \"cmyt\",\n \"colorspacious\",\n \"contourpy\",\n \"coolprop\",\n \"coverage\",\n \"cramjam\",\n \"cryptography\",\n \"cssselect\",\n \"cycler\",\n \"cytoolz\",\n \"decorator\",\n \"demes\",\n \"deprecation\",\n \"distlib\",\n \"docutils\",\n \"exceptiongroup\",\n \"fastparquet\",\n \"fiona\",\n \"fonttools\",\n \"freesasa\",\n \"fsspec\",\n \"future\",\n \"galpy\",\n \"gensim\",\n \"geopandas\",\n \"gmpy2\",\n \"gsw\",\n \"h5py\",\n \"html5lib\",\n \"idna\",\n \"igraph\",\n \"imageio\",\n \"iniconfig\",\n \"jedi\",\n \"Jinja2\",\n \"joblib\",\n \"jsonschema\",\n \"kiwisolver\",\n \"lazy-object-proxy\",\n \"lazy_loader\",\n \"lightgbm\",\n \"logbook\",\n \"lxml\",\n \"MarkupSafe\",\n \"matplotlib\",\n \"matplotlib-pyodide\",\n \"micropip\",\n \"mne\",\n \"more-itertools\",\n \"mpmath\",\n \"msgpack\",\n \"msprime\",\n \"multidict\",\n \"munch\",\n \"mypy\",\n \"netcdf4\",\n \"networkx\",\n \"newick\",\n \"nlopt\",\n \"nltk\",\n \"nose\",\n \"numcodecs\",\n \"numpy\",\n \"opencv-python\",\n \"optlang\",\n \"orjson\",\n \"packaging\",\n \"pandas\",\n \"parso\",\n \"patsy\",\n \"peewee\",\n \"Pillow\",\n \"pillow_heif\",\n \"pkgconfig\",\n \"pluggy\",\n \"protobuf\",\n \"py\",\n \"pyb2d\",\n \"pyclipper\",\n \"pycparser\",\n \"pycryptodome\",\n \"pydantic\",\n \"pyerfa\",\n \"Pygments\",\n \"pyheif\",\n \"pyinstrument\",\n \"pynacl\",\n \"pyodide-http\",\n \"pyodide-tblib\",\n \"pyparsing\",\n \"pyproj\",\n \"pyrsistent\",\n \"pyshp\",\n \"pytest\",\n \"pytest-benchmark\",\n \"python-dateutil\",\n \"python-magic\",\n \"python-sat\",\n \"python_solvespace\",\n \"pytz\",\n \"pywavelets\",\n \"pyxel\",\n \"pyyaml\",\n \"rebound\",\n \"reboundx\",\n \"regex\",\n \"retrying\",\n \"RobotRaconteur\",\n \"ruamel.yaml\",\n \"rust-panic-test\",\n \"scikit-image\",\n \"scikit-learn\",\n \"scipy\",\n \"screed\",\n \"setuptools\",\n \"shapely\",\n \"simplejson\",\n \"six\",\n \"smart_open\",\n \"soupsieve\",\n \"sourmash\",\n \"sparseqr\",\n \"sqlalchemy\",\n \"statsmodels\",\n \"svgwrite\",\n \"swiglpk\",\n \"sympy\",\n \"termcolor\",\n \"texttable\",\n \"threadpoolctl\",\n \"tomli\",\n \"tomli-w\",\n \"toolz\",\n \"tqdm\",\n \"traits\",\n \"tskit\",\n \"typing-extensions\",\n \"uncertainties\",\n \"unyt\",\n \"webencodings\",\n \"wordcloud\",\n \"wrapt\",\n \"xarray\",\n \"xgboost\",\n \"xlrd\",\n \"xyzservices\",\n \"yarl\",\n \"yt\",\n \"zarr\",\n ].join(\", \");\n }\n\n static async initialize(\n options: Omit<PythonInterpreterToolParams, \"instance\">\n ) {\n const instance = await loadPyodide(options);\n return new this({ ...options, instance });\n }\n\n async _call(script: string) {\n this.stdout = \"\";\n this.stderr = \"\";\n\n await this.pyodideInstance.runPythonAsync(script);\n return JSON.stringify({ stdout: this.stdout, stderr: this.stderr });\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,wBAAb,cAA2CA,sBAAAA,KAAK;CAC9C,OAAO,UAAU;AACf,SAAO;;CAGT,OAAO;CAEP,cAAc;EACd,KAAK;CAEL;CAEA,SAAS;CAET,SAAS;CAET,YAAY,SAAsC;AAChD,QAAM,QAAQ;AACd,OAAK,kBAAkB,QAAQ;AAC/B,OAAK,gBAAgB,UAAU,EAC7B,UAAU,SAAiB;AACzB,QAAK,UAAU;KAElB,CAAC;AAEF,OAAK,gBAAgB,UAAU,EAC7B,UAAU,SAAiB;AACzB,QAAK,UAAU;KAElB,CAAC;;CAGJ,MAAM,WAAW,aAAqB;AACpC,QAAM,KAAK,gBAAgB,YAAY,YAAY;AACnD,OAAK,eAAe,KAAK;;CAG3B,IAAI,2BAAmC;AACrC,SAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,KAAK,KAAK;;CAGd,aAAa,WACX,SACA;EACA,MAAM,WAAW,OAAA,GAAA,QAAA,aAAkB,QAAQ;AAC3C,SAAO,IAAI,KAAK;GAAE,GAAG;GAAS;GAAU,CAAC;;CAG3C,MAAM,MAAM,QAAgB;AAC1B,OAAK,SAAS;AACd,OAAK,SAAS;AAEd,QAAM,KAAK,gBAAgB,eAAe,OAAO;AACjD,SAAO,KAAK,UAAU;GAAE,QAAQ,KAAK;GAAQ,QAAQ,KAAK;GAAQ,CAAC"}