{"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"}