From 94504e71f4941e3c3b2d33da269f286a2d1386ed Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 14:36:18 -0700 Subject: [PATCH 1/9] add docs --- docs/Makefile | 20 ++++++++ docs/conf.py | 32 ++++++++++++ docs/index.rst | 33 ++++++++++++ docs/make.bat | 35 +++++++++++++ docs/source/ldp.agent.rst | 69 +++++++++++++++++++++++++ docs/source/ldp.alg.optimizer.rst | 45 ++++++++++++++++ docs/source/ldp.alg.rst | 77 ++++++++++++++++++++++++++++ docs/source/ldp.graph.modules.rst | 45 ++++++++++++++++ docs/source/ldp.graph.rst | 85 +++++++++++++++++++++++++++++++ docs/source/ldp.llms.rst | 37 ++++++++++++++ docs/source/ldp.rst | 56 ++++++++++++++++++++ docs/source/modules.rst | 7 +++ 12 files changed, 541 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/make.bat create mode 100644 docs/source/ldp.agent.rst create mode 100644 docs/source/ldp.alg.optimizer.rst create mode 100644 docs/source/ldp.alg.rst create mode 100644 docs/source/ldp.graph.modules.rst create mode 100644 docs/source/ldp.graph.rst create mode 100644 docs/source/ldp.llms.rst create mode 100644 docs/source/ldp.rst create mode 100644 docs/source/modules.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d4bb2cbb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..8d620650 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,32 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information +import sphinx_nameko_theme +import sys,os + +project = 'ldp' +copyright = '2024, James Braza, Siddharth Narayanan' +author = 'James Braza, Siddharth Narayanan' +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode' +] +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [] + +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +sys.path.insert(0, os.path.abspath('../../')) + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'nameko' +html_theme_path = [sphinx_nameko_theme.get_html_theme_path()] \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..5b03942e --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,33 @@ +.. ldp documentation master file, created by + sphinx-quickstart on Thu Oct 24 14:27:08 2024. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to ldp's documentation! +=============================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + ldp.agent + ldp.alg + ldp.graph + ldp + modules + ldp.llms + ldp.graph.modules + ldp.alg.optimizer diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..32bb2452 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/ldp.agent.rst b/docs/source/ldp.agent.rst new file mode 100644 index 00000000..146fe429 --- /dev/null +++ b/docs/source/ldp.agent.rst @@ -0,0 +1,69 @@ +ldp.agent package +================= + +Submodules +---------- + +ldp.agent.agent module +---------------------- + +.. automodule:: ldp.agent.agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.agent\_client module +------------------------------ + +.. automodule:: ldp.agent.agent_client + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.interactive\_agent module +----------------------------------- + +.. automodule:: ldp.agent.interactive_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.memory\_agent module +------------------------------ + +.. automodule:: ldp.agent.memory_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.react\_agent module +----------------------------- + +.. automodule:: ldp.agent.react_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.simple\_agent module +------------------------------ + +.. automodule:: ldp.agent.simple_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.tree\_of\_thoughts\_agent module +------------------------------------------ + +.. automodule:: ldp.agent.tree_of_thoughts_agent + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.agent + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/ldp.alg.optimizer.rst b/docs/source/ldp.alg.optimizer.rst new file mode 100644 index 00000000..f05f2c58 --- /dev/null +++ b/docs/source/ldp.alg.optimizer.rst @@ -0,0 +1,45 @@ +ldp.alg.optimizer package +========================= + +Submodules +---------- + +ldp.alg.optimizer.ape module +---------------------------- + +.. automodule:: ldp.alg.optimizer.ape + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.optimizer.memory module +------------------------------- + +.. automodule:: ldp.alg.optimizer.memory + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.optimizer.opt module +---------------------------- + +.. automodule:: ldp.alg.optimizer.opt + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.optimizer.replay\_buffers module +---------------------------------------- + +.. automodule:: ldp.alg.optimizer.replay_buffers + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.alg.optimizer + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/ldp.alg.rst b/docs/source/ldp.alg.rst new file mode 100644 index 00000000..621e6817 --- /dev/null +++ b/docs/source/ldp.alg.rst @@ -0,0 +1,77 @@ +ldp.alg package +=============== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ldp.alg.optimizer + +Submodules +---------- + +ldp.alg.algorithms module +------------------------- + +.. automodule:: ldp.alg.algorithms + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.beam\_search module +--------------------------- + +.. automodule:: ldp.alg.beam_search + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.callbacks module +------------------------ + +.. automodule:: ldp.alg.callbacks + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.datasets module +----------------------- + +.. automodule:: ldp.alg.datasets + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.rollout module +---------------------- + +.. automodule:: ldp.alg.rollout + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.runners module +---------------------- + +.. automodule:: ldp.alg.runners + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.tree\_search module +--------------------------- + +.. automodule:: ldp.alg.tree_search + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.alg + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/ldp.graph.modules.rst b/docs/source/ldp.graph.modules.rst new file mode 100644 index 00000000..28b36540 --- /dev/null +++ b/docs/source/ldp.graph.modules.rst @@ -0,0 +1,45 @@ +ldp.graph.modules package +========================= + +Submodules +---------- + +ldp.graph.modules.llm\_call module +---------------------------------- + +.. automodule:: ldp.graph.modules.llm_call + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.modules.react module +------------------------------ + +.. automodule:: ldp.graph.modules.react + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.modules.reflect module +-------------------------------- + +.. automodule:: ldp.graph.modules.reflect + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.modules.thought module +-------------------------------- + +.. automodule:: ldp.graph.modules.thought + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.graph.modules + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/ldp.graph.rst b/docs/source/ldp.graph.rst new file mode 100644 index 00000000..9fc73995 --- /dev/null +++ b/docs/source/ldp.graph.rst @@ -0,0 +1,85 @@ +ldp.graph package +================= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ldp.graph.modules + +Submodules +---------- + +ldp.graph.async\_torch module +----------------------------- + +.. automodule:: ldp.graph.async_torch + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.common\_ops module +---------------------------- + +.. automodule:: ldp.graph.common_ops + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.gradient\_estimators module +------------------------------------- + +.. automodule:: ldp.graph.gradient_estimators + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.loss\_ops module +-------------------------- + +.. automodule:: ldp.graph.loss_ops + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.memory module +----------------------- + +.. automodule:: ldp.graph.memory + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.op\_utils module +-------------------------- + +.. automodule:: ldp.graph.op_utils + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.ops module +-------------------- + +.. automodule:: ldp.graph.ops + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.torch\_ops module +--------------------------- + +.. automodule:: ldp.graph.torch_ops + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.graph + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/ldp.llms.rst b/docs/source/ldp.llms.rst new file mode 100644 index 00000000..31d1b865 --- /dev/null +++ b/docs/source/ldp.llms.rst @@ -0,0 +1,37 @@ +ldp.llms package +================ + +Submodules +---------- + +ldp.llms.chat module +-------------------- + +.. automodule:: ldp.llms.chat + :members: + :undoc-members: + :show-inheritance: + +ldp.llms.embeddings module +-------------------------- + +.. automodule:: ldp.llms.embeddings + :members: + :undoc-members: + :show-inheritance: + +ldp.llms.prompts module +----------------------- + +.. automodule:: ldp.llms.prompts + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.llms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/ldp.rst b/docs/source/ldp.rst new file mode 100644 index 00000000..df50fc31 --- /dev/null +++ b/docs/source/ldp.rst @@ -0,0 +1,56 @@ +ldp package +=========== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ldp.agent + ldp.alg + ldp.graph + ldp.llms + +Submodules +---------- + +ldp.data\_structures module +--------------------------- + +.. automodule:: ldp.data_structures + :members: + :undoc-members: + :show-inheritance: + +ldp.main module +--------------- + +.. automodule:: ldp.main + :members: + :undoc-members: + :show-inheritance: + +ldp.shims module +---------------- + +.. automodule:: ldp.shims + :members: + :undoc-members: + :show-inheritance: + +ldp.utils module +---------------- + +.. automodule:: ldp.utils + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/modules.rst b/docs/source/modules.rst new file mode 100644 index 00000000..f473f842 --- /dev/null +++ b/docs/source/modules.rst @@ -0,0 +1,7 @@ +ldp +=== + +.. toctree:: + :maxdepth: 4 + + ldp From 3d9010572f2140411f71a36faeb5fda58b618f54 Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 14:53:31 -0700 Subject: [PATCH 2/9] autodoc --- docs/conf.py | 19 +++++++------------ docs/index.rst | 20 +++++--------------- docs/{source => }/ldp.agent.rst | 0 docs/{source => }/ldp.alg.optimizer.rst | 0 docs/{source => }/ldp.alg.rst | 0 docs/{source => }/ldp.graph.modules.rst | 0 docs/{source => }/ldp.graph.rst | 0 docs/{source => }/ldp.llms.rst | 0 docs/{source => }/ldp.rst | 0 docs/{source => }/modules.rst | 0 10 files changed, 12 insertions(+), 27 deletions(-) rename docs/{source => }/ldp.agent.rst (100%) rename docs/{source => }/ldp.alg.optimizer.rst (100%) rename docs/{source => }/ldp.alg.rst (100%) rename docs/{source => }/ldp.graph.modules.rst (100%) rename docs/{source => }/ldp.graph.rst (100%) rename docs/{source => }/ldp.llms.rst (100%) rename docs/{source => }/ldp.rst (100%) rename docs/{source => }/modules.rst (100%) diff --git a/docs/conf.py b/docs/conf.py index 8d620650..3cc86ebb 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -5,28 +5,23 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -import sphinx_nameko_theme -import sys,os project = 'ldp' -copyright = '2024, James Braza, Siddharth Narayanan' -author = 'James Braza, Siddharth Narayanan' -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.viewcode' -] +copyright = '2024, FutureHouse' +author = 'FutureHouse' + # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = [] +extensions = ['sphinx.ext.todo', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc'] templates_path = ['_templates'] exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] -sys.path.insert(0, os.path.abspath('../../')) + # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -html_theme = 'nameko' -html_theme_path = [sphinx_nameko_theme.get_html_theme_path()] \ No newline at end of file +html_theme = 'alabaster' +html_static_path = ['_static'] diff --git a/docs/index.rst b/docs/index.rst index 5b03942e..75b5c770 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,5 +1,5 @@ .. ldp documentation master file, created by - sphinx-quickstart on Thu Oct 24 14:27:08 2024. + sphinx-quickstart on Thu Oct 24 14:50:30 2024. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. @@ -7,9 +7,12 @@ Welcome to ldp's documentation! =============================== .. toctree:: - :maxdepth: 2 + :maxdepth: 4 :caption: Contents: + modules + + Indices and tables @@ -18,16 +21,3 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` * :ref:`search` - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - ldp.agent - ldp.alg - ldp.graph - ldp - modules - ldp.llms - ldp.graph.modules - ldp.alg.optimizer diff --git a/docs/source/ldp.agent.rst b/docs/ldp.agent.rst similarity index 100% rename from docs/source/ldp.agent.rst rename to docs/ldp.agent.rst diff --git a/docs/source/ldp.alg.optimizer.rst b/docs/ldp.alg.optimizer.rst similarity index 100% rename from docs/source/ldp.alg.optimizer.rst rename to docs/ldp.alg.optimizer.rst diff --git a/docs/source/ldp.alg.rst b/docs/ldp.alg.rst similarity index 100% rename from docs/source/ldp.alg.rst rename to docs/ldp.alg.rst diff --git a/docs/source/ldp.graph.modules.rst b/docs/ldp.graph.modules.rst similarity index 100% rename from docs/source/ldp.graph.modules.rst rename to docs/ldp.graph.modules.rst diff --git a/docs/source/ldp.graph.rst b/docs/ldp.graph.rst similarity index 100% rename from docs/source/ldp.graph.rst rename to docs/ldp.graph.rst diff --git a/docs/source/ldp.llms.rst b/docs/ldp.llms.rst similarity index 100% rename from docs/source/ldp.llms.rst rename to docs/ldp.llms.rst diff --git a/docs/source/ldp.rst b/docs/ldp.rst similarity index 100% rename from docs/source/ldp.rst rename to docs/ldp.rst diff --git a/docs/source/modules.rst b/docs/modules.rst similarity index 100% rename from docs/source/modules.rst rename to docs/modules.rst From d9cc26d95c80c6a368623680144514930ebe9c5b Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 15:00:57 -0700 Subject: [PATCH 3/9] sphix --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index a0d851d2..b152d6a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -95,6 +95,7 @@ enable_error_code = [ "unimported-reveal", "unreachable", "unused-ignore", + "sphinx" ] # Shows a short summary line after error messages. error_summary = false From 53a49f63a0f36ce440aa13c36e312e3ecc5ef6fd Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 15:05:16 -0700 Subject: [PATCH 4/9] pyproject --- docs/conf.py | 17 ++++++++--------- pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 3cc86ebb..5fb7a54a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -6,22 +6,21 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -project = 'ldp' -copyright = '2024, FutureHouse' -author = 'FutureHouse' +project = "ldp" +copyright = "2024, FutureHouse" +author = "FutureHouse" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = ['sphinx.ext.todo', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc'] - -templates_path = ['_templates'] -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +extensions = ["sphinx.ext.todo", "sphinx.ext.viewcode", "sphinx.ext.autodoc"] +templates_path = ["_templates"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -html_theme = 'alabaster' -html_static_path = ['_static'] +html_theme = "alabaster" +html_static_path = ["_static"] diff --git a/pyproject.toml b/pyproject.toml index b152d6a4..44ba1a26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,12 +90,12 @@ enable_error_code = [ "redundant-cast", "redundant-expr", "redundant-self", + "sphinx", "truthy-bool", "truthy-iterable", "unimported-reveal", "unreachable", "unused-ignore", - "sphinx" ] # Shows a short summary line after error messages. error_summary = false From 87fd92931b7687bec7c291746139e6ef1e71639c Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 15:11:41 -0700 Subject: [PATCH 5/9] conf --- docs/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 5fb7a54a..c19011ce 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -7,7 +7,6 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = "ldp" -copyright = "2024, FutureHouse" author = "FutureHouse" # -- General configuration --------------------------------------------------- From 16e7d45fba43034df5f311ab2fa1c6f89d3dc71d Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 15:18:04 -0700 Subject: [PATCH 6/9] napoleon --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index c19011ce..c831fc97 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,7 +12,7 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = ["sphinx.ext.todo", "sphinx.ext.viewcode", "sphinx.ext.autodoc"] +extensions = ["sphinx.ext.todo", "sphinx.ext.viewcode", "sphinx.ext.autodoc", "sphinx.ext.napoleon"] templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] From 2791c22cf219f35e406e46a1f5a84658a0aa9206 Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 15:18:46 -0700 Subject: [PATCH 7/9] remove from mypy --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 44ba1a26..a0d851d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,7 +90,6 @@ enable_error_code = [ "redundant-cast", "redundant-expr", "redundant-self", - "sphinx", "truthy-bool", "truthy-iterable", "unimported-reveal", From e432c262c5be42c44f072c7b24aa642ff4950b2e Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Thu, 24 Oct 2024 15:22:34 -0700 Subject: [PATCH 8/9] pyprojec --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a0d851d2..5aa7ba73 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -431,5 +431,6 @@ dev-dependencies = [ "pytest-timer[colorama]", "pytest-xdist", "pytest>=8", # Pin to keep recent - "refurb>=2", # Pin to keep recent + "refurb>=2", # Pin to keep recent, + "sphinx" ] From 076188503ee402a229d1bb21dbc8ffc290c02e38 Mon Sep 17 00:00:00 2001 From: Manu Ponnapati Date: Fri, 25 Oct 2024 11:39:26 -0700 Subject: [PATCH 9/9] html --- docs/_build/doctrees/environment.pickle | Bin 0 -> 6300260 bytes docs/_build/doctrees/index.doctree | Bin 0 -> 4973 bytes docs/_build/doctrees/ldp.agent.doctree | Bin 0 -> 573482 bytes docs/_build/doctrees/ldp.alg.doctree | Bin 0 -> 821383 bytes .../_build/doctrees/ldp.alg.optimizer.doctree | Bin 0 -> 424436 bytes docs/_build/doctrees/ldp.doctree | Bin 0 -> 385217 bytes docs/_build/doctrees/ldp.graph.doctree | Bin 0 -> 1085546 bytes .../_build/doctrees/ldp.graph.modules.doctree | Bin 0 -> 141756 bytes docs/_build/doctrees/ldp.llms.doctree | Bin 0 -> 565658 bytes docs/_build/doctrees/modules.doctree | Bin 0 -> 2710 bytes docs/_build/html/.buildinfo | 4 + docs/_build/html/_modules/index.html | 137 + docs/_build/html/_modules/ldp/agent.html | 133 + .../_build/html/_modules/ldp/agent/agent.html | 295 ++ .../html/_modules/ldp/agent/agent_client.html | 260 ++ .../_modules/ldp/agent/interactive_agent.html | 225 ++ .../html/_modules/ldp/agent/memory_agent.html | 235 ++ .../html/_modules/ldp/agent/react_agent.html | 255 ++ .../html/_modules/ldp/agent/simple_agent.html | 217 ++ .../ldp/agent/tree_of_thoughts_agent.html | 251 ++ .../html/_modules/ldp/alg/algorithms.html | 226 ++ .../html/_modules/ldp/alg/beam_search.html | 329 ++ .../html/_modules/ldp/alg/callbacks.html | 758 ++++ .../html/_modules/ldp/alg/datasets.html | 114 + .../html/_modules/ldp/alg/optimizer.html | 194 + .../html/_modules/ldp/alg/optimizer/ape.html | 428 +++ .../_modules/ldp/alg/optimizer/memory.html | 285 ++ .../html/_modules/ldp/alg/optimizer/opt.html | 185 + .../ldp/alg/optimizer/replay_buffers.html | 145 + .../_build/html/_modules/ldp/alg/rollout.html | 435 +++ .../_build/html/_modules/ldp/alg/runners.html | 482 +++ .../html/_modules/ldp/alg/tree_search.html | 276 ++ .../html/_modules/ldp/data_structures.html | 500 +++ .../html/_modules/ldp/graph/async_torch.html | 315 ++ .../html/_modules/ldp/graph/common_ops.html | 596 ++++ .../ldp/graph/gradient_estimators.html | 363 ++ .../html/_modules/ldp/graph/loss_ops.html | 144 + .../html/_modules/ldp/graph/memory.html | 315 ++ .../_modules/ldp/graph/modules/llm_call.html | 131 + .../_modules/ldp/graph/modules/react.html | 366 ++ .../_modules/ldp/graph/modules/reflect.html | 164 + .../_modules/ldp/graph/modules/thought.html | 146 + .../html/_modules/ldp/graph/op_utils.html | 295 ++ docs/_build/html/_modules/ldp/graph/ops.html | 702 ++++ .../html/_modules/ldp/graph/torch_ops.html | 254 ++ docs/_build/html/_modules/ldp/llms/chat.html | 469 +++ .../html/_modules/ldp/llms/embeddings.html | 276 ++ .../html/_modules/ldp/llms/prompts.html | 215 ++ docs/_build/html/_modules/ldp/main.html | 179 + docs/_build/html/_modules/ldp/utils.html | 215 ++ docs/_build/html/_modules/tqdm/std.html | 1699 +++++++++ docs/_build/html/_sources/index.rst.txt | 23 + docs/_build/html/_sources/ldp.agent.rst.txt | 69 + .../html/_sources/ldp.alg.optimizer.rst.txt | 45 + docs/_build/html/_sources/ldp.alg.rst.txt | 77 + .../html/_sources/ldp.graph.modules.rst.txt | 45 + docs/_build/html/_sources/ldp.graph.rst.txt | 85 + docs/_build/html/_sources/ldp.llms.rst.txt | 37 + docs/_build/html/_sources/ldp.rst.txt | 56 + docs/_build/html/_sources/modules.rst.txt | 7 + docs/_build/html/_static/alabaster.css | 708 ++++ docs/_build/html/_static/basic.css | 925 +++++ docs/_build/html/_static/custom.css | 1 + docs/_build/html/_static/doctools.js | 156 + .../html/_static/documentation_options.js | 13 + docs/_build/html/_static/file.png | Bin 0 -> 286 bytes docs/_build/html/_static/groundwork.css | 720 ++++ docs/_build/html/_static/gw_logo.png | Bin 0 -> 14145 bytes docs/_build/html/_static/language_data.js | 199 ++ docs/_build/html/_static/minus.png | Bin 0 -> 90 bytes docs/_build/html/_static/nameko.css | 530 +++ docs/_build/html/_static/plus.png | Bin 0 -> 90 bytes docs/_build/html/_static/pygments.css | 83 + docs/_build/html/_static/searchtools.js | 619 ++++ docs/_build/html/_static/small_groundwork.css | 102 + docs/_build/html/_static/sphinx_highlight.js | 154 + docs/_build/html/genindex.html | 3106 +++++++++++++++++ docs/_build/html/index.html | 158 + docs/_build/html/ldp.agent.html | 1378 ++++++++ docs/_build/html/ldp.alg.html | 1627 +++++++++ docs/_build/html/ldp.alg.optimizer.html | 968 +++++ docs/_build/html/ldp.graph.html | 2324 ++++++++++++ docs/_build/html/ldp.graph.modules.html | 430 +++ docs/_build/html/ldp.html | 2054 +++++++++++ docs/_build/html/ldp.llms.html | 1229 +++++++ docs/_build/html/modules.html | 262 ++ docs/_build/html/objects.inv | Bin 0 -> 6291 bytes docs/_build/html/py-modindex.html | 333 ++ docs/_build/html/search.html | 120 + docs/_build/html/searchindex.js | 1 + 90 files changed, 31857 insertions(+) create mode 100644 docs/_build/doctrees/environment.pickle create mode 100644 docs/_build/doctrees/index.doctree create mode 100644 docs/_build/doctrees/ldp.agent.doctree create mode 100644 docs/_build/doctrees/ldp.alg.doctree create mode 100644 docs/_build/doctrees/ldp.alg.optimizer.doctree create mode 100644 docs/_build/doctrees/ldp.doctree create mode 100644 docs/_build/doctrees/ldp.graph.doctree create mode 100644 docs/_build/doctrees/ldp.graph.modules.doctree create mode 100644 docs/_build/doctrees/ldp.llms.doctree create mode 100644 docs/_build/doctrees/modules.doctree create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/_modules/index.html create mode 100644 docs/_build/html/_modules/ldp/agent.html create mode 100644 docs/_build/html/_modules/ldp/agent/agent.html create mode 100644 docs/_build/html/_modules/ldp/agent/agent_client.html create mode 100644 docs/_build/html/_modules/ldp/agent/interactive_agent.html create mode 100644 docs/_build/html/_modules/ldp/agent/memory_agent.html create mode 100644 docs/_build/html/_modules/ldp/agent/react_agent.html create mode 100644 docs/_build/html/_modules/ldp/agent/simple_agent.html create mode 100644 docs/_build/html/_modules/ldp/agent/tree_of_thoughts_agent.html create mode 100644 docs/_build/html/_modules/ldp/alg/algorithms.html create mode 100644 docs/_build/html/_modules/ldp/alg/beam_search.html create mode 100644 docs/_build/html/_modules/ldp/alg/callbacks.html create mode 100644 docs/_build/html/_modules/ldp/alg/datasets.html create mode 100644 docs/_build/html/_modules/ldp/alg/optimizer.html create mode 100644 docs/_build/html/_modules/ldp/alg/optimizer/ape.html create mode 100644 docs/_build/html/_modules/ldp/alg/optimizer/memory.html create mode 100644 docs/_build/html/_modules/ldp/alg/optimizer/opt.html create mode 100644 docs/_build/html/_modules/ldp/alg/optimizer/replay_buffers.html create mode 100644 docs/_build/html/_modules/ldp/alg/rollout.html create mode 100644 docs/_build/html/_modules/ldp/alg/runners.html create mode 100644 docs/_build/html/_modules/ldp/alg/tree_search.html create mode 100644 docs/_build/html/_modules/ldp/data_structures.html create mode 100644 docs/_build/html/_modules/ldp/graph/async_torch.html create mode 100644 docs/_build/html/_modules/ldp/graph/common_ops.html create mode 100644 docs/_build/html/_modules/ldp/graph/gradient_estimators.html create mode 100644 docs/_build/html/_modules/ldp/graph/loss_ops.html create mode 100644 docs/_build/html/_modules/ldp/graph/memory.html create mode 100644 docs/_build/html/_modules/ldp/graph/modules/llm_call.html create mode 100644 docs/_build/html/_modules/ldp/graph/modules/react.html create mode 100644 docs/_build/html/_modules/ldp/graph/modules/reflect.html create mode 100644 docs/_build/html/_modules/ldp/graph/modules/thought.html create mode 100644 docs/_build/html/_modules/ldp/graph/op_utils.html create mode 100644 docs/_build/html/_modules/ldp/graph/ops.html create mode 100644 docs/_build/html/_modules/ldp/graph/torch_ops.html create mode 100644 docs/_build/html/_modules/ldp/llms/chat.html create mode 100644 docs/_build/html/_modules/ldp/llms/embeddings.html create mode 100644 docs/_build/html/_modules/ldp/llms/prompts.html create mode 100644 docs/_build/html/_modules/ldp/main.html create mode 100644 docs/_build/html/_modules/ldp/utils.html create mode 100644 docs/_build/html/_modules/tqdm/std.html create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_sources/ldp.agent.rst.txt create mode 100644 docs/_build/html/_sources/ldp.alg.optimizer.rst.txt create mode 100644 docs/_build/html/_sources/ldp.alg.rst.txt create mode 100644 docs/_build/html/_sources/ldp.graph.modules.rst.txt create mode 100644 docs/_build/html/_sources/ldp.graph.rst.txt create mode 100644 docs/_build/html/_sources/ldp.llms.rst.txt create mode 100644 docs/_build/html/_sources/ldp.rst.txt create mode 100644 docs/_build/html/_sources/modules.rst.txt create mode 100644 docs/_build/html/_static/alabaster.css create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/custom.css create mode 100644 docs/_build/html/_static/doctools.js create mode 100644 docs/_build/html/_static/documentation_options.js create mode 100644 docs/_build/html/_static/file.png create mode 100644 docs/_build/html/_static/groundwork.css create mode 100644 docs/_build/html/_static/gw_logo.png create mode 100644 docs/_build/html/_static/language_data.js create mode 100644 docs/_build/html/_static/minus.png create mode 100644 docs/_build/html/_static/nameko.css create mode 100644 docs/_build/html/_static/plus.png create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/small_groundwork.css create mode 100644 docs/_build/html/_static/sphinx_highlight.js create mode 100644 docs/_build/html/genindex.html create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/ldp.agent.html create mode 100644 docs/_build/html/ldp.alg.html create mode 100644 docs/_build/html/ldp.alg.optimizer.html create mode 100644 docs/_build/html/ldp.graph.html create mode 100644 docs/_build/html/ldp.graph.modules.html create mode 100644 docs/_build/html/ldp.html create mode 100644 docs/_build/html/ldp.llms.html create mode 100644 docs/_build/html/modules.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/py-modindex.html create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..2e4c4f3cd0d611392c2c0abff6c63198410c65cb GIT binary patch literal 6300260 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%0Af?gx& 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�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 I6) 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 EN?>O@RFLm;(+&B9ubPtQFU}Y!V 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ⅈ^VhHqo=qXWU;V-DlI!=YYsT2*z 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 z%0D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�j8*W>; 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%0D~hpBKwNFOh#<27e%8_j3FL5(j_$S3v_|IE+EA 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

5YE2wCdv4d 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 z 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�}yMUD;2#HpbyHEUH2-8m1X`@>@9|9D&ho|b6syc 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

EW@9gTA`maPdkyfn$Af!%y;^nbmRn$Vi8g#U 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
  • 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
    `;AisFVWL7ozMo`s;|YTJo} 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9b0541636d5b178bac3ba70984045a0eaeabc3ed GIT binary patch literal 4973 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�LJsT&D58j^5 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 #ky8Wjb4|ffj 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 G7yqNBRaQ6%VNC7(S6`WT9o1Nn40khTK# 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/ldp.alg.optimizer.doctree b/docs/_build/doctrees/ldp.alg.optimizer.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a877c56c255ef62b25a3495c6c5b3b550de52dc6 GIT binary patch literal 424436 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 z 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�K$VdT$)=$tRrG_%Ayu@b0xEhV z37W}9Qdt00v@EtQ75!N>#8uIc@k*#@adqNU^d{jVZCx?1O|o%RlsyA=yrTKLU9ZTH z67KMCL-l&Ue1-cJPXOe%Jgq3)FV*up)pvXIzDHG9&CY{QsRgU|Xq|$VmF!E%nncOI zuB;+P$-0F{D_KFJ-+@0;m*1|66}8O3?sX|hreJ+JGXIj)gca-`;pXfp*w|6ys@3^N zV$`ZPY@{;nKsu>RWs9LqpYgh)ZF^T10A(tRZA+OhL;GB1x|~-+nTo3!E7SN61wZ8G z5E*fdhj8>uGs zk3;L%H{BeHEiE)Fv=Eroc_FsY0euXwAZ45^UJr>oLpyklaHM!ET*!UQsA%at0(QDl zy!k=38<(>&xF`}MN~xFOw$!22aH(h@z$gEmpIW!hFKirPOvkLXsln}T3{OQl-iO*x z$w(N^l4hQXG?>Ps9{DP98ze@xh)_k2+)~fmrZY#=a>bmjX$g)Yi0v$S@PHq%@^nR7 zO!#1lB8AVH>*~}+&3EeMmCqUTS{CC@z4ZW=&Y=@2VV>~#aT>e5)(G+Tp8D|)JH%5d zP2Mk`O(RM+#e{C$hfL7?jo;Emhr2H;%U8a(c59jbwe?|T6)|RqS9pL=KKr7Lkq$S3 z&$=V(dfPQemI+-DR$EHP+*{XTGGBqO2lD7CaKp#bB4lgdc~6Hcfzrl)8d; zyLY~*MzwyLwtqui5WRVEqq6x4x*&QCbk;{qfK`_%>k7(JOM4g3YBuwr@_hTUT_qnW z$kCsq?om>ffQ!?Q#f-8FwIDZ|6wza`qAY(_NVrp3g_?xuvB>p8K)^n!t{~x9Jcwa0 z1klFP!?0`4d{NDe#$ssxSIwf+i^9`tGNaY9H^2S8RA>&)Qt@`*H=L^SoVxHIHtGD= zq4Sf@%rB`6SGC-HCZLVIF7ev$_K$DEysE6ld>#cgP~j}Ks^xO2Vry1Guh_R&OSWOv zrfBbd5ozo6g*q`HPD&$gN%MNvH6OBmXUtubeOmriNlP}mJN_A&;9B%;nZ>>h z=q{*bWz7%#s{cz}b+in-Rky+^b=t=8ppi>R^YJc!o_3PC30j!7Ry?dSQvT1)T1(Mf z)fp_FsG7eEra`i!Ir-*5eP5|tHD3pr%$-$~+ zWKzQ6U=7KEJ6py1!~L4Xa?b8@4*)vRE-v)Jm0q)e0>@d2zRLM1*@Yn0#tJns*6mC_wXon5D4q?DNqG{hZ+ z=6#*vfjMA4*mSS)Lr>RFn;INU313SJ8+Gc^2VpcC#m<$mf$SWoH=hI9dR~K|mWpG6 z#yHcszwT*?7k9b5IE;T_0A4Ysj^Fu6DliA~NzfgOG;5NP;&)HD3}3H=6*lt8Aomklf7q zse?x9U@o6e*_FwZ-X-rV4-v`>x)C*=I`%&5>^pLbsj z@n6jluRA|47!uW;d=l!;{qHyzd}_kgCz6Ce5Y(s%Z%q=m_>$n7WMY6;#;OIpPQm86 zQUz~5*o_bdKPiMJvPYZkIImNiANZVjJ=76u^1Ob1HMU>*B-F2Kb|fOmZ&J97M4j_W ztDU1R^RNHCXC^(Y=5@f9q`%n@iuQDNT_o5)9{Lt5mI|jav46=Tsc*RkZRt_YrHD8ON}b)~aDC<8;_1ThG_7o#S-L zG)4wLtB|YgNltINTB(2?npf7a(=G4hb8tEhI}0ttwy{6gsyTf)W3g)IpqsJhnXJmx zoRjzH`6}E9bz5`Mu+xe6Pq3)$QU&=tGZ;`9S%orwoZ?mk%e6R;pIzS1Y9)_fJ$5Or zjevQ4it0MhuF7Q1Su$EG*)R}{z{6`#a(XNyZ5OKrZ32@>p@uuXu;6lKjSC9V!^2L$ zd&kHd;*NGOXJ_%^9`Cu(WYp+osNd+uCS*ED^2PxJOq=U;W%YdhXNS{gOyHe0sIjY- zOw{3YWQ>vO7|QF#Tvi0HXi6G-0e3pV^t3^uYWF+6xnj9$Yeq3$${8#qLgPRAf z9Inr3e5e_fN~xk{^*5P8z-R&Xlr!v6Q3rS@oE`W^rCfk&IbQoJun67DW!A8 zQOJN)3`?jgtm;T8U9Ldk&6jj{G|m@V2{Ka{F)|p!lW0QLfMjM;~z(y6Obu7owOeW^lFx1kd%i3&H6_qaa!~ zv?|KLI)_TzS<-NqOLcJ@rH$5qoXjDV5%(AHrh7eL-pqM)4%S7b-A(m&aI!BC$fI>NrT(fU*=Ctjx`XJNvw-B0u9uSw2IXJ1?2&gx|& z!6!yYB|av?Tz>^8V64!q*~8{~8Y%B1^qvA(O86?_YlN?N1HMVf_W*7utnLM@C47$X z1mUzrfR%(}gx3k1`T$!Ao0kB#6JA&fc#-hjsr*UUune$?@CCxNgw@LdYYCqtJV7{Z z1z;uNVZx(?OHKn^M)*GAIAQ1MfU5`}>Id9JI7;|7VfYNdhY7z}37B&xph~!d@ZGZj zZxY@}0p23)TLnlHzDxK%VgES*gOFPdC=vd44d7M6E9U}UBkURg>?M4U@B>00Mf6`N zu^sCG-$K_nE+Fdrp+tg2f|F@Wa1x)3>?ZWYN3`9QAaf}xIGxbF9?(bl>G^=46aHop zaE$Qj4S>%Q=3EHqAawmYU=iUS!W7|`gn1hQ6NJNrH#Py@BD{GK;70^~GhmeP2H^*U zo3;RMA-qC(jd1v4z}q`komBRj!h zMk?7GY_-=Lm$B_v5^mf9*h~1~Wq=BH#x!_7fxz-lt$v+*HM9Oc2@!jEeQm~Wo`?~>uNH}y8;5P~9 z?g6YPY}gCfMED-z9|;eC1n?-K`({8N;XcBHgzdKgE+;&GE8r=@lOF|qfpFeFz#w6j z#-D`82#*t%?+5e~ju1XY=+Xg;2=@@C2)`uE8v#5`c!qFw8Zb@EYNoNx%(+mk8e?SRVsS5LVm) zSV{Q&A;7bQ$371DJ;H5=0V9N?cLH7}tiKEJKElx5fQ^JN-2-@z@Zi0GBZM381MDIE z=O+OFO<;I%lQG0ihNv|e$JS&>M3Zq7MO+e-!DPgl%;FesaaxMWBUQvkWRts+%34LHB@N|c)myQ-%w85Q%Xe2tVY<@2s}jK%zd zo!B++l56*S+8Ju1LM|$8O{p%>Z;e8#FnLkyzToHJfpGkozIG!idf;H61ePO zUt`rT7HPiIF7CPSv|Ckk^`CTqsojg7)9x%}Qu<~(JP*P=$NR#qnv|h)B|{hN-LY%<>ftN7q7+Q* zYUHhorC6Iy%h6d7ty|jR#NMQwkfLR7Mh>6$Z+tjfu5{ezJP(g8ll=dat7<#ktR&^8 zlq+*Lx!EjIwzIrcpJ-2owbtw_ zXNP`q_UP-WwZ`Q~got3w>#|1;0oFnVZ zdx8;w#deOxp7KVdwR|QJSbiq3@GSW6Z1`_8{5J&1m(O8HZ{@F-hXIKtfW!(AWqoS8 z-maB2k#K317XZceiB==j#U-940V=QWECPywyC9%Oh4FN7PiF<(D}a1KXb;Wq=`3SE zs|VN*_Uu5TI9+Bxm*cZ)b*c%!!p^EnZKB#Pg_D&kZ>xMu`L^=y2}9=Z`j9jrK&V-3XfjhbIY)-&x>zM^XHWY!r7iiq`^?3pz_GwNiLr zcehFE8b+7sES@e_8nd1C9QR8DNtlN7Z0B_TbgS!OdFh_kY!Maob)XUgJ#Gieua~AI zrMH?WEp1k62f#LWhW0j!XuRr;nP8Av$)HkmVK_9~+33KnpuV4_&|J`23=U_ai-m*0 z-4pQ1XtM$q7lo|7)44}AKe%N$XaTaLmC{H68WFrO*i)~C!4CFk7;c5r&5@v5X}0#= zpMYttSwYLOUwkyg^axQ{%}^-TYV}sp@@Jj%_FZ;X3w+c_u$eJv^X0?AWfJAlCRp!q zB#2)LHeY@@7-H~kgXMLdCG3k?rHUWdRZ*v%H>A_PFpz2vSE_~2>n)gWptJCBw@vyS zsLaQ8LnJMabQql#_f1tt7#-m5r=gdHjYA>xBOirt|C+<=gdWZh*uD+Btftw8>6sDq ziQpk>2ZH*fOScRq+Iam!*5_7nkwB<|eprSlDaz9kudm@>8gJ6m)2etwO z7{t!;hyarx`yJ}WzWndyZ(x7?mSRx(o8V|U>MI!PHr@kDmnF9Ptr*7$!!-)c<%lN7 zaXCUtM(;@{dM7dTAg}_)w!#MX7@fbj_P?Wv{vf-03|a@fa0}rZMcSZMLVU>y6fEbE?>A-P^8XW#VD%$KS_Rr5Q8D>s)Ff=gRSuHO|i?xZe zk%FaFnlLVwLGKx(Jh~OdakDl6aWcGGDa}U5p>bOZKcG}FTV{dor;+Dz`GKcB8Uy~E zRUDzj4;j@glp-M|h5!sIS+ho>-dRdU*UVCsmv)vk- z7zsvX+&?mQ|MX0$SZh@#3YcsZ@P!*eNYyd!g}~G-6CY^?=RYi+jdUyAd6swcfatPn z1?mLFszychQ*0ipTmXDUjF1L?!6GV#80;)&`54ceAOhaXQyfEf7$!Z*v>^I1{GoDm zO?M2xuoAG)Vsx37VGl)N1YCad*g3#!=X7Pb!sTQBETZ+27Go}Y>vKb>M4@4?h7S{zGv z>1ZVw@n{wNWAtKKDur5PbV=O8&xBO4TpOJT2*e%HUev zP^{e>GsaclBZIx0;Zx6yYn+BcWn3IedPq4MD>a=LonuB3Q?>7JfRP=(cN1p^G(!zAjRz}w&0djDO zkBbT4szqcle+Gv>bthnid~wHt`7)3ZDE54fWRISd7@?I}{_IY0&A%|NS*0X* ziQ*?D31o6Dp!k`X6^nVGRNmk+)45sIyNPk~%3X-qK+@pBt8}&h3W`Jb_L>Gqp8-9W z{#NK@;xr09*!IgLJ7;@^QnOmZfR>skn_8c<^UdgdpoyoP(LVzP(O2LfBhHEb4eq$d za9HPH=|l82{B{S3Ao@C9T@6zAjlO|EHha-HIK;;AAv=xP4?=m4=qeC0 zd<)t#B@um3yVZH_E*{edt#TO1C?+fg!uAA{^+pgDC(3N<1x_2m_gX5FmFBqTc9gBU zkyKv218SMhg-9~bbgmQMQ`Q*2{3h^0W0uB3JG&a>DeO|7!q~+JF+3QRP|nMsK*5Fw zqY!_xv3vb@t-h7dGlGn?R+pD2$lF_St{To;TO}UK-zUNwqR!BaUs_$O%X{)YYzg5t z!&VDML|IX&{603UEONjN5$6@AD|s`)LJ4Q(q-A{54IJBV%|Om~R!Yu??ImV+yq{9J z)oQJ?@TS<@oR3M(?_8+n_eiX=O!0vkGn^F7rM}Ek)AUg85$g*xT1<$85R9#ldLNLf z7fj=cUK|7HMDvpnb7u3fMP;LlV;Ml@i2qRC`^_Mgz#37;#qi5a4kdQp1U| zslJ+A)u+*mfW|(#=T4W!;J*6%0K)XuTz!RCj(z~o!FOOeIK~k=-Y*L7I~{I3JJ_Cd zq&XqkfYz+t>4g(grpSy;Du6R)9l}S*}o0^ z7l||7g|NPPUB&jvBFyzJWpNf~r#K7VVh`@(M9p2u#^&B(Yy^?$^Sja=#Dz>Aggr!sJt#;E3X8;aOy1RLwsZQMv=M7oXL@Trg6 z*hhj$a2vdFKeth#0UR^8!D&#o-!`3k)Z>(^`ZPKPXzZ8Ua99rRI35NdrsI$*EM3Ph z!yD3dNc{uXajK9&Zr33j0M{X#wY$HM>-gV*2X`H>!7JuE*wwLf9V3&C`qXHIOL;uT zm)PK<8f6+vb0TruJvfqGx+94j9K_X4ID9PEFx+2n7H%%K$~ROFhHNP3en`fyc`gMu{AKs0lhs2(3zem z2Na75SMK3lewDWjD20=C4gHpKMt>8do!1#D!lTb(V+<8@oazipjTnCBaMd&H_od2- zRLB^5SuS6egsK~g%&(DTlEWMS0-t)0Sp6prg&MKqP}22y(NZ(?^3r2Lg2A>E`0R6w zv(Cb@HRt>k8il-`mO<$uKRXf7@`*%-X!PB~P`q&~2Y1ggzldy~45oZZxS9l!5KIXY zoDyChtAXk=x6wfIig~5xL0}a%Ol@(mFL2Ih!8}teDd6O&;3##*IqwAK2M%K{=PrMl zb$hFOX+%3m!Q8g+aj59V^}AJF9y1}nWgb;%3ww54N1*jByeMR}_ZaF)GE0-U6!8r!YKv6Y!14-EV;_Gw#+swj4}3)k%Xk zcp`l;1mu4t+)?g;Ts8m!xop-Bho}LCh*fglixjd-&in9+h2!k%*oEU)z%0wKIx1!w zl}0BkVYSpuE$qbGHNY^y1t~$f6GCEq-r1R9(P<%}?X+oIfu=eMO|a6DiXu-*ehtdu z2~U;D`Xb0%FB6%@)TciFSlmMA$ovG=2^8BEmS^w6EjsQfHujY&6Rmv^OAQBN{IPTm zYSZr8WPQJw-DZUi?$Z4?Vp3g!I2ks46+ZQee11rRNC+Ev<8B|dTyjB6&6X~sgswZ> zO!G4os2-e@pv7D%=$@l-I!T6yINTgtjOwCsYmfw!n_C>r{BY_rl7!rxvXYMLNGQ1( z)oaq>)Tm*Zi7p)0M12oQfd`+`lfx5vCF1u1igTUrp3ycdb$HP@hJh0wMJ&r|6^ydOYKJ0w^&vj)ag- z7XH5jAIQSL)GEj`J}cr1XP#kB(z<&mOwD3@uoYnoAJ|_-#^3>q!2_%{H-loWgtN0M z4S3vu9bTsEY*U0_tjipY1$-G*vmms2U1vv6AT&Y$mnCReTC|$&$OTJ9CSi}R8tgfz zt%O?Zz)tGB!=@>PTCm(yC^JmfT^p7^oX`qplRqwi(!@SYq=T zVJD#V?+enYj2^!f6VIdqK%OYoA|X#)5$90m+%ujkJ`*^>Q^ieq#ZpCf)kCTnak6@u zBX*HY3Tl&;1DUeKb3C&|Y&bbNyf{yC$eT>d3H5S` z62FV%7CMdjP5cDk*m#N>$vRnPI{S9j@r|p%h;je!H!yc0>9s2-Wwa>ky(Hx~@I485Vyxiko4JJDAixUMX$%j%6PuNl54y(%hc61)J+OOa?(PN2ej{wSyX-y|3 zL)jm|doq-jS_Xm7g@S&MPu07bdxb z%1+_tf~|V64?;%iO~&@`i`Qr4Ta^O^^>DumZ+G##J%QDX(@zA!awbLe6oh_iuu4Zz z2D7^1QJS-8g{e7SQ7l4dQS8PP>J=OtVWnn7XnO%t33db|{KHtnG=?Iyl?nl&tyGg- zq3yGPJv_8M8?RVs%dUC}Z8=$e2yJr=fcS;Byy3ovwzA3Wp{@MV8s!iMLVK!0TX9pV z-*ZVd_X%w;ja!)C&{ooCyVH$vXsd=YuE{loacfLj<{)wF&wTwxIybagaMo4#U#ld)pN_Oku}0 z#cDGg4&>gKlSQ_LJo{p3IM@uyByQB6)bQ;!2=MtBKkmi47Z#=NPi%Y#zB1&Uke)&E zHbLK?0UvoLq+7`LN!f8I>0S0>5(G&C1X@oosj5H_xsyFpcIvq59?^xM_;Z&jix7}! z%69+(&P-XnB{Sta;XRot%YF%Y)WyQ|I5XuzbJVAKW7sOM9c1hR( zuoOTBt+MBVDLAnNb7UAGV(*D@A(k>QQYnyz^VrACuhGjvia27eGXOPe=nX|sa`3XF}dQaK`PzDQVMkoG=-CP>@Zbm6?c z~s~*m1qWIH{!&)!l;;0H##~N;6jApX0an+aL2i-l5v9ht;XB?EvA^fJ*gXt zEKRJj;cJaPWHsu=X~cwa`XmP-ioG_%S=hVSU@!fpC`!n_2So|lBXboceh;YQMTy_X zD^`?XSG^P^xYqPil-SPPe5Qf6XQd3Zi5;Z%lWDX~_jtNWZOgDmn>#7mvZ@Fvn^b>* z)IOiO!TaJCItS-xNK6oF$6-mkOPe{VdzRzpVbo?6yvak)J5UK4Ofk4;H!faj1}~;9B%?x#Q|?W&Pa=Wk&UuDP?VXOo0@ za4p%m>v@ps=+S3T)mZ;ipGNP7oBfIryX_he4zB=G&EQbjHyIV~gcoE~D6s@b_8!qU zoKd0A_7SoHaBZ^LT(0dFz>mAOTk(pyHg?s6YZGoF@BR_zwd&qWfcZ*USZA;~#j(jY z6HDyrzU>mtx5?%P<)X^Og}>}n5`J))nkBMaelG(ubwdS92SFfu=42WlA6IxFZlP0~ zA6Ka8V!iQaZF%d1F+-egl{$#!e)zPjmf&{YkI+!4<*gh_dM)AgB!~p(ElB9o^47Q0 zDCBkTy_RX;%H)*J!M~=_cQ0?{ja$V)_wv@yk?oUC(3gaNCP5@9fgr(qdFvB2ki25< z*YZ|Qj`I4LrjyImc_%PG&|@pP08^X`_W~fFn%#-7NA@PK%I-!p$UbfhjpeQCV2Xrb z+B(hZ8LKE~pc6n%j_O+0%F*Z{EIb+TO5+dCfEDXm-JF@@^{i_hjyqvBtHO^v2&E^{ zI7qTj;be30*J+5@H+DcZbVh~oAL}$$%R>}q-tdz|rgq6;% zG5Pf5JCQoJlJzdUVlgGVI+igdAG*j?EO~ZXOv&5qA*4J>*G$=(RWOOqjTGl{#J^Rf zcrUQIw@7g+ZlNL$iWa&j>3O+JI zq}j1Jj;*qNN-wej@R73F1RqJS;#qyXbdziFin&R4)w7#S79@sZd~k%HX(i9NN+3X- ztmN2tbVH2%#u#~al?VB9M^3BFy+1XccrPY2W?Nru8-s4?QH(^2tO3){^Fqu ztPCu)VBh0rVH}PQE9`~KTiF^wI7cjOHlexTg@Jq#5WzbI@dV~&Fqm`FGRzu*i6B5C z#!u`dv_gHlS-5E$(1Ww=_DP(&kiWML?2;G)@|Xj`aY*eiTIY10 zwPRnFz4}C_QsLW0(1Y~wExma0TH{hwCf9E%B*tkZ zJoY_zqGA+P@A?E-oh{H2er{_1pD;Dt(wN&kF5JTIM&{v8{3gtofyYYc?jv=MJlv@T zpZb(?L}hH6y>4Q9yrG7I7Ng$0T)rWDvbv#&c!VZ`D${p3R%SxsP8nZML!nYe4kg`A zzm)`$V5bEM2HO@v0Kt{OS-547760B(gY`@^j@oht}!Ai2((-Zxl(&c>ZEZ`vGsA1tt2)7#K`xmWPF!~La8N(lCG9dk{}Y) zQjlP(rDSSCfdd~a{;fH|jB`wF&_j_-HS7VgH6sGcshz6;Gu!le$g?NyJf%D6m)x|@ znp|VQDfP7bfnxRrB(q84wli*cDeILq6iQh+lyqginFNubtb&9dly#g2>uE!~N;Q2@ z)_a(E%+BK>&z_WZdv~Jf&NpTD<}|fhBT|J|>i3lPK16b#r1n9^9xv^krJ+#T%b}!e z?;A-F3EC@2Ftqn9zHGyp7QX5L3h^vPH%@Q5s(yne&RxKFip*WW{~_7Fhse@NSh|{w zFh~-d`mjuNElmebreWmmIO~KCOqqqc-h^&hLHBgcL6RU3xtN~C!#JBC=-tL6s=qLy zaOvo|P(rj!qhV5c_@p}^QO@appghwxG`FbS^h)^Da|+pB8Vco^IF$6hGERa>@JxaP zgN^<6Of4F*ydA73&ou24o!c|Lj6|R8P6CS45~X;iUnimJU5v`D=GilGdec?)4{74u zX5A?=w`Y1c*}jL!(nxINR?NrF7&VmcbqGjYpi zexP?756^U-9QcYyy0}jwhP7O2(o)`x%#h?y<${*3p`sj;%H!ZuPZxAD4TW++97=kp z*hGRz=oEqk(*=2OT(H_{T$ju5wK(qr8oAuP$vr5VH_qGc5~$lTJ&z=a>`elSlXoX| zE4jwSJ4m2<2g~G_o|Tj_>3yxQJat>Bh$PR0r|F&KJ`zMiCvmEU+xb02w%->LW=Rk< z2~M4}=T*It2H@FOyNY$`v!jV(1{ZwR~f}j;8i^+H?2`7)q;1u>|GP-BXyG+Is_L{UA;+HZS zzeSTq8I9M%r=CXRZ8Q|hXmBX$M&rFChy+~_Bp5~`d!q7b8gyQ>(OaVOaVDJ%cEgv^ zU#F>c+YP~JAG`5iWc#Gu@FijKTFO(>x?5u zNz@HxOwOTcri{sE_|(&wTtY*kj0uO5ZcMHvK_n=MAi*#uC#&t~)xssgUw82oKhWxZ zchi{UwJqrzlM}_$+g-A94{J=3=#%wp0maEBYjO4w5{g~}%ruUXx;Q&4kK7xQzkQGY z^n^9?@wi_h+b2D)FA3ivLC_=^9+wNOviZbpc@GYwd>V#aj1`t$yX+L;qn>sTC@+n^22dDuzE!|ECySpC%|_pl zkL1Pxa)l>gwOy==ff(Ui@R}SZD=)?2C2ObdbFPFX*Ugb&WO`;~0*|;K8M{9|mI?<6 z3itxsWts15JqQc+mWhuvd$t{L)0h4lb;r)Lyqk}n(lCxjuvI`BH`9*s(4bysK{Z48 z!DwI+Nbb04SWdHidS)x5&pd_{W%(pP1g>2SZP}w0y83DwV0gxB;5#*j(h-ZIne`3t zo32(SDy`Xv*$c4jyEgl9bOs<5F&2r}!KOw2` z;g_kuZYV2G;hxHEWj&xIyG9Z1mOpBk;^;x7%QlS1?GrXIJv)6SiE)B;+5jJQ6^wSs z>Xb2OY8%-;$q^1EorE1E2$BS_rpPO0M-iqTcJ?3-^=Whvgw#{)&VxD(->D#hNA>%F z1hxT~+(4#dM+I^pu;;^@V5iF;gbll-9)WgEiLT-d_kH#OlMQIi+S}_4@+g|#2doPC z@$E9F@QUpN#;)>grNyJj4cyJ=jw8?IQ_wTTk7uXEk8)PKakfa7xbZ|SZj_B#@uHk7 zFOnbmQz`yKz+qkSv&V-I#w~QJ^AjIRT5a=pmYlS{uX_geezAL&r~{iu-Mt;kt7F14 z$B3_jPkmy<-y=aJm@wYBJK}N8+y7Ga+{o0o)Y;8T1;`cW5kbI(^{kRWIhoP#I! zOzg900G@sFeK_qFGnH1caUg8Xb~u=xHA#gq)V`<6@JF*Ka%PUzr_oWk*{|rw;p%wQ zvkMq$Mm^HU$!O;)ctb`z5>JSBUL>?MceEoLfM`cHn=9Jc3;6M9=XShe(GI&hcG1pr zv@M`Ag*;o*LLRl@XAkwVb$Z;Rw`c`F#;#Q&0y6HYFsKHs?=1|9;ubph&QlnqlWxaC zi`3RhrcHInI=>iWpE=e!3ZMGKIB-m8mxI5NiBq|ZUj&9%6q#m_RDudF4MdcJI zvq)J~r9;sRks8~ghH$fA7B#68akKh9fMl9gqvJ^1`hIv#+E$4%*wzDxd@nmn%Lc%< z%4T!f)=vW>+_ruOub6FRSI5q_UNKRxHDNu%1nh6jwgny>N;R=;z$u82_S%+WWo-yO znA-Pfrq*tDkmKKnZH;mMjmXc2f~}YLXP;!A>6O*6!Nt}V#hjm6HY#4p1i`=4ibr1; z>MpB)=^^rWtuM^1JHZwr7`qqf8Hipf{MQ&j=g|CkBU?LWMRihb6TGJT6+U{^{Xkju zC8zf4m=!Cc#n>1#s>YVVoxO9R$xQ#u-C%w9L(uwzs8<*h++>8CSkzfhGL4)cb1Hn= zRpNEW3_~;&YEB@BlHN})B0(hd6G4K(vMsV$kx&}y=D0JBbCp+i(>UghJJz9*@7^oE zmtxD+F4?+^E&EBL$Q)Zhaq`bq_fUQPAPH1Ab;iVrw8f{rZ;g;r#B%c0U4D5HNumc| z)BDWJNe~Hr#z}&^{PG&I{l1X!2P6oZ1gGBdskchg-bDk*+h@~f_@BHQnajK4;L$RlIxfWZHx0eH%||0Omq1~Vb_aLMKex-qooL#_q7srhI4de?kN zcaUTp(0FxUPA?JhjI)=zyz80IpyEHB4Viqx9C+9DfN59cxqI(!V#?sPhPuK1V&$mGC-dShS57fs=PS(=Wt~f2fH(P zQ6cPXAn4JKY?YZg6c4{5N*B2YW@H0UJe1AaWfL(CWvM9T7;|6wk*%LZYT1#kpTa9v zIb>JIu5!2yHzG)_73wpX&q^s2@|_KG&p%nM$u{03VX&+!KIGO3Uj@GQHstbn+(IXs zpCT8h(jIG3yQKI{KK@aRcjm#C|AbF{23wY$MlmFQ?D|JZ*f}XiNG| zFDV%mr$L!OYPdz|PxJ#6i9Ou%k8rb3*0a;qSGXy?5ZGv%Qr>6e0LydWxg21TID(D* zve2O1Hc~bKHc~d5U?b_Nde;Dc+)Q4JSIkVZt7B&-w@(%;)v%OmD5o3s>9En7ft4O< zGxd0jiNh%KHSbNLv2hQW0Af9fK3PJ3!-mGySjdHHEJX4l%RtC-`H?mXQUnFi?Rk1E zU9rCK8U;ZxwyNsMi#`gnKL#-GBD#Jd$Vhp@rJ5XI^0EA>DpL2ysJeW@pvTdOirDBV zHrA_`dW6J?%tSiysgIX>JqaSgOYz42ywqE10LRQraT@%*lvA$i)96m1v0q-wVL7;; z`Xm4`{ghN;>8U;iZ%9ui^$$GNF9-=ZJ(abF^r~yaR#2G?inSoTZz7z=Lvw?}#byxJ zChF~4D{O#SFSQ$$+JT@^uU6}AI74`{-Uwh|@laT+z-wWF6_}ul^`|k_K|e1Dk%PRJ zvC>otxF8oZ-i;qYM+8Rvjbg<2w56$?;_k^{Z=((8`L@cHCY;|JpW56k*W1-nP^-6s z@em(WYCwOzRv5U3dpPxOGblDf#)?un-ac>uIW*mFOxIyeZp@K+fTY;97fr{3##iNdJBWjqteU$9To!8g|t~ToZ9^ zKb1ik^;)>2PI3T-GflYS-?ee3Y^C4knr!%KUH+mYlIVBC0jV1;-+$B*V$675F zRLxoQ@znM;V&q!gP>QqmbTf=F`)sf6G2V4I-96ob29e+Nl|hZx+PvbNMIkx=v? zHxr{$x70~VshxasZ>w`3Nr4BS(vyaVNDw*HRom)DS)o}PN?x7SVD&Ji)F}}6h{*4g zba)6P+575=mNL1~GZCU)Ng05f{fbeYu7*dc9|SOFl&U<8j8p##-jQ*t#1-O=Rfu*k zQ&wdI5P`^M?KIVE@#ABF2#-8Ik5?@6U{^gv9>Ra;jXJKFs+Yp*=tO;Ly4?y(qmz}e zT54trK`uxOL0k|L zmCboVsGvK;@QHlB5x3AeGEb3@TW)q3^z3-Y4vY=8WCd{vf zzHmJiCX$Bje}GFqfzfIbM1rT`jl12w+EqgdeFF_7ucJ|*dhj!X7M}p=T#^hAakx2V z&)a$~2_|=h)N?4Afm64UB;@9l6-pLKD7hKcYbfdDlRK1blN5OHDLs_@B@#rA4t`>n zP1EY*ze+>P+tVE|``zW;q2-%NdOQT=br$bCdWGT_z$(uf{S=+3?ZA#Za#Xnc$7JcI zvoMggMz~TI{Szd{30n0L_^500*p9e;{WPjCk?oUw=TOo+#@9#?Bnh~)3h+v?17YgJ zLOsYseH#5M2&rEQMS7sevx_BX*x5xwNGDT`rSO4FHKbNSs_``ur8!IDkx?AJduM3Xe%q48LkIT{P<<54)#5=CL$ zgK{j-Fbk_KfVTbs!_v+hM|#{+wbpYt{pGPln~-Cjlm~7;%9R4|aQ0 z1gj=(OqE`_D$HVE!mkRm0Id%Ql&D#@T5Vd&8!|(w1-UZA=Kxrq8D4}}EHh+RJ!FOv zC##p5^hGl3sZCZ6WJ(Ip@l4#X;pANK;yk$^Z!#?fJk^l`@-MB*_9~qRQmxIKO8ssT z>XSduyD@H|)0p2pPwCv%m13_kTq<{Bi31eeAe zcc&&Q!%~ucfCiE`#8aSpi0lL{KFQoHNd_5VP#haj%AvW9Hf*WB^& zpOJ)ka4p#l>7`cH_oGpSXh*6S9NAoKj8|Z6xG^(|$1yfXi!fAvI4o@*5d+Pe!~5Vd z{M-zK=i`;qX7AYc(^?d*!CMF2$BSdC-QMuSqQ{Z50ZM2 zx%xD^7Fz9BG@R)3co4jNgB=8$ZcfI&E8smD`$|29(CIoszensl#mz;#QDpN#aGnPQ zxdHRE!-1F_0TUyNdWZ}&LEyzHjDB17U>^jX(jSfO-xqI-jc-*B6x750e3Asl!@Kz1 zp1^A6Z4K~27q}S}uhJ2eaf5EUl;%9cYRD@NM(8XK-k3tYf@34B)Qkv@ccWOr5@F~q z@bnChr9wb(EY&1eaC`}X<-zd?Ua{bqUG)+ibFz8~jxXVXVW~YeJsLIZHIL0cU@}3u zUV>Sv1+VZpZaOhSPM^K8yDQF(TOHgo98_v0n1(U}f8{P6!Hxh|TMh?Xwj6}r=npj6 zwjEH`XF9Ae0a$G@Kq`6HeWii72@T30AKw(W&}q+Sd>nI4Y<^+xGVyFbR&o}a8%HeM z!tO>JU{;f=Kk=Jjv*58}UlbGX45o*m3FDA&%v8^So6vVB;Zv&LiZ~=%$6p_3ubY^j zmZ&U(E@NAUrTlHF6!NDc=0Tbm>U697Id*2i>)y%Y5gH1$lLd#89(KH*1d$MS2oemI z4X9oyIO<%Jw+LR-l;Z6)_`I13gVIBI{Z=NUbng8%jlO%mJ8#^oGP_q@evWLPj5~cv z_-7JCf&vHwte7E@@U4KI~HxSl43 za&Fhcr;v6S#&juLSimjp=pVxXEN^b#Tq1NqrM5x7}=+%}UI)zM$@`n(%A6n96^4uay>mt~HQKUmsdNxK-XPqMGqblAdfah)6Ly#luy8*T zlv}Oo=Eyc!-8|7O#3_0yJhbh+!o}MlRmYVe&27!FQ7Kj{FJRSxZD+Bx!j)TK4!=ro zU$Y*6WNCMK1=C_!R{}t0UpX6x*4OnJDZr_pO)C5JE{me%F2ar-gS9iW(WCGU2K|4E z->#34DR#=OcXWJ}kAWS_WC{@dLqRKOm@!Ct)3sqOgenn^ga+5$2B&;A!f6-=g`Aa_ zj$qt0t{esJCKiWoo+%Y;t;)paW-!*Ov($V{Y_O?HL09z9@Z%4>x~b0!_>@3iCbecA zXhn>KbVbVqR+{#H!D=E|)+jPD5{htH1!#Fpp3)v0DP@3&TF)mDjg8miA{`|W=t%=? zNO}~H1yet>^A zNWY0pifI_Hmu56X#0gw0IxEN9)oR#Erf~&QKU!&pQ(d2%Iy=e}-(c(3U^lC-a7~4p zWxE+dp@k_d(`8uX2D5Gp0W1^4l1l(<#HQhR#ju16#=?L<4h~nURa_;8^8;WrOR2*P zIww>Cn?|uZ3dNav?SO_>M`qh{8%dFiE4H3-CU6MmL`$8e74CF=dwsMH{xF4G5wFwK3dC2ps78PQ+on?H986YNaw+|#T55>mD)tLT?$d& zY`*ItRLnrw^0q_ZA}n67wcJ@I-j}^0{;deU8u7|1vz?3zkVluy@QL0WytCPt0ELv@ zikB2FXGrx^3KzhtQkN9u?a4-cs;lEU2jb+ zP-xlhcuC?w-z9M|gmo<#g~a}_vs9|E8BSGP$II?Q&p;c8Jp^r>4E@4}uxpXoE5v89 zG~{nZ_HS71^OD9Z6QzMqENN`bMutMoZp%v|kMvz47mm-sIB^9QTZ2gMEW;Q?2;*&a z#d{GrF()3dH|5geK~o&dWlK^X>V~5FFD(vw3FN(r0>LMiK!*H@P-xlhcnRatz6;|< z(Va)zwI(cyHzg8xb-oIxRW7!Ia`8|o7K(?sc%B~@T%7^&$ymS?((wiaDJko&;>*8V z{Phyoza@$bpIG9$OcPgj3Kgby(_RvMyzdgcRr0qKP8QqMmffvfB;pc&6gRheFq>0+ z8yqTD+hSt_tFNuG!AMDVKTs?>DKNS3CCn4xBX?MbPb^_xo+8XNN)@hl<6h!i$#A8~ z$`-#}CHY*#5Ztpr7P;VX+Ac=!PT#dkZ&(V?ys4ORsl{oULJ?D3lqfiSVhL_rir|=? z(dg2$Q@b@Y!Cg9rEZ`@ zC(8KRbug`9-(ER`#WeE+3bs@({gzU#Lzx61RI9;w&VO$m@L< z`FmkbL=DPJ%<4a{ei%)98D{BMRV>T%{jkxfH=2dunqsvXZrg;`Wm8Z&P^&}v3Pazi zVK!xN+a_#qQ&6o#ll+_EflcgUQvmzIz%DOP`r0RpTDR$?(yI}Kn*9T-cpG7Xc++X7 zmP>-97O5MG`ERg??bKK{V#kel$w#ZS166yZ~Yr;k7ITES<;Qi)dp9U2`~-=#?<-ro4L6Z!%%hsAe;s zcg4BiXb~o|)@Cf{8$ad?VwzA0Yn5S-sELDH!AfGKSH8hJ+;|8stWtL;l56C!TGOf%h{0 zDwb>0hAIAoS9ZU{UX8vFf6SuXVDv-nUT4{@VXNJ!#l_|Lx8l`_&osqB>$a#YpMW3f zmE~wT&|sos)(5xj#cahiL*&NIo4arCbO@%l3%*lTWL?BM~I2&;-=F1NsydwQq4Z>v#-W@ z+`{~>x03YPYdki_>#fvw8rS67Mq?(X%sE+C>WdMTV~kp;1(u__YjEj;1+X5G?O*`w4P&_u z7HhDrElbIE++Kt24favzGY+%*>0VgNxPKVt_T1a9z(&A3Sj}Wu7Rh&DeGz{(C!o-V z-!f$9%H||a$4Xl7LX)ZKykVH8 z%z$4v6B{8E*KoP9v%gPP>qXeNJE?EP*DNj$Qs!C+&ob)ni4;h~NGLs({E4LoGAKrr@iSh@b@-MSe7;738WeT4KO3fSPIUB`s$Q;-#RE`Vgo8lZ6c9$(d z8XlM`PP5TQnCrvd6Fc+4xc|PfI11LcAmObQ;%9RH2Gp^y?;~)nfbtSc{^rp2N)1gp z?5Wj8lp4LxBYs6$-*;v&S~5;pl>c1qzIftx`E+Y05pK1_9E3P@riq7CMh5 zfH1&TElxm=J$55*U|kp$dzz1qj`6fxj?o8qoGT_ofM8BAztwpAW{W8%Z%^umB3Zn~ zhOagHM^>X=oJLF-r%!SaqS$LAoQ1uM4ffJsim^D^_p~0FFcwE2H~49wjt|Fu2Cvv~ z9J}gaI4ffVbhjZe6T_Ln@1vhE(jP$7_=O6$>+ zaskma^39H(?uMIl7Cq^XfJaYf0@beQNqPTP&hXweFnR@x6CQZnu--+3Ld zzPBLhnz)6|z4Mc(8r0c2YMR+N^{oo0MMdZGnQWN? zqO(&1BHm;VvCxTHEF>GV!l0$veTabMPu0`U0}l5V{1oCAI@S3Jek4tH+_QuY%x9?l zTpgpHIkMRapZY{Lw~-(ctTk`k9oYyXl?014guJ#|!0EwKb1M97s8XWn3Z%!jp+j)9 zUpCayZMgaTMF3)Ema@M{%lRO@AuXrG6D;RBh;lDShRX)Pa>{0NS{a&Pk6Y-}=EsIAx@;@TcJjxaApJ%-{~|^`vkm=o_|(USeu@N0$@xFs``txp+ALpqz#q0 zf(?B$qTP!Pl?{LmmCfd|p{t%PZRqiM#cU|MI(9bnf_Q;JrT{d>;1=Rmd$6J>YcZ(S zo@GW?n2*4YYIl?&eKs(>w_tQr+(M^5Pli;k{SYVpl+|IFi*eaUhH&(f82QYm^g{U5 z$CO@6f=Do>ym7ZF6wUlFXmJ>0OnLSo6DR&1c>mE^rd*k%qhD%cII?DUze0( z9*ubPSt;=-Yq1A2x<)gjqAkmWE>X9^e2QPH-~E=5cm5dkwQ&obgY#oL1x0oMnmLVs zM~r!9yZOiPsgK?K00|<&Zt}+6cC#yu{|pTwui@-HjptPOSx%)x(c6$7+j9N}-0YX- z?Cvt$YJLY`m{wDC7HKiR3ol5EDX|2L`D#SC7mFzy0E;P`&1EqcY?c;tAzm?y$*y{~ zn8`u}e#n`D+mGjb05WdFOG}10Q$XyNv}B?Rdvni*`Y2FTSqwOz5Rmjq5!A89f=R}l7 z0@(2j=C9q~ZdXc$+i%}})ew&ywRrNpeV3huyQ0H!%?$s|mk$S*;f4dF&B}q%CLH$= zjs)>5!RE^^=i?%H5RQ|UVji$2lhSuuc4WnMfG z>Vgd0zb$uV>zwQoJ`)D;(fv@d_3D@gmoFMD|ET<9qrXV{zXcXZ(H~uf&2Y!~RE*dO zrs_zP?Ar>N+h}B>l?$P-u7ZD@C_R~kl6jcvX^9%l5Ht@3U2DCJiq7@iJdSOdcu&$8 z|5n6RNaDzI1w;50M!C#UclUvyhiNF(wpbiW`hf0BNDvAAN|0cjVK=}{h{jXrago-} zM!!LW&l`B8?riiR=v`;|^vnqNB74vU9fW(Jb+2UdN$1>KXw==K`MhyU`0mmCN6Gfd z0c2kiK0<;>5WXP6Dc!|P{HmLLfd-IQyencqHA`jXsX{hG5|3VMe&BE=@=W3)5Kiq? ziI%tP7)7TEj^_5f!02|slpV?j2j9(>Sx5NvajYXKbhtNB#7AesM?Hno<)zWr01AW7 zBj*za#m|Rkqi@JZGE$Zv3A*Pqg-SUm3RnmHopxmr_M{#OMr21H8LN*+;Y5q?f{dZb zGVzKwKX)x)q6a5N4%Im+p|R*GKw5gsXalwZNi;xM%0X%X&a?oSvCLpJun0tQ-1N*W zTBxm#I2WzelUzvap)E?$G|?J!$cNy&&ay^0iMzPZ$_S11CV6hh?8EE@+@X5*;phxN zDq=#~fLEwC(MCj6(ifZ14f7p9fmWc*s7McyEex`D6O;3dntatHU96-&6O zezDeMrw0uVr4`9p3IMxTmFp#l_0M&MduF6nFd>+se@uc;^j{|%9>hJiWHK-e89_Kb z65LPYHyj)eD+kJu6tLM3!H(eE!uFwH>*Z{#G#*=(wHVSSh4+vXtlP?e+$jVksk3`Z zdJK76+(PHRc?;{iM8<+?Gje@izt}Az*i#{Tk>;nfN^jg5;))mI5LfKp=8b()LtC`bT4>8Gb!?m0 zN52V=ZHM6@Oy&F&R%^(}XOgvVCSGe$yGGy)327!>D!CY6lKRMhC}sRhl9?p_@8t;j z#klduTFN=XE}R%E=Ggb^)(G|3>Nv$oluo~}1w zAKR&7qjhf^Hoa}mK8)0TU#Bjk>7ZZlO7&G(8ii<#d4Tvh%icsX zLYJhG2p$2VRU#O@4}Y$}ys+4SEsJNx8EI6RC8dMB0r0W|4jmg&gpR%f#6wQz=FHp{ zK{^|hGsXPOj^DK;8udifM---A^^rXw)1K-hJilfol8*uZc!}h1;0ktsilZntg3z(E zCo$64In#X6qG@nw7D!>6lSu^x=HDy=1E1o`hMgriA1-Lc=*V+&TgXA#TT|Xr{rF4X z>Wd=ax%@Fs>40H>E3gKJJ)xcHBM#qAJ^DvKM_!bR^jnHMPh{ebH~{FI_|XPwU@(qw z8~}8D*O@?rspp74D6&O71#4%}u2t@B!-?=E*r>Y#yQwwUVS#vJGLECbd9ZNcIBZCV zH<)S+?1d{RGC>^TucY&O_^6>f{Z>Bux3&k3gtihD;#j<74X6Y|kbVmCDN zn89TNEvb9)Z^g$ITc}V>H%q8x;+U)@@Da?@aGXnyPxMkDymMrZ7y@U)kt~6;;`CD| zZOoGWQ{0`_N5?Tj%~;0fi8wgzDbOuYsI(L3H!`7tnxM>0QvpRErxeLN@H~s*G_FE^ zg+%$`6H9*U5-?RdWPjwv+H?BO+6#Ev!A_!MML5}u6q^gdRr1_l*a8w_C?~^Z!XoR{ zBArnL@3Xk%#q>K9nT}5^rf<2^p8|!K-H?|c_GT3X-Ksc2?x(Cf(2Nmhlc7~kD^-gV zexq_r`DWJo{AF}Wg9nRAzy_-yg@&bWonFU@0pK8c-TLXKIgKZD{i@; zUixDYZ@w8fWFt>`2*6ly4cg36jS_uZP&vu7vs+`*0Y z8XWPntJtX4p+W%1{TK)N#779h>Gky>EKZd5+;gx}+sgJ`ABw9~{ccwI>0kHmL2(|w z;b$ij0_nU`5HQyjuD4`jl&En1K7O=8nmdeY92KtbX%n+LcUqwqrq7u1%i94z3J&$A z-3)`n<*QrX?2xghGqLUp-$aJpbziB=UuNQh zsBgR%K62Nm@QIabU)2|C6~;D*WFHqR`1=lD$->Xv1hvcW{*}yx-7Li zQ@Sh-mD0Ez>GFRAl004hAzra`nOz;bbop{Tn-Z!-Wo#CR)bM%?AL6( zM0O7FdT}<8_L?&MvjVsbBTU1uccVD?*>KDaJTUE771NC9_%Cm()FxnX7Bi;lVyny# zZ)!n&tcG$SGKNuqIIFr+D^~gFEu|D~FUNCOFalYEi zuBh|A55w?%ZKB$Sk^0GEr3%CH#aamjB~BJLM0ROVfy0)YK^so#X2KYlC|0X5>JPt4 z;RH+rfUF755XYbF`BW^Gd4#Cg_a{BDZ<)!yJX1WDahubWab)~kVfdj;7>d;QgZR+~ z8DjaQz8iN!SBrZV7(85p-oj((jTt*>uPMC$HWS`#%Fg=eG5Clo-D#;GlIWTG{e?%X zBK4EDPulEcXOF0eky7bp6vuOe!`zmx@iWZ zVPp9cO8}E{KS3+&kc0Z_B(p);VNbAbEB!wWq^MU{Oz-cL_MH;9FrQP|EP_Oab|NG{ z@#NF)1w`f$XZLe!NHd;$C2C&rZ^gdtG4ZaPjU4Y9hEKcFD)$=t%V{Xo5GIF`K7@G# z2_j)gN|0a-VP;!kbPo+yE2m}3d3#-8^b1TjW?%3SX0jQUIhPn48+5dVd+T#A#v2q=MYBO0E9HM zSv%MgTP-c+%avVwEqw$jj&RD?NAZePv)R?L3u!J!jo@<_v(EO~>RHDYGbGDP_q1k< z&>_mN1A)lJDl*Jrowj~n_W3+wcwP0mHeIf%D{g$#qUlDpD z(J~FQPmuDDaSNT+{MM!=pB+`{?f|6!0m=_!!ZQabKY&j?1C*r&DvBhll^jZXfO0Yk zA|XH#B=iuVJevl4tOArxfR>$sk^u_mgm-}QT_$_8pQQ#Us*^?ELA7%PDA^ZH-aIz~ z=zY=T4Gt05EYboEH*@AV&^Rs8Mkh?zQCM~b8Gi>N?N^X-2zbYXjQioLJIK)8fDACS zbD?d2qt<~*y#rtN_o#wNQ*wNQ3)uh!7qZ#x!Nn_(QWji1f>$iKU{}X3xY#un!m>!% zB?Z?yLEUo{S2txIFTdC$&Ts!eR*{6dw+XEc_j676LI>0Vep=!o%jYfIhdXdei{0GC7#k z%>Y&e#Ks>#6G0=$Wtl)8Bret-U&w>=y7XOT_~fBM zbEl8B4g_TO;(Vq!Ig*K!Vui(X;3M}63w)w$FU&=~eP=KiY)~ZFFq12jagSLaozF-} zu1eyoVsDS_?A6r0J=%^OxhE~q+6zP$-}F-l?Mqo%h}FUMO!0EUk{`_=p$?;rL9Pv9 z@QI}k_vBUw4ReAYiWVEVmtH)d(L$4*O)p-Qls5LH9N4H{K_WPUmeevB&q%^as!8$- zioYF8xHQv*uDmQ!SMZ6YD-*eOB?EgDK{f_n3iFbz3PZOlHc;8>(W+PxhHlL+Cfi|x z*g)kpk5Is3VsY{)6SWc20+?`PNdgRon_kjkG6l`DJtKRK3)$hA=fj zEJ|W;74R)6VavAy@m8_C8CHx8?Pv2T2FmNpt9bt_4?_;Q799LaIRQ>AA1JSpH#)1a zW4tu~bf;b7Q-Ynb<3m|T&91K;Jz3YAE zJqF9__@)&x8Pc(6ca&yq+%7f4r4aN%O{d4-cJA;jouiBka0Uh(@d4!FLS_iEV@$hv zBu}MMt0GTyyuTo!^_}yWR5D4F$;K!acQ%MtOf`@y zz~yXi+OvdxA;m0yDcX0Dw3G7qy=@ z7cVYhpJ*k6F_3PnhJmYl*rUtbKI2>}PSI(~G}@8f+*0y68IVllA6B=-;D(!X zc?UO69Obcea~t@BZ9KeQ0^6roO0&^65UhJXy2616MoL$rQ{W?y@e1XBBHXn=o~MQ& z`3S|;z!ippI8Uv!wkw9yh8kpW1*ylW&;({J&Y=dMxnHsYNGN5q2?^zLStoT(E#Hd- zu-RX?;}uJb*;SsLk|$KX?kj5KCSmPRrBSa{8lqw` zD++EFu2vZHL}xf?6`KduRP%(FdGwn-%c+6f^a7VzFQc=ZDE_wd{Jv*78i%@bol_I| zDkJ^G=gOHKjgilr_bBqC7h+?MyyrrV3V%6^OvX4ZY@^XqmzIc6j97l9_K9SSaZfSh zl_WDrNBRo*)H4zKZ5j%d2yrOsf%+elAQIvrL4v`&6O&l%jD=TfZ)=&*2WV{a22AVR z_9AcW^gbrRbl!e}rp6s6^TxfBpnoCTC&Of4623=*NKg+!f>ZET67&?^eqMq1k_2(= zRq&D;8S~y?exOH@R%HCYfMn?ZhOt@^yDXPoT8vMnLE=A@B|7Uo${&%I=uG(3(-NIa zL!m4Yhmzh~o=bvAP&GkjqPot!23fg^Jxls@}`!wxyQI=;x!+#H;X9PLG5V%#~J!l5fi3*n>uIU0iGIoj_7 zS0el=bF|YEVoxnoli?s_Y6sxUo-#Gr0Ay;i**uxryO0c)sl6MoSf<9Vj$Nj<9y9U8 zwCs3UyJaIzJ>+07VqjvAG#qGQacWG?Dl?hJEnv0E=G!V$)76mG#W(Yf83)TBi$^K1 z*>@SNN17Og<1a=JhBJrjjnYVP*;y@^JTVe%E;eUs6PquGH7@F{=5%o))ZPi;Ip0=q zu)LtN#%^u)m9sIhC9FN^ZN)F;Zodf1kevQ?79N~64(7uW%@^>K_0iwJ9~kj`EQYi& zkWk=CLHH^OA;Ayw#%Ys|!>}I(L_QS*=# z`wp5KcU6Wr?p2lf0NFlSmGLFvGbD%v^$;ZZRAv5=Za=TUd#TEB>`mL_(V@)`9B~9? zthS0^mc^yHq`#ZjS4j}214eX+caa$|ixR0X+R=y;Rk{}Y4Ly+KOt)}Sq z^UAvyYvs$DU!+m*S-P(v+wY5XUq^z-Azjx*nzztE@`|`06KS}pO+VvdxzlaxhiIDJ zx*=?;&#`uok?oVm+WESLuaF=TbVHC}9BX&HQ6Z9L6YH)@?Y~39&2!WpN6M6PYBWK= z-c@0DmlNiqKD-iw2X}o~;m}nd{wP#f^4EtEB(D!|xDc-Jr>qYzxyKS){1fdbFR zMR5oso$hlGe5UQl2A~)$o6S=U9!8v5F?cIpv0^a0>bV%KbYw7EhEuC>>BUy$NcSp` zu2mW2(hpo-K`i}PgXQ98xiZzX)_!z9P#xYT__Ms zJ5Ipw2e*t42V1s`j&@hV&)XN5y%{E(y{q2qI!o9WTA_I=7LDLdYH7M{ePPy)66`sG zvHP5^DPnk>m8L5(fKE*>O~bJqm5F+-R6Kth3`R7!@%bDTI4-dP=XGqWR>rqY&$P<* z+WCcZ&)wFnz|n~?0&o!Wx8^ov>9%I8)U{Rw9~AHb7aA`ft5q)pN~+S~=(kj-_~jVs z>=kT9aP%-X(^bLdxQPlj`=J2;CJoqQC5jWgS;1Z|wb4~jK5omXxNSxpTO`L8ZqXF( zZ6v;A#PNslDL4TmS6s+p<3UNI8kG0aP_Dualyv>WA)1SDw(0taLs2GKuD_Ej?5vp_ zzsr#_O6-fVtNWj7oXw+5_1*-}mzG32|@ zM3|Ux;43(v^8h<|OSUx}jJI3CG_2}`*NZ`ErdFK7ok^=R za6%KTgNDWjrW^GGuvoe|UTg&6p|CL%v?^18QE;eOZNt$|O+e({b_iRKm*TUUo_>fc z`@KsDL$2jFdy4JR#Fj$GB8oBZr><=4F z&3xRIi78?Wq1*AJ*w|uR(Wfnh+ERaEJ-Fx#35m?x{V%uQ&^ zEv38X{$PE?*%>_yt;7?9jvJ0=2H~Y5{&$fau*ZHTKoBn=bXU?%pv$G6#u^jfPzby$ z4+8Imk4U$?0+?N@v$;Ca8{lP^=S|@Lqwsq4Civ%N(eL2pYW(NT_zybe*zZa{W3Diy zG1S&tc)lcf{DD{MOn1DqcTT#oVzUi0Ih2n5_WGy_R8wrmSH+%374~ZCURdYjJUQH5 zuVGoSn{h4ReZeHSbv#B>H(Vn1S%0Rc&x^4gsaE`lqV);D#b2j|5&8xrpvws1ZM`ic zg5^fYRQh7m52XG223jr`Dg1tF+Pr~WCO?Xh5tc0cE zfofPAl%dNIJCL=BUrYwm^=7jI87%vR0UO*@sZDMgLf}PA5}-2M8i0hL-hdpWUV~Ht z_SLUU#MX)J#0V!OS0>=?Mi`VT&FN}!CM*pM*6P94dw0Sn`Stj1$SQ^k1AyLvb_Ma+ z+kl*coga&5i()#>Vo}&qG%PiPW_!Ge$p-L3<|o4goU9p^1=T983UI5~7_YP%u=77) zi`$t3Rqy};JN$&c`dQz7q9ktp@x1^v4 z60=2kt?;_fYKvAxVM*HzujE&Iv7|46w!JJVasjdfBRE@(3MVP$KNP8tL^N{JuVXqMQ<9QJH$Q<(dliB!e`zyPr zyZn{oosZ42aew@Q*MfO}{DIfaxq;U#l}%^#)G{rMT`~r~fLBm~NsHiz_URLu)Z$5K z7xGdY9yH5NA)j|=qs)knl2?H7{1o-ho_f5d%IY73<8VNZ6;*&w-d74Ii|s0`{y|Q` zSvUv7a2mWiKMH&T4gnWiFl(8~KzkZa!-4V(j3u&dn(>`D6k)D@PrU}ah##&%GaNjN zB6#otZW=xZ*T3EEn%M`^EiB=`6j#??oF$nMu6Z?lEgPS0w_$6c z%WXK``GvXby_zw$0h@Mw=@@qO*pM&AU)sm*Op+3o+=dA3IK^p7G(h$@CYA$ZJUOV> zVoaCIJ6a0^@> z*z13=QZMX|DW_fUEfFEfLX?1W7 zAQjdo>LnN{8xERb7_jd~$7fmzBL<7HrPxcbAIeL-Ka*I6|9TIT0Q3ZNqyTRl{>uom zP8zfM8!Orx`-!F^pS2oI_Dv{v(P?7@?KF-?@pwd0iaW+`rFK(8?D3uu8&KM$wP~Yg z+h)h}uBx`Jye5$d0W6q_IDKOtS$o@+-BQT2s&J6Yho~xAF5bgDB7y#(7>ZL;d6>SAn!7W3M}l@c5Q%sS3#%;;;>60OR=3n=C_oLe@&Yi| zx`D?@3Sj!-prRRedJ)VZZDApCyxy*rSn{ElL4#te1tX*|_W{0XH$!~~298`I06YgK zA>$c`d5-A2i{L{byHU8GyPY`*sA*O!Q?9QZ6!i8K7A30JWysh`-UaFJ#SZ&dYCaRPB z7+%S*_L2aNLEByl5ND2O0(2-3nF2yz5}=pnLEy!6$mfT%@!58=whl6HVhtU4zjN2w zV0(UUVyZCIl4fF*>9E=8)uN9?RZKaynl;MfT ztoD*^r&eeBEW<7N)n3f(7ocq~Gy5Kfgr}MPW*#yHgua;BpXNc}M~uX|;q#Nwb_PD% zW)^v)yLy+Ib-Z&$&s|YsJh{OQQ$pDi(s9 za6BG1?m7sIrzYim-ci}~08}fc>Hr4*w#tpL2t)obO}K_r*2UyqYkuQOjTy=+Dh6qp z%=sgx1|_RG%0yVjZSavJ@Wk7?Huh>2pJ%m4<0gX7s~K*|ul8aUuYW3tD`<%i|+j@HPl zGD%Am^K8h#l9SL#nI=nvVt-(wdOSl_#A`9O34zz|^$FoZHZ$r?%t>RSJ`r2on4&fI z6Rpul`$X2p6#K4Rtt}HTS33-7_O;S~*9Ra;lX^+caJ$hn;2*{%!|`BqlNEe;dB$eH zsK68*t{Al$CYcqh1BjbUB?hPJP@UR!^X)-6ISEUZpjzgP;P-+u1`bN z2B))K9>^k3^I&B<_SI19imO@LoIM@oy@$ghtVO`86&6i(8~`zx3m>pWI58F+Dg!!G zZ#Ps@gs!~-tA}829$Wb^UWa1aB+TAp?KZ3R!y2n#a$eZNzyU@v0O4s|Rs>j0HDO!Q z*2GW%O$W_#yLM46yoxV#bC&due-2@x0MA=8t?UK1j&&V#^}bI9jwv+>yu$?Tr)3dtPr zT-mz|(M*>Oz>H~fh5?mKk`m#VjR~;hY%kyDO--fh^+M&gxp4|0{mQKrqz&iM7uAU;4a6 z8$mCZ@|G0k&+bxw2@395Dd$ebn$B`(IRu};CZEXH&_{?#E!zBem>|feGY+V+N#=L< zvzZ~7TZ04PGvsAMFd@EHuWjAC_im@#SSH?+jwAl9T*u9s)LOWX8<<*y#+a!#-tM34 z2(8wmX)ywpwu%2x%=u6zwG@Ww1B^Lch6!(HGE79g z_4ig=$+kudM83%IN`AE$v-A(pwwGDr%<(i!|B;7G0iiEuY0(Z-X35Oc_`Co2u6iMVNDT+YD@GHigFSc0d|-9caNoOtDdlp%qId+|J-&rCJ|`GQfc%8zd^QVo2=HnI{OU_v*cHMF{-yf+g_cWv&S^5;y1Fk9 z*!CQ9_yu#u;Yae2>dE1hp{w7{1N!xI$mKWn!sW!A<wEx6oNfxP$_%e`!Ty`sGHQ~F8fD6jJ?a*mBy^X1-C0xDd?Fj=gI zK^1IH3!6!>(GmU)3x68*!)y{P24>okxWOO{vha`%H^hV3tpqbz#3C?9=*6NWYdY)k z28uF{vhJ!->g-I?5~0*H;UmY03*Oc{f9jN0GL#yzTBG$yOlZA`VV3-AFQL?B(6(17 z#o1$qQi(3;);wei2x(!ImkXN6gTUAv@;S`LXWIqYTIg~?j(1K67nIO(HREP~XxnPm z$Ca(NS1!IZ6R(A>wqd$#wf#;PUTASNyzr++)~ox3*DkE6^=j0Vak8oMviciSR5QEP z|1cjR$4uI}SmNsYU>O4rgFs?ERX>F9!H&xf++10GISFIrVAIjA!}Lg~J;HY46<8t> zHU|bP2Wl|$5>_hIf@^Qzjfd!juu;RU#Tpzs5==JgQ^9s{4YEo6nhn#RJ1{uWhE)`` z*0u_FHpN<4Z$mcEUs1y^+Y9HrE0-%`1f{3Y?kGXLKa+k4FYz8G2+&q@a0PE?@)9Yj z%41f0$;KZgFZ{%38E(n1_TneL0Bw8u3C~xWC{p<@e@DIgTRmGkk3zMSP%$7$FOHxMuf6R=(k z%pUG_0MnY#qVlisxQ0S-BW!(8frCgUVBv4rU{7ijVL=&>vc z8{0W&fIZu>`3P<%eRL!^0*y?76$OJma(-d^*%&4 zEEi+f!M-D5wKxru~x< z2#b~>;emsAeBp$S2Ao#I1PUj86k&UDCN$W9 z7ygg*LS-Fy7Z!imoq+)*a42hYDaIG0upWTLZSV)fq+u8$Y)-(OIVhA54hG3?+ zs?{sCL;5ub!`@O);EE$81i+gdEmaOxV5ebdS}GB=Brg$}uvIL~w@zJRO6n>cB<1@S zR$-HmtkT+p5@w^X#Q^p!u7F$*1e-=+z96muG1jL5<@G}l3h_mtyoU}{CfV>v756fM z9kO822kdAv;~ql*9S{~qMl=K3EoBtXf36vZB*y}1=|o7g4L))tzIZ!RNJ9+EKF?~4 z#!If_WOyaN+DkZd9klHg&T!^!2%~vEPY| zqnJK?+y4{pS9bf)^^cs#ANWm2Jn{GgueKrzxI@Gg@KlQ`;8(V|0+7%$_Fv7UzT!Nt zTkueejn`id`vpr?0Bg3Qvy#pI9%Y_bKSpPrJ8WPaHgqR?6QaWpXFDCaARXjU6>Y$6 z4gWXyfd6j5|F_|LYJvnB?KdEd4UwQ4zcQ#^&8Ge^uQrNaO`}|#GPI&|vh~g=E*R8a z?0l!UNaSf3h%ng?g3c@kS8Q-%M^BuPy|%|zlz;zFCI$N|Lsf1BRrw31U_j`AQUOiy z;s_YSfd0wTQ<~r@o`#q!N&j6YNt>qddXV%Nn52_~Cp0CGAq=S$bpHH4d^NT@s7mkg z0Pt=OKpH4{ESF(rJ9o}yAPs7;&)GigpFaX8S-q~uU|k99he)gU*<+@_ZUTNvCV8Dg zxjq{9V1K4vA3L98$q;Vc1#9PV3YTjKue~s#OTH&JN@V9rvMqQg+f^(^)NphU&VR$Y z2Bf`m5 z2PX6z@2mM%&RlAlKwsMC__q?}X;)+srO2XAfsY(n6yDa=B6awXm?c!O+M;{6$fC|+ zcqPBuOBS^q+V;w#ICIP_ikydaO&(GOl(bALrSyJh9?*N|kjr=X!sWyv+Ik)`Jvr<( zMEgJ<1dh%jpC5#_GibA&tJ*!?m8&}5X&wWUs--M8M&=mniZNk*<5AXS;)d45?_?6B z82`250=HIMCSC(!zincl)kZWI$FqD21%Lr#1A^J|SyNIHc zV55H#XYdi_A+<>#ZltFz6fX?i-V8B7fx&!nNbnRKkyDw5iS5u5lx!jBfdQ9bFoY8U zSZjQ%y@c(Y)nOBIs~ky@Cc$rKlAwqr{+%%!I)pjIjJNw0NgTJ+Y%4iDz&t@j5>KTl zK`)WSVnE2t_HyQ!kwl`8J3SAX0zz68;pOAb$%DWkd_;A&UiiE<8=q|-XX~KL$2s14 z)g*Z0Ix~pw#{Z_tcVqDtUwn|cB-wCs{M&q zuigj9QHD2rufCndbz(5wJx%O zl8SELRNVQ?Oi~aX^}UQcT^$u~>m4<$)Ef5B=`^+%V6h|uJ747cQ0dvTdxgtomx z6V4#d(B#{B$P^Iz5}G`j2Z5i=A)gmqnTgM!hzo}_%VO&xJnu4}j(4U}0zaWyOGKz;>QuenK3o!frT%k({(BG~MvZ&W)sDQ)K!_G-Y- zUc-Zf)FE$dIqnc&Z_D2TCgToYP9tcX)g;m~v~maocsIi=`PE(w;62c`mjUGL@ic&~JY)(8eKCM9$%DXybI9kHX5+JM0BtRF z89>K7&((HT$<+^4pR!x`vOHI$a5TH+fgO@34vrQZ2jKj&|I6N&z{zzKcU!l1Bw6wy zVOy5`EF@PUnOd3Sbqc4wYuXV!B_T4WL9a0w>lOIQd5g9(H) zTp{KTd;t@{5RPC-Ab}5KOt>Ln5+KP3-@p2JeN4Ze_hxn_lP~(&vv1z?QC(GCRb5?O zU2nj@V=biiK3JiJdR3W)CmRs;bVedabRzwt}xXcV^7$`n4hd2rra0=TDW$;LM zM$(bD#?%=5=3X)NL~uxZOnalS_SdQSP)MQ=Fsy;ZrjLkTr;#Pffp!?P`mY(8|! zB1f5wnwpx~WfwHfuAX5rizAzBiFlzkvHmi1Uc@t}W^md4Vi1?jhNw`}%kCkOzl?|W(>(Ezou2C(ML!wZ7Sq$So)dGiJcB(FVEmiH@MWn8FNEupQORNE(d$&g)w7j< zi`AB&A%$SQiNO_Lv>U;CE80#ZSUGYM3f8GkhADcO6~X%4P5^k$9OC)+)8W|`tTqq2 z1goRWOKCPejwZ62pf<3HMBpWD2$Ws~J{i~D(j^>pakynJJ{8-H^4I(z4r=vIkU;Fk zp{TRAY#ATlvZdE;|1IXVq->I3)!09fiaCXFx}S|5bT=(OdYw)pwiz8^uFuN3nPUoq1ZpW1CDk{y5927l>g$1}!o+71^VxZ))*uatZ1 z(Jex_Sh`r!JdWye!JvSX@bc82)3>#V^&)4i_@;0%aJf1E<0m2wP{@)#RB{+P^g5L+ zY2(s=s@0w!Heu{MnZXucv>SPHIoeJnPdI`S%9C3=8K&rAR^-XPP5>y(A)Y7G;n|ia zHXpj=iKEPgm~;>o9ZWklo$O{4iI%h5pfbH^`Rj>>xC_HFO2mQV?c8luMl8S-F09}; z+z$j}6?T6#vH`QGr=Wi4*yJFZ8l;Ep;2<(yQf>|0BPx@Z%d2Pj!i-|1P&tD=^r=#% zUMh~j-9>plaOxVlJK!zL1rtbzUZAT`g|kc(Ya)jxlT}tCrv-pQ$}skNwbIUXOP7g?M8lm5N#)tUmQIN<<}QF8K&rAR^->i zodEESImGiL>F{jJFPjTp^2<@?&%2r2kKFyHqcgeH#I=WzNLIeO4cS^`rN7nXXJEpw z4aad7v|R+p5?=HsR@C3>&)2h7uV+QW$MCK1xig1nvV}$bq+B-qmG-W=Ty4C<6io5*fe`RZ-v0)wv@Sey9{#Mq8UqZMVhkoI=9#Jm@WOE@dYX%|(8IOU zdMMPAO`A|)Qxp)ziYp*5Nd@F~D!n#5KUF0WSG*0C64Hy1(C%zhN_s8h^a|?JQ+Y`< zoYk>g~Dqv z+Y~s>`q53JBEea|8!N|;nn=hN9*{4Zr!b?F54H^F+UUL=JeY&cv~1zGQOQMOfc&Jr z_@=n{elHhi!)5be3@yh;UXRi&e82DmLe_79tanE(95ZBHJr7d*1OOS0dby4ihLi9K z{@=6Vg?fR-ya6e=MvI?X8S0By6|ymNr@PM_zpp2Oqm~{f{7#3&^hfglBUS4#xh2-BS9h- zp6g90Nna7gSnC0=F5lxROt=)sx8E*^37FT4`t~%_d4p>H5ChVNs14lKS=r|Nsc8_A z>xCJU5XFVS@p**pke<$`r+v{=2~S7DN%mQ0pB45w#Xj$3pH=!KTd0(EAs-V7 z_bxPCrIt^p;ZWi6q~RDi?KGU^V>VbOu`I2|T8Xq8eN+6l$IEX?wAwXM3&%jKaRjw$ zwfUIQEbuZ;l1XtYB%>Nccn6JV?j<8Z?v{)SmKMo)C1C4LGB(fxmyCz;q)A4C$CiwE zr%6VM7>JEsgd-%GNFW)vkz_14rdXg_7KeQBb$?#iV8Lh!eXz4aGCKnu6q0JUqq>T> zpD&=4`92cK(x*`+kRPMGCmN-{rjVr)DUhWSRq18vz37w6($~-vlcnsb8(GT7)Qv1X zQ)n}vG+h(vW44eO6jfs7Dd%pV?am#>vg^s(#14M3C60WtCqBn@X-9Wg(g`%lLD6@` z74H*Nb#p}$iT9qUh35XFyy%IB#|4yO$)DJYAg&EegMO(jCVn)G`33k<;*LElynQYj zb!s#IK~#mPNMgqSv%eRg883P<%=m@GFmgcriyG1Q{e5*{#B&goDQhpnrPdKf{NHlC z80#%M&&`riN*YP&6G3LwF5iN0HeRH5nWl3}d1U zi&zG%!xmC~ZQ|Tyv6&s#D|?djZi#rIHL=%f!f!5!)1=fd3wl_tk3nnI57;6$S_zaT zt1DdrbYd$GQ-DR-j=(Zy)N{K6%Saz$BPV{As&(=))z;wh>&5V)3XRl;&$&#d8$)*H zYN?VNqkLm5x5#*-JW9LWJe^swj9Vaa5`=zbJL3Tb0&dTU*-)885_0UZ)N$?}C+iuX z^33kYgFRaBqq)I$+v!k#G=tR4cuKc$Xk7BA7OBlyl}!q0?e2MHZ(~lLHH`_fBn@9Oosf4wt*k%0x`YUCdd@0qC#je#CsM0#AM9F@1>^81w*?`Q3C$_vZr`yF)6IOujU~n^CU#;m9 zb@a2EpQ>hw{rdU_#eySTt98-z*vvmpHEKyMVuR{F-{spZEzD4 z5_Vt`X-sis*s}2ZQ=wTfQx=sR%tWs(W?F0HzcNRo5!X9a@ZhVG`z&`0;G8zrR%xy;=xHPBaiq{XdaMH<@hSDt9 z5jAVJ-|%=f5Xzl&_tFz{(y^y5oOHq)*6C))w){Z^Y9Ihph$vEj}Gpv*X25UicIBEpX{md{A!pH7~sFlC$b)VSCWa z(8o8zdUy5*m(b-kL$%_>P!0Db<+le>!Jv2NPQ+kf(h44%C=lW2;@7?Wl=w2^o~S5j9Ez#ThX^SW?w`c!lHMM z&=WIe*;5zBtQb=_JI)(5&t*%DDuM-Y9ZY>1QL3j|CahL1-gG@Q=ccO_W`f2SnE-$Y|@S!zkFPKAZ=e^X=3>Qu@vd=*}Hr6ZcH{KhrLm(jA+7{>5~ zrU<`+0u;JOag!1@XoPzS%(&e=(-+&jr!i70js}z1;bNd<(4c5^j9|T66v`H2g*2ZpzVM(Y z=yFoFm#w$1;I}Dp$)QUlEOBm$2Be9~6;J2c*2Pt-y4 zIdiVt7}^o;&BMGbj+o&BN?Wt9Y$?HGQCr@tIlCzuPNz~+Atdah#vE()dHiUaxhR(} zjkUOVNqZ4>jSrsUh0?nUzXVl%MxGTYbYX(xEh`>33g%+PbFyn9#zeO&s9IJ#3o**B zG+8)~7P#&z<4NkS7DkgRoi#4FwTM^AInZf~(O#@hvm;clWS6kxDvzMtU|J0O?KPaJ zqieWx^crEWxSYFQoJ3B@+n%<4@3q%%zu^YCY&pNf>T3Gz7r;sZWr-W7%6nYM4IsLv z5Z$^boo#>kRo{UY`)K+rg`}6HLXy~&ei2n#Cq)YRXB?Z-MsUZvI@>2?JAu1xZg6b@ zhTEwRE+P$a^SV?3i~YZQQOU9YN3ZpbCdau>^R&Jvhur;ETYhd6X;uD`!4+RrKMBeY zpe%!P0C&~HS}fLQjx;H|B0Dh4&i=6C;$TwvKD4bL{3KZrz7Yo}*$E-C^7irbP!V#B zT}2x=u3be(nG+qP1v!d;1Qgm!w zFk|#xjp`?8N@t^ZdQ$&l4*ifSrJ6&l;NGE~bW>Dj!;5k5DcUk=bC`U=)oDN#hsl3y zjSsAFJQ6{@OoK!r!!DeN#Q(*J;m4aGG2v~NNo<@l7i2cxsnKmpg+D>+UaFLe)GP%Y zLE?}|z`m6s?#YRP(&b6`ATZfXEKhi+i3G~UfX8RnX>+ReJ&NP zG!p!k#OhX>L5irY+vgm;p7Vl)e!jM?Vq|=6%bvPe+ltjkrCE=*Z6q^y5-nTmp1(M=#Pq=4zwGB0pHw z&#r6P(OazJy}AxU{z#b}#MU>CTMhBCix-GLqWho3H~lu39dt1Ta*y*|N9VU(F5eJ3uMV=X??V60nZ0dfG3-UuM;?gsyuLPTlzCp6;)FVbsA<@K-t);e!9z zVpm&%FW0$SE;G!RO3=S08bzmTZ-s~O&D5A# zZTtktqwfm#pL7oU54wjvqhz&U9mBD-i2cldA-wZ%3iid|kSYB?KkE#iy2Tu0) z;)@;-y%^C0-XnJ#{C#y0JHSDRH(nA>raa#^ZwIRNCe5 z#YZL4i$SINy}fco^r%L2v%jAXD8#$(ibBgY+r~wsMeKJuAn{F&Y05t)AB9TEDfAqF zFFp#1UJMGgiNb06d+UHs9Eh&y)I;_nGdo>WT1dZ2BJnSZMsM_w$48?-OHQM|^7rDS zk?6&s(L%DYqY<$$YD6FN_tgP~I0#))XqCMha1lzsElzj^^jB(#|KuN{k7)mpoM_+k z_u?a(=*1vfn~C-B{@ywu8wa8*vh_quHW$4X(ytL4vM-88E3fU?h**ZI35|$#{$6}E z61^BS@){9O^7qvNg*XUZQD~*Ll6KK4qsmBX>8}*cF87bnH?N+OoMzYid-2gs^pc!r z!~VWHpcx0DE1E6WogFTMCAe&Q+CMNKsT#>i^+JCyK2nKZl9TG?{=PaO6$ha!Qk~G^ ziE`1)yl7acF7u_DWbgEk(?_|tC8yk9`+M*Tf%Np?qkR3}M0&MC7nssMMs zu=}m7c&c%j5w${;uAc6Pam7~AW{l8c#$AzNj7wkv6pIt7uz~gdhpx46WkGF$cPks3-Byzo-fM(@usedTDp- zOPhPaj=RpJSUl=T76>f=-xOF5e~7}#15U#E04N2PX_K)})Acq7($*4-TJo2{u_PI+ z>YPrBR(1#R3O5p-Yr_w>5vO_%P2wx^P_Zu1uvumamC%~ zBq8WR;7Mesg%Uy|Ea8Fl~#S_#J(BCW(CKx#M$fcV{NUgn%b``L0OxZ=i3 z-RWG~Y^+|8it~ir*@j9ExkImKOYU4_wUuZ_>|$`m7uDrX+8MDMZ6}%$962fE&R8cy z6}@yRcN(2^U7bTLA4rE~TkhB#=#o2*GW(CwbXD@q1}c#}+tP**>E+plBG5rx;c1yT z@&LgUGPpqO)QaU%+@*||=epCMGh@@`+$7!dh?Ak! ze69HGd@VSH-IT+Wvk#MCT4obqSu;l}jq+ILwz2$pu2DkX9#ZRjS(6A_JWwo^*tL{X zSbS32foZnl%rd1~(c4H4=X8p^ukBm69Cl8%Hc>pkO2x`zn*D;2q-C1X z>r~Usb8chB9<#0Zd819S3@Z7e(7KsoE75kMDaMgwD*5^S(b9q*)r{EK$uLC^?G*gd z$`oa1&6VV;M!iq~oZkrm+vX6@7pB8An9vYqHV?W)nWN0pXK&_f)U`V@v-T|+W<&0jsS<%IduguK1$eD60>l?L^9oBPXG<`eG-;6g|v}vieph0Q{dh z#Phe);n`MJHV?X#m7~m12lMigyI+ax-V@GEHRJ5w6UnH1+h9Ds#r_T!LK|d9DixeH zl6DPwY>gz-OlZMvR<0o1R=$qYMYv4?u^FStHwyVSS*gIXAED#zwLa2`$YNMxW&i`&LN)PmJZLhmL}Zj^3!PJw4z7}-4N5=M?Pz23Qn#X+&omIs=&uvSK>n&aM2c&7ojck`5Wq!#c6c-n6tOhOl{2|1N=2L!!Ak`SY;dSl*k~+?hAGVTesY?tv|SyKb?=v2ldgxKF8Vt;-B32SaKj!WVuov zcy_*85x@wyRt2@p_A_qt~fqop%vY zv|39f2F4j=@kP6lcKgtFqFKn%V@f-(ar@j(hAMh#C-FS{C4byWw|_W?7@nCk48N_D zp(ey|n~mQOchdC-<`Byt=?2TOONfU$8D>HZs}+N13Grwr0DNl>@%%68@N8>s!i_FX zU0T~w<~`6MzhlZwGa&2%nR`b|hMC@rwq08CdMv%c#96!|AfrO;e%XC8M3ZVw4A+9; zas-nRhI`s9!DH+J+3+SZvaW5z=;@6tI5J`HWLfaCWlvq3D>tywLzjP6i*TbNTaUI# zqk4lGu&EW#z+A7jpuAZ`4LJ=P@5$gNr$V(j68!mW)OxY26Q&zfRY z^9%-Ce9>;qnP;NyMCJ@fkZI1us)14`!xTNVGi4H~fy12u@a#Fn^Y5j@v#kbfK6I%8 zN13Z;YYwWVg566ZxpQF~%%+w*x6~INcbv92oNe9Bxq*dQO;cLpMy+0%WZ_UKMt7|6 z#9?&Z%3yFUqO6LOxah1N;PMUj3qlYFwRKtVq0$fqWw9uWLsjU-Me;QwfUUB;HfMt^_`6h6cw(JuCWz6rC!ZpM=w|2 z7nF+S{KfDZM&pCyfQ@i)Po-8X(#<~mbJg1RfRVbN7^y#C2?#j>va8bELAtcX3y6nPkDDOabLsFRK>v1~}s@ zSpmmqU-x7!#rYby4Z)CVuuHgsAmDchoJIqe3i7ZrJ@8rs`H5YC{6v5ppuTTEhX#5d z#-avFwX}hLP#b7rF~J^wRD0F@X?G^Z@0^9fh?)&Qq2pjjS2&P!ugg}{3TJ03o_WBa zeiqc<&UhyLvNl9PdE*9+zx>^#9c29PAmoa=*QKJaDa6hOb+1Vv5gsC*kc{A8Ab+HV zeJ)7Q!3TH;QqIU+_lB@+-aMBkFxcQWXZw%beeZUh%6?6kX0{?&r3->>GK8_85{%Sq z!*{eXx6->R=HXTru@(!mn=B{k4aLb~DOaVKQXaI9~SL$mO;jo=VRjXH2iqWsf|O zEIPs%S#g{Tv*~h6+{9vHgfGawZKL*MC=DN08^wuorHYx{D6?!5T2u`L4F$_Mog!v> zLNT+F zNXcm?)={cBI>s-{jpDdH`F?R9a3imgWs5tQI7;y;WL@-KVWON0%|gtDjKy2T9KB8@ z<~$)_zi+jbXzt(5;EFHW&D487+DiGR%Y+PNYb_(g^@xnnOJQV>&$Bio~AjE=A%f!vnWz2Mr5FpDa`I$!;Z) zq@HMlx%86y$vknd>!8O|u~e47vITMPL^Yo;)3WreEnCLNw`}QkuQg?MUm=|3S2gzK z&ot#}ykMgN3E8|9l^jt+^g5kvjz8{krqz}oE@79gXK=+A?M61Ag|-vPW{wJt$^Hjiz8--t&s*-TE zz6OgWsZ^sA^!fx? z6I!vRn)tcZ#GGhL7YHfF?H6}q8hwSKC?0%m8WB&Xnnr#A#Ffi3cemVz@>dd9F3Z&F zYKl0nTxJP|Jy$N%@BGT;jW^?IAA&+d_H^v7Tz(RZAgvGK>|nMp$eI@_v)PPOfqdVk zZ>D*w`TL-%+{JavC+gYl36AodUt7Er=-20C`)iA@v}#!V>%O*_y7BR^er@sgsDtM8 zv59L0>Sy>Z!P=$88J)yDltq7~yFc6g5oW=V7PHG7q?)nv}Rq*9T*CrmOC)c!vMRx1LGBFf!~4g zT0F@+Fm(QsH((fdb}(5*Ta|^6LmW$9fhBzbTA^v3!}YMzCqz| zZf~~ua4P%=EA<0ZDWW;1qw8i1V^xv0uB@OV^Sc|9d7O4U zBKO5qunX_Y-=UJj`$DgEUDWo>md7*xsMVIA=Y;p=TMVxFqPjhu_NIz|LEE|kN%P!! zQw2wk>3#8f#{X|8LlwQWu0qU?+jz#0zs00jJnG1n6$da2AATdidATP zZm@iICqqq$iyVp;RIqaCeJn9hT?laAX(9>!5k?|EYQ$XsP=cbuUrAU@MR-5w2}g@G zC8Y)IuOu8T(uP+=bvRm>e)Kq6=y&dD`2|MC9WCtX*g0CHuY_(*sEjA@wVdwuweb2~ zxLda93qJu3gkOJ9Ym6iJ(~e&3PKt=T9Td_t=gycF&oa%a_Rg5qRt;-9xScW7jgQB5 zXG~AjLG!L-y5kWRfa3Kd}=HP-5tX`b$5A8~@_ z35Y81d+yBPnQUQEa{(&wogU*l)95vcVJf1=@f7bkyl$IIP}QgZEVs>tthni5>WQX? z7>xn;V*aZ%W93%`{4JdWe@y!&|VkbpwVb&2I7(h^ZXjw$-C2KER3f%z`TJ(8SEulD!iBa`UGAQQiQTo_jN zP2_L&_tgQZI0z|8(&(pEcwV{Hk z#SOX;;CAN*{UTc6ZqTpdNxDHTnJzt{Cp*-4U*rt!Biunm1LVc@n9v#ebiV4qVHlZ2 zGK(Mzq;tSYpF*z8Qq)fO@!XL}7I|HDj1JL^BN@pABDQc-Mus22$cy`4A;4#|Ni|0w z7K4%|rKS1ZPSsGG>~a$|57dfai7UN+c? z1f%?J0v1K!a=$7&q17N*bt~uYWQ-s@u**@&;en;ssXVZ4{DT{<_WVpL{DT`9Z1F|) z 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 V87XfiBjt1)J`B}Fx8lk6{{tuzRLuYY literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/ldp.graph.doctree b/docs/_build/doctrees/ldp.graph.doctree new file mode 100644 index 0000000000000000000000000000000000000000..022fc7404ec4ae0decc8826b86cc1a346ff1d39c GIT binary patch literal 1085546 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 z�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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/ldp.graph.modules.doctree b/docs/_build/doctrees/ldp.graph.modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c9c9db57f6daaceb60712f25e2693440846c0899 GIT binary patch literal 141756 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 F{6Cr{Hm3jp literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/ldp.llms.doctree b/docs/_build/doctrees/ldp.llms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fcdbe4295ad5bb5e86b394561a3e467e7da01bd1 GIT binary patch literal 565658 zcmeEv37B0~l`aVxDo*UTCMN2QiE?YYyJVs<-kB`d z+tc?v>B`~VrK3r+D+hNMiPrAuE~r)O<>?)ru~N6M)NVJcW1Ti|iCi6A zooFEki^prFRtsLj^TK**l0Pk(=uD|U#-MG@@*e!A(_P#y?Zuy_D~DFrRF+qcsT^Ec z+dX5`RjqQfwP~_c?`%3>$gs8PvSuR&fwVROpPQhK?13>n)NDc1*IhinGgeu~B`rl& zIZXcD?Yp8gHrbfy)Sy{RGOLVNLKM)BQ+PXeRMsK4m1BX$%5fmc6X5?(f&cfz|JOtF zD<`vNZ{(j>2B8HD^#a|#mZDga#jUqmWqnEpvND^U0ga!PvcHGME2VbCS(BW(e^fkf z&&T67jmIS*<%7BltM!TU&6@sk)$~fMyBPGVS!F6Q&|NT9sy3&)NAX6V6B(>bcUSWF z8_n01MLXKlB^3KLASux#-bFQFgI#I%L zcR{n+fJXKktr+ru>1ML~30g zsh$~tUsm8Rqpd0ox^}0jTaQYc8y2u*?3+@(-e@x^Xccvzy7Sx<+F(qEqyF;EVrqiDnN&SW=Rl_Uw z8q5LPop;l8$sV;`P@fld#>#$WU3&9mZJ6-_MtZ7Q277d4nT_}tLfPkYdi%9&FP_Kx zb~*1I@G)pMrC+Hm?5;4iRLaSIt%P>JUuXl}WuPM)fp12odk7L`ww?W5*5z4wXXRcT zlJ8b>sk{p;A#d(d)?BNtT-PeAs8Ofd`4Os}OR$~1kxP)2zkMH0x37DoaM_^ILpN5- zH;seep6(thA4f~|@d{V~CFLyRvJ^a9yVTrUZcletjS6SO{8ci#!85`~)rsj!ySoUU zV5EbJ$c?qD-`f<9l zsJmoOr&ePEgQoP2wj1N4fCAd!93QE)@0tc6fUm>{*u}S1*7B}}_Wc?5il&j{je1*0 zI@13lR9Onumi9JFQx#2=-L>bH04fYe!(i@Mn}&CT>Ft!6)!m(#jK$(JZMgqJ*9b5e z%csiq39yx;H-kKN603;1p)pogAs%b?kzn92BwM9{m4+5;G6E|%QxHZ;-?)<5J zXg2n3L`Cx~B>STFmngNu$|wJ&E;-`$>(_4XNO;a+ArPHufF(^T%>1%Ask? zaDXeL=6DTl>@Je3wVA0F*b=5%@ze27W>WRP>y3>Z_JNYs8}f05e7zAN-ab&f<>E*A z_u=q`un?`}qeJTr`A&X^H6guLx!r~VJ$*L{+6l1>ivVDru9A5y~EK&b-WF~+|mz2wp{B6l(l!Nz47#+GdBWS8*9Lq{q6GP6xb|8 zZ}9smL#N(07?tbbxIkRP(d{5Sco^DJ-xu8)?P%1?P#ylWUf9z+lXjh^pd1rL9vCO= zj?(fmOUo;-Na(mBTO3;@OiNmMqYJaeNXAxheF#Y`0vIiRUP7RI%`78u*`pY8BFwoj zVb(@l!kO5wmEfMAw9*xA4pcr+dB7O2l0!gS8i(=iSPgH?gGpnSsCHr=U{zPWPz`uR zMgu-o`LweE0H-_+IH-FB1AXZ9C(GbqYgLHO6^82GdLRda7zZ*GN*bv*aNY*)2oCBV zΝ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ⅈ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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/modules.doctree b/docs/_build/doctrees/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ea80a8231fb98937fc42beb63c3fb1e09f366155 GIT binary patch literal 2710 zcmZ8jTW=gS6i$=uHG4_Y79q6(AynFmCX0Xv#1j&{MMMZer9M=ackEr8cA_K2O61>idnAX>lh|U-Am=pn)5x!GcS#9kBg4zir(w^ObkND zORxCGR@hUlh-n+U`@is2a$5`E#oBwfpz!6RI0^&O1}FAHw~6T@>?^5xyeQ{145{~4 z&P$J6QtW$@xfEwFQ`9*K@!iohufO`NEN&Nbnq6AHNIGTcdAdwnQB1`nF%pl(o;V3# z&3<*-(jIs2ihl$-rz&2LEC&5+FuF+#zxQgL@?9U}kee7Bqh#Fa0rFBsk@b5^&Na{?Lj4vdD zL0;lJ8u~e1Fq6_?7)<4x!a$r!qO6UNQyR?ydFKIfLRc)k;cRWqH@ z>KeL3faErWQhYAH6er>Za^FY&X6TLB%p**jbWg7=EedWU-ApZ=KfSGcvV->W)_0?phTEI*k^3mi;7swG_UNdHKpIS(y6S(aB^qojtTKsnAApZ16Ut@yuESf zWH?L-0A5a@J_-rNFjiDAOSzxlBAF*|q?0v1r-VsI=PD)AMA=)j0n8d983+7V)Pm7*qej-#DSVK=-~=jj@Or;60 zm)xF7?iZC0aDFCyuHbCo=^PYdX$tql2>_XsmYZz?#1#o4H{sA-Yfo21$fZ#D0lfRl zB;1c&PQkL@OOV>3Q1`2Ky(G$Hv>yE7Boh?zpz$@?Q01zGIDJ_baFK5EYN9to0OKDL zsTaV&dMX^JIpNCr9X**R@G3)VDyHlBG6FNWD;W5DjSvLq9!?%+(7Gf%r&19-I?`;d z!ai!A4FIcJ)HCfS>~Z}jUF)G=&k~RqP?VZUki!#C?UG|Q;YvS3P=J=lQv_2R_g$LU z;do10U-S^e+M-=_6NT_bfV`K4^|yE>Ub-+y0)Jf~!naYpx^dzY{C_D%E{r#uRh=GZ z5-m^eVX>AZPOkOpFgGQ&9)d@6^SM!N|0~r8cZ99>V9VlQ?X@~|yk#G=)%rBdAKtaq z?BEW^#K`a>0W4xT$c$1bEONk=(fhuUzen=#;?F=oUSi-8-cAnvt{t|6V@rI{imR3# XH17yNWSP1(WNEfFV<6qp<^1e_l|?ve literal 0 HcmV?d00001 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 00000000..6967a943 --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: e40320371eeccd574e176c1e4efc6498 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html new file mode 100644 index 00000000..7a6eef90 --- /dev/null +++ b/docs/_build/html/_modules/index.html @@ -0,0 +1,137 @@ + + + + + + + Overview: module code — ldp documentation + + + + + + + + + + + + + + + + + +

    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent.html b/docs/_build/html/_modules/ldp/agent.html new file mode 100644 index 00000000..e5806a0e --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent.html @@ -0,0 +1,133 @@ + + + + + + + ldp.agent — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent

    +from enum import StrEnum
    +
    +
    +
    +[docs] +class DefaultLLMModelNames(StrEnum): + """Defaults for LLM models, pin exact versions for performance stability.""" + + OPENAI = "gpt-4o-2024-08-06" # Cheap, fast, and decent
    + + + +# ruff: noqa: E402 # Avoid circular imports + +from .agent import Agent, AgentConfig +from .agent_client import HTTPAgentClient, make_simple_agent_server +from .memory_agent import MemoryAgent +from .react_agent import ReActAgent +from .simple_agent import SimpleAgent, SimpleAgentState +from .tree_of_thoughts_agent import TreeofThoughtsAgent + +__all__ = [ + "Agent", + "AgentConfig", + "DefaultLLMModelNames", + "HTTPAgentClient", + "MemoryAgent", + "ReActAgent", + "SimpleAgent", + "SimpleAgentState", + "TreeofThoughtsAgent", + "make_simple_agent_server", +] +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent/agent.html b/docs/_build/html/_modules/ldp/agent/agent.html new file mode 100644 index 00000000..fe722289 --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent/agent.html @@ -0,0 +1,295 @@ + + + + + + + ldp.agent.agent — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent.agent

    +from __future__ import annotations
    +
    +import json
    +from abc import ABC, abstractmethod
    +from collections.abc import Collection, Iterable, Mapping, Sequence
    +from typing import Any, Generic, TypeVar
    +
    +import numpy as np
    +from aviary.message import Message
    +from aviary.tools import Tool, ToolRequestMessage
    +from pydantic import BaseModel, ConfigDict, Field, JsonValue
    +
    +from ldp.graph import Op, OpResult
    +
    +try:
    +    # So we can skip torch objects when looking for Ops
    +    import torch
    +except ImportError:
    +    # If torch is not available, then it won't be used in an Agent anyway
    +    torch = None  # type: ignore[assignment]
    +
    +TAgentState = TypeVar("TAgentState")
    +
    +
    +# A global registry of all Agent subclasses, so we can look them up by name
    +_AGENT_REGISTRY: dict[str, type[Agent]] = {}
    +
    +
    +
    +[docs] +class Agent(ABC, Generic[TAgentState]): + def __init_subclass__(cls, **kwargs): + """Ensure Ops have unique names and subclasses are in _AGENT_REGISTRY.""" + super().__init_subclass__(**kwargs) + + original_init = cls.__init__ + + def init_with_op_naming(self, *args, **kwargs): + original_init(self, *args, **kwargs) + + # loop through Ops and give them proper names + for name, op in _find_ops(self): + op.set_name(name) + + cls.__init__ = init_with_op_naming # type: ignore[method-assign] + + # Register the Agent subclass. + _AGENT_REGISTRY[cls.__name__] = cls + +
    +[docs] + @abstractmethod + async def get_asv( + self, agent_state: TAgentState, obs: list[Message] + ) -> tuple[OpResult[ToolRequestMessage], TAgentState, float]: + """ + Get new action, state, and value given state and observation messages. + + NOTE: the method's name has action listed before state to help you realize it's + a new state. + + Args: + agent_state: Optional current agent state, pass None if irrelevant. + This can be something like agent memory. + obs: Most recent list of observation messages from the environment's steps. + If more observations than the most recent list are necessary, track them + in the agent state. + + Returns: + Three-tuple of new action, new agent state, and estimated value. The + agent_state is returned as a copy so that you can safely mutate it + without affecting the original. The estimated value is the agent's + estimate of the future rewards given the input state and observations, + and is used for RL training. If estimated value doesn't matter, just + return 0. The value could also come from a Q-value evaluated at the + action chosen by the agent. + """
    + + +
    +[docs] + @abstractmethod + async def init_state(self, tools: list[Tool]) -> TAgentState: + """Initializes the first agent state with the provided tools."""
    + + +
    +[docs] + def named_ops(self) -> Iterable[tuple[str, Op]]: + """Analogous to torch.nn.Module.named_parameters().""" + return _find_ops(self)
    + + +
    +[docs] + @classmethod + def from_name(cls, name: str, **kwargs) -> Agent: + return _AGENT_REGISTRY[name](**kwargs)
    +
    + + + +
    +[docs] +class AgentConfig(BaseModel): + """Configuration for specifying the type of agent i.e. the subclass of Agent above.""" + + model_config = ConfigDict(extra="forbid") + + agent_type: str = Field( + description="The type of agent to be used. " + "This should be a subclass of Agent above.", + ) + agent_kwargs: dict[str, JsonValue] = Field( + default_factory=dict, + description="Keyword arguments to pass to the agent's constructor.", + ) + +
    +[docs] + def construct_agent(self) -> Agent: + return Agent.from_name(self.agent_type, **self.agent_kwargs)
    + + + def __hash__(self) -> int: + return hash(self.agent_type + json.dumps(self.agent_kwargs, sort_keys=True))
    + + + +def _find_ops( # noqa: C901 + root: object, root_name: str = "", visited: set[int] | None = None +) -> Iterable[tuple[str, Op]]: + """Recursive function to find children that are Ops and the attr chain to reach them. + + E.g. if root.module.op is an Op, then we will yield ("module.op", root.module.op). + These are not fully qualified names, but more like "locally qualified names". In the above + example, "root." + "module.op" is the fully qualified name. + This is an internal function - Agent.named_ops() should usually suffice. + + Args: + root: Any object that might hold Ops. + root_name: The name of the root object. Defaults to empty string and is passed as an arg to + make this method recursive. + visited: a set of visited node IDs to avoid loops. Defaults to None. + + Yields: + Two-tuple of (locally qualified name, Op) pairs + """ + # Recursive function to find children that are Ops and the + # attribute chain to reach them. + if visited is None: + visited = set() + + if isinstance(root, Op): + yield root_name, root + # Assume an Op may not have sub-Ops. I think this is sound, since + # we wouldn't be tracking the compute graph properly if it did. + return + + if "__pydantic_parent_namespace__" in root_name: + # Skip Pydantic internals + return + + # Don't recurse into PyTorch objects because they won't contain Ops + if torch is not None and ( # type: ignore[redundant-expr] + isinstance(root, torch.Tensor | torch.nn.Module) + ): + return + + # Similarly for numpy + if isinstance(root, np.ndarray): + return + + # loop through 3 types of containers: dicts, collections, and objects + if isinstance(root, Mapping): + named_attrs: Any = root.items() + elif isinstance(root, Sequence | Collection) and not isinstance(root, str | bytes): + named_attrs = enumerate(root) + elif hasattr(root, "__dict__"): + # object? + named_attrs = root.__dict__.items() + else: + # couldn't descend + return + + for k, v in named_attrs: + id_v = id(v) + if id_v not in visited: + # only visit each object once - avoid loops, etc. + visited.add(id_v) + if root_name: + k = f"{root_name}.{k}" + yield from _find_ops(v, root_name=k, visited=visited) +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent/agent_client.html b/docs/_build/html/_modules/ldp/agent/agent_client.html new file mode 100644 index 00000000..d520c0cb --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent/agent_client.html @@ -0,0 +1,260 @@ + + + + + + + ldp.agent.agent_client — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent.agent_client

    +import os
    +import secrets
    +from typing import TYPE_CHECKING, Annotated, TypeVar
    +
    +import httpx
    +from aviary.message import Message
    +from aviary.tools import Messages, Tool, ToolRequestMessage, ToolsAdapter
    +from pydantic import BaseModel
    +
    +from ldp.graph import OpResult, get_training_mode
    +
    +from .agent import Agent
    +from .simple_agent import SimpleAgentState
    +
    +if TYPE_CHECKING:
    +    from fastapi import FastAPI
    +
    +TSerializableAgentState = TypeVar("TSerializableAgentState", bound=BaseModel)
    +
    +
    +
    +[docs] +class HTTPAgentClient(Agent[TSerializableAgentState]): + """Interact with an Agent running in a server via POST requests.""" + + def __init__( + self, + agent_state_type: type[TSerializableAgentState], + server_url: str, + request_headers: httpx._types.HeaderTypes | None = None, + request_timeout: float | None = None, + ): + super().__init__() + self._agent_state_type = agent_state_type + self._request_url = server_url + self._request_headers = request_headers + self._request_timeout = request_timeout + +
    +[docs] + async def get_asv( + self, + agent_state: TSerializableAgentState, + obs: list[Message], + ) -> tuple[OpResult[ToolRequestMessage], TSerializableAgentState, float]: + async with httpx.AsyncClient() as client: + response = await client.post( + f"{self._request_url}/get_asv", + json={ + "agent_state": agent_state.model_dump(), + "obs": [m.model_dump() for m in obs], + "training": get_training_mode(), + }, + headers=self._request_headers, + timeout=self._request_timeout, + ) + response.raise_for_status() + response_data = response.json() + return ( + OpResult.from_dict(ToolRequestMessage, response_data[0]), + self._agent_state_type(**response_data[1]), + response_data[2], + )
    + + +
    +[docs] + async def init_state(self, tools: list[Tool]) -> TSerializableAgentState: + async with httpx.AsyncClient() as client: + response = await client.post( + f"{self._request_url}/init_state", + json=ToolsAdapter.dump_python(tools), + headers=self._request_headers, + timeout=self._request_timeout, + ) + response.raise_for_status() + return self._agent_state_type(**response.json())
    +
    + + + +
    +[docs] +def make_simple_agent_server( + agent: Agent[SimpleAgentState], render_docs: bool = False +) -> "FastAPI": + """ + Make a FastAPI app designed to work with the above HTTPAgentClient. + + Here's how this works: + 1. There is an entity orchestrating an Agent's interactions with an Environment. + A simple example of this is an integration test that sequentially calls + Agent.get_asv and Environment.step. + 2. That entity is given the above HTTPAgentClient. Any Agent.init_state or + Agent.get_asv calls the orchestration entity makes are actually + POST requests under the hood. The agent's "brains" aren't local. + 3. Remotely, this server code is running, and is where the actual Agent logic lives. + An example of this is a remote server containing GPU(s). + """ + try: + from fastapi import Body, Depends, FastAPI, HTTPException, status + from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer + except ModuleNotFoundError as exc: + raise ImportError( + "Please install aviary with the 'server' extra like so:" + " `pip install aviary[server]`." + ) from exc + + asgi_app = FastAPI( + title=f"aviary.Agent {type(agent).__name__}", + description="Serve inference endpoints for an aviary.Agent with a SimpleAgentState", + # Only render Swagger docs if local since we don't have a login here + docs_url="/docs" if render_docs else None, + redoc_url="/redoc" if render_docs else None, + ) + auth_scheme = HTTPBearer() + + async def validate_token( + token: Annotated[HTTPAuthorizationCredentials, Depends(auth_scheme)], + ) -> HTTPAuthorizationCredentials: + # NOTE: don't use os.environ.get() to avoid possible empty string matches, and + # to have clearer server failures if the AUTH_TOKEN env var isn't present + if not secrets.compare_digest(token.credentials, os.environ["AUTH_TOKEN"]): + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Incorrect bearer token", + headers={"WWW-Authenticate": "Bearer"}, + ) + return token + + @asgi_app.get("/info") + def info( + _: Annotated[HTTPAuthorizationCredentials, Depends(validate_token)], + ) -> dict[str, str]: + """Get agent metadata, useful for debugging.""" + return {"agent_type": type(agent).__name__} + + @asgi_app.post("/get_asv") + async def get_asv( + agent_state: SimpleAgentState, + obs: Messages, + _: Annotated[HTTPAuthorizationCredentials, Depends(validate_token)], + training: Annotated[bool, Body()] = True, + ) -> tuple[dict, SimpleAgentState, float]: + if training: + raise NotImplementedError("Training is not yet supported.") + action, agent_state, vhat = await agent.get_asv(agent_state, obs) + return action.to_dict(), agent_state, vhat + + @asgi_app.post("/init_state") + async def init_state( + tools: list[Tool], + _: Annotated[HTTPAuthorizationCredentials, Depends(validate_token)], + ) -> SimpleAgentState: + return await agent.init_state(tools) + + return asgi_app
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent/interactive_agent.html b/docs/_build/html/_modules/ldp/agent/interactive_agent.html new file mode 100644 index 00000000..89da7c21 --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent/interactive_agent.html @@ -0,0 +1,225 @@ + + + + + + + ldp.agent.interactive_agent — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent.interactive_agent

    +import contextlib
    +import json
    +from typing import Any
    +
    +from aviary.message import Message
    +from aviary.tools import Tool, ToolRequestMessage
    +from aviary.tools.base import ToolCall
    +
    +from ldp.graph import IdentityOp, OpResult, compute_graph
    +
    +from .agent import Agent
    +from .simple_agent import SimpleAgentState
    +
    +MISSING_DEFAULT = object()
    +CLEAR = "CLEAR"  # Clears the current input and allows the user to start over, e.g. if they made a mistake
    +EXIT = "EXIT"  # Exits the agent by raising a RuntimeError. Makes it possible to interrupt a rollout
    +
    +
    +
    +[docs] +class InteractiveAgent(Agent[SimpleAgentState]): + """An "agent" that provides an interface for human users to interact with environments.""" + + def __init__(self): + self.action_op = IdentityOp[ToolRequestMessage]() + +
    +[docs] + async def init_state(self, tools: list[Tool]) -> SimpleAgentState: + print() # add a newline to flush any progress bars, etc + print("AVAILABLE TOOLS:\n" + ("-" * 80)) + for tool in tools: + info = tool.info + docstring = f"{info.name}(" + arg_docs = [] + for pname, pprops in info.parameters.properties.items(): + docstring += self._get_param_string(pname, pprops) + ", " + arg_doc = " " + pname + if "description" in pprops: + arg_doc += ": " + pprops.get("description", "") + arg_docs.append(arg_doc) + + docstring = docstring.rstrip(", ") + "):\n" + docstring += " " + info.description + "\n\n" + docstring += "\n".join(arg_docs) + docstring += "\n" + print(docstring) + print("-" * 80) + return SimpleAgentState(tools=tools)
    + + +
    +[docs] + @compute_graph() + async def get_asv( # noqa: C901 + self, agent_state: SimpleAgentState, obs: list[Message] + ) -> tuple[OpResult[ToolRequestMessage], SimpleAgentState, float]: + print() # add a newline to flush any progress bars, etc + print("OBSERVATIONS:\n" + ("-" * 80)) + for msg in obs: + print((msg.content or "") + "\n") + print("-" * 80) + + next_agent_state = agent_state.get_next_state(obs) + + tool: Tool | None = None + while not tool: + tool_choice = input(">>> Select tool by name: ") + if tool_choice == CLEAR: + continue + if tool_choice == EXIT: + raise RuntimeError("User requested to kill the agent.") + + tool = next( + (t for t in agent_state.tools if t.info.name == tool_choice), None + ) + if not tool: + print( + f"Tool '{tool_choice}' not found. Please select from the above tools." + ) + + params: dict[str, Any] = {} + for pname, pprops in tool.info.parameters.properties.items(): + pdefault = pprops.get("default", MISSING_DEFAULT) + prompt = f">>> Enter parameter ({self._get_param_string(pname, pprops)}): " + while True: + value = input(prompt) + if value == CLEAR: + return await self.get_asv(agent_state, obs) # just start over + if value == EXIT: + raise RuntimeError("User requested to kill the agent.") + + with contextlib.suppress(json.JSONDecodeError): + # lets us load ints, etc. Otherwise, assume it's a string + value = json.loads(value) + if not value: + if pdefault is MISSING_DEFAULT: + print("Parameter is required.") + continue + + value = pdefault + + params[pname] = value + break + + tool_call = ToolCall.from_tool(tool, **params) + action = await self.action_op(ToolRequestMessage(tool_calls=[tool_call])) + + next_agent_state.messages = [*next_agent_state.messages, action.value] + + return action, next_agent_state, 0.0
    + + + @staticmethod + def _get_param_string(pname: str, pprops: dict[str, Any]) -> str: + pstring = pname + if ptype := (pprops.get("type") or "Any"): + pstring += f": {ptype}" + + if (pdefault := pprops.get("default", MISSING_DEFAULT)) is not MISSING_DEFAULT: + pstring += f" = {pdefault}" + return pstring
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent/memory_agent.html b/docs/_build/html/_modules/ldp/agent/memory_agent.html new file mode 100644 index 00000000..588d3cd1 --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent/memory_agent.html @@ -0,0 +1,235 @@ + + + + + + + ldp.agent.memory_agent — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent.memory_agent

    +"""This module defines the MemoryAgent class, which extends a base agent model with memory.
    +
    +capabilities. The MemoryAgent can pick and invoke tools based on the stored and retrieved
    +memories, formatted using specified prompts. A memory is typically a set of previous trajectories
    +"""
    +
    +from collections.abc import Awaitable, Callable, Iterable
    +from typing import ClassVar, cast
    +
    +from aviary.message import Message
    +from aviary.tools import ToolRequestMessage
    +from pydantic import ConfigDict, Field
    +
    +from ldp.graph import (
    +    FxnOp,
    +    Memory,
    +    MemoryModel,
    +    MemoryOp,
    +    OpResult,
    +    PromptOp,
    +    compute_graph,
    +)
    +from ldp.llms.prompts import indent_xml
    +
    +from .simple_agent import SimpleAgent, SimpleAgentState
    +
    +
    +async def _default_query_factory(messages: Iterable[Message]) -> str:
    +    return "\n\n".join([str(m) for m in messages if m.role != "system"])
    +
    +
    +
    +[docs] +class MemoryAgent(SimpleAgent): + """ + Simple agent that can pick and invoke tools with memory. + + NOTE: the MemoryAgent does not maintain an explicit value estimate, + it simply supplies previous trajectories via the prompt. + As such, the value estimate vhat will always be zero. + """ + + # Working around https://github.com/pydantic/pydantic/issues/10551 + default_query_factory: ClassVar[Callable[[Iterable[Message]], Awaitable[str]]] = ( + _default_query_factory + ) + + prompt: str = Field( + default=( + "<episode-memories>\n<description>\n" + "These are relevant memories from previous attempts at similar tasks, " + "along with the action taken and the discounted cumulative reward from that action. " + "A negative reward is failure, a positive reward is success.\n" + "</description>{memories}</episode-memories>\n\n" + "Considering the memories, choose the next action." + ), + description="Prompt that includes the memories.", + ) + query_factory: Callable[[Iterable[Message]], Awaitable[str]] = Field( + default=default_query_factory, + description=( + "Async function to generate a Memory query string from messages. It's async" + " so this can involve an LLM completion if desired." + ), + exclude=True, + ) + memory_prompt: str = Field( + default="<memory><obs>{input}</obs><action>{output}</action><reward>{value}</reward></memory>", + description="Prompt for formatting an individual memory. " + "Use XML instead of JSON to avoid potential escaping issues.", + ) + num_memories: int = Field( + default=MemoryModel.DEFAULT_MEMORY_MATCHES, + description="Number of memories to retrieve from MemoryOp", + ) + # Freeze to ensure the only mutation happens in either the agent state (which is + # passed around) or in the internal Ops + model_config = ConfigDict(frozen=True) + + @staticmethod + def _format_memories(prompt: str, memories: Iterable[Memory]) -> str: + return indent_xml( + "\n".join([ + prompt.format(**m.model_dump(exclude={"run_id", "template"})) + for m in memories + ]) + ) + + @staticmethod + def _package_messages( + msgs: list[Message], memory_prompt: str, use_memories: bool + ) -> list[Message]: + if use_memories: + return [*msgs, Message(content=memory_prompt)] + return msgs + + def __init__(self, memory_model: MemoryModel | None = None, **kwargs): + super().__init__(**kwargs) + self._query_factory_op = FxnOp[str](self.query_factory) + self._memory_op = MemoryOp(memory_model) + self._format_memory_op = FxnOp(self._format_memories) + self._prompt_op = PromptOp(self.prompt) + self._package_op = FxnOp(self._package_messages) + +
    +[docs] + @compute_graph() + async def get_asv( + self, agent_state: SimpleAgentState, obs: list[Message] + ) -> tuple[OpResult[ToolRequestMessage], SimpleAgentState, float]: + next_state = agent_state.get_next_state(obs) + + memories = await self._memory_op( + query=await self._query_factory_op(next_state.messages), + matches=self.num_memories, + ) + packaged_messages = await self._package_op( + next_state.messages, + memory_prompt=await self._prompt_op( + memories=await self._format_memory_op(self.memory_prompt, memories) + ), + use_memories=bool(memories.value), + ) + result = cast( + OpResult[ToolRequestMessage], + await self._llm_call_op( + await self._config_op(), msgs=packaged_messages, tools=next_state.tools + ), + ) + next_state.messages = [*next_state.messages, result.value] + return result, next_state, 0.0
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent/react_agent.html b/docs/_build/html/_modules/ldp/agent/react_agent.html new file mode 100644 index 00000000..1dba1962 --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent/react_agent.html @@ -0,0 +1,255 @@ + + + + + + + ldp.agent.react_agent — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent.react_agent

    +import logging
    +from typing import Any, Self, cast
    +
    +from aviary.message import MalformedMessageError, Message
    +from aviary.tools import Tool, ToolRequestMessage, ToolResponseMessage
    +from pydantic import BaseModel, ConfigDict, Field
    +from tenacity import (
    +    Future,
    +    RetryCallState,
    +    before_sleep_log,
    +    retry,
    +    retry_if_exception_type,
    +    stop_after_attempt,
    +)
    +
    +from ldp.graph import OpResult, compute_graph
    +from ldp.graph.modules.react import (
    +    ACT_DEFAULT_PROMPT_TEMPLATE,
    +    REACT_DEFAULT_PROMPT_TEMPLATE,
    +    ReActModule,
    +    ToolDescriptionMethods,
    +)
    +
    +from . import DefaultLLMModelNames
    +from .agent import Agent
    +from .simple_agent import SimpleAgentState
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class ReActAgent(BaseModel, Agent[SimpleAgentState]): + """An Act or ReAct Agent built to work with chat models. + + Paper: https://arxiv.org/abs/2210.03629 + + The ReAct style is like so, and note Act style has no 'Thought: ' entries: + System: + Answer the following questions as best you can. You have access to the following tools: + + {tools} + + Use the following format: + + Thought: you should always think about what to do + Action: the action to take, should be one of [{tool_names}] + Action Input: the input to the action + Observation: the result of the action + ... (this Thought/Action/Action Input/Observation can repeat N times) + User: + {questions} + Assistant: + Thought: + Action: + Action Input: + User: + Observation: + Assistant: + Thought: + Action: + Action Input: + ... + + One notable design decision is that ReAct's state does not necessarily + track ToolRequestMessage. Recall that aviary is in a partially observable + domain, meaning we don't need to have perfect symmetry with Environments. + Instead, ReActAgent's state stores a ReAct-style message history, where the + messages are plain Message (and not a ToolRequestMessage). + """ + + # Freeze to ensure the only mutation happens in either the agent state (which is + # passed around) or in the internal Ops + model_config = ConfigDict(frozen=True) + + llm_model: dict[str, Any] = Field( + default={ + "model": DefaultLLMModelNames.OPENAI.value, + "temperature": 0.1, + "logprobs": True, + "top_logprobs": 1, + }, + description="Starting configuration for the LLM model.", + ) + sys_prompt: str = Field( + default=REACT_DEFAULT_PROMPT_TEMPLATE, + description="Learnable system prompt template, defaults to ReAct.", + ) + tool_description_method: ToolDescriptionMethods = Field( + default=ToolDescriptionMethods.STR, + description="Method used to describe the tools, defaults to 'str' description.", + ) + +
    +[docs] + @classmethod + def make_act_agent(cls, **kwargs) -> Self: + return cls(sys_prompt=ACT_DEFAULT_PROMPT_TEMPLATE, **kwargs)
    + + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self._react_module = ReActModule( + self.llm_model, self.sys_prompt, self.tool_description_method + ) + +
    +[docs] + async def init_state(self, tools: list[Tool]) -> SimpleAgentState: + return SimpleAgentState(tools=tools)
    + + +
    +[docs] + @staticmethod + def after_retry_failure_log(retry_state: RetryCallState): + logger.error( + f"Failed across {retry_state.attempt_number} attempts to run get_asv given" + f" arguments {retry_state.args} and kwargs {retry_state.kwargs}." + ) + # NOTE: this blows up with the underlying exception... it isn't wrapped in a + # RetryError like normal tenacity + return cast(Future, retry_state.outcome).result()
    + + +
    +[docs] + @retry( + retry=retry_if_exception_type(MalformedMessageError), + before_sleep=before_sleep_log(logger, logging.WARNING), + stop=stop_after_attempt(5), + retry_error_callback=after_retry_failure_log, + ) + @compute_graph() + async def get_asv( + self, agent_state: SimpleAgentState, obs: list[Message] + ) -> tuple[OpResult[ToolRequestMessage], SimpleAgentState, float]: + next_state = agent_state.get_next_state( + obs=[ + Message(content=f"Observation: {m.content}") + if isinstance(m, ToolResponseMessage) + else m + for m in obs + ] + ) + + final_result, react_message = await self._react_module( + messages=next_state.messages, tools=next_state.tools + ) + next_state.messages = [*next_state.messages, react_message] + return final_result, next_state, 0.0
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent/simple_agent.html b/docs/_build/html/_modules/ldp/agent/simple_agent.html new file mode 100644 index 00000000..012a7c1e --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent/simple_agent.html @@ -0,0 +1,217 @@ + + + + + + + ldp.agent.simple_agent — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent.simple_agent

    +from __future__ import annotations
    +
    +from typing import Any, Self, cast
    +
    +from aviary.message import Message
    +from aviary.tools import Tool, ToolRequestMessage, ToolResponseMessage
    +from pydantic import BaseModel, ConfigDict, Field
    +
    +from ldp.graph import ConfigOp, LLMCallOp, OpResult, compute_graph
    +from ldp.llms import prepend_sys
    +
    +from . import DefaultLLMModelNames
    +from .agent import Agent
    +
    +
    +
    +[docs] +class SimpleAgentState(BaseModel): + """Simple bucket for an Agent to access tools and store messages.""" + + tools: list[Tool] = Field(default_factory=list) + messages: list[ToolRequestMessage | ToolResponseMessage | Message] = Field( + default_factory=list + ) + +
    +[docs] + def get_next_state( + self, + obs: list[Message] | None = None, + tools: list[Tool] | None = None, + **kwargs, + ) -> Self: + """ + Get the next agent state without mutating the optional prior state. + + Do not mutate self here, just read from it. + + Args: + obs: Optional observation messages to use in creating the next state. + tools: Optional list of tools available to the agent. If unspecified, these + should be pulled from the prior_state. + kwargs: Additional keyword arguments to pass to this class's constructor. + + Returns: + The next agent state (which is not an in-place change to self). + """ + return type(self)( + tools=tools if tools is not None else self.tools, + messages=self.messages + (obs or []), + **kwargs, + )
    +
    + + + +
    +[docs] +class SimpleAgent(BaseModel, Agent[SimpleAgentState]): + """Simple agent that can pick and invoke tools with a language model. + + It does not have a system prompt because it's meant to be lightweight. + """ + + # Freeze to ensure the only mutation happens in either the agent state (which is + # passed around) or in the internal Ops + model_config = ConfigDict(frozen=True) + + llm_model: dict[str, Any] = Field( + default={"model": DefaultLLMModelNames.OPENAI.value, "temperature": 0.1}, + description="Starting configuration for the LLM model. Trainable.", + ) + sys_prompt: str | None = Field( + default=None, + description=( + "Opt-in system prompt. If one is passed, the system prompt is not set up to" + " be trainable, because this class is meant to be quite simple as far as" + " possible hyperparameters." + ), + ) + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self._config_op = ConfigOp[dict](config=self.llm_model) + self._llm_call_op = LLMCallOp() + +
    +[docs] + async def init_state(self, tools: list[Tool]) -> SimpleAgentState: + return SimpleAgentState(tools=tools)
    + + +
    +[docs] + @compute_graph() + async def get_asv( + self, agent_state: SimpleAgentState, obs: list[Message] + ) -> tuple[OpResult[ToolRequestMessage], SimpleAgentState, float]: + next_state = agent_state.get_next_state(obs) + + messages = ( + prepend_sys(next_state.messages, sys_content=self.sys_prompt) + if self.sys_prompt is not None + else next_state.messages + ) + result = cast( + OpResult[ToolRequestMessage], + await self._llm_call_op( + await self._config_op(), msgs=messages, tools=next_state.tools + ), + ) + next_state.messages = [*next_state.messages, result.value] + return result, next_state, 0.0
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/agent/tree_of_thoughts_agent.html b/docs/_build/html/_modules/ldp/agent/tree_of_thoughts_agent.html new file mode 100644 index 00000000..f8bca7ff --- /dev/null +++ b/docs/_build/html/_modules/ldp/agent/tree_of_thoughts_agent.html @@ -0,0 +1,251 @@ + + + + + + + ldp.agent.tree_of_thoughts_agent — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.agent.tree_of_thoughts_agent

    +"""Module for the Tree of Thoughts agent.
    +
    +This module defines the Tree of Thoughts agent which uses a language model to generate and evaluate possible
    +steps in a puzzle or problem-solving environment. The agent employs a tree search mechanism to explore different
    +solutions and selects the most promising ones based on evaluations.
    +
    +This module is based on the following paper: https://openreview.net/forum?id=5Xc1ecxO1h
    +
    +Note: TreeofThoughtsAgent is currently tested as a baseline agent for Game of 24. It does not yet support tool calls
    +that operate on the intermediate reasoning steps. This would probably entail a redefinition of the POMDP to
    +undertake intermediate reasoning steps as environment steps.
    +"""
    +
    +import logging
    +from collections.abc import Callable
    +from typing import Any
    +
    +from aviary.message import Message
    +from aviary.tools import Tool, ToolCall, ToolRequestMessage
    +from pydantic import BaseModel, ConfigDict, Field
    +
    +from ldp.graph import FxnOp, LLMCallOp, OpResult, compute_graph, get_call_id, op_call
    +from ldp.llms import prepend_sys
    +
    +from . import DefaultLLMModelNames
    +from .agent import Agent
    +from .simple_agent import SimpleAgentState
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class TreeofThoughtsAgent(BaseModel, Agent[SimpleAgentState]): + """Tree of Thoughts Agent. + + This agent uses a tree search mechanism combined with an LLM to generate and evaluate + possible steps in a problem-solving environment. It is designed to explore different solutions + and select the most promising ones based on a heuristic evaluation function. + """ + + # Freeze to ensure the only mutation happens in either the agent state (which is + # passed around) or in the internal Ops + model_config = ConfigDict(frozen=True) + + llm_model: dict[str, Any] = Field( + default={"model": DefaultLLMModelNames.OPENAI.value, "temperature": 0.1}, + description="Starting configuration for the LLM model.", + ) + value_prompt_func: Callable[[str, str], str] = Field( + default=lambda x, y: f"Value prompt for input: {x}, current path: {y}", + description="Function to format value prompt template.", + ) + proposal_prompt_func: Callable[[str, str], str] = Field( + default=lambda x, y: f"Proposal prompt for input: {x}, current path: {y}", + description="Function to format proposal prompt template.", + ) + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self._prepend_op = FxnOp(prepend_sys) + self._llm_call_op = LLMCallOp() + +
    +[docs] + async def init_state(self, tools: list[Tool]) -> SimpleAgentState: + return SimpleAgentState(tools=tools)
    + + +
    +[docs] + @compute_graph() + async def get_asv( # type: ignore[override] + self, + agent_state: SimpleAgentState, + obs: list[Message], + eval_function: Callable[[str, list[str]], float], + n_steps: int = 0, + n_select_samples: int = 0, + ) -> tuple[OpResult[ToolRequestMessage], SimpleAgentState, float]: + """Generate and evaluate possible steps in the problem-solving process. + + Args: + agent_state: The current state of the agent. + obs: The observations provided to the agent. + eval_function: Function to evaluate the generated paths in the tree. + n_steps: Number of steps to generate. Defaults to 0. Dictated by the environment. + n_select_samples: Number of tree nodes to select to explore in each step. Defaults to 0. + + Returns: + The result of the operation, the new state of the agent, and the number representing the value (0). + """ + new_state = agent_state.get_next_state() + + x = str(obs[0].content) # Current problem input + current_paths = [""] # current candidate paths through the tree + + for step in range(n_steps): + logger.info(f"Step {step}") + + # propose candidate paths + candidate_paths = [] + for path in current_paths: + proposal_prompt_init = self.proposal_prompt_func(x, path) + proposal_msgs = await self._prepend_op( + new_state.messages, sys_content=proposal_prompt_init + ) + proposal = await self._llm_call_op(self.llm_model, msgs=proposal_msgs) + # Append candidate paths to the current paths + candidate_paths += [ + path + _ + "\n" + for _ in (proposal.value.content or "").split("\n") + if _ + ] + + # score candidate paths + values = [] + for path in candidate_paths: + value_prompt_init = self.value_prompt_func(x, path) + value_msgs = await self._prepend_op( + new_state.messages, sys_content=value_prompt_init + ) + value_outputs = await self._llm_call_op(self.llm_model, msgs=value_msgs) + values.append(eval_function(path, [value_outputs.value.content or ""])) + + # greedy selection + values_with_index = [(v, i) for i, v in enumerate(values)] + sorted_values = sorted(values_with_index, key=lambda x: x[0], reverse=True) + select_ids = [i for _, i in sorted_values[:n_select_samples]] + select_new_paths = [candidate_paths[select_id] for select_id in select_ids] + current_paths = select_new_paths + + # Generate tool calls for the selected answer + tool_calls = [ + ToolCall.from_tool(tool, *[current_paths[0]]) for tool in new_state.tools + ] + result = ToolRequestMessage(content=current_paths[0], tool_calls=tool_calls) + + new_state.messages = [*new_state.messages, result] + async with op_call(): + op_result: OpResult[ToolRequestMessage] = OpResult( + call_id=get_call_id(), + op_name="TreeofThoughtsAgentOp", + op_class_name=type(self).__name__, + value=result, + ) + return op_result, new_state, 0.0
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/algorithms.html b/docs/_build/html/_modules/ldp/alg/algorithms.html new file mode 100644 index 00000000..c02eae30 --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/algorithms.html @@ -0,0 +1,226 @@ + + + + + + + ldp.alg.algorithms — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.algorithms

    +import itertools
    +from collections.abc import Sequence
    +from typing import Any
    +
    +import networkx as nx
    +from aviary.message import Message, join
    +from aviary.tools import Tool, ToolRequestMessage
    +
    +from ldp.graph import OpResult
    +from ldp.graph.ops import GradOutType
    +
    +
    +
    +[docs] +def to_network( # noqa: C901 + op_result: OpResult, + max_label_height: int | None = None, + max_label_width: int | None = None, + G: "nx.MultiDiGraph | None" = None, +) -> "nx.MultiDiGraph": + """ + Populate a NetworkX graph from the input op result's computation graph. + + How to export Graphviz .dot file: nx.drawing.nx_pydot.write_dot(G, "file.dot") + How to render with Graphviz: nx.drawing.nx_pydot.to_pydot(G).write_png("file.png") + Online Graphviz renderer: https://dreampuf.github.io/GraphvizOnline/ + + Args: + op_result: Starting op result to recurse parent op calls and results. + max_label_height: Optional max label height (lines). + max_label_width: Optional max label width (chars). + G: Optional graph to add nodes/edges to. Allows this to be a recursive function. + + Returns: + Populated a NetworkX multi-edge directed graph. + """ + + def gvizify(x: Any) -> str: + """Stringify and then escape colons for Graphviz labels.""" + if isinstance(x, OpResult): + x = x.value + if isinstance(x, Sequence): + if isinstance(x[0], Message): + x = join(x) + elif isinstance(x[0], Tool): + x = "\n".join(f"Tool {t.info.name}" for t in x) + elif isinstance(x, ToolRequestMessage): + # reformatting tool calls to make them easier to read + x = str(x).split(" for tool calls: ") + x = "\n".join(x).replace("; ", "\n") + result = ( + "\n".join( + # Replace double quotes since they can interfere with colon escapes + # Strip here to avoid trailing spaces in the labels + x_line[:max_label_width].replace('"', "'").strip() + for i, x_line in enumerate(str(x).split("\n")) + if not max_label_height or i < max_label_height + ) + ).strip() # Remove trailing newlines + return result if ":" not in result else f'"{result}"' # Escape colons + + call_id = op_result.call_id + assert ( + call_id is not None + ), "to_network currently assumes a compute graph is available" + ctx = op_result.ctx + + op_result_str = gvizify(op_result) + op_result_node = gvizify(f"{op_result_str}\n{call_id.fwd_id}") + if G is None: + # TODO: figure out a way to use OpResult.get_compute_graph(), which builds + # a nx.DiGraph. + G = nx.MultiDiGraph() + + op_call_str = gvizify(f"{ctx.op_name}:{call_id.fwd_id}") + if op_call_str in G: + # We have already visited this node - can skip. + return G + + G.add_node(op_result_node, style="dotted", label=op_result_str) + G.add_edge(op_call_str, op_result_node) + + if ( + result_grad := ctx.get(key="grad_output", call_id=call_id, default=None) + ) is not None: + G.add_edge( + op_result_node, + op_call_str, + label=gvizify(result_grad), + style="dotted", + ) + + input_args, input_kwargs = op_result.inputs + grads = ctx.get(key="grad_input", call_id=call_id, default=None) + if grads is None: + arg_grads: list[GradOutType | None] = [None] * len(input_args) + kwarg_grads: dict[str, GradOutType | None] = dict.fromkeys(input_kwargs) + else: + arg_grads, kwarg_grads = grads + + args_and_grads = itertools.chain( + zip(input_args, arg_grads, strict=True), + ((arg, kwarg_grads[key]) for key, arg in input_kwargs.items()), + ) + + for arg, grad in args_and_grads: + arg_str = gvizify(arg) + + if not isinstance(arg, OpResult): + G.add_node(arg_str, style="dotted") + + else: + arg_str = gvizify(f"{arg_str}\n{arg.call_id.fwd_id}") + G = to_network( + arg, + max_label_height=max_label_height, + max_label_width=max_label_width, + G=G, + ) + + G.add_edge(arg_str, op_call_str) + if grad is not None: + G.add_edge(op_call_str, arg_str, label=gvizify(grad), style="dotted") + + return G
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/beam_search.html b/docs/_build/html/_modules/ldp/alg/beam_search.html new file mode 100644 index 00000000..07142dfe --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/beam_search.html @@ -0,0 +1,329 @@ + + + + + + + ldp.alg.beam_search — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.beam_search

    +import asyncio
    +import uuid
    +from collections.abc import Awaitable, Callable, Sequence
    +from contextlib import suppress
    +from typing import NamedTuple
    +
    +from aviary.env import Environment
    +
    +from ldp.agent.agent import Agent, TAgentState
    +from ldp.data_structures import Trajectory, Transition
    +
    +from .callbacks import Callback
    +from .rollout import AgentError, EnvError, TEnv, reraise_exc_as
    +
    +
    +
    +[docs] +class Beam(NamedTuple): + # An ongoing beam contains two things: the trajectory up to now + # and the environment that the last action was sampled from. We + # need both to continue sampling the next step. + traj: Trajectory + env: Environment
    + + + +
    +[docs] +class BeamSearchRollout: + def __init__( + self, + agent: Agent, + beam_width: int, + samples_per_beam: int, + env_clone_fn: Callable[[TEnv], Awaitable[TEnv]], + agent_clone_fn: Callable[[TAgentState], TAgentState], + scoring_fn: Callable[[Trajectory], Awaitable[float]], + replay_actions_on_clone: bool = False, + callbacks: Sequence[Callback] | None = None, + catch_agent_failures: bool = True, + catch_env_failures: bool = True, + verbose: bool = False, + ): + self.agent = agent + + self.catch_agent_failures = catch_agent_failures + self.catch_env_failures = catch_env_failures + + self.verbose = verbose + + self.traj_buffer: dict[str, Trajectory] = {} + self.search_buffer: dict[str, list[Trajectory]] = {} + + self.beam_width = beam_width + self.samples_per_beam = samples_per_beam + + self.env_clone_fn = env_clone_fn + self.agent_clone_fn = agent_clone_fn + self.scoring_fn = scoring_fn + self.replay_actions_on_clone = replay_actions_on_clone + + self.callbacks = callbacks or [] + +
    +[docs] + async def sample_trajectories( + self, + environments: Sequence[Environment], + max_steps: int | None = None, + ) -> list[Trajectory]: + self.traj_buffer.clear() + traj_ids = [uuid.uuid4().hex for _ in environments] + + tasks = [ + self._rollout(traj_id, env, max_steps) + for traj_id, env in zip(traj_ids, environments, strict=True) + ] + await asyncio.gather(*tasks) + + return [self.traj_buffer[traj_id] for traj_id in traj_ids]
    + + + async def _rollout( + self, traj_id: str, env: Environment, max_steps: int | None + ) -> None: + with suppress(AgentError, EnvError): + # for samples_per_beam==1. we want to ensemble and pick the highest-scoring one + n_seeds = 1 if self.samples_per_beam > 1 else self.beam_width + + done_beams: list[Beam] = [] + beams = [ + Beam(traj=Trajectory(traj_id=f"{traj_id}:{i}"), env=env) + for i in range(n_seeds) + ] + # will be replaced if rollout is successful + self.traj_buffer[traj_id] = beams[0].traj + self.search_buffer[traj_id] = [] + + with reraise_exc_as(EnvError, self.catch_env_failures): + init_obs, tools = await env.reset() + await asyncio.gather(*[ + c.after_env_reset(traj_id, init_obs, tools) for c in self.callbacks + ]) + + with reraise_exc_as(AgentError, self.catch_agent_failures): + seed_agent_states = await asyncio.gather( + *(self.agent.init_state(tools) for _ in range(n_seeds)) + ) + # TODO: implement after_agent_init_state callback + + while len(done_beams) < self.beam_width and beams: + new_beams = [] + for beam, seed_agent_state in zip( + beams, seed_agent_states, strict=True + ): + for i_sample in range(self.samples_per_beam): + new_env = await self._clone_env(beam) + if new_env is None: + continue + + agent_state = self.agent_clone_fn(seed_agent_state) + obs = ( + beam.traj.steps[-1].next_observation + if beam.traj.steps + else init_obs.copy() + ) + + await asyncio.gather(*[ + callback.before_transition( + traj_id, self.agent, env, agent_state, obs + ) + for callback in self.callbacks + ]) + + with reraise_exc_as(AgentError, self.catch_agent_failures): + ( + action, + next_agent_state, + vhat, + ) = await self.agent.get_asv(agent_state, obs) + await asyncio.gather(*[ + callback.after_agent_get_asv( + traj_id, action, next_agent_state, vhat + ) + for callback in self.callbacks + ]) + + with reraise_exc_as(EnvError, self.catch_env_failures): + next_obs, reward, done, trunc = await new_env.step( + action.value + ) + await asyncio.gather(*[ + callback.after_env_step( + traj_id, next_obs, reward, done, trunc + ) + for callback in self.callbacks + ]) + + step = Transition( + timestep=len(beam.traj.steps), + agent_state=agent_state, + next_agent_state=next_agent_state, + observation=obs, + next_observation=next_obs, + action=action, + reward=reward, + done=done, + truncated=trunc, + value=0.0, # will be filled in + ) + await asyncio.gather(*[ + callback.after_transition(traj_id, self.agent, env, step) + for callback in self.callbacks + ]) + + new_beam = Beam( + traj=Trajectory( + traj_id=beam.traj.traj_id + f":{i_sample}", # type: ignore[operator] + steps=[*beam.traj.steps, step], + ), + env=new_env, + ) + step.value = await self.scoring_fn(new_beam.traj) + self.search_buffer[traj_id].append(new_beam.traj) + + if ( + not new_beam.traj.done + and max_steps is not None + and len(new_beam.traj.steps) >= max_steps + ): + last_step = new_beam.traj.steps[-1] + last_step.done = last_step.truncated = True + + if new_beam.traj.done: + done_beams.append(new_beam) + else: + new_beams.append(new_beam) + + new_beams.sort(key=lambda b: b.traj.steps[-1].value, reverse=True) + beams, discarded = ( + new_beams[: self.beam_width], + new_beams[self.beam_width :], + ) + seed_agent_states = [b.traj.steps[-1].next_agent_state for b in beams] + await asyncio.gather(*[d.env.close() for d in discarded]) + + await asyncio.gather(*[b.env.close() for b in beams]) + + self.traj_buffer[traj_id] = max( + done_beams, + key=lambda b: (b.traj.steps[-1].truncated, b.traj.steps[-1].value), + ).traj + + async def _clone_env(self, beam: Beam) -> Environment | None: + try: + with reraise_exc_as(EnvError, self.catch_env_failures): + # I'm not sure how to type hint this + env = await self.env_clone_fn(beam.env) # type: ignore[arg-type] + if self.replay_actions_on_clone: + # Some envs can't be cloned, so instead replay. + # We rely on env_clone_fn to properly reset the env if needed. + # We assume a deterministic env, so the return values are discarded. + for step in beam.traj.steps: + if step.action is not None: + _ = await env.step(step.action.value) + return env + except EnvError: + return None
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/callbacks.html b/docs/_build/html/_modules/ldp/alg/callbacks.html new file mode 100644 index 00000000..9fadfc52 --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/callbacks.html @@ -0,0 +1,758 @@ + + + + + + + ldp.alg.callbacks — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.callbacks

    +import json
    +import logging
    +import os
    +import time
    +from collections import defaultdict
    +from collections.abc import Collection, Iterable, Sequence
    +from pathlib import Path
    +from typing import Any, cast
    +
    +import aiofiles
    +from aviary.env import Environment, TaskDataset
    +from aviary.message import Message
    +from aviary.tools import MessagesAdapter, Tool, ToolRequestMessage
    +
    +from ldp.agent import Agent
    +from ldp.data_structures import Trajectory, Transition
    +from ldp.graph import OpCtx, OpResult
    +
    +try:
    +    import wandb
    +except ImportError:
    +    wandb = None  # type: ignore[assignment]
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class Callback: + """Base class for callbacks used by RolloutManager/Evaluator/OnlineTrainer. + + Pseudocode to demonstrate how callback methods are invoked (marked as *): + + RolloutManager.sample_trajectories(): + env.reset() + callback.after_env_reset() * + agent.init_state() + callback.after_agent_init_state() * + while not done: + callback.before_transition() * + agent.get_asv() + callback.after_agent_get_asv() * + env.step() + callback.after_env_step() * + callback.after_transition() * + + Evaluator.evaluate / OnlineTrainer._eval_loop(): + callback.before_eval_loop() * + for batch in eval_dataset: + rollout_manager.sample_trajectories() + callback.after_eval_step() * + callback.after_eval_loop() * + + OfflineTrainer / OnlineTrainer.train(): + for batch in train_dataset: + rollout_manager.sample_trajectories() # if online + optimizer.aggregate() + if updating_optimizer: + optimizer.update() + callback.after_update() * + callback.after_train_step() * + """ + +
    +[docs] + async def before_transition( + self, + traj_id: str, + agent: Agent, + env: Environment, + agent_state: Any, + obs: list[Message], + ) -> None: + """Invoked by runners before each transition and after agent and env reset."""
    + + +
    +[docs] + async def after_agent_init_state(self, traj_id: str, init_state: Any) -> None: + """Invoked by runners after agent.init_state()."""
    + + +
    +[docs] + async def after_agent_get_asv( + self, + traj_id: str, + action: OpResult[ToolRequestMessage], + next_agent_state: Any, + value: float, + ) -> None: + """Invoked by runners after agent.get_asv()."""
    + + +
    +[docs] + async def after_env_reset( + self, traj_id: str, obs: list[Message], tools: list[Tool] + ) -> None: + """Invoked by runners after env.reset()."""
    + + +
    +[docs] + async def after_env_step( + self, traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool + ) -> None: + """Invoked by runners after env.step()."""
    + + +
    +[docs] + async def after_transition( + self, traj_id: str, agent: Agent, env: Environment, transition: Transition + ) -> None: + """Invoked by runners after each transition."""
    + + +
    +[docs] + async def after_train_step(self, trajectories: Sequence[Trajectory]) -> None: + """Invoked by OnlineTrainer after each training step."""
    + + +
    +[docs] + async def before_eval_loop(self) -> None: + """Invoked by Evaluator and OnlineTrainer before the evaluation loop."""
    + + +
    +[docs] + async def after_eval_step(self, trajectories: Sequence[Trajectory]) -> None: + """Invoked by Evaluator and OnlineTrainer after each evaluation step."""
    + + +
    +[docs] + async def after_eval_loop(self) -> None: + """Invoked by Evaluator and OnlineTrainer after the evaluation loop."""
    + + +
    +[docs] + async def after_update(self) -> None: + """Invoked by OnlineTrainer after each optimizer.update() call."""
    +
    + + + +
    +[docs] +class TrajectoryFileCallback(Callback): + """Callback that writes trajectories to a file.""" + + def __init__(self, output_dir: os.PathLike | str): + self.output_dir = Path(output_dir) + self.output_dir.mkdir(parents=True, exist_ok=True) + + self.out_files: dict[str, Path] = {} + self.trajs: dict[str, Trajectory] = defaultdict(Trajectory) + + def _make_filename(self, traj_id: str, env: Environment) -> str: + """Create the filename for the output file.""" + return f"{traj_id}.jsonl" + +
    +[docs] + async def before_transition( + self, + traj_id: str, + agent: Agent, + env: Environment, + agent_state: Any, + obs: list[Message], + ) -> None: + if traj_id not in self.out_files: + self.out_files[traj_id] = self.output_dir / self._make_filename( + traj_id, env + )
    + + +
    +[docs] + async def after_transition( + self, traj_id: str, agent: Agent, env: Environment, transition: Transition + ) -> None: + assert traj_id in self.out_files + traj = self.trajs[traj_id] + traj.steps.append(transition) + # TODO: make this async? + traj.to_jsonl(self.out_files[traj_id])
    + + +
    +[docs] + def cleanup(self) -> None: + for out_file in self.out_files.values(): + if out_file.exists(): + out_file.unlink()
    +
    + + + +
    +[docs] +class RolloutDebugDumpCallback(Callback): + """Dump JSONL files for each agent and environment step to a directory.""" + + def __init__(self, output_dir: os.PathLike | str): + """Initialize. + + Args: + output_dir: Directory to place JSONL files. + """ + self.output_dir = Path(output_dir) + self.output_dir.mkdir(parents=True, exist_ok=True) + + self.out_files: dict[str, Path] = {} + + def _get_out_file(self, traj_id: str) -> Path: + if traj_id not in self.out_files: + self.out_files[traj_id] = self.output_dir / f"{traj_id}.jsonl" + return self.out_files[traj_id] + +
    +[docs] + async def before_transition( + self, + traj_id: str, + agent: Agent, + env: Environment, + agent_state, + obs: list[Message], + ) -> None: + self.start = time.time()
    + + + def _get_elapsed_time(self, reset: bool = True) -> float: + elapsed = time.time() - self.start + if reset: + self.start = time.time() + return elapsed + +
    +[docs] + async def after_agent_get_asv( + self, + traj_id: str, + action: OpResult[ToolRequestMessage], + next_agent_state: Any, + value: float, + ) -> None: + log_jsonl = json.dumps({ + "event": "AGENT_GET_ASV", + "elapsed": self._get_elapsed_time(), + "action": action.value.model_dump(), + "value": value, + }) + async with aiofiles.open(self._get_out_file(traj_id), "a") as f: + await f.write(log_jsonl + "\n")
    + + +
    +[docs] + async def after_env_step( + self, traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool + ) -> None: + log_jsonl = json.dumps({ + "event": "ENV_STEP", + "elapsed": self._get_elapsed_time(), + "obs": MessagesAdapter.dump_python(obs), + "reward": reward, + "done": done, + "truncated": trunc, + }) + async with aiofiles.open(self._get_out_file(traj_id), "a") as f: + await f.write(log_jsonl + "\n")
    +
    + + + +
    +[docs] +class ComputeTrajectoryMetricsMixin: + """Mixin for TaskDataset classes to enable them to compute metrics.""" + + # Tools or tool names to include in trajectory metrics + tools_to_track: Collection[str | Tool] = set() + +
    +[docs] + def compute_trajectory_metrics( + self, + trajectories: Sequence[Trajectory], + ) -> dict[str, list[float]]: + metrics: dict[str, list[float]] = { + "reward": [ + sum(step.reward for step in traj.steps) for traj in trajectories + ], + "truncation_rate": [ + sum(step.truncated for step in traj.steps) for traj in trajectories + ], + "avg_value": [ + sum(step.value for step in traj.steps) / len(traj.steps) + for traj in trajectories + ], + "num_steps": [len(traj.steps) for traj in trajectories], + "failures": [traj.failed for traj in trajectories], + } + for tool in self.tools_to_track: # Default of empty set means this is not run + if isinstance(tool, Tool): + tool = tool.info.name + metrics[f"tool_{tool}"] = [ + sum( + sum(tc.function.name == tool for tc in s.action.value.tool_calls) + for s in traj.steps + if isinstance(s.action, OpResult) + ) + for traj in trajectories + ] + return metrics
    +
    + + + +
    +[docs] +class TrajectoryMetricsCallback(Callback): + """ + Compute metrics that are defined by task datasets. + + NOTE: evaluation portion's after_eval_step/loop() is not concurrency safe because + trajectories should be stored in the order of after_eval_step() calls. + """ + + def __init__( + self, + train_dataset: TaskDataset | None = None, + eval_dataset: TaskDataset | None = None, + track_tool_usage: bool = False, + ): + self._datasets = train_dataset, eval_dataset + self._track_tool_usage = track_tool_usage + for ds in self._datasets: + if ds and not isinstance(ds, ComputeTrajectoryMetricsMixin): + raise ValueError( + f"Dataset {ds} didn't implement" + f" {ComputeTrajectoryMetricsMixin.__name__}, which is required for" + " this callback." + ) + self._train_metrics_fn = ( + train_dataset.compute_trajectory_metrics if train_dataset else None # type: ignore[attr-defined] + ) + self._eval_metrics_fn = ( + eval_dataset.compute_trajectory_metrics if eval_dataset else None # type: ignore[attr-defined] + ) + + self._train_metrics: dict[str, list[float]] | None = None + self._eval_metrics: dict[str, list[float]] = {} + +
    +[docs] + async def after_env_reset( + self, traj_id: str, obs: list[Message], tools: list[Tool] + ) -> None: + for ds in (ds for ds in self._datasets if ds): + if self._track_tool_usage: + cast(ComputeTrajectoryMetricsMixin, ds).tools_to_track = { + t.info.name for t in tools + }
    + + +
    +[docs] + async def after_train_step(self, trajectories: Sequence[Trajectory]) -> None: + if self._train_metrics_fn is not None: + self._train_metrics = self._train_metrics_fn(trajectories)
    + + +
    +[docs] + async def after_eval_step(self, trajectories: Sequence[Trajectory]) -> None: + if self._eval_metrics_fn is not None: + for k, v in self._eval_metrics_fn(trajectories).items(): + if k not in self._eval_metrics: + # Don't use defaultdict - error prone in user code + self._eval_metrics[k] = [] + self._eval_metrics[k].extend(v)
    + + +
    +[docs] + async def after_eval_loop(self) -> None: + self._eval_metrics.clear()
    +
    + + + +
    +[docs] +class MeanMetricsCallback(TrajectoryMetricsCallback): + """Take a mean of all metrics.""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._train_means: dict[str, float] | None = None + self._eval_means: dict[str, float] | None = None + +
    +[docs] + async def after_train_step(self, trajectories: Sequence[Trajectory]) -> None: + await super().after_train_step(trajectories) + if self._train_metrics is not None: + # may be None if train_dataset was not provided + self._train_means = self._compute_means(self._train_metrics)
    + + +
    +[docs] + async def after_eval_loop(self) -> None: + if self._eval_metrics: + # may be empty if eval_dataset was not provided + self._eval_means = self._compute_means(self._eval_metrics) + await super().after_eval_loop()
    + + + @staticmethod + def _compute_means(metrics: dict[str, list[float]]) -> dict[str, float]: + return {k: sum(v) / len(v) for k, v in metrics.items()} + + @property + def train_means(self) -> dict[str, float]: + if self._train_means is None: + raise RuntimeError( + "Training means are only available after this callback is invoked." + ) + return self._train_means + + @property + def eval_means(self) -> dict[str, float]: + if self._eval_means is None: + raise RuntimeError( + "Evaluation means are only available after this callback is invoked." + ) + return self._eval_means
    + + + +
    +[docs] +class WandBLoggingCallback(TrajectoryMetricsCallback): + def __init__(self, *args, **kwargs): + if wandb is None: + raise ImportError( + f"{type(self).__name__} processing requires the 'monitor' extra for" + " 'wandb'. Please: `pip install aviary-internal[monitor]`." + ) + super().__init__(*args, **kwargs) + + self._num_train_step = 0 + +
    +[docs] + async def after_train_step(self, trajectories: Sequence[Trajectory]) -> None: + await super().after_train_step(trajectories) + self._num_train_step += 1 + + if self._train_metrics is None: + return + + # Each wandb.log() increments the wandb step by 1. Log the training step here + # so we can use it as an x-axis for training metrics that are logged by different + # wandb.log() calls. + wandb.log( + { + f"train/{key}_mean": sum(vals) / len(vals) + for key, vals in self._train_metrics.items() + } + | {"train/step": self._num_train_step} + )
    + + +
    +[docs] + async def after_eval_loop(self) -> None: + if not self._eval_metrics: + return + + wandb.log({ + f"eval/{key}_mean": (sum(vals) / len(vals) if vals else None) + for key, vals in self._eval_metrics.items() + }) + + await super().after_eval_loop()
    +
    + + + +
    +[docs] +class ClearContextCallback(Callback): + def __init__(self, op_names: Iterable[str] | None = None): + self._op_names = op_names + +
    +[docs] + async def after_eval_step(self, trajectories: Sequence[Trajectory]) -> None: + OpCtx.clear_contexts(self._op_names)
    + + +
    +[docs] + async def after_update(self) -> None: + OpCtx.clear_contexts(self._op_names)
    +
    + + + +
    +[docs] +class LoggingCallback(MeanMetricsCallback): + """Custom callback for logging filtered metrics (e.g., pass rates) to the console. + + This callback extends the `MeanMetricsCallback` and allows logging of user-specified metrics + after each training step and after the evaluation loop. It calculates the specified metrics + (e.g., pass rates) from the trajectories and logs the results. + """ + + def __init__( + self, + train_dataset: TaskDataset | None = None, + eval_dataset: TaskDataset | None = None, + metrics_to_log: Collection[str] | None = None, + ): + """Initialize the callback with a list of metric keys to log. + + Args: + train_dataset: The training dataset for computing metrics. + eval_dataset: The evaluation dataset for computing metrics. + metrics_to_log: Optional metric names (e.g., ["pass"]) to log. + If left as default of None, all metrics will be logged. + """ + super().__init__(train_dataset, eval_dataset) + self.metrics_to_log = ( + metrics_to_log or set() + ) # If no metrics provided, log all by default + + def _log_filtered_metrics(self, metrics: dict[str, float], step_type: str) -> None: + """Helper function to log only the specified metrics. + + Args: + metrics: Dictionary of calculated means for the current step (e.g., train or eval). + step_type: The type of step (e.g., "Train" or "Eval") for logging purposes. + """ + if self.metrics_to_log: + for metric in self.metrics_to_log: + if metric in metrics: + logger.info( + f"{metric.upper()} RATE ({step_type}): {metrics[metric]:.5f}" + ) + else: + # Log all metrics if no specific ones are provided + logger.info(f"{step_type} Metrics: {metrics}") + +
    +[docs] + async def after_train_step(self, trajectories: Sequence[Trajectory]) -> None: + """Log metrics and pass rate after each training step. + + This method is called after every training step, calculating and logging + the training metrics and pass rate. + + Args: + trajectories: A sequence of trajectories from the training step. + """ + await super().after_train_step(trajectories) # Call the parent to compute means + if self.train_means: + self._log_filtered_metrics(self.train_means, step_type="Train")
    + + +
    +[docs] + async def after_eval_loop(self) -> None: + """Log metrics and pass rate after the evaluation loop. + + This method is called after the evaluation loop finishes, calculating and logging + the evaluation metrics and pass rate. + """ + await super().after_eval_loop() # Call the parent to compute means + if self.eval_means: + self._log_filtered_metrics(self.eval_means, step_type="Eval")
    +
    + + + +
    +[docs] +class TerminalPrintingCallback(Callback): + """Callback that prints action, observation, and timing information to the terminal.""" + + def __init__(self): + self.start_time = None + # try now, rather than start running and die + try: + from rich.pretty import pprint # noqa: F401 + except ImportError as e: + raise ImportError( + f"rich is required for {type(self).__name__}. Please install it with `pip install rich`." + ) from e + +
    +[docs] + async def before_transition( + self, + traj_id: str, + agent: Agent, + env: Environment, + agent_state: Any, + obs: list[Message], + ) -> None: + """Start the timer before each transition.""" + self.start_time = time.time()
    + + +
    +[docs] + async def after_agent_get_asv( + self, + traj_id: str, + action: OpResult[ToolRequestMessage], + next_agent_state: Any, + value: float, + ) -> None: + from rich.pretty import pprint + + print("\nAction:") + pprint(action.value, expand_all=True)
    + + +
    +[docs] + async def after_env_step( + self, traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool + ) -> None: + from rich.pretty import pprint + + # Compute elapsed time + if self.start_time is not None: + elapsed_time = time.time() - self.start_time + self.start_time = None # Reset timer + else: + elapsed_time = 0.0 + print("\nObservation:") + pprint(obs, expand_all=True) + print(f"Elapsed time: {elapsed_time:.2f} seconds")
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/datasets.html b/docs/_build/html/_modules/ldp/alg/datasets.html new file mode 100644 index 00000000..cb2f59a5 --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/datasets.html @@ -0,0 +1,114 @@ + + + + + + + ldp.alg.datasets — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.datasets

    +from aviary.env import TASK_DATASET_REGISTRY
    +from aviary.env import DummyTaskDataset as _DummyTaskDataset
    +
    +from .callbacks import ComputeTrajectoryMetricsMixin
    +
    +
    +
    +[docs] +class DummyTaskDataset(_DummyTaskDataset, ComputeTrajectoryMetricsMixin): + pass
    + + + +TASK_DATASET_REGISTRY["dummy"] = "ldp.alg.datasets", "DummyTaskDataset" +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/optimizer.html b/docs/_build/html/_modules/ldp/alg/optimizer.html new file mode 100644 index 00000000..30aa6a46 --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/optimizer.html @@ -0,0 +1,194 @@ + + + + + + + ldp.alg.optimizer — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.optimizer

    +from typing import Any, cast
    +
    +from pydantic import BaseModel, ConfigDict, Field
    +
    +from ldp.agent import Agent, MemoryAgent, ReActAgent
    +from ldp.alg.optimizer.ape import APEOpt, APEScoreFn
    +from ldp.alg.optimizer.memory import MemoryFactory, MemoryOpt, PositiveMemoryOpt
    +from ldp.alg.optimizer.opt import _OPTIMIZER_REGISTRY, ChainedOptimizer, Optimizer
    +
    +_DEFAULT_OPTIMIZER_ERROR_MSG = (
    +    "Didn't yet implement an optimizer of type {opt_type} for {agent_type}."
    +)
    +AUTOSELECT_BEST_OPTIMIZER = None
    +
    +
    +
    +[docs] +class OptimizerConfig(BaseModel): + model_config = ConfigDict(extra="forbid") + + optimizer_type: str | None = AUTOSELECT_BEST_OPTIMIZER + optimizer_kwargs: dict[str, Any] = Field(default_factory=dict)
    + + + +_DEFAULT_OPTIMIZER_MAP: dict[type[Agent], type[Optimizer]] = { + MemoryAgent: MemoryOpt, + ReActAgent: APEOpt, +} + + +
    +[docs] +def default_optimizer_factory( + agent: Agent, + optimizer_cls: str | type[Optimizer] | None = AUTOSELECT_BEST_OPTIMIZER, + **optimizer_kwargs, +) -> Optimizer: + """A method that constructs a default optimizer for commonly-used agents. + + Args: + agent: Agent to construct the optimizer for. + optimizer_cls: The optimizer class to use. If not specified, we will try a + default based on the provided agent. + optimizer_kwargs: Arguments forwarded to optimizer_cls. + + Returns: + Instantiated optimizer. + """ + if isinstance(optimizer_cls, str): + try: + optimizer_cls = _OPTIMIZER_REGISTRY[optimizer_cls] + except KeyError: + raise TypeError( + f"Optimizer class not supported by default_optimizer_factory: {optimizer_cls}" + ) from None + + if optimizer_cls is None: + optimizer_cls = _DEFAULT_OPTIMIZER_MAP.get(agent.__class__) + + # convince mypy that optimizer_cls is a type from here on + optimizer_cls = cast(type, optimizer_cls) + + if isinstance(agent, MemoryAgent): + if optimizer_cls != MemoryOpt: + raise NotImplementedError( + _DEFAULT_OPTIMIZER_ERROR_MSG.format( + opt_type=optimizer_cls.__name__, agent_type=MemoryAgent.__name__ + ) + ) + return MemoryOpt.from_agent(agent, **optimizer_kwargs) + if isinstance(agent, ReActAgent): + if optimizer_cls != APEOpt: + raise NotImplementedError( + _DEFAULT_OPTIMIZER_ERROR_MSG.format( + opt_type=optimizer_cls.__name__, agent_type=ReActAgent.__name__ + ) + ) + return APEOpt.from_agent(agent, **optimizer_kwargs) + raise TypeError(f"Unsupported agent type: {agent.__class__.__name__}")
    + + + +__all__ = [ + "APEOpt", + "APEScoreFn", + "ChainedOptimizer", + "MemoryFactory", + "MemoryOpt", + "Optimizer", + "OptimizerConfig", + "PositiveMemoryOpt", + "default_optimizer_factory", +] +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/optimizer/ape.html b/docs/_build/html/_modules/ldp/alg/optimizer/ape.html new file mode 100644 index 00000000..a8c456d9 --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/optimizer/ape.html @@ -0,0 +1,428 @@ + + + + + + + ldp.alg.optimizer.ape — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.optimizer.ape

    +from __future__ import annotations
    +
    +import asyncio
    +import logging
    +from collections import UserDict
    +from enum import StrEnum, auto
    +from typing import Any, Self, cast
    +
    +from aviary.message import Message
    +from pydantic import (
    +    BaseModel,
    +    ConfigDict,
    +    Field,
    +    JsonValue,
    +    RootModel,
    +    ValidationError,
    +    model_validator,
    +)
    +
    +from ldp.agent import ReActAgent
    +from ldp.alg.optimizer.opt import Optimizer
    +from ldp.data_structures import Trajectory
    +from ldp.graph import LLMCallOp, OpResult, PromptOp
    +from ldp.llms import LLMModel, LLMResult
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class APEScoreFn(StrEnum): + # Use the reward as the APE score (as proposed in the paper). + # Goal is to maximize this score. + REWARD = auto() + # Use the gradient of the output of the PromptOp as the APE score. + # Goal is to push this to zero. + GRADIENT = auto()
    + + + +class _FormatDict(UserDict): + """Custom dictionary that stores missing items.""" + + def __init__(self) -> None: + super().__init__() + self.key_set: set[str] = set() + + def __missing__(self, key: str) -> str: + self.key_set.add(key) + return key + + +
    +[docs] +def get_formatted_variables(s: str) -> set[str]: + """Returns the set of variables implied by the format string.""" + format_dict = _FormatDict() + s.format_map(format_dict) + return format_dict.key_set
    + + + +
    +[docs] +class OutputPrompt(BaseModel): + prompt: str = Field(description="Prompt for language model")
    + + + +
    +[docs] +class Example(BaseModel): + input: JsonValue + output: JsonValue + score: float
    + + + +ExampleList = RootModel[list[Example]] + + +
    +[docs] +class APEOpt(BaseModel, Optimizer): + """ + Basic optimizer that acts as an Automatic Prompt Engineer (APE). + + Paper: https://openreview.net/pdf?id=92gvk82DE- + + Details: + - This implements the "forward mode generation" strategy. + - The score function used is the gradient (float) at the output of the + PromptOp being optimized. A zero gradient means the prompt was "good", + and a non-zero gradient means we can learn from the prompt. + - Possible improvements include: + - Extending the score function to the LLM result's logprobs + - Iterating with Monte Carlo Search + - Use of memory for further example augmentation + """ + + model_config = ConfigDict(arbitrary_types_allowed=True) + + ### Configuration + max_examples: int | None = Field( + default=50, # Comes from APE paper section 5.2 + description=( + "Max number of examples to include in the below query_prompt, or None for" + " no limit. The paper mentions that more examples produce better prompt" + " proposals." + ), + ) + system_prompt: str = ( + "We are optimizing prompts for a language model." + " The model sees a prompt, an input, and then generates an output." + ) + query_prompt: str = ( + "Here are correct example outputs that the language model and prompt should produce:" + "\n{good_examples}" + '\n\nThe current prompt is: "{prompt}"' + "\n\nWhich resulted in the following incorrect input, output, and {score}:" + "\n{examples}" + "\n\nRevise the current prompt to improve the outputs." + " Your proposed prompt should be concise, correct, and specify the desired output format." + ) + llm: LLMModel = Field( + default_factory=LLMModel, + description=( + "LLM used to update the prompt inside the PromptOp. The paper mentions that" + " larger models produce better prompt proposals." + ), + ) + + prompt_op: PromptOp = Field(description="PromptOp to be optimized.") + llm_call_op: LLMCallOp = Field(description="LLMCallOp to be optimized.") + + score_fn: APEScoreFn = APEScoreFn.REWARD + good_reward_threshold: float | None = Field( + default=None, + description="If using reward as the score_fn, then a good example is defined by " + "reward>=good_reward_threshold.", + ) + reward_discount: float = 1.0 + + ### State + examples: list[Example] = Field(default_factory=list) + good_examples: list[Example] = Field(default_factory=list) + steps: int = 0 + trace: list[str] = Field( + default_factory=list, description="History of prompts used." + ) + +
    +[docs] + @model_validator(mode="after") + def validate_score_fn(self): + if self.score_fn == APEScoreFn.REWARD: + if self.good_reward_threshold is None: + raise ValueError( + "good_reward_threshold must be set if using reward as the score function" + ) + self._score_str = "rewards" + elif self.score_fn == APEScoreFn.GRADIENT: + # The gradient into the prompt op is the (signed) backpropagated error, and "gradient" would + # be confusing to the model in the prompt. + self._score_str = "errors" + else: + raise ValueError(f"Invalid score function {self.score_fn}") + + return self
    + + +
    +[docs] + def model_post_init(self, __context: Any) -> None: + if self.prompt_op.prompt not in self.trace: + self.trace.append(self.prompt_op.prompt) + + # Make sure updates are not run concurrently + self._update_lock = asyncio.Lock()
    + + +
    +[docs] + @classmethod + def from_agent(cls, agent: ReActAgent, **kwargs) -> Self: + return cls( + llm_call_op=agent._react_module.tool_select_module.llm_call_op, + prompt_op=agent._react_module.prompt_op, + **kwargs, + )
    + + +
    +[docs] + def aggregate_trajectory(self, trajectory: Trajectory) -> None: + if trajectory.failed: + return + + if self.score_fn == APEScoreFn.REWARD: + d_returns = trajectory.compute_discounted_returns(self.reward_discount) + + for i_step, step in enumerate(trajectory.steps): + action_call_id = cast(OpResult, step.action).call_id + llm_call_ids = self.llm_call_op.get_call_ids({action_call_id.run_id}) + + if self.score_fn == APEScoreFn.GRADIENT: + prompt_call_id, *extra_prompt_call_ids = self.prompt_op.get_call_ids({ + action_call_id.run_id + }) + # TODO: loosen this restriction once grad acc/topological traversal are done + assert ( + not extra_prompt_call_ids + ), "APE only supports one prompt call per run" + + for llm_call_id in llm_call_ids: + result = cast( + LLMResult | None, + self.llm_call_op.ctx.get(llm_call_id, "result"), + ) + if result is None or not result.messages or not result.prompt: + continue + # (x: first prompt's user message's content, y: AI response's content) + x = next( + cast(str, m.content) for m in result.prompt if m.role == "user" + ) + y = cast(str, result.messages[0].content) + + if self.score_fn == APEScoreFn.GRADIENT: + score = self.prompt_op.ctx.get( + prompt_call_id, "grad_output", default=None + ) + if score is None: + # backprop did not reach this op call - move on + continue + is_good = score == 0 + else: + score = d_returns[i_step] # pylint: disable=possibly-used-before-assignment + is_good = score >= cast(float, self.good_reward_threshold) + + example = Example(input=x, output=y, score=score) + (self.good_examples if is_good else self.examples).append(example)
    + + +
    +[docs] + async def update(self) -> None: + async with self._update_lock: + if not self.examples: + raise ValueError("No examples to update the prompt with.") + + new_p = await self._get_updated_prompt( + self.examples, self.good_examples, self.prompt_op.prompt + ) + # Check any template vars remain, and if some were added or + # lost, discard this new prompt + if new_p != self.prompt_op.prompt and get_formatted_variables( + new_p + ) != get_formatted_variables(self.prompt_op.prompt): + logger.warning( + "Update broke prompt templating." + f"\n\nNew prompt:\n{new_p}" + f"\n\nPrior prompt:\n{self.prompt_op.prompt}" + ) + else: + if new_p == self.prompt_op.prompt: + logger.warning("Update did not change the prompt.") + self.examples.clear() + self.prompt_op.prompt = new_p + self.trace.append(new_p) + self.steps += 1
    + + + def _prepare_examples(self, examples: list[Example]) -> str: + if not examples: + return "" + if self.max_examples and len(examples) > self.max_examples: + if self.score_fn == APEScoreFn.GRADIENT: + # Return examples closest to decision boundary, + # aka ones with the lowest L1-normalized error + # NOTE: this pairs with our setting of Example.score = PromptOp's output + # gradient inside the update method, so examples with error values closer to + # 0 are defined to be higher quality + examples = sorted(examples, key=lambda e: abs(e.score))[ + : self.max_examples + ] + else: + # In reward mode, we want to show the examples with the highest reward, per the paper + # TODO: consider whether uniform sampling is better + examples = sorted(examples, key=lambda e: -e.score)[: self.max_examples] + return ExampleList.model_validate(examples).model_dump_json() + + async def _get_updated_prompt( + self, examples: list[Example], good_examples: list[Example], prompt: str + ) -> str: + messages = [ + Message( + role="system", + content=self.system_prompt, + ), + Message( + role="user", + content=self.query_prompt.format( + examples=self._prepare_examples(examples), + good_examples=self._prepare_examples(good_examples), + prompt=prompt, + score=self._score_str, + ), + ), + Message( + role="assistant", + content=OutputPrompt(prompt=prompt).model_dump_json(indent=2), + ), + Message( + content=( + "You responded without changing the prompt. Don't forget to revise" + " the prompt." + ) + ), + ] + result = await self.llm.call(messages, output_type=OutputPrompt) + message_content = cast(str, cast(list[Message], result.messages)[-1].content) + try: + return OutputPrompt.model_validate_json(message_content).prompt + except ValidationError: + return prompt
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/optimizer/memory.html b/docs/_build/html/_modules/ldp/alg/optimizer/memory.html new file mode 100644 index 00000000..d4f155fb --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/optimizer/memory.html @@ -0,0 +1,285 @@ + + + + + + + ldp.alg.optimizer.memory — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.optimizer.memory

    +from __future__ import annotations
    +
    +import logging
    +from collections.abc import Iterable
    +from itertools import product
    +from typing import ClassVar, Protocol, Self, cast, runtime_checkable
    +
    +from pydantic import BaseModel, ConfigDict, Field, JsonValue
    +
    +from ldp.agent import MemoryAgent
    +from ldp.alg.optimizer.opt import Optimizer
    +from ldp.data_structures import Trajectory
    +from ldp.graph import CallID, Memory, MemoryOp, Op, OpResult
    +from ldp.graph.ops import TOutput
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +@runtime_checkable +class MemoryFactory(Protocol): + async def __call__( + self, + memory_op: MemoryOp, + output_op: Op[TOutput], + memory_template: str, + example_buffer: Iterable[tuple[CallID, CallID, float, JsonValue]], + ) -> list[Memory]: + """ + Create new memories from the example buffer. + + Args: + memory_op: MemoryOp whose context contains the MemoryModel's query and input. + output_op: Op whose context contains an output that can be correlated with + how good the outcome was. + memory_template: Template used for the Memory's string representation. + example_buffer: Buffer of 4-tuples containing the memory_op's call ID, the + output_op's call ID, the current discounted return, and arbitrary JSON + metadata (which can be used to add task-specific metadata the memory). + + Returns: + New Memories created. + """
    + + + +async def _default_memory_factory( + memory_op: MemoryOp, + output_op: Op[TOutput], + memory_template: str, + example_buffer: Iterable[tuple[CallID, CallID, float, JsonValue]], +) -> list[Memory]: + return [ + Memory.from_ops( + memory_op, + mem_call_id, + output_op, + output_call_id, + d_return, + template=memory_template, + metadata=metadata, + ) + for mem_call_id, output_call_id, d_return, metadata in example_buffer + ] + + +
    +[docs] +class MemoryOpt(BaseModel, Optimizer): + """Trainer for memory agents. By default it is a minimizer. + + This optimizer simply adds memories to the MemoryOp using a memory factory. + """ + + model_config = ConfigDict(arbitrary_types_allowed=True) + + # Working around https://github.com/pydantic/pydantic/issues/10551 + default_memory_factory: ClassVar[MemoryFactory] = _default_memory_factory + + ### Configuration + memory_op: MemoryOp + output_op: Op + reward_discount: float = 1.0 + memory_factory: MemoryFactory = Field( + default=default_memory_factory, + description=( + "Async function to make Memories from an example buffer. It's async so this" + " can involve an LLM completion if desired." + ), + exclude=True, + ) + memory_template: str = Field( + default="Input: {input}\nOutput: {output}\nReward: {value}", + description="Template for a Memory's string representation.", + ) + + ### State + steps: int = 0 + example_buffer: list[tuple[CallID, CallID, float, JsonValue]] = Field( + default_factory=list + ) + +
    +[docs] + @classmethod + def from_agent(cls, agent: MemoryAgent, **kwargs) -> Self: + return cls(memory_op=agent._memory_op, output_op=agent._llm_call_op, **kwargs)
    + + + def _memory_filter( + self, call_id: CallID, memory_op: MemoryOp, d_return: float + ) -> bool: + # only keep memories that backprop reached, i.e. those that were used in + # achieving the reward + return memory_op.ctx.get(call_id, "grad_output", default=None) is not None + +
    +[docs] + def aggregate_trajectory(self, trajectory: Trajectory) -> None: + # NOTE: this is a little dangerous. This optimizer currently + # does not check which memory op calls are upstream of output op calls, + # besides making sure they belong to the same run. + # This is not a problem if we have no branching in the compute graph + # between the memory op and the *final* output op. + # TODO: fix the above using OpResult.traverse() to find the upstream calls + + if trajectory.failed: + return + + d_returns = trajectory.compute_discounted_returns(self.reward_discount) + + for step, d_return in zip(trajectory.steps, d_returns, strict=True): + output_run_id = cast(OpResult, step.action).call_id.run_id + mem_call_ids = { + m + for m in self.memory_op.get_call_ids({output_run_id}) + if self._memory_filter(m, self.memory_op, d_return) + } + output_call_ids = self.output_op.get_call_ids({output_run_id}) + if len(mem_call_ids) > 1 and len(output_call_ids) > 1: + raise ValueError( + "Multiple memory or output calls in a single run - this violates" + " our 1-1 correspondence assumption." + ) + + self.example_buffer.extend( + ( + *x, + d_return, + { + "timestep": step.timestep, + "done": step.done, + "truncated": step.truncated, + }, + ) + for x in product(mem_call_ids, output_call_ids) + )
    + + +
    +[docs] + async def update(self) -> None: + """Create new memories from the example buffer and add them to MemoryOp.""" + for memory in await self.memory_factory( # pylint: disable=too-many-function-args + self.memory_op, self.output_op, self.memory_template, self.example_buffer + ): + await self.memory_op.memory_model.add_memory(memory) + self.steps += 1 + self.example_buffer.clear()
    +
    + + + +
    +[docs] +class PositiveMemoryOpt(MemoryOpt): + def _memory_filter( + self, call_id: CallID, memory_op: MemoryOp, d_return: float + ) -> bool: + # only keep positive memories + return d_return > 0 and super()._memory_filter(call_id, memory_op, d_return)
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/optimizer/opt.html b/docs/_build/html/_modules/ldp/alg/optimizer/opt.html new file mode 100644 index 00000000..8b01f57b --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/optimizer/opt.html @@ -0,0 +1,185 @@ + + + + + + + ldp.alg.optimizer.opt — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.optimizer.opt

    +from __future__ import annotations
    +
    +import logging
    +from abc import ABC, abstractmethod
    +from collections.abc import Iterable
    +
    +from ldp.data_structures import Trajectory
    +from ldp.shims import tqdm
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +# Registry for all optimizers
    +_OPTIMIZER_REGISTRY: dict[str, type[Optimizer]] = {}
    +
    +
    +
    +[docs] +class Optimizer(ABC): + """Base class for all optimizers.""" + + def __init_subclass__(cls) -> None: + # Register each optimizer subclass + _OPTIMIZER_REGISTRY[cls.__name__] = cls + return super().__init_subclass__() + +
    +[docs] + def aggregate( + self, trajectories: Iterable[Trajectory], show_pbar: bool = False + ) -> None: + """Aggregate trajectories to construct training samples.""" + trajectories_with_pbar = tqdm( + trajectories, + desc="Aggregating trajectories", + ncols=0, + mininterval=1, + disable=not show_pbar, + ) + for trajectory in trajectories_with_pbar: + self.aggregate_trajectory(trajectory)
    + + +
    +[docs] + @abstractmethod + def aggregate_trajectory(self, trajectory: Trajectory) -> None: + """Aggregate transitions from a single trajectory to construct training samples."""
    + + +
    +[docs] + @abstractmethod + async def update(self) -> None: + """Update the model based on the aggregated samples."""
    +
    + + + +
    +[docs] +class ChainedOptimizer(Optimizer): + """An optimizer that runs a sequence of sub-optimizers in the order they are provided.""" + + def __init__(self, *optimizers: Optimizer): + self.optimizers = optimizers + +
    +[docs] + def aggregate( + self, trajectories: Iterable[Trajectory], show_pbar: bool = False + ) -> None: + for optimizer in self.optimizers: + optimizer.aggregate(trajectories, show_pbar=show_pbar)
    + + +
    +[docs] + async def update(self) -> None: + for optimizer in self.optimizers: + await optimizer.update()
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/optimizer/replay_buffers.html b/docs/_build/html/_modules/ldp/alg/optimizer/replay_buffers.html new file mode 100644 index 00000000..904db5f8 --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/optimizer/replay_buffers.html @@ -0,0 +1,145 @@ + + + + + + + ldp.alg.optimizer.replay_buffers — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.optimizer.replay_buffers

    +import random
    +from collections import UserList
    +
    +
    +
    +[docs] +class CircularReplayBuffer(UserList[dict]): +
    +[docs] + def resize(self, size: int): + if len(self) > size: + self.data = self.data[-size:]
    + + +
    +[docs] + def batched_iter( + self, batch_size: int, shuffle: bool = True, infinite: bool = False + ): + while True: + indices = list(range(len(self))) + if shuffle: + random.shuffle(indices) + + for i in range(0, len(self), batch_size): + keys = self.data[0].keys() + + batch: dict[str, list] = {k: [] for k in keys} + for j in indices[i : i + batch_size]: + if self.data[j].keys() != keys: + raise RuntimeError( + "Found buffer element with inconsistent keys" + ) + + for k in keys: + batch[k].append(self.data[j][k]) + + yield batch + + if not infinite: + break
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/rollout.html b/docs/_build/html/_modules/ldp/alg/rollout.html new file mode 100644 index 00000000..56a34b41 --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/rollout.html @@ -0,0 +1,435 @@ + + + + + + + ldp.alg.rollout — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.rollout

    +import asyncio
    +import itertools
    +import logging
    +import uuid
    +from collections.abc import Callable, Iterator, Sequence
    +from contextlib import contextmanager, nullcontext
    +from typing import Any, TypeVar, overload
    +
    +from aviary.env import Environment
    +from aviary.message import Message
    +
    +from ldp.agent import Agent
    +from ldp.data_structures import Trajectory, Transition
    +
    +from .callbacks import Callback
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +TEnv = TypeVar("TEnv", bound=Environment)
    +
    +
    +
    +[docs] +class CaughtError(Exception): + """Base class for reraised exceptions when catching is enabled.""" + + def __init__(self, original_exc: Exception): + self.original_exc = original_exc + + exc_type = "undefined"
    + + + +
    +[docs] +class AgentError(CaughtError): + exc_type = "agent"
    + + + +
    +[docs] +class EnvError(CaughtError): + exc_type = "env"
    + + + +
    +[docs] +@contextmanager +def reraise_exc_as(reraise: type[CaughtError], enabled: bool) -> Iterator[None]: + try: + yield + except Exception as e: + if enabled: + logging.exception(f"Caught {reraise.exc_type} exception.") + raise reraise(e) from e + raise
    + + + +
    +[docs] +class RolloutManager: + def __init__( + self, + agent: Agent, + catch_agent_failures: bool = True, + catch_env_failures: bool = True, + callbacks: Sequence[Callback] | None = None, + concurrency_limit: int | None = None, + ): + self.agent = agent + + self.catch_agent_failures = catch_agent_failures + self.catch_env_failures = catch_env_failures + + self.concurrency_limiter = ( + asyncio.Semaphore(concurrency_limit) if concurrency_limit else nullcontext() + ) + + self.traj_buffer: dict[str, Trajectory] = {} + self.callbacks = callbacks or [] + + @overload + async def sample_trajectories( # noqa: D418 + self, + environment_factory: Callable[[], TEnv], + batch_size: int = 1, + max_steps: int | None = None, + ) -> list[tuple[Trajectory, TEnv]]: + """Run rollouts in parallel, using a factory to construct environments. + + We will construct `batch_size` environments and run rollouts on each of them. + If `max_steps` is set, rollouts will be truncated at this value. If a rollout + has fewer than `max_steps`, then a new environment will be constructed and another + rollout will be started until `max_steps` is reached. + + Args: + environment_factory: A no-argument callable that returns + an environment instance + batch_size (int, optional): Defaults to 1. + max_steps (int | None, optional): Max steps per rollout. Defaults to None (see above). + + Returns: + list[tuple[Trajectory, Environment]]: A list of (trajectory, environment) tuples: one per rollout. + """ + + @overload + async def sample_trajectories( # noqa: D418 + self, + environments: Sequence[Environment], + max_steps: int | None = None, + ) -> list[Trajectory]: + """Run rollouts in parallel on a list of provided environments. + + Args: + environments: A list of environments to run rollouts on. + max_steps: Max steps per rollout. Defaults to None, in which case the rollouts are run + until environment returns done. + """ + +
    +[docs] + async def sample_trajectories(self, **kwargs): + if "environment_factory" in kwargs: + assert ( + "environments" not in kwargs + ), "Cannot use environment_factory with environments" + + return await self._sample_trajectories_from_env_factory( + kwargs["environment_factory"], + kwargs.get("batch_size", 1), + kwargs.get("max_steps"), + ) + + if "environments" in kwargs: + assert ( + "environment_factory" not in kwargs + ), "Cannot use environments with environment_factory" + return await self._sample_trajectories_from_envs( + kwargs["environments"], kwargs.get("max_steps") + ) + + raise TypeError( + "sample_trajectories() missing required " + "arguments 'environment_factory' or 'environments'" + )
    + + + async def _sample_trajectories_from_env_factory( + self, + environment_factory: Callable[[], Environment], + batch_size: int = 1, + max_steps: int | None = None, + ) -> list[tuple[Trajectory, Environment]]: + self.traj_buffer.clear() + + async def rollout_with_args(idx: int, **rollout_kwargs): + return idx, await self._rollout(**rollout_kwargs), rollout_kwargs + + accumulated_steps = [0] * batch_size + # submit initial batch of tasks + tasks = [ + asyncio.create_task( + rollout_with_args( + idx, + traj_id=uuid.uuid4().hex, + env=environment_factory(), + max_steps=max_steps, + ) + ) + for idx in range(batch_size) + ] + + results = [] + while tasks: + done, pending = await asyncio.wait( + tasks, return_when=asyncio.FIRST_COMPLETED + ) + new_tasks = [] + for task in done: + idx, traj, kwargs = await task + results.append((traj, kwargs["env"])) + accumulated_steps[idx] += len(traj.steps) + if ( + max_steps is not None + and (remaining_steps := max_steps - accumulated_steps[idx]) > 0 + ): + # submit another task if we haven't reached max_steps + new_task = asyncio.create_task( + rollout_with_args( + idx, + traj_id=uuid.uuid4().hex, + env=environment_factory(), + max_steps=remaining_steps, + ) + ) + new_tasks.append(new_task) + + tasks = list(pending) + new_tasks + + return results + + async def _sample_trajectories_from_envs( + self, + environments: Sequence[Environment], + max_steps: int | None = None, + ) -> list[Trajectory]: + self.traj_buffer.clear() + + traj_ids = [uuid.uuid4().hex for _ in range(len(environments))] + await asyncio.gather( + *( + self._rollout(*args, max_steps=max_steps) + for args in zip(traj_ids, environments, strict=True) + ) + ) + return [self.traj_buffer[traj_id] for traj_id in traj_ids] + + async def _rollout( + self, + traj_id: str, + env: Environment, + max_steps: int | None, + ) -> Trajectory: + trajectory = Trajectory(traj_id=traj_id) + + async def store_step(step: Transition): + await asyncio.gather(*[ + callback.after_transition(traj_id, self.agent, env, step) + for callback in self.callbacks + ]) + trajectory.steps.append(step) + + # Set default values to store in the buffer in case reset/init_state fail + obs: list[Message] = [] + agent_state: Any = None + + try: + with reraise_exc_as(EnvError, enabled=self.catch_env_failures): + obs, tools = await env.reset() + await asyncio.gather(*[ + c.after_env_reset(traj_id, obs, tools) for c in self.callbacks + ]) + + with reraise_exc_as(AgentError, enabled=self.catch_agent_failures): + agent_state = await self.agent.init_state(tools) + await asyncio.gather(*[ + c.after_agent_init_state(traj_id, agent_state) for c in self.callbacks + ]) + + for timestep in itertools.count(): + step = await self._take_step(timestep, traj_id, env, agent_state, obs) + + if timestep + 1 == max_steps and not step.done: + # Mark as truncated if we hit max_steps and the state is not terminal. + # Do it before store_step(), so that callbacks can access this info + step.truncated = True + + # We assume the below won't throw a CaughtError + await store_step(step) + + # set things up for the next iteration + agent_state = step.next_agent_state + obs = step.next_observation + + if step.done or step.truncated: + break + + except CaughtError as e: + # NOTE: This trajectory should not be used for regular training. + # We save the last transition here for debugging, etc. + await store_step( + Transition( + timestep=len(trajectory.steps), + agent_state=agent_state, + next_agent_state=None, + observation=obs, + next_observation=[], + action=None, + done=True, + metadata={"exception": repr(e.original_exc)}, + ) + ) + + self.traj_buffer[traj_id] = trajectory + return trajectory + + async def _take_step( + self, + timestep: int, + traj_id: str, + env: Environment, + agent_state: Any, + obs: list[Message], + ) -> Transition: + async with self.concurrency_limiter: + await asyncio.gather(*[ + callback.before_transition(traj_id, self.agent, env, agent_state, obs) + for callback in self.callbacks + ]) + + with reraise_exc_as(AgentError, enabled=self.catch_agent_failures): + ( + action, + next_agent_state, + value, + ) = await self.agent.get_asv(agent_state, obs) + await asyncio.gather(*[ + callback.after_agent_get_asv(traj_id, action, next_agent_state, value) + for callback in self.callbacks + ]) + + with reraise_exc_as(EnvError, enabled=self.catch_env_failures): + next_obs, reward, done, trunc = await env.step(action.value) + await asyncio.gather(*[ + callback.after_env_step(traj_id, next_obs, reward, done, trunc) + for callback in self.callbacks + ]) + + return Transition( + timestep=timestep, + agent_state=agent_state, + next_agent_state=next_agent_state, + action=action, + reward=reward, + value=value, + observation=obs, + next_observation=next_obs, + done=done, + truncated=trunc, + )
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/runners.html b/docs/_build/html/_modules/ldp/alg/runners.html new file mode 100644 index 00000000..181c2d0b --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/runners.html @@ -0,0 +1,482 @@ + + + + + + + ldp.alg.runners — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.runners

    +from __future__ import annotations
    +
    +import asyncio
    +import math
    +import random
    +from collections.abc import Sequence
    +from typing import cast
    +
    +from aviary.env import Environment, TaskDataset
    +from pydantic import BaseModel, ConfigDict, Field
    +
    +from ldp.agent import Agent
    +from ldp.alg.optimizer import Optimizer
    +from ldp.data_structures import Trajectory
    +from ldp.graph import OpResult, eval_mode, train_mode
    +from ldp.shims import tqdm, trange
    +
    +from .callbacks import Callback, ClearContextCallback
    +from .rollout import RolloutManager
    +
    +
    +async def _run_eval_loop(
    +    dataset: TaskDataset,
    +    rollout_manager: RolloutManager,
    +    batch_size: int,
    +    num_iterations: int | None,
    +    max_rollout_steps: int | None,
    +    callbacks: Sequence[Callback],
    +    shuffle: bool = False,
    +) -> None:
    +    await asyncio.gather(*[callback.before_eval_loop() for callback in callbacks])
    +
    +    if num_iterations is None:
    +        try:
    +            num_iterations = math.ceil(len(dataset) / batch_size)
    +        except TypeError:
    +            raise ValueError(
    +                "If num_iterations is not provided, the "
    +                "dataset must be finite and implement __len__."
    +            ) from None
    +    if not num_iterations:
    +        return
    +
    +    with tqdm(
    +        desc="Evaluation Iterations", ncols=0, total=num_iterations, leave=False
    +    ) as pbar:
    +        # We use pbar.n as a counter for the number of training steps
    +        while pbar.n < num_iterations:
    +            for batch in dataset.iter_batches(batch_size, shuffle=shuffle):
    +                trajectories = await rollout_manager.sample_trajectories(
    +                    environments=batch, max_steps=max_rollout_steps
    +                )
    +
    +                # Close the environment after we have sampled from it,
    +                # in case it needs to tear down resources.
    +                await asyncio.gather(*(env.close() for env in batch))
    +
    +                await asyncio.gather(*[
    +                    callback.after_eval_step(trajectories) for callback in callbacks
    +                ])
    +                pbar.update()
    +
    +                if pbar.n == num_iterations:
    +                    break
    +
    +    await asyncio.gather(*[callback.after_eval_loop() for callback in callbacks])
    +
    +
    +
    +[docs] +class EvaluatorConfig(BaseModel): + model_config = ConfigDict(extra="forbid") + + batch_size: int = 1 + num_eval_iterations: int | None = Field( + None, + description="Number of eval iterations. " + "If not provided, will exhaust the dataset. " + "If 0, will not run the eval loop. ", + ) + max_rollout_steps: int | None = None + catch_agent_failures: bool = True + catch_env_failures: bool = True + clear_ctx_at_each_iter: bool = False + +
    +[docs] + def make_rollout_manager( + self, agent: Agent, callbacks: Sequence[Callback] + ) -> RolloutManager: + return RolloutManager( + agent=agent, + callbacks=callbacks, + catch_agent_failures=self.catch_agent_failures, + catch_env_failures=self.catch_env_failures, + )
    +
    + + + +
    +[docs] +class Evaluator: + def __init__( + self, + config: EvaluatorConfig, + agent: Agent, + dataset: TaskDataset, + callbacks: Sequence[Callback] | None = None, + ): + self.config = config + self.agent = agent + self.dataset = dataset + self.callbacks = callbacks or [] + if self.config.clear_ctx_at_each_iter: + clear_cb = ClearContextCallback() + self.callbacks = [*self.callbacks, clear_cb] if callbacks else [clear_cb] + self.rollout_manager = self.config.make_rollout_manager(agent, self.callbacks) + + @eval_mode() + async def evaluate(self, **kwargs) -> None: + """Run the agent over the provided dataset in eval mode.""" + return await self.run(**kwargs) + +
    +[docs] + async def run(self, **kwargs) -> None: + """Run the agent over the provided dataset. + + This method does not set training mode, so it can be used to collect + trajectories for offline training. + """ + await _run_eval_loop( + dataset=self.dataset, + rollout_manager=self.rollout_manager, + batch_size=self.config.batch_size, + num_iterations=self.config.num_eval_iterations, + max_rollout_steps=self.config.max_rollout_steps, + callbacks=self.callbacks, + **kwargs, + )
    +
    + + + +
    +[docs] +class OnlineTrainerConfig(EvaluatorConfig): + batch_size: int + num_train_iterations: int = Field( + ge=0, + description=( + "Number of iterations (at one batch per iteration) to process during" + " training, and setting to 0 skips training." + ), + ) + num_rollouts_per_env: int = Field( + default=1, + description=( + "Number of rollouts to execute for each environment per training iteration." + ), + ) + update_every: int = Field( + default=1, + description="Number of training iterations between optimizer update calls.", + ge=1, + ) + eval_every: int | None = Field( + None, + description=( + "If set, will repeatedly evaluate on the validation set after this many" + " iterations. If unset (default), no evaluation is performed." + ), + ) + eval_before: bool = Field( + default=True, + description=( + "If True (default), evaluate on the validation set before kicking off" + " training." + ), + ) + clear_ctx_at_each_iter: bool = False
    + + + +
    +[docs] +class OnlineTrainer: + def __init__( + self, + config: OnlineTrainerConfig, + agent: Agent, + optimizer: Optimizer, + train_dataset: TaskDataset, + eval_dataset: TaskDataset | None = None, + callbacks: Sequence[Callback] | None = None, + ): + if config.eval_every is not None and eval_dataset is None: + raise ValueError("Must specify eval_dataset if eval_every is set") + + self.config = config + self.agent = agent + self.train_dataset = train_dataset + self.eval_dataset = eval_dataset + self.optimizer = optimizer + self.callbacks = callbacks or [] + if self.config.clear_ctx_at_each_iter: + clear_cb = ClearContextCallback() + self.callbacks = [*self.callbacks, clear_cb] if callbacks else [clear_cb] + self.rollout_manager = self.config.make_rollout_manager( + agent=agent, callbacks=self.callbacks + ) + +
    +[docs] + async def train(self) -> None: + if self.config.eval_before: + await self.evaluate() + + with tqdm( + desc="Training Iterations", ncols=0, total=self.config.num_train_iterations + ) as pbar: + # We use pbar.n as a counter for the number of training steps + while pbar.n < self.config.num_train_iterations: + for batch in self.train_dataset.iter_batches( + self.config.batch_size, shuffle=True + ): + await self._training_step(pbar.n, batch) + pbar.update() # Increment pbar.n by 1 + + if ( + self.config.eval_every is not None + and pbar.n % self.config.eval_every == 0 + ): + await self.evaluate() + + if pbar.n == self.config.num_train_iterations: + break # Will also break out of the outer while loop + + await self.evaluate()
    + + + @eval_mode() + async def evaluate(self, **kwargs) -> None: + await _run_eval_loop( + dataset=cast(TaskDataset, self.eval_dataset), + rollout_manager=self.rollout_manager, + batch_size=self.config.batch_size, + num_iterations=self.config.num_eval_iterations, + max_rollout_steps=self.config.max_rollout_steps, + callbacks=self.callbacks, + **kwargs, + ) + + @train_mode() + async def _training_step(self, i_iter: int, envs: Sequence[Environment]) -> None: + training_batch: list[Trajectory] = [] + + for _ in range(self.config.num_rollouts_per_env): + trajectories = await self.rollout_manager.sample_trajectories( + environments=envs, max_steps=self.config.max_rollout_steps + ) + + # Close the environments after we have sampled from them, in case they need to tear down resources. + await asyncio.gather(*[env.close() for env in envs]) + + training_batch.extend(traj for traj in trajectories if not traj.failed) + + await self._optimizer_step(i_iter, training_batch) + + await asyncio.gather(*[ + callback.after_train_step(trajectories) for callback in self.callbacks + ]) + + async def _optimizer_step( + self, i_iter: int, training_batch: Sequence[Trajectory] + ) -> None: + for traj in training_batch: + for step in traj.steps: + # TODO: make this async + # step.action is not None because we checked traj.failed above + cast(OpResult, step.action).compute_grads() + + self.optimizer.aggregate(training_batch) + + if (i_iter + 1) % self.config.update_every == 0: + await self.optimizer.update() + + await asyncio.gather(*[ + callback.after_update() for callback in self.callbacks + ])
    + + + +
    +[docs] +class OfflineTrainerConfig(BaseModel): + model_config = ConfigDict(extra="forbid") + + batch_size: int + update_every: int = Field( + default=1, + description="Number of training iterations to run before updating the model.", + ge=1, + ) + clear_ctx_at_each_iter: bool = False
    + + # TODO: add some concept of eval loops + + +
    +[docs] +class OfflineTrainer: + def __init__( + self, + config: OfflineTrainerConfig, + agent: Agent, + optimizer: Optimizer, + train_trajectories: list[Trajectory], + callbacks: Sequence[Callback] | None = None, + ): + self.config = config + self.agent = agent + self.optimizer = optimizer + # copy so we can shuffle + self.train_trajectories = train_trajectories.copy() + self.callbacks = callbacks or [] + if self.config.clear_ctx_at_each_iter: + clear_cb = ClearContextCallback() + self.callbacks = [*self.callbacks, clear_cb] if callbacks else [clear_cb] + +
    +[docs] + async def train(self) -> None: + random.shuffle(self.train_trajectories) + + full_batch = len(self.train_trajectories) <= self.config.batch_size + + if full_batch: + # Separating out the full batch case lets the user run a single update() + # step even if train_trajectories is empty. This can be useful if the + # optimizer is pre-populated with offline training data, for example. + batch = self.train_trajectories + + self.optimizer.aggregate(batch, show_pbar=True) + await self.optimizer.update() + + await asyncio.gather(*[ + callback.after_update() for callback in self.callbacks + ]) + + await asyncio.gather(*[ + callback.after_train_step(batch) for callback in self.callbacks + ]) + + else: + for training_step, i_batch_start in enumerate( + trange( + 0, + len(self.train_trajectories), + self.config.batch_size, + desc="Training Iterations", + ncols=0, + ) + ): + batch = self.train_trajectories[ + i_batch_start : i_batch_start + self.config.batch_size + ] + + self.optimizer.aggregate(batch) + + if (training_step + 1) % self.config.update_every == 0: + await self.optimizer.update() + await asyncio.gather(*[ + callback.after_update() for callback in self.callbacks + ]) + + await asyncio.gather(*[ + callback.after_train_step(batch) for callback in self.callbacks + ])
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/alg/tree_search.html b/docs/_build/html/_modules/ldp/alg/tree_search.html new file mode 100644 index 00000000..d5b83a0f --- /dev/null +++ b/docs/_build/html/_modules/ldp/alg/tree_search.html @@ -0,0 +1,276 @@ + + + + + + + ldp.alg.tree_search — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.alg.tree_search

    +import asyncio
    +import logging
    +import uuid
    +from collections.abc import Awaitable, Callable, Sequence
    +from typing import Any
    +
    +from aviary.message import Message
    +from aviary.utils import is_coroutine_callable
    +
    +from ldp.agent import Agent
    +from ldp.data_structures import TransitionTree
    +
    +from .callbacks import Callback
    +from .rollout import (
    +    AgentError,
    +    CaughtError,
    +    EnvError,
    +    RolloutManager,
    +    TEnv,
    +    reraise_exc_as,
    +)
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class TreeSearchRollout(RolloutManager): + def __init__( + self, + agent: Agent, + branching_factor: int, + env_clone_fn: Callable[[TEnv], Awaitable[TEnv]] | Callable[[TEnv], TEnv], + catch_agent_failures: bool = True, + catch_env_failures: bool = True, + callbacks: Sequence[Callback] | None = None, + concurrency_limit: int | None = None, + target_reward: float | None = None, + ): + super().__init__( + agent, + catch_agent_failures=catch_agent_failures, + catch_env_failures=catch_env_failures, + callbacks=callbacks, + concurrency_limit=concurrency_limit, + ) + + self.branching_factor = branching_factor + self.target_reward = ( + target_reward if target_reward is not None else float("inf") + ) + self.target_reward_hit: set[str] = set() + + self.env_clone_fn = env_clone_fn + +
    +[docs] + async def sample_trees( + self, + environments: Sequence[TEnv], + max_depth: int | None = None, + ) -> list[TransitionTree]: + return await asyncio.gather(*[ + self.sample_tree(env, max_depth) for env in environments + ])
    + + +
    +[docs] + async def sample_tree(self, env: TEnv, max_depth: int | None) -> TransitionTree: + max_depth_f = max_depth if max_depth is not None else float("inf") + tree = TransitionTree(root_id=str(uuid.uuid4())) + + try: + with reraise_exc_as(EnvError, enabled=self.catch_env_failures): + obs, tools = await env.reset() + await asyncio.gather(*[ + c.after_env_reset(tree.root_id, obs, tools) for c in self.callbacks + ]) + + with reraise_exc_as(AgentError, enabled=self.catch_agent_failures): + agent_state = await self.agent.init_state(tools) + await asyncio.gather(*[ + c.after_agent_init_state(tree.root_id, agent_state) + for c in self.callbacks + ]) + except CaughtError: + return tree + + await self._descend( + tree=tree, + prev_step_id=tree.root_id, + env=env, + agent_state=agent_state, + obs=obs, + prev_timestep=-1, + prev_cumulative_reward=0.0, + max_depth=max_depth_f, + ) + + return tree
    + + + async def _descend( + self, + tree: TransitionTree, + prev_step_id: str, + env: TEnv, + agent_state: Any, + obs: list[Message], + prev_timestep: int, + prev_cumulative_reward: float, + max_depth: float, + ) -> None: + # Descend one level in the tree, by adding branching_factor children to the branch + # Then, recurse on each child + + if tree.root_id in self.target_reward_hit: + # If at least one branch hit the target reward, stop descending + return + + timestep = prev_timestep + 1 + + async def inner_descend(idx: int) -> None: + if is_coroutine_callable(self.env_clone_fn): + cloned_env = await self.env_clone_fn(env) # type: ignore[arg-type, misc] + else: + cloned_env = self.env_clone_fn(env) # type: ignore[arg-type] + + # Descend one step + step_id = f"{prev_step_id}:{idx}" + try: + step = await self._take_step( + timestep, step_id, cloned_env, agent_state, obs + ) + except CaughtError: + # If we failed, do not extend the branch - just give up on this path + return + + if timestep + 1 == max_depth and not step.done: + # Mark as truncated if we hit max_steps and the state is not terminal. + step.truncated = True + + await asyncio.gather(*[ + callback.after_transition(step_id, self.agent, cloned_env, step) + for callback in self.callbacks + ]) + + tree.add_transition(step_id, step) + + cumulative_reward = prev_cumulative_reward + step.reward + if cumulative_reward >= self.target_reward: + # signal other descents to stop too + self.target_reward_hit.add(tree.root_id) + return + + if step.done or step.truncated: + return + + # Recurse + await self._descend( + tree=tree, + prev_step_id=step_id, + env=cloned_env, + agent_state=step.next_agent_state, + obs=step.next_observation, + prev_timestep=timestep, + prev_cumulative_reward=cumulative_reward, + max_depth=max_depth, + ) + + # Add branching_factor children + await asyncio.gather(*[ + inner_descend(idx) for idx in range(self.branching_factor) + ])
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/data_structures.html b/docs/_build/html/_modules/ldp/data_structures.html new file mode 100644 index 00000000..630e8c3b --- /dev/null +++ b/docs/_build/html/_modules/ldp/data_structures.html @@ -0,0 +1,500 @@ + + + + + + + ldp.data_structures — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.data_structures

    +from __future__ import annotations
    +
    +import json
    +import logging
    +import os
    +from collections.abc import Callable, Hashable
    +from typing import Any, ClassVar, Self, cast
    +from uuid import UUID
    +
    +import networkx as nx
    +from aviary.message import Message, join
    +from aviary.tools import ToolRequestMessage, ToolResponseMessage
    +from pydantic import BaseModel, ConfigDict, Field, JsonValue, field_validator
    +
    +from ldp.graph import OpResult
    +from ldp.utils import discounted_returns
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +class Transition(BaseModel): + model_config = ConfigDict(arbitrary_types_allowed=True, extra="forbid") + + # Sentinel value for missing observation, as opposed to empty observation + # Only used for tests; a user should never use this. + NO_OBSERVATION: ClassVar[list[Message]] = [] + + timestep: int = Field(description="Zero-indexed MDP timestep t.") + + agent_state: Any = Field( + description=( + "Agent.get_asv's input. This is `s_t` in RL terms. Note that `s_0` comes" + " from `Agent.init_state()`" + ) + ) + next_agent_state: Any = Field( + description="Agent.get_asv's output. This is s_t+1 in RL terms." + ) + + observation: list[ToolResponseMessage | Message] = Field( + description="Agent.get_asv's input. This is o_t in RL terms." + ) + next_observation: list[ToolResponseMessage | Message] = Field( + description="Environment.step output. This is o_t+1 in RL terms." + ) + + action: OpResult[ToolRequestMessage] | None = Field( + default=None, description="Agent.get_asv output. This is a_t in RL terms." + ) + + reward: float = Field( + default=0.0, description="Environment.step output. This is r_t in RL terms." + ) + + truncated: bool = Field( + default=False, description="timestep t's Environment.step output." + ) + done: bool = Field( + default=False, description="timestep t's Environment.step output." + ) + value: float = Field( + default=0.0, + description=( + "Value estimate output from timestep t's Agent.get_asv. This is v(s_t)" + " [state value function] or q(s_t, a_t) [state-action value]." + ), + ) + # JsonValue so we can serialize + metadata: dict[str, JsonValue] = Field(default_factory=dict) + +
    +[docs] + @field_validator("action", mode="before") + @classmethod + def construct_action( + cls, action: OpResult[ToolRequestMessage] | dict | None + ) -> OpResult[ToolRequestMessage] | None: + if isinstance(action, dict): + return OpResult.from_dict(ToolRequestMessage, action) + return action
    + + + @property + def failed(self) -> bool: + """Get if an exception was encountered during rollout, for convenience. + + If True, this transition should not be trained on. + Failed transitions are for debugging purposes. + """ + return bool(self.metadata.get("exception")) + +
    +[docs] + def model_dump_json(self, *, indent: int | None = None, **kwargs) -> str: + # The kwargs for model_dump are the same as super().model_dump_json, + # with the exception of indent. + dump = self.model_dump(**kwargs) + if self.action is not None: + dump["action"] = self.action.to_dict() + return json.dumps(dump, indent=indent)
    +
    + + + +
    +[docs] +class Trajectory(BaseModel): + model_config = ConfigDict(extra="forbid") + + traj_id: str | None = None + steps: list[Transition] = Field(default_factory=list) + + @property + def failed(self) -> bool: + return any(step.failed for step in self.steps) + + @property + def done(self) -> bool: + if not self.steps: + return False + return self.steps[-1].done + +
    +[docs] + def to_jsonl(self, filename: str | os.PathLike) -> None: + with open(filename, "w") as f: + f.write(json.dumps(self.traj_id) + "\n") + f.writelines(s.model_dump_json() + "\n" for s in self.steps)
    + + +
    +[docs] + @classmethod + def from_jsonl(cls, filename: str | os.PathLike) -> Self: + with open(filename) as f: + reader = iter(f) + traj = cls(traj_id=json.loads(next(reader))) + for json_line in reader: + traj.steps.append(Transition(**json.loads(json_line))) + return traj
    + + +
    +[docs] + def compute_discounted_returns(self, discount: float = 1.0) -> list[float]: + """Compute the discounted returns for each step in the trajectory.""" + return discounted_returns( + rewards=[step.reward for step in self.steps], + terminated=[step.truncated for step in self.steps], + discount=discount, + )
    +
    + + + +
    +[docs] +class TransitionTree: + def __init__(self, root_id: str | UUID): + """A tree of transitions. + + If A->B is an edge in this tree, then A and B are consecutive + transitions in an LDP. Any path from the root node to a terminal + node constitutes a complete LDP. + + A node may be assigned an arbitrary weight, which will be treated + as a relative probability of sampling that node. For example, if + A(weight=1) and B(w=2) are both children of the same node, + then we treat B as twice as likely as A. + + Args: + root_id: A unique identifier for the root node of the tree. + All IDs of transitions added to this tree must begin with + the same root_id. + """ + self.root_id = str(root_id) + + self.tree = nx.DiGraph() # the actual tree + self.rev_tree = nx.DiGraph() # the same as self.tree, but with reversed edges + + self._add_node(self.root_id, transition=None, weight=1.0) + + def _add_node( + self, step_id: str, transition: Transition | None, weight: float + ) -> None: + self.tree.add_node(step_id, transition=transition, weight=weight) + self.rev_tree.add_node(step_id) + + def _add_edge(self, parent_step_id: str, child_step_id: str) -> None: + self.tree.add_edge(parent_step_id, child_step_id) + self.rev_tree.add_edge(child_step_id, parent_step_id) + +
    +[docs] + def get_transition(self, step_id: str) -> Transition: + if step_id == self.root_id: + raise ValueError("Root node has no transition.") + + return cast(Transition, self.tree.nodes[step_id]["transition"])
    + + +
    +[docs] + def get_weight(self, step_id: str) -> float: + return cast(float, self.tree.nodes[step_id]["weight"])
    + + +
    +[docs] + def add_transition( + self, step_id: str, step: Transition, weight: float = 1.0 + ) -> None: + """Add a transition to the tree. + + Args: + step_id: A unique identifier for the root node of the tree. + The expected form of the step ID is "{parent step ID}:{step index}". + step: The transition to add. + weight: Weight of the transition. Defaults to 1.0. + """ + root_id, *step_ids = step_id.split(":") + assert ( + root_id == self.root_id + ), f"Step ID {step_id} does not start with root ID {self.root_id}" + assert step_ids, "Step ID cannot be the same as the root ID." + # TODO: maybe this should be warning? + assert ( + step_id not in self.tree + ), f"Step ID {step_id} already exists in the tree." + + self._add_node(step_id, transition=step, weight=weight) + + parent_id = ":".join([root_id, *step_ids[:-1]]) + if parent_id in self.tree: + self._add_edge(parent_id, step_id)
    + + +
    +[docs] + def get_trajectories(self) -> list[Trajectory]: + """Return a list of trajectories. + + Since each path from the root node to a terminal node defines + a unique trajectory, N(terminal node) trajectories will be returned. + The trajectory ID will be set to the ID of the terminal step. + + Note that we include failed and truncated trajectories; it is up to the + caller to decide what to do them. + + Returns: + All trajectories in this tree. + """ + trajs = [] + step: Transition | None + + for step_id, step in self.tree.nodes(data="transition"): + if not step: + # root node + continue + + is_terminal = ( + # check terminal conditions in increasing order of expense + step.done + or step.truncated + or step.failed + or self.tree.out_degree(step_id) == 0 + ) + + if not is_terminal: + continue + + # set the ID to the terminal node, which uniquely identifies the path + traj = Trajectory(traj_id=step_id) + # Build the trajectory up from a terminal node + current_step: Transition | None = step + current_step_id = step_id + + # Walk backwards towards the root (current_step=None) + while current_step: + traj.steps.append(current_step) + + parent_step_id, *extra = list(self.rev_tree.successors(current_step_id)) + assert not extra, f"Expected a single parent, but got {len(extra) + 1}" + + current_step_id = parent_step_id + current_step = self.tree.nodes[parent_step_id]["transition"] + + # would've added things in reverse order, so fix that here + traj.steps.sort(key=lambda x: x.timestep) + trajs.append(traj) + + return trajs
    + + +
    +[docs] + def assign_mc_value_estimates(self, discount_factor: float = 1.0) -> None: + """Assign Monte Carlo state-action value estimates to each transition (in-place). + + Args: + discount_factor: The discount factor to use when computing cumulative + future rewards. + """ + for step_id in nx.topological_sort(self.rev_tree): + step: Transition | None = self.tree.nodes[step_id]["transition"] + if step is None: + continue + + if children := list(self.tree.successors(step_id)): + # V_{t+1}(s') = sum_{a'} p(a'|s') * Q_{t+1}(s', a') + # Here we assume p(a'|s') is uniform over the sampled actions.. + # TODO: don't make that assumption where a logprob is available + weights = [self.get_weight(child_id) for child_id in children] + steps = [self.get_transition(child_id) for child_id in children] + v_tp1 = sum( + w * step.value for w, step in zip(weights, steps, strict=True) + ) / sum(weights) + else: + v_tp1 = 0.0 + + # Q_t(s_t, a_t) = r_{t+1} + gamma * V_{t+1}(s_{t+1}) + # (we are assuming the environment is deterministic) + step.value = step.reward + discount_factor * v_tp1
    + + +
    +[docs] + def merge_identical_nodes( + self, + agent_state_hash_fn: Callable[[Any], Hashable], + observation_hash_fn: Callable[ + [list[ToolResponseMessage | Message]], Hashable + ] = join, + next_observation_hash_fn: Callable[ + [list[ToolResponseMessage | Message]], Hashable + ] = join, + ) -> TransitionTree: + """Merge nodes with identical (state, observation, action)s. Returns a new tree. + + Args: + agent_state_hash_fn: A function that returns a hashable representation + of the agent state of a transition. + observation_hash_fn: A function that returns a hashable representation + of the observation messages of a transition. + next_observation_hash_fn: A function that returns a hashable representation + of the next observation messages of a transition. + """ + new_tree = TransitionTree(self.root_id) + + # step hash -> step ID + seen_hash_to_step_id: dict[int, str] = {} + # old step ID -> new step ID + node_remap: dict[str, str] = {self.root_id: self.root_id} + + for step_id in nx.topological_sort(self.tree): + step: Transition | None = self.tree.nodes[step_id]["transition"] + if step is None: + continue + + state_hash = agent_state_hash_fn(step.agent_state) + + if step.action is not None: + tool_request_msg = step.action.value + # NOTE: we are ignoring tool call ID in the comparison of tool requests. + # Thus, the tool call ID is excluded from the hash, so we can't just + # simply call str(tool_request_msg) + action_str = (tool_request_msg.content or "") + " ".join( + str(tc) for tc in tool_request_msg.tool_calls + ) + else: + action_str = "" + + step_hash = hash(( + state_hash, + action_str, + # (s, a, o): works for deterministic envs + observation_hash_fn(step.observation), + # (s, a, o, o'): works for both deterministic and stochastic envs + next_observation_hash_fn(step.next_observation), + )) + step_weight = self.get_weight(step_id) + + if step_hash in seen_hash_to_step_id: # Seen: merge + merged_step_id = node_remap[step_id] = seen_hash_to_step_id[step_hash] + # Not sure if this is the fastest way to do this + new_tree.tree.nodes[merged_step_id]["weight"] += step_weight + else: # Unseen: don't merge + node_remap[step_id] = seen_hash_to_step_id[step_hash] = step_id + parent_id = node_remap[":".join(step_id.split(":")[:-1])] + + # manually add transitions, since the step_id substring relationship + # will be broken + new_tree._add_node(step_id, transition=step, weight=step_weight) + new_tree._add_edge(parent_id, step_id) + + return new_tree
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/async_torch.html b/docs/_build/html/_modules/ldp/graph/async_torch.html new file mode 100644 index 00000000..5c3a09aa --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/async_torch.html @@ -0,0 +1,315 @@ + + + + + + + ldp.graph.async_torch — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.async_torch

    +__all__ = ["AsyncTorchModule", "async_protect_torch_call"]
    +
    +import asyncio
    +import operator
    +import time
    +from abc import ABC, abstractmethod
    +from collections.abc import Callable
    +from contextlib import nullcontext
    +from typing import Any
    +from uuid import UUID, uuid4
    +
    +try:
    +    import torch
    +    from torch import nn
    +    from torch.utils.data import default_collate
    +except ImportError:
    +    raise ImportError(
    +        "ldp.graph.async_torch requires PyTorch as a dependency. "
    +        "Please run `pip install ldp[nn]`."
    +    ) from None
    +
    +_TORCH_LOCK = asyncio.Lock()
    +
    +# Supported devices here: https://pytorch.org/docs/stable/amp.html#torch.autocast
    +_AUTOCAST_DEVICES = {"cpu", "cuda", "hpu", "xpu"}
    +
    +
    +def _get_autocast_context(dtype: torch.dtype | None, device_type: str):
    +    return (
    +        nullcontext()
    +        if dtype is None or device_type not in _AUTOCAST_DEVICES
    +        else torch.autocast(dtype=dtype, device_type=device_type)
    +    )
    +
    +
    +def _get_grad_context(no_grad: bool):
    +    return torch.no_grad() if no_grad else nullcontext()
    +
    +
    +
    +[docs] +def async_protect_torch_call( + module: nn.Module, + module_call_fn: Callable = lambda m, *args, **kwargs: m(*args, **kwargs), + no_grad: bool = False, + autocast_dtype: torch.dtype | None = None, + autocast_device_type=None, +) -> Callable: + async def wrapped_call(*args, **kwargs): + async with _TORCH_LOCK: + with ( + _get_grad_context(no_grad), + _get_autocast_context(autocast_dtype, autocast_device_type), + ): + return module_call_fn(module, *args, **kwargs) + + return wrapped_call
    + + + +# TODO: make max_wait_interval adaptive. We can use a heuristic like +# half the average time for a single call. If it's not provided, enable +# adaptive mode. + + +class AsyncBufferedWorker(ABC): + """Abstract class for a worker that buffers inputs and processes them in batches.""" + + def __init__( + self, + batch_size: int, + max_wait_interval: float, + collate_fn: Callable = lambda x: x, + decollate_fn: Callable = lambda x: x, + ): + """Initialize. + + Args: + batch_size: The target batch size to use when calling the module. As soon as + batch_size calls are made, a forward pass is executed. + max_wait_interval: The maximum time (sec) to wait for a batch to fill up + before executing the calls we have buffered. + collate_fn: A function to pre-process a list of inputs into a batch. Defaults to a + no-op. + decollate_fn: Kind of like the opposite of collate_fn. This function should take + the batched output and return an ordered list of outputs. Defaults to no-op. + """ + self.batch_size = batch_size + self.timeout = max_wait_interval + self.collate_fn = collate_fn + self.decollate_fn = decollate_fn + + self._work_buffer: list[tuple[float, UUID, dict[str, Any]]] = [] + self._result_buffer: dict[UUID, Any] = {} + self._lock = asyncio.Lock() + + async def __call__(self, **kwargs): + request_id = uuid4() + request_ts = time.time() + + async with self._lock: + # Make sure only one coroutine is using the work buffer at a time + self._work_buffer.append((request_ts, request_id, kwargs)) + + while True: + async with self._lock: + # Only one coroutine allowed in here when: + # - modifying the result buffer + # - modifying the work buffer + + if request_id in self._result_buffer: + # Our request was fulfilled by this or another coroutine! + return self._result_buffer.pop(request_id) + + # Try to run a batch. + await self._maybe_process_batch() + + # Sleep, to let another coroutine take over if it needs to + await asyncio.sleep(0.0) + + async def _maybe_process_batch(self): + """If the buffer is >= batch size or we have been waiting long enough, process the old batch. + + If neither condition is met, do nothing. + """ + now = time.time() + + # sort by oldest requests first + self._work_buffer.sort(key=operator.itemgetter(0)) + + if ( + len(self._work_buffer) >= self.batch_size + or now - self._work_buffer[0][0] > self.timeout + ): + # if we're over batch size or have at least one input waiting for + # more than timeout, pull out a batch to run + batch = self._work_buffer[: self.batch_size] + self._work_buffer = self._work_buffer[self.batch_size :] + + # Construct the batch tensors + sample_kwargs = [x[2] for x in batch] + batch_kwargs = self.collate_fn(sample_kwargs) + + batched_results = await self._batched_call(batch_kwargs) + request_ids = [x[1] for x in batch] + results = self.decollate_fn(batched_results) + self._result_buffer.update(zip(request_ids, results, strict=True)) + + @abstractmethod + async def _batched_call(self, batch_kwargs: dict[str, Any]): + """Logic to call the worker on a batch of inputs.""" + + +
    +[docs] +class AsyncTorchModule(AsyncBufferedWorker): + def __init__( + self, + module: nn.Module, + batch_size: int, + max_wait_interval: float, + collate_fn: Callable = default_collate, + decollate_fn: Callable = list, + module_call_fn: Callable = lambda m, *args, **kwargs: m(*args, **kwargs), + ): + """A wrapper around a torch.nn.Module that allows for async calls. + + Usage: + ```python + my_model = nn.Linear(2, 2) + async_model = AsyncTorchModule(my_model, batch_size=4, max_wait_interval=0.01) + + result = await asyncio.gather(*[ + async_model(input=torch.rand(2)) for _ in range(10) + ]) + ``` + In the above example, note that we are making 10 calls with a batch size of 4. + The first two groups of 4 will be batched and executed as they arrive. The last 2 + will wait for max_wait_interval and then execute. + + NOTE: This module is not thread-safe and currently always operates in no_grad() mode. + It may be possible to relax the latter constraint. + + Args: + module: The PyTorch module to wrap. + batch_size: See parent class. + max_wait_interval: See parent class. + collate_fn: A PyTorch collate function to use when batching inputs. Defaults to + the PyTorch default_collate. + decollate_fn: Kind of like the opposite of collate_fn. This function should take + the batched output and return an ordered list of outputs. Defaults to list. + module_call_fn: Function that allows for customizing the call to the module. + """ + super().__init__( + batch_size=batch_size, + max_wait_interval=max_wait_interval, + collate_fn=collate_fn, + decollate_fn=decollate_fn, + ) + self.module = module + self.module_call_fn = module_call_fn + + def _get_dtype_and_device(self) -> tuple[torch.dtype, torch.device]: + param = next(self.module.parameters()) + return param.dtype, param.device + + async def _batched_call(self, batch_kwargs: dict[str, Any]): + # Call the module and store results + # To be safe, set _TORCH_LOCK to prevent other + # coroutines from messing with torch state while running. + async with _TORCH_LOCK: + dtype, device = self._get_dtype_and_device() + with torch.no_grad(), _get_autocast_context(dtype, device.type): + return self.module_call_fn(self.module, **batch_kwargs)
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/common_ops.html b/docs/_build/html/_modules/ldp/graph/common_ops.html new file mode 100644 index 00000000..38ae331c --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/common_ops.html @@ -0,0 +1,596 @@ + + + + + + + ldp.graph.common_ops — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.common_ops

    +"""This module contains commonly-used Op implementations."""
    +
    +from __future__ import annotations
    +
    +import asyncio
    +import functools
    +import inspect
    +import logging
    +from collections.abc import Awaitable, Callable
    +from functools import lru_cache
    +from typing import Generic, TypeVar, cast, overload
    +
    +import numpy as np
    +import tree
    +from aviary.message import Message
    +from aviary.tools import Tool, ToolRequestMessage
    +from aviary.utils import is_coroutine_callable
    +from pydantic import BaseModel
    +
    +from ldp.llms import (
    +    EmbeddingModel,
    +    HybridEmbeddingModel,
    +    LiteEmbeddingModel,
    +    LLMModel,
    +    LLMResult,
    +    SparseEmbeddingModel,
    +)
    +
    +from .gradient_estimators import assign_constant_grads
    +from .memory import Memory, MemoryModel, UIndexMemoryModel
    +from .op_utils import CallID, get_call_id, get_training_mode
    +from .ops import GradInType, Op, OpCtx, ResultOrValue, TOutput
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +def logsumexp(a: np.ndarray | list[float]) -> float: + a_max = np.max(a) + return a_max + np.log(np.sum(np.exp(a - a_max)))
    + + + +
    +[docs] +class IdentityOp(Op[TOutput]): + """ + An operation that simply returns the input value. + + NOTE: this op is equivalent to FxnOp(lambda x: x). + """ + +
    +[docs] + async def forward(self, value: TOutput) -> TOutput: + # We assume value already has the correct run_id from its producer + return value
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + return [], {"value": grad_output}
    +
    + + + +
    +[docs] +class StopGradOp(IdentityOp[TOutput]): + """Pass through Op that terminates gradients in the backward pass.""" + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + return assign_constant_grads(input_args, input_kwargs, None)
    +
    + + + +TConfig = TypeVar("TConfig", bound=BaseModel | dict) + + +
    +[docs] +class ConfigOp(Op[TConfig], Generic[TConfig]): + """An operation that contains a configuration object.""" + + def __init__(self, config: TConfig): + self.config = config + +
    +[docs] + async def forward(self) -> TConfig: + return self.config
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + # Check that the grad_output structure is consistent with our config + tree.assert_same_structure( + grad_output, ctx.get(call_id, "output").value, check_types=False + ) + + # Terminate here - we're a leaf since a ConfigOp takes no inputs + return [], {}
    +
    + + + +TResult = TypeVar("TResult") + + +
    +[docs] +class Cacheable(Generic[TResult]): + def __init__(self, co: Awaitable[TResult]) -> None: + self.co = co + self.done = False + self.result: TResult | None = None + self.lock = asyncio.Lock() + +
    +[docs] + async def get_result(self) -> TResult | None: + async with self.lock: + if not self.done: + self.result = await self.co + self.done = True + return self.result
    + + + def __await__(self): + return self.get_result().__await__()
    + + + +
    +[docs] +def async_cache(func): + @functools.lru_cache(maxsize=1024) + @functools.wraps(func) + def wrapper(*args, **kwargs): + return Cacheable(co=func(*args, **kwargs)) + + return wrapper
    + + + +
    +[docs] +class FxnOp(Op[TOutput]): + """ + Wrap a function for a straight through gradient approximation for all args/kwargs. + + Basically, consider the fxn as a transform upon the inputs during the forward pass, + and propagating the same gradient for all inputs during the backward pass. + """ + + def __init__( + self, + fxn: Callable[..., TOutput] | Callable[..., Awaitable[TOutput]], + cache: bool = False, + fxn_name: str | None = None, # useful for lambdas + ): + if cache: + self.fxn = ( + async_cache(fxn) if is_coroutine_callable(fxn) else lru_cache()(fxn) + ) + else: + self.fxn = fxn + + try: + self.fxn_name = fxn_name or fxn.__name__ + except AttributeError: # unittest.mock.Mock or lambda + self.fxn_name = str(fxn) + + # override forward args with the signature of the function + fwd_sig = inspect.signature(self.fxn) + self._fwd_args = list(fwd_sig.parameters.values()) + + def __repr__(self) -> str: + return f"{type(self).__name__} {self.fxn_name} ({id(self)})" + +
    +[docs] + async def forward(self, *args, **kwargs) -> TOutput: + if is_coroutine_callable(self.fxn): + return await self.fxn(*args, **kwargs) + return self.fxn(*args, **kwargs)
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + return assign_constant_grads(input_args, input_kwargs, 0.0)
    +
    + + + +
    +[docs] +class PromptOp(FxnOp[str]): + """An operation that formats kwargs into a prompt string.""" + + async def _fxn( + self, prompt_kwargs: dict[str, str] | None = None, **kwargs: str + ) -> str: + return self.prompt.format(**{**(prompt_kwargs or {}), **kwargs}) + + def __init__(self, prompt: str): + self.prompt = prompt + super().__init__(fxn=self._fxn, cache=False) + + def __repr__(self) -> str: + # we want to use Op.__repr__, not FxnOp.__repr__ + return super(FxnOp, self).__repr__()
    + + + +
    +[docs] +class LLMCallOp(Op[Message]): + """An operation for LLM calls interaction.""" + + def __init__(self, num_samples_logprob_estimate: int = 0) -> None: + super().__init__() + self.num_samples_partition_estimate = num_samples_logprob_estimate + + @overload + async def forward( + self, + config: dict, + msgs: list[Message], + tools: list[Tool] = ..., + tool_choice: Tool | str | None = LLMModel.TOOL_CHOICE_REQUIRED, + ) -> ToolRequestMessage: ... + + @overload + async def forward( + self, + config: dict, + msgs: list[Message], + tools: None = None, + tool_choice: str | None = LLMModel.TOOL_CHOICE_REQUIRED, + ) -> Message: ... + +
    +[docs] + async def forward( + self, + config: dict, + msgs: list[Message], + tools: list[Tool] | None = None, + tool_choice: Tool | str | None = LLMModel.TOOL_CHOICE_REQUIRED, + ) -> Message: + model = LLMModel(config=config) + + result = await model.call(messages=msgs, tools=tools, tool_choice=tool_choice) + if result.messages is None: + raise ValueError("No messages returned") + + # if not set, assume temp = 1. TODO: when would it not be set? + temperature: float = (result.config or {}).get("temperature", 1.0) + + # Compute a Monte Carlo estimate of the logprob of this sequence at the given temperature. + logprob = await self.compute_logprob( + raw_log_p=result.logprob, + temperature=temperature, + model=model, + messages=msgs, + tools=tools, + tool_choice=tool_choice, + ) + + call_id = get_call_id() + self.ctx.update(call_id, "result", result) + # This is the logprob of this sequence according to the raw model, without + # any temperature/top-p distribution shaping. + self.ctx.update(call_id, "raw_logprob", result.logprob) + + self.ctx.update(call_id, "temperature", temperature) + self.ctx.update(call_id, "logprob", logprob) + + return result.messages[0]
    + + +
    +[docs] + async def compute_logprob( + self, + raw_log_p: float | None, + temperature: float, + model: LLMModel, + **model_kwargs, + ) -> float | None: + """This method computes a Monte Carlo estimate of logprob for a given temperature. + + It takes as input the logprob at T=1. The derivation is in Section 5.1 of the Aviary notes. + """ + if temperature == 1: + return raw_log_p + + if temperature == 0: + return 1.0 + + if raw_log_p is None or self.num_samples_partition_estimate == 0: + return None + + # TODO: Try using n completions from a single API call. Need to modify LLMModel.call to do this, since + # it currently only checks completion.choices[0]. Would reduce cost for long prompts. + # TODO: think about whether sampling params besides temperature need to be accounted for, like top_p + results = await asyncio.gather(*[ + model.call(temperature=1, **model_kwargs) + for _ in range(self.num_samples_partition_estimate) + ]) + temp_factor = 1.0 / temperature - 1.0 + + # Partition function estimate: + # Z_T = E_P[ e^(lnP/T - lnP) ] + log_Z_T = logsumexp([ + temp_factor * cast(float, result.logprob) for result in results + ]) - np.log(self.num_samples_partition_estimate) + + return (raw_log_p / temperature) - log_Z_T
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + # By default, we want to descend into config, but not msgs/tools/tool_choice + # Essentially: we can think of each config field as an independent parameter, + # but not necessarily each message or tool. + + # tree.map_structure allows us to assign a gradient of 0 to all fields of config + grad_config = tree.map_structure(lambda _: 0.0, input_kwargs["config"]) + grad_kwargs = {"config": grad_config} + for arg in ("msgs", "tools", "tool_choice"): + if arg in input_kwargs: + grad_kwargs[arg] = 0.0 + + return [], grad_kwargs
    + + +
    +[docs] + def get_examples(self) -> list[tuple[LLMResult, float]]: + examples = [ + ( + self.ctx.get(c, "result", None), + # get 'model' kwarg from grad_input + # use default of None if not found + self.ctx.get(c, "grad_input", default=([], {}))[1].get("model", None), + ) + for c in self.get_call_ids() + ] + # filter out the None values + return [(e, w) for e, w in examples if e is not None]
    +
    + + + +
    +[docs] +class MemoryOp(Op[list[Memory]]): + """An operation for managing memory retrieval and storage.""" + + def __init__(self, memory_model: MemoryModel | None = None): + super().__init__() + self.memory_model = memory_model or UIndexMemoryModel( + embedding_model=EmbeddingModel.from_name("sparse") + ) + +
    +[docs] + async def forward( + self, + query: str, + input: str | None = None, # noqa: A002 + matches: int = 3, + ) -> list[Memory]: + """Retrieve relevant memories based on a query.""" + if get_training_mode(): + call_id = get_call_id() + self.ctx.update(call_id, "query", query) + self.ctx.update(call_id, "memory_input", input) + return await self.memory_model.get_memory(query, matches)
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + """Backward pass for memory retrieval - goes back to item.""" + return assign_constant_grads(input_args, input_kwargs, 0.0)
    +
    + + + +
    +[docs] +class EmbeddingOp(Op): + """A general operation for embedding text using LiteLLM.""" + + def __init__( + self, + *, + dense_embedding: str = "text-embedding-3-small", + dense_embedding_dim: int = 512, + sparse_embedding_dim: int = 0, + **embedding_model_kwargs, + ): + if "timeout" not in embedding_model_kwargs: + embedding_model_kwargs.setdefault("timeout", 60) + emb_models: list[EmbeddingModel] = [] + if dense_embedding_dim > 0: + emb_models.append( + LiteEmbeddingModel( + name=dense_embedding, + dimensions=dense_embedding_dim, + embed_kwargs=embedding_model_kwargs, + ) + ) + if sparse_embedding_dim > 0: + emb_models.append(SparseEmbeddingModel(dimensions=sparse_embedding_dim)) + self.embedding = HybridEmbeddingModel(models=emb_models) + +
    +[docs] + async def forward(self, string_input: str) -> np.ndarray: + return await self.embedding.embed_text(string_input)
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args, + input_kwargs, + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + return [], {"string_input": None}
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/gradient_estimators.html b/docs/_build/html/_modules/ldp/graph/gradient_estimators.html new file mode 100644 index 00000000..f6e91c27 --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/gradient_estimators.html @@ -0,0 +1,363 @@ + + + + + + + ldp.graph.gradient_estimators — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.gradient_estimators

    +"""This module defines various gradient estimators that can be patched in during backward passes."""
    +
    +from __future__ import annotations
    +
    +import logging
    +from functools import partial
    +from typing import Any
    +
    +import tree
    +
    +from .op_utils import CallID
    +from .ops import GradInType, OpCtx, OpResult, ResultOrValue
    +
    +try:
    +    import torch
    +
    +    from .torch_ops import TorchOp
    +
    +except ImportError:
    +    torch = None  # type: ignore[assignment]
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +
    +[docs] +def assign_constant_grads( + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + value: Any, + descend: bool = True, +): + if not descend: + return [value] * len(input_args), dict.fromkeys(input_kwargs, value) + + # descend into nested objects + arg_grads = [ + tree.map_structure(lambda _: value, OpResult.unwrap_value(arg)) + for arg in input_args + ] + kwarg_grads = { + k: tree.map_structure(lambda _: value, OpResult.unwrap_value(v)) + for k, v in input_kwargs.items() + } + return arg_grads, kwarg_grads
    + + + +
    +[docs] +def straight_through_estimator( + ctx: OpCtx, # noqa: ARG001 + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, # noqa: ARG001 + descend: bool = True, +) -> GradInType: + return assign_constant_grads(input_args, input_kwargs, grad_output, descend=descend)
    + + + +
    +[docs] +def stop_grad( + ctx: OpCtx, # noqa: ARG001 + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, # noqa: ARG001 + call_id: CallID, # noqa: ARG001 +) -> GradInType: + # don't descend - want gradients to stop at the OpResult level + return assign_constant_grads(input_args, input_kwargs, None, descend=False)
    + + + +
    +[docs] +def zero_estimator( + ctx: OpCtx, # noqa: ARG001 + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, # noqa: ARG001 + call_id: CallID, # noqa: ARG001 +) -> GradInType: + """Sets the gradient of all inputs to zero. + + Note that this is not the same as truncating the compute graph (stop_grad), + since upstream nodes can still optimize their logprobs. The zero estimator + the unbiased choice if we have no information about the gradient. + """ + return assign_constant_grads(input_args, input_kwargs, 0.0)
    + + + +
    +[docs] +def llm_straight_through_estimator( + ctx: OpCtx, # noqa: ARG001 + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, # noqa: ARG001 +) -> GradInType: + """Straight-through for an LLM: descend into the config, but not msgs/tools/tool_calls. + + See LLMCallOp.backward() for more details on this choice. + Don't bother checking that input_args/input_kwargs have the right structure, + since compute_grads() will raise if not. + """ + config_grad = tree.map_structure( + lambda _: grad_output, OpResult.unwrap_value(input_kwargs["config"]) + ) + grad_args = [grad_output] * len(input_args) + grad_kwargs = {"config": config_grad} + if "msgs" in input_kwargs: + grad_kwargs["msgs"] = grad_output + if "tools" in input_kwargs: + grad_kwargs["tools"] = grad_output + + return grad_args, grad_kwargs
    + + + +
    +[docs] +def assign_default_grads( + input_grads: GradInType, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + default_grad_val: float = 0.0, +) -> GradInType: + """Sets a default value of default_grad_val for every element in input_grads. + + Example: + - input_kwargs = {"a": {"b": 1, "c": 2}}, + - input_grad_kwargs = {"a": {"b": 0.1}} + Output: input_grads[1] = {"a": {"b": 0.1, "c": default_grad_val}} + + Returns: + GradInType: A tuple containing the updated input_grad_args and + input_grad_kwargs with default values assigned where necessary. + """ + + def get_nested_value(data: tree.Structure, path: list) -> Any: + """Traverse given path over data and return the value at the end of the path.""" + try: + current_value = data + for key in path: + current_value = current_value[key] + except (KeyError, IndexError): + return None # If path not found, return None (than default_grad_val will be assigned) + else: + return current_value + + def assign_default_gradients( + input_grads: tree.Structure, path: list, _value: Any + ) -> Any: + """Assign default_grad_val where grads are missing.""" + return get_nested_value(input_grads, path) or default_grad_val + + input_args_kwargs = (input_args, input_kwargs) + input_grads = tree.map_structure_with_path( + partial(assign_default_gradients, input_grads), + input_args_kwargs, + ) + + tree.assert_same_structure(input_grads, input_args_kwargs) + return input_grads
    + + + +
    +[docs] +class TorchParamBackwardEstimator: + """ + Gradient estimator for `TorchOp` internal parameters. + + This estimator computes gradients with respect to the internal parameters of a + `torch.nn.Module` by calling the `backward` method of the estimator instead of the default + `backward` method of `TorchOp`. Computed gradients are stored in the context of the operation + under the key `"grad_params"`. + + Examples: + >>> torch_module = torch.nn.Sequential( + ... torch.nn.Linear(4, 4), + ... torch.nn.Linear(4, 1), + ... ) + >>> torch_op = TorchOp(torch_module) + >>> estimator = TorchParamBackwardEstimator(torch_module) + >>> result = await torch_op(torch.randn(4, requires_grad=True)) + >>> result.compute_grads(backward_fns={"TorchOp": estimator.backward}) + + Note: + This estimator is only compatible with `TorchOp` operations. + """ + + def __init__(self, module: torch.nn.Module): + if torch is None: + raise RuntimeError( + f"PyTorch library not found. Unable to use {type(self).__name__} class. " + "To install PyTorch dependencies, please run `pip install ldp[nn]`." + ) + self.params = dict(module.named_parameters()) + +
    +[docs] + def backward( + self, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + tensor_args, tensor_kwargs = ctx.get(call_id, TorchOp.CTX_TENSOR_INPUT_KEY) + n_pos_args = len(tensor_args) + n_pos_kwargs = len(tensor_kwargs) + output = ctx.get(call_id, "output").value + + if not isinstance(grad_output, torch.Tensor): + grad_output = torch.tensor( + grad_output, + dtype=output.dtype, + ) + grad_output = grad_output.to(output.device) + + while grad_output.ndim < output.ndim: + # Assume we can broadcast, so expand dims + # e.g. if output.shape = (2, 1, 1) and grad_output is a scalar + # then we want to expand to (1, 1, 1) and then broadcast + grad_output = grad_output.unsqueeze(-1) + + if output.shape != grad_output.shape: + raise RuntimeError( + f"Output shape {output.shape} does not match grad_output shape {grad_output.shape}" + ) + + gradients = torch.autograd.grad( + output, + [*tensor_args, *tensor_kwargs.values(), *self.params.values()], + grad_outputs=grad_output, + ) + + grad_args = [grad.detach().cpu().float() for grad in gradients[:n_pos_args]] + grad_kwargs = { + k: grad.detach().cpu().float() + for k, grad in zip( + tensor_kwargs.keys(), gradients[n_pos_args:n_pos_kwargs], strict=True + ) + } + grad_params = { + name: grad.detach().cpu().float() + for name, grad in zip( + self.params.keys(), gradients[n_pos_kwargs:], strict=True + ) + } + + ctx.update(call_id=call_id, key="grad_params", value=grad_params) + + return grad_args, grad_kwargs
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/loss_ops.html b/docs/_build/html/_modules/ldp/graph/loss_ops.html new file mode 100644 index 00000000..df94fb87 --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/loss_ops.html @@ -0,0 +1,144 @@ + + + + + + + ldp.graph.loss_ops — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.loss_ops

    +"""This module contains loss Op implementations."""
    +
    +from typing import TYPE_CHECKING
    +
    +import tree
    +
    +from .op_utils import CallID
    +from .ops import GradInType, Op, OpCtx
    +
    +if TYPE_CHECKING:
    +    import numpy.typing as npt
    +    import torch
    +
    +
    +
    +[docs] +class MSELossOp(Op): +
    +[docs] + async def forward( + self, + prediction: "npt.NDArray | torch.Tensor", + target: "npt.NDArray | torch.Tensor", + ) -> "float | torch.Tensor": + return ((prediction - target) ** 2).mean()
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args, + input_kwargs, + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + prediction = input_kwargs["prediction"] + target = input_kwargs["target"] + grad = 2 * (prediction - target) + return [], {"prediction": grad, "target": None}
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/memory.html b/docs/_build/html/_modules/ldp/graph/memory.html new file mode 100644 index 00000000..30c3f12b --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/memory.html @@ -0,0 +1,315 @@ + + + + + + + ldp.graph.memory — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.memory

    +import asyncio
    +from abc import ABC, abstractmethod
    +from collections.abc import AsyncIterator
    +from contextlib import asynccontextmanager
    +from typing import TYPE_CHECKING, Any, ClassVar, Generic, Self, TypeVar, cast
    +from uuid import UUID
    +
    +import numpy as np
    +import numpy.typing as npt
    +from pydantic import (
    +    BaseModel,
    +    ConfigDict,
    +    Field,
    +    JsonValue,
    +    PrivateAttr,
    +    field_validator,
    +    model_validator,
    +)
    +from usearch.index import Index
    +
    +from ldp.llms import EmbeddingModel
    +
    +if TYPE_CHECKING:
    +    from .common_ops import MemoryOp
    +    from .op_utils import CallID
    +    from .ops import Op, OpResult, TOutput
    +
    +
    +
    +[docs] +class Memory(BaseModel): + """A single memory about an input, output, and value tuple. + + A memory is a record of an input, output, and resulting value. Typically used + for prompting a language model. Or, it could be about a whole forward pass where + the input is the observation and the output is the action taken. + The query is optionally different and used for + retrieving the memory. For example, it could be much larger because it won't + be formatted in the resulting prompt. + """ + + query: str = Field( + description="String to be embedded into a retrieval key for a memory index." + ) + input: str | None = Field( + default=None, + description=( + "Some input (e.g. prompt to LLM, observation). If None (default), the input" + " is set to match the query." + ), + ) + output: str = Field(description="Some output (e.g. tool selection).") + value: float | str = Field( + description="Measure of the output's quality (e.g. loss)." + ) + metadata: JsonValue = Field( + default_factory=dict, + description=( + "Optional JSON metadata to store with the memory. An example is storing" + " information an optimizer can use at training time." + ), + ) + run_id: UUID | None = Field( + default=None, + description=( + "Associate run_id for debugging purposes to trace " + "which forward pass generated the memory." + ), + ) + template: str = "Input: {input}\nOutput: {output}\nValue: {value}" + +
    +[docs] + @model_validator(mode="before") + @classmethod + def ensure_query(cls, data: Any) -> Any: + """Copy input to match the query if input is None.""" + if isinstance(data, dict) and data.get("input") is None: + data["input"] = data["query"] + return data
    + + + def __str__(self) -> str: + return self.template.format(**self.model_dump()) + +
    +[docs] + @classmethod + def from_ops( + cls, + mem_op: "MemoryOp", + mem_call_id: "CallID", + output_op: "Op[TOutput]", + output_call_id: "CallID", + value: float, + **kwargs, + ) -> Self: + """Create from a MemoryOp, output Op, and their call IDs.""" + query: str = mem_op.ctx.get(mem_call_id, "query") + memory_input: str | None = mem_op.ctx.get(mem_call_id, "memory_input") + output_result: OpResult[TOutput] = output_op.ctx.get(output_call_id, "output") + return cls( + query=query, + input=memory_input if memory_input is not None else query, + output=str(output_result.value), + value=value, + run_id=output_call_id.run_id, + **kwargs, + )
    +
    + + + +TIndex = TypeVar("TIndex") + + +
    +[docs] +class MemoryModel(BaseModel, Generic[TIndex], ABC): + """A collection of memories with retrieval.""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + embedding_model: EmbeddingModel = Field( + default_factory=lambda: EmbeddingModel.from_name( + "hybrid-text-embedding-3-small" + ) + ) + memories: dict[int, Memory] = Field(default_factory=dict) + _index: TIndex + _index_lock: asyncio.Lock = PrivateAttr(default_factory=asyncio.Lock) + +
    +[docs] + @field_validator("memories") + @classmethod + def enforce_empty(cls, v: dict) -> dict: + if v: + raise ValueError("Memories must be empty at construction time.") + return v
    + + +
    +[docs] + async def add_memory(self, memory: Memory) -> None: + key = await self._add_to_index( + embedding=await self.embedding_model.embed_text(memory.query) + ) + self.memories[key] = memory
    + + + DEFAULT_MEMORY_MATCHES: ClassVar[int] = 3 + +
    +[docs] + async def get_memory( + self, query: str, matches: int = DEFAULT_MEMORY_MATCHES + ) -> list[Memory]: + return await self._search_index( + embedding=await self.embedding_model.embed_text(query), matches=matches + )
    + + + def __len__(self) -> int: + return len(self.memories) + +
    +[docs] + @asynccontextmanager + async def safe_access_index(self) -> AsyncIterator[TIndex]: + """Get the internal Index under the protection of an internal Lock.""" + # pylint bug, SEE: https://github.com/pylint-dev/pylint/issues/9813 + async with self._index_lock: # pylint: disable=not-async-context-manager + yield self._index
    + + + @abstractmethod + async def _add_to_index(self, embedding: np.ndarray) -> int: + """Add an embedding to the internal Index and return its key.""" + + @abstractmethod + async def _search_index( + self, embedding: np.ndarray, matches: int = DEFAULT_MEMORY_MATCHES + ) -> list[Memory]: + """Search the internal Index, returning a 'matches' amount of Memories."""
    + + + +
    +[docs] +class UIndexMemoryModel(MemoryModel[Index]): + """Memory model using a U-Search index.""" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + if not self.embedding_model.dimensions: + raise TypeError("Specify dimensions to the embedding model.") + self._index = Index(ndim=self.embedding_model.dimensions) + + async def _add_to_index(self, embedding: np.ndarray) -> int: + async with self.safe_access_index() as index: + added_value = cast( + npt.NDArray[np.int_], index.add(len(self.memories), embedding) + ) + return added_value.item() + + async def _search_index( + self, embedding: np.ndarray, matches: int = MemoryModel.DEFAULT_MEMORY_MATCHES + ) -> list[Memory]: + async with self.safe_access_index() as index: + search_matches = index.search(embedding, matches) + # mypy doesn't respect "old style" __getitem__/__len__ as iterable, + # so we have this ignore. SEE: https://github.com/python/mypy/issues/9737 + return [self.memories[m.key] for m in search_matches] # type: ignore[union-attr]
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/modules/llm_call.html b/docs/_build/html/_modules/ldp/graph/modules/llm_call.html new file mode 100644 index 00000000..a8f91bf3 --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/modules/llm_call.html @@ -0,0 +1,131 @@ + + + + + + + ldp.graph.modules.llm_call — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.modules.llm_call

    +from collections.abc import Callable, Iterable
    +from typing import Any, Generic, TypeVar
    +
    +from aviary.message import Message
    +
    +from ldp.graph import ConfigOp, FxnOp, LLMCallOp, OpResult, compute_graph
    +
    +TParsedMessage = TypeVar("TParsedMessage", bound=Message)
    +
    +
    +
    +[docs] +class ParsedLLMCallModule(Generic[TParsedMessage]): + """Module for a processing-based tool selection, with a learnable configuration.""" + + def __init__( + self, llm_model: dict[str, Any], parser: Callable[..., TParsedMessage] + ): + self.config_op = ConfigOp[dict](config=llm_model) + self.llm_call_op = LLMCallOp() + self.parse_msg_op = FxnOp(parser) + + @compute_graph() + async def __call__( + self, messages: Iterable[Message], *parse_args, **parse_kwargs + ) -> tuple[OpResult[TParsedMessage], Message]: + raw_result = await self.llm_call_op(await self.config_op(), msgs=messages) + return await self.parse_msg_op( + raw_result, *parse_args, **parse_kwargs + ), raw_result.value
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/modules/react.html b/docs/_build/html/_modules/ldp/graph/modules/react.html new file mode 100644 index 00000000..99c9bf69 --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/modules/react.html @@ -0,0 +1,366 @@ + + + + + + + ldp.graph.modules.react — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.modules.react

    +import ast
    +import re
    +import textwrap
    +from collections.abc import Iterable
    +from enum import StrEnum
    +from typing import Any
    +
    +from aviary.message import EMPTY_CONTENT_BASE_MSG, MalformedMessageError, Message
    +from aviary.tools import Tool, ToolCall, ToolRequestMessage
    +
    +from ldp.graph import FxnOp, OpResult, PromptOp, compute_graph
    +from ldp.llms import prepend_sys
    +
    +from .llm_call import ParsedLLMCallModule
    +
    +_DEFAULT_PROMPT_TEMPLATE = textwrap.dedent(
    +    """    Answer the following questions as best you can. You have access to the following tools:
    +
    +    {{tools}}
    +
    +    Use the following format:
    +
    +    {fields}
    +    ... (this {fields_description} can repeat N times)
    +
    +    Example:
    +
    +    {example}"""
    +)
    +REACT_DEFAULT_PROMPT_TEMPLATE = _DEFAULT_PROMPT_TEMPLATE.format(
    +    fields=(
    +        "Thought: you should always think about what to do"
    +        "\nAction: the action to take, should be one of [{tool_names}]"
    +        "\nAction Input: comma separated list of inputs to action as python tuple"
    +        "\nObservation: the result of the action"
    +    ),
    +    fields_description="Thought/Action/Action Input/Observation",
    +    example=(
    +        "Thought: I need to use the get_weather tool"
    +        "\nAction: get_weather"
    +        '\nAction Input: "New York", 7'
    +        "\nObservation: The 7 day forecast for New York is [...]"
    +    ),
    +)
    +ACT_DEFAULT_PROMPT_TEMPLATE = _DEFAULT_PROMPT_TEMPLATE.format(
    +    fields=(
    +        "Action: the action to take, should be one of [{tool_names}]"
    +        "\nAction Input: comma separated list of inputs to action as python tuple"
    +        "\nObservation: the result of the action"
    +    ),
    +    fields_description="Action/Action Input/Observation",
    +    example=(
    +        "Action: get_weather"
    +        '\nAction Input: "New York", 7'
    +        "\nObservation: The 7 day forecast for New York is [...]"
    +    ),
    +)
    +
    +
    +
    +[docs] +def parse_message(m: Message, tools: list[Tool]) -> ToolRequestMessage: # noqa: C901 + """ + Parse an Act or ReAct Message into a ToolRequestMessage. + + Args: + m: Input raw message. + tools: Tools used to confirm a valid tool selection + + Returns: + Parsed ToolRequestMessage. + """ + if not m.content: + raise MalformedMessageError( + f"{EMPTY_CONTENT_BASE_MSG} of type {type(m).__name__}." + ) + + message_content = m.content + # strip (and overwrite) up to end of action input + loc = message_content.find("Action Input:") + if loc != -1: + loc = message_content.find("\n", loc) + message_content = message_content[: loc if loc > 0 else None] + # we need to override the message too - don't want the model to hallucinate + m.content = message_content + + action_args: tuple[Any, ...] = () + # https://regex101.com/r/qmqZ7Z/1 + action_input = re.search(r"Input:[ \t]*([ \S]*)", m.content) + # only parse if it takes arguments + if action_input and action_input.group(1).strip(): + input_str = action_input.group(1).strip() + # if it has commas and no quotes, it's almost certainly a tuple without + # parentheses, so we add them + if "," in input_str and not ( + input_str.startswith("(") and input_str.endswith(")") + ): + input_str = f"({input_str})" + try: + if input_str.startswith("(") and input_str.endswith(")"): + # Handle tuples and quoted strings inside + if '"' not in input_str and "'" not in input_str: + # Add quotes around each element within parentheses if they are not already quoted + # and if they are not purely numbers. There may exist a killer regex for this + # but I am a simple man + + # just catches things like "1.1".isnumeric() == False + # so we can't just use isnumeric + def is_number(s: str) -> bool: + try: + float(s) + except ValueError: + return False + return True + + input_str = ", ".join( + f'"{e.strip()}"' if not is_number(e) else str(e) + for e in input_str.strip("()").split(",") + if e.strip() + ) + input_str = f"({input_str})" + eval_result = ast.literal_eval(input_str) + action_args = ( + (eval_result,) + if not isinstance(eval_result, tuple) + else eval_result + ) + else: + # Convert to int or float if possible + try: + action_args = (ast.literal_eval(input_str),) + except (ValueError, SyntaxError): + action_args = (input_str,) + except Exception as exc: + raise MalformedMessageError( + f"Action Input {input_str} could not be parsed." + ) from exc + + if len(action_args) == 1 and isinstance(action_args[0], tuple): + action_args = action_args[0] + + action = re.search(r"Action:[ \t]*(\S*)", m.content) + if not action: + raise MalformedMessageError("Action not emitted.") + tool_name = action.group(1).strip() + # have to match up name to tool to line up args in order + try: + tool = next(t for t in tools if t.info.name == tool_name) + except StopIteration as exc: + raise MalformedMessageError(f"Tool {tool_name} not found in tools.") from exc + if len(action_args) < len(tool.info.parameters.required): + raise MalformedMessageError( + f"Action Input {action_args!r} shorter than {tool.info.name!r} tool's" + " parameters." + ) + + # Anecdotally we've observed thought also often captures the action + # NOTE: for Act agents there is no Thought, so the regex will return None + thought = re.search(r"Thought:[ \t]*(.*)", m.content) + return ToolRequestMessage( + content=thought.group(1) if thought else None, + tool_calls=[ToolCall.from_tool(tool, *action_args)], + )
    + + + +
    +[docs] +class ToolDescriptionMethods(StrEnum): + """Possible methods of describing the tools.""" + + STR = "describe_str" + XML = "describe_xml" + JSON = "describe_json" + +
    +[docs] + def get_prompt_prefix(self) -> str: + """Get the prefix to put in front of the prompt.""" + if self == self.STR: + return "" + if self == self.JSON: + return "Tools are specified with a JSON schema." + return "Tools are specified with an XML schema."
    +
    + + + +
    +[docs] +class ReActModule: + """An Act or ReAct module built to work with chat models. + + Paper: https://arxiv.org/abs/2210.03629 + + The ReAct style is like so, and note Act style has no 'Thought: ' entries: + System: + Answer the following questions as best you can. You have access to the following tools: + + {tools} + + Use the following format: + + Thought: you should always think about what to do + Action: the action to take, should be one of [{tool_names}] + Action Input: the input to the action + Observation: the result of the action + ... (this Thought/Action/Action Input/Observation can repeat N times) + User: + {questions} + Assistant: + Thought: + Action: + Action Input: + User: + Observation: + Assistant: + Thought: + Action: + Action Input: + ... + """ + +
    +[docs] + @staticmethod + def parse_message(m: Message, tools: list[Tool]) -> ToolRequestMessage: + return parse_message(m, tools)
    + + + async def _create_system_prompt(self, tools: list[Tool]) -> OpResult[str]: + tool_info = "\n".join([ + getattr(t.info, self._tool_description_method)() for t in tools + ]) + if prefix := self._tool_description_method.get_prompt_prefix(): + tool_info = f"{prefix}\n{tool_info}" + tool_names = ", ".join([t.info.name for t in tools]) + return await self.prompt_op( + schema_type=self._tool_description_method.value, + tools=tool_info.strip(), + tool_names=tool_names, + ) + + def __init__( + self, + llm_model: dict[str, Any], + sys_prompt: str = REACT_DEFAULT_PROMPT_TEMPLATE, + tool_description_method: ToolDescriptionMethods = ToolDescriptionMethods.STR, + ): + self.prompt_op = PromptOp(sys_prompt) + self._tool_description_method = tool_description_method + llm_model["stop"] = ["Observation:"] + self.package_msg_op = FxnOp(prepend_sys) + self.tool_select_module = ParsedLLMCallModule[ToolRequestMessage]( + llm_model=llm_model, parser=self.parse_message + ) + + @compute_graph() + async def __call__( + self, messages: Iterable[Message], tools: list[Tool] + ) -> tuple[OpResult[ToolRequestMessage], Message]: + packaged_msgs = await self.package_msg_op( + messages, sys_content=await self._create_system_prompt(tools) + ) + return await self.tool_select_module(packaged_msgs, tools=tools) # type: ignore[arg-type]
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/modules/reflect.html b/docs/_build/html/_modules/ldp/graph/modules/reflect.html new file mode 100644 index 00000000..72b6af7f --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/modules/reflect.html @@ -0,0 +1,164 @@ + + + + + + + ldp.graph.modules.reflect — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.modules.reflect

    +from typing import Any
    +
    +from aviary.message import Message
    +from pydantic import BaseModel, Field
    +
    +from ldp.graph import ConfigOp, FxnOp, LLMCallOp, PromptOp, compute_graph
    +from ldp.graph.ops import ResultOrValue
    +from ldp.llms import append_to_sys
    +from ldp.llms.prompts import indent_xml
    +
    +
    +
    +[docs] +class ReflectModuleConfig(BaseModel): + """Configuration for the ReflectModuleConfig.""" + + llm_model: dict[str, Any] = Field( + default={"model": "gpt-3.5-turbo"}, + description="Starting configuration for the LLM model.", + )
    + + + +
    +[docs] +class ReflectModule: + """A module that simply gives an LLM to reflect on an input.""" + + def __init__(self, start_config: ReflectModuleConfig): + self.llm_call_op = LLMCallOp() + self.prompt_op = PromptOp( + "Consider a proposed response based on context. Reflect on the response" + " within <thought> tags then conclude with a possibly revised response" + " within <final-response> tags." + ) + self.config_op = ConfigOp[ReflectModuleConfig](config=start_config) + self.llm_config_op = FxnOp[dict](lambda c: c.llm_model) + self.package_fxn = FxnOp(append_to_sys) + + def extract_msg(msg: Message, backup_response: str) -> str: + msg_str = msg.content + if msg_str and "<final-response>" in msg_str: + return msg_str.split("<final-response>")[1].split("</final-response>")[ + 0 + ] + if msg_str and "<response>" in msg_str: + return msg_str.split("<response>")[1].split("</response>")[0] + return backup_response + + self.extract_msg = FxnOp(extract_msg) + + @compute_graph() + async def __call__( + self, context: ResultOrValue[str], response: ResultOrValue[str] + ) -> ResultOrValue[str]: + llm_config = await self.llm_config_op(await self.config_op()) + sys_str = await self.prompt_op() + user_str = indent_xml( + f"<context>{context}</context><response>{response}</response>" + ) + msg = await self.package_fxn(user_str, sys_str) + llm_result = await self.llm_call_op(llm_config, msg) + return await self.extract_msg(llm_result, response)
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/modules/thought.html b/docs/_build/html/_modules/ldp/graph/modules/thought.html new file mode 100644 index 00000000..93b49fba --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/modules/thought.html @@ -0,0 +1,146 @@ + + + + + + + ldp.graph.modules.thought — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.modules.thought

    +from collections.abc import Iterable, Mapping
    +from typing import Any
    +
    +from aviary.message import Message
    +from aviary.tools import ToolRequestMessage
    +
    +from ldp.graph import FxnOp, OpResult, PromptOp, compute_graph
    +from ldp.llms import prepend_sys_and_append_sys
    +
    +from .llm_call import ParsedLLMCallModule
    +
    +
    +
    +[docs] +class ThoughtModule: + @staticmethod + def _downcast_to_message(message: Message | ToolRequestMessage) -> Message: + if isinstance(message, ToolRequestMessage): + # Downcast into a normal Message if the LLM tried to call tools + return Message(role=message.role, content=message.content) + return message + + def __init__( + self, llm_model: dict[str, Any], first_sys_prompt: str, second_sys_prompt: str + ): + self.first_sys_prompt_op = PromptOp(first_sys_prompt) + self.second_sys_prompt_op = PromptOp(second_sys_prompt) + self.package_msg_op = FxnOp(prepend_sys_and_append_sys) + self.llm_call = ParsedLLMCallModule[Message]( + llm_model, parser=self._downcast_to_message + ) + + @compute_graph() + async def __call__( + self, + messages: Iterable[Message], + first_prompt_kwargs: Mapping[str, Any], + second_prompt_kwargs: Mapping[str, Any], + ) -> OpResult[Message]: + packaged_msgs = await self.package_msg_op( + messages, + initial_sys_content=await self.first_sys_prompt_op(**first_prompt_kwargs), + final_sys_content=await self.second_sys_prompt_op(**second_prompt_kwargs), + ) + return (await self.llm_call(packaged_msgs))[0] # type: ignore[arg-type]
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/op_utils.html b/docs/_build/html/_modules/ldp/graph/op_utils.html new file mode 100644 index 00000000..03149253 --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/op_utils.html @@ -0,0 +1,295 @@ + + + + + + + ldp.graph.op_utils — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.op_utils

    +import contextvars
    +from collections.abc import AsyncIterator
    +from contextlib import asynccontextmanager
    +from uuid import UUID, uuid4
    +
    +from aviary.utils import is_coroutine_callable
    +from pydantic import BaseModel, field_serializer, field_validator
    +
    +
    +
    +[docs] +class CallID(BaseModel): + run_id: UUID + fwd_id: UUID + + def __repr__(self) -> str: + return f"{self.run_id}:{self.fwd_id}" + + def __hash__(self) -> int: + return hash((self.run_id, self.fwd_id)) + +
    +[docs] + @field_validator("run_id", "fwd_id", mode="before") + @classmethod + def validate_uuid(cls, value: UUID | str) -> UUID: + if isinstance(value, str): + return UUID(value) + return value
    + + +
    +[docs] + @field_serializer("run_id", "fwd_id") + def serialize_uuid(self, value: UUID) -> str: + return str(value)
    + + + def __init__(self, run_id: str | UUID, fwd_id: str | UUID): + # Convenience so we can use positional arguments + super().__init__(run_id=run_id, fwd_id=fwd_id)
    + + + +_RUN_ID = contextvars.ContextVar[UUID]("run_id") +_CALL_ID = contextvars.ContextVar[CallID]("call_id") + + +
    +[docs] +@asynccontextmanager +async def compute_graph() -> AsyncIterator[UUID]: + """Initialize a compute graph by setting a run ID. + + If a run ID is already set (i.e. we are already inside a + get_run_id() context), then the existing run ID is returned. + Otherwise, a new UUID is created. + """ + try: + # If a run ID is set, return it. + run_id = _RUN_ID.get() + token: contextvars.Token | None = None + except LookupError: + # If not, make a new run ID. + run_id = uuid4() + token = _RUN_ID.set(run_id) + + try: + yield run_id + finally: + if token is not None: + # token is not None if we made a new run ID. In that case, + # reset the context to its previous state. + _RUN_ID.reset(token)
    + + + +
    +[docs] +def get_run_id() -> UUID: + """Get the current run ID.""" + try: + return _RUN_ID.get() + except LookupError: + raise RuntimeError( + "Attempting to access run ID, but not inside compute graph context." + ) from None
    + + + +
    +[docs] +@asynccontextmanager +async def op_call() -> AsyncIterator[CallID]: + """Decorate an op call with a call ID. + + If a call ID is already set (i.e. we are already inside an op call), + then the existing call ID is returned. + Otherwise, a new UUID is created. + """ + # Get run_id in case we need to construct a CallID, but this also serves + # as a check that we're inside compute_graph() + run_id = get_run_id() + + try: + call_id = _CALL_ID.get() + token: contextvars.Token | None = None + except LookupError: + fwd_id = uuid4() + call_id = CallID(run_id, fwd_id) + token = _CALL_ID.set(call_id) + + try: + yield call_id + finally: + if token is not None: + # token is not None if we made a new call ID. In that case, + # reset the context to its previous state. + _CALL_ID.reset(token)
    + + + +
    +[docs] +def get_call_id() -> CallID: + """Get the current call ID.""" + try: + return _CALL_ID.get() + except LookupError: + raise RuntimeError( + "Attempting to access call ID, but not inside op call context." + ) from None
    + + + +_TRAINING_MODE = contextvars.ContextVar[bool]("training_mode", default=True) + + +
    +[docs] +def get_training_mode() -> bool: + """Get the current training mode.""" + return _TRAINING_MODE.get()
    + + + +
    +[docs] +def set_training_mode(training_mode: bool) -> None: + """Set the training mode.""" + _TRAINING_MODE.set(training_mode)
    + + + +class _TrainingModeContext: + """Automatically set and reset the training_mode with a context manager.""" + + def __init__(self, training_mode: bool): + self.training_mode = training_mode + self.prev_training_mode = get_training_mode() + + def __call__(self, fn=None): + if fn is None: + return self + + if is_coroutine_callable(fn): + + async def wrapper(*args, **kwargs): + async with self: + return await fn(*args, **kwargs) + + else: + + def wrapper(*args, **kwargs): + with self: + return fn(*args, **kwargs) + + return wrapper + + def __enter__(self) -> None: + self.prev_training_mode = get_training_mode() + set_training_mode(self.training_mode) + + def __exit__(self, exc_type, exc_value, traceback) -> None: + set_training_mode(self.prev_training_mode) + + async def __aenter__(self) -> None: + self.__enter__() + + async def __aexit__(self, exc_type, exc_value, traceback) -> None: + self.__exit__(exc_type, exc_value, traceback) + + +train_mode = _TrainingModeContext(training_mode=True) +eval_mode = _TrainingModeContext(training_mode=False) +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/ops.html b/docs/_build/html/_modules/ldp/graph/ops.html new file mode 100644 index 00000000..c7f319c1 --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/ops.html @@ -0,0 +1,702 @@ + + + + + + + ldp.graph.ops — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.ops

    +"""This module defines the Op class and its helper classes."""
    +
    +from __future__ import annotations
    +
    +import inspect
    +import itertools
    +import logging
    +from abc import ABC, abstractmethod
    +from collections import defaultdict
    +from collections.abc import Callable, Collection, Iterable, Iterator, Mapping, Sequence
    +from typing import Any, ClassVar, Generic, TypeAlias, TypeVar
    +from uuid import UUID
    +
    +import networkx as nx
    +import tree
    +from pydantic import BaseModel, Field
    +
    +from .op_utils import CallID, compute_graph, get_call_id, get_training_mode, op_call
    +
    +logger = logging.getLogger(__name__)
    +
    +
    +GradOutType: TypeAlias = tree.Structure | None  # None means the gradient has terminated
    +GradInType: TypeAlias = tuple[Sequence[GradOutType], Mapping[str, GradOutType]]
    +BackwardsType: TypeAlias = Callable[
    +    # Call signature of Op.backward or GradientEstimator.backward
    +    ["OpCtx", list, dict, tree.Structure, "CallID"], GradInType
    +]
    +TOutput = TypeVar("TOutput")
    +
    +
    +
    +[docs] +class OpResult(Generic[TOutput]): + """Result of a forward pass, used in the compute graph.""" + + def __init__( + self, call_id: CallID | Any, op_name: str, op_class_name: str, value: TOutput + ): + """ + Initialize an OpResult instance. + + Args: + call_id: The unique identifier for the call. + op_name: Name of the Op instance (i.e. op.name) that produced this OpResult. + op_class_name: Fully qualified name of the class of the Op that produced this OpResult. + value: The output of the call. + """ + self.call_id = CallID.model_validate(call_id) + self.op_name = op_name + self.op_class_name = op_class_name + self.value = value + +
    +[docs] + def to_dict(self) -> dict[str, Any]: + value_dump = ( + self.value.model_dump() if isinstance(self.value, BaseModel) else self.value + ) + + return { + "call_id": self.call_id.model_dump(), + "op_name": self.op_name, + "op_class_name": self.op_class_name, + "value": value_dump, + }
    + + +
    +[docs] + @classmethod + def from_dict( + cls, t_output: type[TOutput], dump: dict[str, Any] + ) -> OpResult[TOutput]: + value = dump.pop("value") + if issubclass(t_output, BaseModel): + value = t_output.model_validate(value) + + return cls[t_output](**dump, value=value) # type: ignore[index]
    + + + def __hash__(self) -> int: + return hash(self.call_id) + +
    +[docs] + def compute_grads( + self, + grad_output: tree.Structure | None = None, + backward_fns: Mapping[str | type, BackwardsType] | None = None, + ) -> None: + """ + Compute the gradient of the backward graph in-place. + + This executes topological traversal. + It is up to the Op to: + (a) define the backward computation + (b) store internal gradients for optimizer updates. + """ + # call ID -> [d op(x) / d x] for each op that consumes x + grad_outputs: dict[CallID, list[tree.Structure]] = defaultdict(list) + + # grad_outputs stores a list of output grads (corresponding to each consuming op call). + # Since the root node is not consumed by any other node, we create a singleton list here. + # If None was passed, set it to 0 so that we don't prune the compute graph here. + grad_outputs[self.call_id] = [grad_output] if grad_output is not None else [0.0] + + # We will traverse the graph in reverse topological order + for node in self.traverse(): + # get output gradients + grad_output = grad_outputs[node.call_id] + if not grad_output: + # compute graph terminated + continue + # Make sure structure of grads match before summing + try: + [tree.assert_same_structure(grad_output[0], g) for g in grad_output[1:]] + except ValueError as e: + raise ValueError( + f"Mismatched gradient structures in compute graph for at Op: {self.op_name}." + ) from e + aggregated_grad_output = tree.map_structure(lambda *x: sum(x), *grad_output) # noqa: FURB111 + + input_args, input_kwargs = node.inputs + arg_grads, kwarg_grads = node._run_backward( + input_args, + input_kwargs, + aggregated_grad_output, + node._resolve_backward_impl(backward_fns), + ) + + for a, g in zip(input_args, arg_grads, strict=True): + # Must have exact match between input_args and arg_grads + # Only propagate gradients to input OpResults if grad is not None + if g is not None and isinstance(a, OpResult): + grad_outputs[a.call_id].append(g) + + if kwarg_grads.keys() != input_kwargs.keys(): + raise ValueError( + f"Mismatch between grads returned in Op.backward and its input kwargs. " + f"Expected {input_kwargs.keys()}, got {kwarg_grads.keys()}." + ) + for k, a in input_kwargs.items(): + # input_kwargs.keys() may be a subset of kwarg_grads.keys() if defaults + # are specified + if (g := kwarg_grads[k]) is not None and isinstance(a, OpResult): + grad_outputs[a.call_id].append(g)
    + + + def _resolve_backward_impl( + self, backward_fns: Mapping[str | type, BackwardsType] | None + ) -> BackwardsType: + backward_fns = backward_fns or {} + for key in (self.ctx.op_name, self.op_class_name, self.op_class): + if key in backward_fns: + return backward_fns[key] + return self.op_class.backward + + def _run_backward( + self, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: tree.Structure, + backward_fn: BackwardsType, + ) -> GradInType: + self._update_ctx("grad_output", grad_output) + unwrapped_input_args = [OpResult.unwrap_value(a) for a in input_args] + unwrapped_input_kwargs = { + k: OpResult.unwrap_value(v) for k, v in input_kwargs.items() + } + input_grads = backward_fn( + self.ctx, + unwrapped_input_args, + unwrapped_input_kwargs, + grad_output, + self.call_id, + ) + self._update_ctx("grad_input", input_grads) + return input_grads + + @property + def op_class(self) -> type[Op]: + return _OP_CLASS_REGISTRY[self.op_class_name] + + @property + def ctx(self) -> OpCtx: + # This is a property to avoid serialization of the context. There are two reasons: + # 1. Contexts have their own persist() mechanism for serialization + # 2. We'd prefer contexts to be created via get_or_create(). Allowing for arbitrary + # deserialization makes it hard to enforce that. + return OpCtx.get_or_create(self.op_name) + +
    +[docs] + def get_compute_graph(self, backward: bool = True) -> nx.DiGraph: + """Construct a directed graph of the compute graph that led to this OpResult. + + Args: + backward: If True (default), constructs the backwards graph in which outputs + point to inputs. If False, constructs the forward call graph. + For most cases (e.g. backprop), backward=True is desirable. + + Returns: + A digraph in which nodes are OpResults. + """ + + def add_edges(graph: nx.DiGraph, node: OpResult) -> None: + """Recursively add edges to the input graph.""" + input_args, input_kwargs = node.inputs + for x in itertools.chain(input_args, input_kwargs.values()): + if isinstance(x, OpResult): + edge = (node, x) if backward else (x, node) + graph.add_edge(*edge) + add_edges(graph, x) + + graph = nx.DiGraph() + graph.add_node(self) + add_edges(graph, self) + + return graph
    + + +
    +[docs] + def traverse( + self, + topological_order: bool = True, + filter_fn: Callable[[OpResult], bool] = lambda _: True, + ) -> Iterator[OpResult]: + """Traverse the compute graph that led to this OpResult. + + Args: + topological_order: If True, traverse the backwards graph in topological + order. This requires having the whole graph in memory. If False, + traverse the backwards graph in depth-first order. This can be done + lazily and is useful if we are trying to hydrate the graph node-by-node. + Most user-facing cases can leave this as True. Defaults to True. + filter_fn: Will only yield nodes that pass this filter function. Note that + nodes that fail will still be traversed. + + Yields: + An iterator over the nodes of this graph. + """ + if topological_order: + G = self.get_compute_graph() + for node in nx.topological_sort(G): + if filter_fn(node): + yield node + + else: + # If not topological order, do a recursive depth-first traversal. + # Note that, when traversing a node, its children do not need to be available + # yet. This allows us to lazily load nodes when hydrating from a ctx backend. + if filter_fn(self): + yield self + input_args, input_kwargs = self.inputs + for a in itertools.chain(input_args, input_kwargs.values()): + if isinstance(a, OpResult): + # Recursively apply depth-first traversal on each node + yield from a.traverse(topological_order=False)
    + + + @property + def inputs(self) -> tuple[list[ResultOrValue], dict[str, ResultOrValue]]: + return self._get_from_ctx("input") + + @property + def logprob(self) -> float | None: + return self._get_from_ctx("logprob", default=None) + + @property + def grad(self) -> tree.Structure | None: + """Returns `d ln(P_{compute_graph}) / d self` or None if gradients have not been computed.""" + return self._get_from_ctx("grad_output") + + @property + def run_id(self) -> UUID: + return self.call_id.run_id + +
    +[docs] + @staticmethod + def unwrap_value(result: ResultOrValue[TOutput]) -> TOutput: + if isinstance(result, OpResult): + return result.value + return result
    + + + def __repr__(self) -> str: + return ( + f"OpResult(op={self.op_class_name}:{self.op_name}, " + f"call_id={self.call_id}, value={self.value!r})" + ) + + def __str__(self) -> str: + return str(self.value) + + def _get_from_ctx(self, key: str, **kwargs): + if self.call_id is None: + raise ValueError( + "Attempting to access context but compute graph " + "is not available for this OpResult." + ) + + return self.ctx.get(call_id=self.call_id, key=key, **kwargs) + + def _update_ctx(self, key: str, value: Any): + if self.call_id is None: + raise RuntimeError( + "Attempting to update context but compute graph " + "is not available for this OpResult." + ) + + self.ctx.update(call_id=self.call_id, key=key, value=value)
    + + + +ResultOrValue: TypeAlias = OpResult[TOutput] | TOutput + +# Sentinel value for get() default +NOT_FOUND = object() + + +
    +[docs] +class OpCtx(BaseModel): + # A global registry of contexts. We'd prefer to use an existing context + # for an Op if it already has been created. Also useful for persist_all() + _CTX_REGISTRY: ClassVar[dict[str, OpCtx]] = {} + + op_name: str + + data: dict = Field( + default_factory=lambda: defaultdict(dict), + exclude=True, + description="Maps run_id -> (fwd_id, key) -> value. " + "data is excluded from model_dump() etc because we do " + "not use Pydantic to persist context information. That " + "should be done via the DB backend instead. OpCtx will " + "serialize op_name, which is enough to rehydrate " + "from the DB.", + ) + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self._CTX_REGISTRY[self.op_name] = self + +
    +[docs] + @classmethod + def get_or_create(cls, op_name: str) -> OpCtx: + """Return an OpCtx corresponding to the Op with the given name.""" + try: + return cls._CTX_REGISTRY[op_name] # Get + except KeyError: + return cls(op_name=op_name) # Create
    + + +
    +[docs] + @classmethod + def clear_contexts(cls, op_names: Iterable[str] | None = None) -> None: + """Clear the data in all contexts. If op_names is provided, only clear those contexts.""" + if op_names is None: + op_names = cls._CTX_REGISTRY.keys() + for op_name in op_names: + try: + cls._CTX_REGISTRY[op_name].data.clear() + except KeyError: + logger.warning(f"Op with name={op_name} not found in context registry.")
    + + +
    +[docs] + def get(self, call_id: CallID, key: str, default: Any = NOT_FOUND) -> Any: + """Get an attribute with an optional default, emulating dict.get.""" + value = self.data.get(call_id.run_id, {}).get((call_id.fwd_id, key), default) + if value is NOT_FOUND: + raise KeyError(f"call_id={call_id}, key='{key}' not found in context") + return value
    + + +
    +[docs] + def update(self, call_id: CallID, key: str, value: Any): + self.data[call_id.run_id][(call_id.fwd_id, key)] = value
    + + +
    +[docs] + def get_input_grads(self, call_id: CallID) -> GradInType: + # TODO: this function name is confusing. Let's deprecate it. We only use it + # in tests as far as I can tell. + try: + return self.get(call_id, "grad_input") + except KeyError as exc: + raise ValueError( + f"No gradients have been computed for call_id={call_id}." + ) from exc
    +
    + + + +
    +[docs] +def resolve_fully_qualified_name(cls: type) -> str: + return f"{cls.__module__}.{cls.__name__}"
    + + + +# A global registry of Op classes, so we can look up backward() implementations +# without needing an instantiated Op. +_OP_CLASS_REGISTRY: dict[str, type[Op]] = {} + + +
    +[docs] +class Op(ABC, Generic[TOutput]): + """ + An operation that is 'differentiable' and can be used in an optimizer. + + Think torch.autograd.Function that can also be applied to non-differentiable + operations like prompt template formatting or Python function calls. + + These form a forward computation graph when composed with other Ops via + __call__. In training mode, this graph is constructed dynamically. + """ + + # Name is not guaranteed to be unique. Reasons: + # 1. We definitely don't want it to be unique when recreating a compute graph + # for training on previously-collected data. In that case, we want the Op's + # name to be the same as it was before, to match up contexts/OpResults + # 2. Uniqueness could make some DB lookups faster, but I don't think we run the + # risk of OpCtx clobbers as long as call_id (which is guaranteed to be unique) + # is always used as part of the key. + name: str + ctx: OpCtx + _fwd_args: list[inspect.Parameter] + +
    +[docs] + def clear_ctx(self) -> None: + self.ctx.data.clear()
    + + + def __init_subclass__(cls, **kwargs): + super().__init_subclass__(**kwargs) + _OP_CLASS_REGISTRY[resolve_fully_qualified_name(cls)] = cls + + def __new__(cls, *args, **kwargs): + instance = super().__new__(cls) + + # Needs to be overridden by caller if this Op is to have + # a unique name in the compute graph. c.f. Agent.__init_subclass__ + # for an example of how to do this. + instance.set_name(cls.__name__) + + # Set an attribute to help us map positional forward arguments to parameter + # names, for the backward pass. We do this on the instance and not cls b/c + # some instancees may override (e.g FxnOp). + fwd_sig = inspect.signature(instance.forward) + instance._fwd_args = list(fwd_sig.parameters.values()) + + return instance + +
    +[docs] + def set_name(self, name: str) -> None: + self.name = name + self.ctx = OpCtx.get_or_create(name)
    + + + def __repr__(self) -> str: + return f"{self.__class__.__name__} (name={self.name}, id={id(self)})" + +
    +[docs] + @abstractmethod + async def forward(self, *args, **kwargs) -> TOutput: + """ + Forward pass of the Op. Must accept call_id as an argument. + + Returns: + Depending on this Op's purpose, the return may be considered an action + (e.g. a tool call) or it may not (e.g. a loss calculation). + """
    + + +
    +[docs] + @classmethod + @abstractmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs, + grad_output: tree.Structure, + call_id: CallID, + ) -> GradInType: + """ + Backward pass of the Op. + + Args: + ctx: Context that was used during the forward pass. + input_args: Variable-length input arguments passed to forward, i.e. + via *args. + input_kwargs: All other arguments passed to forward pass. + grad_output: A list of backpropagated gradients from each consumer + of the output of the forward pass. It is up to the implementation + to decide how to aggregate these gradients (e.g. in most cases summing). + call_id: Call ID of the forward pass. + + Returns: + grad_input: `d log(p) / d input` for each input to the forward pass. + It should include gradients for all input positional and keyword + arguments. Set to None for gradients that should terminate. + """
    + + +
    +[docs] + def get_call_ids(self, run_ids: Collection[UUID] | None = None) -> set[CallID]: + ctx = self.ctx + if run_ids is None: + run_ids = ctx.data.keys() + + # de-duplicate before constructing CallIDs + ids = {(run_id, fwd_id) for run_id in run_ids for fwd_id, _ in ctx.data[run_id]} + return set(itertools.starmap(CallID, ids))
    + + + # This compute_graph() decoration will do nothing if we are already inside a compute graph. + # We add it here in case we are calling a bare op(), in which case we want a graph + # with a single node. + @compute_graph() + @op_call() + async def __call__(self, *args, **kwargs) -> OpResult[TOutput]: + call_id = get_call_id() + + if not all( + arg.call_id.run_id == call_id.run_id + for arg in itertools.chain(args, kwargs.values()) + if isinstance(arg, OpResult) + ): + raise RuntimeError( + "All args and kwargs must have the same run_id as the call_id's run_id. " + "Consider using @compute_graph() decorator to ensure this." + ) + + # we're over-saving here - can explore later if memory usage is high + # unpack the args and kwargs from the result holders + unpacked_args = [(a.value if isinstance(a, OpResult) else a) for a in args] + unpacked_kwargs = { + k: v.value if isinstance(v, OpResult) else v for k, v in kwargs.items() + } + + if get_training_mode(): + # If training, save the inputs for the backward pass + # Map positional arguments to keyword arguments to make backward pass easier + for i_arg, (arg, param) in enumerate( + # strict=False b/c not all params in _fwd_args will be in args (i.e. defaults and **kwargs) + zip(args, self._fwd_args, strict=False) + ): + # Don't need to check for too many args or collisions with kwargs, since forward() + # will raise an exception anyway + if param.kind == inspect.Parameter.VAR_POSITIONAL: + # *args, so scoop up the rest of the arg tuple. + var_args = list(args[i_arg:]) + break + + # Normal positional arg + kwargs[param.name] = arg + else: + var_args = [] # there were no *args if we got here + + self.ctx.update(call_id, "input", (var_args, kwargs)) + + # actually call forward pass with unpacked args and kwargs + result = await self.forward(*unpacked_args, **unpacked_kwargs) + t_output: type[TOutput] = type(result) + + # Now package up my result so it can be consumed by other calls. + # Explicitly specify t_output. OpResult[TOutput] returns a generic object + op_result = OpResult[t_output]( # type: ignore[valid-type] + value=result, + call_id=call_id, + op_name=self.name, + op_class_name=resolve_fully_qualified_name(type(self)), + ) + + if get_training_mode(): + self.ctx.update(call_id, "output", op_result) + + return op_result + +
    +[docs] + def get_input_grads(self, call_id: CallID) -> GradInType: + return self.ctx.get_input_grads(call_id)
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/graph/torch_ops.html b/docs/_build/html/_modules/ldp/graph/torch_ops.html new file mode 100644 index 00000000..22a7cfa9 --- /dev/null +++ b/docs/_build/html/_modules/ldp/graph/torch_ops.html @@ -0,0 +1,254 @@ + + + + + + + ldp.graph.torch_ops — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.graph.torch_ops

    +import inspect
    +from collections.abc import Mapping, Sequence
    +from typing import Any, ClassVar
    +
    +try:
    +    import torch
    +    from torch import nn
    +except ImportError:
    +    raise ImportError(
    +        "ldp.graph.torch_ops requires PyTorch as a dependency. "
    +        "Please run `pip install ldp[nn]`."
    +    ) from None
    +
    +from .async_torch import async_protect_torch_call
    +from .op_utils import CallID, get_call_id, get_training_mode
    +from .ops import GradInType, Op, OpCtx, ResultOrValue
    +
    +
    +
    +[docs] +class TorchOp(Op[torch.Tensor]): + """An operation that wraps a PyTorch module.""" + + CTX_TENSOR_INPUT_KEY: ClassVar[str] = "tensor_input" + + def __init__(self, module: nn.Module): + super().__init__() + self.module = module + + # override forward args with the signature of the function + fwd_sig = inspect.signature(self.module.forward) + self._fwd_args = list(fwd_sig.parameters.values()) + + def __str__(self) -> str: + return f"{type(self).__name__} {type(self.module).__name__} ({id(self)})" + +
    +[docs] + async def forward(self, *args, **kwargs: Any) -> torch.Tensor: + tensor_args = [ + arg + if isinstance(arg, torch.Tensor) + else torch.tensor(arg, requires_grad=True) + for arg in args + ] + tensor_kwargs = { + k: v if isinstance(v, torch.Tensor) else torch.tensor(v, requires_grad=True) + for k, v in kwargs.items() + } + + is_training = get_training_mode() + + if is_training: + store_tensor_inputs( + ctx=self.ctx, + key=self.CTX_TENSOR_INPUT_KEY, + tensor_args=tensor_args, + tensor_kwargs=tensor_kwargs, + fwd_args=self._fwd_args, + ) + + return await async_protect_torch_call(self.module, no_grad=not is_training)( + *tensor_args, **tensor_kwargs + )
    + + +
    +[docs] + @classmethod + def backward( + cls, + ctx: OpCtx, + input_args: list[ResultOrValue], + input_kwargs: dict[str, ResultOrValue], + grad_output: float | torch.Tensor, + call_id: CallID, + ) -> GradInType: + tensor_args, tensor_kwargs = ctx.get(call_id, cls.CTX_TENSOR_INPUT_KEY) + n_pos_args = len(tensor_args) + output = ctx.get(call_id, "output").value + + if not isinstance(grad_output, torch.Tensor): + grad_output = torch.tensor(grad_output, dtype=output.dtype) + grad_output = grad_output.to(output.device) + + while grad_output.ndim < output.ndim: + # Assume we can broadcast, so expand dims + # e.g. if output.shape = (2, 1, 1) and grad_output is a scalar + # then we want to expand to (1, 1, 1) and then broadcast + grad_output = grad_output.unsqueeze(-1) + + if output.shape != grad_output.shape: + raise RuntimeError( + f"Output shape {output.shape} does not match grad_output shape {grad_output.shape}" + ) + + gradients = torch.autograd.grad( + output, + [*tensor_args, *tensor_kwargs.values()], + grad_outputs=grad_output, + allow_unused=True, + retain_graph=True, + ) + + grad_args = [grad.detach().cpu().float() for grad in gradients[:n_pos_args]] + grad_kwargs = { + k: grad.detach().cpu().float() + for k, grad in zip( + tensor_kwargs.keys(), gradients[n_pos_args:], strict=True + ) + } + + return grad_args, grad_kwargs
    +
    + + + +
    +[docs] +def store_tensor_inputs( + ctx: OpCtx, + key: str, + tensor_args: Sequence[torch.Tensor], + tensor_kwargs: Mapping[str, torch.Tensor], + fwd_args: Sequence[inspect.Parameter], + detach: bool = False, +) -> None: + call_id = get_call_id() + # Save tensor inputs for backward pass. Do not clobber "input", since + # that is needed for compute graph. Map positional args to kwargs + # Copying so we don't modify tensor_kwargs in-place + ctx_kwargs = tensor_kwargs.copy() # type: ignore[attr-defined] + + # See Op.__call__ for some notes on what this is doing. + for i_arg, (arg, param) in enumerate( + # strict=False b/c not all params in _fwd_args will be in args (i.e. defaults and **kwargs) + zip(tensor_args, fwd_args, strict=False) + ): + if param.kind == inspect.Parameter.VAR_POSITIONAL: + ctx_args = list(tensor_args[i_arg:]) + break + + # Normal positional arg + ctx_kwargs[param.name] = arg + else: + ctx_args = [] # if we got here, there were no *args + + if detach: + # Detach the tensors from the compute graph and move to CPU + ctx_args = [arg.detach().cpu() for arg in ctx_args] + ctx_kwargs = {k: v.detach().cpu() for k, v in ctx_kwargs.items()} + + ctx.update(call_id, key, (ctx_args, ctx_kwargs))
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/llms/chat.html b/docs/_build/html/_modules/ldp/llms/chat.html new file mode 100644 index 00000000..f05dca82 --- /dev/null +++ b/docs/_build/html/_modules/ldp/llms/chat.html @@ -0,0 +1,469 @@ + + + + + + + ldp.llms.chat — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.llms.chat

    +import asyncio
    +import json
    +from collections.abc import AsyncGenerator, Callable, Iterable
    +from datetime import datetime
    +from typing import Any, ClassVar, Self, cast
    +from uuid import UUID, uuid4
    +
    +import litellm
    +from aviary.message import Message
    +from aviary.tools import Tool, ToolRequestMessage, ToolsAdapter
    +from aviary.utils import is_coroutine_callable
    +from pydantic import BaseModel, ConfigDict, Field, ValidationError, model_validator
    +
    +
    +
    +[docs] +class JSONSchemaValidationError(ValueError): + """Raised when the completion does not match the specified schema."""
    + + + +
    +[docs] +class LLMResult(BaseModel): + """A class to hold the result of a LLM completion.""" + + id: UUID = Field(default_factory=uuid4) + config: dict | None = None + prompt: list[Message] | None = Field( + default=None, description="Messages sent to the LLM." + ) + messages: list[Message] | None = Field( + default=None, description="Messages received from the LLM." + ) + prompt_count: int = Field(default=0, description="Count of prompt tokens.") + completion_count: int = Field(default=0, description="Count of completion tokens.") + model: str + date: str = Field(default_factory=datetime.now().isoformat) + seconds_to_first_token: float | None = None + seconds_to_last_token: float = 0 + logprob: float | None = Field( + default=None, description="Sum of logprobs in the completion." + ) + system_fingerprint: str | None = Field( + default=None, description="System fingerprint received from the LLM." + ) + + @property + def prompt_and_completion_costs(self) -> tuple[float, float]: + """Get a two-tuple of prompt tokens cost and completion tokens cost, in USD.""" + return litellm.cost_per_token( + self.model, + prompt_tokens=self.prompt_count, + completion_tokens=self.completion_count, + ) + + @property + def provider(self) -> str: + """Get the model provider's name (e.g. "openai", "mistral").""" + return litellm.get_llm_provider(self.model)[1] + +
    +[docs] + def get_supported_openai_params(self) -> list[str] | None: + """Get the supported OpenAI parameters for the model.""" + return litellm.get_supported_openai_params(self.model)
    +
    + + + +
    +[docs] +def sum_logprobs(choice: litellm.utils.Choices) -> float | None: + """Calculate the sum of the log probabilities of an LLM completion (a Choices object). + + Args: + choice: A sequence of choices from the completion. + + Returns: + The sum of the log probabilities of the choice. + """ + try: + logprob_obj = choice.logprobs + except AttributeError: + return None + if isinstance(logprob_obj, dict): + if logprob_obj.get("content"): + return sum( + logprob_info["logprob"] for logprob_info in logprob_obj["content"] + ) + elif choice.logprobs.content: + return sum(logprob_info.logprob for logprob_info in choice.logprobs.content) + return None
    + + + +
    +[docs] +def validate_json_completion( + completion: litellm.ModelResponse, output_type: type[BaseModel] +) -> None: + """Validate a completion against a JSON schema. + + Args: + completion: The completion to validate. + output_type: The Pydantic model to validate the completion against. + """ + try: + for choice in completion.choices: + output_type.model_validate_json(choice.message.content or "") # type: ignore[union-attr] + except ValidationError as err: + raise JSONSchemaValidationError( + "The completion does not match the specified schema." + ) from err
    + + + +
    +[docs] +class MultipleCompletionLLMModel(BaseModel): + """Run n completions at once, all starting from the same messages.""" + + model_config = ConfigDict(extra="forbid") + + # this should keep the original model + # if fine-tuned, this should still refer to the base model + name: str = "unknown" + config: dict = Field( + default={ + "model": "gpt-3.5-turbo", # Default model should have cheap input/output for testing + "temperature": 0.1, + } + ) + encoding: Any | None = None + + def __str__(self) -> str: + return f"{type(self).__name__} {self.name}" + +
    +[docs] + @model_validator(mode="after") + def set_model_name(self) -> Self: + if ( + self.config.get("model") in {"gpt-3.5-turbo", None} + and self.name != "unknown" + or self.name != "unknown" + and "model" not in self.config + ): + self.config["model"] = self.name + elif "model" in self.config and self.name == "unknown": + self.name = self.config["model"] + # note we do not consider case where both are set + # because that could be true if the model is fine-tuned + return self
    + + +
    +[docs] + async def achat( + self, messages: Iterable[Message], **kwargs + ) -> litellm.ModelResponse: + return await litellm.acompletion( + messages=[m.model_dump(by_alias=True) for m in messages], + **(self.config | kwargs), + )
    + + +
    +[docs] + async def achat_iter(self, messages: Iterable[Message], **kwargs) -> AsyncGenerator: + return cast( + AsyncGenerator, + await litellm.acompletion( + messages=[m.model_dump(by_alias=True) for m in messages], + stream=True, + stream_options={ + "include_usage": True, # Included to get prompt token counts + }, + **(self.config | kwargs), + ), + )
    + + + # SEE: https://platform.openai.com/docs/api-reference/chat/create#chat-create-tool_choice + # > `required` means the model must call one or more tools. + TOOL_CHOICE_REQUIRED: ClassVar[str] = "required" + +
    +[docs] + async def call( # noqa: C901, PLR0915 + self, + messages: list[Message], + callbacks: list[Callable] | None = None, + output_type: type[BaseModel] | None = None, + tools: list[Tool] | None = None, + tool_choice: Tool | str | None = TOOL_CHOICE_REQUIRED, + **chat_kwargs, + ) -> list[LLMResult]: + start_clock = asyncio.get_running_loop().time() + + # Deal with tools. OpenAI throws an error if tool list is empty, + # so skip this block if tools in (None, []) + if tools: + chat_kwargs["tools"] = ToolsAdapter.dump_python( + tools, exclude_none=True, by_alias=True + ) + if tool_choice is not None: + chat_kwargs["tool_choice"] = ( + { + "type": "function", + "function": {"name": tool_choice.info.name}, + } + if isinstance(tool_choice, Tool) + else tool_choice + ) + + # deal with specifying output type + if output_type is not None: + schema = json.dumps( + output_type.model_json_schema(mode="serialization"), indent=2 + ) + schema_msg = f"Respond following this JSON schema:\n\n{schema}" + # Get the system prompt and its index, or the index to add it + i, system_prompt = next( + ((i, m) for i, m in enumerate(messages) if m.role == "system"), + (0, None), + ) + messages = [ + *messages[:i], + system_prompt.append_text(schema_msg, inplace=False) + if system_prompt + else Message(role="system", content=schema_msg), + *messages[i + 1 if system_prompt else i :], + ] + chat_kwargs["response_format"] = {"type": "json_object"} + + # add static configuration to kwargs + chat_kwargs = self.config | chat_kwargs + n = chat_kwargs.get("n", 1) # number of completions + if n < 1: + raise ValueError("Number of completions (n) must be >= 1.") + + prompt = [ + m + if not isinstance(m, ToolRequestMessage) or m.tool_calls + # OpenAI doesn't allow for empty tool_calls lists, so downcast empty + # ToolRequestMessage to Message here + else Message(role=m.role, content=m.content) + for m in messages + ] + results: list[LLMResult] = [] + + if callbacks is None: + completion: litellm.ModelResponse = await self.achat(prompt, **chat_kwargs) + if output_type is not None: + validate_json_completion(completion, output_type) + + for choice in completion.choices: + if isinstance(choice, litellm.utils.StreamingChoices): + raise NotImplementedError("Streaming is not yet supported.") + + if ( + tools is not None # Allows for empty tools list + or choice.finish_reason == "tool_calls" + or (getattr(choice.message, "tool_calls", None) is not None) + ): + serialized_choice_message = choice.message.model_dump() + serialized_choice_message["tool_calls"] = ( + serialized_choice_message.get("tool_calls") or [] + ) + output_messages: list[Message | ToolRequestMessage] = [ + ToolRequestMessage(**serialized_choice_message) + ] + else: + output_messages = [Message(**choice.message.model_dump())] + + results.append( + LLMResult( + model=self.name, + config=chat_kwargs, + prompt=prompt, + messages=output_messages, + logprob=sum_logprobs(choice), + system_fingerprint=completion.system_fingerprint, + # Note that these counts are aggregated over all choices + completion_count=completion.usage.completion_tokens, # type: ignore[attr-defined,unused-ignore] + prompt_count=completion.usage.prompt_tokens, # type: ignore[attr-defined,unused-ignore] + ) + ) + else: + if tools: + raise NotImplementedError("Using tools with callbacks is not supported") + if n > 1: + raise NotImplementedError( + "Multiple completions with callbacks is not supported" + ) + result = LLMResult(model=self.name, config=chat_kwargs, prompt=prompt) + + sync_callbacks = [f for f in callbacks if not is_coroutine_callable(f)] + async_callbacks = [f for f in callbacks if is_coroutine_callable(f)] + stream_completion = await self.achat_iter(messages, **chat_kwargs) + text_result = [] + role = "assistant" + + async for chunk in stream_completion: + delta = chunk.choices[0].delta + role = delta.role or role + if delta.content: + s = delta.content + if result.seconds_to_first_token == 0: + result.seconds_to_first_token = ( + asyncio.get_running_loop().time() - start_clock + ) + text_result.append(s) + [await f(s) for f in async_callbacks] + [f(s) for f in sync_callbacks] + if hasattr(chunk, "usage"): + result.prompt_count = chunk.usage.prompt_tokens + + output = "".join(text_result) + result.completion_count = litellm.token_counter( + model=self.name, + text=output, + ) + # TODO: figure out how tools stream, and log probs + result.messages = [Message(role=role, content=output)] + results.append(result) + + if not results: + # This happens in unit tests. We should probably not keep this block around + # long-term. Previously, we would emit an empty ToolRequestMessage if + # completion.choices were empty, so I am replicating that here. + results.append( + LLMResult( + model=self.name, + config=chat_kwargs, + prompt=prompt, + messages=[ToolRequestMessage(tool_calls=[])], + ) + ) + + end_clock = asyncio.get_running_loop().time() + + for result in results: + # Manually update prompt count if not set, which can + # happen if the target model doesn't support 'include_usage' + if not result.prompt_count: + result.prompt_count = litellm.token_counter( + model=self.name, + messages=[m.model_dump() for m in result.messages], # type: ignore[union-attr] + ) + + # update with server-side counts + result.seconds_to_last_token = end_clock - start_clock + + return results
    +
    + + + +
    +[docs] +class LLMModel(MultipleCompletionLLMModel): +
    +[docs] + async def call(self, *args, **kwargs) -> LLMResult: # type: ignore[override] + return (await super().call(*args, **kwargs))[0]
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/llms/embeddings.html b/docs/_build/html/_modules/ldp/llms/embeddings.html new file mode 100644 index 00000000..874ebae9 --- /dev/null +++ b/docs/_build/html/_modules/ldp/llms/embeddings.html @@ -0,0 +1,276 @@ + + + + + + + ldp.llms.embeddings — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.llms.embeddings

    +import asyncio
    +from abc import ABC, abstractmethod
    +from enum import StrEnum
    +from typing import Any
    +
    +import litellm
    +import numpy as np
    +import tiktoken
    +from pydantic import BaseModel, ConfigDict, Field, model_validator
    +
    +
    +
    +[docs] +class EmbeddingModes(StrEnum): + """Enum representing the different modes of an embedding model.""" + + DOCUMENT = "document" + QUERY = "query"
    + + + +
    +[docs] +class EmbeddingModel(ABC, BaseModel): + name: str + dimensions: int | None = None + +
    +[docs] + def set_mode(self, mode: EmbeddingModes) -> None: + """Several embedding models have a 'mode' or prompt which affects output."""
    + + +
    +[docs] + @abstractmethod + async def embed_texts(self, texts: list[str]) -> list[np.ndarray]: + pass
    + + +
    +[docs] + async def embed_text(self, text: str) -> np.ndarray: + return (await self.embed_texts([text]))[0]
    + + +
    +[docs] + @staticmethod + def from_name(embedding: str, **kwargs) -> "EmbeddingModel": + if embedding.startswith("hybrid"): + dense_model = LiteEmbeddingModel(name="-".join(embedding.split("-")[1:])) + return HybridEmbeddingModel( + name=embedding, models=[dense_model, SparseEmbeddingModel(**kwargs)] + ) + if embedding == "sparse": + return SparseEmbeddingModel(**kwargs) + return LiteEmbeddingModel(name=embedding, **kwargs)
    +
    + + + +
    +[docs] +class LiteEmbeddingModel(EmbeddingModel): + name: str = Field(default="text-embedding-3-small") + dimensions: int | None = Field( + default=None, + description=( + "The length an embedding will have. If left unspecified, we attempt to" + " infer an un-truncated length via LiteLLM's internal model map. If this" + " inference fails, the embedding will be un-truncated." + ), + ) + batch_size: int = 16 + embed_kwargs: dict[str, Any] = Field( + default_factory=dict, + description="Extra kwargs to pass to litellm.aembedding.", + ) + +
    +[docs] + @model_validator(mode="before") + @classmethod + def infer_dimensions(cls, data: dict[str, Any]) -> dict[str, Any]: + if data.get("dimensions") is not None: + return data + # Let's infer the dimensions + config: dict[str, dict[str, Any]] = litellm.get_model_cost_map( + url="https://raw.githubusercontent.com/BerriAI/litellm/main/litellm/model_prices_and_context_window_backup.json" + ) + output_vector_size: int | None = config.get(data.get("name", ""), {}).get( # noqa: FURB184 + "output_vector_size" + ) + if output_vector_size: + data["dimensions"] = output_vector_size + return data
    + + +
    +[docs] + async def embed_texts(self, texts: list[str]) -> list[np.ndarray]: + embeddings = [] + # Before you get excited to asyncio.gather this: + # The point of this is to not hit the API rate limit + for i in range(0, len(texts), self.batch_size): + response = await litellm.aembedding( + model=self.name, + input=texts[i : i + self.batch_size], + encoding_format="float", + dimensions=self.dimensions, + **self.embed_kwargs, + ) + embeddings.extend([ + np.array(e["embedding"], dtype=np.float32) for e in response.data + ]) + return embeddings
    +
    + + + +
    +[docs] +class SparseEmbeddingModel(EmbeddingModel): + """This is a very simple keyword search model - probably best to be mixed with others.""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + name: str = "sparse" + dimensions: int = 256 + enc: tiktoken.Encoding = Field( + default_factory=lambda: tiktoken.get_encoding("cl100k_base") + ) + +
    +[docs] + async def embed_texts(self, texts) -> list[np.ndarray]: + enc_batch = self.enc.encode_ordinary_batch(texts) + # now get frequency of each token rel to length + return [ + np.bincount( + [xi % self.dimensions for xi in x], minlength=self.dimensions + ).astype(np.float32) + / len(x) + for x in enc_batch + ]
    +
    + + + +
    +[docs] +class HybridEmbeddingModel(EmbeddingModel): + name: str = "hybrid-embed" + models: list[EmbeddingModel] + +
    +[docs] + @model_validator(mode="before") + @classmethod + def infer_dimensions(cls, data: dict[str, Any]) -> dict[str, Any]: + if data.get("dimensions") is not None: + raise ValueError(f"Don't specify dimensions to {cls.__name__}.") + if not data.get("models") or any(m.dimensions is None for m in data["models"]): + return data + data["dimensions"] = sum(m.dimensions for m in data["models"]) + return data
    + + +
    +[docs] + async def embed_texts(self, texts): + all_embeds = await asyncio.gather(*[m.embed_texts(texts) for m in self.models]) + return np.concatenate(all_embeds, axis=1)
    +
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/llms/prompts.html b/docs/_build/html/_modules/ldp/llms/prompts.html new file mode 100644 index 00000000..4905f6f1 --- /dev/null +++ b/docs/_build/html/_modules/ldp/llms/prompts.html @@ -0,0 +1,215 @@ + + + + + + + ldp.llms.prompts — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.llms.prompts

    +"""This module provides utility functions for appending and prepending system messages."""
    +
    +from collections.abc import Collection, Iterable
    +
    +from aviary.message import Message
    +
    +
    +
    +[docs] +def append_to_messages(messages: list[Message], new_message: Message) -> list[Message]: + """Appends a message to a list of messages, returning that in-place modified list. + + Examples: + >>> messages = [Message(content="Hello")] + >>> modified_messages = append_to_messages(messages, Message(content="New")) + >>> modified_messages + [Message(role='user', content='Hello'), Message(role='user', content='New')] + >>> id(messages) == id(modified_messages) + True + """ + messages.append(new_message) + return messages
    + + + +
    +[docs] +def append_to_sys(user_content: str, sys_content: str | None = None) -> list[Message]: + """Appends a user message to a list of messages, optionally including a system message. + + Args: + user_content: The content of the user message. + sys_content: Optional content for the system message. Defaults to None. + + Returns: + A list of messages including the optional system message and the user message. + + Examples: + >>> append_to_sys("Hello, world!") + [Message(role='user', content='Hello, world!')] + + >>> append_to_sys("Hello, world!", "System initialized.") + [Message(role='system', content='System initialized.'), Message(role='user', content='Hello, world!')] + """ + sys = [Message(role="system", content=sys_content)] if sys_content else [] + return [*sys, Message(content=user_content)]
    + + + +
    +[docs] +def prepend_sys(messages: Collection, sys_content: str) -> list[Message]: + """Prepends a system message to a list of messages. + + Args: + messages: The list of existing messages. + sys_content: The content of the system message to be prepended. + + Returns: + A new list of messages with the system message prepended. + + Examples: + >>> messages = [Message(role="user", content="Hello!")] + >>> prepend_sys(messages, "System initialized.") + [Message(role='system', content='System initialized.'), Message(role='user', content='Hello!')] + """ + return [Message(role="system", content=sys_content), *messages]
    + + + +
    +[docs] +def indent_xml(xml_string, indent_size=2): + output = [] + indent_level = 0 + + # Split the input XML into parts by tags + parts = xml_string.replace(">", ">\n").replace("<", "\n<").split("\n") + parts = [part for part in parts if part.strip()] # Remove empty parts + + for part in parts: + if part.startswith("</"): + # Closing tag, decrease indent + indent_level -= indent_size + output.append(" " * indent_level + part) + elif part.startswith("<") and not part.endswith("/>") and ">" in part: + # Opening tag, maintain then increase indent + output.append(" " * indent_level + part) + indent_level += indent_size + elif part.endswith("/>"): + # Self-closing tag, just append + output.append(" " * indent_level + part) + else: + # Text or other data, maintain current indent + # Handle multiple lines within text nodes + text_lines = part.split("\n") + output.extend([ + " " * indent_level + line.strip() for line in text_lines if line.strip() + ]) + + return "\n".join(output)
    + + + +
    +[docs] +def prepend_sys_and_append_sys( + messages: Iterable[Message], initial_sys_content: str, final_sys_content: str +) -> list[Message]: + return [ + Message(role="system", content=initial_sys_content), + *messages, + Message(role="system", content=final_sys_content), + ]
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/main.html b/docs/_build/html/_modules/ldp/main.html new file mode 100644 index 00000000..b12be050 --- /dev/null +++ b/docs/_build/html/_modules/ldp/main.html @@ -0,0 +1,179 @@ + + + + + + + ldp.main — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.main

    +import argparse
    +import asyncio
    +import pickle
    +from contextlib import suppress
    +from os import PathLike
    +from pathlib import Path
    +
    +from aviary.env import Environment
    +
    +from ldp.agent import Agent
    +from ldp.alg.callbacks import TerminalPrintingCallback
    +from ldp.alg.rollout import RolloutManager
    +
    +
    +
    +[docs] +def get_or_make_agent(agent: Agent | str | PathLike) -> Agent: + if isinstance(agent, Agent): + return agent + + if isinstance(agent, str): + with suppress(KeyError): + return Agent.from_name(agent) + + path = Path(agent) + if not path.exists(): + raise ValueError(f"Could not resolve agent: {agent}") + + with path.open("rb") as f: + return pickle.load(f) # noqa: S301
    + + + +
    +[docs] +def get_or_make_environment(environment: Environment | str, task: str) -> Environment: + if isinstance(environment, Environment): + return environment + + if isinstance(environment, str): + with suppress(KeyError): + return Environment.from_name(environment, task=task) + + raise ValueError( + f"Could not resolve environment: {environment}. Available environments: {Environment.available()}" + )
    + + + +
    +[docs] +async def main( + task: str, + environment: Environment | str, + agent: Agent | str | PathLike = "SimpleAgent", +): + agent = get_or_make_agent(agent) + + callback = TerminalPrintingCallback() + rollout_manager = RolloutManager(agent=agent, callbacks=[callback]) + + _ = await rollout_manager.sample_trajectories( + environment_factory=lambda: get_or_make_environment(environment, task) + )
    + + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("task", help="Task to prompt environment with.") + parser.add_argument( + "--env", required=True, help="Environment to sample trajectories from." + ) + parser.add_argument( + "--agent", default="SimpleAgent", help="Agent to sample trajectories with." + ) + args = parser.parse_args() + + asyncio.run(main(args.task, args.env, args.agent)) +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/ldp/utils.html b/docs/_build/html/_modules/ldp/utils.html new file mode 100644 index 00000000..404f07b9 --- /dev/null +++ b/docs/_build/html/_modules/ldp/utils.html @@ -0,0 +1,215 @@ + + + + + + + ldp.utils — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ldp.utils

    +import logging
    +import logging.config
    +import os
    +from typing import Any
    +
    +import litellm
    +
    +
    +
    +[docs] +def configure_log_levels() -> None: + """Configure log levels.""" + # Set sane default LiteLLM logging configuration + # SEE: https://docs.litellm.ai/docs/observability/telemetry + litellm.telemetry = False + if ( + logging.getLevelNamesMapping().get( + os.environ.get("LITELLM_LOG", ""), logging.WARNING + ) + < logging.WARNING + ): + # If LITELLM_LOG is DEBUG or INFO, don't change the LiteLLM log levels + litellm_loggers_config: dict[str, Any] = {} + else: + litellm_loggers_config = { + "LiteLLM": {"level": "WARNING"}, + "LiteLLM Proxy": {"level": "WARNING"}, + "LiteLLM Router": {"level": "WARNING"}, + } + + logging.config.dictConfig({ + "version": 1, + "disable_existing_loggers": False, + # Lower level for httpx and LiteLLM + "loggers": {"httpx": {"level": "WARNING"}} | litellm_loggers_config, + })
    + + + +
    +[docs] +def configure_stdout_logs( + level: int | str = logging.INFO, + fmt: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s", +) -> None: + """Configure root logger to log to stdout. + + Args: + level: Log level to be emitted to stdout. + fmt: Optional format string. + """ + logging.config.dictConfig({ + "version": 1, + "disable_existing_loggers": False, + "formatters": {"standard": {"format": fmt}}, + "handlers": { + "stdout": { + "level": "INFO", + "formatter": "standard", + "class": "logging.StreamHandler", + "stream": "ext://sys.stdout", + }, + }, + "root": {"level": level, "handlers": ["stdout"]}, + })
    + + + +
    +[docs] +def discounted_returns( + rewards: list[float], terminated: list[bool], discount: float = 1.0 +) -> list[float]: + r""" + Calculate the discounted returns for a list of rewards, considering termination flags and a discount factor. + + The discounted return represents the future discounted rewards from each time step onwards, taking into account + whether an episode has terminated at each step. + + The discounted return \( G_t \) is given by: + + .. math:: + G_t = \sum_{k=1}^{\infty} \gamma^{k-1} R_{t+k} + + where: + - \( G_t \) is the discounted return starting from time step \( t \). + - \( \gamma \) is the discount factor. + - \( R_{t+k} \) is the reward received at time step \( t+k \). + + NOTE: this could live in ldp.alg, but it's here to avoid circular imports. + + Args: + rewards: A list of rewards at each time step. + terminated: A list of boolean flags indicating whether the episode terminated at each time step. + discount: Discount factor to apply to future rewards. Defaults to 1.0 which means no discounting is applied. + + Returns: + A list of discounted returns (rewards to go), with each element representing the + total discounted reward from that step onwards. + + Example: + >>> rewards = [1.0, 2.0, 3.0] + >>> terminated = [False, False, True] + >>> discounted_returns(rewards, terminated, discount=0.9) + [5.23, 4.7, 3.0] + """ + returns = [] + r = 0.0 + for reward, term in zip(reversed(rewards), reversed(terminated), strict=False): + # 1 - term is 0 if the episode has terminated + r = reward + discount * r * (1 - term) + returns.append(r) + returns.reverse() + return returns
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/tqdm/std.html b/docs/_build/html/_modules/tqdm/std.html new file mode 100644 index 00000000..57aede77 --- /dev/null +++ b/docs/_build/html/_modules/tqdm/std.html @@ -0,0 +1,1699 @@ + + + + + + + tqdm.std — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for tqdm.std

    +"""
    +Customisable progressbar decorator for iterators.
    +Includes a default `range` iterator printing to `stderr`.
    +
    +Usage:
    +>>> from tqdm import trange, tqdm
    +>>> for i in trange(10):
    +...     ...
    +"""
    +import sys
    +from collections import OrderedDict, defaultdict
    +from contextlib import contextmanager
    +from datetime import datetime, timedelta, timezone
    +from numbers import Number
    +from time import time
    +from warnings import warn
    +from weakref import WeakSet
    +
    +from ._monitor import TMonitor
    +from .utils import (
    +    CallbackIOWrapper, Comparable, DisableOnWriteError, FormatReplace, SimpleTextIOWrapper,
    +    _is_ascii, _screen_shape_wrapper, _supports_unicode, _term_move_up, disp_len, disp_trim,
    +    envwrap)
    +
    +__author__ = "https://github.com/tqdm/tqdm#contributions"
    +__all__ = ['tqdm', 'trange',
    +           'TqdmTypeError', 'TqdmKeyError', 'TqdmWarning',
    +           'TqdmExperimentalWarning', 'TqdmDeprecationWarning',
    +           'TqdmMonitorWarning']
    +
    +
    +class TqdmTypeError(TypeError):
    +    pass
    +
    +
    +class TqdmKeyError(KeyError):
    +    pass
    +
    +
    +class TqdmWarning(Warning):
    +    """base class for all tqdm warnings.
    +
    +    Used for non-external-code-breaking errors, such as garbled printing.
    +    """
    +    def __init__(self, msg, fp_write=None, *a, **k):
    +        if fp_write is not None:
    +            fp_write("\n" + self.__class__.__name__ + ": " + str(msg).rstrip() + '\n')
    +        else:
    +            super().__init__(msg, *a, **k)
    +
    +
    +class TqdmExperimentalWarning(TqdmWarning, FutureWarning):
    +    """beta feature, unstable API and behaviour"""
    +    pass
    +
    +
    +class TqdmDeprecationWarning(TqdmWarning, DeprecationWarning):
    +    # not suppressed if raised
    +    pass
    +
    +
    +class TqdmMonitorWarning(TqdmWarning, RuntimeWarning):
    +    """tqdm monitor errors which do not affect external functionality"""
    +    pass
    +
    +
    +def TRLock(*args, **kwargs):
    +    """threading RLock"""
    +    try:
    +        from threading import RLock
    +        return RLock(*args, **kwargs)
    +    except (ImportError, OSError):  # pragma: no cover
    +        pass
    +
    +
    +class TqdmDefaultWriteLock(object):
    +    """
    +    Provide a default write lock for thread and multiprocessing safety.
    +    Works only on platforms supporting `fork` (so Windows is excluded).
    +    You must initialise a `tqdm` or `TqdmDefaultWriteLock` instance
    +    before forking in order for the write lock to work.
    +    On Windows, you need to supply the lock from the parent to the children as
    +    an argument to joblib or the parallelism lib you use.
    +    """
    +    # global thread lock so no setup required for multithreading.
    +    # NB: Do not create multiprocessing lock as it sets the multiprocessing
    +    # context, disallowing `spawn()`/`forkserver()`
    +    th_lock = TRLock()
    +
    +    def __init__(self):
    +        # Create global parallelism locks to avoid racing issues with parallel
    +        # bars works only if fork available (Linux/MacOSX, but not Windows)
    +        cls = type(self)
    +        root_lock = cls.th_lock
    +        if root_lock is not None:
    +            root_lock.acquire()
    +        cls.create_mp_lock()
    +        self.locks = [lk for lk in [cls.mp_lock, cls.th_lock] if lk is not None]
    +        if root_lock is not None:
    +            root_lock.release()
    +
    +    def acquire(self, *a, **k):
    +        for lock in self.locks:
    +            lock.acquire(*a, **k)
    +
    +    def release(self):
    +        for lock in self.locks[::-1]:  # Release in inverse order of acquisition
    +            lock.release()
    +
    +    def __enter__(self):
    +        self.acquire()
    +
    +    def __exit__(self, *exc):
    +        self.release()
    +
    +    @classmethod
    +    def create_mp_lock(cls):
    +        if not hasattr(cls, 'mp_lock'):
    +            try:
    +                from multiprocessing import RLock
    +                cls.mp_lock = RLock()
    +            except (ImportError, OSError):  # pragma: no cover
    +                cls.mp_lock = None
    +
    +    @classmethod
    +    def create_th_lock(cls):
    +        assert hasattr(cls, 'th_lock')
    +        warn("create_th_lock not needed anymore", TqdmDeprecationWarning, stacklevel=2)
    +
    +
    +class Bar(object):
    +    """
    +    `str.format`-able bar with format specifiers: `[width][type]`
    +
    +    - `width`
    +      + unspecified (default): use `self.default_len`
    +      + `int >= 0`: overrides `self.default_len`
    +      + `int < 0`: subtract from `self.default_len`
    +    - `type`
    +      + `a`: ascii (`charset=self.ASCII` override)
    +      + `u`: unicode (`charset=self.UTF` override)
    +      + `b`: blank (`charset="  "` override)
    +    """
    +    ASCII = " 123456789#"
    +    UTF = u" " + u''.join(map(chr, range(0x258F, 0x2587, -1)))
    +    BLANK = "  "
    +    COLOUR_RESET = '\x1b[0m'
    +    COLOUR_RGB = '\x1b[38;2;%d;%d;%dm'
    +    COLOURS = {'BLACK': '\x1b[30m', 'RED': '\x1b[31m', 'GREEN': '\x1b[32m',
    +               'YELLOW': '\x1b[33m', 'BLUE': '\x1b[34m', 'MAGENTA': '\x1b[35m',
    +               'CYAN': '\x1b[36m', 'WHITE': '\x1b[37m'}
    +
    +    def __init__(self, frac, default_len=10, charset=UTF, colour=None):
    +        if not 0 <= frac <= 1:
    +            warn("clamping frac to range [0, 1]", TqdmWarning, stacklevel=2)
    +            frac = max(0, min(1, frac))
    +        assert default_len > 0
    +        self.frac = frac
    +        self.default_len = default_len
    +        self.charset = charset
    +        self.colour = colour
    +
    +    @property
    +    def colour(self):
    +        return self._colour
    +
    +    @colour.setter
    +    def colour(self, value):
    +        if not value:
    +            self._colour = None
    +            return
    +        try:
    +            if value.upper() in self.COLOURS:
    +                self._colour = self.COLOURS[value.upper()]
    +            elif value[0] == '#' and len(value) == 7:
    +                self._colour = self.COLOUR_RGB % tuple(
    +                    int(i, 16) for i in (value[1:3], value[3:5], value[5:7]))
    +            else:
    +                raise KeyError
    +        except (KeyError, AttributeError):
    +            warn("Unknown colour (%s); valid choices: [hex (#00ff00), %s]" % (
    +                 value, ", ".join(self.COLOURS)),
    +                 TqdmWarning, stacklevel=2)
    +            self._colour = None
    +
    +    def __format__(self, format_spec):
    +        if format_spec:
    +            _type = format_spec[-1].lower()
    +            try:
    +                charset = {'a': self.ASCII, 'u': self.UTF, 'b': self.BLANK}[_type]
    +            except KeyError:
    +                charset = self.charset
    +            else:
    +                format_spec = format_spec[:-1]
    +            if format_spec:
    +                N_BARS = int(format_spec)
    +                if N_BARS < 0:
    +                    N_BARS += self.default_len
    +            else:
    +                N_BARS = self.default_len
    +        else:
    +            charset = self.charset
    +            N_BARS = self.default_len
    +
    +        nsyms = len(charset) - 1
    +        bar_length, frac_bar_length = divmod(int(self.frac * N_BARS * nsyms), nsyms)
    +
    +        res = charset[-1] * bar_length
    +        if bar_length < N_BARS:  # whitespace padding
    +            res = res + charset[frac_bar_length] + charset[0] * (N_BARS - bar_length - 1)
    +        return self.colour + res + self.COLOUR_RESET if self.colour else res
    +
    +
    +class EMA(object):
    +    """
    +    Exponential moving average: smoothing to give progressively lower
    +    weights to older values.
    +
    +    Parameters
    +    ----------
    +    smoothing  : float, optional
    +        Smoothing factor in range [0, 1], [default: 0.3].
    +        Increase to give more weight to recent values.
    +        Ranges from 0 (yields old value) to 1 (yields new value).
    +    """
    +    def __init__(self, smoothing=0.3):
    +        self.alpha = smoothing
    +        self.last = 0
    +        self.calls = 0
    +
    +    def __call__(self, x=None):
    +        """
    +        Parameters
    +        ----------
    +        x  : float
    +            New value to include in EMA.
    +        """
    +        beta = 1 - self.alpha
    +        if x is not None:
    +            self.last = self.alpha * x + beta * self.last
    +            self.calls += 1
    +        return self.last / (1 - beta ** self.calls) if self.calls else self.last
    +
    +
    +
    +[docs] +class tqdm(Comparable): + """ + Decorate an iterable object, returning an iterator which acts exactly + like the original iterable, but prints a dynamically updating + progressbar every time a value is requested. + + Parameters + ---------- + iterable : iterable, optional + Iterable to decorate with a progressbar. + Leave blank to manually manage the updates. + desc : str, optional + Prefix for the progressbar. + total : int or float, optional + The number of expected iterations. If unspecified, + len(iterable) is used if possible. If float("inf") or as a last + resort, only basic progress statistics are displayed + (no ETA, no progressbar). + If `gui` is True and this parameter needs subsequent updating, + specify an initial arbitrary large positive number, + e.g. 9e9. + leave : bool, optional + If [default: True], keeps all traces of the progressbar + upon termination of iteration. + If `None`, will leave only if `position` is `0`. + file : `io.TextIOWrapper` or `io.StringIO`, optional + Specifies where to output the progress messages + (default: sys.stderr). Uses `file.write(str)` and `file.flush()` + methods. For encoding, see `write_bytes`. + ncols : int, optional + The width of the entire output message. If specified, + dynamically resizes the progressbar to stay within this bound. + If unspecified, attempts to use environment width. The + fallback is a meter width of 10 and no limit for the counter and + statistics. If 0, will not print any meter (only stats). + mininterval : float, optional + Minimum progress display update interval [default: 0.1] seconds. + maxinterval : float, optional + Maximum progress display update interval [default: 10] seconds. + Automatically adjusts `miniters` to correspond to `mininterval` + after long display update lag. Only works if `dynamic_miniters` + or monitor thread is enabled. + miniters : int or float, optional + Minimum progress display update interval, in iterations. + If 0 and `dynamic_miniters`, will automatically adjust to equal + `mininterval` (more CPU efficient, good for tight loops). + If > 0, will skip display of specified number of iterations. + Tweak this and `mininterval` to get very efficient loops. + If your progress is erratic with both fast and slow iterations + (network, skipping items, etc) you should set miniters=1. + ascii : bool or str, optional + If unspecified or False, use unicode (smooth blocks) to fill + the meter. The fallback is to use ASCII characters " 123456789#". + disable : bool, optional + Whether to disable the entire progressbar wrapper + [default: False]. If set to None, disable on non-TTY. + unit : str, optional + String that will be used to define the unit of each iteration + [default: it]. + unit_scale : bool or int or float, optional + If 1 or True, the number of iterations will be reduced/scaled + automatically and a metric prefix following the + International System of Units standard will be added + (kilo, mega, etc.) [default: False]. If any other non-zero + number, will scale `total` and `n`. + dynamic_ncols : bool, optional + If set, constantly alters `ncols` and `nrows` to the + environment (allowing for window resizes) [default: False]. + smoothing : float, optional + Exponential moving average smoothing factor for speed estimates + (ignored in GUI mode). Ranges from 0 (average speed) to 1 + (current/instantaneous speed) [default: 0.3]. + bar_format : str, optional + Specify a custom bar string formatting. May impact performance. + [default: '{l_bar}{bar}{r_bar}'], where + l_bar='{desc}: {percentage:3.0f}%|' and + r_bar='| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, ' + '{rate_fmt}{postfix}]' + Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt, + percentage, elapsed, elapsed_s, ncols, nrows, desc, unit, + rate, rate_fmt, rate_noinv, rate_noinv_fmt, + rate_inv, rate_inv_fmt, postfix, unit_divisor, + remaining, remaining_s, eta. + Note that a trailing ": " is automatically removed after {desc} + if the latter is empty. + initial : int or float, optional + The initial counter value. Useful when restarting a progress + bar [default: 0]. If using float, consider specifying `{n:.3f}` + or similar in `bar_format`, or specifying `unit_scale`. + position : int, optional + Specify the line offset to print this bar (starting from 0) + Automatic if unspecified. + Useful to manage multiple bars at once (eg, from threads). + postfix : dict or *, optional + Specify additional stats to display at the end of the bar. + Calls `set_postfix(**postfix)` if possible (dict). + unit_divisor : float, optional + [default: 1000], ignored unless `unit_scale` is True. + write_bytes : bool, optional + Whether to write bytes. If (default: False) will write unicode. + lock_args : tuple, optional + Passed to `refresh` for intermediate output + (initialisation, iterating, and updating). + nrows : int, optional + The screen height. If specified, hides nested bars outside this + bound. If unspecified, attempts to use environment height. + The fallback is 20. + colour : str, optional + Bar colour (e.g. 'green', '#00ff00'). + delay : float, optional + Don't display until [default: 0] seconds have elapsed. + gui : bool, optional + WARNING: internal parameter - do not use. + Use tqdm.gui.tqdm(...) instead. If set, will attempt to use + matplotlib animations for a graphical output [default: False]. + + Returns + ------- + out : decorated iterator. + """ + + monitor_interval = 10 # set to 0 to disable the thread + monitor = None + _instances = WeakSet() + +
    +[docs] + @staticmethod + def format_sizeof(num, suffix='', divisor=1000): + """ + Formats a number (greater than unity) with SI Order of Magnitude + prefixes. + + Parameters + ---------- + num : float + Number ( >= 1) to format. + suffix : str, optional + Post-postfix [default: '']. + divisor : float, optional + Divisor between prefixes [default: 1000]. + + Returns + ------- + out : str + Number with Order of Magnitude SI unit postfix. + """ + for unit in ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z']: + if abs(num) < 999.5: + if abs(num) < 99.95: + if abs(num) < 9.995: + return f'{num:1.2f}{unit}{suffix}' + return f'{num:2.1f}{unit}{suffix}' + return f'{num:3.0f}{unit}{suffix}' + num /= divisor + return f'{num:3.1f}Y{suffix}'
    + + +
    +[docs] + @staticmethod + def format_interval(t): + """ + Formats a number of seconds as a clock time, [H:]MM:SS + + Parameters + ---------- + t : int + Number of seconds. + + Returns + ------- + out : str + [H:]MM:SS + """ + mins, s = divmod(int(t), 60) + h, m = divmod(mins, 60) + return f'{h:d}:{m:02d}:{s:02d}' if h else f'{m:02d}:{s:02d}'
    + + +
    +[docs] + @staticmethod + def format_num(n): + """ + Intelligent scientific notation (.3g). + + Parameters + ---------- + n : int or float or Numeric + A Number. + + Returns + ------- + out : str + Formatted number. + """ + f = f'{n:.3g}'.replace('e+0', 'e+').replace('e-0', 'e-') + n = str(n) + return f if len(f) < len(n) else n
    + + +
    +[docs] + @staticmethod + def status_printer(file): + """ + Manage the printing and in-place updating of a line of characters. + Note that if the string is longer than a line, then in-place + updating may not work (it will print a new line at each refresh). + """ + fp = file + fp_flush = getattr(fp, 'flush', lambda: None) # pragma: no cover + if fp in (sys.stderr, sys.stdout): + getattr(sys.stderr, 'flush', lambda: None)() + getattr(sys.stdout, 'flush', lambda: None)() + + def fp_write(s): + fp.write(str(s)) + fp_flush() + + last_len = [0] + + def print_status(s): + len_s = disp_len(s) + fp_write('\r' + s + (' ' * max(last_len[0] - len_s, 0))) + last_len[0] = len_s + + return print_status
    + + +
    +[docs] + @staticmethod + def format_meter(n, total, elapsed, ncols=None, prefix='', ascii=False, unit='it', + unit_scale=False, rate=None, bar_format=None, postfix=None, + unit_divisor=1000, initial=0, colour=None, **extra_kwargs): + """ + Return a string-based progress bar given some parameters + + Parameters + ---------- + n : int or float + Number of finished iterations. + total : int or float + The expected total number of iterations. If meaningless (None), + only basic progress statistics are displayed (no ETA). + elapsed : float + Number of seconds passed since start. + ncols : int, optional + The width of the entire output message. If specified, + dynamically resizes `{bar}` to stay within this bound + [default: None]. If `0`, will not print any bar (only stats). + The fallback is `{bar:10}`. + prefix : str, optional + Prefix message (included in total width) [default: '']. + Use as {desc} in bar_format string. + ascii : bool, optional or str, optional + If not set, use unicode (smooth blocks) to fill the meter + [default: False]. The fallback is to use ASCII characters + " 123456789#". + unit : str, optional + The iteration unit [default: 'it']. + unit_scale : bool or int or float, optional + If 1 or True, the number of iterations will be printed with an + appropriate SI metric prefix (k = 10^3, M = 10^6, etc.) + [default: False]. If any other non-zero number, will scale + `total` and `n`. + rate : float, optional + Manual override for iteration rate. + If [default: None], uses n/elapsed. + bar_format : str, optional + Specify a custom bar string formatting. May impact performance. + [default: '{l_bar}{bar}{r_bar}'], where + l_bar='{desc}: {percentage:3.0f}%|' and + r_bar='| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, ' + '{rate_fmt}{postfix}]' + Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt, + percentage, elapsed, elapsed_s, ncols, nrows, desc, unit, + rate, rate_fmt, rate_noinv, rate_noinv_fmt, + rate_inv, rate_inv_fmt, postfix, unit_divisor, + remaining, remaining_s, eta. + Note that a trailing ": " is automatically removed after {desc} + if the latter is empty. + postfix : *, optional + Similar to `prefix`, but placed at the end + (e.g. for additional stats). + Note: postfix is usually a string (not a dict) for this method, + and will if possible be set to postfix = ', ' + postfix. + However other types are supported (#382). + unit_divisor : float, optional + [default: 1000], ignored unless `unit_scale` is True. + initial : int or float, optional + The initial counter value [default: 0]. + colour : str, optional + Bar colour (e.g. 'green', '#00ff00'). + + Returns + ------- + out : Formatted meter and stats, ready to display. + """ + + # sanity check: total + if total and n >= (total + 0.5): # allow float imprecision (#849) + total = None + + # apply custom scale if necessary + if unit_scale and unit_scale not in (True, 1): + if total: + total *= unit_scale + n *= unit_scale + if rate: + rate *= unit_scale # by default rate = self.avg_dn / self.avg_dt + unit_scale = False + + elapsed_str = tqdm.format_interval(elapsed) + + # if unspecified, attempt to use rate = average speed + # (we allow manual override since predicting time is an arcane art) + if rate is None and elapsed: + rate = (n - initial) / elapsed + inv_rate = 1 / rate if rate else None + format_sizeof = tqdm.format_sizeof + rate_noinv_fmt = ((format_sizeof(rate) if unit_scale else f'{rate:5.2f}') + if rate else '?') + unit + '/s' + rate_inv_fmt = ( + (format_sizeof(inv_rate) if unit_scale else f'{inv_rate:5.2f}') + if inv_rate else '?') + 's/' + unit + rate_fmt = rate_inv_fmt if inv_rate and inv_rate > 1 else rate_noinv_fmt + + if unit_scale: + n_fmt = format_sizeof(n, divisor=unit_divisor) + total_fmt = format_sizeof(total, divisor=unit_divisor) if total is not None else '?' + else: + n_fmt = str(n) + total_fmt = str(total) if total is not None else '?' + + try: + postfix = ', ' + postfix if postfix else '' + except TypeError: + pass + + remaining = (total - n) / rate if rate and total else 0 + remaining_str = tqdm.format_interval(remaining) if rate else '?' + try: + eta_dt = (datetime.now() + timedelta(seconds=remaining) + if rate and total else datetime.fromtimestamp(0, timezone.utc)) + except OverflowError: + eta_dt = datetime.max + + # format the stats displayed to the left and right sides of the bar + if prefix: + # old prefix setup work around + bool_prefix_colon_already = (prefix[-2:] == ": ") + l_bar = prefix if bool_prefix_colon_already else prefix + ": " + else: + l_bar = '' + + r_bar = f'| {n_fmt}/{total_fmt} [{elapsed_str}<{remaining_str}, {rate_fmt}{postfix}]' + + # Custom bar formatting + # Populate a dict with all available progress indicators + format_dict = { + # slight extension of self.format_dict + 'n': n, 'n_fmt': n_fmt, 'total': total, 'total_fmt': total_fmt, + 'elapsed': elapsed_str, 'elapsed_s': elapsed, + 'ncols': ncols, 'desc': prefix or '', 'unit': unit, + 'rate': inv_rate if inv_rate and inv_rate > 1 else rate, + 'rate_fmt': rate_fmt, 'rate_noinv': rate, + 'rate_noinv_fmt': rate_noinv_fmt, 'rate_inv': inv_rate, + 'rate_inv_fmt': rate_inv_fmt, + 'postfix': postfix, 'unit_divisor': unit_divisor, + 'colour': colour, + # plus more useful definitions + 'remaining': remaining_str, 'remaining_s': remaining, + 'l_bar': l_bar, 'r_bar': r_bar, 'eta': eta_dt, + **extra_kwargs} + + # total is known: we can predict some stats + if total: + # fractional and percentage progress + frac = n / total + percentage = frac * 100 + + l_bar += f'{percentage:3.0f}%|' + + if ncols == 0: + return l_bar[:-1] + r_bar[1:] + + format_dict.update(l_bar=l_bar) + if bar_format: + format_dict.update(percentage=percentage) + + # auto-remove colon for empty `{desc}` + if not prefix: + bar_format = bar_format.replace("{desc}: ", '') + else: + bar_format = "{l_bar}{bar}{r_bar}" + + full_bar = FormatReplace() + nobar = bar_format.format(bar=full_bar, **format_dict) + if not full_bar.format_called: + return nobar # no `{bar}`; nothing else to do + + # Formatting progress bar space available for bar's display + full_bar = Bar(frac, + max(1, ncols - disp_len(nobar)) if ncols else 10, + charset=Bar.ASCII if ascii is True else ascii or Bar.UTF, + colour=colour) + if not _is_ascii(full_bar.charset) and _is_ascii(bar_format): + bar_format = str(bar_format) + res = bar_format.format(bar=full_bar, **format_dict) + return disp_trim(res, ncols) if ncols else res + + elif bar_format: + # user-specified bar_format but no total + l_bar += '|' + format_dict.update(l_bar=l_bar, percentage=0) + full_bar = FormatReplace() + nobar = bar_format.format(bar=full_bar, **format_dict) + if not full_bar.format_called: + return nobar + full_bar = Bar(0, + max(1, ncols - disp_len(nobar)) if ncols else 10, + charset=Bar.BLANK, colour=colour) + res = bar_format.format(bar=full_bar, **format_dict) + return disp_trim(res, ncols) if ncols else res + else: + # no total: no progressbar, ETA, just progress stats + return (f'{(prefix + ": ") if prefix else ""}' + f'{n_fmt}{unit} [{elapsed_str}, {rate_fmt}{postfix}]')
    + + + def __new__(cls, *_, **__): + instance = object.__new__(cls) + with cls.get_lock(): # also constructs lock if non-existent + cls._instances.add(instance) + # create monitoring thread + if cls.monitor_interval and (cls.monitor is None + or not cls.monitor.report()): + try: + cls.monitor = TMonitor(cls, cls.monitor_interval) + except Exception as e: # pragma: nocover + warn("tqdm:disabling monitor support" + " (monitor_interval = 0) due to:\n" + str(e), + TqdmMonitorWarning, stacklevel=2) + cls.monitor_interval = 0 + return instance + + @classmethod + def _get_free_pos(cls, instance=None): + """Skips specified instance.""" + positions = {abs(inst.pos) for inst in cls._instances + if inst is not instance and hasattr(inst, "pos")} + return min(set(range(len(positions) + 1)).difference(positions)) + + @classmethod + def _decr_instances(cls, instance): + """ + Remove from list and reposition another unfixed bar + to fill the new gap. + + This means that by default (where all nested bars are unfixed), + order is not maintained but screen flicker/blank space is minimised. + (tqdm<=4.44.1 moved ALL subsequent unfixed bars up.) + """ + with cls._lock: + try: + cls._instances.remove(instance) + except KeyError: + # if not instance.gui: # pragma: no cover + # raise + pass # py2: maybe magically removed already + # else: + if not instance.gui: + last = (instance.nrows or 20) - 1 + # find unfixed (`pos >= 0`) overflow (`pos >= nrows - 1`) + instances = list(filter( + lambda i: hasattr(i, "pos") and last <= i.pos, + cls._instances)) + # set first found to current `pos` + if instances: + inst = min(instances, key=lambda i: i.pos) + inst.clear(nolock=True) + inst.pos = abs(instance.pos) + +
    +[docs] + @classmethod + def write(cls, s, file=None, end="\n", nolock=False): + """Print a message via tqdm (without overlap with bars).""" + fp = file if file is not None else sys.stdout + with cls.external_write_mode(file=file, nolock=nolock): + # Write the message + fp.write(s) + fp.write(end)
    + + +
    +[docs] + @classmethod + @contextmanager + def external_write_mode(cls, file=None, nolock=False): + """ + Disable tqdm within context and refresh tqdm when exits. + Useful when writing to standard output stream + """ + fp = file if file is not None else sys.stdout + + try: + if not nolock: + cls.get_lock().acquire() + # Clear all bars + inst_cleared = [] + for inst in getattr(cls, '_instances', []): + # Clear instance if in the target output file + # or if write output + tqdm output are both either + # sys.stdout or sys.stderr (because both are mixed in terminal) + if hasattr(inst, "start_t") and (inst.fp == fp or all( + f in (sys.stdout, sys.stderr) for f in (fp, inst.fp))): + inst.clear(nolock=True) + inst_cleared.append(inst) + yield + # Force refresh display of bars we cleared + for inst in inst_cleared: + inst.refresh(nolock=True) + finally: + if not nolock: + cls._lock.release()
    + + +
    +[docs] + @classmethod + def set_lock(cls, lock): + """Set the global lock.""" + cls._lock = lock
    + + +
    +[docs] + @classmethod + def get_lock(cls): + """Get the global lock. Construct it if it does not exist.""" + if not hasattr(cls, '_lock'): + cls._lock = TqdmDefaultWriteLock() + return cls._lock
    + + +
    +[docs] + @classmethod + def pandas(cls, **tqdm_kwargs): + """ + Registers the current `tqdm` class with + pandas.core. + ( frame.DataFrame + | series.Series + | groupby.(generic.)DataFrameGroupBy + | groupby.(generic.)SeriesGroupBy + ).progress_apply + + A new instance will be created every time `progress_apply` is called, + and each instance will automatically `close()` upon completion. + + Parameters + ---------- + tqdm_kwargs : arguments for the tqdm instance + + Examples + -------- + >>> import pandas as pd + >>> import numpy as np + >>> from tqdm import tqdm + >>> from tqdm.gui import tqdm as tqdm_gui + >>> + >>> df = pd.DataFrame(np.random.randint(0, 100, (100000, 6))) + >>> tqdm.pandas(ncols=50) # can use tqdm_gui, optional kwargs, etc + >>> # Now you can use `progress_apply` instead of `apply` + >>> df.groupby(0).progress_apply(lambda x: x**2) + + References + ---------- + <https://stackoverflow.com/questions/18603270/\ + progress-indicator-during-pandas-operations-python> + """ + from warnings import catch_warnings, simplefilter + + from pandas.core.frame import DataFrame + from pandas.core.series import Series + try: + with catch_warnings(): + simplefilter("ignore", category=FutureWarning) + from pandas import Panel + except ImportError: # pandas>=1.2.0 + Panel = None + Rolling, Expanding = None, None + try: # pandas>=1.0.0 + from pandas.core.window.rolling import _Rolling_and_Expanding + except ImportError: + try: # pandas>=0.18.0 + from pandas.core.window import _Rolling_and_Expanding + except ImportError: # pandas>=1.2.0 + try: # pandas>=1.2.0 + from pandas.core.window.expanding import Expanding + from pandas.core.window.rolling import Rolling + _Rolling_and_Expanding = Rolling, Expanding + except ImportError: # pragma: no cover + _Rolling_and_Expanding = None + try: # pandas>=0.25.0 + from pandas.core.groupby.generic import SeriesGroupBy # , NDFrameGroupBy + from pandas.core.groupby.generic import DataFrameGroupBy + except ImportError: # pragma: no cover + try: # pandas>=0.23.0 + from pandas.core.groupby.groupby import DataFrameGroupBy, SeriesGroupBy + except ImportError: + from pandas.core.groupby import DataFrameGroupBy, SeriesGroupBy + try: # pandas>=0.23.0 + from pandas.core.groupby.groupby import GroupBy + except ImportError: # pragma: no cover + from pandas.core.groupby import GroupBy + + try: # pandas>=0.23.0 + from pandas.core.groupby.groupby import PanelGroupBy + except ImportError: + try: + from pandas.core.groupby import PanelGroupBy + except ImportError: # pandas>=0.25.0 + PanelGroupBy = None + + tqdm_kwargs = tqdm_kwargs.copy() + deprecated_t = [tqdm_kwargs.pop('deprecated_t', None)] + + def inner_generator(df_function='apply'): + def inner(df, func, *args, **kwargs): + """ + Parameters + ---------- + df : (DataFrame|Series)[GroupBy] + Data (may be grouped). + func : function + To be applied on the (grouped) data. + **kwargs : optional + Transmitted to `df.apply()`. + """ + + # Precompute total iterations + total = tqdm_kwargs.pop("total", getattr(df, 'ngroups', None)) + if total is None: # not grouped + if df_function == 'applymap': + total = df.size + elif isinstance(df, Series): + total = len(df) + elif (_Rolling_and_Expanding is None or + not isinstance(df, _Rolling_and_Expanding)): + # DataFrame or Panel + axis = kwargs.get('axis', 0) + if axis == 'index': + axis = 0 + elif axis == 'columns': + axis = 1 + # when axis=0, total is shape[axis1] + total = df.size // df.shape[axis] + + # Init bar + if deprecated_t[0] is not None: + t = deprecated_t[0] + deprecated_t[0] = None + else: + t = cls(total=total, **tqdm_kwargs) + + if len(args) > 0: + # *args intentionally not supported (see #244, #299) + TqdmDeprecationWarning( + "Except func, normal arguments are intentionally" + + " not supported by" + + " `(DataFrame|Series|GroupBy).progress_apply`." + + " Use keyword arguments instead.", + fp_write=getattr(t.fp, 'write', sys.stderr.write)) + + try: # pandas>=1.3.0 + from pandas.core.common import is_builtin_func + except ImportError: + is_builtin_func = df._is_builtin_func + try: + func = is_builtin_func(func) + except TypeError: + pass + + # Define bar updating wrapper + def wrapper(*args, **kwargs): + # update tbar correctly + # it seems `pandas apply` calls `func` twice + # on the first column/row to decide whether it can + # take a fast or slow code path; so stop when t.total==t.n + t.update(n=1 if not t.total or t.n < t.total else 0) + return func(*args, **kwargs) + + # Apply the provided function (in **kwargs) + # on the df using our wrapper (which provides bar updating) + try: + return getattr(df, df_function)(wrapper, **kwargs) + finally: + t.close() + + return inner + + # Monkeypatch pandas to provide easy methods + # Enable custom tqdm progress in pandas! + Series.progress_apply = inner_generator() + SeriesGroupBy.progress_apply = inner_generator() + Series.progress_map = inner_generator('map') + SeriesGroupBy.progress_map = inner_generator('map') + + DataFrame.progress_apply = inner_generator() + DataFrameGroupBy.progress_apply = inner_generator() + DataFrame.progress_applymap = inner_generator('applymap') + DataFrame.progress_map = inner_generator('map') + DataFrameGroupBy.progress_map = inner_generator('map') + + if Panel is not None: + Panel.progress_apply = inner_generator() + if PanelGroupBy is not None: + PanelGroupBy.progress_apply = inner_generator() + + GroupBy.progress_apply = inner_generator() + GroupBy.progress_aggregate = inner_generator('aggregate') + GroupBy.progress_transform = inner_generator('transform') + + if Rolling is not None and Expanding is not None: + Rolling.progress_apply = inner_generator() + Expanding.progress_apply = inner_generator() + elif _Rolling_and_Expanding is not None: + _Rolling_and_Expanding.progress_apply = inner_generator()
    + + + # override defaults via env vars + @envwrap("TQDM_", is_method=True, types={'total': float, 'ncols': int, 'miniters': float, + 'position': int, 'nrows': int}) + def __init__(self, iterable=None, desc=None, total=None, leave=True, file=None, + ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, + ascii=None, disable=False, unit='it', unit_scale=False, + dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, + position=None, postfix=None, unit_divisor=1000, write_bytes=False, + lock_args=None, nrows=None, colour=None, delay=0.0, gui=False, + **kwargs): + """see tqdm.tqdm for arguments""" + if file is None: + file = sys.stderr + + if write_bytes: + # Despite coercing unicode into bytes, py2 sys.std* streams + # should have bytes written to them. + file = SimpleTextIOWrapper( + file, encoding=getattr(file, 'encoding', None) or 'utf-8') + + file = DisableOnWriteError(file, tqdm_instance=self) + + if disable is None and hasattr(file, "isatty") and not file.isatty(): + disable = True + + if total is None and iterable is not None: + try: + total = len(iterable) + except (TypeError, AttributeError): + total = None + if total == float("inf"): + # Infinite iterations, behave same as unknown + total = None + + if disable: + self.iterable = iterable + self.disable = disable + with self._lock: + self.pos = self._get_free_pos(self) + self._instances.remove(self) + self.n = initial + self.total = total + self.leave = leave + return + + if kwargs: + self.disable = True + with self._lock: + self.pos = self._get_free_pos(self) + self._instances.remove(self) + raise ( + TqdmDeprecationWarning( + "`nested` is deprecated and automated.\n" + "Use `position` instead for manual control.\n", + fp_write=getattr(file, 'write', sys.stderr.write)) + if "nested" in kwargs else + TqdmKeyError("Unknown argument(s): " + str(kwargs))) + + # Preprocess the arguments + if ( + (ncols is None or nrows is None) and (file in (sys.stderr, sys.stdout)) + ) or dynamic_ncols: # pragma: no cover + if dynamic_ncols: + dynamic_ncols = _screen_shape_wrapper() + if dynamic_ncols: + ncols, nrows = dynamic_ncols(file) + else: + _dynamic_ncols = _screen_shape_wrapper() + if _dynamic_ncols: + _ncols, _nrows = _dynamic_ncols(file) + if ncols is None: + ncols = _ncols + if nrows is None: + nrows = _nrows + + if miniters is None: + miniters = 0 + dynamic_miniters = True + else: + dynamic_miniters = False + + if mininterval is None: + mininterval = 0 + + if maxinterval is None: + maxinterval = 0 + + if ascii is None: + ascii = not _supports_unicode(file) + + if bar_format and ascii is not True and not _is_ascii(ascii): + # Convert bar format into unicode since terminal uses unicode + bar_format = str(bar_format) + + if smoothing is None: + smoothing = 0 + + # Store the arguments + self.iterable = iterable + self.desc = desc or '' + self.total = total + self.leave = leave + self.fp = file + self.ncols = ncols + self.nrows = nrows + self.mininterval = mininterval + self.maxinterval = maxinterval + self.miniters = miniters + self.dynamic_miniters = dynamic_miniters + self.ascii = ascii + self.disable = disable + self.unit = unit + self.unit_scale = unit_scale + self.unit_divisor = unit_divisor + self.initial = initial + self.lock_args = lock_args + self.delay = delay + self.gui = gui + self.dynamic_ncols = dynamic_ncols + self.smoothing = smoothing + self._ema_dn = EMA(smoothing) + self._ema_dt = EMA(smoothing) + self._ema_miniters = EMA(smoothing) + self.bar_format = bar_format + self.postfix = None + self.colour = colour + self._time = time + if postfix: + try: + self.set_postfix(refresh=False, **postfix) + except TypeError: + self.postfix = postfix + + # Init the iterations counters + self.last_print_n = initial + self.n = initial + + # if nested, at initial sp() call we replace '\r' by '\n' to + # not overwrite the outer progress bar + with self._lock: + # mark fixed positions as negative + self.pos = self._get_free_pos(self) if position is None else -position + + if not gui: + # Initialize the screen printer + self.sp = self.status_printer(self.fp) + if delay <= 0: + self.refresh(lock_args=self.lock_args) + + # Init the time counter + self.last_print_t = self._time() + # NB: Avoid race conditions by setting start_t at the very end of init + self.start_t = self.last_print_t + + def __bool__(self): + if self.total is not None: + return self.total > 0 + if self.iterable is None: + raise TypeError('bool() undefined when iterable == total == None') + return bool(self.iterable) + + def __len__(self): + return ( + self.total if self.iterable is None + else self.iterable.shape[0] if hasattr(self.iterable, "shape") + else len(self.iterable) if hasattr(self.iterable, "__len__") + else self.iterable.__length_hint__() if hasattr(self.iterable, "__length_hint__") + else getattr(self, "total", None)) + + def __reversed__(self): + try: + orig = self.iterable + except AttributeError: + raise TypeError("'tqdm' object is not reversible") + else: + self.iterable = reversed(self.iterable) + return self.__iter__() + finally: + self.iterable = orig + + def __contains__(self, item): + contains = getattr(self.iterable, '__contains__', None) + return contains(item) if contains is not None else item in self.__iter__() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + try: + self.close() + except AttributeError: + # maybe eager thread cleanup upon external error + if (exc_type, exc_value, traceback) == (None, None, None): + raise + warn("AttributeError ignored", TqdmWarning, stacklevel=2) + + def __del__(self): + self.close() + + def __str__(self): + return self.format_meter(**self.format_dict) + + @property + def _comparable(self): + return abs(getattr(self, "pos", 1 << 31)) + + def __hash__(self): + return id(self) + + def __iter__(self): + """Backward-compatibility to use: for x in tqdm(iterable)""" + + # Inlining instance variables as locals (speed optimisation) + iterable = self.iterable + + # If the bar is disabled, then just walk the iterable + # (note: keep this check outside the loop for performance) + if self.disable: + for obj in iterable: + yield obj + return + + mininterval = self.mininterval + last_print_t = self.last_print_t + last_print_n = self.last_print_n + min_start_t = self.start_t + self.delay + n = self.n + time = self._time + + try: + for obj in iterable: + yield obj + # Update and possibly print the progressbar. + # Note: does not call self.update(1) for speed optimisation. + n += 1 + + if n - last_print_n >= self.miniters: + cur_t = time() + dt = cur_t - last_print_t + if dt >= mininterval and cur_t >= min_start_t: + self.update(n - last_print_n) + last_print_n = self.last_print_n + last_print_t = self.last_print_t + finally: + self.n = n + self.close() + +
    +[docs] + def update(self, n=1): + """ + Manually update the progress bar, useful for streams + such as reading files. + E.g.: + >>> t = tqdm(total=filesize) # Initialise + >>> for current_buffer in stream: + ... ... + ... t.update(len(current_buffer)) + >>> t.close() + The last line is highly recommended, but possibly not necessary if + `t.update()` will be called in such a way that `filesize` will be + exactly reached and printed. + + Parameters + ---------- + n : int or float, optional + Increment to add to the internal counter of iterations + [default: 1]. If using float, consider specifying `{n:.3f}` + or similar in `bar_format`, or specifying `unit_scale`. + + Returns + ------- + out : bool or None + True if a `display()` was triggered. + """ + if self.disable: + return + + if n < 0: + self.last_print_n += n # for auto-refresh logic to work + self.n += n + + # check counter first to reduce calls to time() + if self.n - self.last_print_n >= self.miniters: + cur_t = self._time() + dt = cur_t - self.last_print_t + if dt >= self.mininterval and cur_t >= self.start_t + self.delay: + cur_t = self._time() + dn = self.n - self.last_print_n # >= n + if self.smoothing and dt and dn: + # EMA (not just overall average) + self._ema_dn(dn) + self._ema_dt(dt) + self.refresh(lock_args=self.lock_args) + if self.dynamic_miniters: + # If no `miniters` was specified, adjust automatically to the + # maximum iteration rate seen so far between two prints. + # e.g.: After running `tqdm.update(5)`, subsequent + # calls to `tqdm.update()` will only cause an update after + # at least 5 more iterations. + if self.maxinterval and dt >= self.maxinterval: + self.miniters = dn * (self.mininterval or self.maxinterval) / dt + elif self.smoothing: + # EMA miniters update + self.miniters = self._ema_miniters( + dn * (self.mininterval / dt if self.mininterval and dt + else 1)) + else: + # max iters between two prints + self.miniters = max(self.miniters, dn) + + # Store old values for next call + self.last_print_n = self.n + self.last_print_t = cur_t + return True
    + + +
    +[docs] + def close(self): + """Cleanup and (if leave=False) close the progressbar.""" + if self.disable: + return + + # Prevent multiple closures + self.disable = True + + # decrement instance pos and remove from internal set + pos = abs(self.pos) + self._decr_instances(self) + + if self.last_print_t < self.start_t + self.delay: + # haven't ever displayed; nothing to clear + return + + # GUI mode + if getattr(self, 'sp', None) is None: + return + + # annoyingly, _supports_unicode isn't good enough + def fp_write(s): + self.fp.write(str(s)) + + try: + fp_write('') + except ValueError as e: + if 'closed' in str(e): + return + raise # pragma: no cover + + leave = pos == 0 if self.leave is None else self.leave + + with self._lock: + if leave: + # stats for overall rate (no weighted average) + self._ema_dt = lambda: None + self.display(pos=0) + fp_write('\n') + else: + # clear previous display + if self.display(msg='', pos=pos) and not pos: + fp_write('\r')
    + + +
    +[docs] + def clear(self, nolock=False): + """Clear current bar display.""" + if self.disable: + return + + if not nolock: + self._lock.acquire() + pos = abs(self.pos) + if pos < (self.nrows or 20): + self.moveto(pos) + self.sp('') + self.fp.write('\r') # place cursor back at the beginning of line + self.moveto(-pos) + if not nolock: + self._lock.release()
    + + +
    +[docs] + def refresh(self, nolock=False, lock_args=None): + """ + Force refresh the display of this bar. + + Parameters + ---------- + nolock : bool, optional + If `True`, does not lock. + If [default: `False`]: calls `acquire()` on internal lock. + lock_args : tuple, optional + Passed to internal lock's `acquire()`. + If specified, will only `display()` if `acquire()` returns `True`. + """ + if self.disable: + return + + if not nolock: + if lock_args: + if not self._lock.acquire(*lock_args): + return False + else: + self._lock.acquire() + self.display() + if not nolock: + self._lock.release() + return True
    + + +
    +[docs] + def unpause(self): + """Restart tqdm timer from last print time.""" + if self.disable: + return + cur_t = self._time() + self.start_t += cur_t - self.last_print_t + self.last_print_t = cur_t
    + + +
    +[docs] + def reset(self, total=None): + """ + Resets to 0 iterations for repeated use. + + Consider combining with `leave=True`. + + Parameters + ---------- + total : int or float, optional. Total to use for the new bar. + """ + self.n = 0 + if total is not None: + self.total = total + if self.disable: + return + self.last_print_n = 0 + self.last_print_t = self.start_t = self._time() + self._ema_dn = EMA(self.smoothing) + self._ema_dt = EMA(self.smoothing) + self._ema_miniters = EMA(self.smoothing) + self.refresh()
    + + +
    +[docs] + def set_description(self, desc=None, refresh=True): + """ + Set/modify description of the progress bar. + + Parameters + ---------- + desc : str, optional + refresh : bool, optional + Forces refresh [default: True]. + """ + self.desc = desc + ': ' if desc else '' + if refresh: + self.refresh()
    + + +
    +[docs] + def set_description_str(self, desc=None, refresh=True): + """Set/modify description without ': ' appended.""" + self.desc = desc or '' + if refresh: + self.refresh()
    + + +
    +[docs] + def set_postfix(self, ordered_dict=None, refresh=True, **kwargs): + """ + Set/modify postfix (additional stats) + with automatic formatting based on datatype. + + Parameters + ---------- + ordered_dict : dict or OrderedDict, optional + refresh : bool, optional + Forces refresh [default: True]. + kwargs : dict, optional + """ + # Sort in alphabetical order to be more deterministic + postfix = OrderedDict([] if ordered_dict is None else ordered_dict) + for key in sorted(kwargs.keys()): + postfix[key] = kwargs[key] + # Preprocess stats according to datatype + for key in postfix.keys(): + # Number: limit the length of the string + if isinstance(postfix[key], Number): + postfix[key] = self.format_num(postfix[key]) + # Else for any other type, try to get the string conversion + elif not isinstance(postfix[key], str): + postfix[key] = str(postfix[key]) + # Else if it's a string, don't need to preprocess anything + # Stitch together to get the final postfix + self.postfix = ', '.join(key + '=' + postfix[key].strip() + for key in postfix.keys()) + if refresh: + self.refresh()
    + + +
    +[docs] + def set_postfix_str(self, s='', refresh=True): + """ + Postfix without dictionary expansion, similar to prefix handling. + """ + self.postfix = str(s) + if refresh: + self.refresh()
    + + +
    +[docs] + def moveto(self, n): + # TODO: private method + self.fp.write('\n' * n + _term_move_up() * -n) + getattr(self.fp, 'flush', lambda: None)()
    + + + @property + def format_dict(self): + """Public API for read-only member access.""" + if self.disable and not hasattr(self, 'unit'): + return defaultdict(lambda: None, { + 'n': self.n, 'total': self.total, 'elapsed': 0, 'unit': 'it'}) + if self.dynamic_ncols: + self.ncols, self.nrows = self.dynamic_ncols(self.fp) + return { + 'n': self.n, 'total': self.total, + 'elapsed': self._time() - self.start_t if hasattr(self, 'start_t') else 0, + 'ncols': self.ncols, 'nrows': self.nrows, 'prefix': self.desc, + 'ascii': self.ascii, 'unit': self.unit, 'unit_scale': self.unit_scale, + 'rate': self._ema_dn() / self._ema_dt() if self._ema_dt() else None, + 'bar_format': self.bar_format, 'postfix': self.postfix, + 'unit_divisor': self.unit_divisor, 'initial': self.initial, + 'colour': self.colour} + +
    +[docs] + def display(self, msg=None, pos=None): + """ + Use `self.sp` to display `msg` in the specified `pos`. + + Consider overloading this function when inheriting to use e.g.: + `self.some_frontend(**self.format_dict)` instead of `self.sp`. + + Parameters + ---------- + msg : str, optional. What to display (default: `repr(self)`). + pos : int, optional. Position to `moveto` + (default: `abs(self.pos)`). + """ + if pos is None: + pos = abs(self.pos) + + nrows = self.nrows or 20 + if pos >= nrows - 1: + if pos >= nrows: + return False + if msg or msg is None: # override at `nrows - 1` + msg = " ... (more hidden) ..." + + if not hasattr(self, "sp"): + raise TqdmDeprecationWarning( + "Please use `tqdm.gui.tqdm(...)`" + " instead of `tqdm(..., gui=True)`\n", + fp_write=getattr(self.fp, 'write', sys.stderr.write)) + + if pos: + self.moveto(pos) + self.sp(self.__str__() if msg is None else msg) + if pos: + self.moveto(-pos) + return True
    + + +
    +[docs] + @classmethod + @contextmanager + def wrapattr(cls, stream, method, total=None, bytes=True, **tqdm_kwargs): + """ + stream : file-like object. + method : str, "read" or "write". The result of `read()` and + the first argument of `write()` should have a `len()`. + + >>> with tqdm.wrapattr(file_obj, "read", total=file_obj.size) as fobj: + ... while True: + ... chunk = fobj.read(chunk_size) + ... if not chunk: + ... break + """ + with cls(total=total, **tqdm_kwargs) as t: + if bytes: + t.unit = "B" + t.unit_scale = True + t.unit_divisor = 1024 + yield CallbackIOWrapper(t.update, stream, method)
    +
    + + + +
    +[docs] +def trange(*args, **kwargs): + """Shortcut for tqdm(range(*args), **kwargs).""" + return tqdm(range(*args), **kwargs)
    + +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 00000000..75b5c770 --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,23 @@ +.. ldp documentation master file, created by + sphinx-quickstart on Thu Oct 24 14:50:30 2024. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to ldp's documentation! +=============================== + +.. toctree:: + :maxdepth: 4 + :caption: Contents: + + modules + + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_build/html/_sources/ldp.agent.rst.txt b/docs/_build/html/_sources/ldp.agent.rst.txt new file mode 100644 index 00000000..146fe429 --- /dev/null +++ b/docs/_build/html/_sources/ldp.agent.rst.txt @@ -0,0 +1,69 @@ +ldp.agent package +================= + +Submodules +---------- + +ldp.agent.agent module +---------------------- + +.. automodule:: ldp.agent.agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.agent\_client module +------------------------------ + +.. automodule:: ldp.agent.agent_client + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.interactive\_agent module +----------------------------------- + +.. automodule:: ldp.agent.interactive_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.memory\_agent module +------------------------------ + +.. automodule:: ldp.agent.memory_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.react\_agent module +----------------------------- + +.. automodule:: ldp.agent.react_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.simple\_agent module +------------------------------ + +.. automodule:: ldp.agent.simple_agent + :members: + :undoc-members: + :show-inheritance: + +ldp.agent.tree\_of\_thoughts\_agent module +------------------------------------------ + +.. automodule:: ldp.agent.tree_of_thoughts_agent + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.agent + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/ldp.alg.optimizer.rst.txt b/docs/_build/html/_sources/ldp.alg.optimizer.rst.txt new file mode 100644 index 00000000..f05f2c58 --- /dev/null +++ b/docs/_build/html/_sources/ldp.alg.optimizer.rst.txt @@ -0,0 +1,45 @@ +ldp.alg.optimizer package +========================= + +Submodules +---------- + +ldp.alg.optimizer.ape module +---------------------------- + +.. automodule:: ldp.alg.optimizer.ape + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.optimizer.memory module +------------------------------- + +.. automodule:: ldp.alg.optimizer.memory + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.optimizer.opt module +---------------------------- + +.. automodule:: ldp.alg.optimizer.opt + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.optimizer.replay\_buffers module +---------------------------------------- + +.. automodule:: ldp.alg.optimizer.replay_buffers + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.alg.optimizer + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/ldp.alg.rst.txt b/docs/_build/html/_sources/ldp.alg.rst.txt new file mode 100644 index 00000000..621e6817 --- /dev/null +++ b/docs/_build/html/_sources/ldp.alg.rst.txt @@ -0,0 +1,77 @@ +ldp.alg package +=============== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ldp.alg.optimizer + +Submodules +---------- + +ldp.alg.algorithms module +------------------------- + +.. automodule:: ldp.alg.algorithms + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.beam\_search module +--------------------------- + +.. automodule:: ldp.alg.beam_search + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.callbacks module +------------------------ + +.. automodule:: ldp.alg.callbacks + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.datasets module +----------------------- + +.. automodule:: ldp.alg.datasets + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.rollout module +---------------------- + +.. automodule:: ldp.alg.rollout + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.runners module +---------------------- + +.. automodule:: ldp.alg.runners + :members: + :undoc-members: + :show-inheritance: + +ldp.alg.tree\_search module +--------------------------- + +.. automodule:: ldp.alg.tree_search + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.alg + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/ldp.graph.modules.rst.txt b/docs/_build/html/_sources/ldp.graph.modules.rst.txt new file mode 100644 index 00000000..28b36540 --- /dev/null +++ b/docs/_build/html/_sources/ldp.graph.modules.rst.txt @@ -0,0 +1,45 @@ +ldp.graph.modules package +========================= + +Submodules +---------- + +ldp.graph.modules.llm\_call module +---------------------------------- + +.. automodule:: ldp.graph.modules.llm_call + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.modules.react module +------------------------------ + +.. automodule:: ldp.graph.modules.react + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.modules.reflect module +-------------------------------- + +.. automodule:: ldp.graph.modules.reflect + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.modules.thought module +-------------------------------- + +.. automodule:: ldp.graph.modules.thought + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.graph.modules + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/ldp.graph.rst.txt b/docs/_build/html/_sources/ldp.graph.rst.txt new file mode 100644 index 00000000..9fc73995 --- /dev/null +++ b/docs/_build/html/_sources/ldp.graph.rst.txt @@ -0,0 +1,85 @@ +ldp.graph package +================= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ldp.graph.modules + +Submodules +---------- + +ldp.graph.async\_torch module +----------------------------- + +.. automodule:: ldp.graph.async_torch + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.common\_ops module +---------------------------- + +.. automodule:: ldp.graph.common_ops + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.gradient\_estimators module +------------------------------------- + +.. automodule:: ldp.graph.gradient_estimators + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.loss\_ops module +-------------------------- + +.. automodule:: ldp.graph.loss_ops + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.memory module +----------------------- + +.. automodule:: ldp.graph.memory + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.op\_utils module +-------------------------- + +.. automodule:: ldp.graph.op_utils + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.ops module +-------------------- + +.. automodule:: ldp.graph.ops + :members: + :undoc-members: + :show-inheritance: + +ldp.graph.torch\_ops module +--------------------------- + +.. automodule:: ldp.graph.torch_ops + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.graph + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/ldp.llms.rst.txt b/docs/_build/html/_sources/ldp.llms.rst.txt new file mode 100644 index 00000000..31d1b865 --- /dev/null +++ b/docs/_build/html/_sources/ldp.llms.rst.txt @@ -0,0 +1,37 @@ +ldp.llms package +================ + +Submodules +---------- + +ldp.llms.chat module +-------------------- + +.. automodule:: ldp.llms.chat + :members: + :undoc-members: + :show-inheritance: + +ldp.llms.embeddings module +-------------------------- + +.. automodule:: ldp.llms.embeddings + :members: + :undoc-members: + :show-inheritance: + +ldp.llms.prompts module +----------------------- + +.. automodule:: ldp.llms.prompts + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp.llms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/ldp.rst.txt b/docs/_build/html/_sources/ldp.rst.txt new file mode 100644 index 00000000..df50fc31 --- /dev/null +++ b/docs/_build/html/_sources/ldp.rst.txt @@ -0,0 +1,56 @@ +ldp package +=========== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ldp.agent + ldp.alg + ldp.graph + ldp.llms + +Submodules +---------- + +ldp.data\_structures module +--------------------------- + +.. automodule:: ldp.data_structures + :members: + :undoc-members: + :show-inheritance: + +ldp.main module +--------------- + +.. automodule:: ldp.main + :members: + :undoc-members: + :show-inheritance: + +ldp.shims module +---------------- + +.. automodule:: ldp.shims + :members: + :undoc-members: + :show-inheritance: + +ldp.utils module +---------------- + +.. automodule:: ldp.utils + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ldp + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/modules.rst.txt b/docs/_build/html/_sources/modules.rst.txt new file mode 100644 index 00000000..f473f842 --- /dev/null +++ b/docs/_build/html/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +ldp +=== + +.. toctree:: + :maxdepth: 4 + + ldp diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css new file mode 100644 index 00000000..e3174bf9 --- /dev/null +++ b/docs/_build/html/_static/alabaster.css @@ -0,0 +1,708 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar { + max-height: 100%; + overflow-y: auto; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 160px; +} + +div.sphinxsidebar .search > div { + display: table-cell; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Hide ugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 00000000..e5179b7a --- /dev/null +++ b/docs/_build/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: inherit; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/custom.css b/docs/_build/html/_static/custom.css new file mode 100644 index 00000000..2a924f1d --- /dev/null +++ b/docs/_build/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 00000000..4d67807d --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js new file mode 100644 index 00000000..7e4c114f --- /dev/null +++ b/docs/_build/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/groundwork.css b/docs/_build/html/_static/groundwork.css new file mode 100644 index 00000000..57363052 --- /dev/null +++ b/docs/_build/html/_static/groundwork.css @@ -0,0 +1,720 @@ +/* + * flasky.css_t + * ~~~~~~~~~~~~ + * + * :copyright: Copyright 2010 by Armin Ronacher. Modifications by Kenneth Reitz. + * :license: Flask Design License, see LICENSE for details. + */ + + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font: 400 16px Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif; + /*font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro'; + font-size: 17px; */ + line-height: normal; + background-color: #333; + color: #333; + margin: 0; + padding: 0; + text-shadow: 0 1px 3px rgba(0,0,0,0.5); +} + +strong { + font-weight: bold; +} + +div.document { + width: 1024px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #444; + border-radius: 5px; + color: #ddd; + padding: 15px 30px 15px 30px; + box-shadow: 0 3px 10px rgba(0,0,0,0.3); +} + +img.floatingflask { + padding: 0 0 10px 10px; + float: right; +} + +div.footer { + width: 1024px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +div.related { + display: none; +} + +div.sphinxsidebar a { + color: #FFCC00; + text-decoration: none; + border-bottom: none; +} +div.sphinxsidebar a:hover { + color: #ff9900; +} + +div.sphinxsidebar a:hover, +div.sphinxsidebar a:visited, +div.sphinxsidebar a:focus { + border-bottom: none; +} + +div.sphinxsidebar { + margin: 0; + position: fixed; + overflow: auto; + height: auto; + font-size: 14px; + line-height: 1.5; +} + +div.sphinxsidebarwrapper { + padding: 18px 0 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 -20px; + text-align: center; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + /*font-family: 'Garamond', 'Georgia', serif;*/ + font-family: Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif; + color: #ddd; + font-size: 20px; + font-weight: normal; + padding: 0; + /*border-bottom: 1px solid #fff;*/ + + background-color: #444; + border-radius: 5px 0 0 0px; + padding-left: 5px; + border: 1px solid #444; + margin-top: 10px; + box-shadow: 0 3px 10px rgba(0,0,0,0.3); + margin-left: -10px; + /* Needed, if siebar is not sticky. Otherwise shadows moves over body element*/ + clip-path: inset(-10px -0px -10px -10px); +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #ddd; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 0; + padding: 0; + color: #ddd; +} + +div.sphinxsidebar input { + /*border: 1px solid #ccc;*/ + border: 1px solid #333; + font-family: 'Georgia', serif; + font-size: 1em; + color: #ddd; + width: 170px; + border-radius: 5px; + padding: 6px 12px; + box-shadow: inset 0 1px 10px rgba(0,0,0,0.3), 0 1px 0 rgba(255,255,255,0.1), 0 0px 0 rgba(0,0,0,0.5); + background-color: #2b2b2b; +} + +div.need-tobediscussed { + background-color: #0a4a63 !important; +} + +/*span.needs-type {*/ + /*border: 1px solid #444;*/ + /*border-radius: 5px;*/ + /*padding: 3px 5px;*/ +/*}*/ + +/*div.need-implementation span.needs-type {*/ + /*!*background-color: #ffdd00 !important;*!*/ + /*border: 1px solid #ffdd00*/ +/*}*/ + +div.need-status-closed span.needs-status { + background-color:darkgreen; +} + +div.need-status-open span.needs-status { + background-color:firebrick; +} + +div.need-status-tbd span.needs-status { + background-color:orange; +} + +div.need-technicaldebt span.needs-type { + background-color:red; +} + +/* need part table layout */ +tr.need_part td { + background-color: #555; + padding-left: 30px !important; +} + +/* using more space for whole page */ +div.document { + width: auto; + margin: 30px auto 0 auto; + max-width: 98%; +} +div.body { + min-width: 450px; + max-width: 100%; +} + +span.need-part a { + font-size: 0.75em; +} +span.need-part { + border-bottom: 1px solid #888; +} + +/* Code block design inside needs */ +div.need pre { + margin: 0; +} + +/* Better need title and ID layout*/ +span.needs-id { + font-size: 120% !important; + color: #ffcc00 !important; + float:right +} +span.needs-title { + font-weight: bold; + font-size: 1.3em; +} + +div.needs_meta div.headline { + margin-bottom: 5px; + border-bottom: 1px solid #555; +} +div.needs_meta.line-block{ + margin: 0; +} + +/* Need headline color design*/ +div.needs_meta div.headline { + margin: -5px -10px 5px -10px; + border-bottom: 1px solid #555; + border-radius: 3px 3px 0 0; + padding: 5px 10px 0px 10px; +} + +div.story div.headline { + background-color: #39024e80; +} + +div.spec div.headline { + background-color: #00beff33; +} + +div.impl div.headline { + background-color: #ff000a33; +} + +div.test div.headline { + background-color: #2ed15233; +} +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #FFCC00; + text-decoration: none; +} + +a:hover { + color: #ff9900; + text-decoration: none; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif; + /*font-family: 'Garamond', 'Georgia', serif;*/ + font-weight: normal; + /* margin: 30px 0px 10px 0px; */ + margin: 10px 0px 00px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #ffcc00; + padding: 0 4px; + text-decoration: none; + text-shadow: none; +} + +a.headerlink:hover { + color: #ff9900; + background: none; + text-shadow: none; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + background: none; + margin: 20px -30px; + padding: 10px 30px; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: Lato, 'Helvetica Neue', Helvetica, Arial, sans-serif; + /* font-family: 'Garamond', 'Georgia', serif; */ + /* font-weight: normal;/* + font-weight: bold; + /* font-size: 24px; */ + font-size: 18px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + /*background-color: white;*/ + background-color: #444; + text-shadow: none; + color: #fff; +} + +dt:target, .highlight { + background: #333; +} + +div.note { + background-color: #555; + border: none; +} + +div.warning { + background-color: #7f1212; + border: none; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: inherit; + border: none; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +img.screenshot { +} + +tt.descname, tt.descclassname { + font-size: 0.95em; +} + +tt.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + /* -webkit-box-shadow: 2px 2px 4px #eee; */ + /* box-shadow: 2px 2px 4px #eee; */ +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #eee; + background: #fdfdfd; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.footnote td.label { + width: 0px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #2b2b2b; + padding: 7px 30px; + margin: 15px -30px; + line-height: 1.3em; + box-shadow: inset 0 1px 10px rgba(0,0,0,0.3),0 1px 0 rgba(255,255,255,0.1),0 -1px 0 rgba(0,0,0,0.5); +} + +dl pre, blockquote pre, li pre { + margin-left: -60px; + padding-left: 60px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: none; +} + +a.reference:hover { + border-bottom: none; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt { + background: #EEE; +} + +@media screen and (max-width: 600px) { + + .github_fork { + display: none; + } + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 30; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + +} + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* API layout */ + +code.descname { + color : #ffffff; +} + +/* Pygmets overwrites */ +.highlight .nf { color: #ffcc00 !important; } /* function name */ +.highlight .nc { color: #ffcc00 !important; } /* class name */ +.highlight .kn { color: #918a6f !important; } /* import name */ +.highlight .bp { color: #ffffff !important; } /* self, name */ +.highlight .k { color: #918a6f !important; } /* class, def name */ +.highlight .o { color: #ffffff !important; } /* function name */ +.highlight .nb { color: #ffffff !important; } /* super, print name */ +.highlight .go { color: #aaaaaa !important; } /* super, print name */ + + +/* +Needed for readthedocs.io, because it adding its own css, which destroy our images. +See https://github.com/rtfd/readthedocs.org/issues/2348 +*/ +/* img { + width: auto !important; +}*/ + + +div.sidebar { + background-color: #2b2b2b; + border: none; + margin: 0 -30px 0 0; + box-shadow: inset 0 1px 10px rgba(0,0,0,0.3),0 1px 0 rgba(255,255,255,0.1),0 -1px 0 rgba(0,0,0,0.5); + border-radius: 10px 0 0 10px; + padding: 10px 20px 0 20px; + text-align: justify; +} + + +div.sidebar div.topic { + background-color: transparent; + border: none; + margin-top: -20px; +} +} + +div.sidebar div.topic ul { + margin: 5px 0 5px 15px; +} + +div.sidebar div.topic p.topic-title { + display: none; +} + +table.indextable tr.cap { + background-color: transparent !important; +} + +div.figure p.caption { + text-align: center +} + +table.highlighttable pre { + margin: 0; +} + +table.highlighttable { + /* margin: 0; */ + width: 100%; + border-spacing: 0px; + margin: 0 -30px 0 -30px; + overflow: auto; +} + +div.highlight-python, div.highlight-jinja { + +} + +div.highlight-json .nt { + color: #ff9900; +} + +table.highlighttable td { + padding: 0; +} + +div.linenodiv { + background-color: #2b2b2b; + padding: 0; +} + +td.linenos pre { + padding: 7px 5px; +} +td.code div.highlight pre { + width: 717px; + overflow: hidden; +} + +.highlight .hll { + background-color: #353535 !important; +} + +p.plantuml object { + width: 100% !important; + height: 100% !important; + +} + +.highlighted { + background-color: transparent; + color: #0e84b5; + +} + +/* Sidebar TOC: make the current chapter bold */ +.current.reference.internal { + font-weight: bold; +} \ No newline at end of file diff --git a/docs/_build/html/_static/gw_logo.png b/docs/_build/html/_static/gw_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..233c46dbc9802fafa8b32ec4edc4a04e9c237c99 GIT binary patch literal 14145 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 S%K#jAg91q@N>+;-2mcSGEom|U literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/language_data.js b/docs/_build/html/_static/language_data.js new file mode 100644 index 00000000..367b8ed8 --- /dev/null +++ b/docs/_build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/_build/html/_static/minus.png b/docs/_build/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/nameko.css b/docs/_build/html/_static/nameko.css new file mode 100644 index 00000000..9d3ed06b --- /dev/null +++ b/docs/_build/html/_static/nameko.css @@ -0,0 +1,530 @@ +/* + * nameko.css_t + * ~~~~~~~~~~~~~~ + * + * Sphinx Nameko Theme + * + * Forked from https://github.com/ignacysokolowski/sphinx-readable-theme + * + * :copyright: Copyright 2013 Ignacy Sokolowski; 2015 Lifealike, Ltd. DBA onefinestay + * :license: MIT, see LICENSE for details. + * + */ + + + +@import url('basic.css'); + +/* -- page layout --------------------------------------------------------- */ + +body { + font-family: "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif; + margin: 0; + padding: 0; + background-color: rgb(252, 252, 252); +} + +h1, h2, h3, h4 { + color: #2a2730; + font-weight: 700; + font-family: "Lora","Times",serif; + clear: both; +} + +div.document { + margin: 10px auto 0 auto; + max-width: 940px; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +div.body { + background-color: rgb(252, 252, 252); + color: #3e4349; + padding: 0 30px 30px 30px; +} + +div.footer { + color: #555; + font-size: 14px; + margin: 20px auto 30px auto; + text-align: right; + max-width: 880px; +} + +div.footer a { + color: #444; + text-decoration: underline; +} + +div.related { + padding: 10px 10px; + width: auto; +} + +div.sphinxsidebar { + float: left; + font-size: 14px; + line-height: 1.5em; + margin-left: -100%; + width: 230px; +} + +div.sphinxsidebarwrapper { + font-size: 14px; + line-height: 1.5em; + padding: 10px 0 10px 10px; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + color: #333; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 1.1em; +} + +div.sphinxsidebar h3 a { + color: #333; +} + +div.sphinxsidebar p { + color: #888; +} + +div.sphinxsidebar p.searchtip { + line-height: 1.4em; +} + +div.sphinxsidebar ul { + color: #000; + margin: 10px 0 20px; + padding: 0; +} + +div.sphinxsidebar a { + color: #444; +} + +div.sphinxsidebar a:hover { + color: #d00; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: sans-serif; + font-size: 1em; +} + +/* -- body styles --------------------------------------------------------- */ + +a { + color: #900; + text-decoration: none; +} + +a:visited { + color: #700; +} + +a:hover { + color: #d00; + text-decoration: underline; +} + +hr { + border: 1px solid #b1b4b6; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { font-weight: normal; } + +div.body h1, +div.body h2, +div.body h3, +div.body h4 { color: #212224; } +div.body h5 { color: #000; } +div.body h6 { color: #777; } + +div.body h1 { margin: 0 0 10px 0; } +div.body h2, +div.body h3 { margin: 30px 0px 10px 0px; } +div.body h4, +div.body h5, +div.body h6 { margin: 20px 0px 10px 0px; } + +div.body h1 { padding: 0 0 10px 0; } +div.body h2, +div.body h3 { padding: 10px 0 10px 0; } +div.body h4 { padding: 10px 0 10px 0; } +div.body h5, +div.body h6 { padding: 10px 0 0 0; } + +div.body h1, +div.body h2, +div.body h3 { border-bottom: 1px solid #ddd; } +div.body h4 { border-bottom: 1px solid #e5e5e5; } + +div.body h1 { font-size: 230%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 130%; } +div.body h4 { font-size: 110%; } +div.body h5 { font-size: 105%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: #fff; +} + +div.body ul { + list-style: disc; + margin: 1em 0; + padding-left: 1.3em; +} + +div.body ul ul, div.body ol ul { + margin: .2em 0; + padding-left: 1.2em; +} + +div.body ul li { + padding: 2px 0; +} + +div.body ul.search li { + padding: 5px 0 5px 20px; +} + +div.body ol { + counter-reset: li; + margin-left: 0; + padding-left: 0; +} + +div.body ol ol { + margin: .2em 0; +} + +div.body ol > li { + list-style: none; + margin: 0 0 0 1.9em; + padding: 2px 1px; + position: relative; +} + +div.body ol > li:before { + content: counter(li) "."; + counter-increment: li; + top: -2px; + left: -1.9em; + width: 1.9em; + padding: 4px 0; + position: absolute; + text-align: left; +} + +div.body p, +div.body dd, +div.body li { + line-height: 1.4em; +} + +div.sidebar, div.topic { + background-color: #f6f7f9; + border: 1px solid #cdcdd1; + padding: 0; + margin: 0 0 1em 1.5em; +} + +div.topic { + margin: 0; +} + +div.sidebar p.sidebar-title, div.topic p.topic-title { + background-color: #cdcdd1; + padding: 8px; +} + +div.sidebar p, div.topic p { + font-size: 0.9em; + padding: 10px 20px 0px 20px; +} + +div.admonition { + background-color: #f6f7f9; + border: 1px solid #cdcdd1; + padding: 0px 12px 12px 12px; + font-size: 0.9em; +} + +p.admonition-title { + display: block; + background-color: #cdcdd1; + margin: -12px -12px 12px -12px; + padding: 6px 12px; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.attention, div.caution, div.seealso { + background-color: #fef9e9; + border: 1px solid #fbe091; +} + +div.attention p.admonition-title, +div.caution p.admonition-title, +div.seealso p.admonition-title { + background-color: #fbe091; +} + +div.danger, div.error, div.warning { + border: 1px solid #FEA1A2; + background-color: #FEE4E4; +} + +div.danger p.admonition-title, +div.error p.admonition-title, +div.warning p.admonition-title { + background-color: #FEA1A2; +} + +div.note, div.important, div.hint, div.tip { + border: 1px solid #daebea; + background-color: #F7FAFA; +} + +div.note p.admonition-title, +div.important p.admonition-title, +div.hint p.admonition-title, +div.tip p.admonition-title { + background-color: #daebea; +} + +div.highlight { + background-color: #fff; +} + +pre { + background-color: #f6f7f9; + border: 1px solid #9aa2ab; + color: #222; + font-size: 0.75em; + line-height: 1.5em; + margin: 1.5em 0 1.5em 0; + padding: 10px; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +tt, code, code.xref { + padding: 2px; + background-color: #fff; + border: 1px solid #daebea; + font-size: 0.75em; +} + +tt.descname, code.descname { + font-size: 0.95em; +} + +tt.xref, a tt, code.xref, a code { + font-weight: normal; +} + +dl.class, dl.function { + margin-bottom: 50px; +} + +dl.function > dt, +dl.attribute > dt, +dl.classmethod > dt, +dl.method > dt, +dl.class > dt, +dl.exception > dt { + background-color: #f5f5f5; + margin: 25px 0 10px 0; + padding: 1px 10px; +} + +dl.function code.descname, +dl.attribute code.descname, +dl.classmethod code.descname, +dl.method code.descname, +dl.class code.descname, +dl.exception code.descname { + border: none; +} + +table.docutils { + width: 100%; + font-size: 0.9em; +} + +table.docutils.footnote { + width: auto; +} + +table.docutils thead, +table.docutils tfoot { + background: #f5f5f5; +} + +table.docutils thead tr th { + color: #000; + font-weight: normal; + padding: 7px 5px; + vertical-align: middle; +} + +table.docutils tbody tr th, +table.docutils tbody tr td { + border-bottom: 0; + border-top: solid 1px #ddd; + padding: 7px 5px; + vertical-align: top; +} +table.docutils tbody tr:last-child th, +table.docutils tbody tr:last-child td { + border-bottom: solid 1px #ddd; +} + +table.docutils thead tr td p, +table.docutils tfoot tr td p, +table.docutils tbody tr td p, +table.docutils thead tr td ul, +table.docutils tfoot tr td ul, +table.docutils tbody tr td ul, +table.docutils thead tr td ol, +table.docutils tfoot tr td ol, +table.docutils tbody tr td ol { + margin: 0 0 .5em; +} +table.docutils thead tr td p.last, +table.docutils tfoot tr td p.last, +table.docutils tbody tr td p.last, +table.docutils thead tr td ul.last, +table.docutils tfoot tr td ul.last, +table.docutils tbody tr td ul.last, +table.docutils thead tr td ol.last, +table.docutils tfoot tr td ol.last, +table.docutils tbody tr td ol.last { + margin-bottom: 0; +} + +code.descname { + font-size: 0.8em; +} + +span.viewcode-link { + font-size: 0.8em; + line-height: 1.75; +} + +dl em { + font-size: 0.9em; +} + +.viewcode-back { + font-family: Arial, sans-serif; +} + +div.viewcode-block:target { + background-color: #fef9e9; + border-top: 1px solid #fbe091; + border-bottom: 1px solid #fbe091; +} + +@media screen and (max-width: 870px) { + + div.document { + width: auto; + margin: 0; + } + + div.documentwrapper { + float: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0 20px 30px 20px; + } + + div.footer { + background-color: #333; + color: #888; + margin: 0; + padding: 10px 20px 20px; + text-align: left; + width: auto; + } + + div.footer a { + color: #bbb; + } + + div.footer a:hover { + color: #fff; + } + + div.sphinxsidebar { + background-color: #333; + color: #fff; + float: none; + margin: 0; + padding: 10px 20px; + width: auto; + } + + div.sphinxsidebar h3, + div.sphinxsidebar h4, + div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar ul { + color: #999; + } + + div.sphinxsidebar a { + color: #aaa; + } + + div.sphinxsidebar a:hover { + color: #fff; + } + +} \ No newline at end of file diff --git a/docs/_build/html/_static/plus.png b/docs/_build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css new file mode 100644 index 00000000..07454c6b --- /dev/null +++ b/docs/_build/html/_static/pygments.css @@ -0,0 +1,83 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #990000 } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #888888 } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #990000 } /* Literal.Number.Bin */ +.highlight .mf { color: #990000 } /* Literal.Number.Float */ +.highlight .mh { color: #990000 } /* Literal.Number.Hex */ +.highlight .mi { color: #990000 } /* Literal.Number.Integer */ +.highlight .mo { color: #990000 } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js new file mode 100644 index 00000000..92da3f8b --- /dev/null +++ b/docs/_build/html/_static/searchtools.js @@ -0,0 +1,619 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/_build/html/_static/small_groundwork.css b/docs/_build/html/_static/small_groundwork.css new file mode 100644 index 00000000..298de27e --- /dev/null +++ b/docs/_build/html/_static/small_groundwork.css @@ -0,0 +1,102 @@ +/* + * small_flask.css_t + * ~~~~~~~~~~~~~~~~~ + * + * :copyright: Copyright 2010 by Armin Ronacher. + * :license: Flask Design License, see LICENSE for details. + */ + +body { + margin: 0; + padding: 0 10px 0 10px; +} + +.github_fork { + display: none; +} + +div.document { + margin: 10px; +} + +div.documentwrapper { + float: none; +} + +div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: white; +} + +div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, +div.sphinxsidebar h3 a { + color: white; +} + +div.sphinxsidebar a { + color: #aaa; +} + +div.sphinxsidebar p.logo { + display: none; +} + +div.document { + width: 100%; + margin: 0; +} + +div.related { + display: block; + margin: 0; + padding: 10px 0 20px 0; +} + +div.related ul, +div.related ul li { + margin: 0; + padding: 0; +} + +div.footer { + display: none; +} + +div.bodywrapper { + margin: 0; +} + +div.body { + min-height: 0; + padding: 10px; +} + +.rtd_doc_footer { + display: none; +} + +.document { + width: auto; +} + +.footer { + width: auto; +} + +.footer { + width: auto; +} + +pre { + margin: 15px -10px !important; +} + +div.admonition { + margin: 20px -10px !important; +} + diff --git a/docs/_build/html/_static/sphinx_highlight.js b/docs/_build/html/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/docs/_build/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html new file mode 100644 index 00000000..d800722b --- /dev/null +++ b/docs/_build/html/genindex.html @@ -0,0 +1,3106 @@ + + + + + + + Index — ldp documentation + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + + +

    Index

    + +
    + A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + | Z + +
    +

    A

    + + + +
    + +

    B

    + + + +
    + +

    C

    + + + +
    + +

    D

    + + + +
    + +

    E

    + + + +
    + +

    F

    + + + +
    + +

    G

    + + + +
    + +

    H

    + + + +
    + +

    I

    + + + +
    + +

    J

    + + + +
    + +

    L

    + + + +
      +
    • + ldp + +
    • +
    • + ldp.agent + +
    • +
    • + ldp.agent.agent + +
    • +
    • + ldp.agent.agent_client + +
    • +
    • + ldp.agent.interactive_agent + +
    • +
    • + ldp.agent.memory_agent + +
    • +
    • + ldp.agent.react_agent + +
    • +
    • + ldp.agent.simple_agent + +
    • +
    • + ldp.agent.tree_of_thoughts_agent + +
    • +
    • + ldp.alg + +
    • +
    • + ldp.alg.algorithms + +
    • +
    • + ldp.alg.beam_search + +
    • +
    • + ldp.alg.callbacks + +
    • +
    • + ldp.alg.datasets + +
    • +
    • + ldp.alg.optimizer + +
    • +
    • + ldp.alg.optimizer.ape + +
    • +
    • + ldp.alg.optimizer.memory + +
    • +
    • + ldp.alg.optimizer.opt + +
    • +
    • + ldp.alg.optimizer.replay_buffers + +
    • +
    • + ldp.alg.rollout + +
    • +
    • + ldp.alg.runners + +
    • +
    • + ldp.alg.tree_search + +
    • +
    • + ldp.data_structures + +
    • +
    • + ldp.graph + +
    • +
    • + ldp.graph.async_torch + +
    • +
    • + ldp.graph.common_ops + +
    • +
    • + ldp.graph.gradient_estimators + +
    • +
    • + ldp.graph.loss_ops + +
    • +
    • + ldp.graph.memory + +
    • +
    + +

    M

    + + + +
    + +

    N

    + + + +
    + +

    O

    + + + +
    + +

    P

    + + + +
    + +

    Q

    + + + +
    + +

    R

    + + + +
    + +

    S

    + + + +
    + +

    T

    + + + +
    + +

    U

    + + + +
    + +

    V

    + + + +
    + +

    W

    + + + +
    + +

    X

    + + +
    + +

    Z

    + + +
    + + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html new file mode 100644 index 00000000..d21f6c0a --- /dev/null +++ b/docs/_build/html/index.html @@ -0,0 +1,158 @@ + + + + + + + + Welcome to ldp’s documentation! — ldp documentation + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/ldp.agent.html b/docs/_build/html/ldp.agent.html new file mode 100644 index 00000000..0b2db7d8 --- /dev/null +++ b/docs/_build/html/ldp.agent.html @@ -0,0 +1,1378 @@ + + + + + + + + ldp.agent package — ldp documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp.agent package

    +
    +

    Submodules

    +
    +
    +

    ldp.agent.agent module

    +
    +
    +class ldp.agent.agent.Agent[source]
    +

    Bases: ABC, Generic[TAgentState]

    +
    +
    +classmethod from_name(name: str, **kwargs) Agent[source]
    +
    + +
    +
    +abstract async get_asv(agent_state: TAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], TAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +abstract async init_state(tools: list[Tool]) TAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +named_ops() Iterable[tuple[str, Op]][source]
    +

    Analogous to torch.nn.Module.named_parameters().

    +
    + +
    + +
    +
    +class ldp.agent.agent.AgentConfig(*, agent_type: str, agent_kwargs: dict[str, JsonValue] = None)[source]
    +

    Bases: BaseModel

    +

    Configuration for specifying the type of agent i.e. the subclass of Agent above.

    +
    +
    +agent_kwargs: dict[str, JsonValue]
    +
    + +
    +
    +agent_type: str
    +
    + +
    +
    +construct_agent() Agent[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'agent_kwargs': FieldInfo(annotation=dict[str, JsonValue], required=False, default_factory=dict, description="Keyword arguments to pass to the agent's constructor."), 'agent_type': FieldInfo(annotation=str, required=True, description='The type of agent to be used. This should be a subclass of Agent above.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    + +
    +
    +

    ldp.agent.agent_client module

    +
    +
    +class ldp.agent.agent_client.HTTPAgentClient(*args, **kwargs)[source]
    +

    Bases: Agent[TSerializableAgentState]

    +

    Interact with an Agent running in a server via POST requests.

    +
    +
    +async get_asv(agent_state: TSerializableAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], TSerializableAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) TSerializableAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    + +
    +
    +ldp.agent.agent_client.make_simple_agent_server(agent: Agent[SimpleAgentState], render_docs: bool = False) FastAPI[source]
    +

    Make a FastAPI app designed to work with the above HTTPAgentClient.

    +

    Here’s how this works: +1. There is an entity orchestrating an Agent’s interactions with an Environment.

    +
    +

    A simple example of this is an integration test that sequentially calls +Agent.get_asv and Environment.step.

    +
    +
      +
    1. That entity is given the above HTTPAgentClient. Any Agent.init_state or +Agent.get_asv calls the orchestration entity makes are actually +POST requests under the hood. The agent’s “brains” aren’t local.

    2. +
    3. Remotely, this server code is running, and is where the actual Agent logic lives. +An example of this is a remote server containing GPU(s).

    4. +
    +
    + +
    +
    +

    ldp.agent.interactive_agent module

    +
    +
    +class ldp.agent.interactive_agent.InteractiveAgent(*args, **kwargs)[source]
    +

    Bases: Agent[SimpleAgentState]

    +

    An “agent” that provides an interface for human users to interact with environments.

    +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) SimpleAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    + +
    +
    +

    ldp.agent.memory_agent module

    +

    This module defines the MemoryAgent class, which extends a base agent model with memory.

    +

    capabilities. The MemoryAgent can pick and invoke tools based on the stored and retrieved +memories, formatted using specified prompts. A memory is typically a set of previous trajectories

    +
    +
    +class ldp.agent.memory_agent.MemoryAgent(*args, llm_model: dict[str, ~typing.Any] = {'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, sys_prompt: str | None = None, prompt: str = '<episode-memories>\n<description>\nThese are relevant memories from previous attempts at similar tasks, along with the action taken and the discounted cumulative reward from that action. A negative reward is failure, a positive reward is success.\n</description>{memories}</episode-memories>\n\nConsidering the memories, choose the next action.', query_factory: ~collections.abc.Callable[[~collections.abc.Iterable[~aviary.message.Message]], ~collections.abc.Awaitable[str]] = <function _default_query_factory>, memory_prompt: str = '<memory><obs>{input}</obs><action>{output}</action><reward>{value}</reward></memory>', num_memories: int = 3)[source]
    +

    Bases: SimpleAgent

    +

    Simple agent that can pick and invoke tools with memory.

    +

    NOTE: the MemoryAgent does not maintain an explicit value estimate, +it simply supplies previous trajectories via the prompt. +As such, the value estimate vhat will always be zero.

    +
    +
    +async default_query_factory() str
    +
    + +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +memory_prompt: str
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, description='Starting configuration for the LLM model. Trainable.'), 'memory_prompt': FieldInfo(annotation=str, required=False, default='<memory><obs>{input}</obs><action>{output}</action><reward>{value}</reward></memory>', description='Prompt for formatting an individual memory. Use XML instead of JSON to avoid potential escaping issues.'), 'num_memories': FieldInfo(annotation=int, required=False, default=3, description='Number of memories to retrieve from MemoryOp'), 'prompt': FieldInfo(annotation=str, required=False, default='<episode-memories>\n<description>\nThese are relevant memories from previous attempts at similar tasks, along with the action taken and the discounted cumulative reward from that action. A negative reward is failure, a positive reward is success.\n</description>{memories}</episode-memories>\n\nConsidering the memories, choose the next action.', description='Prompt that includes the memories.'), 'query_factory': FieldInfo(annotation=Callable[list, Awaitable[str]], required=False, default=<function _default_query_factory>, description="Async function to generate a Memory query string from messages. It's async so this can involve an LLM completion if desired.", exclude=True), 'sys_prompt': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='Opt-in system prompt. If one is passed, the system prompt is not set up to be trainable, because this class is meant to be quite simple as far as possible hyperparameters.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +num_memories: int
    +
    + +
    +
    +prompt: str
    +
    + +
    +
    +query_factory: Callable[[Iterable[Message]], Awaitable[str]]
    +
    + +
    + +
    +
    +

    ldp.agent.react_agent module

    +
    +
    +class ldp.agent.react_agent.ReActAgent(*args, llm_model: dict[str, Any] = {'logprobs': True, 'model': 'gpt-4o-2024-08-06', 'temperature': 0.1, 'top_logprobs': 1}, sys_prompt: str = 'Answer the following questions as best you can. You have access to the following tools:\n\n{tools}\n\nUse the following format:\n\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: comma separated list of inputs to action as python tuple\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\n\nExample:\n\nThought: I need to use the get_weather tool\nAction: get_weather\nAction Input: "New York", 7\nObservation: The 7 day forecast for New York is [...]', tool_description_method: ToolDescriptionMethods = ToolDescriptionMethods.STR)[source]
    +

    Bases: BaseModel, Agent[SimpleAgentState]

    +

    An Act or ReAct Agent built to work with chat models.

    +

    Paper: https://arxiv.org/abs/2210.03629

    +

    The ReAct style is like so, and note Act style has no ‘Thought: ‘ entries: +System:

    +
    +

    Answer the following questions as best you can. You have access to the following tools:

    +
    +

    {tools}

    +

    Use the following format:

    +

    Thought: you should always think about what to do +Action: the action to take, should be one of [{tool_names}] +Action Input: the input to the action +Observation: the result of the action +… (this Thought/Action/Action Input/Observation can repeat N times)

    +
    +
    +
    +
    User:

    {questions}

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    User:

    Observation:

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    +

    +

    One notable design decision is that ReAct’s state does not necessarily +track ToolRequestMessage. Recall that aviary is in a partially observable +domain, meaning we don’t need to have perfect symmetry with Environments. +Instead, ReActAgent’s state stores a ReAct-style message history, where the +messages are plain Message (and not a ToolRequestMessage).

    +
    +
    +static after_retry_failure_log(retry_state: RetryCallState)[source]
    +
    + +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) SimpleAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +classmethod make_act_agent(**kwargs) Self[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1, 'logprobs': True, 'top_logprobs': 1}, description='Starting configuration for the LLM model.'), 'sys_prompt': FieldInfo(annotation=str, required=False, default='Answer the following questions as best you can. You have access to the following tools:\n\n{tools}\n\nUse the following format:\n\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: comma separated list of inputs to action as python tuple\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\n\nExample:\n\nThought: I need to use the get_weather tool\nAction: get_weather\nAction Input: "New York", 7\nObservation: The 7 day forecast for New York is [...]', description='Learnable system prompt template, defaults to ReAct.'), 'tool_description_method': FieldInfo(annotation=ToolDescriptionMethods, required=False, default=<ToolDescriptionMethods.STR: 'describe_str'>, description="Method used to describe the tools, defaults to 'str' description.")}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +sys_prompt: str
    +
    + +
    +
    +tool_description_method: ToolDescriptionMethods
    +
    + +
    + +
    +
    +

    ldp.agent.simple_agent module

    +
    +
    +class ldp.agent.simple_agent.SimpleAgent(*args, llm_model: dict[str, Any] = {'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, sys_prompt: str | None = None)[source]
    +

    Bases: BaseModel, Agent[SimpleAgentState]

    +

    Simple agent that can pick and invoke tools with a language model.

    +

    It does not have a system prompt because it’s meant to be lightweight.

    +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) SimpleAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, description='Starting configuration for the LLM model. Trainable.'), 'sys_prompt': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='Opt-in system prompt. If one is passed, the system prompt is not set up to be trainable, because this class is meant to be quite simple as far as possible hyperparameters.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +sys_prompt: str | None
    +
    + +
    + +
    +
    +class ldp.agent.simple_agent.SimpleAgentState(*, tools: list[Tool] = None, messages: list[ToolRequestMessage | ToolResponseMessage | Message] = None)[source]
    +

    Bases: BaseModel

    +

    Simple bucket for an Agent to access tools and store messages.

    +
    +
    +get_next_state(obs: list[Message] | None = None, tools: list[Tool] | None = None, **kwargs) Self[source]
    +

    Get the next agent state without mutating the optional prior state.

    +

    Do not mutate self here, just read from it.

    +
    +
    Parameters:
    +
      +
    • obs – Optional observation messages to use in creating the next state.

    • +
    • tools – Optional list of tools available to the agent. If unspecified, these +should be pulled from the prior_state.

    • +
    • kwargs – Additional keyword arguments to pass to this class’s constructor.

    • +
    +
    +
    Returns:
    +

    The next agent state (which is not an in-place change to self).

    +
    +
    +
    + +
    +
    +messages: list[ToolRequestMessage | ToolResponseMessage | Message]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'messages': FieldInfo(annotation=list[Union[ToolRequestMessage, ToolResponseMessage, Message]], required=False, default_factory=list), 'tools': FieldInfo(annotation=list[Tool], required=False, default_factory=list)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +tools: list[Tool]
    +
    + +
    + +
    +
    +

    ldp.agent.tree_of_thoughts_agent module

    +

    Module for the Tree of Thoughts agent.

    +

    This module defines the Tree of Thoughts agent which uses a language model to generate and evaluate possible +steps in a puzzle or problem-solving environment. The agent employs a tree search mechanism to explore different +solutions and selects the most promising ones based on evaluations.

    +

    This module is based on the following paper: https://openreview.net/forum?id=5Xc1ecxO1h

    +

    Note: TreeofThoughtsAgent is currently tested as a baseline agent for Game of 24. It does not yet support tool calls +that operate on the intermediate reasoning steps. This would probably entail a redefinition of the POMDP to +undertake intermediate reasoning steps as environment steps.

    +
    +
    +class ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent(*args, llm_model: dict[str, ~typing.Any] = {'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, value_prompt_func: ~collections.abc.Callable[[str, str], str] = <function TreeofThoughtsAgent.<lambda>>, proposal_prompt_func: ~collections.abc.Callable[[str, str], str] = <function TreeofThoughtsAgent.<lambda>>)[source]
    +

    Bases: BaseModel, Agent[SimpleAgentState]

    +

    Tree of Thoughts Agent.

    +

    This agent uses a tree search mechanism combined with an LLM to generate and evaluate +possible steps in a problem-solving environment. It is designed to explore different solutions +and select the most promising ones based on a heuristic evaluation function.

    +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message], eval_function: Callable[[str, list[str]], float], n_steps: int = 0, n_select_samples: int = 0) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Generate and evaluate possible steps in the problem-solving process.

    +
    +
    Parameters:
    +
      +
    • agent_state – The current state of the agent.

    • +
    • obs – The observations provided to the agent.

    • +
    • eval_function – Function to evaluate the generated paths in the tree.

    • +
    • n_steps – Number of steps to generate. Defaults to 0. Dictated by the environment.

    • +
    • n_select_samples – Number of tree nodes to select to explore in each step. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    The result of the operation, the new state of the agent, and the number representing the value (0).

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) SimpleAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, description='Starting configuration for the LLM model.'), 'proposal_prompt_func': FieldInfo(annotation=Callable[list, str], required=False, default=<function TreeofThoughtsAgent.<lambda>>, description='Function to format proposal prompt template.'), 'value_prompt_func': FieldInfo(annotation=Callable[list, str], required=False, default=<function TreeofThoughtsAgent.<lambda>>, description='Function to format value prompt template.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +proposal_prompt_func: Callable[[str, str], str]
    +
    + +
    +
    +value_prompt_func: Callable[[str, str], str]
    +
    + +
    + +
    +
    +

    Module contents

    +
    +
    +class ldp.agent.Agent[source]
    +

    Bases: ABC, Generic[TAgentState]

    +
    +
    +classmethod from_name(name: str, **kwargs) Agent[source]
    +
    + +
    +
    +abstract async get_asv(agent_state: TAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], TAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +abstract async init_state(tools: list[Tool]) TAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +named_ops() Iterable[tuple[str, Op]][source]
    +

    Analogous to torch.nn.Module.named_parameters().

    +
    + +
    + +
    +
    +class ldp.agent.AgentConfig(*, agent_type: str, agent_kwargs: dict[str, JsonValue] = None)[source]
    +

    Bases: BaseModel

    +

    Configuration for specifying the type of agent i.e. the subclass of Agent above.

    +
    +
    +agent_kwargs: dict[str, JsonValue]
    +
    + +
    +
    +agent_type: str
    +
    + +
    +
    +construct_agent() Agent[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'agent_kwargs': FieldInfo(annotation=dict[str, JsonValue], required=False, default_factory=dict, description="Keyword arguments to pass to the agent's constructor."), 'agent_type': FieldInfo(annotation=str, required=True, description='The type of agent to be used. This should be a subclass of Agent above.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    + +
    +
    +class ldp.agent.DefaultLLMModelNames(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
    +

    Bases: StrEnum

    +

    Defaults for LLM models, pin exact versions for performance stability.

    +
    +
    +OPENAI = 'gpt-4o-2024-08-06'
    +
    + +
    + +
    +
    +class ldp.agent.HTTPAgentClient(*args, **kwargs)[source]
    +

    Bases: Agent[TSerializableAgentState]

    +

    Interact with an Agent running in a server via POST requests.

    +
    +
    +async get_asv(agent_state: TSerializableAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], TSerializableAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) TSerializableAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    + +
    +
    +class ldp.agent.MemoryAgent(*args, llm_model: dict[str, ~typing.Any] = {'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, sys_prompt: str | None = None, prompt: str = '<episode-memories>\n<description>\nThese are relevant memories from previous attempts at similar tasks, along with the action taken and the discounted cumulative reward from that action. A negative reward is failure, a positive reward is success.\n</description>{memories}</episode-memories>\n\nConsidering the memories, choose the next action.', query_factory: ~collections.abc.Callable[[~collections.abc.Iterable[~aviary.message.Message]], ~collections.abc.Awaitable[str]] = <function _default_query_factory>, memory_prompt: str = '<memory><obs>{input}</obs><action>{output}</action><reward>{value}</reward></memory>', num_memories: int = 3)[source]
    +

    Bases: SimpleAgent

    +

    Simple agent that can pick and invoke tools with memory.

    +

    NOTE: the MemoryAgent does not maintain an explicit value estimate, +it simply supplies previous trajectories via the prompt. +As such, the value estimate vhat will always be zero.

    +
    +
    +async default_query_factory() str
    +
    + +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +memory_prompt: str
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, description='Starting configuration for the LLM model. Trainable.'), 'memory_prompt': FieldInfo(annotation=str, required=False, default='<memory><obs>{input}</obs><action>{output}</action><reward>{value}</reward></memory>', description='Prompt for formatting an individual memory. Use XML instead of JSON to avoid potential escaping issues.'), 'num_memories': FieldInfo(annotation=int, required=False, default=3, description='Number of memories to retrieve from MemoryOp'), 'prompt': FieldInfo(annotation=str, required=False, default='<episode-memories>\n<description>\nThese are relevant memories from previous attempts at similar tasks, along with the action taken and the discounted cumulative reward from that action. A negative reward is failure, a positive reward is success.\n</description>{memories}</episode-memories>\n\nConsidering the memories, choose the next action.', description='Prompt that includes the memories.'), 'query_factory': FieldInfo(annotation=Callable[list, Awaitable[str]], required=False, default=<function _default_query_factory>, description="Async function to generate a Memory query string from messages. It's async so this can involve an LLM completion if desired.", exclude=True), 'sys_prompt': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='Opt-in system prompt. If one is passed, the system prompt is not set up to be trainable, because this class is meant to be quite simple as far as possible hyperparameters.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +num_memories: int
    +
    + +
    +
    +prompt: str
    +
    + +
    +
    +query_factory: Callable[[Iterable[Message]], Awaitable[str]]
    +
    + +
    +
    +sys_prompt: str | None
    +
    + +
    + +
    +
    +class ldp.agent.ReActAgent(*args, llm_model: dict[str, Any] = {'logprobs': True, 'model': 'gpt-4o-2024-08-06', 'temperature': 0.1, 'top_logprobs': 1}, sys_prompt: str = 'Answer the following questions as best you can. You have access to the following tools:\n\n{tools}\n\nUse the following format:\n\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: comma separated list of inputs to action as python tuple\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\n\nExample:\n\nThought: I need to use the get_weather tool\nAction: get_weather\nAction Input: "New York", 7\nObservation: The 7 day forecast for New York is [...]', tool_description_method: ToolDescriptionMethods = ToolDescriptionMethods.STR)[source]
    +

    Bases: BaseModel, Agent[SimpleAgentState]

    +

    An Act or ReAct Agent built to work with chat models.

    +

    Paper: https://arxiv.org/abs/2210.03629

    +

    The ReAct style is like so, and note Act style has no ‘Thought: ‘ entries: +System:

    +
    +

    Answer the following questions as best you can. You have access to the following tools:

    +
    +

    {tools}

    +

    Use the following format:

    +

    Thought: you should always think about what to do +Action: the action to take, should be one of [{tool_names}] +Action Input: the input to the action +Observation: the result of the action +… (this Thought/Action/Action Input/Observation can repeat N times)

    +
    +
    +
    +
    User:

    {questions}

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    User:

    Observation:

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    +

    +

    One notable design decision is that ReAct’s state does not necessarily +track ToolRequestMessage. Recall that aviary is in a partially observable +domain, meaning we don’t need to have perfect symmetry with Environments. +Instead, ReActAgent’s state stores a ReAct-style message history, where the +messages are plain Message (and not a ToolRequestMessage).

    +
    +
    +static after_retry_failure_log(retry_state: RetryCallState)[source]
    +
    + +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) SimpleAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +classmethod make_act_agent(**kwargs) Self[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1, 'logprobs': True, 'top_logprobs': 1}, description='Starting configuration for the LLM model.'), 'sys_prompt': FieldInfo(annotation=str, required=False, default='Answer the following questions as best you can. You have access to the following tools:\n\n{tools}\n\nUse the following format:\n\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: comma separated list of inputs to action as python tuple\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\n\nExample:\n\nThought: I need to use the get_weather tool\nAction: get_weather\nAction Input: "New York", 7\nObservation: The 7 day forecast for New York is [...]', description='Learnable system prompt template, defaults to ReAct.'), 'tool_description_method': FieldInfo(annotation=ToolDescriptionMethods, required=False, default=<ToolDescriptionMethods.STR: 'describe_str'>, description="Method used to describe the tools, defaults to 'str' description.")}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +sys_prompt: str
    +
    + +
    +
    +tool_description_method: ToolDescriptionMethods
    +
    + +
    + +
    +
    +class ldp.agent.SimpleAgent(*args, llm_model: dict[str, Any] = {'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, sys_prompt: str | None = None)[source]
    +

    Bases: BaseModel, Agent[SimpleAgentState]

    +

    Simple agent that can pick and invoke tools with a language model.

    +

    It does not have a system prompt because it’s meant to be lightweight.

    +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message]) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Get new action, state, and value given state and observation messages.

    +

    NOTE: the method’s name has action listed before state to help you realize it’s +a new state.

    +
    +
    Parameters:
    +
      +
    • agent_state – Optional current agent state, pass None if irrelevant. +This can be something like agent memory.

    • +
    • obs – Most recent list of observation messages from the environment’s steps. +If more observations than the most recent list are necessary, track them +in the agent state.

    • +
    +
    +
    Returns:
    +

    +
    Three-tuple of new action, new agent state, and estimated value. The

    agent_state is returned as a copy so that you can safely mutate it +without affecting the original. The estimated value is the agent’s +estimate of the future rewards given the input state and observations, +and is used for RL training. If estimated value doesn’t matter, just +return 0. The value could also come from a Q-value evaluated at the +action chosen by the agent.

    +
    +
    +

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) SimpleAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, description='Starting configuration for the LLM model. Trainable.'), 'sys_prompt': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='Opt-in system prompt. If one is passed, the system prompt is not set up to be trainable, because this class is meant to be quite simple as far as possible hyperparameters.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +sys_prompt: str | None
    +
    + +
    + +
    +
    +class ldp.agent.SimpleAgentState(*, tools: list[Tool] = None, messages: list[ToolRequestMessage | ToolResponseMessage | Message] = None)[source]
    +

    Bases: BaseModel

    +

    Simple bucket for an Agent to access tools and store messages.

    +
    +
    +get_next_state(obs: list[Message] | None = None, tools: list[Tool] | None = None, **kwargs) Self[source]
    +

    Get the next agent state without mutating the optional prior state.

    +

    Do not mutate self here, just read from it.

    +
    +
    Parameters:
    +
      +
    • obs – Optional observation messages to use in creating the next state.

    • +
    • tools – Optional list of tools available to the agent. If unspecified, these +should be pulled from the prior_state.

    • +
    • kwargs – Additional keyword arguments to pass to this class’s constructor.

    • +
    +
    +
    Returns:
    +

    The next agent state (which is not an in-place change to self).

    +
    +
    +
    + +
    +
    +messages: list[ToolRequestMessage | ToolResponseMessage | Message]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'messages': FieldInfo(annotation=list[Union[ToolRequestMessage, ToolResponseMessage, Message]], required=False, default_factory=list), 'tools': FieldInfo(annotation=list[Tool], required=False, default_factory=list)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +tools: list[Tool]
    +
    + +
    + +
    +
    +class ldp.agent.TreeofThoughtsAgent(*args, llm_model: dict[str, ~typing.Any] = {'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, value_prompt_func: ~collections.abc.Callable[[str, str], str] = <function TreeofThoughtsAgent.<lambda>>, proposal_prompt_func: ~collections.abc.Callable[[str, str], str] = <function TreeofThoughtsAgent.<lambda>>)[source]
    +

    Bases: BaseModel, Agent[SimpleAgentState]

    +

    Tree of Thoughts Agent.

    +

    This agent uses a tree search mechanism combined with an LLM to generate and evaluate +possible steps in a problem-solving environment. It is designed to explore different solutions +and select the most promising ones based on a heuristic evaluation function.

    +
    +
    +async get_asv(agent_state: SimpleAgentState, obs: list[Message], eval_function: Callable[[str, list[str]], float], n_steps: int = 0, n_select_samples: int = 0) tuple[OpResult[ToolRequestMessage], SimpleAgentState, float][source]
    +

    Generate and evaluate possible steps in the problem-solving process.

    +
    +
    Parameters:
    +
      +
    • agent_state – The current state of the agent.

    • +
    • obs – The observations provided to the agent.

    • +
    • eval_function – Function to evaluate the generated paths in the tree.

    • +
    • n_steps – Number of steps to generate. Defaults to 0. Dictated by the environment.

    • +
    • n_select_samples – Number of tree nodes to select to explore in each step. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    The result of the operation, the new state of the agent, and the number representing the value (0).

    +
    +
    +
    + +
    +
    +async init_state(tools: list[Tool]) SimpleAgentState[source]
    +

    Initializes the first agent state with the provided tools.

    +
    + +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'frozen': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-4o-2024-08-06', 'temperature': 0.1}, description='Starting configuration for the LLM model.'), 'proposal_prompt_func': FieldInfo(annotation=Callable[list, str], required=False, default=<function TreeofThoughtsAgent.<lambda>>, description='Function to format proposal prompt template.'), 'value_prompt_func': FieldInfo(annotation=Callable[list, str], required=False, default=<function TreeofThoughtsAgent.<lambda>>, description='Function to format value prompt template.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +proposal_prompt_func: Callable[[str, str], str]
    +
    + +
    +
    +value_prompt_func: Callable[[str, str], str]
    +
    + +
    + +
    +
    +ldp.agent.make_simple_agent_server(agent: Agent[SimpleAgentState], render_docs: bool = False) FastAPI[source]
    +

    Make a FastAPI app designed to work with the above HTTPAgentClient.

    +

    Here’s how this works: +1. There is an entity orchestrating an Agent’s interactions with an Environment.

    +
    +

    A simple example of this is an integration test that sequentially calls +Agent.get_asv and Environment.step.

    +
    +
      +
    1. That entity is given the above HTTPAgentClient. Any Agent.init_state or +Agent.get_asv calls the orchestration entity makes are actually +POST requests under the hood. The agent’s “brains” aren’t local.

    2. +
    3. Remotely, this server code is running, and is where the actual Agent logic lives. +An example of this is a remote server containing GPU(s).

    4. +
    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/ldp.alg.html b/docs/_build/html/ldp.alg.html new file mode 100644 index 00000000..e958d537 --- /dev/null +++ b/docs/_build/html/ldp.alg.html @@ -0,0 +1,1627 @@ + + + + + + + + ldp.alg package — ldp documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp.alg package

    +
    +

    Subpackages

    +
    + +
    +
    +
    +

    Submodules

    +
    +
    +

    ldp.alg.algorithms module

    +
    +
    +ldp.alg.algorithms.to_network(op_result: OpResult, max_label_height: int | None = None, max_label_width: int | None = None, G: MultiDiGraph | None = None) MultiDiGraph[source]
    +

    Populate a NetworkX graph from the input op result’s computation graph.

    +

    How to export Graphviz .dot file: nx.drawing.nx_pydot.write_dot(G, “file.dot”) +How to render with Graphviz: nx.drawing.nx_pydot.to_pydot(G).write_png(“file.png”) +Online Graphviz renderer: https://dreampuf.github.io/GraphvizOnline/

    +
    +
    Parameters:
    +
      +
    • op_result – Starting op result to recurse parent op calls and results.

    • +
    • max_label_height – Optional max label height (lines).

    • +
    • max_label_width – Optional max label width (chars).

    • +
    • G – Optional graph to add nodes/edges to. Allows this to be a recursive function.

    • +
    +
    +
    Returns:
    +

    Populated a NetworkX multi-edge directed graph.

    +
    +
    +
    + +
    + +
    +

    ldp.alg.callbacks module

    +
    +
    +class ldp.alg.callbacks.Callback[source]
    +

    Bases: object

    +

    Base class for callbacks used by RolloutManager/Evaluator/OnlineTrainer.

    +

    Pseudocode to demonstrate how callback methods are invoked (marked as *):

    +
    +
    RolloutManager.sample_trajectories():

    env.reset() +callback.after_env_reset() * +agent.init_state() +callback.after_agent_init_state() * +while not done:

    +
    +

    callback.before_transition() * +agent.get_asv() +callback.after_agent_get_asv() * +env.step() +callback.after_env_step() * +callback.after_transition() *

    +
    +
    +
    Evaluator.evaluate / OnlineTrainer._eval_loop():

    callback.before_eval_loop() * +for batch in eval_dataset:

    +
    +

    rollout_manager.sample_trajectories() +callback.after_eval_step() *

    +
    +

    callback.after_eval_loop() *

    +
    +
    OfflineTrainer / OnlineTrainer.train():
    +
    for batch in train_dataset:

    rollout_manager.sample_trajectories() # if online +optimizer.aggregate() +if updating_optimizer:

    +
    +

    optimizer.update() +callback.after_update() *

    +
    +

    callback.after_train_step() *

    +
    +
    +
    +
    +
    +
    +async after_agent_get_asv(traj_id: str, action: OpResult[ToolRequestMessage], next_agent_state: Any, value: float) None[source]
    +

    Invoked by runners after agent.get_asv().

    +
    + +
    +
    +async after_agent_init_state(traj_id: str, init_state: Any) None[source]
    +

    Invoked by runners after agent.init_state().

    +
    + +
    +
    +async after_env_reset(traj_id: str, obs: list[Message], tools: list[Tool]) None[source]
    +

    Invoked by runners after env.reset().

    +
    + +
    +
    +async after_env_step(traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool) None[source]
    +

    Invoked by runners after env.step().

    +
    + +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_eval_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by Evaluator and OnlineTrainer after each evaluation step.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    +
    +async after_transition(traj_id: str, agent: Agent, env: Environment, transition: Transition) None[source]
    +

    Invoked by runners after each transition.

    +
    + +
    +
    +async after_update() None[source]
    +

    Invoked by OnlineTrainer after each optimizer.update() call.

    +
    + +
    +
    +async before_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer before the evaluation loop.

    +
    + +
    +
    +async before_transition(traj_id: str, agent: Agent, env: Environment, agent_state: Any, obs: list[Message]) None[source]
    +

    Invoked by runners before each transition and after agent and env reset.

    +
    + +
    + +
    +
    +class ldp.alg.callbacks.ClearContextCallback(op_names: Iterable[str] | None = None)[source]
    +

    Bases: Callback

    +
    +
    +async after_eval_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by Evaluator and OnlineTrainer after each evaluation step.

    +
    + +
    +
    +async after_update() None[source]
    +

    Invoked by OnlineTrainer after each optimizer.update() call.

    +
    + +
    + +
    +
    +class ldp.alg.callbacks.ComputeTrajectoryMetricsMixin[source]
    +

    Bases: object

    +

    Mixin for TaskDataset classes to enable them to compute metrics.

    +
    +
    +compute_trajectory_metrics(trajectories: Sequence[Trajectory]) dict[str, list[float]][source]
    +
    + +
    +
    +tools_to_track: Collection[str | Tool] = {}
    +
    + +
    + +
    +
    +class ldp.alg.callbacks.LoggingCallback(train_dataset: TaskDataset | None = None, eval_dataset: TaskDataset | None = None, metrics_to_log: Collection[str] | None = None)[source]
    +

    Bases: MeanMetricsCallback

    +

    Custom callback for logging filtered metrics (e.g., pass rates) to the console.

    +

    This callback extends the MeanMetricsCallback and allows logging of user-specified metrics +after each training step and after the evaluation loop. It calculates the specified metrics +(e.g., pass rates) from the trajectories and logs the results.

    +
    +
    +async after_eval_loop() None[source]
    +

    Log metrics and pass rate after the evaluation loop.

    +

    This method is called after the evaluation loop finishes, calculating and logging +the evaluation metrics and pass rate.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Log metrics and pass rate after each training step.

    +

    This method is called after every training step, calculating and logging +the training metrics and pass rate.

    +
    +
    Parameters:
    +

    trajectories – A sequence of trajectories from the training step.

    +
    +
    +
    + +
    + +
    +
    +class ldp.alg.callbacks.MeanMetricsCallback(*args, **kwargs)[source]
    +

    Bases: TrajectoryMetricsCallback

    +

    Take a mean of all metrics.

    +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    +
    +property eval_means: dict[str, float]
    +
    + +
    +
    +property train_means: dict[str, float]
    +
    + +
    + +
    +
    +class ldp.alg.callbacks.RolloutDebugDumpCallback(output_dir: PathLike | str)[source]
    +

    Bases: Callback

    +

    Dump JSONL files for each agent and environment step to a directory.

    +
    +
    +async after_agent_get_asv(traj_id: str, action: OpResult[ToolRequestMessage], next_agent_state: Any, value: float) None[source]
    +

    Invoked by runners after agent.get_asv().

    +
    + +
    +
    +async after_env_step(traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool) None[source]
    +

    Invoked by runners after env.step().

    +
    + +
    +
    +async before_transition(traj_id: str, agent: Agent, env: Environment, agent_state, obs: list[Message]) None[source]
    +

    Invoked by runners before each transition and after agent and env reset.

    +
    + +
    + +
    +
    +class ldp.alg.callbacks.TerminalPrintingCallback[source]
    +

    Bases: Callback

    +

    Callback that prints action, observation, and timing information to the terminal.

    +
    +
    +async after_agent_get_asv(traj_id: str, action: OpResult[ToolRequestMessage], next_agent_state: Any, value: float) None[source]
    +

    Invoked by runners after agent.get_asv().

    +
    + +
    +
    +async after_env_step(traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool) None[source]
    +

    Invoked by runners after env.step().

    +
    + +
    +
    +async before_transition(traj_id: str, agent: Agent, env: Environment, agent_state: Any, obs: list[Message]) None[source]
    +

    Start the timer before each transition.

    +
    + +
    + +
    +
    +class ldp.alg.callbacks.TrajectoryFileCallback(output_dir: PathLike | str)[source]
    +

    Bases: Callback

    +

    Callback that writes trajectories to a file.

    +
    +
    +async after_transition(traj_id: str, agent: Agent, env: Environment, transition: Transition) None[source]
    +

    Invoked by runners after each transition.

    +
    + +
    +
    +async before_transition(traj_id: str, agent: Agent, env: Environment, agent_state: Any, obs: list[Message]) None[source]
    +

    Invoked by runners before each transition and after agent and env reset.

    +
    + +
    +
    +cleanup() None[source]
    +
    + +
    + +
    +
    +class ldp.alg.callbacks.TrajectoryMetricsCallback(train_dataset: TaskDataset | None = None, eval_dataset: TaskDataset | None = None, track_tool_usage: bool = False)[source]
    +

    Bases: Callback

    +

    Compute metrics that are defined by task datasets.

    +

    NOTE: evaluation portion’s after_eval_step/loop() is not concurrency safe because +trajectories should be stored in the order of after_eval_step() calls.

    +
    +
    +async after_env_reset(traj_id: str, obs: list[Message], tools: list[Tool]) None[source]
    +

    Invoked by runners after env.reset().

    +
    + +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_eval_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by Evaluator and OnlineTrainer after each evaluation step.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    + +
    +
    +class ldp.alg.callbacks.WandBLoggingCallback(*args, **kwargs)[source]
    +

    Bases: TrajectoryMetricsCallback

    +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    + +
    +
    +

    ldp.alg.datasets module

    +
    +
    +class ldp.alg.datasets.DummyTaskDataset[source]
    +

    Bases: DummyTaskDataset, ComputeTrajectoryMetricsMixin

    +
    + +
    +
    +

    ldp.alg.rollout module

    +
    +
    +exception ldp.alg.rollout.AgentError(original_exc: Exception)[source]
    +

    Bases: CaughtError

    +
    +
    +exc_type = 'agent'
    +
    + +
    + +
    +
    +exception ldp.alg.rollout.CaughtError(original_exc: Exception)[source]
    +

    Bases: Exception

    +

    Base class for reraised exceptions when catching is enabled.

    +
    +
    +exc_type = 'undefined'
    +
    + +
    + +
    +
    +exception ldp.alg.rollout.EnvError(original_exc: Exception)[source]
    +

    Bases: CaughtError

    +
    +
    +exc_type = 'env'
    +
    + +
    + +
    +
    +class ldp.alg.rollout.RolloutManager(agent: Agent, catch_agent_failures: bool = True, catch_env_failures: bool = True, callbacks: Sequence[Callback] | None = None, concurrency_limit: int | None = None)[source]
    +

    Bases: object

    +
    +
    +async sample_trajectories(environment_factory: Callable[[], TEnv], batch_size: int = 1, max_steps: int | None = None) list[tuple[Trajectory, TEnv]][source]
    +
    +async sample_trajectories(environments: Sequence[Environment], max_steps: int | None = None) list[Trajectory]
    +
    + +
    + +
    +
    +ldp.alg.rollout.reraise_exc_as(reraise: type[CaughtError], enabled: bool) Iterator[None][source]
    +
    + +
    +
    +

    ldp.alg.runners module

    +
    +
    +class ldp.alg.runners.Evaluator(config: EvaluatorConfig, agent: Agent, dataset: TaskDataset, callbacks: Sequence[Callback] | None = None)[source]
    +

    Bases: object

    +
    +
    +async evaluate(**kwargs)
    +
    + +
    +
    +async run(**kwargs) None[source]
    +

    Run the agent over the provided dataset.

    +

    This method does not set training mode, so it can be used to collect +trajectories for offline training.

    +
    + +
    + +
    +
    +class ldp.alg.runners.EvaluatorConfig(*, batch_size: int = 1, num_eval_iterations: int | None = None, max_rollout_steps: int | None = None, catch_agent_failures: bool = True, catch_env_failures: bool = True, clear_ctx_at_each_iter: bool = False)[source]
    +

    Bases: BaseModel

    +
    +
    +batch_size: int
    +
    + +
    +
    +catch_agent_failures: bool
    +
    + +
    +
    +catch_env_failures: bool
    +
    + +
    +
    +clear_ctx_at_each_iter: bool
    +
    + +
    +
    +make_rollout_manager(agent: Agent, callbacks: Sequence[Callback]) RolloutManager[source]
    +
    + +
    +
    +max_rollout_steps: int | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=False, default=1), 'catch_agent_failures': FieldInfo(annotation=bool, required=False, default=True), 'catch_env_failures': FieldInfo(annotation=bool, required=False, default=True), 'clear_ctx_at_each_iter': FieldInfo(annotation=bool, required=False, default=False), 'max_rollout_steps': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'num_eval_iterations': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description='Number of eval iterations. If not provided, will exhaust the dataset. If 0, will not run the eval loop. ')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +num_eval_iterations: int | None
    +
    + +
    + +
    +
    +class ldp.alg.runners.OfflineTrainer(config: OfflineTrainerConfig, agent: Agent, optimizer: Optimizer, train_trajectories: list[Trajectory], callbacks: Sequence[Callback] | None = None)[source]
    +

    Bases: object

    +
    +
    +async train() None[source]
    +
    + +
    + +
    +
    +class ldp.alg.runners.OfflineTrainerConfig(*, batch_size: int, update_every: int = 1, clear_ctx_at_each_iter: bool = False)[source]
    +

    Bases: BaseModel

    +
    +
    +batch_size: int
    +
    + +
    +
    +clear_ctx_at_each_iter: bool
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=True), 'clear_ctx_at_each_iter': FieldInfo(annotation=bool, required=False, default=False), 'update_every': FieldInfo(annotation=int, required=False, default=1, description='Number of training iterations to run before updating the model.', metadata=[Ge(ge=1)])}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +update_every: int
    +
    + +
    + +
    +
    +class ldp.alg.runners.OnlineTrainer(config: OnlineTrainerConfig, agent: Agent, optimizer: Optimizer, train_dataset: TaskDataset, eval_dataset: TaskDataset | None = None, callbacks: Sequence[Callback] | None = None)[source]
    +

    Bases: object

    +
    +
    +async evaluate(**kwargs)
    +
    + +
    +
    +async train() None[source]
    +
    + +
    + +
    +
    +class ldp.alg.runners.OnlineTrainerConfig(*, batch_size: int, num_eval_iterations: int | None = None, max_rollout_steps: int | None = None, catch_agent_failures: bool = True, catch_env_failures: bool = True, clear_ctx_at_each_iter: bool = False, num_train_iterations: int, num_rollouts_per_env: int = 1, update_every: int = 1, eval_every: int | None = None, eval_before: bool = True)[source]
    +

    Bases: EvaluatorConfig

    +
    +
    +batch_size: int
    +
    + +
    +
    +clear_ctx_at_each_iter: bool
    +
    + +
    +
    +eval_before: bool
    +
    + +
    +
    +eval_every: int | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=True), 'catch_agent_failures': FieldInfo(annotation=bool, required=False, default=True), 'catch_env_failures': FieldInfo(annotation=bool, required=False, default=True), 'clear_ctx_at_each_iter': FieldInfo(annotation=bool, required=False, default=False), 'eval_before': FieldInfo(annotation=bool, required=False, default=True, description='If True (default), evaluate on the validation set before kicking off training.'), 'eval_every': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description='If set, will repeatedly evaluate on the validation set after this many iterations. If unset (default), no evaluation is performed.'), 'max_rollout_steps': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'num_eval_iterations': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description='Number of eval iterations. If not provided, will exhaust the dataset. If 0, will not run the eval loop. '), 'num_rollouts_per_env': FieldInfo(annotation=int, required=False, default=1, description='Number of rollouts to execute for each environment per training iteration.'), 'num_train_iterations': FieldInfo(annotation=int, required=True, description='Number of iterations (at one batch per iteration) to process during training, and setting to 0 skips training.', metadata=[Ge(ge=0)]), 'update_every': FieldInfo(annotation=int, required=False, default=1, description='Number of training iterations between optimizer update calls.', metadata=[Ge(ge=1)])}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +num_rollouts_per_env: int
    +
    + +
    +
    +num_train_iterations: int
    +
    + +
    +
    +update_every: int
    +
    + +
    + +
    + +
    +

    Module contents

    +
    +
    +class ldp.alg.Beam(traj, env)[source]
    +

    Bases: NamedTuple

    +
    +
    +env: Environment
    +

    Alias for field number 1

    +
    + +
    +
    +traj: Trajectory
    +

    Alias for field number 0

    +
    + +
    + +
    +
    +class ldp.alg.BeamSearchRollout(agent: Agent, beam_width: int, samples_per_beam: int, env_clone_fn: Callable[[TEnv], Awaitable[TEnv]], agent_clone_fn: Callable[[TAgentState], TAgentState], scoring_fn: Callable[[Trajectory], Awaitable[float]], replay_actions_on_clone: bool = False, callbacks: Sequence[Callback] | None = None, catch_agent_failures: bool = True, catch_env_failures: bool = True, verbose: bool = False)[source]
    +

    Bases: object

    +
    +
    +async sample_trajectories(environments: Sequence[Environment], max_steps: int | None = None) list[Trajectory][source]
    +
    + +
    + +
    +
    +class ldp.alg.Callback[source]
    +

    Bases: object

    +

    Base class for callbacks used by RolloutManager/Evaluator/OnlineTrainer.

    +

    Pseudocode to demonstrate how callback methods are invoked (marked as *):

    +
    +
    RolloutManager.sample_trajectories():

    env.reset() +callback.after_env_reset() * +agent.init_state() +callback.after_agent_init_state() * +while not done:

    +
    +

    callback.before_transition() * +agent.get_asv() +callback.after_agent_get_asv() * +env.step() +callback.after_env_step() * +callback.after_transition() *

    +
    +
    +
    Evaluator.evaluate / OnlineTrainer._eval_loop():

    callback.before_eval_loop() * +for batch in eval_dataset:

    +
    +

    rollout_manager.sample_trajectories() +callback.after_eval_step() *

    +
    +

    callback.after_eval_loop() *

    +
    +
    OfflineTrainer / OnlineTrainer.train():
    +
    for batch in train_dataset:

    rollout_manager.sample_trajectories() # if online +optimizer.aggregate() +if updating_optimizer:

    +
    +

    optimizer.update() +callback.after_update() *

    +
    +

    callback.after_train_step() *

    +
    +
    +
    +
    +
    +
    +async after_agent_get_asv(traj_id: str, action: OpResult[ToolRequestMessage], next_agent_state: Any, value: float) None[source]
    +

    Invoked by runners after agent.get_asv().

    +
    + +
    +
    +async after_agent_init_state(traj_id: str, init_state: Any) None[source]
    +

    Invoked by runners after agent.init_state().

    +
    + +
    +
    +async after_env_reset(traj_id: str, obs: list[Message], tools: list[Tool]) None[source]
    +

    Invoked by runners after env.reset().

    +
    + +
    +
    +async after_env_step(traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool) None[source]
    +

    Invoked by runners after env.step().

    +
    + +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_eval_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by Evaluator and OnlineTrainer after each evaluation step.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    +
    +async after_transition(traj_id: str, agent: Agent, env: Environment, transition: Transition) None[source]
    +

    Invoked by runners after each transition.

    +
    + +
    +
    +async after_update() None[source]
    +

    Invoked by OnlineTrainer after each optimizer.update() call.

    +
    + +
    +
    +async before_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer before the evaluation loop.

    +
    + +
    +
    +async before_transition(traj_id: str, agent: Agent, env: Environment, agent_state: Any, obs: list[Message]) None[source]
    +

    Invoked by runners before each transition and after agent and env reset.

    +
    + +
    + +
    +
    +class ldp.alg.ClearContextCallback(op_names: Iterable[str] | None = None)[source]
    +

    Bases: Callback

    +
    +
    +async after_eval_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by Evaluator and OnlineTrainer after each evaluation step.

    +
    + +
    +
    +async after_update() None[source]
    +

    Invoked by OnlineTrainer after each optimizer.update() call.

    +
    + +
    + +
    +
    +class ldp.alg.ComputeTrajectoryMetricsMixin[source]
    +

    Bases: object

    +

    Mixin for TaskDataset classes to enable them to compute metrics.

    +
    +
    +compute_trajectory_metrics(trajectories: Sequence[Trajectory]) dict[str, list[float]][source]
    +
    + +
    +
    +tools_to_track: Collection[str | Tool] = {}
    +
    + +
    + +
    +
    +class ldp.alg.Evaluator(config: EvaluatorConfig, agent: Agent, dataset: TaskDataset, callbacks: Sequence[Callback] | None = None)[source]
    +

    Bases: object

    +
    +
    +async evaluate(**kwargs)
    +
    + +
    +
    +async run(**kwargs) None[source]
    +

    Run the agent over the provided dataset.

    +

    This method does not set training mode, so it can be used to collect +trajectories for offline training.

    +
    + +
    + +
    +
    +class ldp.alg.EvaluatorConfig(*, batch_size: int = 1, num_eval_iterations: int | None = None, max_rollout_steps: int | None = None, catch_agent_failures: bool = True, catch_env_failures: bool = True, clear_ctx_at_each_iter: bool = False)[source]
    +

    Bases: BaseModel

    +
    +
    +batch_size: int
    +
    + +
    +
    +catch_agent_failures: bool
    +
    + +
    +
    +catch_env_failures: bool
    +
    + +
    +
    +clear_ctx_at_each_iter: bool
    +
    + +
    +
    +make_rollout_manager(agent: Agent, callbacks: Sequence[Callback]) RolloutManager[source]
    +
    + +
    +
    +max_rollout_steps: int | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=False, default=1), 'catch_agent_failures': FieldInfo(annotation=bool, required=False, default=True), 'catch_env_failures': FieldInfo(annotation=bool, required=False, default=True), 'clear_ctx_at_each_iter': FieldInfo(annotation=bool, required=False, default=False), 'max_rollout_steps': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'num_eval_iterations': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description='Number of eval iterations. If not provided, will exhaust the dataset. If 0, will not run the eval loop. ')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +num_eval_iterations: int | None
    +
    + +
    + +
    +
    +class ldp.alg.LoggingCallback(train_dataset: TaskDataset | None = None, eval_dataset: TaskDataset | None = None, metrics_to_log: Collection[str] | None = None)[source]
    +

    Bases: MeanMetricsCallback

    +

    Custom callback for logging filtered metrics (e.g., pass rates) to the console.

    +

    This callback extends the MeanMetricsCallback and allows logging of user-specified metrics +after each training step and after the evaluation loop. It calculates the specified metrics +(e.g., pass rates) from the trajectories and logs the results.

    +
    +
    +async after_eval_loop() None[source]
    +

    Log metrics and pass rate after the evaluation loop.

    +

    This method is called after the evaluation loop finishes, calculating and logging +the evaluation metrics and pass rate.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Log metrics and pass rate after each training step.

    +

    This method is called after every training step, calculating and logging +the training metrics and pass rate.

    +
    +
    Parameters:
    +

    trajectories – A sequence of trajectories from the training step.

    +
    +
    +
    + +
    + +
    +
    +class ldp.alg.MeanMetricsCallback(*args, **kwargs)[source]
    +

    Bases: TrajectoryMetricsCallback

    +

    Take a mean of all metrics.

    +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    +
    +property eval_means: dict[str, float]
    +
    + +
    +
    +property train_means: dict[str, float]
    +
    + +
    + +
    +
    +class ldp.alg.OfflineTrainer(config: OfflineTrainerConfig, agent: Agent, optimizer: Optimizer, train_trajectories: list[Trajectory], callbacks: Sequence[Callback] | None = None)[source]
    +

    Bases: object

    +
    +
    +async train() None[source]
    +
    + +
    + +
    +
    +class ldp.alg.OfflineTrainerConfig(*, batch_size: int, update_every: int = 1, clear_ctx_at_each_iter: bool = False)[source]
    +

    Bases: BaseModel

    +
    +
    +batch_size: int
    +
    + +
    +
    +clear_ctx_at_each_iter: bool
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=True), 'clear_ctx_at_each_iter': FieldInfo(annotation=bool, required=False, default=False), 'update_every': FieldInfo(annotation=int, required=False, default=1, description='Number of training iterations to run before updating the model.', metadata=[Ge(ge=1)])}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +update_every: int
    +
    + +
    + +
    +
    +class ldp.alg.OnlineTrainer(config: OnlineTrainerConfig, agent: Agent, optimizer: Optimizer, train_dataset: TaskDataset, eval_dataset: TaskDataset | None = None, callbacks: Sequence[Callback] | None = None)[source]
    +

    Bases: object

    +
    +
    +async evaluate(**kwargs)
    +
    + +
    +
    +async train() None[source]
    +
    + +
    + +
    +
    +class ldp.alg.OnlineTrainerConfig(*, batch_size: int, num_eval_iterations: int | None = None, max_rollout_steps: int | None = None, catch_agent_failures: bool = True, catch_env_failures: bool = True, clear_ctx_at_each_iter: bool = False, num_train_iterations: int, num_rollouts_per_env: int = 1, update_every: int = 1, eval_every: int | None = None, eval_before: bool = True)[source]
    +

    Bases: EvaluatorConfig

    +
    +
    +batch_size: int
    +
    + +
    +
    +catch_agent_failures: bool
    +
    + +
    +
    +catch_env_failures: bool
    +
    + +
    +
    +clear_ctx_at_each_iter: bool
    +
    + +
    +
    +eval_before: bool
    +
    + +
    +
    +eval_every: int | None
    +
    + +
    +
    +max_rollout_steps: int | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=True), 'catch_agent_failures': FieldInfo(annotation=bool, required=False, default=True), 'catch_env_failures': FieldInfo(annotation=bool, required=False, default=True), 'clear_ctx_at_each_iter': FieldInfo(annotation=bool, required=False, default=False), 'eval_before': FieldInfo(annotation=bool, required=False, default=True, description='If True (default), evaluate on the validation set before kicking off training.'), 'eval_every': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description='If set, will repeatedly evaluate on the validation set after this many iterations. If unset (default), no evaluation is performed.'), 'max_rollout_steps': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'num_eval_iterations': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description='Number of eval iterations. If not provided, will exhaust the dataset. If 0, will not run the eval loop. '), 'num_rollouts_per_env': FieldInfo(annotation=int, required=False, default=1, description='Number of rollouts to execute for each environment per training iteration.'), 'num_train_iterations': FieldInfo(annotation=int, required=True, description='Number of iterations (at one batch per iteration) to process during training, and setting to 0 skips training.', metadata=[Ge(ge=0)]), 'update_every': FieldInfo(annotation=int, required=False, default=1, description='Number of training iterations between optimizer update calls.', metadata=[Ge(ge=1)])}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +num_eval_iterations: int | None
    +
    + +
    +
    +num_rollouts_per_env: int
    +
    + +
    +
    +num_train_iterations: int
    +
    + +
    +
    +update_every: int
    +
    + +
    + +
    +
    +class ldp.alg.RolloutDebugDumpCallback(output_dir: PathLike | str)[source]
    +

    Bases: Callback

    +

    Dump JSONL files for each agent and environment step to a directory.

    +
    +
    +async after_agent_get_asv(traj_id: str, action: OpResult[ToolRequestMessage], next_agent_state: Any, value: float) None[source]
    +

    Invoked by runners after agent.get_asv().

    +
    + +
    +
    +async after_env_step(traj_id: str, obs: list[Message], reward: float, done: bool, trunc: bool) None[source]
    +

    Invoked by runners after env.step().

    +
    + +
    +
    +async before_transition(traj_id: str, agent: Agent, env: Environment, agent_state, obs: list[Message]) None[source]
    +

    Invoked by runners before each transition and after agent and env reset.

    +
    + +
    + +
    +
    +class ldp.alg.RolloutManager(agent: Agent, catch_agent_failures: bool = True, catch_env_failures: bool = True, callbacks: Sequence[Callback] | None = None, concurrency_limit: int | None = None)[source]
    +

    Bases: object

    +
    +
    +async sample_trajectories(environment_factory: Callable[[], TEnv], batch_size: int = 1, max_steps: int | None = None) list[tuple[Trajectory, TEnv]][source]
    +
    +async sample_trajectories(environments: Sequence[Environment], max_steps: int | None = None) list[Trajectory]
    +
    + +
    + +
    +
    +class ldp.alg.TrajectoryFileCallback(output_dir: PathLike | str)[source]
    +

    Bases: Callback

    +

    Callback that writes trajectories to a file.

    +
    +
    +async after_transition(traj_id: str, agent: Agent, env: Environment, transition: Transition) None[source]
    +

    Invoked by runners after each transition.

    +
    + +
    +
    +async before_transition(traj_id: str, agent: Agent, env: Environment, agent_state: Any, obs: list[Message]) None[source]
    +

    Invoked by runners before each transition and after agent and env reset.

    +
    + +
    +
    +cleanup() None[source]
    +
    + +
    + +
    +
    +class ldp.alg.TrajectoryMetricsCallback(train_dataset: TaskDataset | None = None, eval_dataset: TaskDataset | None = None, track_tool_usage: bool = False)[source]
    +

    Bases: Callback

    +

    Compute metrics that are defined by task datasets.

    +

    NOTE: evaluation portion’s after_eval_step/loop() is not concurrency safe because +trajectories should be stored in the order of after_eval_step() calls.

    +
    +
    +async after_env_reset(traj_id: str, obs: list[Message], tools: list[Tool]) None[source]
    +

    Invoked by runners after env.reset().

    +
    + +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_eval_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by Evaluator and OnlineTrainer after each evaluation step.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    + +
    +
    +class ldp.alg.TreeSearchRollout(agent: Agent, branching_factor: int, env_clone_fn: Callable[[TEnv], Awaitable[TEnv]] | Callable[[TEnv], TEnv], catch_agent_failures: bool = True, catch_env_failures: bool = True, callbacks: Sequence[Callback] | None = None, concurrency_limit: int | None = None, target_reward: float | None = None)[source]
    +

    Bases: RolloutManager

    +
    +
    +async sample_tree(env: TEnv, max_depth: int | None) TransitionTree[source]
    +
    + +
    +
    +async sample_trees(environments: Sequence[TEnv], max_depth: int | None = None) list[TransitionTree][source]
    +
    + +
    + +
    +
    +class ldp.alg.WandBLoggingCallback(*args, **kwargs)[source]
    +

    Bases: TrajectoryMetricsCallback

    +
    +
    +async after_eval_loop() None[source]
    +

    Invoked by Evaluator and OnlineTrainer after the evaluation loop.

    +
    + +
    +
    +async after_train_step(trajectories: Sequence[Trajectory]) None[source]
    +

    Invoked by OnlineTrainer after each training step.

    +
    + +
    + +
    +
    +ldp.alg.to_network(op_result: OpResult, max_label_height: int | None = None, max_label_width: int | None = None, G: MultiDiGraph | None = None) MultiDiGraph[source]
    +

    Populate a NetworkX graph from the input op result’s computation graph.

    +

    How to export Graphviz .dot file: nx.drawing.nx_pydot.write_dot(G, “file.dot”) +How to render with Graphviz: nx.drawing.nx_pydot.to_pydot(G).write_png(“file.png”) +Online Graphviz renderer: https://dreampuf.github.io/GraphvizOnline/

    +
    +
    Parameters:
    +
      +
    • op_result – Starting op result to recurse parent op calls and results.

    • +
    • max_label_height – Optional max label height (lines).

    • +
    • max_label_width – Optional max label width (chars).

    • +
    • G – Optional graph to add nodes/edges to. Allows this to be a recursive function.

    • +
    +
    +
    Returns:
    +

    Populated a NetworkX multi-edge directed graph.

    +
    +
    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/ldp.alg.optimizer.html b/docs/_build/html/ldp.alg.optimizer.html new file mode 100644 index 00000000..ba4cb2ad --- /dev/null +++ b/docs/_build/html/ldp.alg.optimizer.html @@ -0,0 +1,968 @@ + + + + + + + + ldp.alg.optimizer package — ldp documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp.alg.optimizer package

    +
    +

    Submodules

    +
    +
    +

    ldp.alg.optimizer.ape module

    +
    +
    +class ldp.alg.optimizer.ape.APEOpt(*, max_examples: int | None = 50, system_prompt: str = 'We are optimizing prompts for a language model. The model sees a prompt, an input, and then generates an output.', query_prompt: str = 'Here are correct example outputs that the language model and prompt should produce:\n{good_examples}\n\nThe current prompt is: "{prompt}"\n\nWhich resulted in the following incorrect input, output, and {score}:\n{examples}\n\nRevise the current prompt to improve the outputs. Your proposed prompt should be concise, correct, and specify the desired output format.', llm: LLMModel = None, prompt_op: PromptOp, llm_call_op: LLMCallOp, score_fn: APEScoreFn = APEScoreFn.REWARD, good_reward_threshold: float | None = None, reward_discount: float = 1.0, examples: list[Example] = None, good_examples: list[Example] = None, steps: int = 0, trace: list[str] = None)[source]
    +

    Bases: BaseModel, Optimizer

    +

    Basic optimizer that acts as an Automatic Prompt Engineer (APE).

    +

    Paper: https://openreview.net/pdf?id=92gvk82DE-

    +

    Details: +- This implements the “forward mode generation” strategy. +- The score function used is the gradient (float) at the output of the

    +
    +

    PromptOp being optimized. A zero gradient means the prompt was “good”, +and a non-zero gradient means we can learn from the prompt.

    +
    +
      +
    • +
      Possible improvements include:
        +
      • Extending the score function to the LLM result’s logprobs

      • +
      • Iterating with Monte Carlo Search

      • +
      • Use of memory for further example augmentation

      • +
      +
      +
      +
    • +
    +
    +
    +aggregate_trajectory(trajectory: Trajectory) None[source]
    +

    Aggregate transitions from a single trajectory to construct training samples.

    +
    + +
    +
    +examples: list[Example]
    +
    + +
    +
    +classmethod from_agent(agent: ReActAgent, **kwargs) Self[source]
    +
    + +
    +
    +good_examples: list[Example]
    +
    + +
    +
    +good_reward_threshold: float | None
    +
    + +
    +
    +llm: LLMModel
    +
    + +
    +
    +llm_call_op: LLMCallOp
    +
    + +
    +
    +max_examples: int | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'examples': FieldInfo(annotation=list[Example], required=False, default_factory=list), 'good_examples': FieldInfo(annotation=list[Example], required=False, default_factory=list), 'good_reward_threshold': FieldInfo(annotation=Union[float, NoneType], required=False, default=None, description='If using reward as the score_fn, then a good example is defined by reward>=good_reward_threshold.'), 'llm': FieldInfo(annotation=LLMModel, required=False, default_factory=LLMModel, description='LLM used to update the prompt inside the PromptOp. The paper mentions that larger models produce better prompt proposals.'), 'llm_call_op': FieldInfo(annotation=LLMCallOp, required=True, description='LLMCallOp to be optimized.'), 'max_examples': FieldInfo(annotation=Union[int, NoneType], required=False, default=50, description='Max number of examples to include in the below query_prompt, or None for no limit. The paper mentions that more examples produce better prompt proposals.'), 'prompt_op': FieldInfo(annotation=PromptOp, required=True, description='PromptOp to be optimized.'), 'query_prompt': FieldInfo(annotation=str, required=False, default='Here are correct example outputs that the language model and prompt should produce:\n{good_examples}\n\nThe current prompt is: "{prompt}"\n\nWhich resulted in the following incorrect input, output, and {score}:\n{examples}\n\nRevise the current prompt to improve the outputs. Your proposed prompt should be concise, correct, and specify the desired output format.'), 'reward_discount': FieldInfo(annotation=float, required=False, default=1.0), 'score_fn': FieldInfo(annotation=APEScoreFn, required=False, default=<APEScoreFn.REWARD: 'reward'>), 'steps': FieldInfo(annotation=int, required=False, default=0), 'system_prompt': FieldInfo(annotation=str, required=False, default='We are optimizing prompts for a language model. The model sees a prompt, an input, and then generates an output.'), 'trace': FieldInfo(annotation=list[str], required=False, default_factory=list, description='History of prompts used.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(_APEOpt__context: Any) None[source]
    +

    Override this method to perform additional initialization after __init__ and model_construct. +This is useful if you want to do some validation that requires the entire model to be initialized.

    +
    + +
    +
    +prompt_op: PromptOp
    +
    + +
    +
    +query_prompt: str
    +
    + +
    +
    +reward_discount: float
    +
    + +
    +
    +score_fn: APEScoreFn
    +
    + +
    +
    +steps: int
    +
    + +
    +
    +system_prompt: str
    +
    + +
    +
    +trace: list[str]
    +
    + +
    +
    +async update() None[source]
    +

    Update the model based on the aggregated samples.

    +
    + +
    +
    +validate_score_fn()[source]
    +
    + +
    + +
    +
    +class ldp.alg.optimizer.ape.APEScoreFn(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
    +

    Bases: StrEnum

    +
    +
    +GRADIENT = 'gradient'
    +
    + +
    +
    +REWARD = 'reward'
    +
    + +
    + +
    +
    +class ldp.alg.optimizer.ape.Example(*, input: JsonValue, output: JsonValue, score: float)[source]
    +

    Bases: BaseModel

    +
    +
    +input: JsonValue
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'input': FieldInfo(annotation=JsonValue, required=True), 'output': FieldInfo(annotation=JsonValue, required=True), 'score': FieldInfo(annotation=float, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +output: JsonValue
    +
    + +
    +
    +score: float
    +
    + +
    + +
    +
    +class ldp.alg.optimizer.ape.OutputPrompt(*, prompt: str)[source]
    +

    Bases: BaseModel

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'prompt': FieldInfo(annotation=str, required=True, description='Prompt for language model')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +prompt: str
    +
    + +
    + +
    +
    +ldp.alg.optimizer.ape.get_formatted_variables(s: str) set[str][source]
    +

    Returns the set of variables implied by the format string.

    +
    + +
    +
    +

    ldp.alg.optimizer.memory module

    +
    +
    +class ldp.alg.optimizer.memory.MemoryFactory(*args, **kwargs)[source]
    +

    Bases: Protocol

    +
    + +
    +
    +class ldp.alg.optimizer.memory.MemoryOpt(*, memory_op: ~ldp.graph.common_ops.MemoryOp, output_op: ~ldp.graph.ops.Op, reward_discount: float = 1.0, memory_factory: ~ldp.alg.optimizer.memory.MemoryFactory = <function _default_memory_factory>, memory_template: str = 'Input: {input}\nOutput: {output}\nReward: {value}', steps: int = 0, example_buffer: list[tuple[~ldp.graph.op_utils.CallID, ~ldp.graph.op_utils.CallID, float, JsonValue]] = None)[source]
    +

    Bases: BaseModel, Optimizer

    +

    Trainer for memory agents. By default it is a minimizer.

    +

    This optimizer simply adds memories to the MemoryOp using a memory factory.

    +
    +
    +aggregate_trajectory(trajectory: Trajectory) None[source]
    +

    Aggregate transitions from a single trajectory to construct training samples.

    +
    + +
    +
    +async default_memory_factory(output_op: Op[TOutput], memory_template: str, example_buffer: Iterable[tuple[CallID, CallID, float, JsonValue]]) list[Memory]
    +
    + +
    +
    +example_buffer: list[tuple[CallID, CallID, float, JsonValue]]
    +
    + +
    +
    +classmethod from_agent(agent: MemoryAgent, **kwargs) Self[source]
    +
    + +
    +
    +memory_factory: MemoryFactory
    +
    + +
    +
    +memory_op: MemoryOp
    +
    + +
    +
    +memory_template: str
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'example_buffer': FieldInfo(annotation=list[tuple[CallID, CallID, float, JsonValue]], required=False, default_factory=list), 'memory_factory': FieldInfo(annotation=MemoryFactory, required=False, default=<function _default_memory_factory>, description="Async function to make Memories from an example buffer. It's async so this can involve an LLM completion if desired.", exclude=True), 'memory_op': FieldInfo(annotation=MemoryOp, required=True), 'memory_template': FieldInfo(annotation=str, required=False, default='Input: {input}\nOutput: {output}\nReward: {value}', description="Template for a Memory's string representation."), 'output_op': FieldInfo(annotation=Op, required=True), 'reward_discount': FieldInfo(annotation=float, required=False, default=1.0), 'steps': FieldInfo(annotation=int, required=False, default=0)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +output_op: Op
    +
    + +
    +
    +reward_discount: float
    +
    + +
    +
    +steps: int
    +
    + +
    +
    +async update() None[source]
    +

    Create new memories from the example buffer and add them to MemoryOp.

    +
    + +
    + +
    +
    +class ldp.alg.optimizer.memory.PositiveMemoryOpt(*, memory_op: ~ldp.graph.common_ops.MemoryOp, output_op: ~ldp.graph.ops.Op, reward_discount: float = 1.0, memory_factory: ~ldp.alg.optimizer.memory.MemoryFactory = <function _default_memory_factory>, memory_template: str = 'Input: {input}\nOutput: {output}\nReward: {value}', steps: int = 0, example_buffer: list[tuple[~ldp.graph.op_utils.CallID, ~ldp.graph.op_utils.CallID, float, JsonValue]] = None)[source]
    +

    Bases: MemoryOpt

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'example_buffer': FieldInfo(annotation=list[tuple[CallID, CallID, float, JsonValue]], required=False, default_factory=list), 'memory_factory': FieldInfo(annotation=MemoryFactory, required=False, default=<function _default_memory_factory>, description="Async function to make Memories from an example buffer. It's async so this can involve an LLM completion if desired.", exclude=True), 'memory_op': FieldInfo(annotation=MemoryOp, required=True), 'memory_template': FieldInfo(annotation=str, required=False, default='Input: {input}\nOutput: {output}\nReward: {value}', description="Template for a Memory's string representation."), 'output_op': FieldInfo(annotation=Op, required=True), 'reward_discount': FieldInfo(annotation=float, required=False, default=1.0), 'steps': FieldInfo(annotation=int, required=False, default=0)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    + +
    +
    +

    ldp.alg.optimizer.opt module

    +
    +
    +class ldp.alg.optimizer.opt.ChainedOptimizer(*optimizers: Optimizer)[source]
    +

    Bases: Optimizer

    +

    An optimizer that runs a sequence of sub-optimizers in the order they are provided.

    +
    +
    +aggregate(trajectories: Iterable[Trajectory], show_pbar: bool = False) None[source]
    +

    Aggregate trajectories to construct training samples.

    +
    + +
    +
    +async update() None[source]
    +

    Update the model based on the aggregated samples.

    +
    + +
    + +
    +
    +class ldp.alg.optimizer.opt.Optimizer[source]
    +

    Bases: ABC

    +

    Base class for all optimizers.

    +
    +
    +aggregate(trajectories: Iterable[Trajectory], show_pbar: bool = False) None[source]
    +

    Aggregate trajectories to construct training samples.

    +
    + +
    +
    +abstract aggregate_trajectory(trajectory: Trajectory) None[source]
    +

    Aggregate transitions from a single trajectory to construct training samples.

    +
    + +
    +
    +abstract async update() None[source]
    +

    Update the model based on the aggregated samples.

    +
    + +
    + +
    +
    +

    ldp.alg.optimizer.replay_buffers module

    +
    +
    +class ldp.alg.optimizer.replay_buffers.CircularReplayBuffer(initlist=None)[source]
    +

    Bases: UserList[dict]

    +
    +
    +batched_iter(batch_size: int, shuffle: bool = True, infinite: bool = False)[source]
    +
    + +
    +
    +resize(size: int)[source]
    +
    + +
    + +
    +
    +

    Module contents

    +
    +
    +class ldp.alg.optimizer.APEOpt(*, max_examples: int | None = 50, system_prompt: str = 'We are optimizing prompts for a language model. The model sees a prompt, an input, and then generates an output.', query_prompt: str = 'Here are correct example outputs that the language model and prompt should produce:\n{good_examples}\n\nThe current prompt is: "{prompt}"\n\nWhich resulted in the following incorrect input, output, and {score}:\n{examples}\n\nRevise the current prompt to improve the outputs. Your proposed prompt should be concise, correct, and specify the desired output format.', llm: LLMModel = None, prompt_op: PromptOp, llm_call_op: LLMCallOp, score_fn: APEScoreFn = APEScoreFn.REWARD, good_reward_threshold: float | None = None, reward_discount: float = 1.0, examples: list[Example] = None, good_examples: list[Example] = None, steps: int = 0, trace: list[str] = None)[source]
    +

    Bases: BaseModel, Optimizer

    +

    Basic optimizer that acts as an Automatic Prompt Engineer (APE).

    +

    Paper: https://openreview.net/pdf?id=92gvk82DE-

    +

    Details: +- This implements the “forward mode generation” strategy. +- The score function used is the gradient (float) at the output of the

    +
    +

    PromptOp being optimized. A zero gradient means the prompt was “good”, +and a non-zero gradient means we can learn from the prompt.

    +
    +
      +
    • +
      Possible improvements include:
        +
      • Extending the score function to the LLM result’s logprobs

      • +
      • Iterating with Monte Carlo Search

      • +
      • Use of memory for further example augmentation

      • +
      +
      +
      +
    • +
    +
    +
    +aggregate_trajectory(trajectory: Trajectory) None[source]
    +

    Aggregate transitions from a single trajectory to construct training samples.

    +
    + +
    +
    +examples: list[Example]
    +
    + +
    +
    +classmethod from_agent(agent: ReActAgent, **kwargs) Self[source]
    +
    + +
    +
    +good_examples: list[Example]
    +
    + +
    +
    +good_reward_threshold: float | None
    +
    + +
    +
    +llm: LLMModel
    +
    + +
    +
    +llm_call_op: LLMCallOp
    +
    + +
    +
    +max_examples: int | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'examples': FieldInfo(annotation=list[Example], required=False, default_factory=list), 'good_examples': FieldInfo(annotation=list[Example], required=False, default_factory=list), 'good_reward_threshold': FieldInfo(annotation=Union[float, NoneType], required=False, default=None, description='If using reward as the score_fn, then a good example is defined by reward>=good_reward_threshold.'), 'llm': FieldInfo(annotation=LLMModel, required=False, default_factory=LLMModel, description='LLM used to update the prompt inside the PromptOp. The paper mentions that larger models produce better prompt proposals.'), 'llm_call_op': FieldInfo(annotation=LLMCallOp, required=True, description='LLMCallOp to be optimized.'), 'max_examples': FieldInfo(annotation=Union[int, NoneType], required=False, default=50, description='Max number of examples to include in the below query_prompt, or None for no limit. The paper mentions that more examples produce better prompt proposals.'), 'prompt_op': FieldInfo(annotation=PromptOp, required=True, description='PromptOp to be optimized.'), 'query_prompt': FieldInfo(annotation=str, required=False, default='Here are correct example outputs that the language model and prompt should produce:\n{good_examples}\n\nThe current prompt is: "{prompt}"\n\nWhich resulted in the following incorrect input, output, and {score}:\n{examples}\n\nRevise the current prompt to improve the outputs. Your proposed prompt should be concise, correct, and specify the desired output format.'), 'reward_discount': FieldInfo(annotation=float, required=False, default=1.0), 'score_fn': FieldInfo(annotation=APEScoreFn, required=False, default=<APEScoreFn.REWARD: 'reward'>), 'steps': FieldInfo(annotation=int, required=False, default=0), 'system_prompt': FieldInfo(annotation=str, required=False, default='We are optimizing prompts for a language model. The model sees a prompt, an input, and then generates an output.'), 'trace': FieldInfo(annotation=list[str], required=False, default_factory=list, description='History of prompts used.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(_APEOpt__context: Any) None[source]
    +

    Override this method to perform additional initialization after __init__ and model_construct. +This is useful if you want to do some validation that requires the entire model to be initialized.

    +
    + +
    +
    +prompt_op: PromptOp
    +
    + +
    +
    +query_prompt: str
    +
    + +
    +
    +reward_discount: float
    +
    + +
    +
    +score_fn: APEScoreFn
    +
    + +
    +
    +steps: int
    +
    + +
    +
    +system_prompt: str
    +
    + +
    +
    +trace: list[str]
    +
    + +
    +
    +async update() None[source]
    +

    Update the model based on the aggregated samples.

    +
    + +
    +
    +validate_score_fn()[source]
    +
    + +
    + +
    +
    +class ldp.alg.optimizer.APEScoreFn(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
    +

    Bases: StrEnum

    +
    +
    +GRADIENT = 'gradient'
    +
    + +
    +
    +REWARD = 'reward'
    +
    + +
    + +
    +
    +class ldp.alg.optimizer.ChainedOptimizer(*optimizers: Optimizer)[source]
    +

    Bases: Optimizer

    +

    An optimizer that runs a sequence of sub-optimizers in the order they are provided.

    +
    +
    +aggregate(trajectories: Iterable[Trajectory], show_pbar: bool = False) None[source]
    +

    Aggregate trajectories to construct training samples.

    +
    + +
    +
    +async update() None[source]
    +

    Update the model based on the aggregated samples.

    +
    + +
    + +
    +
    +class ldp.alg.optimizer.MemoryFactory(*args, **kwargs)[source]
    +

    Bases: Protocol

    +
    + +
    +
    +class ldp.alg.optimizer.MemoryOpt(*, memory_op: ~ldp.graph.common_ops.MemoryOp, output_op: ~ldp.graph.ops.Op, reward_discount: float = 1.0, memory_factory: ~ldp.alg.optimizer.memory.MemoryFactory = <function _default_memory_factory>, memory_template: str = 'Input: {input}\nOutput: {output}\nReward: {value}', steps: int = 0, example_buffer: list[tuple[~ldp.graph.op_utils.CallID, ~ldp.graph.op_utils.CallID, float, JsonValue]] = None)[source]
    +

    Bases: BaseModel, Optimizer

    +

    Trainer for memory agents. By default it is a minimizer.

    +

    This optimizer simply adds memories to the MemoryOp using a memory factory.

    +
    +
    +aggregate_trajectory(trajectory: Trajectory) None[source]
    +

    Aggregate transitions from a single trajectory to construct training samples.

    +
    + +
    +
    +async default_memory_factory(output_op: Op[TOutput], memory_template: str, example_buffer: Iterable[tuple[CallID, CallID, float, JsonValue]]) list[Memory]
    +
    + +
    +
    +example_buffer: list[tuple[CallID, CallID, float, JsonValue]]
    +
    + +
    +
    +classmethod from_agent(agent: MemoryAgent, **kwargs) Self[source]
    +
    + +
    +
    +memory_factory: MemoryFactory
    +
    + +
    +
    +memory_op: MemoryOp
    +
    + +
    +
    +memory_template: str
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'example_buffer': FieldInfo(annotation=list[tuple[CallID, CallID, float, JsonValue]], required=False, default_factory=list), 'memory_factory': FieldInfo(annotation=MemoryFactory, required=False, default=<function _default_memory_factory>, description="Async function to make Memories from an example buffer. It's async so this can involve an LLM completion if desired.", exclude=True), 'memory_op': FieldInfo(annotation=MemoryOp, required=True), 'memory_template': FieldInfo(annotation=str, required=False, default='Input: {input}\nOutput: {output}\nReward: {value}', description="Template for a Memory's string representation."), 'output_op': FieldInfo(annotation=Op, required=True), 'reward_discount': FieldInfo(annotation=float, required=False, default=1.0), 'steps': FieldInfo(annotation=int, required=False, default=0)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +output_op: Op
    +
    + +
    +
    +reward_discount: float
    +
    + +
    +
    +steps: int
    +
    + +
    +
    +async update() None[source]
    +

    Create new memories from the example buffer and add them to MemoryOp.

    +
    + +
    + +
    +
    +class ldp.alg.optimizer.Optimizer[source]
    +

    Bases: ABC

    +

    Base class for all optimizers.

    +
    +
    +aggregate(trajectories: Iterable[Trajectory], show_pbar: bool = False) None[source]
    +

    Aggregate trajectories to construct training samples.

    +
    + +
    +
    +abstract aggregate_trajectory(trajectory: Trajectory) None[source]
    +

    Aggregate transitions from a single trajectory to construct training samples.

    +
    + +
    +
    +abstract async update() None[source]
    +

    Update the model based on the aggregated samples.

    +
    + +
    + +
    +
    +class ldp.alg.optimizer.OptimizerConfig(*, optimizer_type: str | None = None, optimizer_kwargs: dict[str, Any] = None)[source]
    +

    Bases: BaseModel

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'optimizer_kwargs': FieldInfo(annotation=dict[str, Any], required=False, default_factory=dict), 'optimizer_type': FieldInfo(annotation=Union[str, NoneType], required=False, default=None)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +optimizer_kwargs: dict[str, Any]
    +
    + +
    +
    +optimizer_type: str | None
    +
    + +
    + +
    +
    +class ldp.alg.optimizer.PositiveMemoryOpt(*, memory_op: ~ldp.graph.common_ops.MemoryOp, output_op: ~ldp.graph.ops.Op, reward_discount: float = 1.0, memory_factory: ~ldp.alg.optimizer.memory.MemoryFactory = <function _default_memory_factory>, memory_template: str = 'Input: {input}\nOutput: {output}\nReward: {value}', steps: int = 0, example_buffer: list[tuple[~ldp.graph.op_utils.CallID, ~ldp.graph.op_utils.CallID, float, JsonValue]] = None)[source]
    +

    Bases: MemoryOpt

    +
    +
    +example_buffer: list[tuple[CallID, CallID, float, JsonValue]]
    +
    + +
    +
    +memory_factory: MemoryFactory
    +
    + +
    +
    +memory_op: MemoryOp
    +
    + +
    +
    +memory_template: str
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'example_buffer': FieldInfo(annotation=list[tuple[CallID, CallID, float, JsonValue]], required=False, default_factory=list), 'memory_factory': FieldInfo(annotation=MemoryFactory, required=False, default=<function _default_memory_factory>, description="Async function to make Memories from an example buffer. It's async so this can involve an LLM completion if desired.", exclude=True), 'memory_op': FieldInfo(annotation=MemoryOp, required=True), 'memory_template': FieldInfo(annotation=str, required=False, default='Input: {input}\nOutput: {output}\nReward: {value}', description="Template for a Memory's string representation."), 'output_op': FieldInfo(annotation=Op, required=True), 'reward_discount': FieldInfo(annotation=float, required=False, default=1.0), 'steps': FieldInfo(annotation=int, required=False, default=0)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +output_op: Op
    +
    + +
    +
    +reward_discount: float
    +
    + +
    +
    +steps: int
    +
    + +
    + +
    +
    +ldp.alg.optimizer.default_optimizer_factory(agent: Agent, optimizer_cls: str | type[Optimizer] | None = None, **optimizer_kwargs) Optimizer[source]
    +

    A method that constructs a default optimizer for commonly-used agents.

    +
    +
    Parameters:
    +
      +
    • agent – Agent to construct the optimizer for.

    • +
    • optimizer_cls – The optimizer class to use. If not specified, we will try a +default based on the provided agent.

    • +
    • optimizer_kwargs – Arguments forwarded to optimizer_cls.

    • +
    +
    +
    Returns:
    +

    Instantiated optimizer.

    +
    +
    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/ldp.graph.html b/docs/_build/html/ldp.graph.html new file mode 100644 index 00000000..6f382f9d --- /dev/null +++ b/docs/_build/html/ldp.graph.html @@ -0,0 +1,2324 @@ + + + + + + + + ldp.graph package — ldp documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp.graph package

    +
    +

    Subpackages

    + +
    +
    +

    Submodules

    +
    +
    +

    ldp.graph.async_torch module

    +
    +
    +class ldp.graph.async_torch.AsyncTorchModule(module: ~torch.nn.modules.module.Module, batch_size: int, max_wait_interval: float, collate_fn: ~collections.abc.Callable = <function default_collate>, decollate_fn: ~collections.abc.Callable = <class 'list'>, module_call_fn: ~collections.abc.Callable = <function AsyncTorchModule.<lambda>>)[source]
    +

    Bases: AsyncBufferedWorker

    +
    + +
    +
    +ldp.graph.async_torch.async_protect_torch_call(module: ~torch.nn.modules.module.Module, module_call_fn: ~collections.abc.Callable = <function <lambda>>, no_grad: bool = False, autocast_dtype: ~torch.dtype | None = None, autocast_device_type=None) Callable[source]
    +
    + +
    +
    +

    ldp.graph.common_ops module

    +

    This module contains commonly-used Op implementations.

    +
    +
    +class ldp.graph.common_ops.Cacheable(co: Awaitable[TResult])[source]
    +

    Bases: Generic[TResult]

    +
    +
    +async get_result() TResult | None[source]
    +
    + +
    + +
    +
    +class ldp.graph.common_ops.ConfigOp(*args, **kwargs)[source]
    +

    Bases: Op[TConfig], Generic[TConfig]

    +

    An operation that contains a configuration object.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward() TConfig[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.common_ops.EmbeddingOp(*args, **kwargs)[source]
    +

    Bases: Op

    +

    A general operation for embedding text using LiteLLM.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args, input_kwargs, grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(string_input: str) ndarray[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.common_ops.FxnOp(*args, **kwargs)[source]
    +

    Bases: Op[TOutput]

    +

    Wrap a function for a straight through gradient approximation for all args/kwargs.

    +

    Basically, consider the fxn as a transform upon the inputs during the forward pass, +and propagating the same gradient for all inputs during the backward pass.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(*args, **kwargs) TOutput[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.common_ops.IdentityOp(*args, **kwargs)[source]
    +

    Bases: Op[TOutput]

    +

    An operation that simply returns the input value.

    +

    NOTE: this op is equivalent to FxnOp(lambda x: x).

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(value: TOutput) TOutput[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.common_ops.LLMCallOp(*args, **kwargs)[source]
    +

    Bases: Op[Message]

    +

    An operation for LLM calls interaction.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async compute_logprob(raw_log_p: float | None, temperature: float, model: LLMModel, **model_kwargs) float | None[source]
    +

    This method computes a Monte Carlo estimate of logprob for a given temperature.

    +

    It takes as input the logprob at T=1. The derivation is in Section 5.1 of the Aviary notes.

    +
    + +
    +
    +async forward(config: dict, msgs: list[Message], tools: list[Tool] = None, tool_choice: Tool | str | None = LLMModel.TOOL_CHOICE_REQUIRED) ToolRequestMessage[source]
    +
    +async forward(config: dict, msgs: list[Message], tools: None = None, tool_choice: str | None = LLMModel.TOOL_CHOICE_REQUIRED) Message
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    +
    +get_examples() list[tuple[LLMResult, float]][source]
    +
    + +
    + +
    +
    +class ldp.graph.common_ops.MemoryOp(*args, **kwargs)[source]
    +

    Bases: Op[list[Memory]]

    +

    An operation for managing memory retrieval and storage.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass for memory retrieval - goes back to item.

    +
    + +
    +
    +async forward(query: str, input: str | None = None, matches: int = 3) list[Memory][source]
    +

    Retrieve relevant memories based on a query.

    +
    + +
    + +
    +
    +class ldp.graph.common_ops.PromptOp(*args, **kwargs)[source]
    +

    Bases: FxnOp[str]

    +

    An operation that formats kwargs into a prompt string.

    +
    + +
    +
    +class ldp.graph.common_ops.StopGradOp(*args, **kwargs)[source]
    +

    Bases: IdentityOp[TOutput]

    +

    Pass through Op that terminates gradients in the backward pass.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    + +
    +
    +ldp.graph.common_ops.async_cache(func)[source]
    +
    + +
    +
    +ldp.graph.common_ops.logsumexp(a: ndarray | list[float]) float[source]
    +
    + +
    +
    +

    ldp.graph.gradient_estimators module

    +

    This module defines various gradient estimators that can be patched in during backward passes.

    +
    +
    +class ldp.graph.gradient_estimators.TorchParamBackwardEstimator(module: Module)[source]
    +

    Bases: object

    +

    Gradient estimator for TorchOp internal parameters.

    +

    This estimator computes gradients with respect to the internal parameters of a +torch.nn.Module by calling the backward method of the estimator instead of the default +backward method of TorchOp. Computed gradients are stored in the context of the operation +under the key “grad_params”.

    +

    Examples

    +
    >>> torch_module = torch.nn.Sequential(
    +...     torch.nn.Linear(4, 4),
    +...     torch.nn.Linear(4, 1),
    +... )
    +>>> torch_op = TorchOp(torch_module)
    +>>> estimator = TorchParamBackwardEstimator(torch_module)
    +>>> result = await torch_op(torch.randn(4, requires_grad=True))
    +>>> result.compute_grads(backward_fns={"TorchOp": estimator.backward})
    +
    +
    +
    +

    Note

    +

    This estimator is only compatible with TorchOp operations.

    +
    +
    +
    +backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +
    + +
    + +
    +
    +ldp.graph.gradient_estimators.assign_constant_grads(input_args: list[OpResult[TOutput] | TOutput], input_kwargs: dict[str, OpResult[TOutput] | TOutput], value: Any, descend: bool = True)[source]
    +
    + +
    +
    +ldp.graph.gradient_estimators.assign_default_grads(input_grads: GradInType, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], default_grad_val: float = 0.0) GradInType[source]
    +

    Sets a default value of default_grad_val for every element in input_grads.

    +

    Example: +- input_kwargs = {“a”: {“b”: 1, “c”: 2}}, +- input_grad_kwargs = {“a”: {“b”: 0.1}} +Output: input_grads[1] = {“a”: {“b”: 0.1, “c”: default_grad_val}}

    +
    +
    Returns:
    +

    +
    A tuple containing the updated input_grad_args and

    input_grad_kwargs with default values assigned where necessary.

    +
    +
    +

    +
    +
    Return type:
    +

    GradInType

    +
    +
    +
    + +
    +
    +ldp.graph.gradient_estimators.llm_straight_through_estimator(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Straight-through for an LLM: descend into the config, but not msgs/tools/tool_calls.

    +

    See LLMCallOp.backward() for more details on this choice. +Don’t bother checking that input_args/input_kwargs have the right structure, +since compute_grads() will raise if not.

    +
    + +
    +
    +ldp.graph.gradient_estimators.stop_grad(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +
    + +
    +
    +ldp.graph.gradient_estimators.straight_through_estimator(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID, descend: bool = True) GradInType[source]
    +
    + +
    +
    +ldp.graph.gradient_estimators.zero_estimator(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Sets the gradient of all inputs to zero.

    +

    Note that this is not the same as truncating the compute graph (stop_grad), +since upstream nodes can still optimize their logprobs. The zero estimator +the unbiased choice if we have no information about the gradient.

    +
    + +
    +
    +

    ldp.graph.loss_ops module

    +

    This module contains loss Op implementations.

    +
    +
    +class ldp.graph.loss_ops.MSELossOp(*args, **kwargs)[source]
    +

    Bases: Op

    +
    +
    +classmethod backward(ctx: OpCtx, input_args, input_kwargs, grad_output: Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V, call_id: CallID) tuple[Sequence[Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V | None], Mapping[str, Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V | None]][source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(prediction: npt.NDArray | torch.Tensor, target: npt.NDArray | torch.Tensor) float | torch.Tensor[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +

    ldp.graph.memory module

    +
    +
    +class ldp.graph.memory.Memory(*, query: str, input: str | None = None, output: str, value: float | str, metadata: JsonValue = None, run_id: UUID | None = None, template: str = 'Input: {input}\nOutput: {output}\nValue: {value}')[source]
    +

    Bases: BaseModel

    +

    A single memory about an input, output, and value tuple.

    +

    A memory is a record of an input, output, and resulting value. Typically used +for prompting a language model. Or, it could be about a whole forward pass where +the input is the observation and the output is the action taken. +The query is optionally different and used for +retrieving the memory. For example, it could be much larger because it won’t +be formatted in the resulting prompt.

    +
    +
    +classmethod ensure_query(data: Any) Any[source]
    +

    Copy input to match the query if input is None.

    +
    + +
    +
    +classmethod from_ops(mem_op: MemoryOp, mem_call_id: CallID, output_op: Op[TOutput], output_call_id: CallID, value: float, **kwargs) Self[source]
    +

    Create from a MemoryOp, output Op, and their call IDs.

    +
    + +
    +
    +input: str | None
    +
    + +
    +
    +metadata: JsonValue
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'input': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='Some input (e.g. prompt to LLM, observation). If None (default), the input is set to match the query.'), 'metadata': FieldInfo(annotation=JsonValue, required=False, default_factory=dict, description='Optional JSON metadata to store with the memory. An example is storing information an optimizer can use at training time.'), 'output': FieldInfo(annotation=str, required=True, description='Some output (e.g. tool selection).'), 'query': FieldInfo(annotation=str, required=True, description='String to be embedded into a retrieval key for a memory index.'), 'run_id': FieldInfo(annotation=Union[UUID, NoneType], required=False, default=None, description='Associate run_id for debugging purposes to trace which forward pass generated the memory.'), 'template': FieldInfo(annotation=str, required=False, default='Input: {input}\nOutput: {output}\nValue: {value}'), 'value': FieldInfo(annotation=Union[float, str], required=True, description="Measure of the output's quality (e.g. loss).")}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +output: str
    +
    + +
    +
    +query: str
    +
    + +
    +
    +run_id: UUID | None
    +
    + +
    +
    +template: str
    +
    + +
    +
    +value: float | str
    +
    + +
    + +
    +
    +class ldp.graph.memory.MemoryModel(*, embedding_model: EmbeddingModel = None, memories: dict[int, Memory] = None)[source]
    +

    Bases: BaseModel, Generic[TIndex], ABC

    +

    A collection of memories with retrieval.

    +
    +
    +DEFAULT_MEMORY_MATCHES: ClassVar[int] = 3
    +
    + +
    +
    +async add_memory(memory: Memory) None[source]
    +
    + +
    +
    +embedding_model: EmbeddingModel
    +
    + +
    +
    +classmethod enforce_empty(v: dict) dict[source]
    +
    + +
    +
    +async get_memory(query: str, matches: int = 3) list[Memory][source]
    +
    + +
    +
    +memories: dict[int, Memory]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'embedding_model': FieldInfo(annotation=EmbeddingModel, required=False, default_factory=<lambda>), 'memories': FieldInfo(annotation=dict[int, Memory], required=False, default_factory=dict)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(context: Any, /) None
    +

    This function is meant to behave like a BaseModel method to initialise private attributes.

    +

    It takes context as an argument since that’s what pydantic-core passes when calling it.

    +
    +
    Parameters:
    +
      +
    • self – The BaseModel instance.

    • +
    • context – The context.

    • +
    +
    +
    +
    + +
    +
    +safe_access_index() AsyncIterator[TIndex][source]
    +

    Get the internal Index under the protection of an internal Lock.

    +
    + +
    + +
    +
    +class ldp.graph.memory.MemoryModel(*, embedding_model: EmbeddingModel = None, memories: dict[int, Memory] = None)[source]
    +

    Bases: BaseModel, Generic[TIndex], ABC

    +

    A collection of memories with retrieval.

    +
    +
    +DEFAULT_MEMORY_MATCHES: ClassVar[int] = 3
    +
    + +
    +
    +async add_memory(memory: Memory) None[source]
    +
    + +
    +
    +embedding_model: EmbeddingModel
    +
    + +
    +
    +classmethod enforce_empty(v: dict) dict[source]
    +
    + +
    +
    +async get_memory(query: str, matches: int = 3) list[Memory][source]
    +
    + +
    +
    +memories: dict[int, Memory]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'embedding_model': FieldInfo(annotation=EmbeddingModel, required=False, default_factory=<lambda>), 'memories': FieldInfo(annotation=dict[int, Memory], required=False, default_factory=dict)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(context: Any, /) None
    +

    This function is meant to behave like a BaseModel method to initialise private attributes.

    +

    It takes context as an argument since that’s what pydantic-core passes when calling it.

    +
    +
    Parameters:
    +
      +
    • self – The BaseModel instance.

    • +
    • context – The context.

    • +
    +
    +
    +
    + +
    +
    +safe_access_index() AsyncIterator[TIndex][source]
    +

    Get the internal Index under the protection of an internal Lock.

    +
    + +
    + +
    +
    +class ldp.graph.memory.UIndexMemoryModel(*, embedding_model: EmbeddingModel = None, memories: dict[int, Memory] = None)[source]
    +

    Bases: MemoryModel[Index]

    +

    Memory model using a U-Search index.

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'embedding_model': FieldInfo(annotation=EmbeddingModel, required=False, default_factory=<lambda>), 'memories': FieldInfo(annotation=dict[int, Memory], required=False, default_factory=dict)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(context: Any, /) None
    +

    We need to both initialize private attributes and call the user-defined model_post_init +method.

    +
    + +
    + +
    +
    +

    ldp.graph.op_utils module

    +
    +
    +class ldp.graph.op_utils.CallID(run_id: str | UUID, fwd_id: str | UUID)[source]
    +

    Bases: BaseModel

    +
    +
    +fwd_id: UUID
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'fwd_id': FieldInfo(annotation=UUID, required=True), 'run_id': FieldInfo(annotation=UUID, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +run_id: UUID
    +
    + +
    +
    +serialize_uuid(value: UUID) str[source]
    +
    + +
    +
    +classmethod validate_uuid(value: UUID | str) UUID[source]
    +
    + +
    + +
    +
    +ldp.graph.op_utils.compute_graph() AsyncIterator[UUID][source]
    +

    Initialize a compute graph by setting a run ID.

    +

    If a run ID is already set (i.e. we are already inside a +get_run_id() context), then the existing run ID is returned. +Otherwise, a new UUID is created.

    +
    + +
    +
    +ldp.graph.op_utils.get_call_id() CallID[source]
    +

    Get the current call ID.

    +
    + +
    +
    +ldp.graph.op_utils.get_run_id() UUID[source]
    +

    Get the current run ID.

    +
    + +
    +
    +ldp.graph.op_utils.get_training_mode() bool[source]
    +

    Get the current training mode.

    +
    + +
    +
    +ldp.graph.op_utils.op_call() AsyncIterator[CallID][source]
    +

    Decorate an op call with a call ID.

    +

    If a call ID is already set (i.e. we are already inside an op call), +then the existing call ID is returned. +Otherwise, a new UUID is created.

    +
    + +
    +
    +ldp.graph.op_utils.set_training_mode(training_mode: bool) None[source]
    +

    Set the training mode.

    +
    + +
    +
    +

    ldp.graph.ops module

    +

    This module defines the Op class and its helper classes.

    +
    +
    +class ldp.graph.ops.Op(*args, **kwargs)[source]
    +

    Bases: ABC, Generic[TOutput]

    +

    An operation that is ‘differentiable’ and can be used in an optimizer.

    +

    Think torch.autograd.Function that can also be applied to non-differentiable +operations like prompt template formatting or Python function calls.

    +

    These form a forward computation graph when composed with other Ops via +__call__. In training mode, this graph is constructed dynamically.

    +
    +
    +abstract classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs, grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +clear_ctx() None[source]
    +
    + +
    +
    +ctx: OpCtx
    +
    + +
    +
    +abstract async forward(*args, **kwargs) TOutput[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    +
    +get_call_ids(run_ids: Collection[UUID] | None = None) set[CallID][source]
    +
    + +
    +
    +get_input_grads(call_id: CallID) GradInType[source]
    +
    + +
    +
    +name: str
    +
    + +
    +
    +set_name(name: str) None[source]
    +
    + +
    + +
    +
    +class ldp.graph.ops.OpCtx(*, op_name: str, data: dict = None)[source]
    +

    Bases: BaseModel

    +
    +
    +classmethod clear_contexts(op_names: Iterable[str] | None = None) None[source]
    +

    Clear the data in all contexts. If op_names is provided, only clear those contexts.

    +
    + +
    +
    +data: dict
    +
    + +
    +
    +get(call_id: ~ldp.graph.op_utils.CallID, key: str, default: ~typing.Any = <object object>) Any[source]
    +

    Get an attribute with an optional default, emulating dict.get.

    +
    + +
    +
    +get_input_grads(call_id: CallID) GradInType[source]
    +
    + +
    +
    +classmethod get_or_create(op_name: str) OpCtx[source]
    +

    Return an OpCtx corresponding to the Op with the given name.

    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'data': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, description='Maps run_id -> (fwd_id, key) -> value. data is excluded from model_dump() etc because we do not use Pydantic to persist context information. That should be done via the DB backend instead. OpCtx will serialize op_name, which is enough to rehydrate from the DB.', exclude=True), 'op_name': FieldInfo(annotation=str, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(context: Any, /) None
    +

    This function is meant to behave like a BaseModel method to initialise private attributes.

    +

    It takes context as an argument since that’s what pydantic-core passes when calling it.

    +
    +
    Parameters:
    +
      +
    • self – The BaseModel instance.

    • +
    • context – The context.

    • +
    +
    +
    +
    + +
    +
    +op_name: str
    +
    + +
    +
    +update(call_id: CallID, key: str, value: Any)[source]
    +
    + +
    + +
    +
    +class ldp.graph.ops.OpResult(call_id: CallID | Any, op_name: str, op_class_name: str, value: TOutput)[source]
    +

    Bases: Generic[TOutput]

    +

    Result of a forward pass, used in the compute graph.

    +
    +
    +compute_grads(grad_output: tree.Structure | None = None, backward_fns: Mapping[str | type, BackwardsType] | None = None) None[source]
    +

    Compute the gradient of the backward graph in-place.

    +

    This executes topological traversal. +It is up to the Op to:

    +
    +
      +
    1. define the backward computation

    2. +
    3. store internal gradients for optimizer updates.

    4. +
    +
    +
    + +
    +
    +property ctx: OpCtx
    +
    + +
    +
    +classmethod from_dict(t_output: type[TOutput], dump: dict[str, Any]) OpResult[TOutput][source]
    +
    + +
    +
    +get_compute_graph(backward: bool = True) DiGraph[source]
    +

    Construct a directed graph of the compute graph that led to this OpResult.

    +
    +
    Parameters:
    +

    backward – If True (default), constructs the backwards graph in which outputs +point to inputs. If False, constructs the forward call graph. +For most cases (e.g. backprop), backward=True is desirable.

    +
    +
    Returns:
    +

    A digraph in which nodes are OpResults.

    +
    +
    +
    + +
    +
    +property grad: tree.Structure | None
    +

    Returns d ln(P_{compute_graph}) / d self or None if gradients have not been computed.

    +
    + +
    +
    +property inputs: tuple[list[OpResult[TOutput] | TOutput], dict[str, OpResult[TOutput] | TOutput]]
    +
    + +
    +
    +property logprob: float | None
    +
    + +
    +
    +property op_class: type[Op]
    +
    + +
    +
    +property run_id: UUID
    +
    + +
    +
    +to_dict() dict[str, Any][source]
    +
    + +
    +
    +traverse(topological_order: bool = True, filter_fn: ~collections.abc.Callable[[~ldp.graph.ops.OpResult], bool] = <function OpResult.<lambda>>) Iterator[OpResult][source]
    +

    Traverse the compute graph that led to this OpResult.

    +
    +
    Parameters:
    +
      +
    • topological_order – If True, traverse the backwards graph in topological +order. This requires having the whole graph in memory. If False, +traverse the backwards graph in depth-first order. This can be done +lazily and is useful if we are trying to hydrate the graph node-by-node. +Most user-facing cases can leave this as True. Defaults to True.

    • +
    • filter_fn – Will only yield nodes that pass this filter function. Note that +nodes that fail will still be traversed.

    • +
    +
    +
    Yields:
    +

    An iterator over the nodes of this graph.

    +
    +
    +
    + +
    +
    +static unwrap_value(result: OpResult[TOutput] | TOutput) TOutput[source]
    +
    + +
    + +
    +
    +ldp.graph.ops.resolve_fully_qualified_name(cls: type) str[source]
    +
    + +
    +
    +

    ldp.graph.torch_ops module

    +
    +
    +class ldp.graph.torch_ops.TorchOp(*args, **kwargs)[source]
    +

    Bases: Op[Tensor]

    +

    An operation that wraps a PyTorch module.

    +
    +
    +CTX_TENSOR_INPUT_KEY: ClassVar[str] = 'tensor_input'
    +
    + +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[OpResult[TOutput] | TOutput], input_kwargs: dict[str, OpResult[TOutput] | TOutput], grad_output: float | Tensor, call_id: CallID) tuple[Sequence[Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V | None], Mapping[str, Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V | None]][source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(*args, **kwargs: Any) Tensor[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +ldp.graph.torch_ops.store_tensor_inputs(ctx: OpCtx, key: str, tensor_args: Sequence[Tensor], tensor_kwargs: Mapping[str, Tensor], fwd_args: Sequence[Parameter], detach: bool = False) None[source]
    +
    + +
    +
    +

    Module contents

    +
    +
    +class ldp.graph.CallID(run_id: str | UUID, fwd_id: str | UUID)[source]
    +

    Bases: BaseModel

    +
    +
    +fwd_id: UUID
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'fwd_id': FieldInfo(annotation=UUID, required=True), 'run_id': FieldInfo(annotation=UUID, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +run_id: UUID
    +
    + +
    +
    +serialize_uuid(value: UUID) str[source]
    +
    + +
    +
    +classmethod validate_uuid(value: UUID | str) UUID[source]
    +
    + +
    + +
    +
    +class ldp.graph.ConfigOp(*args, **kwargs)[source]
    +

    Bases: Op[TConfig], Generic[TConfig]

    +

    An operation that contains a configuration object.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward() TConfig[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.EmbeddingOp(*args, **kwargs)[source]
    +

    Bases: Op

    +

    A general operation for embedding text using LiteLLM.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args, input_kwargs, grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(string_input: str) ndarray[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.FxnOp(*args, **kwargs)[source]
    +

    Bases: Op[TOutput]

    +

    Wrap a function for a straight through gradient approximation for all args/kwargs.

    +

    Basically, consider the fxn as a transform upon the inputs during the forward pass, +and propagating the same gradient for all inputs during the backward pass.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(*args, **kwargs) TOutput[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.IdentityOp(*args, **kwargs)[source]
    +

    Bases: Op[TOutput]

    +

    An operation that simply returns the input value.

    +

    NOTE: this op is equivalent to FxnOp(lambda x: x).

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(value: TOutput) TOutput[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.LLMCallOp(*args, **kwargs)[source]
    +

    Bases: Op[Message]

    +

    An operation for LLM calls interaction.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async compute_logprob(raw_log_p: float | None, temperature: float, model: LLMModel, **model_kwargs) float | None[source]
    +

    This method computes a Monte Carlo estimate of logprob for a given temperature.

    +

    It takes as input the logprob at T=1. The derivation is in Section 5.1 of the Aviary notes.

    +
    + +
    +
    +async forward(config: dict, msgs: list[Message], tools: list[Tool] = None, tool_choice: Tool | str | None = LLMModel.TOOL_CHOICE_REQUIRED) ToolRequestMessage[source]
    +
    +async forward(config: dict, msgs: list[Message], tools: None = None, tool_choice: str | None = LLMModel.TOOL_CHOICE_REQUIRED) Message
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    +
    +get_examples() list[tuple[LLMResult, float]][source]
    +
    + +
    + +
    +
    +class ldp.graph.MSELossOp(*args, **kwargs)[source]
    +

    Bases: Op

    +
    +
    +classmethod backward(ctx: OpCtx, input_args, input_kwargs, grad_output: Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V, call_id: CallID) tuple[Sequence[Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V | None], Mapping[str, Sequence[StructureKV[K, V]] | Mapping[str, StructureKV[K, V]] | V | None]][source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +async forward(prediction: npt.NDArray | torch.Tensor, target: npt.NDArray | torch.Tensor) float | torch.Tensor[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    + +
    +
    +class ldp.graph.Memory(*, query: str, input: str | None = None, output: str, value: float | str, metadata: JsonValue = None, run_id: UUID | None = None, template: str = 'Input: {input}\nOutput: {output}\nValue: {value}')[source]
    +

    Bases: BaseModel

    +

    A single memory about an input, output, and value tuple.

    +

    A memory is a record of an input, output, and resulting value. Typically used +for prompting a language model. Or, it could be about a whole forward pass where +the input is the observation and the output is the action taken. +The query is optionally different and used for +retrieving the memory. For example, it could be much larger because it won’t +be formatted in the resulting prompt.

    +
    +
    +classmethod ensure_query(data: Any) Any[source]
    +

    Copy input to match the query if input is None.

    +
    + +
    +
    +classmethod from_ops(mem_op: MemoryOp, mem_call_id: CallID, output_op: Op[TOutput], output_call_id: CallID, value: float, **kwargs) Self[source]
    +

    Create from a MemoryOp, output Op, and their call IDs.

    +
    + +
    +
    +input: str | None
    +
    + +
    +
    +metadata: JsonValue
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'input': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='Some input (e.g. prompt to LLM, observation). If None (default), the input is set to match the query.'), 'metadata': FieldInfo(annotation=JsonValue, required=False, default_factory=dict, description='Optional JSON metadata to store with the memory. An example is storing information an optimizer can use at training time.'), 'output': FieldInfo(annotation=str, required=True, description='Some output (e.g. tool selection).'), 'query': FieldInfo(annotation=str, required=True, description='String to be embedded into a retrieval key for a memory index.'), 'run_id': FieldInfo(annotation=Union[UUID, NoneType], required=False, default=None, description='Associate run_id for debugging purposes to trace which forward pass generated the memory.'), 'template': FieldInfo(annotation=str, required=False, default='Input: {input}\nOutput: {output}\nValue: {value}'), 'value': FieldInfo(annotation=Union[float, str], required=True, description="Measure of the output's quality (e.g. loss).")}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +output: str
    +
    + +
    +
    +query: str
    +
    + +
    +
    +run_id: UUID | None
    +
    + +
    +
    +template: str
    +
    + +
    +
    +value: float | str
    +
    + +
    + +
    +
    +class ldp.graph.MemoryModel(*, embedding_model: EmbeddingModel = None, memories: dict[int, Memory] = None)[source]
    +

    Bases: BaseModel, Generic[TIndex], ABC

    +

    A collection of memories with retrieval.

    +
    +
    +DEFAULT_MEMORY_MATCHES: ClassVar[int] = 3
    +
    + +
    +
    +async add_memory(memory: Memory) None[source]
    +
    + +
    +
    +embedding_model: EmbeddingModel
    +
    + +
    +
    +classmethod enforce_empty(v: dict) dict[source]
    +
    + +
    +
    +async get_memory(query: str, matches: int = 3) list[Memory][source]
    +
    + +
    +
    +memories: dict[int, Memory]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'embedding_model': FieldInfo(annotation=EmbeddingModel, required=False, default_factory=<lambda>), 'memories': FieldInfo(annotation=dict[int, Memory], required=False, default_factory=dict)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(context: Any, /) None
    +

    This function is meant to behave like a BaseModel method to initialise private attributes.

    +

    It takes context as an argument since that’s what pydantic-core passes when calling it.

    +
    +
    Parameters:
    +
      +
    • self – The BaseModel instance.

    • +
    • context – The context.

    • +
    +
    +
    +
    + +
    +
    +safe_access_index() AsyncIterator[TIndex][source]
    +

    Get the internal Index under the protection of an internal Lock.

    +
    + +
    + +
    +
    +class ldp.graph.MemoryOp(*args, **kwargs)[source]
    +

    Bases: Op[list[Memory]]

    +

    An operation for managing memory retrieval and storage.

    +
    +
    +classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs: dict[str, ResultOrValue], grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass for memory retrieval - goes back to item.

    +
    + +
    +
    +async forward(query: str, input: str | None = None, matches: int = 3) list[Memory][source]
    +

    Retrieve relevant memories based on a query.

    +
    + +
    + +
    +
    +class ldp.graph.Op(*args, **kwargs)[source]
    +

    Bases: ABC, Generic[TOutput]

    +

    An operation that is ‘differentiable’ and can be used in an optimizer.

    +

    Think torch.autograd.Function that can also be applied to non-differentiable +operations like prompt template formatting or Python function calls.

    +

    These form a forward computation graph when composed with other Ops via +__call__. In training mode, this graph is constructed dynamically.

    +
    +
    +abstract classmethod backward(ctx: OpCtx, input_args: list[ResultOrValue], input_kwargs, grad_output: tree.Structure, call_id: CallID) GradInType[source]
    +

    Backward pass of the Op.

    +
    +
    Parameters:
    +
      +
    • ctx – Context that was used during the forward pass.

    • +
    • input_args – Variable-length input arguments passed to forward, i.e. +via *args.

    • +
    • input_kwargs – All other arguments passed to forward pass.

    • +
    • grad_output – A list of backpropagated gradients from each consumer +of the output of the forward pass. It is up to the implementation +to decide how to aggregate these gradients (e.g. in most cases summing).

    • +
    • call_id – Call ID of the forward pass.

    • +
    +
    +
    Returns:
    +

    +
    d log(p) / d input for each input to the forward pass.

    It should include gradients for all input positional and keyword +arguments. Set to None for gradients that should terminate.

    +
    +
    +

    +
    +
    Return type:
    +

    grad_input

    +
    +
    +
    + +
    +
    +clear_ctx() None[source]
    +
    + +
    +
    +ctx: OpCtx
    +
    + +
    +
    +abstract async forward(*args, **kwargs) TOutput[source]
    +

    Forward pass of the Op. Must accept call_id as an argument.

    +
    +
    Returns:
    +

    +
    Depending on this Op’s purpose, the return may be considered an action

    (e.g. a tool call) or it may not (e.g. a loss calculation).

    +
    +
    +

    +
    +
    +
    + +
    +
    +get_call_ids(run_ids: Collection[UUID] | None = None) set[CallID][source]
    +
    + +
    +
    +get_input_grads(call_id: CallID) GradInType[source]
    +
    + +
    +
    +name: str
    +
    + +
    +
    +set_name(name: str) None[source]
    +
    + +
    + +
    +
    +class ldp.graph.OpCtx(*, op_name: str, data: dict = None)[source]
    +

    Bases: BaseModel

    +
    +
    +classmethod clear_contexts(op_names: Iterable[str] | None = None) None[source]
    +

    Clear the data in all contexts. If op_names is provided, only clear those contexts.

    +
    + +
    +
    +data: dict
    +
    + +
    +
    +get(call_id: ~ldp.graph.op_utils.CallID, key: str, default: ~typing.Any = <object object>) Any[source]
    +

    Get an attribute with an optional default, emulating dict.get.

    +
    + +
    +
    +get_input_grads(call_id: CallID) GradInType[source]
    +
    + +
    +
    +classmethod get_or_create(op_name: str) OpCtx[source]
    +

    Return an OpCtx corresponding to the Op with the given name.

    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'data': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, description='Maps run_id -> (fwd_id, key) -> value. data is excluded from model_dump() etc because we do not use Pydantic to persist context information. That should be done via the DB backend instead. OpCtx will serialize op_name, which is enough to rehydrate from the DB.', exclude=True), 'op_name': FieldInfo(annotation=str, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +model_post_init(context: Any, /) None
    +

    This function is meant to behave like a BaseModel method to initialise private attributes.

    +

    It takes context as an argument since that’s what pydantic-core passes when calling it.

    +
    +
    Parameters:
    +
      +
    • self – The BaseModel instance.

    • +
    • context – The context.

    • +
    +
    +
    +
    + +
    +
    +op_name: str
    +
    + +
    +
    +update(call_id: CallID, key: str, value: Any)[source]
    +
    + +
    + +
    +
    +class ldp.graph.OpResult(call_id: CallID | Any, op_name: str, op_class_name: str, value: TOutput)[source]
    +

    Bases: Generic[TOutput]

    +

    Result of a forward pass, used in the compute graph.

    +
    +
    +compute_grads(grad_output: tree.Structure | None = None, backward_fns: Mapping[str | type, BackwardsType] | None = None) None[source]
    +

    Compute the gradient of the backward graph in-place.

    +

    This executes topological traversal. +It is up to the Op to:

    +
    +
      +
    1. define the backward computation

    2. +
    3. store internal gradients for optimizer updates.

    4. +
    +
    +
    + +
    +
    +property ctx: OpCtx
    +
    + +
    +
    +classmethod from_dict(t_output: type[TOutput], dump: dict[str, Any]) OpResult[TOutput][source]
    +
    + +
    +
    +get_compute_graph(backward: bool = True) DiGraph[source]
    +

    Construct a directed graph of the compute graph that led to this OpResult.

    +
    +
    Parameters:
    +

    backward – If True (default), constructs the backwards graph in which outputs +point to inputs. If False, constructs the forward call graph. +For most cases (e.g. backprop), backward=True is desirable.

    +
    +
    Returns:
    +

    A digraph in which nodes are OpResults.

    +
    +
    +
    + +
    +
    +property grad: tree.Structure | None
    +

    Returns d ln(P_{compute_graph}) / d self or None if gradients have not been computed.

    +
    + +
    +
    +property inputs: tuple[list[OpResult[TOutput] | TOutput], dict[str, OpResult[TOutput] | TOutput]]
    +
    + +
    +
    +property logprob: float | None
    +
    + +
    +
    +property op_class: type[Op]
    +
    + +
    +
    +property run_id: UUID
    +
    + +
    +
    +to_dict() dict[str, Any][source]
    +
    + +
    +
    +traverse(topological_order: bool = True, filter_fn: ~collections.abc.Callable[[~ldp.graph.ops.OpResult], bool] = <function OpResult.<lambda>>) Iterator[OpResult][source]
    +

    Traverse the compute graph that led to this OpResult.

    +
    +
    Parameters:
    +
      +
    • topological_order – If True, traverse the backwards graph in topological +order. This requires having the whole graph in memory. If False, +traverse the backwards graph in depth-first order. This can be done +lazily and is useful if we are trying to hydrate the graph node-by-node. +Most user-facing cases can leave this as True. Defaults to True.

    • +
    • filter_fn – Will only yield nodes that pass this filter function. Note that +nodes that fail will still be traversed.

    • +
    +
    +
    Yields:
    +

    An iterator over the nodes of this graph.

    +
    +
    +
    + +
    +
    +static unwrap_value(result: OpResult[TOutput] | TOutput) TOutput[source]
    +
    + +
    + +
    +
    +class ldp.graph.PromptOp(*args, **kwargs)[source]
    +

    Bases: FxnOp[str]

    +

    An operation that formats kwargs into a prompt string.

    +
    + +
    +
    +ldp.graph.compute_graph() AsyncIterator[UUID][source]
    +

    Initialize a compute graph by setting a run ID.

    +

    If a run ID is already set (i.e. we are already inside a +get_run_id() context), then the existing run ID is returned. +Otherwise, a new UUID is created.

    +
    + +
    +
    +ldp.graph.get_call_id() CallID[source]
    +

    Get the current call ID.

    +
    + +
    +
    +ldp.graph.get_run_id() UUID[source]
    +

    Get the current run ID.

    +
    + +
    +
    +ldp.graph.get_training_mode() bool[source]
    +

    Get the current training mode.

    +
    + +
    +
    +ldp.graph.op_call() AsyncIterator[CallID][source]
    +

    Decorate an op call with a call ID.

    +

    If a call ID is already set (i.e. we are already inside an op call), +then the existing call ID is returned. +Otherwise, a new UUID is created.

    +
    + +
    +
    +ldp.graph.set_training_mode(training_mode: bool) None[source]
    +

    Set the training mode.

    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/ldp.graph.modules.html b/docs/_build/html/ldp.graph.modules.html new file mode 100644 index 00000000..da4bbe4d --- /dev/null +++ b/docs/_build/html/ldp.graph.modules.html @@ -0,0 +1,430 @@ + + + + + + + + ldp.graph.modules package — ldp documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp.graph.modules package

    +
    +

    Submodules

    +
    +
    +

    ldp.graph.modules.llm_call module

    +
    +
    +class ldp.graph.modules.llm_call.ParsedLLMCallModule(llm_model: dict[str, Any], parser: Callable[[...], TParsedMessage])[source]
    +

    Bases: Generic[TParsedMessage]

    +

    Module for a processing-based tool selection, with a learnable configuration.

    +
    + +
    +
    +

    ldp.graph.modules.react module

    +
    +
    +class ldp.graph.modules.react.ReActModule(llm_model: dict[str, Any], sys_prompt: str = 'Answer the following questions as best you can. You have access to the following tools:\n\n{tools}\n\nUse the following format:\n\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: comma separated list of inputs to action as python tuple\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\n\nExample:\n\nThought: I need to use the get_weather tool\nAction: get_weather\nAction Input: "New York", 7\nObservation: The 7 day forecast for New York is [...]', tool_description_method: ToolDescriptionMethods = ToolDescriptionMethods.STR)[source]
    +

    Bases: object

    +

    An Act or ReAct module built to work with chat models.

    +

    Paper: https://arxiv.org/abs/2210.03629

    +

    The ReAct style is like so, and note Act style has no ‘Thought: ‘ entries: +System:

    +
    +

    Answer the following questions as best you can. You have access to the following tools:

    +
    +

    {tools}

    +

    Use the following format:

    +

    Thought: you should always think about what to do +Action: the action to take, should be one of [{tool_names}] +Action Input: the input to the action +Observation: the result of the action +… (this Thought/Action/Action Input/Observation can repeat N times)

    +
    +
    +
    +
    User:

    {questions}

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    User:

    Observation:

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    +

    +
    +
    +static parse_message(m: Message, tools: list[Tool]) ToolRequestMessage[source]
    +
    + +
    + +
    +
    +class ldp.graph.modules.react.ToolDescriptionMethods(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
    +

    Bases: StrEnum

    +

    Possible methods of describing the tools.

    +
    +
    +JSON = 'describe_json'
    +
    + +
    +
    +STR = 'describe_str'
    +
    + +
    +
    +XML = 'describe_xml'
    +
    + +
    +
    +get_prompt_prefix() str[source]
    +

    Get the prefix to put in front of the prompt.

    +
    + +
    + +
    +
    +ldp.graph.modules.react.parse_message(m: Message, tools: list[Tool]) ToolRequestMessage[source]
    +

    Parse an Act or ReAct Message into a ToolRequestMessage.

    +
    +
    Parameters:
    +
      +
    • m – Input raw message.

    • +
    • tools – Tools used to confirm a valid tool selection

    • +
    +
    +
    Returns:
    +

    Parsed ToolRequestMessage.

    +
    +
    +
    + +
    +
    +

    ldp.graph.modules.reflect module

    +
    +
    +class ldp.graph.modules.reflect.ReflectModule(start_config: ReflectModuleConfig)[source]
    +

    Bases: object

    +

    A module that simply gives an LLM to reflect on an input.

    +
    + +
    +
    +class ldp.graph.modules.reflect.ReflectModuleConfig(*, llm_model: dict[str, Any] = {'model': 'gpt-3.5-turbo'})[source]
    +

    Bases: BaseModel

    +

    Configuration for the ReflectModuleConfig.

    +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-3.5-turbo'}, description='Starting configuration for the LLM model.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    + +
    +
    +

    ldp.graph.modules.thought module

    +
    +
    +class ldp.graph.modules.thought.ThoughtModule(llm_model: dict[str, Any], first_sys_prompt: str, second_sys_prompt: str)[source]
    +

    Bases: object

    +
    + +
    +
    +

    Module contents

    +

    A module is a subgraph of a compute graph that can be exposed like a single node/op.

    +

    An analogous entity in PyTorch is torch.nn.Module.

    +
    +
    +class ldp.graph.modules.ParsedLLMCallModule(llm_model: dict[str, Any], parser: Callable[[...], TParsedMessage])[source]
    +

    Bases: Generic[TParsedMessage]

    +

    Module for a processing-based tool selection, with a learnable configuration.

    +
    + +
    +
    +class ldp.graph.modules.ReActModule(llm_model: dict[str, Any], sys_prompt: str = 'Answer the following questions as best you can. You have access to the following tools:\n\n{tools}\n\nUse the following format:\n\nThought: you should always think about what to do\nAction: the action to take, should be one of [{tool_names}]\nAction Input: comma separated list of inputs to action as python tuple\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\n\nExample:\n\nThought: I need to use the get_weather tool\nAction: get_weather\nAction Input: "New York", 7\nObservation: The 7 day forecast for New York is [...]', tool_description_method: ToolDescriptionMethods = ToolDescriptionMethods.STR)[source]
    +

    Bases: object

    +

    An Act or ReAct module built to work with chat models.

    +

    Paper: https://arxiv.org/abs/2210.03629

    +

    The ReAct style is like so, and note Act style has no ‘Thought: ‘ entries: +System:

    +
    +

    Answer the following questions as best you can. You have access to the following tools:

    +
    +

    {tools}

    +

    Use the following format:

    +

    Thought: you should always think about what to do +Action: the action to take, should be one of [{tool_names}] +Action Input: the input to the action +Observation: the result of the action +… (this Thought/Action/Action Input/Observation can repeat N times)

    +
    +
    +
    +
    User:

    {questions}

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    User:

    Observation:

    +
    +
    Assistant:

    Thought: +Action: +Action Input:

    +
    +
    +

    +
    +
    +static parse_message(m: Message, tools: list[Tool]) ToolRequestMessage[source]
    +
    + +
    + +
    +
    +class ldp.graph.modules.ReflectModule(start_config: ReflectModuleConfig)[source]
    +

    Bases: object

    +

    A module that simply gives an LLM to reflect on an input.

    +
    + +
    +
    +class ldp.graph.modules.ReflectModuleConfig(*, llm_model: dict[str, Any] = {'model': 'gpt-3.5-turbo'})[source]
    +

    Bases: BaseModel

    +

    Configuration for the ReflectModuleConfig.

    +
    +
    +llm_model: dict[str, Any]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'llm_model': FieldInfo(annotation=dict[str, Any], required=False, default={'model': 'gpt-3.5-turbo'}, description='Starting configuration for the LLM model.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    + +
    +
    +class ldp.graph.modules.ThoughtModule(llm_model: dict[str, Any], first_sys_prompt: str, second_sys_prompt: str)[source]
    +

    Bases: object

    +
    + +
    +
    +class ldp.graph.modules.ToolDescriptionMethods(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
    +

    Bases: StrEnum

    +

    Possible methods of describing the tools.

    +
    +
    +JSON = 'describe_json'
    +
    + +
    +
    +STR = 'describe_str'
    +
    + +
    +
    +XML = 'describe_xml'
    +
    + +
    +
    +get_prompt_prefix() str[source]
    +

    Get the prefix to put in front of the prompt.

    +
    + +
    + +
    +
    +ldp.graph.modules.parse_message(m: Message, tools: list[Tool]) ToolRequestMessage[source]
    +

    Parse an Act or ReAct Message into a ToolRequestMessage.

    +
    +
    Parameters:
    +
      +
    • m – Input raw message.

    • +
    • tools – Tools used to confirm a valid tool selection

    • +
    +
    +
    Returns:
    +

    Parsed ToolRequestMessage.

    +
    +
    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/ldp.html b/docs/_build/html/ldp.html new file mode 100644 index 00000000..eba5d93c --- /dev/null +++ b/docs/_build/html/ldp.html @@ -0,0 +1,2054 @@ + + + + + + + + ldp package — ldp documentation + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp package

    +
    +

    Subpackages

    +
    + +
    +
    +
    +

    Submodules

    +
    +
    +

    ldp.data_structures module

    +
    +
    +class ldp.data_structures.Trajectory(*, traj_id: str | None = None, steps: list[Transition] = None)[source]
    +

    Bases: BaseModel

    +
    +
    +compute_discounted_returns(discount: float = 1.0) list[float][source]
    +

    Compute the discounted returns for each step in the trajectory.

    +
    + +
    +
    +property done: bool
    +
    + +
    +
    +property failed: bool
    +
    + +
    +
    +classmethod from_jsonl(filename: str | PathLike) Self[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'steps': FieldInfo(annotation=list[Transition], required=False, default_factory=list), 'traj_id': FieldInfo(annotation=Union[str, NoneType], required=False, default=None)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +steps: list[Transition]
    +
    + +
    +
    +to_jsonl(filename: str | PathLike) None[source]
    +
    + +
    +
    +traj_id: str | None
    +
    + +
    + +
    +
    +class ldp.data_structures.Transition(*, timestep: int, agent_state: Any, next_agent_state: Any, observation: list[ToolResponseMessage | Message], next_observation: list[ToolResponseMessage | Message], action: OpResult[ToolRequestMessage] | None = None, reward: float = 0.0, truncated: bool = False, done: bool = False, value: float = 0.0, metadata: dict[str, JsonValue] = None)[source]
    +

    Bases: BaseModel

    +
    +
    +NO_OBSERVATION: ClassVar[list[Message]] = []
    +
    + +
    +
    +action: OpResult[ToolRequestMessage] | None
    +
    + +
    +
    +agent_state: Any
    +
    + +
    +
    +classmethod construct_action(action: OpResult[ToolRequestMessage] | dict | None) OpResult[ToolRequestMessage] | None[source]
    +
    + +
    +
    +done: bool
    +
    + +
    +
    +property failed: bool
    +

    Get if an exception was encountered during rollout, for convenience.

    +

    If True, this transition should not be trained on. +Failed transitions are for debugging purposes.

    +
    + +
    +
    +metadata: dict[str, JsonValue]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_dump_json(*, indent: int | None = None, **kwargs) str[source]
    +

    Usage docs: https://docs.pydantic.dev/2.8/concepts/serialization/#modelmodel_dump_json

    +

    Generates a JSON representation of the model using Pydantic’s to_json method.

    +
    +
    Parameters:
    +
      +
    • indent – Indentation to use in the JSON output. If None is passed, the output will be compact.

    • +
    • include – Field(s) to include in the JSON output.

    • +
    • exclude – Field(s) to exclude from the JSON output.

    • +
    • context – Additional context to pass to the serializer.

    • +
    • by_alias – Whether to serialize using field aliases.

    • +
    • exclude_unset – Whether to exclude fields that have not been explicitly set.

    • +
    • exclude_defaults – Whether to exclude fields that are set to their default value.

    • +
    • exclude_none – Whether to exclude fields that have a value of None.

    • +
    • round_trip – If True, dumped values should be valid as input for non-idempotent types such as Json[T].

    • +
    • warnings – How to handle serialization errors. False/”none” ignores them, True/”warn” logs errors, +“error” raises a [PydanticSerializationError][pydantic_core.PydanticSerializationError].

    • +
    • serialize_as_any – Whether to serialize fields with duck-typing serialization behavior.

    • +
    +
    +
    Returns:
    +

    A JSON string representation of the model.

    +
    +
    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'action': FieldInfo(annotation=Union[OpResult[ToolRequestMessage], NoneType], required=False, default=None, description='Agent.get_asv output. This is a_t in RL terms.'), 'agent_state': FieldInfo(annotation=Any, required=True, description="Agent.get_asv's input. This is `s_t` in RL terms. Note that `s_0` comes from `Agent.init_state()`"), 'done': FieldInfo(annotation=bool, required=False, default=False, description="timestep t's Environment.step output."), 'metadata': FieldInfo(annotation=dict[str, JsonValue], required=False, default_factory=dict), 'next_agent_state': FieldInfo(annotation=Any, required=True, description="Agent.get_asv's output. This is s_t+1 in RL terms."), 'next_observation': FieldInfo(annotation=list[Union[ToolResponseMessage, Message]], required=True, description='Environment.step output. This is o_t+1 in RL terms.'), 'observation': FieldInfo(annotation=list[Union[ToolResponseMessage, Message]], required=True, description="Agent.get_asv's input. This is o_t in RL terms."), 'reward': FieldInfo(annotation=float, required=False, default=0.0, description='Environment.step output. This is r_t in RL terms.'), 'timestep': FieldInfo(annotation=int, required=True, description='Zero-indexed MDP timestep t.'), 'truncated': FieldInfo(annotation=bool, required=False, default=False, description="timestep t's Environment.step output."), 'value': FieldInfo(annotation=float, required=False, default=0.0, description="Value estimate output from timestep t's Agent.get_asv. This is v(s_t) [state value function] or q(s_t, a_t) [state-action value].")}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +next_agent_state: Any
    +
    + +
    +
    +next_observation: list[ToolResponseMessage | Message]
    +
    + +
    +
    +observation: list[ToolResponseMessage | Message]
    +
    + +
    +
    +reward: float
    +
    + +
    +
    +timestep: int
    +
    + +
    +
    +truncated: bool
    +
    + +
    +
    +value: float
    +
    + +
    + +
    +
    +class ldp.data_structures.TransitionTree(root_id: str | UUID)[source]
    +

    Bases: object

    +
    +
    +add_transition(step_id: str, step: Transition, weight: float = 1.0) None[source]
    +

    Add a transition to the tree.

    +
    +
    Parameters:
    +
      +
    • step_id – A unique identifier for the root node of the tree. +The expected form of the step ID is “{parent step ID}:{step index}”.

    • +
    • step – The transition to add.

    • +
    • weight – Weight of the transition. Defaults to 1.0.

    • +
    +
    +
    +
    + +
    +
    +assign_mc_value_estimates(discount_factor: float = 1.0) None[source]
    +

    Assign Monte Carlo state-action value estimates to each transition (in-place).

    +
    +
    Parameters:
    +

    discount_factor – The discount factor to use when computing cumulative +future rewards.

    +
    +
    +
    + +
    +
    +get_trajectories() list[Trajectory][source]
    +

    Return a list of trajectories.

    +

    Since each path from the root node to a terminal node defines +a unique trajectory, N(terminal node) trajectories will be returned. +The trajectory ID will be set to the ID of the terminal step.

    +

    Note that we include failed and truncated trajectories; it is up to the +caller to decide what to do them.

    +
    +
    Returns:
    +

    All trajectories in this tree.

    +
    +
    +
    + +
    +
    +get_transition(step_id: str) Transition[source]
    +
    + +
    +
    +get_weight(step_id: str) float[source]
    +
    + +
    +
    +merge_identical_nodes(agent_state_hash_fn: ~collections.abc.Callable[[~typing.Any], ~collections.abc.Hashable], observation_hash_fn: ~collections.abc.Callable[[list[~aviary.tools.base.ToolResponseMessage | ~aviary.message.Message]], ~collections.abc.Hashable] = <function join>, next_observation_hash_fn: ~collections.abc.Callable[[list[~aviary.tools.base.ToolResponseMessage | ~aviary.message.Message]], ~collections.abc.Hashable] = <function join>) TransitionTree[source]
    +

    Merge nodes with identical (state, observation, action)s. Returns a new tree.

    +
    +
    Parameters:
    +
      +
    • agent_state_hash_fn – A function that returns a hashable representation +of the agent state of a transition.

    • +
    • observation_hash_fn – A function that returns a hashable representation +of the observation messages of a transition.

    • +
    • next_observation_hash_fn – A function that returns a hashable representation +of the next observation messages of a transition.

    • +
    +
    +
    +
    + +
    + +
    +
    +

    ldp.main module

    +
    +
    +ldp.main.get_or_make_agent(agent: Agent | str | PathLike) Agent[source]
    +
    + +
    +
    +ldp.main.get_or_make_environment(environment: Environment | str, task: str) Environment[source]
    +
    + +
    +
    +async ldp.main.main(task: str, environment: Environment | str, agent: Agent | str | PathLike = 'SimpleAgent')[source]
    +
    + +
    +
    +

    ldp.shims module

    +
    +
    +class ldp.shims.tqdm(*_, **__)[source]
    +

    Bases: Comparable

    +

    Decorate an iterable object, returning an iterator which acts exactly +like the original iterable, but prints a dynamically updating +progressbar every time a value is requested.

    +
    +
    Parameters:
    +
      +
    • iterable (iterable, optional) – Iterable to decorate with a progressbar. +Leave blank to manually manage the updates.

    • +
    • desc (str, optional) – Prefix for the progressbar.

    • +
    • total (int or float, optional) – The number of expected iterations. If unspecified, +len(iterable) is used if possible. If float(“inf”) or as a last +resort, only basic progress statistics are displayed +(no ETA, no progressbar). +If gui is True and this parameter needs subsequent updating, +specify an initial arbitrary large positive number, +e.g. 9e9.

    • +
    • leave (bool, optional) – If [default: True], keeps all traces of the progressbar +upon termination of iteration. +If None, will leave only if position is 0.

    • +
    • file (io.TextIOWrapper or io.StringIO, optional) – Specifies where to output the progress messages +(default: sys.stderr). Uses file.write(str) and file.flush() +methods. For encoding, see write_bytes.

    • +
    • ncols (int, optional) – The width of the entire output message. If specified, +dynamically resizes the progressbar to stay within this bound. +If unspecified, attempts to use environment width. The +fallback is a meter width of 10 and no limit for the counter and +statistics. If 0, will not print any meter (only stats).

    • +
    • mininterval (float, optional) – Minimum progress display update interval [default: 0.1] seconds.

    • +
    • maxinterval (float, optional) – Maximum progress display update interval [default: 10] seconds. +Automatically adjusts miniters to correspond to mininterval +after long display update lag. Only works if dynamic_miniters +or monitor thread is enabled.

    • +
    • miniters (int or float, optional) – Minimum progress display update interval, in iterations. +If 0 and dynamic_miniters, will automatically adjust to equal +mininterval (more CPU efficient, good for tight loops). +If > 0, will skip display of specified number of iterations. +Tweak this and mininterval to get very efficient loops. +If your progress is erratic with both fast and slow iterations +(network, skipping items, etc) you should set miniters=1.

    • +
    • ascii (bool or str, optional) – If unspecified or False, use unicode (smooth blocks) to fill +the meter. The fallback is to use ASCII characters ” 123456789#”.

    • +
    • disable (bool, optional) – Whether to disable the entire progressbar wrapper +[default: False]. If set to None, disable on non-TTY.

    • +
    • unit (str, optional) – String that will be used to define the unit of each iteration +[default: it].

    • +
    • unit_scale (bool or int or float, optional) – If 1 or True, the number of iterations will be reduced/scaled +automatically and a metric prefix following the +International System of Units standard will be added +(kilo, mega, etc.) [default: False]. If any other non-zero +number, will scale total and n.

    • +
    • dynamic_ncols (bool, optional) – If set, constantly alters ncols and nrows to the +environment (allowing for window resizes) [default: False].

    • +
    • smoothing (float, optional) – Exponential moving average smoothing factor for speed estimates +(ignored in GUI mode). Ranges from 0 (average speed) to 1 +(current/instantaneous speed) [default: 0.3].

    • +
    • bar_format (str, optional) –

      Specify a custom bar string formatting. May impact performance. +[default: ‘{l_bar}{bar}{r_bar}’], where +l_bar=’{desc}: {percentage:3.0f}%|’ and +r_bar=’| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, ‘

      +
      +

      ’{rate_fmt}{postfix}]’

      +
      +
      +
      Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt,

      percentage, elapsed, elapsed_s, ncols, nrows, desc, unit, +rate, rate_fmt, rate_noinv, rate_noinv_fmt, +rate_inv, rate_inv_fmt, postfix, unit_divisor, +remaining, remaining_s, eta.

      +
      +
      +

      Note that a trailing “: ” is automatically removed after {desc} +if the latter is empty.

      +

    • +
    • initial (int or float, optional) – The initial counter value. Useful when restarting a progress +bar [default: 0]. If using float, consider specifying {n:.3f} +or similar in bar_format, or specifying unit_scale.

    • +
    • position (int, optional) – Specify the line offset to print this bar (starting from 0) +Automatic if unspecified. +Useful to manage multiple bars at once (eg, from threads).

    • +
    • postfix (dict or *, optional) – Specify additional stats to display at the end of the bar. +Calls set_postfix(**postfix) if possible (dict).

    • +
    • unit_divisor (float, optional) – [default: 1000], ignored unless unit_scale is True.

    • +
    • write_bytes (bool, optional) – Whether to write bytes. If (default: False) will write unicode.

    • +
    • lock_args (tuple, optional) – Passed to refresh for intermediate output +(initialisation, iterating, and updating).

    • +
    • nrows (int, optional) – The screen height. If specified, hides nested bars outside this +bound. If unspecified, attempts to use environment height. +The fallback is 20.

    • +
    • colour (str, optional) – Bar colour (e.g. ‘green’, ‘#00ff00’).

    • +
    • delay (float, optional) – Don’t display until [default: 0] seconds have elapsed.

    • +
    • gui (bool, optional) – WARNING: internal parameter - do not use. +Use tqdm.gui.tqdm(…) instead. If set, will attempt to use +matplotlib animations for a graphical output [default: False].

    • +
    +
    +
    Returns:
    +

    out

    +
    +
    Return type:
    +

    decorated iterator.

    +
    +
    +
    +
    +clear(nolock=False)[source]
    +

    Clear current bar display.

    +
    + +
    +
    +close()[source]
    +

    Cleanup and (if leave=False) close the progressbar.

    +
    + +
    +
    +display(msg=None, pos=None)[source]
    +

    Use self.sp to display msg in the specified pos.

    +

    Consider overloading this function when inheriting to use e.g.: +self.some_frontend(**self.format_dict) instead of self.sp.

    +
    +
    Parameters:
    +
      +
    • msg (str, optional. What to display (default: repr(self)).)

    • +
    • pos (int, optional. Position to moveto) – (default: abs(self.pos)).

    • +
    +
    +
    +
    + +
    +
    +classmethod external_write_mode(file=None, nolock=False)[source]
    +

    Disable tqdm within context and refresh tqdm when exits. +Useful when writing to standard output stream

    +
    + +
    +
    +property format_dict
    +

    Public API for read-only member access.

    +
    + +
    +
    +static format_interval(t)[source]
    +

    Formats a number of seconds as a clock time, [H:]MM:SS

    +
    +
    Parameters:
    +

    t (int) – Number of seconds.

    +
    +
    Returns:
    +

    out – [H:]MM:SS

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +static format_meter(n, total, elapsed, ncols=None, prefix='', ascii=False, unit='it', unit_scale=False, rate=None, bar_format=None, postfix=None, unit_divisor=1000, initial=0, colour=None, **extra_kwargs)[source]
    +

    Return a string-based progress bar given some parameters

    +
    +
    Parameters:
    +
      +
    • n (int or float) – Number of finished iterations.

    • +
    • total (int or float) – The expected total number of iterations. If meaningless (None), +only basic progress statistics are displayed (no ETA).

    • +
    • elapsed (float) – Number of seconds passed since start.

    • +
    • ncols (int, optional) – The width of the entire output message. If specified, +dynamically resizes {bar} to stay within this bound +[default: None]. If 0, will not print any bar (only stats). +The fallback is {bar:10}.

    • +
    • prefix (str, optional) – Prefix message (included in total width) [default: ‘’]. +Use as {desc} in bar_format string.

    • +
    • ascii (bool, optional or str, optional) – If not set, use unicode (smooth blocks) to fill the meter +[default: False]. The fallback is to use ASCII characters +” 123456789#”.

    • +
    • unit (str, optional) – The iteration unit [default: ‘it’].

    • +
    • unit_scale (bool or int or float, optional) – If 1 or True, the number of iterations will be printed with an +appropriate SI metric prefix (k = 10^3, M = 10^6, etc.) +[default: False]. If any other non-zero number, will scale +total and n.

    • +
    • rate (float, optional) – Manual override for iteration rate. +If [default: None], uses n/elapsed.

    • +
    • bar_format (str, optional) –

      Specify a custom bar string formatting. May impact performance. +[default: ‘{l_bar}{bar}{r_bar}’], where +l_bar=’{desc}: {percentage:3.0f}%|’ and +r_bar=’| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, ‘

      +
      +

      ’{rate_fmt}{postfix}]’

      +
      +
      +
      Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt,

      percentage, elapsed, elapsed_s, ncols, nrows, desc, unit, +rate, rate_fmt, rate_noinv, rate_noinv_fmt, +rate_inv, rate_inv_fmt, postfix, unit_divisor, +remaining, remaining_s, eta.

      +
      +
      +

      Note that a trailing “: ” is automatically removed after {desc} +if the latter is empty.

      +

    • +
    • postfix (*, optional) – Similar to prefix, but placed at the end +(e.g. for additional stats). +Note: postfix is usually a string (not a dict) for this method, +and will if possible be set to postfix = ‘, ‘ + postfix. +However other types are supported (#382).

    • +
    • unit_divisor (float, optional) – [default: 1000], ignored unless unit_scale is True.

    • +
    • initial (int or float, optional) – The initial counter value [default: 0].

    • +
    • colour (str, optional) – Bar colour (e.g. ‘green’, ‘#00ff00’).

    • +
    +
    +
    Returns:
    +

    out

    +
    +
    Return type:
    +

    Formatted meter and stats, ready to display.

    +
    +
    +
    + +
    +
    +static format_num(n)[source]
    +

    Intelligent scientific notation (.3g).

    +
    +
    Parameters:
    +

    n (int or float or Numeric) – A Number.

    +
    +
    Returns:
    +

    out – Formatted number.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +static format_sizeof(num, suffix='', divisor=1000)[source]
    +

    Formats a number (greater than unity) with SI Order of Magnitude +prefixes.

    +
    +
    Parameters:
    +
      +
    • num (float) – Number ( >= 1) to format.

    • +
    • suffix (str, optional) – Post-postfix [default: ‘’].

    • +
    • divisor (float, optional) – Divisor between prefixes [default: 1000].

    • +
    +
    +
    Returns:
    +

    out – Number with Order of Magnitude SI unit postfix.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +classmethod get_lock()[source]
    +

    Get the global lock. Construct it if it does not exist.

    +
    + +
    +
    +monitor = None
    +
    + +
    +
    +monitor_interval = 10
    +
    + +
    +
    +moveto(n)[source]
    +
    + +
    +
    +classmethod pandas(**tqdm_kwargs)[source]
    +
    +
    Registers the current tqdm class with

    pandas.core. +( frame.DataFrame +| series.Series +| groupby.(generic.)DataFrameGroupBy +| groupby.(generic.)SeriesGroupBy +).progress_apply

    +
    +
    +

    A new instance will be created every time progress_apply is called, +and each instance will automatically close() upon completion.

    +
    +
    Parameters:
    +

    tqdm_kwargs (arguments for the tqdm instance)

    +
    +
    +

    Examples

    +
    >>> import pandas as pd
    +>>> import numpy as np
    +>>> from tqdm import tqdm
    +>>> from tqdm.gui import tqdm as tqdm_gui
    +>>>
    +>>> df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))
    +>>> tqdm.pandas(ncols=50)  # can use tqdm_gui, optional kwargs, etc
    +>>> # Now you can use `progress_apply` instead of `apply`
    +>>> df.groupby(0).progress_apply(lambda x: x**2)
    +
    +
    +

    References

    +

    <https://stackoverflow.com/questions/18603270/ progress-indicator-during-pandas-operations-python>

    +
    + +
    +
    +refresh(nolock=False, lock_args=None)[source]
    +

    Force refresh the display of this bar.

    +
    +
    Parameters:
    +
      +
    • nolock (bool, optional) – If True, does not lock. +If [default: False]: calls acquire() on internal lock.

    • +
    • lock_args (tuple, optional) – Passed to internal lock’s acquire(). +If specified, will only display() if acquire() returns True.

    • +
    +
    +
    +
    + +
    +
    +reset(total=None)[source]
    +

    Resets to 0 iterations for repeated use.

    +

    Consider combining with leave=True.

    +
    +
    Parameters:
    +

    total (int or float, optional. Total to use for the new bar.)

    +
    +
    +
    + +
    +
    +set_description(desc=None, refresh=True)[source]
    +

    Set/modify description of the progress bar.

    +
    +
    Parameters:
    +
      +
    • desc (str, optional)

    • +
    • refresh (bool, optional) – Forces refresh [default: True].

    • +
    +
    +
    +
    + +
    +
    +set_description_str(desc=None, refresh=True)[source]
    +

    Set/modify description without ‘: ‘ appended.

    +
    + +
    +
    +classmethod set_lock(lock)[source]
    +

    Set the global lock.

    +
    + +
    +
    +set_postfix(ordered_dict=None, refresh=True, **kwargs)[source]
    +

    Set/modify postfix (additional stats) +with automatic formatting based on datatype.

    +
    +
    Parameters:
    +
      +
    • ordered_dict (dict or OrderedDict, optional)

    • +
    • refresh (bool, optional) – Forces refresh [default: True].

    • +
    • kwargs (dict, optional)

    • +
    +
    +
    +
    + +
    +
    +set_postfix_str(s='', refresh=True)[source]
    +

    Postfix without dictionary expansion, similar to prefix handling.

    +
    + +
    +
    +static status_printer(file)[source]
    +

    Manage the printing and in-place updating of a line of characters. +Note that if the string is longer than a line, then in-place +updating may not work (it will print a new line at each refresh).

    +
    + +
    +
    +unpause()[source]
    +

    Restart tqdm timer from last print time.

    +
    + +
    +
    +update(n=1)[source]
    +

    Manually update the progress bar, useful for streams +such as reading files. +E.g.: +>>> t = tqdm(total=filesize) # Initialise +>>> for current_buffer in stream: +… … +… t.update(len(current_buffer)) +>>> t.close() +The last line is highly recommended, but possibly not necessary if +t.update() will be called in such a way that filesize will be +exactly reached and printed.

    +
    +
    Parameters:
    +

    n (int or float, optional) – Increment to add to the internal counter of iterations +[default: 1]. If using float, consider specifying {n:.3f} +or similar in bar_format, or specifying unit_scale.

    +
    +
    Returns:
    +

    out – True if a display() was triggered.

    +
    +
    Return type:
    +

    bool or None

    +
    +
    +
    + +
    +
    +classmethod wrapattr(stream, method, total=None, bytes=True, **tqdm_kwargs)[source]
    +

    stream : file-like object. +method : str, “read” or “write”. The result of read() and

    +
    +

    the first argument of write() should have a len().

    +
    +
    >>> with tqdm.wrapattr(file_obj, "read", total=file_obj.size) as fobj:
    +...     while True:
    +...         chunk = fobj.read(chunk_size)
    +...         if not chunk:
    +...             break
    +
    +
    +
    + +
    +
    +classmethod write(s, file=None, end='\n', nolock=False)[source]
    +

    Print a message via tqdm (without overlap with bars).

    +
    + +
    + +
    +
    +ldp.shims.trange(*args, **kwargs)[source]
    +

    Shortcut for tqdm(range(*args), **kwargs).

    +
    + +
    +
    +

    ldp.utils module

    +
    +
    +ldp.utils.configure_log_levels() None[source]
    +

    Configure log levels.

    +
    + +
    +
    +ldp.utils.configure_stdout_logs(level: int | str = 20, fmt: str = '%(asctime)s - %(name)s - %(levelname)s - %(message)s') None[source]
    +

    Configure root logger to log to stdout.

    +
    +
    Parameters:
    +
      +
    • level – Log level to be emitted to stdout.

    • +
    • fmt – Optional format string.

    • +
    +
    +
    +
    + +
    +
    +ldp.utils.discounted_returns(rewards: list[float], terminated: list[bool], discount: float = 1.0) list[float][source]
    +

    Calculate the discounted returns for a list of rewards, considering termination flags and a discount factor.

    +

    The discounted return represents the future discounted rewards from each time step onwards, taking into account +whether an episode has terminated at each step.

    +

    The discounted return ( G_t ) is given by:

    +
    +\[ \begin{align}\begin{aligned}G_t = \sum_{k=1}^{\infty} \gamma^{k-1} R_{t+k}\\where: +- \( G_t \) is the discounted return starting from time step \( t \). +- \( \gamma \) is the discount factor. +- \( R_{t+k} \) is the reward received at time step \( t+k \).\end{aligned}\end{align} \]
    +

    NOTE: this could live in ldp.alg, but it’s here to avoid circular imports.

    +
    +
    Parameters:
    +
      +
    • rewards – A list of rewards at each time step.

    • +
    • terminated – A list of boolean flags indicating whether the episode terminated at each time step.

    • +
    • discount – Discount factor to apply to future rewards. Defaults to 1.0 which means no discounting is applied.

    • +
    +
    +
    Returns:
    +

    +
    A list of discounted returns (rewards to go), with each element representing the

    total discounted reward from that step onwards.

    +
    +
    +

    +
    +
    +

    Example

    +
    >>> rewards = [1.0, 2.0, 3.0]
    +>>> terminated = [False, False, True]
    +>>> discounted_returns(rewards, terminated, discount=0.9)
    +[5.23, 4.7, 3.0]
    +
    +
    +
    + +
    +
    +

    Module contents

    +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/ldp.llms.html b/docs/_build/html/ldp.llms.html new file mode 100644 index 00000000..1d5dd493 --- /dev/null +++ b/docs/_build/html/ldp.llms.html @@ -0,0 +1,1229 @@ + + + + + + + + ldp.llms package — ldp documentation + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp.llms package

    +
    +

    Submodules

    +
    +
    +

    ldp.llms.chat module

    +
    +
    +exception ldp.llms.chat.JSONSchemaValidationError[source]
    +

    Bases: ValueError

    +

    Raised when the completion does not match the specified schema.

    +
    + +
    +
    +class ldp.llms.chat.LLMModel(*, name: str = 'unknown', config: dict = {'model': 'gpt-3.5-turbo', 'temperature': 0.1}, encoding: Any | None = None)[source]
    +

    Bases: MultipleCompletionLLMModel

    +
    +
    +async call(*args, **kwargs) LLMResult[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'config': FieldInfo(annotation=dict, required=False, default={'model': 'gpt-3.5-turbo', 'temperature': 0.1}), 'encoding': FieldInfo(annotation=Union[Any, NoneType], required=False, default=None), 'name': FieldInfo(annotation=str, required=False, default='unknown')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    + +
    +
    +class ldp.llms.chat.LLMResult(*, id: UUID = None, config: dict | None = None, prompt: list[Message] | None = None, messages: list[Message] | None = None, prompt_count: int = 0, completion_count: int = 0, model: str, date: str = None, seconds_to_first_token: float | None = None, seconds_to_last_token: float = 0, logprob: float | None = None, system_fingerprint: str | None = None)[source]
    +

    Bases: BaseModel

    +

    A class to hold the result of a LLM completion.

    +
    +
    +completion_count: int
    +
    + +
    +
    +config: dict | None
    +
    + +
    +
    +date: str
    +
    + +
    +
    +get_supported_openai_params() list[str] | None[source]
    +

    Get the supported OpenAI parameters for the model.

    +
    + +
    +
    +id: UUID
    +
    + +
    +
    +logprob: float | None
    +
    + +
    +
    +messages: list[Message] | None
    +
    + +
    +
    +model: str
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'completion_count': FieldInfo(annotation=int, required=False, default=0, description='Count of completion tokens.'), 'config': FieldInfo(annotation=Union[dict, NoneType], required=False, default=None), 'date': FieldInfo(annotation=str, required=False, default_factory=builtin_function_or_method), 'id': FieldInfo(annotation=UUID, required=False, default_factory=uuid4), 'logprob': FieldInfo(annotation=Union[float, NoneType], required=False, default=None, description='Sum of logprobs in the completion.'), 'messages': FieldInfo(annotation=Union[list[Message], NoneType], required=False, default=None, description='Messages received from the LLM.'), 'model': FieldInfo(annotation=str, required=True), 'prompt': FieldInfo(annotation=Union[list[Message], NoneType], required=False, default=None, description='Messages sent to the LLM.'), 'prompt_count': FieldInfo(annotation=int, required=False, default=0, description='Count of prompt tokens.'), 'seconds_to_first_token': FieldInfo(annotation=Union[float, NoneType], required=False, default=None), 'seconds_to_last_token': FieldInfo(annotation=float, required=False, default=0), 'system_fingerprint': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='System fingerprint received from the LLM.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +prompt: list[Message] | None
    +
    + +
    +
    +property prompt_and_completion_costs: tuple[float, float]
    +

    Get a two-tuple of prompt tokens cost and completion tokens cost, in USD.

    +
    + +
    +
    +prompt_count: int
    +
    + +
    +
    +property provider: str
    +

    Get the model provider’s name (e.g. “openai”, “mistral”).

    +
    + +
    +
    +seconds_to_first_token: float | None
    +
    + +
    +
    +seconds_to_last_token: float
    +
    + +
    +
    +system_fingerprint: str | None
    +
    + +
    + +
    +
    +class ldp.llms.chat.MultipleCompletionLLMModel(*, name: str = 'unknown', config: dict = {'model': 'gpt-3.5-turbo', 'temperature': 0.1}, encoding: Any | None = None)[source]
    +

    Bases: BaseModel

    +

    Run n completions at once, all starting from the same messages.

    +
    +
    +TOOL_CHOICE_REQUIRED: ClassVar[str] = 'required'
    +
    + +
    +
    +async achat(messages: Iterable[Message], **kwargs) ModelResponse[source]
    +
    + +
    +
    +async achat_iter(messages: Iterable[Message], **kwargs) AsyncGenerator[source]
    +
    + +
    +
    +async call(messages: list[Message], callbacks: list[Callable] | None = None, output_type: type[BaseModel] | None = None, tools: list[Tool] | None = None, tool_choice: Tool | str | None = 'required', **chat_kwargs) list[LLMResult][source]
    +
    + +
    +
    +config: dict
    +
    + +
    +
    +encoding: Any | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'config': FieldInfo(annotation=dict, required=False, default={'model': 'gpt-3.5-turbo', 'temperature': 0.1}), 'encoding': FieldInfo(annotation=Union[Any, NoneType], required=False, default=None), 'name': FieldInfo(annotation=str, required=False, default='unknown')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    +
    +set_model_name() Self[source]
    +
    + +
    + +
    +
    +ldp.llms.chat.sum_logprobs(choice: Choices) float | None[source]
    +

    Calculate the sum of the log probabilities of an LLM completion (a Choices object).

    +
    +
    Parameters:
    +

    choice – A sequence of choices from the completion.

    +
    +
    Returns:
    +

    The sum of the log probabilities of the choice.

    +
    +
    +
    + +
    +
    +ldp.llms.chat.validate_json_completion(completion: ModelResponse, output_type: type[BaseModel]) None[source]
    +

    Validate a completion against a JSON schema.

    +
    +
    Parameters:
    +
      +
    • completion – The completion to validate.

    • +
    • output_type – The Pydantic model to validate the completion against.

    • +
    +
    +
    +
    + +
    +
    +

    ldp.llms.embeddings module

    +
    +
    +class ldp.llms.embeddings.EmbeddingModel(*, name: str, dimensions: int | None = None)[source]
    +

    Bases: ABC, BaseModel

    +
    +
    +dimensions: int | None
    +
    + +
    +
    +async embed_text(text: str) ndarray[source]
    +
    + +
    +
    +abstract async embed_texts(texts: list[str]) list[ndarray][source]
    +
    + +
    +
    +static from_name(embedding: str, **kwargs) EmbeddingModel[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'dimensions': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'name': FieldInfo(annotation=str, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    +
    +set_mode(mode: EmbeddingModes) None[source]
    +

    Several embedding models have a ‘mode’ or prompt which affects output.

    +
    + +
    + +
    +
    +class ldp.llms.embeddings.EmbeddingModes(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
    +

    Bases: StrEnum

    +

    Enum representing the different modes of an embedding model.

    +
    +
    +DOCUMENT = 'document'
    +
    + +
    +
    +QUERY = 'query'
    +
    + +
    + +
    +
    +class ldp.llms.embeddings.HybridEmbeddingModel(*, name: str = 'hybrid-embed', dimensions: int | None = None, models: list[EmbeddingModel])[source]
    +

    Bases: EmbeddingModel

    +
    +
    +async embed_texts(texts)[source]
    +
    + +
    +
    +classmethod infer_dimensions(data: dict[str, Any]) dict[str, Any][source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'dimensions': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'models': FieldInfo(annotation=list[EmbeddingModel], required=True), 'name': FieldInfo(annotation=str, required=False, default='hybrid-embed')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +models: list[EmbeddingModel]
    +
    + +
    +
    +name: str
    +
    + +
    + +
    +
    +class ldp.llms.embeddings.LiteEmbeddingModel(*, name: str = 'text-embedding-3-small', dimensions: int | None = None, batch_size: int = 16, embed_kwargs: dict[str, Any] = None)[source]
    +

    Bases: EmbeddingModel

    +
    +
    +batch_size: int
    +
    + +
    +
    +dimensions: int | None
    +
    + +
    +
    +embed_kwargs: dict[str, Any]
    +
    + +
    +
    +async embed_texts(texts: list[str]) list[ndarray][source]
    +
    + +
    +
    +classmethod infer_dimensions(data: dict[str, Any]) dict[str, Any][source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=False, default=16), 'dimensions': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description="The length an embedding will have. If left unspecified, we attempt to infer an un-truncated length via LiteLLM's internal model map. If this inference fails, the embedding will be un-truncated."), 'embed_kwargs': FieldInfo(annotation=dict[str, Any], required=False, default_factory=dict, description='Extra kwargs to pass to litellm.aembedding.'), 'name': FieldInfo(annotation=str, required=False, default='text-embedding-3-small')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    + +
    +
    +class ldp.llms.embeddings.SparseEmbeddingModel(*, name: str = 'sparse', dimensions: int = 256, enc: Encoding = None)[source]
    +

    Bases: EmbeddingModel

    +

    This is a very simple keyword search model - probably best to be mixed with others.

    +
    +
    +dimensions: int
    +
    + +
    +
    +async embed_texts(texts) list[ndarray][source]
    +
    + +
    +
    +enc: Encoding
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'dimensions': FieldInfo(annotation=int, required=False, default=256), 'enc': FieldInfo(annotation=Encoding, required=False, default_factory=<lambda>), 'name': FieldInfo(annotation=str, required=False, default='sparse')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    + +
    +
    +

    ldp.llms.prompts module

    +

    This module provides utility functions for appending and prepending system messages.

    +
    +
    +ldp.llms.prompts.append_to_messages(messages: list[Message], new_message: Message) list[Message][source]
    +

    Appends a message to a list of messages, returning that in-place modified list.

    +

    Examples

    +
    >>> messages = [Message(content="Hello")]
    +>>> modified_messages = append_to_messages(messages, Message(content="New"))
    +>>> modified_messages
    +[Message(role='user', content='Hello'), Message(role='user', content='New')]
    +>>> id(messages) == id(modified_messages)
    +True
    +
    +
    +
    + +
    +
    +ldp.llms.prompts.append_to_sys(user_content: str, sys_content: str | None = None) list[Message][source]
    +

    Appends a user message to a list of messages, optionally including a system message.

    +
    +
    Parameters:
    +
      +
    • user_content – The content of the user message.

    • +
    • sys_content – Optional content for the system message. Defaults to None.

    • +
    +
    +
    Returns:
    +

    A list of messages including the optional system message and the user message.

    +
    +
    +

    Examples

    +
    >>> append_to_sys("Hello, world!")
    +[Message(role='user', content='Hello, world!')]
    +
    +
    +
    >>> append_to_sys("Hello, world!", "System initialized.")
    +[Message(role='system', content='System initialized.'), Message(role='user', content='Hello, world!')]
    +
    +
    +
    + +
    +
    +ldp.llms.prompts.indent_xml(xml_string, indent_size=2)[source]
    +
    + +
    +
    +ldp.llms.prompts.prepend_sys(messages: Collection, sys_content: str) list[Message][source]
    +

    Prepends a system message to a list of messages.

    +
    +
    Parameters:
    +
      +
    • messages – The list of existing messages.

    • +
    • sys_content – The content of the system message to be prepended.

    • +
    +
    +
    Returns:
    +

    A new list of messages with the system message prepended.

    +
    +
    +

    Examples

    +
    >>> messages = [Message(role="user", content="Hello!")]
    +>>> prepend_sys(messages, "System initialized.")
    +[Message(role='system', content='System initialized.'), Message(role='user', content='Hello!')]
    +
    +
    +
    + +
    +
    +ldp.llms.prompts.prepend_sys_and_append_sys(messages: Iterable[Message], initial_sys_content: str, final_sys_content: str) list[Message][source]
    +
    + +
    +
    +

    Module contents

    +
    +
    +class ldp.llms.EmbeddingModel(*, name: str, dimensions: int | None = None)[source]
    +

    Bases: ABC, BaseModel

    +
    +
    +dimensions: int | None
    +
    + +
    +
    +async embed_text(text: str) ndarray[source]
    +
    + +
    +
    +abstract async embed_texts(texts: list[str]) list[ndarray][source]
    +
    + +
    +
    +static from_name(embedding: str, **kwargs) EmbeddingModel[source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'dimensions': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'name': FieldInfo(annotation=str, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    +
    +set_mode(mode: EmbeddingModes) None[source]
    +

    Several embedding models have a ‘mode’ or prompt which affects output.

    +
    + +
    + +
    +
    +class ldp.llms.EmbeddingModes(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
    +

    Bases: StrEnum

    +

    Enum representing the different modes of an embedding model.

    +
    +
    +DOCUMENT = 'document'
    +
    + +
    +
    +QUERY = 'query'
    +
    + +
    + +
    +
    +class ldp.llms.HybridEmbeddingModel(*, name: str = 'hybrid-embed', dimensions: int | None = None, models: list[EmbeddingModel])[source]
    +

    Bases: EmbeddingModel

    +
    +
    +dimensions: int | None
    +
    + +
    +
    +async embed_texts(texts)[source]
    +
    + +
    +
    +classmethod infer_dimensions(data: dict[str, Any]) dict[str, Any][source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'dimensions': FieldInfo(annotation=Union[int, NoneType], required=False, default=None), 'models': FieldInfo(annotation=list[EmbeddingModel], required=True), 'name': FieldInfo(annotation=str, required=False, default='hybrid-embed')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +models: list[EmbeddingModel]
    +
    + +
    +
    +name: str
    +
    + +
    + +
    +
    +exception ldp.llms.JSONSchemaValidationError[source]
    +

    Bases: ValueError

    +

    Raised when the completion does not match the specified schema.

    +
    + +
    +
    +class ldp.llms.LLMModel(*, name: str = 'unknown', config: dict = {'model': 'gpt-3.5-turbo', 'temperature': 0.1}, encoding: Any | None = None)[source]
    +

    Bases: MultipleCompletionLLMModel

    +
    +
    +async call(*args, **kwargs) LLMResult[source]
    +
    + +
    +
    +config: dict
    +
    + +
    +
    +encoding: Any | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'config': FieldInfo(annotation=dict, required=False, default={'model': 'gpt-3.5-turbo', 'temperature': 0.1}), 'encoding': FieldInfo(annotation=Union[Any, NoneType], required=False, default=None), 'name': FieldInfo(annotation=str, required=False, default='unknown')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    + +
    +
    +class ldp.llms.LLMResult(*, id: UUID = None, config: dict | None = None, prompt: list[Message] | None = None, messages: list[Message] | None = None, prompt_count: int = 0, completion_count: int = 0, model: str, date: str = None, seconds_to_first_token: float | None = None, seconds_to_last_token: float = 0, logprob: float | None = None, system_fingerprint: str | None = None)[source]
    +

    Bases: BaseModel

    +

    A class to hold the result of a LLM completion.

    +
    +
    +completion_count: int
    +
    + +
    +
    +config: dict | None
    +
    + +
    +
    +date: str
    +
    + +
    +
    +get_supported_openai_params() list[str] | None[source]
    +

    Get the supported OpenAI parameters for the model.

    +
    + +
    +
    +id: UUID
    +
    + +
    +
    +logprob: float | None
    +
    + +
    +
    +messages: list[Message] | None
    +
    + +
    +
    +model: str
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'completion_count': FieldInfo(annotation=int, required=False, default=0, description='Count of completion tokens.'), 'config': FieldInfo(annotation=Union[dict, NoneType], required=False, default=None), 'date': FieldInfo(annotation=str, required=False, default_factory=builtin_function_or_method), 'id': FieldInfo(annotation=UUID, required=False, default_factory=uuid4), 'logprob': FieldInfo(annotation=Union[float, NoneType], required=False, default=None, description='Sum of logprobs in the completion.'), 'messages': FieldInfo(annotation=Union[list[Message], NoneType], required=False, default=None, description='Messages received from the LLM.'), 'model': FieldInfo(annotation=str, required=True), 'prompt': FieldInfo(annotation=Union[list[Message], NoneType], required=False, default=None, description='Messages sent to the LLM.'), 'prompt_count': FieldInfo(annotation=int, required=False, default=0, description='Count of prompt tokens.'), 'seconds_to_first_token': FieldInfo(annotation=Union[float, NoneType], required=False, default=None), 'seconds_to_last_token': FieldInfo(annotation=float, required=False, default=0), 'system_fingerprint': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, description='System fingerprint received from the LLM.')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +prompt: list[Message] | None
    +
    + +
    +
    +property prompt_and_completion_costs: tuple[float, float]
    +

    Get a two-tuple of prompt tokens cost and completion tokens cost, in USD.

    +
    + +
    +
    +prompt_count: int
    +
    + +
    +
    +property provider: str
    +

    Get the model provider’s name (e.g. “openai”, “mistral”).

    +
    + +
    +
    +seconds_to_first_token: float | None
    +
    + +
    +
    +seconds_to_last_token: float
    +
    + +
    +
    +system_fingerprint: str | None
    +
    + +
    + +
    +
    +class ldp.llms.LiteEmbeddingModel(*, name: str = 'text-embedding-3-small', dimensions: int | None = None, batch_size: int = 16, embed_kwargs: dict[str, Any] = None)[source]
    +

    Bases: EmbeddingModel

    +
    +
    +batch_size: int
    +
    + +
    +
    +dimensions: int | None
    +
    + +
    +
    +embed_kwargs: dict[str, Any]
    +
    + +
    +
    +async embed_texts(texts: list[str]) list[ndarray][source]
    +
    + +
    +
    +classmethod infer_dimensions(data: dict[str, Any]) dict[str, Any][source]
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'batch_size': FieldInfo(annotation=int, required=False, default=16), 'dimensions': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, description="The length an embedding will have. If left unspecified, we attempt to infer an un-truncated length via LiteLLM's internal model map. If this inference fails, the embedding will be un-truncated."), 'embed_kwargs': FieldInfo(annotation=dict[str, Any], required=False, default_factory=dict, description='Extra kwargs to pass to litellm.aembedding.'), 'name': FieldInfo(annotation=str, required=False, default='text-embedding-3-small')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    + +
    +
    +class ldp.llms.MultipleCompletionLLMModel(*, name: str = 'unknown', config: dict = {'model': 'gpt-3.5-turbo', 'temperature': 0.1}, encoding: Any | None = None)[source]
    +

    Bases: BaseModel

    +

    Run n completions at once, all starting from the same messages.

    +
    +
    +TOOL_CHOICE_REQUIRED: ClassVar[str] = 'required'
    +
    + +
    +
    +async achat(messages: Iterable[Message], **kwargs) ModelResponse[source]
    +
    + +
    +
    +async achat_iter(messages: Iterable[Message], **kwargs) AsyncGenerator[source]
    +
    + +
    +
    +async call(messages: list[Message], callbacks: list[Callable] | None = None, output_type: type[BaseModel] | None = None, tools: list[Tool] | None = None, tool_choice: Tool | str | None = 'required', **chat_kwargs) list[LLMResult][source]
    +
    + +
    +
    +config: dict
    +
    + +
    +
    +encoding: Any | None
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'config': FieldInfo(annotation=dict, required=False, default={'model': 'gpt-3.5-turbo', 'temperature': 0.1}), 'encoding': FieldInfo(annotation=Union[Any, NoneType], required=False, default=None), 'name': FieldInfo(annotation=str, required=False, default='unknown')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    +
    +set_model_name() Self[source]
    +
    + +
    + +
    +
    +class ldp.llms.SparseEmbeddingModel(*, name: str = 'sparse', dimensions: int = 256, enc: Encoding = None)[source]
    +

    Bases: EmbeddingModel

    +

    This is a very simple keyword search model - probably best to be mixed with others.

    +
    +
    +dimensions: int
    +
    + +
    +
    +async embed_texts(texts) list[ndarray][source]
    +
    + +
    +
    +enc: Encoding
    +
    + +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'dimensions': FieldInfo(annotation=int, required=False, default=256), 'enc': FieldInfo(annotation=Encoding, required=False, default_factory=<lambda>), 'name': FieldInfo(annotation=str, required=False, default='sparse')}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +
    + +
    + +
    +
    +ldp.llms.append_to_messages(messages: list[Message], new_message: Message) list[Message][source]
    +

    Appends a message to a list of messages, returning that in-place modified list.

    +

    Examples

    +
    >>> messages = [Message(content="Hello")]
    +>>> modified_messages = append_to_messages(messages, Message(content="New"))
    +>>> modified_messages
    +[Message(role='user', content='Hello'), Message(role='user', content='New')]
    +>>> id(messages) == id(modified_messages)
    +True
    +
    +
    +
    + +
    +
    +ldp.llms.append_to_sys(user_content: str, sys_content: str | None = None) list[Message][source]
    +

    Appends a user message to a list of messages, optionally including a system message.

    +
    +
    Parameters:
    +
      +
    • user_content – The content of the user message.

    • +
    • sys_content – Optional content for the system message. Defaults to None.

    • +
    +
    +
    Returns:
    +

    A list of messages including the optional system message and the user message.

    +
    +
    +

    Examples

    +
    >>> append_to_sys("Hello, world!")
    +[Message(role='user', content='Hello, world!')]
    +
    +
    +
    >>> append_to_sys("Hello, world!", "System initialized.")
    +[Message(role='system', content='System initialized.'), Message(role='user', content='Hello, world!')]
    +
    +
    +
    + +
    +
    +ldp.llms.prepend_sys(messages: Collection, sys_content: str) list[Message][source]
    +

    Prepends a system message to a list of messages.

    +
    +
    Parameters:
    +
      +
    • messages – The list of existing messages.

    • +
    • sys_content – The content of the system message to be prepended.

    • +
    +
    +
    Returns:
    +

    A new list of messages with the system message prepended.

    +
    +
    +

    Examples

    +
    >>> messages = [Message(role="user", content="Hello!")]
    +>>> prepend_sys(messages, "System initialized.")
    +[Message(role='system', content='System initialized.'), Message(role='user', content='Hello!')]
    +
    +
    +
    + +
    +
    +ldp.llms.prepend_sys_and_append_sys(messages: Iterable[Message], initial_sys_content: str, final_sys_content: str) list[Message][source]
    +
    + +
    +
    +ldp.llms.sum_logprobs(choice: Choices) float | None[source]
    +

    Calculate the sum of the log probabilities of an LLM completion (a Choices object).

    +
    +
    Parameters:
    +

    choice – A sequence of choices from the completion.

    +
    +
    Returns:
    +

    The sum of the log probabilities of the choice.

    +
    +
    +
    + +
    +
    +ldp.llms.validate_json_completion(completion: ModelResponse, output_type: type[BaseModel]) None[source]
    +

    Validate a completion against a JSON schema.

    +
    +
    Parameters:
    +
      +
    • completion – The completion to validate.

    • +
    • output_type – The Pydantic model to validate the completion against.

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/modules.html b/docs/_build/html/modules.html new file mode 100644 index 00000000..6949d44f --- /dev/null +++ b/docs/_build/html/modules.html @@ -0,0 +1,262 @@ + + + + + + + + ldp — ldp documentation + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ldp

    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..fc0db2db4b6c1ee5380418afa08afb1c151eabb0 GIT binary patch literal 6291 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 J{|7A^YXo0WA2|R3 literal 0 HcmV?d00001 diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html new file mode 100644 index 00000000..1e1cb5f5 --- /dev/null +++ b/docs/_build/html/py-modindex.html @@ -0,0 +1,333 @@ + + + + + + + Python Module Index — ldp documentation + + + + + + + + + + + + + + + + + + + + +

    +
    +
    + + +
    + + +

    Python Module Index

    + +
    + l +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + l
    + ldp +
        + ldp.agent +
        + ldp.agent.agent +
        + ldp.agent.agent_client +
        + ldp.agent.interactive_agent +
        + ldp.agent.memory_agent +
        + ldp.agent.react_agent +
        + ldp.agent.simple_agent +
        + ldp.agent.tree_of_thoughts_agent +
        + ldp.alg +
        + ldp.alg.algorithms +
        + ldp.alg.beam_search +
        + ldp.alg.callbacks +
        + ldp.alg.datasets +
        + ldp.alg.optimizer +
        + ldp.alg.optimizer.ape +
        + ldp.alg.optimizer.memory +
        + ldp.alg.optimizer.opt +
        + ldp.alg.optimizer.replay_buffers +
        + ldp.alg.rollout +
        + ldp.alg.runners +
        + ldp.alg.tree_search +
        + ldp.data_structures +
        + ldp.graph +
        + ldp.graph.async_torch +
        + ldp.graph.common_ops +
        + ldp.graph.gradient_estimators +
        + ldp.graph.loss_ops +
        + ldp.graph.memory +
        + ldp.graph.modules +
        + ldp.graph.modules.llm_call +
        + ldp.graph.modules.react +
        + ldp.graph.modules.reflect +
        + ldp.graph.modules.thought +
        + ldp.graph.op_utils +
        + ldp.graph.ops +
        + ldp.graph.torch_ops +
        + ldp.llms +
        + ldp.llms.chat +
        + ldp.llms.embeddings +
        + ldp.llms.prompts +
        + ldp.main +
        + ldp.shims +
        + ldp.utils +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html new file mode 100644 index 00000000..9e3345ad --- /dev/null +++ b/docs/_build/html/search.html @@ -0,0 +1,120 @@ + + + + + + + Search — ldp documentation + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Search

    + + + + +

    + Searching for multiple words only shows matches that contain + all words. +

    + + +
    + + + +
    + + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js new file mode 100644 index 00000000..42bafe26 --- /dev/null +++ b/docs/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"Contents:": [[0, null]], "Indices and tables": [[0, "indices-and-tables"]], "Module contents": [[1, "module-ldp"], [2, "module-ldp.agent"], [3, "module-ldp.alg"], [4, "module-ldp.alg.optimizer"], [5, "module-ldp.graph"], [6, "module-ldp.graph.modules"], [7, "module-ldp.llms"]], "Submodules": [[1, "submodules"], [2, "submodules"], [3, "submodules"], [4, "submodules"], [5, "submodules"], [6, "submodules"], [7, "submodules"]], "Subpackages": [[1, "subpackages"], [3, "subpackages"], [5, "subpackages"]], "Welcome to ldp\u2019s documentation!": [[0, "welcome-to-ldp-s-documentation"]], "ldp": [[8, "ldp"]], "ldp package": [[1, "ldp-package"]], "ldp.agent package": [[2, "ldp-agent-package"]], "ldp.agent.agent module": [[2, "module-ldp.agent.agent"]], "ldp.agent.agent_client module": [[2, "module-ldp.agent.agent_client"]], "ldp.agent.interactive_agent module": [[2, "module-ldp.agent.interactive_agent"]], "ldp.agent.memory_agent module": [[2, "module-ldp.agent.memory_agent"]], "ldp.agent.react_agent module": [[2, "module-ldp.agent.react_agent"]], "ldp.agent.simple_agent module": [[2, "module-ldp.agent.simple_agent"]], "ldp.agent.tree_of_thoughts_agent module": [[2, "module-ldp.agent.tree_of_thoughts_agent"]], "ldp.alg package": [[3, "ldp-alg-package"]], "ldp.alg.algorithms module": [[3, "module-ldp.alg.algorithms"]], "ldp.alg.beam_search module": [[3, "module-ldp.alg.beam_search"]], "ldp.alg.callbacks module": [[3, "module-ldp.alg.callbacks"]], "ldp.alg.datasets module": [[3, "module-ldp.alg.datasets"]], "ldp.alg.optimizer package": [[4, "ldp-alg-optimizer-package"]], "ldp.alg.optimizer.ape module": [[4, "module-ldp.alg.optimizer.ape"]], "ldp.alg.optimizer.memory module": [[4, "module-ldp.alg.optimizer.memory"]], "ldp.alg.optimizer.opt module": [[4, "module-ldp.alg.optimizer.opt"]], "ldp.alg.optimizer.replay_buffers module": [[4, "module-ldp.alg.optimizer.replay_buffers"]], "ldp.alg.rollout module": [[3, "module-ldp.alg.rollout"]], "ldp.alg.runners module": [[3, "module-ldp.alg.runners"]], "ldp.alg.tree_search module": [[3, "module-ldp.alg.tree_search"]], "ldp.data_structures module": [[1, "module-ldp.data_structures"]], "ldp.graph package": [[5, "ldp-graph-package"]], "ldp.graph.async_torch module": [[5, "module-ldp.graph.async_torch"]], "ldp.graph.common_ops module": [[5, "module-ldp.graph.common_ops"]], "ldp.graph.gradient_estimators module": [[5, "module-ldp.graph.gradient_estimators"]], "ldp.graph.loss_ops module": [[5, "module-ldp.graph.loss_ops"]], "ldp.graph.memory module": [[5, "module-ldp.graph.memory"]], "ldp.graph.modules package": [[6, "ldp-graph-modules-package"]], "ldp.graph.modules.llm_call module": [[6, "module-ldp.graph.modules.llm_call"]], "ldp.graph.modules.react module": [[6, "module-ldp.graph.modules.react"]], "ldp.graph.modules.reflect module": [[6, "module-ldp.graph.modules.reflect"]], "ldp.graph.modules.thought module": [[6, "module-ldp.graph.modules.thought"]], "ldp.graph.op_utils module": [[5, "module-ldp.graph.op_utils"]], "ldp.graph.ops module": [[5, "module-ldp.graph.ops"]], "ldp.graph.torch_ops module": [[5, "module-ldp.graph.torch_ops"]], "ldp.llms package": [[7, "ldp-llms-package"]], "ldp.llms.chat module": [[7, "module-ldp.llms.chat"]], "ldp.llms.embeddings module": [[7, "module-ldp.llms.embeddings"]], "ldp.llms.prompts module": [[7, "module-ldp.llms.prompts"]], "ldp.main module": [[1, "module-ldp.main"]], "ldp.shims module": [[1, "module-ldp.shims"]], "ldp.utils module": [[1, "module-ldp.utils"]]}, "docnames": ["index", "ldp", "ldp.agent", "ldp.alg", "ldp.alg.optimizer", "ldp.graph", "ldp.graph.modules", "ldp.llms", "modules"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1}, "filenames": ["index.rst", "ldp.rst", "ldp.agent.rst", "ldp.alg.rst", "ldp.alg.optimizer.rst", "ldp.graph.rst", "ldp.graph.modules.rst", "ldp.llms.rst", "modules.rst"], "indexentries": {"achat() (ldp.llms.chat.multiplecompletionllmmodel method)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.achat", false]], "achat() (ldp.llms.multiplecompletionllmmodel method)": [[7, "ldp.llms.MultipleCompletionLLMModel.achat", false]], "achat_iter() (ldp.llms.chat.multiplecompletionllmmodel method)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.achat_iter", false]], "achat_iter() (ldp.llms.multiplecompletionllmmodel method)": [[7, "ldp.llms.MultipleCompletionLLMModel.achat_iter", false]], "action (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.action", false]], "add_memory() (ldp.graph.memory.memorymodel method)": [[5, "id16", false], [5, "ldp.graph.memory.MemoryModel.add_memory", false]], "add_memory() (ldp.graph.memorymodel method)": [[5, "ldp.graph.MemoryModel.add_memory", false]], "add_transition() (ldp.data_structures.transitiontree method)": [[1, "ldp.data_structures.TransitionTree.add_transition", false]], "after_agent_get_asv() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_agent_get_asv", false]], "after_agent_get_asv() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_agent_get_asv", false]], "after_agent_get_asv() (ldp.alg.callbacks.rolloutdebugdumpcallback method)": [[3, "ldp.alg.callbacks.RolloutDebugDumpCallback.after_agent_get_asv", false]], "after_agent_get_asv() (ldp.alg.callbacks.terminalprintingcallback method)": [[3, "ldp.alg.callbacks.TerminalPrintingCallback.after_agent_get_asv", false]], "after_agent_get_asv() (ldp.alg.rolloutdebugdumpcallback method)": [[3, "ldp.alg.RolloutDebugDumpCallback.after_agent_get_asv", false]], "after_agent_init_state() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_agent_init_state", false]], "after_agent_init_state() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_agent_init_state", false]], "after_env_reset() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_env_reset", false]], "after_env_reset() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_env_reset", false]], "after_env_reset() (ldp.alg.callbacks.trajectorymetricscallback method)": [[3, "ldp.alg.callbacks.TrajectoryMetricsCallback.after_env_reset", false]], "after_env_reset() (ldp.alg.trajectorymetricscallback method)": [[3, "ldp.alg.TrajectoryMetricsCallback.after_env_reset", false]], "after_env_step() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_env_step", false]], "after_env_step() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_env_step", false]], "after_env_step() (ldp.alg.callbacks.rolloutdebugdumpcallback method)": [[3, "ldp.alg.callbacks.RolloutDebugDumpCallback.after_env_step", false]], "after_env_step() (ldp.alg.callbacks.terminalprintingcallback method)": [[3, "ldp.alg.callbacks.TerminalPrintingCallback.after_env_step", false]], "after_env_step() (ldp.alg.rolloutdebugdumpcallback method)": [[3, "ldp.alg.RolloutDebugDumpCallback.after_env_step", false]], "after_eval_loop() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.callbacks.loggingcallback method)": [[3, "ldp.alg.callbacks.LoggingCallback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.callbacks.meanmetricscallback method)": [[3, "ldp.alg.callbacks.MeanMetricsCallback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.callbacks.trajectorymetricscallback method)": [[3, "ldp.alg.callbacks.TrajectoryMetricsCallback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.callbacks.wandbloggingcallback method)": [[3, "ldp.alg.callbacks.WandBLoggingCallback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.loggingcallback method)": [[3, "ldp.alg.LoggingCallback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.meanmetricscallback method)": [[3, "ldp.alg.MeanMetricsCallback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.trajectorymetricscallback method)": [[3, "ldp.alg.TrajectoryMetricsCallback.after_eval_loop", false]], "after_eval_loop() (ldp.alg.wandbloggingcallback method)": [[3, "ldp.alg.WandBLoggingCallback.after_eval_loop", false]], "after_eval_step() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_eval_step", false]], "after_eval_step() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_eval_step", false]], "after_eval_step() (ldp.alg.callbacks.clearcontextcallback method)": [[3, "ldp.alg.callbacks.ClearContextCallback.after_eval_step", false]], "after_eval_step() (ldp.alg.callbacks.trajectorymetricscallback method)": [[3, "ldp.alg.callbacks.TrajectoryMetricsCallback.after_eval_step", false]], "after_eval_step() (ldp.alg.clearcontextcallback method)": [[3, "ldp.alg.ClearContextCallback.after_eval_step", false]], "after_eval_step() (ldp.alg.trajectorymetricscallback method)": [[3, "ldp.alg.TrajectoryMetricsCallback.after_eval_step", false]], "after_retry_failure_log() (ldp.agent.react_agent.reactagent static method)": [[2, "ldp.agent.react_agent.ReActAgent.after_retry_failure_log", false]], "after_retry_failure_log() (ldp.agent.reactagent static method)": [[2, "ldp.agent.ReActAgent.after_retry_failure_log", false]], "after_train_step() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_train_step", false]], "after_train_step() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_train_step", false]], "after_train_step() (ldp.alg.callbacks.loggingcallback method)": [[3, "ldp.alg.callbacks.LoggingCallback.after_train_step", false]], "after_train_step() (ldp.alg.callbacks.meanmetricscallback method)": [[3, "ldp.alg.callbacks.MeanMetricsCallback.after_train_step", false]], "after_train_step() (ldp.alg.callbacks.trajectorymetricscallback method)": [[3, "ldp.alg.callbacks.TrajectoryMetricsCallback.after_train_step", false]], "after_train_step() (ldp.alg.callbacks.wandbloggingcallback method)": [[3, "ldp.alg.callbacks.WandBLoggingCallback.after_train_step", false]], "after_train_step() (ldp.alg.loggingcallback method)": [[3, "ldp.alg.LoggingCallback.after_train_step", false]], "after_train_step() (ldp.alg.meanmetricscallback method)": [[3, "ldp.alg.MeanMetricsCallback.after_train_step", false]], "after_train_step() (ldp.alg.trajectorymetricscallback method)": [[3, "ldp.alg.TrajectoryMetricsCallback.after_train_step", false]], "after_train_step() (ldp.alg.wandbloggingcallback method)": [[3, "ldp.alg.WandBLoggingCallback.after_train_step", false]], "after_transition() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_transition", false]], "after_transition() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_transition", false]], "after_transition() (ldp.alg.callbacks.trajectoryfilecallback method)": [[3, "ldp.alg.callbacks.TrajectoryFileCallback.after_transition", false]], "after_transition() (ldp.alg.trajectoryfilecallback method)": [[3, "ldp.alg.TrajectoryFileCallback.after_transition", false]], "after_update() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.after_update", false]], "after_update() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.after_update", false]], "after_update() (ldp.alg.callbacks.clearcontextcallback method)": [[3, "ldp.alg.callbacks.ClearContextCallback.after_update", false]], "after_update() (ldp.alg.clearcontextcallback method)": [[3, "ldp.alg.ClearContextCallback.after_update", false]], "agent (class in ldp.agent)": [[2, "ldp.agent.Agent", false]], "agent (class in ldp.agent.agent)": [[2, "ldp.agent.agent.Agent", false]], "agent_kwargs (ldp.agent.agent.agentconfig attribute)": [[2, "ldp.agent.agent.AgentConfig.agent_kwargs", false]], "agent_kwargs (ldp.agent.agentconfig attribute)": [[2, "ldp.agent.AgentConfig.agent_kwargs", false]], "agent_state (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.agent_state", false]], "agent_type (ldp.agent.agent.agentconfig attribute)": [[2, "ldp.agent.agent.AgentConfig.agent_type", false]], "agent_type (ldp.agent.agentconfig attribute)": [[2, "ldp.agent.AgentConfig.agent_type", false]], "agentconfig (class in ldp.agent)": [[2, "ldp.agent.AgentConfig", false]], "agentconfig (class in ldp.agent.agent)": [[2, "ldp.agent.agent.AgentConfig", false]], "agenterror": [[3, "ldp.alg.rollout.AgentError", false]], "aggregate() (ldp.alg.optimizer.chainedoptimizer method)": [[4, "ldp.alg.optimizer.ChainedOptimizer.aggregate", false]], "aggregate() (ldp.alg.optimizer.opt.chainedoptimizer method)": [[4, "ldp.alg.optimizer.opt.ChainedOptimizer.aggregate", false]], "aggregate() (ldp.alg.optimizer.opt.optimizer method)": [[4, "ldp.alg.optimizer.opt.Optimizer.aggregate", false]], "aggregate() (ldp.alg.optimizer.optimizer method)": [[4, "ldp.alg.optimizer.Optimizer.aggregate", false]], "aggregate_trajectory() (ldp.alg.optimizer.ape.apeopt method)": [[4, "ldp.alg.optimizer.ape.APEOpt.aggregate_trajectory", false]], "aggregate_trajectory() (ldp.alg.optimizer.apeopt method)": [[4, "ldp.alg.optimizer.APEOpt.aggregate_trajectory", false]], "aggregate_trajectory() (ldp.alg.optimizer.memory.memoryopt method)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.aggregate_trajectory", false]], "aggregate_trajectory() (ldp.alg.optimizer.memoryopt method)": [[4, "ldp.alg.optimizer.MemoryOpt.aggregate_trajectory", false]], "aggregate_trajectory() (ldp.alg.optimizer.opt.optimizer method)": [[4, "ldp.alg.optimizer.opt.Optimizer.aggregate_trajectory", false]], "aggregate_trajectory() (ldp.alg.optimizer.optimizer method)": [[4, "ldp.alg.optimizer.Optimizer.aggregate_trajectory", false]], "apeopt (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.APEOpt", false]], "apeopt (class in ldp.alg.optimizer.ape)": [[4, "ldp.alg.optimizer.ape.APEOpt", false]], "apescorefn (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.APEScoreFn", false]], "apescorefn (class in ldp.alg.optimizer.ape)": [[4, "ldp.alg.optimizer.ape.APEScoreFn", false]], "append_to_messages() (in module ldp.llms)": [[7, "ldp.llms.append_to_messages", false]], "append_to_messages() (in module ldp.llms.prompts)": [[7, "ldp.llms.prompts.append_to_messages", false]], "append_to_sys() (in module ldp.llms)": [[7, "ldp.llms.append_to_sys", false]], "append_to_sys() (in module ldp.llms.prompts)": [[7, "ldp.llms.prompts.append_to_sys", false]], "assign_constant_grads() (in module ldp.graph.gradient_estimators)": [[5, "ldp.graph.gradient_estimators.assign_constant_grads", false]], "assign_default_grads() (in module ldp.graph.gradient_estimators)": [[5, "ldp.graph.gradient_estimators.assign_default_grads", false]], "assign_mc_value_estimates() (ldp.data_structures.transitiontree method)": [[1, "ldp.data_structures.TransitionTree.assign_mc_value_estimates", false]], "async_cache() (in module ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.async_cache", false]], "async_protect_torch_call() (in module ldp.graph.async_torch)": [[5, "ldp.graph.async_torch.async_protect_torch_call", false]], "asynctorchmodule (class in ldp.graph.async_torch)": [[5, "ldp.graph.async_torch.AsyncTorchModule", false]], "backward() (ldp.graph.common_ops.configop class method)": [[5, "ldp.graph.common_ops.ConfigOp.backward", false]], "backward() (ldp.graph.common_ops.embeddingop class method)": [[5, "ldp.graph.common_ops.EmbeddingOp.backward", false]], "backward() (ldp.graph.common_ops.fxnop class method)": [[5, "ldp.graph.common_ops.FxnOp.backward", false]], "backward() (ldp.graph.common_ops.identityop class method)": [[5, "ldp.graph.common_ops.IdentityOp.backward", false]], "backward() (ldp.graph.common_ops.llmcallop class method)": [[5, "ldp.graph.common_ops.LLMCallOp.backward", false]], "backward() (ldp.graph.common_ops.memoryop class method)": [[5, "ldp.graph.common_ops.MemoryOp.backward", false]], "backward() (ldp.graph.common_ops.stopgradop class method)": [[5, "ldp.graph.common_ops.StopGradOp.backward", false]], "backward() (ldp.graph.configop class method)": [[5, "ldp.graph.ConfigOp.backward", false]], "backward() (ldp.graph.embeddingop class method)": [[5, "ldp.graph.EmbeddingOp.backward", false]], "backward() (ldp.graph.fxnop class method)": [[5, "ldp.graph.FxnOp.backward", false]], "backward() (ldp.graph.gradient_estimators.torchparambackwardestimator method)": [[5, "ldp.graph.gradient_estimators.TorchParamBackwardEstimator.backward", false]], "backward() (ldp.graph.identityop class method)": [[5, "ldp.graph.IdentityOp.backward", false]], "backward() (ldp.graph.llmcallop class method)": [[5, "ldp.graph.LLMCallOp.backward", false]], "backward() (ldp.graph.loss_ops.mselossop class method)": [[5, "ldp.graph.loss_ops.MSELossOp.backward", false]], "backward() (ldp.graph.memoryop class method)": [[5, "ldp.graph.MemoryOp.backward", false]], "backward() (ldp.graph.mselossop class method)": [[5, "ldp.graph.MSELossOp.backward", false]], "backward() (ldp.graph.op class method)": [[5, "ldp.graph.Op.backward", false]], "backward() (ldp.graph.ops.op class method)": [[5, "ldp.graph.ops.Op.backward", false]], "backward() (ldp.graph.torch_ops.torchop class method)": [[5, "ldp.graph.torch_ops.TorchOp.backward", false]], "batch_size (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.batch_size", false]], "batch_size (ldp.alg.offlinetrainerconfig attribute)": [[3, "ldp.alg.OfflineTrainerConfig.batch_size", false]], "batch_size (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.batch_size", false]], "batch_size (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.batch_size", false]], "batch_size (ldp.alg.runners.offlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OfflineTrainerConfig.batch_size", false]], "batch_size (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.batch_size", false]], "batch_size (ldp.llms.embeddings.liteembeddingmodel attribute)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.batch_size", false]], "batch_size (ldp.llms.liteembeddingmodel attribute)": [[7, "ldp.llms.LiteEmbeddingModel.batch_size", false]], "batched_iter() (ldp.alg.optimizer.replay_buffers.circularreplaybuffer method)": [[4, "ldp.alg.optimizer.replay_buffers.CircularReplayBuffer.batched_iter", false]], "beam (class in ldp.alg)": [[3, "ldp.alg.Beam", false]], "beam (class in ldp.alg.beam_search)": [[3, "ldp.alg.beam_search.Beam", false]], "beamsearchrollout (class in ldp.alg)": [[3, "ldp.alg.BeamSearchRollout", false]], "beamsearchrollout (class in ldp.alg.beam_search)": [[3, "ldp.alg.beam_search.BeamSearchRollout", false]], "before_eval_loop() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.before_eval_loop", false]], "before_eval_loop() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.before_eval_loop", false]], "before_transition() (ldp.alg.callback method)": [[3, "ldp.alg.Callback.before_transition", false]], "before_transition() (ldp.alg.callbacks.callback method)": [[3, "ldp.alg.callbacks.Callback.before_transition", false]], "before_transition() (ldp.alg.callbacks.rolloutdebugdumpcallback method)": [[3, "ldp.alg.callbacks.RolloutDebugDumpCallback.before_transition", false]], "before_transition() (ldp.alg.callbacks.terminalprintingcallback method)": [[3, "ldp.alg.callbacks.TerminalPrintingCallback.before_transition", false]], "before_transition() (ldp.alg.callbacks.trajectoryfilecallback method)": [[3, "ldp.alg.callbacks.TrajectoryFileCallback.before_transition", false]], "before_transition() (ldp.alg.rolloutdebugdumpcallback method)": [[3, "ldp.alg.RolloutDebugDumpCallback.before_transition", false]], "before_transition() (ldp.alg.trajectoryfilecallback method)": [[3, "ldp.alg.TrajectoryFileCallback.before_transition", false]], "cacheable (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.Cacheable", false]], "call() (ldp.llms.chat.llmmodel method)": [[7, "ldp.llms.chat.LLMModel.call", false]], "call() (ldp.llms.chat.multiplecompletionllmmodel method)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.call", false]], "call() (ldp.llms.llmmodel method)": [[7, "ldp.llms.LLMModel.call", false]], "call() (ldp.llms.multiplecompletionllmmodel method)": [[7, "ldp.llms.MultipleCompletionLLMModel.call", false]], "callback (class in ldp.alg)": [[3, "ldp.alg.Callback", false]], "callback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.Callback", false]], "callid (class in ldp.graph)": [[5, "ldp.graph.CallID", false]], "callid (class in ldp.graph.op_utils)": [[5, "ldp.graph.op_utils.CallID", false]], "catch_agent_failures (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.catch_agent_failures", false]], "catch_agent_failures (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.catch_agent_failures", false]], "catch_agent_failures (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.catch_agent_failures", false]], "catch_env_failures (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.catch_env_failures", false]], "catch_env_failures (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.catch_env_failures", false]], "catch_env_failures (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.catch_env_failures", false]], "caughterror": [[3, "ldp.alg.rollout.CaughtError", false]], "chainedoptimizer (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.ChainedOptimizer", false]], "chainedoptimizer (class in ldp.alg.optimizer.opt)": [[4, "ldp.alg.optimizer.opt.ChainedOptimizer", false]], "circularreplaybuffer (class in ldp.alg.optimizer.replay_buffers)": [[4, "ldp.alg.optimizer.replay_buffers.CircularReplayBuffer", false]], "cleanup() (ldp.alg.callbacks.trajectoryfilecallback method)": [[3, "ldp.alg.callbacks.TrajectoryFileCallback.cleanup", false]], "cleanup() (ldp.alg.trajectoryfilecallback method)": [[3, "ldp.alg.TrajectoryFileCallback.cleanup", false]], "clear() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.clear", false]], "clear_contexts() (ldp.graph.opctx class method)": [[5, "ldp.graph.OpCtx.clear_contexts", false]], "clear_contexts() (ldp.graph.ops.opctx class method)": [[5, "ldp.graph.ops.OpCtx.clear_contexts", false]], "clear_ctx() (ldp.graph.op method)": [[5, "ldp.graph.Op.clear_ctx", false]], "clear_ctx() (ldp.graph.ops.op method)": [[5, "ldp.graph.ops.Op.clear_ctx", false]], "clear_ctx_at_each_iter (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.clear_ctx_at_each_iter", false]], "clear_ctx_at_each_iter (ldp.alg.offlinetrainerconfig attribute)": [[3, "ldp.alg.OfflineTrainerConfig.clear_ctx_at_each_iter", false]], "clear_ctx_at_each_iter (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.clear_ctx_at_each_iter", false]], "clear_ctx_at_each_iter (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.clear_ctx_at_each_iter", false]], "clear_ctx_at_each_iter (ldp.alg.runners.offlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OfflineTrainerConfig.clear_ctx_at_each_iter", false]], "clear_ctx_at_each_iter (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.clear_ctx_at_each_iter", false]], "clearcontextcallback (class in ldp.alg)": [[3, "ldp.alg.ClearContextCallback", false]], "clearcontextcallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.ClearContextCallback", false]], "close() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.close", false]], "completion_count (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.completion_count", false]], "completion_count (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.completion_count", false]], "compute_discounted_returns() (ldp.data_structures.trajectory method)": [[1, "ldp.data_structures.Trajectory.compute_discounted_returns", false]], "compute_grads() (ldp.graph.opresult method)": [[5, "ldp.graph.OpResult.compute_grads", false]], "compute_grads() (ldp.graph.ops.opresult method)": [[5, "ldp.graph.ops.OpResult.compute_grads", false]], "compute_graph() (in module ldp.graph)": [[5, "ldp.graph.compute_graph", false]], "compute_graph() (in module ldp.graph.op_utils)": [[5, "ldp.graph.op_utils.compute_graph", false]], "compute_logprob() (ldp.graph.common_ops.llmcallop method)": [[5, "ldp.graph.common_ops.LLMCallOp.compute_logprob", false]], "compute_logprob() (ldp.graph.llmcallop method)": [[5, "ldp.graph.LLMCallOp.compute_logprob", false]], "compute_trajectory_metrics() (ldp.alg.callbacks.computetrajectorymetricsmixin method)": [[3, "ldp.alg.callbacks.ComputeTrajectoryMetricsMixin.compute_trajectory_metrics", false]], "compute_trajectory_metrics() (ldp.alg.computetrajectorymetricsmixin method)": [[3, "ldp.alg.ComputeTrajectoryMetricsMixin.compute_trajectory_metrics", false]], "computetrajectorymetricsmixin (class in ldp.alg)": [[3, "ldp.alg.ComputeTrajectoryMetricsMixin", false]], "computetrajectorymetricsmixin (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.ComputeTrajectoryMetricsMixin", false]], "config (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.config", false]], "config (ldp.llms.chat.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.config", false]], "config (ldp.llms.llmmodel attribute)": [[7, "ldp.llms.LLMModel.config", false]], "config (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.config", false]], "config (ldp.llms.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.MultipleCompletionLLMModel.config", false]], "configop (class in ldp.graph)": [[5, "ldp.graph.ConfigOp", false]], "configop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.ConfigOp", false]], "configure_log_levels() (in module ldp.utils)": [[1, "ldp.utils.configure_log_levels", false]], "configure_stdout_logs() (in module ldp.utils)": [[1, "ldp.utils.configure_stdout_logs", false]], "construct_action() (ldp.data_structures.transition class method)": [[1, "ldp.data_structures.Transition.construct_action", false]], "construct_agent() (ldp.agent.agent.agentconfig method)": [[2, "ldp.agent.agent.AgentConfig.construct_agent", false]], "construct_agent() (ldp.agent.agentconfig method)": [[2, "ldp.agent.AgentConfig.construct_agent", false]], "ctx (ldp.graph.op attribute)": [[5, "ldp.graph.Op.ctx", false]], "ctx (ldp.graph.opresult property)": [[5, "ldp.graph.OpResult.ctx", false]], "ctx (ldp.graph.ops.op attribute)": [[5, "ldp.graph.ops.Op.ctx", false]], "ctx (ldp.graph.ops.opresult property)": [[5, "ldp.graph.ops.OpResult.ctx", false]], "ctx_tensor_input_key (ldp.graph.torch_ops.torchop attribute)": [[5, "ldp.graph.torch_ops.TorchOp.CTX_TENSOR_INPUT_KEY", false]], "data (ldp.graph.opctx attribute)": [[5, "ldp.graph.OpCtx.data", false]], "data (ldp.graph.ops.opctx attribute)": [[5, "ldp.graph.ops.OpCtx.data", false]], "date (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.date", false]], "date (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.date", false]], "default_memory_factory() (ldp.alg.optimizer.memory.memoryopt method)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.default_memory_factory", false]], "default_memory_factory() (ldp.alg.optimizer.memoryopt method)": [[4, "ldp.alg.optimizer.MemoryOpt.default_memory_factory", false]], "default_memory_matches (ldp.graph.memory.memorymodel attribute)": [[5, "id15", false], [5, "ldp.graph.memory.MemoryModel.DEFAULT_MEMORY_MATCHES", false]], "default_memory_matches (ldp.graph.memorymodel attribute)": [[5, "ldp.graph.MemoryModel.DEFAULT_MEMORY_MATCHES", false]], "default_optimizer_factory() (in module ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.default_optimizer_factory", false]], "default_query_factory() (ldp.agent.memory_agent.memoryagent method)": [[2, "ldp.agent.memory_agent.MemoryAgent.default_query_factory", false]], "default_query_factory() (ldp.agent.memoryagent method)": [[2, "ldp.agent.MemoryAgent.default_query_factory", false]], "defaultllmmodelnames (class in ldp.agent)": [[2, "ldp.agent.DefaultLLMModelNames", false]], "dimensions (ldp.llms.embeddingmodel attribute)": [[7, "ldp.llms.EmbeddingModel.dimensions", false]], "dimensions (ldp.llms.embeddings.embeddingmodel attribute)": [[7, "ldp.llms.embeddings.EmbeddingModel.dimensions", false]], "dimensions (ldp.llms.embeddings.liteembeddingmodel attribute)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.dimensions", false]], "dimensions (ldp.llms.embeddings.sparseembeddingmodel attribute)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel.dimensions", false]], "dimensions (ldp.llms.hybridembeddingmodel attribute)": [[7, "ldp.llms.HybridEmbeddingModel.dimensions", false]], "dimensions (ldp.llms.liteembeddingmodel attribute)": [[7, "ldp.llms.LiteEmbeddingModel.dimensions", false]], "dimensions (ldp.llms.sparseembeddingmodel attribute)": [[7, "ldp.llms.SparseEmbeddingModel.dimensions", false]], "discounted_returns() (in module ldp.utils)": [[1, "ldp.utils.discounted_returns", false]], "display() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.display", false]], "document (ldp.llms.embeddingmodes attribute)": [[7, "ldp.llms.EmbeddingModes.DOCUMENT", false]], "document (ldp.llms.embeddings.embeddingmodes attribute)": [[7, "ldp.llms.embeddings.EmbeddingModes.DOCUMENT", false]], "done (ldp.data_structures.trajectory property)": [[1, "ldp.data_structures.Trajectory.done", false]], "done (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.done", false]], "dummytaskdataset (class in ldp.alg.datasets)": [[3, "ldp.alg.datasets.DummyTaskDataset", false]], "embed_kwargs (ldp.llms.embeddings.liteembeddingmodel attribute)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.embed_kwargs", false]], "embed_kwargs (ldp.llms.liteembeddingmodel attribute)": [[7, "ldp.llms.LiteEmbeddingModel.embed_kwargs", false]], "embed_text() (ldp.llms.embeddingmodel method)": [[7, "ldp.llms.EmbeddingModel.embed_text", false]], "embed_text() (ldp.llms.embeddings.embeddingmodel method)": [[7, "ldp.llms.embeddings.EmbeddingModel.embed_text", false]], "embed_texts() (ldp.llms.embeddingmodel method)": [[7, "ldp.llms.EmbeddingModel.embed_texts", false]], "embed_texts() (ldp.llms.embeddings.embeddingmodel method)": [[7, "ldp.llms.embeddings.EmbeddingModel.embed_texts", false]], "embed_texts() (ldp.llms.embeddings.hybridembeddingmodel method)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel.embed_texts", false]], "embed_texts() (ldp.llms.embeddings.liteembeddingmodel method)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.embed_texts", false]], "embed_texts() (ldp.llms.embeddings.sparseembeddingmodel method)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel.embed_texts", false]], "embed_texts() (ldp.llms.hybridembeddingmodel method)": [[7, "ldp.llms.HybridEmbeddingModel.embed_texts", false]], "embed_texts() (ldp.llms.liteembeddingmodel method)": [[7, "ldp.llms.LiteEmbeddingModel.embed_texts", false]], "embed_texts() (ldp.llms.sparseembeddingmodel method)": [[7, "ldp.llms.SparseEmbeddingModel.embed_texts", false]], "embedding_model (ldp.graph.memory.memorymodel attribute)": [[5, "id17", false], [5, "ldp.graph.memory.MemoryModel.embedding_model", false]], "embedding_model (ldp.graph.memorymodel attribute)": [[5, "ldp.graph.MemoryModel.embedding_model", false]], "embeddingmodel (class in ldp.llms)": [[7, "ldp.llms.EmbeddingModel", false]], "embeddingmodel (class in ldp.llms.embeddings)": [[7, "ldp.llms.embeddings.EmbeddingModel", false]], "embeddingmodes (class in ldp.llms)": [[7, "ldp.llms.EmbeddingModes", false]], "embeddingmodes (class in ldp.llms.embeddings)": [[7, "ldp.llms.embeddings.EmbeddingModes", false]], "embeddingop (class in ldp.graph)": [[5, "ldp.graph.EmbeddingOp", false]], "embeddingop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.EmbeddingOp", false]], "enc (ldp.llms.embeddings.sparseembeddingmodel attribute)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel.enc", false]], "enc (ldp.llms.sparseembeddingmodel attribute)": [[7, "ldp.llms.SparseEmbeddingModel.enc", false]], "encoding (ldp.llms.chat.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.encoding", false]], "encoding (ldp.llms.llmmodel attribute)": [[7, "ldp.llms.LLMModel.encoding", false]], "encoding (ldp.llms.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.MultipleCompletionLLMModel.encoding", false]], "enforce_empty() (ldp.graph.memory.memorymodel class method)": [[5, "id18", false], [5, "ldp.graph.memory.MemoryModel.enforce_empty", false]], "enforce_empty() (ldp.graph.memorymodel class method)": [[5, "ldp.graph.MemoryModel.enforce_empty", false]], "ensure_query() (ldp.graph.memory class method)": [[5, "ldp.graph.Memory.ensure_query", false]], "ensure_query() (ldp.graph.memory.memory class method)": [[5, "ldp.graph.memory.Memory.ensure_query", false]], "env (ldp.alg.beam attribute)": [[3, "ldp.alg.Beam.env", false]], "env (ldp.alg.beam_search.beam attribute)": [[3, "ldp.alg.beam_search.Beam.env", false]], "enverror": [[3, "ldp.alg.rollout.EnvError", false]], "eval_before (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.eval_before", false]], "eval_before (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.eval_before", false]], "eval_every (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.eval_every", false]], "eval_every (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.eval_every", false]], "eval_means (ldp.alg.callbacks.meanmetricscallback property)": [[3, "ldp.alg.callbacks.MeanMetricsCallback.eval_means", false]], "eval_means (ldp.alg.meanmetricscallback property)": [[3, "ldp.alg.MeanMetricsCallback.eval_means", false]], "evaluate() (ldp.alg.evaluator method)": [[3, "ldp.alg.Evaluator.evaluate", false]], "evaluate() (ldp.alg.onlinetrainer method)": [[3, "ldp.alg.OnlineTrainer.evaluate", false]], "evaluate() (ldp.alg.runners.evaluator method)": [[3, "ldp.alg.runners.Evaluator.evaluate", false]], "evaluate() (ldp.alg.runners.onlinetrainer method)": [[3, "ldp.alg.runners.OnlineTrainer.evaluate", false]], "evaluator (class in ldp.alg)": [[3, "ldp.alg.Evaluator", false]], "evaluator (class in ldp.alg.runners)": [[3, "ldp.alg.runners.Evaluator", false]], "evaluatorconfig (class in ldp.alg)": [[3, "ldp.alg.EvaluatorConfig", false]], "evaluatorconfig (class in ldp.alg.runners)": [[3, "ldp.alg.runners.EvaluatorConfig", false]], "example (class in ldp.alg.optimizer.ape)": [[4, "ldp.alg.optimizer.ape.Example", false]], "example_buffer (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.example_buffer", false]], "example_buffer (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.example_buffer", false]], "example_buffer (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.example_buffer", false]], "examples (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.examples", false]], "examples (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.examples", false]], "exc_type (ldp.alg.rollout.agenterror attribute)": [[3, "ldp.alg.rollout.AgentError.exc_type", false]], "exc_type (ldp.alg.rollout.caughterror attribute)": [[3, "ldp.alg.rollout.CaughtError.exc_type", false]], "exc_type (ldp.alg.rollout.enverror attribute)": [[3, "ldp.alg.rollout.EnvError.exc_type", false]], "external_write_mode() (ldp.shims.tqdm class method)": [[1, "ldp.shims.tqdm.external_write_mode", false]], "failed (ldp.data_structures.trajectory property)": [[1, "ldp.data_structures.Trajectory.failed", false]], "failed (ldp.data_structures.transition property)": [[1, "ldp.data_structures.Transition.failed", false]], "format_dict (ldp.shims.tqdm property)": [[1, "ldp.shims.tqdm.format_dict", false]], "format_interval() (ldp.shims.tqdm static method)": [[1, "ldp.shims.tqdm.format_interval", false]], "format_meter() (ldp.shims.tqdm static method)": [[1, "ldp.shims.tqdm.format_meter", false]], "format_num() (ldp.shims.tqdm static method)": [[1, "ldp.shims.tqdm.format_num", false]], "format_sizeof() (ldp.shims.tqdm static method)": [[1, "ldp.shims.tqdm.format_sizeof", false]], "forward() (ldp.graph.common_ops.configop method)": [[5, "ldp.graph.common_ops.ConfigOp.forward", false]], "forward() (ldp.graph.common_ops.embeddingop method)": [[5, "ldp.graph.common_ops.EmbeddingOp.forward", false]], "forward() (ldp.graph.common_ops.fxnop method)": [[5, "ldp.graph.common_ops.FxnOp.forward", false]], "forward() (ldp.graph.common_ops.identityop method)": [[5, "ldp.graph.common_ops.IdentityOp.forward", false]], "forward() (ldp.graph.common_ops.llmcallop method)": [[5, "ldp.graph.common_ops.LLMCallOp.forward", false]], "forward() (ldp.graph.common_ops.memoryop method)": [[5, "ldp.graph.common_ops.MemoryOp.forward", false]], "forward() (ldp.graph.configop method)": [[5, "ldp.graph.ConfigOp.forward", false]], "forward() (ldp.graph.embeddingop method)": [[5, "ldp.graph.EmbeddingOp.forward", false]], "forward() (ldp.graph.fxnop method)": [[5, "ldp.graph.FxnOp.forward", false]], "forward() (ldp.graph.identityop method)": [[5, "ldp.graph.IdentityOp.forward", false]], "forward() (ldp.graph.llmcallop method)": [[5, "ldp.graph.LLMCallOp.forward", false]], "forward() (ldp.graph.loss_ops.mselossop method)": [[5, "ldp.graph.loss_ops.MSELossOp.forward", false]], "forward() (ldp.graph.memoryop method)": [[5, "ldp.graph.MemoryOp.forward", false]], "forward() (ldp.graph.mselossop method)": [[5, "ldp.graph.MSELossOp.forward", false]], "forward() (ldp.graph.op method)": [[5, "ldp.graph.Op.forward", false]], "forward() (ldp.graph.ops.op method)": [[5, "ldp.graph.ops.Op.forward", false]], "forward() (ldp.graph.torch_ops.torchop method)": [[5, "ldp.graph.torch_ops.TorchOp.forward", false]], "from_agent() (ldp.alg.optimizer.ape.apeopt class method)": [[4, "ldp.alg.optimizer.ape.APEOpt.from_agent", false]], "from_agent() (ldp.alg.optimizer.apeopt class method)": [[4, "ldp.alg.optimizer.APEOpt.from_agent", false]], "from_agent() (ldp.alg.optimizer.memory.memoryopt class method)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.from_agent", false]], "from_agent() (ldp.alg.optimizer.memoryopt class method)": [[4, "ldp.alg.optimizer.MemoryOpt.from_agent", false]], "from_dict() (ldp.graph.opresult class method)": [[5, "ldp.graph.OpResult.from_dict", false]], "from_dict() (ldp.graph.ops.opresult class method)": [[5, "ldp.graph.ops.OpResult.from_dict", false]], "from_jsonl() (ldp.data_structures.trajectory class method)": [[1, "ldp.data_structures.Trajectory.from_jsonl", false]], "from_name() (ldp.agent.agent class method)": [[2, "ldp.agent.Agent.from_name", false]], "from_name() (ldp.agent.agent.agent class method)": [[2, "ldp.agent.agent.Agent.from_name", false]], "from_name() (ldp.llms.embeddingmodel static method)": [[7, "ldp.llms.EmbeddingModel.from_name", false]], "from_name() (ldp.llms.embeddings.embeddingmodel static method)": [[7, "ldp.llms.embeddings.EmbeddingModel.from_name", false]], "from_ops() (ldp.graph.memory class method)": [[5, "ldp.graph.Memory.from_ops", false]], "from_ops() (ldp.graph.memory.memory class method)": [[5, "ldp.graph.memory.Memory.from_ops", false]], "fwd_id (ldp.graph.callid attribute)": [[5, "ldp.graph.CallID.fwd_id", false]], "fwd_id (ldp.graph.op_utils.callid attribute)": [[5, "ldp.graph.op_utils.CallID.fwd_id", false]], "fxnop (class in ldp.graph)": [[5, "ldp.graph.FxnOp", false]], "fxnop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.FxnOp", false]], "get() (ldp.graph.opctx method)": [[5, "ldp.graph.OpCtx.get", false]], "get() (ldp.graph.ops.opctx method)": [[5, "ldp.graph.ops.OpCtx.get", false]], "get_asv() (ldp.agent.agent method)": [[2, "ldp.agent.Agent.get_asv", false]], "get_asv() (ldp.agent.agent.agent method)": [[2, "ldp.agent.agent.Agent.get_asv", false]], "get_asv() (ldp.agent.agent_client.httpagentclient method)": [[2, "ldp.agent.agent_client.HTTPAgentClient.get_asv", false]], "get_asv() (ldp.agent.httpagentclient method)": [[2, "ldp.agent.HTTPAgentClient.get_asv", false]], "get_asv() (ldp.agent.interactive_agent.interactiveagent method)": [[2, "ldp.agent.interactive_agent.InteractiveAgent.get_asv", false]], "get_asv() (ldp.agent.memory_agent.memoryagent method)": [[2, "ldp.agent.memory_agent.MemoryAgent.get_asv", false]], "get_asv() (ldp.agent.memoryagent method)": [[2, "ldp.agent.MemoryAgent.get_asv", false]], "get_asv() (ldp.agent.react_agent.reactagent method)": [[2, "ldp.agent.react_agent.ReActAgent.get_asv", false]], "get_asv() (ldp.agent.reactagent method)": [[2, "ldp.agent.ReActAgent.get_asv", false]], "get_asv() (ldp.agent.simple_agent.simpleagent method)": [[2, "ldp.agent.simple_agent.SimpleAgent.get_asv", false]], "get_asv() (ldp.agent.simpleagent method)": [[2, "ldp.agent.SimpleAgent.get_asv", false]], "get_asv() (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent method)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.get_asv", false]], "get_asv() (ldp.agent.treeofthoughtsagent method)": [[2, "ldp.agent.TreeofThoughtsAgent.get_asv", false]], "get_call_id() (in module ldp.graph)": [[5, "ldp.graph.get_call_id", false]], "get_call_id() (in module ldp.graph.op_utils)": [[5, "ldp.graph.op_utils.get_call_id", false]], "get_call_ids() (ldp.graph.op method)": [[5, "ldp.graph.Op.get_call_ids", false]], "get_call_ids() (ldp.graph.ops.op method)": [[5, "ldp.graph.ops.Op.get_call_ids", false]], "get_compute_graph() (ldp.graph.opresult method)": [[5, "ldp.graph.OpResult.get_compute_graph", false]], "get_compute_graph() (ldp.graph.ops.opresult method)": [[5, "ldp.graph.ops.OpResult.get_compute_graph", false]], "get_examples() (ldp.graph.common_ops.llmcallop method)": [[5, "ldp.graph.common_ops.LLMCallOp.get_examples", false]], "get_examples() (ldp.graph.llmcallop method)": [[5, "ldp.graph.LLMCallOp.get_examples", false]], "get_formatted_variables() (in module ldp.alg.optimizer.ape)": [[4, "ldp.alg.optimizer.ape.get_formatted_variables", false]], "get_input_grads() (ldp.graph.op method)": [[5, "ldp.graph.Op.get_input_grads", false]], "get_input_grads() (ldp.graph.opctx method)": [[5, "ldp.graph.OpCtx.get_input_grads", false]], "get_input_grads() (ldp.graph.ops.op method)": [[5, "ldp.graph.ops.Op.get_input_grads", false]], "get_input_grads() (ldp.graph.ops.opctx method)": [[5, "ldp.graph.ops.OpCtx.get_input_grads", false]], "get_lock() (ldp.shims.tqdm class method)": [[1, "ldp.shims.tqdm.get_lock", false]], "get_memory() (ldp.graph.memory.memorymodel method)": [[5, "id19", false], [5, "ldp.graph.memory.MemoryModel.get_memory", false]], "get_memory() (ldp.graph.memorymodel method)": [[5, "ldp.graph.MemoryModel.get_memory", false]], "get_next_state() (ldp.agent.simple_agent.simpleagentstate method)": [[2, "ldp.agent.simple_agent.SimpleAgentState.get_next_state", false]], "get_next_state() (ldp.agent.simpleagentstate method)": [[2, "ldp.agent.SimpleAgentState.get_next_state", false]], "get_or_create() (ldp.graph.opctx class method)": [[5, "ldp.graph.OpCtx.get_or_create", false]], "get_or_create() (ldp.graph.ops.opctx class method)": [[5, "ldp.graph.ops.OpCtx.get_or_create", false]], "get_or_make_agent() (in module ldp.main)": [[1, "ldp.main.get_or_make_agent", false]], "get_or_make_environment() (in module ldp.main)": [[1, "ldp.main.get_or_make_environment", false]], "get_prompt_prefix() (ldp.graph.modules.react.tooldescriptionmethods method)": [[6, "ldp.graph.modules.react.ToolDescriptionMethods.get_prompt_prefix", false]], "get_prompt_prefix() (ldp.graph.modules.tooldescriptionmethods method)": [[6, "ldp.graph.modules.ToolDescriptionMethods.get_prompt_prefix", false]], "get_result() (ldp.graph.common_ops.cacheable method)": [[5, "ldp.graph.common_ops.Cacheable.get_result", false]], "get_run_id() (in module ldp.graph)": [[5, "ldp.graph.get_run_id", false]], "get_run_id() (in module ldp.graph.op_utils)": [[5, "ldp.graph.op_utils.get_run_id", false]], "get_supported_openai_params() (ldp.llms.chat.llmresult method)": [[7, "ldp.llms.chat.LLMResult.get_supported_openai_params", false]], "get_supported_openai_params() (ldp.llms.llmresult method)": [[7, "ldp.llms.LLMResult.get_supported_openai_params", false]], "get_training_mode() (in module ldp.graph)": [[5, "ldp.graph.get_training_mode", false]], "get_training_mode() (in module ldp.graph.op_utils)": [[5, "ldp.graph.op_utils.get_training_mode", false]], "get_trajectories() (ldp.data_structures.transitiontree method)": [[1, "ldp.data_structures.TransitionTree.get_trajectories", false]], "get_transition() (ldp.data_structures.transitiontree method)": [[1, "ldp.data_structures.TransitionTree.get_transition", false]], "get_weight() (ldp.data_structures.transitiontree method)": [[1, "ldp.data_structures.TransitionTree.get_weight", false]], "good_examples (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.good_examples", false]], "good_examples (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.good_examples", false]], "good_reward_threshold (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.good_reward_threshold", false]], "good_reward_threshold (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.good_reward_threshold", false]], "grad (ldp.graph.opresult property)": [[5, "ldp.graph.OpResult.grad", false]], "grad (ldp.graph.ops.opresult property)": [[5, "ldp.graph.ops.OpResult.grad", false]], "gradient (ldp.alg.optimizer.ape.apescorefn attribute)": [[4, "ldp.alg.optimizer.ape.APEScoreFn.GRADIENT", false]], "gradient (ldp.alg.optimizer.apescorefn attribute)": [[4, "ldp.alg.optimizer.APEScoreFn.GRADIENT", false]], "httpagentclient (class in ldp.agent)": [[2, "ldp.agent.HTTPAgentClient", false]], "httpagentclient (class in ldp.agent.agent_client)": [[2, "ldp.agent.agent_client.HTTPAgentClient", false]], "hybridembeddingmodel (class in ldp.llms)": [[7, "ldp.llms.HybridEmbeddingModel", false]], "hybridembeddingmodel (class in ldp.llms.embeddings)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel", false]], "id (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.id", false]], "id (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.id", false]], "identityop (class in ldp.graph)": [[5, "ldp.graph.IdentityOp", false]], "identityop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.IdentityOp", false]], "indent_xml() (in module ldp.llms.prompts)": [[7, "ldp.llms.prompts.indent_xml", false]], "infer_dimensions() (ldp.llms.embeddings.hybridembeddingmodel class method)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel.infer_dimensions", false]], "infer_dimensions() (ldp.llms.embeddings.liteembeddingmodel class method)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.infer_dimensions", false]], "infer_dimensions() (ldp.llms.hybridembeddingmodel class method)": [[7, "ldp.llms.HybridEmbeddingModel.infer_dimensions", false]], "infer_dimensions() (ldp.llms.liteembeddingmodel class method)": [[7, "ldp.llms.LiteEmbeddingModel.infer_dimensions", false]], "init_state() (ldp.agent.agent method)": [[2, "ldp.agent.Agent.init_state", false]], "init_state() (ldp.agent.agent.agent method)": [[2, "ldp.agent.agent.Agent.init_state", false]], "init_state() (ldp.agent.agent_client.httpagentclient method)": [[2, "ldp.agent.agent_client.HTTPAgentClient.init_state", false]], "init_state() (ldp.agent.httpagentclient method)": [[2, "ldp.agent.HTTPAgentClient.init_state", false]], "init_state() (ldp.agent.interactive_agent.interactiveagent method)": [[2, "ldp.agent.interactive_agent.InteractiveAgent.init_state", false]], "init_state() (ldp.agent.react_agent.reactagent method)": [[2, "ldp.agent.react_agent.ReActAgent.init_state", false]], "init_state() (ldp.agent.reactagent method)": [[2, "ldp.agent.ReActAgent.init_state", false]], "init_state() (ldp.agent.simple_agent.simpleagent method)": [[2, "ldp.agent.simple_agent.SimpleAgent.init_state", false]], "init_state() (ldp.agent.simpleagent method)": [[2, "ldp.agent.SimpleAgent.init_state", false]], "init_state() (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent method)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.init_state", false]], "init_state() (ldp.agent.treeofthoughtsagent method)": [[2, "ldp.agent.TreeofThoughtsAgent.init_state", false]], "input (ldp.alg.optimizer.ape.example attribute)": [[4, "ldp.alg.optimizer.ape.Example.input", false]], "input (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.input", false]], "input (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.input", false]], "inputs (ldp.graph.opresult property)": [[5, "ldp.graph.OpResult.inputs", false]], "inputs (ldp.graph.ops.opresult property)": [[5, "ldp.graph.ops.OpResult.inputs", false]], "interactiveagent (class in ldp.agent.interactive_agent)": [[2, "ldp.agent.interactive_agent.InteractiveAgent", false]], "json (ldp.graph.modules.react.tooldescriptionmethods attribute)": [[6, "ldp.graph.modules.react.ToolDescriptionMethods.JSON", false]], "json (ldp.graph.modules.tooldescriptionmethods attribute)": [[6, "ldp.graph.modules.ToolDescriptionMethods.JSON", false]], "jsonschemavalidationerror": [[7, "ldp.llms.JSONSchemaValidationError", false], [7, "ldp.llms.chat.JSONSchemaValidationError", false]], "ldp": [[1, "module-ldp", false]], "ldp.agent": [[2, "module-ldp.agent", false]], "ldp.agent.agent": [[2, "module-ldp.agent.agent", false]], "ldp.agent.agent_client": [[2, "module-ldp.agent.agent_client", false]], "ldp.agent.interactive_agent": [[2, "module-ldp.agent.interactive_agent", false]], "ldp.agent.memory_agent": [[2, "module-ldp.agent.memory_agent", false]], "ldp.agent.react_agent": [[2, "module-ldp.agent.react_agent", false]], "ldp.agent.simple_agent": [[2, "module-ldp.agent.simple_agent", false]], "ldp.agent.tree_of_thoughts_agent": [[2, "module-ldp.agent.tree_of_thoughts_agent", false]], "ldp.alg": [[3, "module-ldp.alg", false]], "ldp.alg.algorithms": [[3, "module-ldp.alg.algorithms", false]], "ldp.alg.beam_search": [[3, "module-ldp.alg.beam_search", false]], "ldp.alg.callbacks": [[3, "module-ldp.alg.callbacks", false]], "ldp.alg.datasets": [[3, "module-ldp.alg.datasets", false]], "ldp.alg.optimizer": [[4, "module-ldp.alg.optimizer", false]], "ldp.alg.optimizer.ape": [[4, "module-ldp.alg.optimizer.ape", false]], "ldp.alg.optimizer.memory": [[4, "module-ldp.alg.optimizer.memory", false]], "ldp.alg.optimizer.opt": [[4, "module-ldp.alg.optimizer.opt", false]], "ldp.alg.optimizer.replay_buffers": [[4, "module-ldp.alg.optimizer.replay_buffers", false]], "ldp.alg.rollout": [[3, "module-ldp.alg.rollout", false]], "ldp.alg.runners": [[3, "module-ldp.alg.runners", false]], "ldp.alg.tree_search": [[3, "module-ldp.alg.tree_search", false]], "ldp.data_structures": [[1, "module-ldp.data_structures", false]], "ldp.graph": [[5, "module-ldp.graph", false]], "ldp.graph.async_torch": [[5, "module-ldp.graph.async_torch", false]], "ldp.graph.common_ops": [[5, "module-ldp.graph.common_ops", false]], "ldp.graph.gradient_estimators": [[5, "module-ldp.graph.gradient_estimators", false]], "ldp.graph.loss_ops": [[5, "module-ldp.graph.loss_ops", false]], "ldp.graph.memory": [[5, "module-ldp.graph.memory", false]], "ldp.graph.modules": [[6, "module-ldp.graph.modules", false]], "ldp.graph.modules.llm_call": [[6, "module-ldp.graph.modules.llm_call", false]], "ldp.graph.modules.react": [[6, "module-ldp.graph.modules.react", false]], "ldp.graph.modules.reflect": [[6, "module-ldp.graph.modules.reflect", false]], "ldp.graph.modules.thought": [[6, "module-ldp.graph.modules.thought", false]], "ldp.graph.op_utils": [[5, "module-ldp.graph.op_utils", false]], "ldp.graph.ops": [[5, "module-ldp.graph.ops", false]], "ldp.graph.torch_ops": [[5, "module-ldp.graph.torch_ops", false]], "ldp.llms": [[7, "module-ldp.llms", false]], "ldp.llms.chat": [[7, "module-ldp.llms.chat", false]], "ldp.llms.embeddings": [[7, "module-ldp.llms.embeddings", false]], "ldp.llms.prompts": [[7, "module-ldp.llms.prompts", false]], "ldp.main": [[1, "module-ldp.main", false]], "ldp.shims": [[1, "module-ldp.shims", false]], "ldp.utils": [[1, "module-ldp.utils", false]], "liteembeddingmodel (class in ldp.llms)": [[7, "ldp.llms.LiteEmbeddingModel", false]], "liteembeddingmodel (class in ldp.llms.embeddings)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel", false]], "llm (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.llm", false]], "llm (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.llm", false]], "llm_call_op (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.llm_call_op", false]], "llm_call_op (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.llm_call_op", false]], "llm_model (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.llm_model", false]], "llm_model (ldp.agent.react_agent.reactagent attribute)": [[2, "ldp.agent.react_agent.ReActAgent.llm_model", false]], "llm_model (ldp.agent.reactagent attribute)": [[2, "ldp.agent.ReActAgent.llm_model", false]], "llm_model (ldp.agent.simple_agent.simpleagent attribute)": [[2, "ldp.agent.simple_agent.SimpleAgent.llm_model", false]], "llm_model (ldp.agent.simpleagent attribute)": [[2, "ldp.agent.SimpleAgent.llm_model", false]], "llm_model (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.llm_model", false]], "llm_model (ldp.agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.TreeofThoughtsAgent.llm_model", false]], "llm_model (ldp.graph.modules.reflect.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.reflect.ReflectModuleConfig.llm_model", false]], "llm_model (ldp.graph.modules.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.ReflectModuleConfig.llm_model", false]], "llm_straight_through_estimator() (in module ldp.graph.gradient_estimators)": [[5, "ldp.graph.gradient_estimators.llm_straight_through_estimator", false]], "llmcallop (class in ldp.graph)": [[5, "ldp.graph.LLMCallOp", false]], "llmcallop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.LLMCallOp", false]], "llmmodel (class in ldp.llms)": [[7, "ldp.llms.LLMModel", false]], "llmmodel (class in ldp.llms.chat)": [[7, "ldp.llms.chat.LLMModel", false]], "llmresult (class in ldp.llms)": [[7, "ldp.llms.LLMResult", false]], "llmresult (class in ldp.llms.chat)": [[7, "ldp.llms.chat.LLMResult", false]], "loggingcallback (class in ldp.alg)": [[3, "ldp.alg.LoggingCallback", false]], "loggingcallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.LoggingCallback", false]], "logprob (ldp.graph.opresult property)": [[5, "ldp.graph.OpResult.logprob", false]], "logprob (ldp.graph.ops.opresult property)": [[5, "ldp.graph.ops.OpResult.logprob", false]], "logprob (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.logprob", false]], "logprob (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.logprob", false]], "logsumexp() (in module ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.logsumexp", false]], "main() (in module ldp.main)": [[1, "ldp.main.main", false]], "make_act_agent() (ldp.agent.react_agent.reactagent class method)": [[2, "ldp.agent.react_agent.ReActAgent.make_act_agent", false]], "make_act_agent() (ldp.agent.reactagent class method)": [[2, "ldp.agent.ReActAgent.make_act_agent", false]], "make_rollout_manager() (ldp.alg.evaluatorconfig method)": [[3, "ldp.alg.EvaluatorConfig.make_rollout_manager", false]], "make_rollout_manager() (ldp.alg.runners.evaluatorconfig method)": [[3, "ldp.alg.runners.EvaluatorConfig.make_rollout_manager", false]], "make_simple_agent_server() (in module ldp.agent)": [[2, "ldp.agent.make_simple_agent_server", false]], "make_simple_agent_server() (in module ldp.agent.agent_client)": [[2, "ldp.agent.agent_client.make_simple_agent_server", false]], "max_examples (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.max_examples", false]], "max_examples (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.max_examples", false]], "max_rollout_steps (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.max_rollout_steps", false]], "max_rollout_steps (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.max_rollout_steps", false]], "max_rollout_steps (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.max_rollout_steps", false]], "meanmetricscallback (class in ldp.alg)": [[3, "ldp.alg.MeanMetricsCallback", false]], "meanmetricscallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.MeanMetricsCallback", false]], "memories (ldp.graph.memory.memorymodel attribute)": [[5, "id20", false], [5, "ldp.graph.memory.MemoryModel.memories", false]], "memories (ldp.graph.memorymodel attribute)": [[5, "ldp.graph.MemoryModel.memories", false]], "memory (class in ldp.graph)": [[5, "ldp.graph.Memory", false]], "memory (class in ldp.graph.memory)": [[5, "ldp.graph.memory.Memory", false]], "memory_factory (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.memory_factory", false]], "memory_factory (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.memory_factory", false]], "memory_factory (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.memory_factory", false]], "memory_op (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.memory_op", false]], "memory_op (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.memory_op", false]], "memory_op (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.memory_op", false]], "memory_prompt (ldp.agent.memory_agent.memoryagent attribute)": [[2, "ldp.agent.memory_agent.MemoryAgent.memory_prompt", false]], "memory_prompt (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.memory_prompt", false]], "memory_template (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.memory_template", false]], "memory_template (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.memory_template", false]], "memory_template (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.memory_template", false]], "memoryagent (class in ldp.agent)": [[2, "ldp.agent.MemoryAgent", false]], "memoryagent (class in ldp.agent.memory_agent)": [[2, "ldp.agent.memory_agent.MemoryAgent", false]], "memoryfactory (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.MemoryFactory", false]], "memoryfactory (class in ldp.alg.optimizer.memory)": [[4, "ldp.alg.optimizer.memory.MemoryFactory", false]], "memorymodel (class in ldp.graph)": [[5, "ldp.graph.MemoryModel", false]], "memorymodel (class in ldp.graph.memory)": [[5, "id0", false], [5, "ldp.graph.memory.MemoryModel", false]], "memoryop (class in ldp.graph)": [[5, "ldp.graph.MemoryOp", false]], "memoryop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.MemoryOp", false]], "memoryopt (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.MemoryOpt", false]], "memoryopt (class in ldp.alg.optimizer.memory)": [[4, "ldp.alg.optimizer.memory.MemoryOpt", false]], "merge_identical_nodes() (ldp.data_structures.transitiontree method)": [[1, "ldp.data_structures.TransitionTree.merge_identical_nodes", false]], "messages (ldp.agent.simple_agent.simpleagentstate attribute)": [[2, "ldp.agent.simple_agent.SimpleAgentState.messages", false]], "messages (ldp.agent.simpleagentstate attribute)": [[2, "ldp.agent.SimpleAgentState.messages", false]], "messages (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.messages", false]], "messages (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.messages", false]], "metadata (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.metadata", false]], "metadata (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.metadata", false]], "metadata (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.metadata", false]], "model (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.model", false]], "model (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.model", false]], "model_computed_fields (ldp.agent.agent.agentconfig attribute)": [[2, "ldp.agent.agent.AgentConfig.model_computed_fields", false]], "model_computed_fields (ldp.agent.agentconfig attribute)": [[2, "ldp.agent.AgentConfig.model_computed_fields", false]], "model_computed_fields (ldp.agent.memory_agent.memoryagent attribute)": [[2, "ldp.agent.memory_agent.MemoryAgent.model_computed_fields", false]], "model_computed_fields (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.model_computed_fields", false]], "model_computed_fields (ldp.agent.react_agent.reactagent attribute)": [[2, "ldp.agent.react_agent.ReActAgent.model_computed_fields", false]], "model_computed_fields (ldp.agent.reactagent attribute)": [[2, "ldp.agent.ReActAgent.model_computed_fields", false]], "model_computed_fields (ldp.agent.simple_agent.simpleagent attribute)": [[2, "ldp.agent.simple_agent.SimpleAgent.model_computed_fields", false]], "model_computed_fields (ldp.agent.simple_agent.simpleagentstate attribute)": [[2, "ldp.agent.simple_agent.SimpleAgentState.model_computed_fields", false]], "model_computed_fields (ldp.agent.simpleagent attribute)": [[2, "ldp.agent.SimpleAgent.model_computed_fields", false]], "model_computed_fields (ldp.agent.simpleagentstate attribute)": [[2, "ldp.agent.SimpleAgentState.model_computed_fields", false]], "model_computed_fields (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.model_computed_fields", false]], "model_computed_fields (ldp.agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.TreeofThoughtsAgent.model_computed_fields", false]], "model_computed_fields (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.model_computed_fields", false]], "model_computed_fields (ldp.alg.offlinetrainerconfig attribute)": [[3, "ldp.alg.OfflineTrainerConfig.model_computed_fields", false]], "model_computed_fields (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.ape.example attribute)": [[4, "ldp.alg.optimizer.ape.Example.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.ape.outputprompt attribute)": [[4, "ldp.alg.optimizer.ape.OutputPrompt.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.memory.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.memory.PositiveMemoryOpt.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.optimizerconfig attribute)": [[4, "ldp.alg.optimizer.OptimizerConfig.model_computed_fields", false]], "model_computed_fields (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.model_computed_fields", false]], "model_computed_fields (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.model_computed_fields", false]], "model_computed_fields (ldp.alg.runners.offlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OfflineTrainerConfig.model_computed_fields", false]], "model_computed_fields (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.model_computed_fields", false]], "model_computed_fields (ldp.data_structures.trajectory attribute)": [[1, "ldp.data_structures.Trajectory.model_computed_fields", false]], "model_computed_fields (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.model_computed_fields", false]], "model_computed_fields (ldp.graph.callid attribute)": [[5, "ldp.graph.CallID.model_computed_fields", false]], "model_computed_fields (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.model_computed_fields", false]], "model_computed_fields (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.model_computed_fields", false]], "model_computed_fields (ldp.graph.memory.memorymodel attribute)": [[5, "id21", false], [5, "ldp.graph.memory.MemoryModel.model_computed_fields", false]], "model_computed_fields (ldp.graph.memory.uindexmemorymodel attribute)": [[5, "ldp.graph.memory.UIndexMemoryModel.model_computed_fields", false]], "model_computed_fields (ldp.graph.memorymodel attribute)": [[5, "ldp.graph.MemoryModel.model_computed_fields", false]], "model_computed_fields (ldp.graph.modules.reflect.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.reflect.ReflectModuleConfig.model_computed_fields", false]], "model_computed_fields (ldp.graph.modules.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.ReflectModuleConfig.model_computed_fields", false]], "model_computed_fields (ldp.graph.op_utils.callid attribute)": [[5, "ldp.graph.op_utils.CallID.model_computed_fields", false]], "model_computed_fields (ldp.graph.opctx attribute)": [[5, "ldp.graph.OpCtx.model_computed_fields", false]], "model_computed_fields (ldp.graph.ops.opctx attribute)": [[5, "ldp.graph.ops.OpCtx.model_computed_fields", false]], "model_computed_fields (ldp.llms.chat.llmmodel attribute)": [[7, "ldp.llms.chat.LLMModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.model_computed_fields", false]], "model_computed_fields (ldp.llms.chat.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.embeddingmodel attribute)": [[7, "ldp.llms.EmbeddingModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.embeddings.embeddingmodel attribute)": [[7, "ldp.llms.embeddings.EmbeddingModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.embeddings.hybridembeddingmodel attribute)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.embeddings.liteembeddingmodel attribute)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.embeddings.sparseembeddingmodel attribute)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.hybridembeddingmodel attribute)": [[7, "ldp.llms.HybridEmbeddingModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.liteembeddingmodel attribute)": [[7, "ldp.llms.LiteEmbeddingModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.llmmodel attribute)": [[7, "ldp.llms.LLMModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.model_computed_fields", false]], "model_computed_fields (ldp.llms.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.MultipleCompletionLLMModel.model_computed_fields", false]], "model_computed_fields (ldp.llms.sparseembeddingmodel attribute)": [[7, "ldp.llms.SparseEmbeddingModel.model_computed_fields", false]], "model_config (ldp.agent.agent.agentconfig attribute)": [[2, "ldp.agent.agent.AgentConfig.model_config", false]], "model_config (ldp.agent.agentconfig attribute)": [[2, "ldp.agent.AgentConfig.model_config", false]], "model_config (ldp.agent.memory_agent.memoryagent attribute)": [[2, "ldp.agent.memory_agent.MemoryAgent.model_config", false]], "model_config (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.model_config", false]], "model_config (ldp.agent.react_agent.reactagent attribute)": [[2, "ldp.agent.react_agent.ReActAgent.model_config", false]], "model_config (ldp.agent.reactagent attribute)": [[2, "ldp.agent.ReActAgent.model_config", false]], "model_config (ldp.agent.simple_agent.simpleagent attribute)": [[2, "ldp.agent.simple_agent.SimpleAgent.model_config", false]], "model_config (ldp.agent.simple_agent.simpleagentstate attribute)": [[2, "ldp.agent.simple_agent.SimpleAgentState.model_config", false]], "model_config (ldp.agent.simpleagent attribute)": [[2, "ldp.agent.SimpleAgent.model_config", false]], "model_config (ldp.agent.simpleagentstate attribute)": [[2, "ldp.agent.SimpleAgentState.model_config", false]], "model_config (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.model_config", false]], "model_config (ldp.agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.TreeofThoughtsAgent.model_config", false]], "model_config (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.model_config", false]], "model_config (ldp.alg.offlinetrainerconfig attribute)": [[3, "ldp.alg.OfflineTrainerConfig.model_config", false]], "model_config (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.model_config", false]], "model_config (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.model_config", false]], "model_config (ldp.alg.optimizer.ape.example attribute)": [[4, "ldp.alg.optimizer.ape.Example.model_config", false]], "model_config (ldp.alg.optimizer.ape.outputprompt attribute)": [[4, "ldp.alg.optimizer.ape.OutputPrompt.model_config", false]], "model_config (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.model_config", false]], "model_config (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.model_config", false]], "model_config (ldp.alg.optimizer.memory.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.memory.PositiveMemoryOpt.model_config", false]], "model_config (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.model_config", false]], "model_config (ldp.alg.optimizer.optimizerconfig attribute)": [[4, "ldp.alg.optimizer.OptimizerConfig.model_config", false]], "model_config (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.model_config", false]], "model_config (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.model_config", false]], "model_config (ldp.alg.runners.offlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OfflineTrainerConfig.model_config", false]], "model_config (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.model_config", false]], "model_config (ldp.data_structures.trajectory attribute)": [[1, "ldp.data_structures.Trajectory.model_config", false]], "model_config (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.model_config", false]], "model_config (ldp.graph.callid attribute)": [[5, "ldp.graph.CallID.model_config", false]], "model_config (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.model_config", false]], "model_config (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.model_config", false]], "model_config (ldp.graph.memory.memorymodel attribute)": [[5, "id22", false], [5, "ldp.graph.memory.MemoryModel.model_config", false]], "model_config (ldp.graph.memory.uindexmemorymodel attribute)": [[5, "ldp.graph.memory.UIndexMemoryModel.model_config", false]], "model_config (ldp.graph.memorymodel attribute)": [[5, "ldp.graph.MemoryModel.model_config", false]], "model_config (ldp.graph.modules.reflect.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.reflect.ReflectModuleConfig.model_config", false]], "model_config (ldp.graph.modules.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.ReflectModuleConfig.model_config", false]], "model_config (ldp.graph.op_utils.callid attribute)": [[5, "ldp.graph.op_utils.CallID.model_config", false]], "model_config (ldp.graph.opctx attribute)": [[5, "ldp.graph.OpCtx.model_config", false]], "model_config (ldp.graph.ops.opctx attribute)": [[5, "ldp.graph.ops.OpCtx.model_config", false]], "model_config (ldp.llms.chat.llmmodel attribute)": [[7, "ldp.llms.chat.LLMModel.model_config", false]], "model_config (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.model_config", false]], "model_config (ldp.llms.chat.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.model_config", false]], "model_config (ldp.llms.embeddingmodel attribute)": [[7, "ldp.llms.EmbeddingModel.model_config", false]], "model_config (ldp.llms.embeddings.embeddingmodel attribute)": [[7, "ldp.llms.embeddings.EmbeddingModel.model_config", false]], "model_config (ldp.llms.embeddings.hybridembeddingmodel attribute)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel.model_config", false]], "model_config (ldp.llms.embeddings.liteembeddingmodel attribute)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.model_config", false]], "model_config (ldp.llms.embeddings.sparseembeddingmodel attribute)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel.model_config", false]], "model_config (ldp.llms.hybridembeddingmodel attribute)": [[7, "ldp.llms.HybridEmbeddingModel.model_config", false]], "model_config (ldp.llms.liteembeddingmodel attribute)": [[7, "ldp.llms.LiteEmbeddingModel.model_config", false]], "model_config (ldp.llms.llmmodel attribute)": [[7, "ldp.llms.LLMModel.model_config", false]], "model_config (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.model_config", false]], "model_config (ldp.llms.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.MultipleCompletionLLMModel.model_config", false]], "model_config (ldp.llms.sparseembeddingmodel attribute)": [[7, "ldp.llms.SparseEmbeddingModel.model_config", false]], "model_dump_json() (ldp.data_structures.transition method)": [[1, "ldp.data_structures.Transition.model_dump_json", false]], "model_fields (ldp.agent.agent.agentconfig attribute)": [[2, "ldp.agent.agent.AgentConfig.model_fields", false]], "model_fields (ldp.agent.agentconfig attribute)": [[2, "ldp.agent.AgentConfig.model_fields", false]], "model_fields (ldp.agent.memory_agent.memoryagent attribute)": [[2, "ldp.agent.memory_agent.MemoryAgent.model_fields", false]], "model_fields (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.model_fields", false]], "model_fields (ldp.agent.react_agent.reactagent attribute)": [[2, "ldp.agent.react_agent.ReActAgent.model_fields", false]], "model_fields (ldp.agent.reactagent attribute)": [[2, "ldp.agent.ReActAgent.model_fields", false]], "model_fields (ldp.agent.simple_agent.simpleagent attribute)": [[2, "ldp.agent.simple_agent.SimpleAgent.model_fields", false]], "model_fields (ldp.agent.simple_agent.simpleagentstate attribute)": [[2, "ldp.agent.simple_agent.SimpleAgentState.model_fields", false]], "model_fields (ldp.agent.simpleagent attribute)": [[2, "ldp.agent.SimpleAgent.model_fields", false]], "model_fields (ldp.agent.simpleagentstate attribute)": [[2, "ldp.agent.SimpleAgentState.model_fields", false]], "model_fields (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.model_fields", false]], "model_fields (ldp.agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.TreeofThoughtsAgent.model_fields", false]], "model_fields (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.model_fields", false]], "model_fields (ldp.alg.offlinetrainerconfig attribute)": [[3, "ldp.alg.OfflineTrainerConfig.model_fields", false]], "model_fields (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.model_fields", false]], "model_fields (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.model_fields", false]], "model_fields (ldp.alg.optimizer.ape.example attribute)": [[4, "ldp.alg.optimizer.ape.Example.model_fields", false]], "model_fields (ldp.alg.optimizer.ape.outputprompt attribute)": [[4, "ldp.alg.optimizer.ape.OutputPrompt.model_fields", false]], "model_fields (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.model_fields", false]], "model_fields (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.model_fields", false]], "model_fields (ldp.alg.optimizer.memory.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.memory.PositiveMemoryOpt.model_fields", false]], "model_fields (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.model_fields", false]], "model_fields (ldp.alg.optimizer.optimizerconfig attribute)": [[4, "ldp.alg.optimizer.OptimizerConfig.model_fields", false]], "model_fields (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.model_fields", false]], "model_fields (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.model_fields", false]], "model_fields (ldp.alg.runners.offlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OfflineTrainerConfig.model_fields", false]], "model_fields (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.model_fields", false]], "model_fields (ldp.data_structures.trajectory attribute)": [[1, "ldp.data_structures.Trajectory.model_fields", false]], "model_fields (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.model_fields", false]], "model_fields (ldp.graph.callid attribute)": [[5, "ldp.graph.CallID.model_fields", false]], "model_fields (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.model_fields", false]], "model_fields (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.model_fields", false]], "model_fields (ldp.graph.memory.memorymodel attribute)": [[5, "id23", false], [5, "ldp.graph.memory.MemoryModel.model_fields", false]], "model_fields (ldp.graph.memory.uindexmemorymodel attribute)": [[5, "ldp.graph.memory.UIndexMemoryModel.model_fields", false]], "model_fields (ldp.graph.memorymodel attribute)": [[5, "ldp.graph.MemoryModel.model_fields", false]], "model_fields (ldp.graph.modules.reflect.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.reflect.ReflectModuleConfig.model_fields", false]], "model_fields (ldp.graph.modules.reflectmoduleconfig attribute)": [[6, "ldp.graph.modules.ReflectModuleConfig.model_fields", false]], "model_fields (ldp.graph.op_utils.callid attribute)": [[5, "ldp.graph.op_utils.CallID.model_fields", false]], "model_fields (ldp.graph.opctx attribute)": [[5, "ldp.graph.OpCtx.model_fields", false]], "model_fields (ldp.graph.ops.opctx attribute)": [[5, "ldp.graph.ops.OpCtx.model_fields", false]], "model_fields (ldp.llms.chat.llmmodel attribute)": [[7, "ldp.llms.chat.LLMModel.model_fields", false]], "model_fields (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.model_fields", false]], "model_fields (ldp.llms.chat.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.model_fields", false]], "model_fields (ldp.llms.embeddingmodel attribute)": [[7, "ldp.llms.EmbeddingModel.model_fields", false]], "model_fields (ldp.llms.embeddings.embeddingmodel attribute)": [[7, "ldp.llms.embeddings.EmbeddingModel.model_fields", false]], "model_fields (ldp.llms.embeddings.hybridembeddingmodel attribute)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel.model_fields", false]], "model_fields (ldp.llms.embeddings.liteembeddingmodel attribute)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.model_fields", false]], "model_fields (ldp.llms.embeddings.sparseembeddingmodel attribute)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel.model_fields", false]], "model_fields (ldp.llms.hybridembeddingmodel attribute)": [[7, "ldp.llms.HybridEmbeddingModel.model_fields", false]], "model_fields (ldp.llms.liteembeddingmodel attribute)": [[7, "ldp.llms.LiteEmbeddingModel.model_fields", false]], "model_fields (ldp.llms.llmmodel attribute)": [[7, "ldp.llms.LLMModel.model_fields", false]], "model_fields (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.model_fields", false]], "model_fields (ldp.llms.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.MultipleCompletionLLMModel.model_fields", false]], "model_fields (ldp.llms.sparseembeddingmodel attribute)": [[7, "ldp.llms.SparseEmbeddingModel.model_fields", false]], "model_post_init() (ldp.alg.optimizer.ape.apeopt method)": [[4, "ldp.alg.optimizer.ape.APEOpt.model_post_init", false]], "model_post_init() (ldp.alg.optimizer.apeopt method)": [[4, "ldp.alg.optimizer.APEOpt.model_post_init", false]], "model_post_init() (ldp.graph.memory.memorymodel method)": [[5, "id24", false], [5, "ldp.graph.memory.MemoryModel.model_post_init", false]], "model_post_init() (ldp.graph.memory.uindexmemorymodel method)": [[5, "ldp.graph.memory.UIndexMemoryModel.model_post_init", false]], "model_post_init() (ldp.graph.memorymodel method)": [[5, "ldp.graph.MemoryModel.model_post_init", false]], "model_post_init() (ldp.graph.opctx method)": [[5, "ldp.graph.OpCtx.model_post_init", false]], "model_post_init() (ldp.graph.ops.opctx method)": [[5, "ldp.graph.ops.OpCtx.model_post_init", false]], "models (ldp.llms.embeddings.hybridembeddingmodel attribute)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel.models", false]], "models (ldp.llms.hybridembeddingmodel attribute)": [[7, "ldp.llms.HybridEmbeddingModel.models", false]], "module": [[1, "module-ldp", false], [1, "module-ldp.data_structures", false], [1, "module-ldp.main", false], [1, "module-ldp.shims", false], [1, "module-ldp.utils", false], [2, "module-ldp.agent", false], [2, "module-ldp.agent.agent", false], [2, "module-ldp.agent.agent_client", false], [2, "module-ldp.agent.interactive_agent", false], [2, "module-ldp.agent.memory_agent", false], [2, "module-ldp.agent.react_agent", false], [2, "module-ldp.agent.simple_agent", false], [2, "module-ldp.agent.tree_of_thoughts_agent", false], [3, "module-ldp.alg", false], [3, "module-ldp.alg.algorithms", false], [3, "module-ldp.alg.beam_search", false], [3, "module-ldp.alg.callbacks", false], [3, "module-ldp.alg.datasets", false], [3, "module-ldp.alg.rollout", false], [3, "module-ldp.alg.runners", false], [3, "module-ldp.alg.tree_search", false], [4, "module-ldp.alg.optimizer", false], [4, "module-ldp.alg.optimizer.ape", false], [4, "module-ldp.alg.optimizer.memory", false], [4, "module-ldp.alg.optimizer.opt", false], [4, "module-ldp.alg.optimizer.replay_buffers", false], [5, "module-ldp.graph", false], [5, "module-ldp.graph.async_torch", false], [5, "module-ldp.graph.common_ops", false], [5, "module-ldp.graph.gradient_estimators", false], [5, "module-ldp.graph.loss_ops", false], [5, "module-ldp.graph.memory", false], [5, "module-ldp.graph.op_utils", false], [5, "module-ldp.graph.ops", false], [5, "module-ldp.graph.torch_ops", false], [6, "module-ldp.graph.modules", false], [6, "module-ldp.graph.modules.llm_call", false], [6, "module-ldp.graph.modules.react", false], [6, "module-ldp.graph.modules.reflect", false], [6, "module-ldp.graph.modules.thought", false], [7, "module-ldp.llms", false], [7, "module-ldp.llms.chat", false], [7, "module-ldp.llms.embeddings", false], [7, "module-ldp.llms.prompts", false]], "monitor (ldp.shims.tqdm attribute)": [[1, "ldp.shims.tqdm.monitor", false]], "monitor_interval (ldp.shims.tqdm attribute)": [[1, "ldp.shims.tqdm.monitor_interval", false]], "moveto() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.moveto", false]], "mselossop (class in ldp.graph)": [[5, "ldp.graph.MSELossOp", false]], "mselossop (class in ldp.graph.loss_ops)": [[5, "ldp.graph.loss_ops.MSELossOp", false]], "multiplecompletionllmmodel (class in ldp.llms)": [[7, "ldp.llms.MultipleCompletionLLMModel", false]], "multiplecompletionllmmodel (class in ldp.llms.chat)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel", false]], "name (ldp.graph.op attribute)": [[5, "ldp.graph.Op.name", false]], "name (ldp.graph.ops.op attribute)": [[5, "ldp.graph.ops.Op.name", false]], "name (ldp.llms.chat.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.name", false]], "name (ldp.llms.embeddingmodel attribute)": [[7, "ldp.llms.EmbeddingModel.name", false]], "name (ldp.llms.embeddings.embeddingmodel attribute)": [[7, "ldp.llms.embeddings.EmbeddingModel.name", false]], "name (ldp.llms.embeddings.hybridembeddingmodel attribute)": [[7, "ldp.llms.embeddings.HybridEmbeddingModel.name", false]], "name (ldp.llms.embeddings.liteembeddingmodel attribute)": [[7, "ldp.llms.embeddings.LiteEmbeddingModel.name", false]], "name (ldp.llms.embeddings.sparseembeddingmodel attribute)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel.name", false]], "name (ldp.llms.hybridembeddingmodel attribute)": [[7, "ldp.llms.HybridEmbeddingModel.name", false]], "name (ldp.llms.liteembeddingmodel attribute)": [[7, "ldp.llms.LiteEmbeddingModel.name", false]], "name (ldp.llms.llmmodel attribute)": [[7, "ldp.llms.LLMModel.name", false]], "name (ldp.llms.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.MultipleCompletionLLMModel.name", false]], "name (ldp.llms.sparseembeddingmodel attribute)": [[7, "ldp.llms.SparseEmbeddingModel.name", false]], "named_ops() (ldp.agent.agent method)": [[2, "ldp.agent.Agent.named_ops", false]], "named_ops() (ldp.agent.agent.agent method)": [[2, "ldp.agent.agent.Agent.named_ops", false]], "next_agent_state (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.next_agent_state", false]], "next_observation (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.next_observation", false]], "no_observation (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.NO_OBSERVATION", false]], "num_eval_iterations (ldp.alg.evaluatorconfig attribute)": [[3, "ldp.alg.EvaluatorConfig.num_eval_iterations", false]], "num_eval_iterations (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.num_eval_iterations", false]], "num_eval_iterations (ldp.alg.runners.evaluatorconfig attribute)": [[3, "ldp.alg.runners.EvaluatorConfig.num_eval_iterations", false]], "num_memories (ldp.agent.memory_agent.memoryagent attribute)": [[2, "ldp.agent.memory_agent.MemoryAgent.num_memories", false]], "num_memories (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.num_memories", false]], "num_rollouts_per_env (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.num_rollouts_per_env", false]], "num_rollouts_per_env (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.num_rollouts_per_env", false]], "num_train_iterations (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.num_train_iterations", false]], "num_train_iterations (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.num_train_iterations", false]], "observation (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.observation", false]], "offlinetrainer (class in ldp.alg)": [[3, "ldp.alg.OfflineTrainer", false]], "offlinetrainer (class in ldp.alg.runners)": [[3, "ldp.alg.runners.OfflineTrainer", false]], "offlinetrainerconfig (class in ldp.alg)": [[3, "ldp.alg.OfflineTrainerConfig", false]], "offlinetrainerconfig (class in ldp.alg.runners)": [[3, "ldp.alg.runners.OfflineTrainerConfig", false]], "onlinetrainer (class in ldp.alg)": [[3, "ldp.alg.OnlineTrainer", false]], "onlinetrainer (class in ldp.alg.runners)": [[3, "ldp.alg.runners.OnlineTrainer", false]], "onlinetrainerconfig (class in ldp.alg)": [[3, "ldp.alg.OnlineTrainerConfig", false]], "onlinetrainerconfig (class in ldp.alg.runners)": [[3, "ldp.alg.runners.OnlineTrainerConfig", false]], "op (class in ldp.graph)": [[5, "ldp.graph.Op", false]], "op (class in ldp.graph.ops)": [[5, "ldp.graph.ops.Op", false]], "op_call() (in module ldp.graph)": [[5, "ldp.graph.op_call", false]], "op_call() (in module ldp.graph.op_utils)": [[5, "ldp.graph.op_utils.op_call", false]], "op_class (ldp.graph.opresult property)": [[5, "ldp.graph.OpResult.op_class", false]], "op_class (ldp.graph.ops.opresult property)": [[5, "ldp.graph.ops.OpResult.op_class", false]], "op_name (ldp.graph.opctx attribute)": [[5, "ldp.graph.OpCtx.op_name", false]], "op_name (ldp.graph.ops.opctx attribute)": [[5, "ldp.graph.ops.OpCtx.op_name", false]], "opctx (class in ldp.graph)": [[5, "ldp.graph.OpCtx", false]], "opctx (class in ldp.graph.ops)": [[5, "ldp.graph.ops.OpCtx", false]], "openai (ldp.agent.defaultllmmodelnames attribute)": [[2, "ldp.agent.DefaultLLMModelNames.OPENAI", false]], "opresult (class in ldp.graph)": [[5, "ldp.graph.OpResult", false]], "opresult (class in ldp.graph.ops)": [[5, "ldp.graph.ops.OpResult", false]], "optimizer (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.Optimizer", false]], "optimizer (class in ldp.alg.optimizer.opt)": [[4, "ldp.alg.optimizer.opt.Optimizer", false]], "optimizer_kwargs (ldp.alg.optimizer.optimizerconfig attribute)": [[4, "ldp.alg.optimizer.OptimizerConfig.optimizer_kwargs", false]], "optimizer_type (ldp.alg.optimizer.optimizerconfig attribute)": [[4, "ldp.alg.optimizer.OptimizerConfig.optimizer_type", false]], "optimizerconfig (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.OptimizerConfig", false]], "output (ldp.alg.optimizer.ape.example attribute)": [[4, "ldp.alg.optimizer.ape.Example.output", false]], "output (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.output", false]], "output (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.output", false]], "output_op (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.output_op", false]], "output_op (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.output_op", false]], "output_op (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.output_op", false]], "outputprompt (class in ldp.alg.optimizer.ape)": [[4, "ldp.alg.optimizer.ape.OutputPrompt", false]], "pandas() (ldp.shims.tqdm class method)": [[1, "ldp.shims.tqdm.pandas", false]], "parse_message() (in module ldp.graph.modules)": [[6, "ldp.graph.modules.parse_message", false]], "parse_message() (in module ldp.graph.modules.react)": [[6, "ldp.graph.modules.react.parse_message", false]], "parse_message() (ldp.graph.modules.react.reactmodule static method)": [[6, "ldp.graph.modules.react.ReActModule.parse_message", false]], "parse_message() (ldp.graph.modules.reactmodule static method)": [[6, "ldp.graph.modules.ReActModule.parse_message", false]], "parsedllmcallmodule (class in ldp.graph.modules)": [[6, "ldp.graph.modules.ParsedLLMCallModule", false]], "parsedllmcallmodule (class in ldp.graph.modules.llm_call)": [[6, "ldp.graph.modules.llm_call.ParsedLLMCallModule", false]], "positivememoryopt (class in ldp.alg.optimizer)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt", false]], "positivememoryopt (class in ldp.alg.optimizer.memory)": [[4, "ldp.alg.optimizer.memory.PositiveMemoryOpt", false]], "prepend_sys() (in module ldp.llms)": [[7, "ldp.llms.prepend_sys", false]], "prepend_sys() (in module ldp.llms.prompts)": [[7, "ldp.llms.prompts.prepend_sys", false]], "prepend_sys_and_append_sys() (in module ldp.llms)": [[7, "ldp.llms.prepend_sys_and_append_sys", false]], "prepend_sys_and_append_sys() (in module ldp.llms.prompts)": [[7, "ldp.llms.prompts.prepend_sys_and_append_sys", false]], "prompt (ldp.agent.memory_agent.memoryagent attribute)": [[2, "ldp.agent.memory_agent.MemoryAgent.prompt", false]], "prompt (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.prompt", false]], "prompt (ldp.alg.optimizer.ape.outputprompt attribute)": [[4, "ldp.alg.optimizer.ape.OutputPrompt.prompt", false]], "prompt (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.prompt", false]], "prompt (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.prompt", false]], "prompt_and_completion_costs (ldp.llms.chat.llmresult property)": [[7, "ldp.llms.chat.LLMResult.prompt_and_completion_costs", false]], "prompt_and_completion_costs (ldp.llms.llmresult property)": [[7, "ldp.llms.LLMResult.prompt_and_completion_costs", false]], "prompt_count (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.prompt_count", false]], "prompt_count (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.prompt_count", false]], "prompt_op (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.prompt_op", false]], "prompt_op (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.prompt_op", false]], "promptop (class in ldp.graph)": [[5, "ldp.graph.PromptOp", false]], "promptop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.PromptOp", false]], "proposal_prompt_func (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.proposal_prompt_func", false]], "proposal_prompt_func (ldp.agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.TreeofThoughtsAgent.proposal_prompt_func", false]], "provider (ldp.llms.chat.llmresult property)": [[7, "ldp.llms.chat.LLMResult.provider", false]], "provider (ldp.llms.llmresult property)": [[7, "ldp.llms.LLMResult.provider", false]], "query (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.query", false]], "query (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.query", false]], "query (ldp.llms.embeddingmodes attribute)": [[7, "ldp.llms.EmbeddingModes.QUERY", false]], "query (ldp.llms.embeddings.embeddingmodes attribute)": [[7, "ldp.llms.embeddings.EmbeddingModes.QUERY", false]], "query_factory (ldp.agent.memory_agent.memoryagent attribute)": [[2, "ldp.agent.memory_agent.MemoryAgent.query_factory", false]], "query_factory (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.query_factory", false]], "query_prompt (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.query_prompt", false]], "query_prompt (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.query_prompt", false]], "reactagent (class in ldp.agent)": [[2, "ldp.agent.ReActAgent", false]], "reactagent (class in ldp.agent.react_agent)": [[2, "ldp.agent.react_agent.ReActAgent", false]], "reactmodule (class in ldp.graph.modules)": [[6, "ldp.graph.modules.ReActModule", false]], "reactmodule (class in ldp.graph.modules.react)": [[6, "ldp.graph.modules.react.ReActModule", false]], "reflectmodule (class in ldp.graph.modules)": [[6, "ldp.graph.modules.ReflectModule", false]], "reflectmodule (class in ldp.graph.modules.reflect)": [[6, "ldp.graph.modules.reflect.ReflectModule", false]], "reflectmoduleconfig (class in ldp.graph.modules)": [[6, "ldp.graph.modules.ReflectModuleConfig", false]], "reflectmoduleconfig (class in ldp.graph.modules.reflect)": [[6, "ldp.graph.modules.reflect.ReflectModuleConfig", false]], "refresh() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.refresh", false]], "reraise_exc_as() (in module ldp.alg.rollout)": [[3, "ldp.alg.rollout.reraise_exc_as", false]], "reset() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.reset", false]], "resize() (ldp.alg.optimizer.replay_buffers.circularreplaybuffer method)": [[4, "ldp.alg.optimizer.replay_buffers.CircularReplayBuffer.resize", false]], "resolve_fully_qualified_name() (in module ldp.graph.ops)": [[5, "ldp.graph.ops.resolve_fully_qualified_name", false]], "reward (ldp.alg.optimizer.ape.apescorefn attribute)": [[4, "ldp.alg.optimizer.ape.APEScoreFn.REWARD", false]], "reward (ldp.alg.optimizer.apescorefn attribute)": [[4, "ldp.alg.optimizer.APEScoreFn.REWARD", false]], "reward (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.reward", false]], "reward_discount (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.reward_discount", false]], "reward_discount (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.reward_discount", false]], "reward_discount (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.reward_discount", false]], "reward_discount (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.reward_discount", false]], "reward_discount (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.reward_discount", false]], "rolloutdebugdumpcallback (class in ldp.alg)": [[3, "ldp.alg.RolloutDebugDumpCallback", false]], "rolloutdebugdumpcallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.RolloutDebugDumpCallback", false]], "rolloutmanager (class in ldp.alg)": [[3, "ldp.alg.RolloutManager", false]], "rolloutmanager (class in ldp.alg.rollout)": [[3, "ldp.alg.rollout.RolloutManager", false]], "run() (ldp.alg.evaluator method)": [[3, "ldp.alg.Evaluator.run", false]], "run() (ldp.alg.runners.evaluator method)": [[3, "ldp.alg.runners.Evaluator.run", false]], "run_id (ldp.graph.callid attribute)": [[5, "ldp.graph.CallID.run_id", false]], "run_id (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.run_id", false]], "run_id (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.run_id", false]], "run_id (ldp.graph.op_utils.callid attribute)": [[5, "ldp.graph.op_utils.CallID.run_id", false]], "run_id (ldp.graph.opresult property)": [[5, "ldp.graph.OpResult.run_id", false]], "run_id (ldp.graph.ops.opresult property)": [[5, "ldp.graph.ops.OpResult.run_id", false]], "safe_access_index() (ldp.graph.memory.memorymodel method)": [[5, "id25", false], [5, "ldp.graph.memory.MemoryModel.safe_access_index", false]], "safe_access_index() (ldp.graph.memorymodel method)": [[5, "ldp.graph.MemoryModel.safe_access_index", false]], "sample_trajectories() (ldp.alg.beam_search.beamsearchrollout method)": [[3, "ldp.alg.beam_search.BeamSearchRollout.sample_trajectories", false]], "sample_trajectories() (ldp.alg.beamsearchrollout method)": [[3, "ldp.alg.BeamSearchRollout.sample_trajectories", false]], "sample_trajectories() (ldp.alg.rollout.rolloutmanager method)": [[3, "ldp.alg.rollout.RolloutManager.sample_trajectories", false]], "sample_trajectories() (ldp.alg.rolloutmanager method)": [[3, "ldp.alg.RolloutManager.sample_trajectories", false]], "sample_tree() (ldp.alg.tree_search.treesearchrollout method)": [[3, "ldp.alg.tree_search.TreeSearchRollout.sample_tree", false]], "sample_tree() (ldp.alg.treesearchrollout method)": [[3, "ldp.alg.TreeSearchRollout.sample_tree", false]], "sample_trees() (ldp.alg.tree_search.treesearchrollout method)": [[3, "ldp.alg.tree_search.TreeSearchRollout.sample_trees", false]], "sample_trees() (ldp.alg.treesearchrollout method)": [[3, "ldp.alg.TreeSearchRollout.sample_trees", false]], "score (ldp.alg.optimizer.ape.example attribute)": [[4, "ldp.alg.optimizer.ape.Example.score", false]], "score_fn (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.score_fn", false]], "score_fn (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.score_fn", false]], "seconds_to_first_token (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.seconds_to_first_token", false]], "seconds_to_first_token (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.seconds_to_first_token", false]], "seconds_to_last_token (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.seconds_to_last_token", false]], "seconds_to_last_token (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.seconds_to_last_token", false]], "serialize_uuid() (ldp.graph.callid method)": [[5, "ldp.graph.CallID.serialize_uuid", false]], "serialize_uuid() (ldp.graph.op_utils.callid method)": [[5, "ldp.graph.op_utils.CallID.serialize_uuid", false]], "set_description() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.set_description", false]], "set_description_str() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.set_description_str", false]], "set_lock() (ldp.shims.tqdm class method)": [[1, "ldp.shims.tqdm.set_lock", false]], "set_mode() (ldp.llms.embeddingmodel method)": [[7, "ldp.llms.EmbeddingModel.set_mode", false]], "set_mode() (ldp.llms.embeddings.embeddingmodel method)": [[7, "ldp.llms.embeddings.EmbeddingModel.set_mode", false]], "set_model_name() (ldp.llms.chat.multiplecompletionllmmodel method)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.set_model_name", false]], "set_model_name() (ldp.llms.multiplecompletionllmmodel method)": [[7, "ldp.llms.MultipleCompletionLLMModel.set_model_name", false]], "set_name() (ldp.graph.op method)": [[5, "ldp.graph.Op.set_name", false]], "set_name() (ldp.graph.ops.op method)": [[5, "ldp.graph.ops.Op.set_name", false]], "set_postfix() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.set_postfix", false]], "set_postfix_str() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.set_postfix_str", false]], "set_training_mode() (in module ldp.graph)": [[5, "ldp.graph.set_training_mode", false]], "set_training_mode() (in module ldp.graph.op_utils)": [[5, "ldp.graph.op_utils.set_training_mode", false]], "simpleagent (class in ldp.agent)": [[2, "ldp.agent.SimpleAgent", false]], "simpleagent (class in ldp.agent.simple_agent)": [[2, "ldp.agent.simple_agent.SimpleAgent", false]], "simpleagentstate (class in ldp.agent)": [[2, "ldp.agent.SimpleAgentState", false]], "simpleagentstate (class in ldp.agent.simple_agent)": [[2, "ldp.agent.simple_agent.SimpleAgentState", false]], "sparseembeddingmodel (class in ldp.llms)": [[7, "ldp.llms.SparseEmbeddingModel", false]], "sparseembeddingmodel (class in ldp.llms.embeddings)": [[7, "ldp.llms.embeddings.SparseEmbeddingModel", false]], "status_printer() (ldp.shims.tqdm static method)": [[1, "ldp.shims.tqdm.status_printer", false]], "steps (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.steps", false]], "steps (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.steps", false]], "steps (ldp.alg.optimizer.memory.memoryopt attribute)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.steps", false]], "steps (ldp.alg.optimizer.memoryopt attribute)": [[4, "ldp.alg.optimizer.MemoryOpt.steps", false]], "steps (ldp.alg.optimizer.positivememoryopt attribute)": [[4, "ldp.alg.optimizer.PositiveMemoryOpt.steps", false]], "steps (ldp.data_structures.trajectory attribute)": [[1, "ldp.data_structures.Trajectory.steps", false]], "stop_grad() (in module ldp.graph.gradient_estimators)": [[5, "ldp.graph.gradient_estimators.stop_grad", false]], "stopgradop (class in ldp.graph.common_ops)": [[5, "ldp.graph.common_ops.StopGradOp", false]], "store_tensor_inputs() (in module ldp.graph.torch_ops)": [[5, "ldp.graph.torch_ops.store_tensor_inputs", false]], "str (ldp.graph.modules.react.tooldescriptionmethods attribute)": [[6, "ldp.graph.modules.react.ToolDescriptionMethods.STR", false]], "str (ldp.graph.modules.tooldescriptionmethods attribute)": [[6, "ldp.graph.modules.ToolDescriptionMethods.STR", false]], "straight_through_estimator() (in module ldp.graph.gradient_estimators)": [[5, "ldp.graph.gradient_estimators.straight_through_estimator", false]], "sum_logprobs() (in module ldp.llms)": [[7, "ldp.llms.sum_logprobs", false]], "sum_logprobs() (in module ldp.llms.chat)": [[7, "ldp.llms.chat.sum_logprobs", false]], "sys_prompt (ldp.agent.memoryagent attribute)": [[2, "ldp.agent.MemoryAgent.sys_prompt", false]], "sys_prompt (ldp.agent.react_agent.reactagent attribute)": [[2, "ldp.agent.react_agent.ReActAgent.sys_prompt", false]], "sys_prompt (ldp.agent.reactagent attribute)": [[2, "ldp.agent.ReActAgent.sys_prompt", false]], "sys_prompt (ldp.agent.simple_agent.simpleagent attribute)": [[2, "ldp.agent.simple_agent.SimpleAgent.sys_prompt", false]], "sys_prompt (ldp.agent.simpleagent attribute)": [[2, "ldp.agent.SimpleAgent.sys_prompt", false]], "system_fingerprint (ldp.llms.chat.llmresult attribute)": [[7, "ldp.llms.chat.LLMResult.system_fingerprint", false]], "system_fingerprint (ldp.llms.llmresult attribute)": [[7, "ldp.llms.LLMResult.system_fingerprint", false]], "system_prompt (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.system_prompt", false]], "system_prompt (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.system_prompt", false]], "template (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.template", false]], "template (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.template", false]], "terminalprintingcallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.TerminalPrintingCallback", false]], "thoughtmodule (class in ldp.graph.modules)": [[6, "ldp.graph.modules.ThoughtModule", false]], "thoughtmodule (class in ldp.graph.modules.thought)": [[6, "ldp.graph.modules.thought.ThoughtModule", false]], "timestep (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.timestep", false]], "to_dict() (ldp.graph.opresult method)": [[5, "ldp.graph.OpResult.to_dict", false]], "to_dict() (ldp.graph.ops.opresult method)": [[5, "ldp.graph.ops.OpResult.to_dict", false]], "to_jsonl() (ldp.data_structures.trajectory method)": [[1, "ldp.data_structures.Trajectory.to_jsonl", false]], "to_network() (in module ldp.alg)": [[3, "ldp.alg.to_network", false]], "to_network() (in module ldp.alg.algorithms)": [[3, "ldp.alg.algorithms.to_network", false]], "tool_choice_required (ldp.llms.chat.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.chat.MultipleCompletionLLMModel.TOOL_CHOICE_REQUIRED", false]], "tool_choice_required (ldp.llms.multiplecompletionllmmodel attribute)": [[7, "ldp.llms.MultipleCompletionLLMModel.TOOL_CHOICE_REQUIRED", false]], "tool_description_method (ldp.agent.react_agent.reactagent attribute)": [[2, "ldp.agent.react_agent.ReActAgent.tool_description_method", false]], "tool_description_method (ldp.agent.reactagent attribute)": [[2, "ldp.agent.ReActAgent.tool_description_method", false]], "tooldescriptionmethods (class in ldp.graph.modules)": [[6, "ldp.graph.modules.ToolDescriptionMethods", false]], "tooldescriptionmethods (class in ldp.graph.modules.react)": [[6, "ldp.graph.modules.react.ToolDescriptionMethods", false]], "tools (ldp.agent.simple_agent.simpleagentstate attribute)": [[2, "ldp.agent.simple_agent.SimpleAgentState.tools", false]], "tools (ldp.agent.simpleagentstate attribute)": [[2, "ldp.agent.SimpleAgentState.tools", false]], "tools_to_track (ldp.alg.callbacks.computetrajectorymetricsmixin attribute)": [[3, "ldp.alg.callbacks.ComputeTrajectoryMetricsMixin.tools_to_track", false]], "tools_to_track (ldp.alg.computetrajectorymetricsmixin attribute)": [[3, "ldp.alg.ComputeTrajectoryMetricsMixin.tools_to_track", false]], "torchop (class in ldp.graph.torch_ops)": [[5, "ldp.graph.torch_ops.TorchOp", false]], "torchparambackwardestimator (class in ldp.graph.gradient_estimators)": [[5, "ldp.graph.gradient_estimators.TorchParamBackwardEstimator", false]], "tqdm (class in ldp.shims)": [[1, "ldp.shims.tqdm", false]], "trace (ldp.alg.optimizer.ape.apeopt attribute)": [[4, "ldp.alg.optimizer.ape.APEOpt.trace", false]], "trace (ldp.alg.optimizer.apeopt attribute)": [[4, "ldp.alg.optimizer.APEOpt.trace", false]], "train() (ldp.alg.offlinetrainer method)": [[3, "ldp.alg.OfflineTrainer.train", false]], "train() (ldp.alg.onlinetrainer method)": [[3, "ldp.alg.OnlineTrainer.train", false]], "train() (ldp.alg.runners.offlinetrainer method)": [[3, "ldp.alg.runners.OfflineTrainer.train", false]], "train() (ldp.alg.runners.onlinetrainer method)": [[3, "ldp.alg.runners.OnlineTrainer.train", false]], "train_means (ldp.alg.callbacks.meanmetricscallback property)": [[3, "ldp.alg.callbacks.MeanMetricsCallback.train_means", false]], "train_means (ldp.alg.meanmetricscallback property)": [[3, "ldp.alg.MeanMetricsCallback.train_means", false]], "traj (ldp.alg.beam attribute)": [[3, "ldp.alg.Beam.traj", false]], "traj (ldp.alg.beam_search.beam attribute)": [[3, "ldp.alg.beam_search.Beam.traj", false]], "traj_id (ldp.data_structures.trajectory attribute)": [[1, "ldp.data_structures.Trajectory.traj_id", false]], "trajectory (class in ldp.data_structures)": [[1, "ldp.data_structures.Trajectory", false]], "trajectoryfilecallback (class in ldp.alg)": [[3, "ldp.alg.TrajectoryFileCallback", false]], "trajectoryfilecallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.TrajectoryFileCallback", false]], "trajectorymetricscallback (class in ldp.alg)": [[3, "ldp.alg.TrajectoryMetricsCallback", false]], "trajectorymetricscallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.TrajectoryMetricsCallback", false]], "trange() (in module ldp.shims)": [[1, "ldp.shims.trange", false]], "transition (class in ldp.data_structures)": [[1, "ldp.data_structures.Transition", false]], "transitiontree (class in ldp.data_structures)": [[1, "ldp.data_structures.TransitionTree", false]], "traverse() (ldp.graph.opresult method)": [[5, "ldp.graph.OpResult.traverse", false]], "traverse() (ldp.graph.ops.opresult method)": [[5, "ldp.graph.ops.OpResult.traverse", false]], "treeofthoughtsagent (class in ldp.agent)": [[2, "ldp.agent.TreeofThoughtsAgent", false]], "treeofthoughtsagent (class in ldp.agent.tree_of_thoughts_agent)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent", false]], "treesearchrollout (class in ldp.alg)": [[3, "ldp.alg.TreeSearchRollout", false]], "treesearchrollout (class in ldp.alg.tree_search)": [[3, "ldp.alg.tree_search.TreeSearchRollout", false]], "truncated (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.truncated", false]], "uindexmemorymodel (class in ldp.graph.memory)": [[5, "ldp.graph.memory.UIndexMemoryModel", false]], "unpause() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.unpause", false]], "unwrap_value() (ldp.graph.opresult static method)": [[5, "ldp.graph.OpResult.unwrap_value", false]], "unwrap_value() (ldp.graph.ops.opresult static method)": [[5, "ldp.graph.ops.OpResult.unwrap_value", false]], "update() (ldp.alg.optimizer.ape.apeopt method)": [[4, "ldp.alg.optimizer.ape.APEOpt.update", false]], "update() (ldp.alg.optimizer.apeopt method)": [[4, "ldp.alg.optimizer.APEOpt.update", false]], "update() (ldp.alg.optimizer.chainedoptimizer method)": [[4, "ldp.alg.optimizer.ChainedOptimizer.update", false]], "update() (ldp.alg.optimizer.memory.memoryopt method)": [[4, "ldp.alg.optimizer.memory.MemoryOpt.update", false]], "update() (ldp.alg.optimizer.memoryopt method)": [[4, "ldp.alg.optimizer.MemoryOpt.update", false]], "update() (ldp.alg.optimizer.opt.chainedoptimizer method)": [[4, "ldp.alg.optimizer.opt.ChainedOptimizer.update", false]], "update() (ldp.alg.optimizer.opt.optimizer method)": [[4, "ldp.alg.optimizer.opt.Optimizer.update", false]], "update() (ldp.alg.optimizer.optimizer method)": [[4, "ldp.alg.optimizer.Optimizer.update", false]], "update() (ldp.graph.opctx method)": [[5, "ldp.graph.OpCtx.update", false]], "update() (ldp.graph.ops.opctx method)": [[5, "ldp.graph.ops.OpCtx.update", false]], "update() (ldp.shims.tqdm method)": [[1, "ldp.shims.tqdm.update", false]], "update_every (ldp.alg.offlinetrainerconfig attribute)": [[3, "ldp.alg.OfflineTrainerConfig.update_every", false]], "update_every (ldp.alg.onlinetrainerconfig attribute)": [[3, "ldp.alg.OnlineTrainerConfig.update_every", false]], "update_every (ldp.alg.runners.offlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OfflineTrainerConfig.update_every", false]], "update_every (ldp.alg.runners.onlinetrainerconfig attribute)": [[3, "ldp.alg.runners.OnlineTrainerConfig.update_every", false]], "validate_json_completion() (in module ldp.llms)": [[7, "ldp.llms.validate_json_completion", false]], "validate_json_completion() (in module ldp.llms.chat)": [[7, "ldp.llms.chat.validate_json_completion", false]], "validate_score_fn() (ldp.alg.optimizer.ape.apeopt method)": [[4, "ldp.alg.optimizer.ape.APEOpt.validate_score_fn", false]], "validate_score_fn() (ldp.alg.optimizer.apeopt method)": [[4, "ldp.alg.optimizer.APEOpt.validate_score_fn", false]], "validate_uuid() (ldp.graph.callid class method)": [[5, "ldp.graph.CallID.validate_uuid", false]], "validate_uuid() (ldp.graph.op_utils.callid class method)": [[5, "ldp.graph.op_utils.CallID.validate_uuid", false]], "value (ldp.data_structures.transition attribute)": [[1, "ldp.data_structures.Transition.value", false]], "value (ldp.graph.memory attribute)": [[5, "ldp.graph.Memory.value", false]], "value (ldp.graph.memory.memory attribute)": [[5, "ldp.graph.memory.Memory.value", false]], "value_prompt_func (ldp.agent.tree_of_thoughts_agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent.value_prompt_func", false]], "value_prompt_func (ldp.agent.treeofthoughtsagent attribute)": [[2, "ldp.agent.TreeofThoughtsAgent.value_prompt_func", false]], "wandbloggingcallback (class in ldp.alg)": [[3, "ldp.alg.WandBLoggingCallback", false]], "wandbloggingcallback (class in ldp.alg.callbacks)": [[3, "ldp.alg.callbacks.WandBLoggingCallback", false]], "wrapattr() (ldp.shims.tqdm class method)": [[1, "ldp.shims.tqdm.wrapattr", false]], "write() (ldp.shims.tqdm class method)": [[1, "ldp.shims.tqdm.write", false]], "xml (ldp.graph.modules.react.tooldescriptionmethods attribute)": [[6, "ldp.graph.modules.react.ToolDescriptionMethods.XML", false]], "xml (ldp.graph.modules.tooldescriptionmethods attribute)": [[6, "ldp.graph.modules.ToolDescriptionMethods.XML", false]], "zero_estimator() (in module ldp.graph.gradient_estimators)": [[5, "ldp.graph.gradient_estimators.zero_estimator", false]]}, "objects": {"": [[1, 0, 0, "-", "ldp"]], "ldp": [[2, 0, 0, "-", "agent"], [3, 0, 0, "-", "alg"], [1, 0, 0, "-", "data_structures"], [5, 0, 0, "-", "graph"], [7, 0, 0, "-", "llms"], [1, 0, 0, "-", "main"], [1, 0, 0, "-", "shims"], [1, 0, 0, "-", "utils"]], "ldp.agent": [[2, 1, 1, "", "Agent"], [2, 1, 1, "", "AgentConfig"], [2, 1, 1, "", "DefaultLLMModelNames"], [2, 1, 1, "", "HTTPAgentClient"], [2, 1, 1, "", "MemoryAgent"], [2, 1, 1, "", "ReActAgent"], [2, 1, 1, "", "SimpleAgent"], [2, 1, 1, "", "SimpleAgentState"], [2, 1, 1, "", "TreeofThoughtsAgent"], [2, 0, 0, "-", "agent"], [2, 0, 0, "-", "agent_client"], [2, 0, 0, "-", "interactive_agent"], [2, 4, 1, "", "make_simple_agent_server"], [2, 0, 0, "-", "memory_agent"], [2, 0, 0, "-", "react_agent"], [2, 0, 0, "-", "simple_agent"], [2, 0, 0, "-", "tree_of_thoughts_agent"]], "ldp.agent.Agent": [[2, 2, 1, "", "from_name"], [2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 2, 1, "", "named_ops"]], "ldp.agent.AgentConfig": [[2, 3, 1, "", "agent_kwargs"], [2, 3, 1, "", "agent_type"], [2, 2, 1, "", "construct_agent"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"]], "ldp.agent.DefaultLLMModelNames": [[2, 3, 1, "", "OPENAI"]], "ldp.agent.HTTPAgentClient": [[2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"]], "ldp.agent.MemoryAgent": [[2, 2, 1, "", "default_query_factory"], [2, 2, 1, "", "get_asv"], [2, 3, 1, "", "llm_model"], [2, 3, 1, "", "memory_prompt"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "num_memories"], [2, 3, 1, "", "prompt"], [2, 3, 1, "", "query_factory"], [2, 3, 1, "", "sys_prompt"]], "ldp.agent.ReActAgent": [[2, 2, 1, "", "after_retry_failure_log"], [2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 3, 1, "", "llm_model"], [2, 2, 1, "", "make_act_agent"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "sys_prompt"], [2, 3, 1, "", "tool_description_method"]], "ldp.agent.SimpleAgent": [[2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 3, 1, "", "llm_model"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "sys_prompt"]], "ldp.agent.SimpleAgentState": [[2, 2, 1, "", "get_next_state"], [2, 3, 1, "", "messages"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "tools"]], "ldp.agent.TreeofThoughtsAgent": [[2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 3, 1, "", "llm_model"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "proposal_prompt_func"], [2, 3, 1, "", "value_prompt_func"]], "ldp.agent.agent": [[2, 1, 1, "", "Agent"], [2, 1, 1, "", "AgentConfig"]], "ldp.agent.agent.Agent": [[2, 2, 1, "", "from_name"], [2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 2, 1, "", "named_ops"]], "ldp.agent.agent.AgentConfig": [[2, 3, 1, "", "agent_kwargs"], [2, 3, 1, "", "agent_type"], [2, 2, 1, "", "construct_agent"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"]], "ldp.agent.agent_client": [[2, 1, 1, "", "HTTPAgentClient"], [2, 4, 1, "", "make_simple_agent_server"]], "ldp.agent.agent_client.HTTPAgentClient": [[2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"]], "ldp.agent.interactive_agent": [[2, 1, 1, "", "InteractiveAgent"]], "ldp.agent.interactive_agent.InteractiveAgent": [[2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"]], "ldp.agent.memory_agent": [[2, 1, 1, "", "MemoryAgent"]], "ldp.agent.memory_agent.MemoryAgent": [[2, 2, 1, "", "default_query_factory"], [2, 2, 1, "", "get_asv"], [2, 3, 1, "", "memory_prompt"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "num_memories"], [2, 3, 1, "", "prompt"], [2, 3, 1, "", "query_factory"]], "ldp.agent.react_agent": [[2, 1, 1, "", "ReActAgent"]], "ldp.agent.react_agent.ReActAgent": [[2, 2, 1, "", "after_retry_failure_log"], [2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 3, 1, "", "llm_model"], [2, 2, 1, "", "make_act_agent"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "sys_prompt"], [2, 3, 1, "", "tool_description_method"]], "ldp.agent.simple_agent": [[2, 1, 1, "", "SimpleAgent"], [2, 1, 1, "", "SimpleAgentState"]], "ldp.agent.simple_agent.SimpleAgent": [[2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 3, 1, "", "llm_model"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "sys_prompt"]], "ldp.agent.simple_agent.SimpleAgentState": [[2, 2, 1, "", "get_next_state"], [2, 3, 1, "", "messages"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "tools"]], "ldp.agent.tree_of_thoughts_agent": [[2, 1, 1, "", "TreeofThoughtsAgent"]], "ldp.agent.tree_of_thoughts_agent.TreeofThoughtsAgent": [[2, 2, 1, "", "get_asv"], [2, 2, 1, "", "init_state"], [2, 3, 1, "", "llm_model"], [2, 3, 1, "", "model_computed_fields"], [2, 3, 1, "", "model_config"], [2, 3, 1, "", "model_fields"], [2, 3, 1, "", "proposal_prompt_func"], [2, 3, 1, "", "value_prompt_func"]], "ldp.alg": [[3, 1, 1, "", "Beam"], [3, 1, 1, "", "BeamSearchRollout"], [3, 1, 1, "", "Callback"], [3, 1, 1, "", "ClearContextCallback"], [3, 1, 1, "", "ComputeTrajectoryMetricsMixin"], [3, 1, 1, "", "Evaluator"], [3, 1, 1, "", "EvaluatorConfig"], [3, 1, 1, "", "LoggingCallback"], [3, 1, 1, "", "MeanMetricsCallback"], [3, 1, 1, "", "OfflineTrainer"], [3, 1, 1, "", "OfflineTrainerConfig"], [3, 1, 1, "", "OnlineTrainer"], [3, 1, 1, "", "OnlineTrainerConfig"], [3, 1, 1, "", "RolloutDebugDumpCallback"], [3, 1, 1, "", "RolloutManager"], [3, 1, 1, "", "TrajectoryFileCallback"], [3, 1, 1, "", "TrajectoryMetricsCallback"], [3, 1, 1, "", "TreeSearchRollout"], [3, 1, 1, "", "WandBLoggingCallback"], [3, 0, 0, "-", "algorithms"], [3, 0, 0, "-", "beam_search"], [3, 0, 0, "-", "callbacks"], [3, 0, 0, "-", "datasets"], [4, 0, 0, "-", "optimizer"], [3, 0, 0, "-", "rollout"], [3, 0, 0, "-", "runners"], [3, 4, 1, "", "to_network"], [3, 0, 0, "-", "tree_search"]], "ldp.alg.Beam": [[3, 3, 1, "", "env"], [3, 3, 1, "", "traj"]], "ldp.alg.BeamSearchRollout": [[3, 2, 1, "", "sample_trajectories"]], "ldp.alg.Callback": [[3, 2, 1, "", "after_agent_get_asv"], [3, 2, 1, "", "after_agent_init_state"], [3, 2, 1, "", "after_env_reset"], [3, 2, 1, "", "after_env_step"], [3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_eval_step"], [3, 2, 1, "", "after_train_step"], [3, 2, 1, "", "after_transition"], [3, 2, 1, "", "after_update"], [3, 2, 1, "", "before_eval_loop"], [3, 2, 1, "", "before_transition"]], "ldp.alg.ClearContextCallback": [[3, 2, 1, "", "after_eval_step"], [3, 2, 1, "", "after_update"]], "ldp.alg.ComputeTrajectoryMetricsMixin": [[3, 2, 1, "", "compute_trajectory_metrics"], [3, 3, 1, "", "tools_to_track"]], "ldp.alg.Evaluator": [[3, 2, 1, "", "evaluate"], [3, 2, 1, "", "run"]], "ldp.alg.EvaluatorConfig": [[3, 3, 1, "", "batch_size"], [3, 3, 1, "", "catch_agent_failures"], [3, 3, 1, "", "catch_env_failures"], [3, 3, 1, "", "clear_ctx_at_each_iter"], [3, 2, 1, "", "make_rollout_manager"], [3, 3, 1, "", "max_rollout_steps"], [3, 3, 1, "", "model_computed_fields"], [3, 3, 1, "", "model_config"], [3, 3, 1, "", "model_fields"], [3, 3, 1, "", "num_eval_iterations"]], "ldp.alg.LoggingCallback": [[3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_train_step"]], "ldp.alg.MeanMetricsCallback": [[3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_train_step"], [3, 5, 1, "", "eval_means"], [3, 5, 1, "", "train_means"]], "ldp.alg.OfflineTrainer": [[3, 2, 1, "", "train"]], "ldp.alg.OfflineTrainerConfig": [[3, 3, 1, "", "batch_size"], [3, 3, 1, "", "clear_ctx_at_each_iter"], [3, 3, 1, "", "model_computed_fields"], [3, 3, 1, "", "model_config"], [3, 3, 1, "", "model_fields"], [3, 3, 1, "", "update_every"]], "ldp.alg.OnlineTrainer": [[3, 2, 1, "", "evaluate"], [3, 2, 1, "", "train"]], "ldp.alg.OnlineTrainerConfig": [[3, 3, 1, "", "batch_size"], [3, 3, 1, "", "catch_agent_failures"], [3, 3, 1, "", "catch_env_failures"], [3, 3, 1, "", "clear_ctx_at_each_iter"], [3, 3, 1, "", "eval_before"], [3, 3, 1, "", "eval_every"], [3, 3, 1, "", "max_rollout_steps"], [3, 3, 1, "", "model_computed_fields"], [3, 3, 1, "", "model_config"], [3, 3, 1, "", "model_fields"], [3, 3, 1, "", "num_eval_iterations"], [3, 3, 1, "", "num_rollouts_per_env"], [3, 3, 1, "", "num_train_iterations"], [3, 3, 1, "", "update_every"]], "ldp.alg.RolloutDebugDumpCallback": [[3, 2, 1, "", "after_agent_get_asv"], [3, 2, 1, "", "after_env_step"], [3, 2, 1, "", "before_transition"]], "ldp.alg.RolloutManager": [[3, 2, 1, "", "sample_trajectories"]], "ldp.alg.TrajectoryFileCallback": [[3, 2, 1, "", "after_transition"], [3, 2, 1, "", "before_transition"], [3, 2, 1, "", "cleanup"]], "ldp.alg.TrajectoryMetricsCallback": [[3, 2, 1, "", "after_env_reset"], [3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_eval_step"], [3, 2, 1, "", "after_train_step"]], "ldp.alg.TreeSearchRollout": [[3, 2, 1, "", "sample_tree"], [3, 2, 1, "", "sample_trees"]], "ldp.alg.WandBLoggingCallback": [[3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_train_step"]], "ldp.alg.algorithms": [[3, 4, 1, "", "to_network"]], "ldp.alg.beam_search": [[3, 1, 1, "", "Beam"], [3, 1, 1, "", "BeamSearchRollout"]], "ldp.alg.beam_search.Beam": [[3, 3, 1, "", "env"], [3, 3, 1, "", "traj"]], "ldp.alg.beam_search.BeamSearchRollout": [[3, 2, 1, "", "sample_trajectories"]], "ldp.alg.callbacks": [[3, 1, 1, "", "Callback"], [3, 1, 1, "", "ClearContextCallback"], [3, 1, 1, "", "ComputeTrajectoryMetricsMixin"], [3, 1, 1, "", "LoggingCallback"], [3, 1, 1, "", "MeanMetricsCallback"], [3, 1, 1, "", "RolloutDebugDumpCallback"], [3, 1, 1, "", "TerminalPrintingCallback"], [3, 1, 1, "", "TrajectoryFileCallback"], [3, 1, 1, "", "TrajectoryMetricsCallback"], [3, 1, 1, "", "WandBLoggingCallback"]], "ldp.alg.callbacks.Callback": [[3, 2, 1, "", "after_agent_get_asv"], [3, 2, 1, "", "after_agent_init_state"], [3, 2, 1, "", "after_env_reset"], [3, 2, 1, "", "after_env_step"], [3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_eval_step"], [3, 2, 1, "", "after_train_step"], [3, 2, 1, "", "after_transition"], [3, 2, 1, "", "after_update"], [3, 2, 1, "", "before_eval_loop"], [3, 2, 1, "", "before_transition"]], "ldp.alg.callbacks.ClearContextCallback": [[3, 2, 1, "", "after_eval_step"], [3, 2, 1, "", "after_update"]], "ldp.alg.callbacks.ComputeTrajectoryMetricsMixin": [[3, 2, 1, "", "compute_trajectory_metrics"], [3, 3, 1, "", "tools_to_track"]], "ldp.alg.callbacks.LoggingCallback": [[3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_train_step"]], "ldp.alg.callbacks.MeanMetricsCallback": [[3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_train_step"], [3, 5, 1, "", "eval_means"], [3, 5, 1, "", "train_means"]], "ldp.alg.callbacks.RolloutDebugDumpCallback": [[3, 2, 1, "", "after_agent_get_asv"], [3, 2, 1, "", "after_env_step"], [3, 2, 1, "", "before_transition"]], "ldp.alg.callbacks.TerminalPrintingCallback": [[3, 2, 1, "", "after_agent_get_asv"], [3, 2, 1, "", "after_env_step"], [3, 2, 1, "", "before_transition"]], "ldp.alg.callbacks.TrajectoryFileCallback": [[3, 2, 1, "", "after_transition"], [3, 2, 1, "", "before_transition"], [3, 2, 1, "", "cleanup"]], "ldp.alg.callbacks.TrajectoryMetricsCallback": [[3, 2, 1, "", "after_env_reset"], [3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_eval_step"], [3, 2, 1, "", "after_train_step"]], "ldp.alg.callbacks.WandBLoggingCallback": [[3, 2, 1, "", "after_eval_loop"], [3, 2, 1, "", "after_train_step"]], "ldp.alg.datasets": [[3, 1, 1, "", "DummyTaskDataset"]], "ldp.alg.optimizer": [[4, 1, 1, "", "APEOpt"], [4, 1, 1, "", "APEScoreFn"], [4, 1, 1, "", "ChainedOptimizer"], [4, 1, 1, "", "MemoryFactory"], [4, 1, 1, "", "MemoryOpt"], [4, 1, 1, "", "Optimizer"], [4, 1, 1, "", "OptimizerConfig"], [4, 1, 1, "", "PositiveMemoryOpt"], [4, 0, 0, "-", "ape"], [4, 4, 1, "", "default_optimizer_factory"], [4, 0, 0, "-", "memory"], [4, 0, 0, "-", "opt"], [4, 0, 0, "-", "replay_buffers"]], "ldp.alg.optimizer.APEOpt": [[4, 2, 1, "", "aggregate_trajectory"], [4, 3, 1, "", "examples"], [4, 2, 1, "", "from_agent"], [4, 3, 1, "", "good_examples"], [4, 3, 1, "", "good_reward_threshold"], [4, 3, 1, "", "llm"], [4, 3, 1, "", "llm_call_op"], [4, 3, 1, "", "max_examples"], [4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 2, 1, "", "model_post_init"], [4, 3, 1, "", "prompt_op"], [4, 3, 1, "", "query_prompt"], [4, 3, 1, "", "reward_discount"], [4, 3, 1, "", "score_fn"], [4, 3, 1, "", "steps"], [4, 3, 1, "", "system_prompt"], [4, 3, 1, "", "trace"], [4, 2, 1, "", "update"], [4, 2, 1, "", "validate_score_fn"]], "ldp.alg.optimizer.APEScoreFn": [[4, 3, 1, "", "GRADIENT"], [4, 3, 1, "", "REWARD"]], "ldp.alg.optimizer.ChainedOptimizer": [[4, 2, 1, "", "aggregate"], [4, 2, 1, "", "update"]], "ldp.alg.optimizer.MemoryOpt": [[4, 2, 1, "", "aggregate_trajectory"], [4, 2, 1, "", "default_memory_factory"], [4, 3, 1, "", "example_buffer"], [4, 2, 1, "", "from_agent"], [4, 3, 1, "", "memory_factory"], [4, 3, 1, "", "memory_op"], [4, 3, 1, "", "memory_template"], [4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 3, 1, "", "output_op"], [4, 3, 1, "", "reward_discount"], [4, 3, 1, "", "steps"], [4, 2, 1, "", "update"]], "ldp.alg.optimizer.Optimizer": [[4, 2, 1, "", "aggregate"], [4, 2, 1, "", "aggregate_trajectory"], [4, 2, 1, "", "update"]], "ldp.alg.optimizer.OptimizerConfig": [[4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 3, 1, "", "optimizer_kwargs"], [4, 3, 1, "", "optimizer_type"]], "ldp.alg.optimizer.PositiveMemoryOpt": [[4, 3, 1, "", "example_buffer"], [4, 3, 1, "", "memory_factory"], [4, 3, 1, "", "memory_op"], [4, 3, 1, "", "memory_template"], [4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 3, 1, "", "output_op"], [4, 3, 1, "", "reward_discount"], [4, 3, 1, "", "steps"]], "ldp.alg.optimizer.ape": [[4, 1, 1, "", "APEOpt"], [4, 1, 1, "", "APEScoreFn"], [4, 1, 1, "", "Example"], [4, 1, 1, "", "OutputPrompt"], [4, 4, 1, "", "get_formatted_variables"]], "ldp.alg.optimizer.ape.APEOpt": [[4, 2, 1, "", "aggregate_trajectory"], [4, 3, 1, "", "examples"], [4, 2, 1, "", "from_agent"], [4, 3, 1, "", "good_examples"], [4, 3, 1, "", "good_reward_threshold"], [4, 3, 1, "", "llm"], [4, 3, 1, "", "llm_call_op"], [4, 3, 1, "", "max_examples"], [4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 2, 1, "", "model_post_init"], [4, 3, 1, "", "prompt_op"], [4, 3, 1, "", "query_prompt"], [4, 3, 1, "", "reward_discount"], [4, 3, 1, "", "score_fn"], [4, 3, 1, "", "steps"], [4, 3, 1, "", "system_prompt"], [4, 3, 1, "", "trace"], [4, 2, 1, "", "update"], [4, 2, 1, "", "validate_score_fn"]], "ldp.alg.optimizer.ape.APEScoreFn": [[4, 3, 1, "", "GRADIENT"], [4, 3, 1, "", "REWARD"]], "ldp.alg.optimizer.ape.Example": [[4, 3, 1, "", "input"], [4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 3, 1, "", "output"], [4, 3, 1, "", "score"]], "ldp.alg.optimizer.ape.OutputPrompt": [[4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 3, 1, "", "prompt"]], "ldp.alg.optimizer.memory": [[4, 1, 1, "", "MemoryFactory"], [4, 1, 1, "", "MemoryOpt"], [4, 1, 1, "", "PositiveMemoryOpt"]], "ldp.alg.optimizer.memory.MemoryOpt": [[4, 2, 1, "", "aggregate_trajectory"], [4, 2, 1, "", "default_memory_factory"], [4, 3, 1, "", "example_buffer"], [4, 2, 1, "", "from_agent"], [4, 3, 1, "", "memory_factory"], [4, 3, 1, "", "memory_op"], [4, 3, 1, "", "memory_template"], [4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"], [4, 3, 1, "", "output_op"], [4, 3, 1, "", "reward_discount"], [4, 3, 1, "", "steps"], [4, 2, 1, "", "update"]], "ldp.alg.optimizer.memory.PositiveMemoryOpt": [[4, 3, 1, "", "model_computed_fields"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "model_fields"]], "ldp.alg.optimizer.opt": [[4, 1, 1, "", "ChainedOptimizer"], [4, 1, 1, "", "Optimizer"]], "ldp.alg.optimizer.opt.ChainedOptimizer": [[4, 2, 1, "", "aggregate"], [4, 2, 1, "", "update"]], "ldp.alg.optimizer.opt.Optimizer": [[4, 2, 1, "", "aggregate"], [4, 2, 1, "", "aggregate_trajectory"], [4, 2, 1, "", "update"]], "ldp.alg.optimizer.replay_buffers": [[4, 1, 1, "", "CircularReplayBuffer"]], "ldp.alg.optimizer.replay_buffers.CircularReplayBuffer": [[4, 2, 1, "", "batched_iter"], [4, 2, 1, "", "resize"]], "ldp.alg.rollout": [[3, 6, 1, "", "AgentError"], [3, 6, 1, "", "CaughtError"], [3, 6, 1, "", "EnvError"], [3, 1, 1, "", "RolloutManager"], [3, 4, 1, "", "reraise_exc_as"]], "ldp.alg.rollout.AgentError": [[3, 3, 1, "", "exc_type"]], "ldp.alg.rollout.CaughtError": [[3, 3, 1, "", "exc_type"]], "ldp.alg.rollout.EnvError": [[3, 3, 1, "", "exc_type"]], "ldp.alg.rollout.RolloutManager": [[3, 2, 1, "", "sample_trajectories"]], "ldp.alg.runners": [[3, 1, 1, "", "Evaluator"], [3, 1, 1, "", "EvaluatorConfig"], [3, 1, 1, "", "OfflineTrainer"], [3, 1, 1, "", "OfflineTrainerConfig"], [3, 1, 1, "", "OnlineTrainer"], [3, 1, 1, "", "OnlineTrainerConfig"]], "ldp.alg.runners.Evaluator": [[3, 2, 1, "", "evaluate"], [3, 2, 1, "", "run"]], "ldp.alg.runners.EvaluatorConfig": [[3, 3, 1, "", "batch_size"], [3, 3, 1, "", "catch_agent_failures"], [3, 3, 1, "", "catch_env_failures"], [3, 3, 1, "", "clear_ctx_at_each_iter"], [3, 2, 1, "", "make_rollout_manager"], [3, 3, 1, "", "max_rollout_steps"], [3, 3, 1, "", "model_computed_fields"], [3, 3, 1, "", "model_config"], [3, 3, 1, "", "model_fields"], [3, 3, 1, "", "num_eval_iterations"]], "ldp.alg.runners.OfflineTrainer": [[3, 2, 1, "", "train"]], "ldp.alg.runners.OfflineTrainerConfig": [[3, 3, 1, "", "batch_size"], [3, 3, 1, "", "clear_ctx_at_each_iter"], [3, 3, 1, "", "model_computed_fields"], [3, 3, 1, "", "model_config"], [3, 3, 1, "", "model_fields"], [3, 3, 1, "", "update_every"]], "ldp.alg.runners.OnlineTrainer": [[3, 2, 1, "", "evaluate"], [3, 2, 1, "", "train"]], "ldp.alg.runners.OnlineTrainerConfig": [[3, 3, 1, "", "batch_size"], [3, 3, 1, "", "clear_ctx_at_each_iter"], [3, 3, 1, "", "eval_before"], [3, 3, 1, "", "eval_every"], [3, 3, 1, "", "model_computed_fields"], [3, 3, 1, "", "model_config"], [3, 3, 1, "", "model_fields"], [3, 3, 1, "", "num_rollouts_per_env"], [3, 3, 1, "", "num_train_iterations"], [3, 3, 1, "", "update_every"]], "ldp.alg.tree_search": [[3, 1, 1, "", "TreeSearchRollout"]], "ldp.alg.tree_search.TreeSearchRollout": [[3, 2, 1, "", "sample_tree"], [3, 2, 1, "", "sample_trees"]], "ldp.data_structures": [[1, 1, 1, "", "Trajectory"], [1, 1, 1, "", "Transition"], [1, 1, 1, "", "TransitionTree"]], "ldp.data_structures.Trajectory": [[1, 2, 1, "", "compute_discounted_returns"], [1, 5, 1, "", "done"], [1, 5, 1, "", "failed"], [1, 2, 1, "", "from_jsonl"], [1, 3, 1, "", "model_computed_fields"], [1, 3, 1, "", "model_config"], [1, 3, 1, "", "model_fields"], [1, 3, 1, "", "steps"], [1, 2, 1, "", "to_jsonl"], [1, 3, 1, "", "traj_id"]], "ldp.data_structures.Transition": [[1, 3, 1, "", "NO_OBSERVATION"], [1, 3, 1, "", "action"], [1, 3, 1, "", "agent_state"], [1, 2, 1, "", "construct_action"], [1, 3, 1, "", "done"], [1, 5, 1, "", "failed"], [1, 3, 1, "", "metadata"], [1, 3, 1, "", "model_computed_fields"], [1, 3, 1, "", "model_config"], [1, 2, 1, "", "model_dump_json"], [1, 3, 1, "", "model_fields"], [1, 3, 1, "", "next_agent_state"], [1, 3, 1, "", "next_observation"], [1, 3, 1, "", "observation"], [1, 3, 1, "", "reward"], [1, 3, 1, "", "timestep"], [1, 3, 1, "", "truncated"], [1, 3, 1, "", "value"]], "ldp.data_structures.TransitionTree": [[1, 2, 1, "", "add_transition"], [1, 2, 1, "", "assign_mc_value_estimates"], [1, 2, 1, "", "get_trajectories"], [1, 2, 1, "", "get_transition"], [1, 2, 1, "", "get_weight"], [1, 2, 1, "", "merge_identical_nodes"]], "ldp.graph": [[5, 1, 1, "", "CallID"], [5, 1, 1, "", "ConfigOp"], [5, 1, 1, "", "EmbeddingOp"], [5, 1, 1, "", "FxnOp"], [5, 1, 1, "", "IdentityOp"], [5, 1, 1, "", "LLMCallOp"], [5, 1, 1, "", "MSELossOp"], [5, 1, 1, "", "Memory"], [5, 1, 1, "", "MemoryModel"], [5, 1, 1, "", "MemoryOp"], [5, 1, 1, "", "Op"], [5, 1, 1, "", "OpCtx"], [5, 1, 1, "", "OpResult"], [5, 1, 1, "", "PromptOp"], [5, 0, 0, "-", "async_torch"], [5, 0, 0, "-", "common_ops"], [5, 4, 1, "", "compute_graph"], [5, 4, 1, "", "get_call_id"], [5, 4, 1, "", "get_run_id"], [5, 4, 1, "", "get_training_mode"], [5, 0, 0, "-", "gradient_estimators"], [5, 0, 0, "-", "loss_ops"], [5, 0, 0, "-", "memory"], [6, 0, 0, "-", "modules"], [5, 4, 1, "", "op_call"], [5, 0, 0, "-", "op_utils"], [5, 0, 0, "-", "ops"], [5, 4, 1, "", "set_training_mode"], [5, 0, 0, "-", "torch_ops"]], "ldp.graph.CallID": [[5, 3, 1, "", "fwd_id"], [5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 3, 1, "", "run_id"], [5, 2, 1, "", "serialize_uuid"], [5, 2, 1, "", "validate_uuid"]], "ldp.graph.ConfigOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.EmbeddingOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.FxnOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.IdentityOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.LLMCallOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "compute_logprob"], [5, 2, 1, "", "forward"], [5, 2, 1, "", "get_examples"]], "ldp.graph.MSELossOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.Memory": [[5, 2, 1, "", "ensure_query"], [5, 2, 1, "", "from_ops"], [5, 3, 1, "", "input"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 3, 1, "", "output"], [5, 3, 1, "", "query"], [5, 3, 1, "", "run_id"], [5, 3, 1, "", "template"], [5, 3, 1, "", "value"]], "ldp.graph.MemoryModel": [[5, 3, 1, "", "DEFAULT_MEMORY_MATCHES"], [5, 2, 1, "", "add_memory"], [5, 3, 1, "", "embedding_model"], [5, 2, 1, "", "enforce_empty"], [5, 2, 1, "", "get_memory"], [5, 3, 1, "", "memories"], [5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 2, 1, "", "model_post_init"], [5, 2, 1, "", "safe_access_index"]], "ldp.graph.MemoryOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.Op": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "clear_ctx"], [5, 3, 1, "", "ctx"], [5, 2, 1, "", "forward"], [5, 2, 1, "", "get_call_ids"], [5, 2, 1, "", "get_input_grads"], [5, 3, 1, "", "name"], [5, 2, 1, "", "set_name"]], "ldp.graph.OpCtx": [[5, 2, 1, "", "clear_contexts"], [5, 3, 1, "", "data"], [5, 2, 1, "", "get"], [5, 2, 1, "", "get_input_grads"], [5, 2, 1, "", "get_or_create"], [5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 2, 1, "", "model_post_init"], [5, 3, 1, "", "op_name"], [5, 2, 1, "", "update"]], "ldp.graph.OpResult": [[5, 2, 1, "", "compute_grads"], [5, 5, 1, "", "ctx"], [5, 2, 1, "", "from_dict"], [5, 2, 1, "", "get_compute_graph"], [5, 5, 1, "", "grad"], [5, 5, 1, "", "inputs"], [5, 5, 1, "", "logprob"], [5, 5, 1, "", "op_class"], [5, 5, 1, "", "run_id"], [5, 2, 1, "", "to_dict"], [5, 2, 1, "", "traverse"], [5, 2, 1, "", "unwrap_value"]], "ldp.graph.async_torch": [[5, 1, 1, "", "AsyncTorchModule"], [5, 4, 1, "", "async_protect_torch_call"]], "ldp.graph.common_ops": [[5, 1, 1, "", "Cacheable"], [5, 1, 1, "", "ConfigOp"], [5, 1, 1, "", "EmbeddingOp"], [5, 1, 1, "", "FxnOp"], [5, 1, 1, "", "IdentityOp"], [5, 1, 1, "", "LLMCallOp"], [5, 1, 1, "", "MemoryOp"], [5, 1, 1, "", "PromptOp"], [5, 1, 1, "", "StopGradOp"], [5, 4, 1, "", "async_cache"], [5, 4, 1, "", "logsumexp"]], "ldp.graph.common_ops.Cacheable": [[5, 2, 1, "", "get_result"]], "ldp.graph.common_ops.ConfigOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.common_ops.EmbeddingOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.common_ops.FxnOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.common_ops.IdentityOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.common_ops.LLMCallOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "compute_logprob"], [5, 2, 1, "", "forward"], [5, 2, 1, "", "get_examples"]], "ldp.graph.common_ops.MemoryOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.common_ops.StopGradOp": [[5, 2, 1, "", "backward"]], "ldp.graph.gradient_estimators": [[5, 1, 1, "", "TorchParamBackwardEstimator"], [5, 4, 1, "", "assign_constant_grads"], [5, 4, 1, "", "assign_default_grads"], [5, 4, 1, "", "llm_straight_through_estimator"], [5, 4, 1, "", "stop_grad"], [5, 4, 1, "", "straight_through_estimator"], [5, 4, 1, "", "zero_estimator"]], "ldp.graph.gradient_estimators.TorchParamBackwardEstimator": [[5, 2, 1, "", "backward"]], "ldp.graph.loss_ops": [[5, 1, 1, "", "MSELossOp"]], "ldp.graph.loss_ops.MSELossOp": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.graph.memory": [[5, 1, 1, "", "Memory"], [5, 1, 1, "id0", "MemoryModel"], [5, 1, 1, "", "UIndexMemoryModel"]], "ldp.graph.memory.Memory": [[5, 2, 1, "", "ensure_query"], [5, 2, 1, "", "from_ops"], [5, 3, 1, "", "input"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 3, 1, "", "output"], [5, 3, 1, "", "query"], [5, 3, 1, "", "run_id"], [5, 3, 1, "", "template"], [5, 3, 1, "", "value"]], "ldp.graph.memory.MemoryModel": [[5, 3, 1, "id15", "DEFAULT_MEMORY_MATCHES"], [5, 2, 1, "id16", "add_memory"], [5, 3, 1, "id17", "embedding_model"], [5, 2, 1, "id18", "enforce_empty"], [5, 2, 1, "id19", "get_memory"], [5, 3, 1, "id20", "memories"], [5, 3, 1, "id21", "model_computed_fields"], [5, 3, 1, "id22", "model_config"], [5, 3, 1, "id23", "model_fields"], [5, 2, 1, "id24", "model_post_init"], [5, 2, 1, "id25", "safe_access_index"]], "ldp.graph.memory.UIndexMemoryModel": [[5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 2, 1, "", "model_post_init"]], "ldp.graph.modules": [[6, 1, 1, "", "ParsedLLMCallModule"], [6, 1, 1, "", "ReActModule"], [6, 1, 1, "", "ReflectModule"], [6, 1, 1, "", "ReflectModuleConfig"], [6, 1, 1, "", "ThoughtModule"], [6, 1, 1, "", "ToolDescriptionMethods"], [6, 0, 0, "-", "llm_call"], [6, 4, 1, "", "parse_message"], [6, 0, 0, "-", "react"], [6, 0, 0, "-", "reflect"], [6, 0, 0, "-", "thought"]], "ldp.graph.modules.ReActModule": [[6, 2, 1, "", "parse_message"]], "ldp.graph.modules.ReflectModuleConfig": [[6, 3, 1, "", "llm_model"], [6, 3, 1, "", "model_computed_fields"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "model_fields"]], "ldp.graph.modules.ToolDescriptionMethods": [[6, 3, 1, "", "JSON"], [6, 3, 1, "", "STR"], [6, 3, 1, "", "XML"], [6, 2, 1, "", "get_prompt_prefix"]], "ldp.graph.modules.llm_call": [[6, 1, 1, "", "ParsedLLMCallModule"]], "ldp.graph.modules.react": [[6, 1, 1, "", "ReActModule"], [6, 1, 1, "", "ToolDescriptionMethods"], [6, 4, 1, "", "parse_message"]], "ldp.graph.modules.react.ReActModule": [[6, 2, 1, "", "parse_message"]], "ldp.graph.modules.react.ToolDescriptionMethods": [[6, 3, 1, "", "JSON"], [6, 3, 1, "", "STR"], [6, 3, 1, "", "XML"], [6, 2, 1, "", "get_prompt_prefix"]], "ldp.graph.modules.reflect": [[6, 1, 1, "", "ReflectModule"], [6, 1, 1, "", "ReflectModuleConfig"]], "ldp.graph.modules.reflect.ReflectModuleConfig": [[6, 3, 1, "", "llm_model"], [6, 3, 1, "", "model_computed_fields"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "model_fields"]], "ldp.graph.modules.thought": [[6, 1, 1, "", "ThoughtModule"]], "ldp.graph.op_utils": [[5, 1, 1, "", "CallID"], [5, 4, 1, "", "compute_graph"], [5, 4, 1, "", "get_call_id"], [5, 4, 1, "", "get_run_id"], [5, 4, 1, "", "get_training_mode"], [5, 4, 1, "", "op_call"], [5, 4, 1, "", "set_training_mode"]], "ldp.graph.op_utils.CallID": [[5, 3, 1, "", "fwd_id"], [5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 3, 1, "", "run_id"], [5, 2, 1, "", "serialize_uuid"], [5, 2, 1, "", "validate_uuid"]], "ldp.graph.ops": [[5, 1, 1, "", "Op"], [5, 1, 1, "", "OpCtx"], [5, 1, 1, "", "OpResult"], [5, 4, 1, "", "resolve_fully_qualified_name"]], "ldp.graph.ops.Op": [[5, 2, 1, "", "backward"], [5, 2, 1, "", "clear_ctx"], [5, 3, 1, "", "ctx"], [5, 2, 1, "", "forward"], [5, 2, 1, "", "get_call_ids"], [5, 2, 1, "", "get_input_grads"], [5, 3, 1, "", "name"], [5, 2, 1, "", "set_name"]], "ldp.graph.ops.OpCtx": [[5, 2, 1, "", "clear_contexts"], [5, 3, 1, "", "data"], [5, 2, 1, "", "get"], [5, 2, 1, "", "get_input_grads"], [5, 2, 1, "", "get_or_create"], [5, 3, 1, "", "model_computed_fields"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "model_fields"], [5, 2, 1, "", "model_post_init"], [5, 3, 1, "", "op_name"], [5, 2, 1, "", "update"]], "ldp.graph.ops.OpResult": [[5, 2, 1, "", "compute_grads"], [5, 5, 1, "", "ctx"], [5, 2, 1, "", "from_dict"], [5, 2, 1, "", "get_compute_graph"], [5, 5, 1, "", "grad"], [5, 5, 1, "", "inputs"], [5, 5, 1, "", "logprob"], [5, 5, 1, "", "op_class"], [5, 5, 1, "", "run_id"], [5, 2, 1, "", "to_dict"], [5, 2, 1, "", "traverse"], [5, 2, 1, "", "unwrap_value"]], "ldp.graph.torch_ops": [[5, 1, 1, "", "TorchOp"], [5, 4, 1, "", "store_tensor_inputs"]], "ldp.graph.torch_ops.TorchOp": [[5, 3, 1, "", "CTX_TENSOR_INPUT_KEY"], [5, 2, 1, "", "backward"], [5, 2, 1, "", "forward"]], "ldp.llms": [[7, 1, 1, "", "EmbeddingModel"], [7, 1, 1, "", "EmbeddingModes"], [7, 1, 1, "", "HybridEmbeddingModel"], [7, 6, 1, "", "JSONSchemaValidationError"], [7, 1, 1, "", "LLMModel"], [7, 1, 1, "", "LLMResult"], [7, 1, 1, "", "LiteEmbeddingModel"], [7, 1, 1, "", "MultipleCompletionLLMModel"], [7, 1, 1, "", "SparseEmbeddingModel"], [7, 4, 1, "", "append_to_messages"], [7, 4, 1, "", "append_to_sys"], [7, 0, 0, "-", "chat"], [7, 0, 0, "-", "embeddings"], [7, 4, 1, "", "prepend_sys"], [7, 4, 1, "", "prepend_sys_and_append_sys"], [7, 0, 0, "-", "prompts"], [7, 4, 1, "", "sum_logprobs"], [7, 4, 1, "", "validate_json_completion"]], "ldp.llms.EmbeddingModel": [[7, 3, 1, "", "dimensions"], [7, 2, 1, "", "embed_text"], [7, 2, 1, "", "embed_texts"], [7, 2, 1, "", "from_name"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"], [7, 2, 1, "", "set_mode"]], "ldp.llms.EmbeddingModes": [[7, 3, 1, "", "DOCUMENT"], [7, 3, 1, "", "QUERY"]], "ldp.llms.HybridEmbeddingModel": [[7, 3, 1, "", "dimensions"], [7, 2, 1, "", "embed_texts"], [7, 2, 1, "", "infer_dimensions"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "models"], [7, 3, 1, "", "name"]], "ldp.llms.LLMModel": [[7, 2, 1, "", "call"], [7, 3, 1, "", "config"], [7, 3, 1, "", "encoding"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"]], "ldp.llms.LLMResult": [[7, 3, 1, "", "completion_count"], [7, 3, 1, "", "config"], [7, 3, 1, "", "date"], [7, 2, 1, "", "get_supported_openai_params"], [7, 3, 1, "", "id"], [7, 3, 1, "", "logprob"], [7, 3, 1, "", "messages"], [7, 3, 1, "", "model"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "prompt"], [7, 5, 1, "", "prompt_and_completion_costs"], [7, 3, 1, "", "prompt_count"], [7, 5, 1, "", "provider"], [7, 3, 1, "", "seconds_to_first_token"], [7, 3, 1, "", "seconds_to_last_token"], [7, 3, 1, "", "system_fingerprint"]], "ldp.llms.LiteEmbeddingModel": [[7, 3, 1, "", "batch_size"], [7, 3, 1, "", "dimensions"], [7, 3, 1, "", "embed_kwargs"], [7, 2, 1, "", "embed_texts"], [7, 2, 1, "", "infer_dimensions"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"]], "ldp.llms.MultipleCompletionLLMModel": [[7, 3, 1, "", "TOOL_CHOICE_REQUIRED"], [7, 2, 1, "", "achat"], [7, 2, 1, "", "achat_iter"], [7, 2, 1, "", "call"], [7, 3, 1, "", "config"], [7, 3, 1, "", "encoding"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"], [7, 2, 1, "", "set_model_name"]], "ldp.llms.SparseEmbeddingModel": [[7, 3, 1, "", "dimensions"], [7, 2, 1, "", "embed_texts"], [7, 3, 1, "", "enc"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"]], "ldp.llms.chat": [[7, 6, 1, "", "JSONSchemaValidationError"], [7, 1, 1, "", "LLMModel"], [7, 1, 1, "", "LLMResult"], [7, 1, 1, "", "MultipleCompletionLLMModel"], [7, 4, 1, "", "sum_logprobs"], [7, 4, 1, "", "validate_json_completion"]], "ldp.llms.chat.LLMModel": [[7, 2, 1, "", "call"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"]], "ldp.llms.chat.LLMResult": [[7, 3, 1, "", "completion_count"], [7, 3, 1, "", "config"], [7, 3, 1, "", "date"], [7, 2, 1, "", "get_supported_openai_params"], [7, 3, 1, "", "id"], [7, 3, 1, "", "logprob"], [7, 3, 1, "", "messages"], [7, 3, 1, "", "model"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "prompt"], [7, 5, 1, "", "prompt_and_completion_costs"], [7, 3, 1, "", "prompt_count"], [7, 5, 1, "", "provider"], [7, 3, 1, "", "seconds_to_first_token"], [7, 3, 1, "", "seconds_to_last_token"], [7, 3, 1, "", "system_fingerprint"]], "ldp.llms.chat.MultipleCompletionLLMModel": [[7, 3, 1, "", "TOOL_CHOICE_REQUIRED"], [7, 2, 1, "", "achat"], [7, 2, 1, "", "achat_iter"], [7, 2, 1, "", "call"], [7, 3, 1, "", "config"], [7, 3, 1, "", "encoding"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"], [7, 2, 1, "", "set_model_name"]], "ldp.llms.embeddings": [[7, 1, 1, "", "EmbeddingModel"], [7, 1, 1, "", "EmbeddingModes"], [7, 1, 1, "", "HybridEmbeddingModel"], [7, 1, 1, "", "LiteEmbeddingModel"], [7, 1, 1, "", "SparseEmbeddingModel"]], "ldp.llms.embeddings.EmbeddingModel": [[7, 3, 1, "", "dimensions"], [7, 2, 1, "", "embed_text"], [7, 2, 1, "", "embed_texts"], [7, 2, 1, "", "from_name"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"], [7, 2, 1, "", "set_mode"]], "ldp.llms.embeddings.EmbeddingModes": [[7, 3, 1, "", "DOCUMENT"], [7, 3, 1, "", "QUERY"]], "ldp.llms.embeddings.HybridEmbeddingModel": [[7, 2, 1, "", "embed_texts"], [7, 2, 1, "", "infer_dimensions"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "models"], [7, 3, 1, "", "name"]], "ldp.llms.embeddings.LiteEmbeddingModel": [[7, 3, 1, "", "batch_size"], [7, 3, 1, "", "dimensions"], [7, 3, 1, "", "embed_kwargs"], [7, 2, 1, "", "embed_texts"], [7, 2, 1, "", "infer_dimensions"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"]], "ldp.llms.embeddings.SparseEmbeddingModel": [[7, 3, 1, "", "dimensions"], [7, 2, 1, "", "embed_texts"], [7, 3, 1, "", "enc"], [7, 3, 1, "", "model_computed_fields"], [7, 3, 1, "", "model_config"], [7, 3, 1, "", "model_fields"], [7, 3, 1, "", "name"]], "ldp.llms.prompts": [[7, 4, 1, "", "append_to_messages"], [7, 4, 1, "", "append_to_sys"], [7, 4, 1, "", "indent_xml"], [7, 4, 1, "", "prepend_sys"], [7, 4, 1, "", "prepend_sys_and_append_sys"]], "ldp.main": [[1, 4, 1, "", "get_or_make_agent"], [1, 4, 1, "", "get_or_make_environment"], [1, 4, 1, "", "main"]], "ldp.shims": [[1, 1, 1, "", "tqdm"], [1, 4, 1, "", "trange"]], "ldp.shims.tqdm": [[1, 2, 1, "", "clear"], [1, 2, 1, "", "close"], [1, 2, 1, "", "display"], [1, 2, 1, "", "external_write_mode"], [1, 5, 1, "", "format_dict"], [1, 2, 1, "", "format_interval"], [1, 2, 1, "", "format_meter"], [1, 2, 1, "", "format_num"], [1, 2, 1, "", "format_sizeof"], [1, 2, 1, "", "get_lock"], [1, 3, 1, "", "monitor"], [1, 3, 1, "", "monitor_interval"], [1, 2, 1, "", "moveto"], [1, 2, 1, "", "pandas"], [1, 2, 1, "", "refresh"], [1, 2, 1, "", "reset"], [1, 2, 1, "", "set_description"], [1, 2, 1, "", "set_description_str"], [1, 2, 1, "", "set_lock"], [1, 2, 1, "", "set_postfix"], [1, 2, 1, "", "set_postfix_str"], [1, 2, 1, "", "status_printer"], [1, 2, 1, "", "unpause"], [1, 2, 1, "", "update"], [1, 2, 1, "", "wrapattr"], [1, 2, 1, "", "write"]], "ldp.utils": [[1, 4, 1, "", "configure_log_levels"], [1, 4, 1, "", "configure_stdout_logs"], [1, 4, 1, "", "discounted_returns"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"], "6": ["py", "exception", "Python exception"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:property", "6": "py:exception"}, "terms": {"": [1, 2, 3, 4, 5, 7], "0": [1, 2, 3, 4, 5, 7], "00ff00": 1, "03629": [2, 6], "06": 2, "08": 2, "0f": 1, "1": [1, 2, 3, 4, 5, 6, 7], "10": 1, "100": 1, "1000": 1, "100000": 1, "123456789": 1, "16": 7, "18603270": 1, "2": [1, 5, 7], "20": 1, "2024": 2, "2210": [2, 6], "23": 1, "24": 2, "256": 7, "3": [1, 2, 5, 6, 7], "382": 1, "3f": 1, "3g": 1, "4": [1, 5], "4o": 2, "5": [1, 5, 6, 7], "50": [1, 4], "5xc1ecxo1h": 2, "6": 1, "7": [1, 2, 6], "8": 1, "9": 1, "92gvk82de": 4, "9e9": 1, "A": [1, 2, 3, 4, 5, 6, 7], "As": 2, "By": 4, "For": [1, 5], "If": [1, 2, 3, 4, 5, 7], "In": 5, "It": [2, 3, 4, 5], "One": 2, "Or": 5, "That": [2, 5], "The": [1, 2, 4, 5, 6, 7], "There": 2, "These": 5, "Will": 5, "_": 1, "__": 1, "__call__": 5, "__fields__": [1, 2, 3, 4, 5, 6, 7], "__init__": 4, "_apeopt__context": 4, "_default_memory_factori": 4, "_default_query_factori": 2, "_eval_loop": 3, "a_t": 1, "ab": [1, 2, 6], "abc": [1, 2, 4, 5, 7], "about": [1, 2, 3, 4, 5, 6, 7], "abov": 2, "abstract": [2, 4, 5, 7], "accept": 5, "access": [1, 2, 6], "account": 1, "achat": [1, 7], "achat_it": [1, 7], "acquir": 1, "act": [1, 2, 4, 6], "action": [1, 2, 3, 5, 6, 8], "actual": 2, "ad": 1, "add": [1, 3, 4], "add_memori": [1, 5], "add_transit": [1, 8], "addit": [1, 2, 4], "adjust": 1, "aembed": 7, "affect": [2, 7], "after": [1, 3, 4], "after_agent_get_asv": [1, 3], "after_agent_init_st": [1, 3], "after_env_reset": [1, 3], "after_env_step": [1, 3], "after_eval_loop": [1, 3], "after_eval_step": [1, 3], "after_retry_failure_log": [1, 2], "after_train_step": [1, 3], "after_transit": [1, 3], "after_upd": [1, 3], "against": 7, "agent": [0, 1, 3, 4, 8], "agent_cli": [1, 8], "agent_clone_fn": 3, "agent_kwarg": [1, 2], "agent_st": [1, 2, 3, 8], "agent_state_hash_fn": 1, "agent_typ": [1, 2], "agentconfig": [1, 2], "agenterror": [1, 3], "aggreg": [3, 4, 5], "aggregate_trajectori": [3, 4], "alg": [0, 1, 8], "algorithm": [1, 8], "alia": 3, "alias": 1, "all": [1, 3, 4, 5, 7], "allow": [1, 3], "along": 2, "alreadi": 5, "also": [2, 5], "alter": 1, "alwai": [2, 6], "an": [1, 2, 4, 5, 6, 7], "analog": [2, 6], "ani": [1, 2, 3, 4, 5, 6, 7], "anim": 1, "annot": [1, 2, 3, 4, 5, 6, 7], "answer": [2, 6], "ap": [1, 3], "apeopt": [3, 4], "apescorefn": [3, 4], "api": 1, "app": 2, "append": [1, 7], "append_to_messag": [1, 7], "append_to_si": [1, 7], "appli": [1, 5], "appropri": 1, "approxim": 5, "ar": [1, 2, 3, 4, 5], "arbitrari": 1, "arbitrary_types_allow": [1, 4, 5, 7], "aren": 2, "arg": [1, 2, 3, 4, 5, 7], "argument": [1, 2, 4, 5], "arxiv": [2, 6], "ascii": 1, "asctim": 1, "assign": [1, 5], "assign_constant_grad": [1, 5], "assign_default_grad": [1, 5], "assign_mc_value_estim": [1, 8], "assist": [2, 6], "associ": 5, "async": [1, 2, 3, 4, 5, 7], "async_cach": [1, 5], "async_protect_torch_cal": [1, 5], "async_torch": [1, 8], "asyncbufferedwork": 5, "asyncgener": 7, "asynciter": 5, "asynctorchmodul": [1, 5], "attempt": [1, 2, 7], "attribut": 5, "augment": 4, "autocast_device_typ": 5, "autocast_dtyp": 5, "autograd": 5, "automat": [1, 4], "avail": 2, "averag": 1, "aviari": [1, 2, 5], "avoid": [1, 2], "await": [2, 3, 5], "b": 5, "back": 5, "backend": 5, "backprop": 5, "backpropag": 5, "backward": [1, 5], "backward_fn": 5, "backwardstyp": 5, "bar": 1, "bar_format": 1, "base": [1, 2, 3, 4, 5, 6, 7], "baselin": 2, "basemodel": [1, 2, 3, 4, 5, 6, 7], "basic": [1, 4, 5], "batch": 3, "batch_siz": [1, 3, 4, 5, 7], "batched_it": [3, 4], "beam": [1, 3], "beam_search": [1, 8], "beam_width": 3, "beamsearchrollout": [1, 3], "becaus": [2, 3, 5], "been": [1, 5], "befor": [2, 3], "before_eval_loop": [1, 3], "before_transit": [1, 3], "behav": 5, "behavior": 1, "being": 4, "below": 4, "best": [2, 6, 7], "better": 4, "between": [1, 3], "blank": 1, "block": 1, "bool": [1, 2, 3, 4, 5], "boolean": 1, "both": [1, 5], "bother": 5, "bound": 1, "boundari": [2, 4, 6, 7], "brain": 2, "branching_factor": 3, "break": 1, "bucket": 2, "buffer": 4, "built": [2, 6], "builtin_function_or_method": 7, "by_alia": 1, "byte": 1, "c": 5, "cacheabl": [1, 5], "calcul": [1, 3, 5, 7], "call": [1, 2, 3, 5, 7], "call_id": 5, "callabl": [1, 2, 3, 5, 6, 7], "callback": [1, 7, 8], "caller": 1, "callid": [1, 4, 5], "can": [1, 2, 3, 4, 5, 6], "capabl": 2, "carlo": [1, 4, 5], "case": 5, "catch": 3, "catch_agent_failur": [1, 3], "catch_env_failur": [1, 3], "caughterror": [1, 3], "chainedoptim": [3, 4], "chang": 2, "char": 3, "charact": 1, "chat": [1, 2, 6, 8], "chat_kwarg": 7, "check": 5, "choic": [5, 7], "choos": 2, "chosen": 2, "chunk": 1, "chunk_siz": 1, "circular": 1, "circularreplaybuff": [3, 4], "cl": 5, "class": [1, 2, 3, 4, 5, 6, 7], "classmethod": [1, 2, 4, 5, 7], "classvar": [1, 2, 3, 4, 5, 6, 7], "cleanup": [1, 3], "clear": [1, 5, 8], "clear_context": [1, 5], "clear_ctx": [1, 5], "clear_ctx_at_each_it": [1, 3], "clearcontextcallback": [1, 3], "clock": 1, "close": [1, 8], "co": 5, "code": 2, "collate_fn": 5, "collect": [1, 2, 3, 5, 7], "colour": 1, "com": 1, "combin": [1, 2], "come": [1, 2], "comma": [2, 6], "common_op": [1, 4, 8], "commonli": [4, 5], "compact": 1, "compar": 1, "compat": 5, "complet": [1, 2, 4, 7], "completion_count": [1, 7], "compos": 5, "comput": [1, 2, 3, 4, 5, 6, 7], "compute_discounted_return": [1, 8], "compute_grad": [1, 5], "compute_graph": [1, 5], "compute_logprob": [1, 5], "compute_trajectory_metr": [1, 3], "computedfieldinfo": [1, 2, 3, 4, 5, 6, 7], "computetrajectorymetricsmixin": [1, 3], "concept": 1, "concis": 4, "concurr": 3, "concurrency_limit": 3, "config": [1, 2, 3, 4, 5, 6, 7], "configdict": [1, 2, 3, 4, 5, 6, 7], "configop": [1, 5], "configur": [1, 2, 3, 4, 5, 6, 7], "configure_log_level": [0, 1, 8], "configure_stdout_log": [0, 1, 8], "confirm": 6, "conform": [1, 2, 3, 4, 5, 6, 7], "consid": [1, 5], "consol": 3, "constantli": 1, "construct": [1, 4, 5], "construct_act": [1, 8], "construct_ag": [1, 2], "constructor": 2, "consum": 5, "contain": [2, 5], "content": 8, "context": [1, 5], "conveni": 1, "copi": [2, 5], "core": [1, 5], "correct": 4, "correspond": [1, 2, 3, 4, 5, 6, 7], "cost": 7, "could": [1, 2, 5], "count": 7, "counter": 1, "cpu": 1, "creat": [1, 2, 4, 5], "ctx": [1, 5], "ctx_tensor_input_kei": [1, 5], "cumul": [1, 2], "current": [1, 2, 4, 5], "current_buff": 1, "custom": [1, 3], "d": 5, "dai": [2, 6], "data": [1, 5, 7], "data_structur": [0, 8], "datafram": 1, "dataframegroupbi": 1, "dataset": [1, 8], "datatyp": 1, "date": [1, 7], "db": 5, "debug": [1, 5], "decid": [1, 5], "decis": 2, "decollate_fn": 5, "decor": [1, 5], "default": [1, 2, 3, 4, 5, 6, 7], "default_col": 5, "default_factori": [1, 2, 4, 5, 7], "default_grad_v": 5, "default_memory_factori": [3, 4], "default_memory_match": [1, 5], "default_optimizer_factori": [3, 4], "default_query_factori": [1, 2], "defaultllmmodelnam": [1, 2], "defin": [1, 2, 3, 4, 5, 6, 7], "delai": 1, "demonstr": 3, "depend": 5, "depth": 5, "deriv": 5, "desc": 1, "descend": 5, "describ": [2, 6], "describe_json": 6, "describe_str": [2, 6], "describe_xml": 6, "descript": [1, 2, 3, 4, 5, 6, 7], "design": 2, "desir": [2, 4, 5], "detach": 5, "detail": [4, 5], "dev": 1, "df": 1, "dict": [1, 2, 3, 4, 5, 6, 7], "dictat": 2, "dictionari": [1, 2, 3, 4, 5, 6, 7], "differ": [2, 5, 7], "differenti": 5, "digraph": 5, "dimens": [1, 7], "direct": [3, 5], "directori": 3, "disabl": 1, "discount": [1, 2], "discount_factor": 1, "discounted_return": [0, 1, 8], "displai": [1, 8], "divisor": 1, "do": [1, 2, 4, 5, 6], "doc": 1, "document": [1, 7], "doe": [1, 2, 3, 7], "doesn": 2, "domain": 2, "don": [1, 2, 5], "done": [1, 3, 5, 8], "dot": 3, "draw": 3, "dreampuf": 3, "dtype": 5, "duck": 1, "dummytaskdataset": [1, 3], "dump": [1, 3, 5], "dure": [1, 3, 5], "dynam": [1, 5], "dynamic_minit": 1, "dynamic_ncol": 1, "e": [1, 2, 3, 5, 7], "each": [1, 2, 3, 5], "edg": 3, "effici": 1, "eg": 1, "elaps": 1, "elapsed_": 1, "element": [1, 5], "emb": 7, "embed": [1, 5, 8], "embed_kwarg": [1, 7], "embed_text": [1, 7], "embedding_model": [1, 5], "embeddingmod": [1, 7], "embeddingmodel": [1, 5, 7], "embeddingop": [1, 5], "emit": 1, "emploi": 2, "empti": 1, "emul": 5, "enabl": [1, 3], "enc": [1, 7], "encod": [1, 7], "encount": 1, "end": 1, "enforce_empti": [1, 5], "engin": 4, "enough": 5, "ensure_queri": [1, 5], "entail": 2, "entir": [1, 4], "entiti": [2, 6], "entri": [2, 6], "enum": 7, "env": [1, 3], "env_clone_fn": 3, "enverror": [1, 3], "environ": [1, 2, 3], "environment_factori": 3, "episod": [1, 2], "equal": 1, "equival": 5, "errat": 1, "error": 1, "escap": 2, "estim": [1, 2, 5], "eta": 1, "etc": [1, 5], "eval": 3, "eval_befor": [1, 3], "eval_dataset": 3, "eval_everi": [1, 3], "eval_funct": 2, "eval_mean": [1, 3], "evalu": [1, 2, 3], "evaluatorconfig": [1, 3], "everi": [1, 3, 5], "exact": 2, "exactli": 1, "exampl": [1, 2, 3, 4, 5, 7], "example_buff": [3, 4], "exc_typ": [1, 3], "except": [1, 3, 7], "exclud": [1, 2, 4, 5], "exclude_default": 1, "exclude_non": 1, "exclude_unset": 1, "execut": [3, 5], "exhaust": 3, "exist": [1, 5, 7], "exit": 1, "expans": 1, "expect": 1, "explicit": 2, "explicitli": 1, "explor": 2, "exponenti": 1, "export": 3, "expos": 6, "extend": [2, 3, 4], "external_write_mod": [1, 8], "extra": [1, 2, 3, 4, 7], "extra_kwarg": 1, "face": 5, "factor": 1, "factori": 4, "fail": [1, 5, 7, 8], "failur": 2, "fallback": 1, "fals": [1, 2, 3, 4, 5, 6, 7], "far": 2, "fast": 1, "fastapi": 2, "field": [1, 2, 3, 4, 5, 6, 7], "fieldinfo": [1, 2, 3, 4, 5, 6, 7], "file": [1, 3], "file_obj": 1, "filenam": 1, "files": 1, "fill": 1, "filter": [3, 5], "filter_fn": 5, "final_sys_cont": 7, "fingerprint": 7, "finish": [1, 3], "first": [1, 2, 5], "first_sys_prompt": 6, "flag": 1, "float": [1, 2, 3, 4, 5, 7], "flush": 1, "fmt": 1, "fobj": 1, "follow": [1, 2, 4, 6], "forbid": [1, 2, 3, 4, 7], "forc": 1, "forecast": [2, 6], "form": [1, 5], "format": [1, 2, 4, 5, 6], "format_dict": [1, 8], "format_interv": [1, 8], "format_met": [1, 8], "format_num": [1, 8], "format_sizeof": [1, 8], "forum": 2, "forward": [1, 4, 5], "frame": 1, "from": [1, 2, 3, 4, 5, 6, 7], "from_ag": [3, 4], "from_dict": [1, 5], "from_jsonl": [1, 8], "from_nam": [1, 2, 7], "from_op": [1, 5], "front": 6, "frozen": 2, "func": 5, "function": [1, 2, 3, 4, 5, 7], "further": 4, "futur": [1, 2], "fwd_arg": 5, "fwd_id": [1, 5], "fxn": 5, "fxnop": [1, 5], "g": [1, 3, 5, 7], "g_t": 1, "game": 2, "gamma": 1, "ge": 3, "gener": [1, 2, 4, 5, 6], "get": [1, 2, 5, 6, 7], "get_asv": [1, 2, 3], "get_call_id": [1, 5], "get_compute_graph": [1, 5], "get_exampl": [1, 5], "get_formatted_vari": [3, 4], "get_input_grad": [1, 5], "get_lock": [1, 8], "get_memori": [1, 5], "get_next_st": [1, 2], "get_or_cr": [1, 5], "get_or_make_ag": [0, 1, 8], "get_or_make_environ": [0, 1, 8], "get_prompt_prefix": [5, 6], "get_result": [1, 5], "get_run_id": [1, 5], "get_supported_openai_param": [1, 7], "get_training_mod": [1, 5], "get_trajectori": [1, 8], "get_transit": [1, 8], "get_weath": [2, 6], "get_weight": [1, 8], "github": 3, "give": 6, "given": [1, 2, 5], "global": 1, "go": 1, "goe": 5, "good": [1, 4], "good_exampl": [3, 4], "good_reward_threshold": [3, 4], "gpt": [2, 6, 7], "gpu": 2, "grad": [1, 5], "grad_input": 5, "grad_output": 5, "grad_param": 5, "gradient": [3, 4, 5], "gradient_estim": [1, 8], "gradintyp": 5, "graph": [0, 1, 3, 4, 8], "graphic": 1, "graphviz": 3, "graphvizonlin": 3, "greater": 1, "green": 1, "groupbi": 1, "gui": 1, "h": 1, "ha": [1, 2, 6], "handl": 1, "hashabl": 1, "have": [1, 2, 5, 6, 7], "height": [1, 3], "hello": 7, "help": 2, "helper": 5, "here": [1, 2, 4], "heurist": 2, "hide": 1, "highli": 1, "histori": [2, 4], "hold": 7, "hood": 2, "how": [1, 2, 3, 5], "howev": 1, "http": [1, 2, 3, 4, 6], "httpagentcli": [1, 2], "human": 2, "hybrid": 7, "hybridembeddingmodel": [1, 7], "hydrat": 5, "hyperparamet": 2, "i": [1, 2, 3, 4, 5, 6, 7], "id": [1, 2, 4, 5, 7], "idempot": 1, "ident": 1, "identifi": 1, "identityop": [1, 5], "ignor": 1, "impact": 1, "implement": [4, 5], "impli": 4, "import": 1, "improv": 4, "includ": [1, 2, 4, 5, 7], "incorrect": 4, "increment": 1, "indent": 1, "indent_s": 7, "indent_xml": [1, 7], "index": [0, 1, 5], "indic": 1, "individu": 2, "inf": 1, "infer": 7, "infer_dimens": [1, 7], "infinit": 4, "inform": [3, 5], "infti": 1, "inherit": 1, "init_st": [1, 2, 3], "initi": [1, 2, 4, 5, 7], "initial_sys_cont": 7, "initialis": [1, 5], "initlist": 4, "input": [1, 2, 3, 4, 5, 6], "input_arg": 5, "input_grad": 5, "input_grad_arg": 5, "input_grad_kwarg": 5, "input_kwarg": 5, "insid": [4, 5], "instanc": [1, 5], "instantan": 1, "instanti": 4, "instead": [1, 2, 5], "int": [1, 2, 3, 4, 5, 7], "integr": 2, "intellig": 1, "interact": [2, 5], "interactive_ag": [1, 8], "interactiveag": [1, 2], "interfac": 2, "intermedi": [1, 2], "intern": [1, 5, 7], "interv": 1, "invok": [2, 3], "involv": [2, 4], "io": [1, 3], "irrelev": 2, "issu": 2, "item": [1, 5], "iter": [1, 2, 3, 4, 5, 7], "its": 5, "join": 1, "json": [1, 2, 5, 6, 7], "jsonl": 3, "jsonschemavalidationerror": [1, 7], "jsonvalu": [1, 2, 4, 5], "just": 2, "k": [1, 5], "keep": 1, "kei": 5, "keyword": [2, 5, 7], "kick": 3, "kilo": 1, "kwarg": [1, 2, 3, 4, 5, 7], "l_bar": 1, "label": 3, "lag": 1, "lambda": [1, 2, 5, 7], "languag": [2, 4, 5], "larg": 1, "larger": [4, 5], "last": 1, "latter": 1, "lazili": 5, "learn": 4, "learnabl": [2, 6], "leav": [1, 5], "led": 5, "left": 7, "len": 1, "length": [5, 7], "level": 1, "levelnam": 1, "lightweight": 2, "like": [1, 2, 5, 6], "limit": [1, 4], "line": [1, 3], "linear": 5, "list": [1, 2, 3, 4, 5, 6, 7], "liteembeddingmodel": [1, 7], "litellm": [5, 7], "live": [1, 2], "llm": [0, 1, 2, 3, 4, 5, 6, 8], "llm_call": [1, 5], "llm_call_op": [3, 4], "llm_model": [1, 2, 5, 6], "llm_straight_through_estim": [1, 5], "llmcallop": [1, 4, 5], "llmmodel": [1, 4, 5, 7], "llmresult": [1, 5, 7], "ln": 5, "local": 2, "lock": [1, 5], "lock_arg": 1, "log": [1, 3, 5, 7], "logger": 1, "loggingcallback": [1, 3], "logic": 2, "logprob": [1, 2, 4, 5, 7], "logsumexp": [1, 5], "long": 1, "longer": 1, "loop": [1, 3], "loss": 5, "loss_op": [1, 8], "m": [1, 6], "magnitud": 1, "mai": [1, 5], "main": [0, 8], "maintain": 2, "make": [2, 4], "make_act_ag": [1, 2], "make_rollout_manag": [1, 3], "make_simple_agent_serv": [1, 2], "manag": [1, 5], "mani": 3, "manual": 1, "map": [1, 2, 3, 4, 5, 6, 7], "mark": 3, "match": [5, 7], "matplotlib": 1, "matter": 2, "max": [3, 4], "max_depth": 3, "max_exampl": [3, 4], "max_label_height": 3, "max_label_width": 3, "max_rollout_step": [1, 3], "max_step": 3, "max_wait_interv": 5, "maximum": 1, "maxinterv": 1, "mdp": 1, "mean": [1, 2, 3, 4], "meaningless": 1, "meanmetricscallback": [1, 3], "meant": [2, 5], "measur": 5, "mechan": 2, "mega": 1, "mem_call_id": 5, "mem_op": 5, "member": 1, "memori": [1, 2, 3, 8], "memory_ag": [1, 8], "memory_factori": [3, 4], "memory_op": [3, 4], "memory_prompt": [1, 2], "memory_templ": [3, 4], "memoryag": [1, 2, 4], "memoryfactori": [3, 4], "memorymodel": [1, 5], "memoryop": [1, 2, 4, 5], "memoryopt": [3, 4], "mention": 4, "merg": 1, "merge_identical_nod": [1, 8], "messag": [1, 2, 3, 5, 6, 7], "metadata": [1, 2, 3, 4, 5, 6, 7, 8], "meter": 1, "method": [1, 2, 3, 4, 5, 6], "metric": [1, 3], "metrics_to_log": 3, "minim": 4, "minimum": 1, "mininterv": 1, "minit": 1, "mistral": 7, "mix": 7, "mixin": 3, "mm": 1, "mode": [1, 3, 4, 5, 7], "model": [1, 2, 3, 4, 5, 6, 7], "model_computed_field": [1, 2, 3, 4, 5, 6, 7, 8], "model_config": [1, 2, 3, 4, 5, 6, 7, 8], "model_construct": 4, "model_dump": 5, "model_dump_json": [1, 8], "model_field": [1, 2, 3, 4, 5, 6, 7, 8], "model_kwarg": 5, "model_post_init": [1, 3, 4, 5], "modelmodel_dump_json": 1, "modelrespons": 7, "modifi": [1, 7], "modified_messag": 7, "modul": [0, 8], "module_call_fn": 5, "monitor": [1, 8], "monitor_interv": [1, 8], "mont": [1, 4, 5], "more": [1, 2, 4, 5], "most": [2, 5], "move": 1, "moveto": [1, 8], "mselossop": [1, 5], "msg": [1, 5], "much": 5, "multi": 3, "multidigraph": 3, "multipl": 1, "multiplecompletionllmmodel": [1, 7], "must": 5, "mutat": 2, "n": [1, 2, 4, 6, 7], "n_fmt": 1, "n_select_sampl": 2, "n_step": 2, "naction": [2, 6], "name": [1, 2, 3, 4, 5, 6, 7], "named_op": [1, 2], "named_paramet": 2, "namedtupl": 3, "ncol": 1, "nconsid": 2, "ndarrai": [5, 7], "necessari": [1, 2, 5], "necessarili": 2, "need": [1, 2, 5, 6], "neg": 2, "nest": 1, "net": [2, 4], "network": 1, "networkx": 3, "new": [1, 2, 4, 5, 6, 7], "new_messag": 7, "nexampl": [2, 6], "next": [1, 2], "next_agent_st": [1, 3, 8], "next_observ": [1, 8], "next_observation_hash_fn": 1, "nn": [2, 5, 6], "no_grad": 5, "no_observ": [1, 8], "nobserv": [2, 6], "node": [1, 2, 3, 5, 6], "nolock": 1, "non": [1, 4, 5], "none": [1, 2, 3, 4, 5, 6, 7], "nonetyp": [1, 2, 3, 4, 5, 7], "notabl": 2, "notat": 1, "note": [1, 2, 3, 5, 6], "noutput": [4, 5], "now": 1, "np": 1, "npt": 5, "nrevis": 4, "nreward": 4, "nrow": 1, "nthe": 4, "nthese": 2, "nthought": [2, 6], "num": 1, "num_eval_iter": [1, 3], "num_memori": [1, 2], "num_rollouts_per_env": [1, 3], "num_train_iter": [1, 3], "number": [1, 2, 3, 4], "numer": 1, "numpi": 1, "nuse": [2, 6], "nvalu": 5, "nwhich": 4, "nx": 3, "nx_pydot": 3, "o_t": 1, "ob": [2, 3], "object": [1, 2, 3, 4, 5, 6, 7], "observ": [1, 2, 3, 5, 6, 8], "observation_hash_fn": 1, "off": 3, "offlin": 3, "offlinetrain": [1, 3], "offlinetrainerconfig": [1, 3], "offset": 1, "onc": [1, 7], "one": [2, 3, 6], "ones": 2, "onli": [1, 5], "onlin": 3, "onlinetrain": [1, 3], "onlinetrainerconfig": [1, 3], "onward": 1, "op": [1, 2, 3, 4, 6, 8], "op_cal": [1, 5], "op_class": [1, 5], "op_class_nam": 5, "op_nam": [1, 3, 5], "op_result": 3, "op_util": [1, 4, 8], "opctx": [1, 5], "openai": [1, 2, 7], "openreview": [2, 4], "oper": [1, 2, 5], "opresult": [1, 2, 3, 5], "opt": [1, 2, 3], "optim": [1, 3, 5], "optimizer_cl": 4, "optimizer_kwarg": [3, 4], "optimizer_typ": [3, 4], "optimizerconfig": [3, 4], "option": [1, 2, 3, 5, 7], "orchestr": 2, "order": [1, 3, 4, 5], "ordered_dict": 1, "ordereddict": 1, "org": [2, 6], "origin": [1, 2], "original_exc": 3, "other": [1, 5, 7], "otherwis": 5, "out": 1, "output": [1, 2, 3, 4, 5, 7], "output_call_id": 5, "output_dir": 3, "output_op": [3, 4, 5], "output_typ": 7, "outputprompt": [3, 4], "outsid": 1, "over": [3, 5], "overlap": 1, "overload": 1, "overrid": [1, 4], "p": 5, "p_": 5, "packag": [0, 8], "page": 0, "panda": [1, 8], "paper": [2, 4, 6], "paramet": [1, 2, 3, 4, 5, 6, 7], "parent": [1, 3], "pars": 6, "parse_messag": [5, 6], "parsedllmcallmodul": [5, 6], "parser": 6, "partial": 2, "pass": [1, 2, 3, 5, 7], "patch": 5, "path": [1, 2], "pathlik": [1, 3], "pd": 1, "pdf": 4, "per": 3, "percentag": 1, "perfect": 2, "perform": [1, 2, 3, 4], "persist": 5, "pick": 2, "pin": 2, "place": [1, 2, 5, 7], "plain": 2, "png": 3, "po": 1, "point": 5, "pomdp": 2, "popul": 3, "portion": 3, "posit": [1, 2, 5], "positivememoryopt": [3, 4], "possibl": [1, 2, 4, 6], "possibli": 1, "post": [1, 2], "postfix": 1, "potenti": 2, "predict": 5, "prefix": [1, 6], "prepend": 7, "prepend_si": [1, 7], "prepend_sys_and_append_si": [1, 7], "previou": 2, "print": [1, 3], "prior": 2, "prior_stat": 2, "privat": 5, "probabl": [2, 7], "problem": 2, "process": [2, 3, 6], "produc": 4, "progress": 1, "progress_appli": 1, "progressbar": 1, "promis": 2, "prompt": [1, 2, 3, 4, 5, 6, 8], "prompt_and_completion_cost": [1, 7], "prompt_count": [1, 7], "prompt_op": [3, 4], "promptop": [1, 4, 5], "propag": 5, "properti": [1, 3, 5, 7], "propos": [2, 4], "proposal_prompt_func": [1, 2], "protect": 5, "protocol": 4, "provid": [1, 2, 3, 4, 5, 7], "pseudocod": 3, "public": 1, "pull": 2, "purpos": [1, 5], "put": 6, "puzzl": 2, "pydant": [1, 2, 3, 4, 5, 6, 7], "pydantic_cor": 1, "pydanticserializationerror": 1, "python": [1, 2, 5, 6], "pytorch": [5, 6], "q": [1, 2], "qualiti": 5, "qualnam": [2, 4, 6, 7], "queri": [1, 2, 5, 7], "query_factori": [1, 2], "query_prompt": [3, 4], "question": [1, 2, 6], "quit": 2, "r_": 1, "r_bar": 1, "r_t": 1, "rais": [1, 5, 7], "randint": 1, "randn": 5, "random": 1, "rang": 1, "rate": [1, 3], "rate_fmt": 1, "rate_inv": 1, "rate_inv_fmt": 1, "rate_noinv": 1, "rate_noinv_fmt": 1, "raw": 6, "raw_log_p": 5, "reach": 1, "react": [1, 2, 5], "react_ag": [1, 8], "reactag": [1, 2, 4], "reactmodul": [5, 6], "read": [1, 2], "readi": 1, "realiz": 2, "reason": 2, "recal": 2, "receiv": [1, 7], "recent": 2, "recommend": 1, "record": 5, "recurs": 3, "redefinit": 2, "reduc": 1, "refer": 1, "reflect": [1, 5], "reflectmodul": [5, 6], "reflectmoduleconfig": [5, 6], "refresh": [1, 8], "regist": 1, "rehydr": 5, "relev": [2, 5], "remain": 1, "remaining_": 1, "remot": 2, "remov": 1, "render": 3, "render_doc": 2, "repeat": [1, 2, 6], "repeatedli": 3, "replac": [1, 2, 3, 4, 5, 6, 7], "replay_actions_on_clon": 3, "replay_buff": [1, 3], "repr": 1, "repres": [1, 2, 7], "represent": [1, 4], "request": [1, 2], "requir": [1, 2, 3, 4, 5, 6, 7], "requires_grad": 5, "rerais": 3, "reraise_exc_a": [1, 3], "reset": [1, 3, 8], "resiz": [1, 3, 4], "resolve_fully_qualified_nam": [1, 5], "resort": 1, "respect": 5, "restart": 1, "result": [1, 2, 3, 4, 5, 6, 7], "resultorvalu": 5, "retriev": [2, 5], "retry_st": 2, "retrycallst": 2, "return": [1, 2, 3, 4, 5, 6, 7], "reward": [1, 2, 3, 4, 8], "reward_discount": [3, 4], "right": 5, "rl": [1, 2], "role": 7, "rollout": [1, 8], "rollout_manag": 3, "rolloutdebugdumpcallback": [1, 3], "rolloutmanag": [1, 3], "root": 1, "root_id": 1, "round_trip": 1, "run": [1, 2, 3, 4, 5, 7], "run_id": [1, 5], "runner": [1, 8], "s_0": 1, "s_t": 1, "safe": [2, 3], "safe_access_index": [1, 5], "same": [5, 7], "sampl": 4, "sample_trajectori": [1, 3], "sample_tre": [1, 3], "samples_per_beam": 3, "scale": 1, "schema": 7, "scientif": 1, "score": [3, 4], "score_fn": [3, 4], "scoring_fn": 3, "screen": 1, "search": [0, 2, 4, 5, 7], "second": 1, "second_sys_prompt": 6, "seconds_to_first_token": [1, 7], "seconds_to_last_token": [1, 7], "section": 5, "see": [1, 4, 5], "select": [2, 5, 6], "self": [1, 2, 4, 5, 7], "sent": 7, "separ": [2, 6], "sequenc": [3, 4, 5, 7], "sequenti": [2, 5], "seri": 1, "serial": [1, 5], "serialize_as_ani": 1, "serialize_uuid": [1, 5], "seriesgroupbi": 1, "server": 2, "set": [1, 2, 3, 4, 5], "set_descript": [1, 8], "set_description_str": [1, 8], "set_lock": [1, 8], "set_mod": [1, 7], "set_model_nam": [1, 7], "set_nam": [1, 5], "set_postfix": [1, 8], "set_postfix_str": [1, 8], "set_training_mod": [1, 5], "sever": 7, "shim": [0, 8], "shortcut": 1, "should": [1, 2, 3, 4, 5, 6, 7], "show_pbar": 4, "shuffl": 4, "si": 1, "similar": [1, 2], "simpl": [2, 7], "simple_ag": [1, 8], "simpleag": [1, 2], "simpleagentst": [1, 2], "simpli": [2, 4, 5, 6], "sinc": [1, 5], "singl": [4, 5, 6], "size": [1, 4], "skip": [1, 3], "slow": 1, "small": 7, "smooth": 1, "so": [2, 3, 4, 6], "solut": 2, "solv": 2, "some": [1, 4, 5], "some_frontend": 1, "someth": 2, "sourc": [1, 2, 3, 4, 5, 6, 7], "sp": 1, "spars": 7, "sparseembeddingmodel": [1, 7], "specifi": [1, 2, 3, 4, 7], "speed": 1, "ss": 1, "stabil": 2, "stackoverflow": 1, "stai": 1, "standard": 1, "start": [1, 2, 3, 4, 6, 7], "start_config": 6, "stat": 1, "state": [1, 2], "static": [1, 2, 5, 6, 7], "statist": 1, "status_print": [1, 8], "stderr": 1, "stdout": 1, "step": [1, 2, 3, 4, 8], "step_id": 1, "still": 5, "stop_grad": [1, 5], "stopgradop": [1, 5], "storag": 5, "store": [2, 3, 5], "store_tensor_input": [1, 5], "str": [1, 2, 3, 4, 5, 6, 7], "straight": 5, "straight_through_estim": [1, 5], "strategi": 4, "stream": 1, "strenum": [2, 4, 6, 7], "string": [1, 2, 4, 5], "string_input": 5, "stringio": 1, "structur": 5, "structurekv": 5, "style": [2, 6], "sub": 4, "subclass": 2, "subgraph": 6, "submodul": [0, 8], "subpackag": [0, 8], "subsequ": 1, "success": 2, "suffix": 1, "sum": [5, 7], "sum_": 1, "sum_logprob": [1, 7], "suppli": 2, "support": [1, 2, 7], "sy": 1, "symmetri": 2, "sys_cont": 7, "sys_prompt": [1, 2, 6], "system": [1, 2, 6, 7], "system_fingerprint": [1, 7], "system_prompt": [3, 4], "t": [1, 2, 5], "t_output": 5, "tagentst": [2, 3], "take": [1, 2, 3, 5, 6], "taken": [2, 5], "target": 5, "target_reward": 3, "task": [1, 2, 3], "taskdataset": 3, "tconfig": 5, "temperatur": [2, 5, 7], "templat": [1, 2, 4, 5], "tensor": 5, "tensor_arg": 5, "tensor_input": 5, "tensor_kwarg": 5, "tenv": 3, "term": 1, "termin": [1, 3, 5], "terminalprintingcallback": [1, 3], "test": 2, "text": [5, 7], "textiowrapp": 1, "than": [1, 2], "thei": 4, "them": [1, 2, 3, 4], "thi": [1, 2, 3, 4, 5, 6, 7], "think": [2, 5, 6], "those": 5, "thought": [1, 2, 5], "thoughtmodul": [5, 6], "thread": 1, "three": 2, "through": 5, "tight": 1, "time": [1, 2, 3, 5, 6], "timer": [1, 3], "timestep": [1, 8], "tindex": 5, "to_dict": [1, 5], "to_json": 1, "to_jsonl": [1, 8], "to_network": [1, 3], "to_pydot": 3, "token": 7, "tool": [1, 2, 3, 5, 6, 7], "tool_cal": 5, "tool_choic": [5, 7], "tool_choice_requir": [1, 5, 7], "tool_description_method": [1, 2, 6], "tool_nam": [2, 6], "tooldescriptionmethod": [2, 5, 6], "toolrequestmessag": [1, 2, 3, 5, 6], "toolresponsemessag": [1, 2], "tools_to_track": [1, 3], "top_logprob": 2, "topolog": 5, "topological_ord": 5, "torch": [2, 5, 6], "torch_modul": 5, "torch_op": [1, 8], "torchop": [1, 5], "torchparambackwardestim": [1, 5], "total": 1, "total_fmt": 1, "toutput": [4, 5], "tparsedmessag": 6, "tqdm": [0, 1, 8], "tqdm_gui": 1, "tqdm_kwarg": 1, "trace": [1, 3, 4, 5], "track": 2, "track_tool_usag": 3, "trail": 1, "train": [1, 2, 3, 4, 5], "train_dataset": 3, "train_mean": [1, 3], "train_trajectori": 3, "trainabl": 2, "trainer": 4, "training_mod": 5, "traj": [1, 3], "traj_id": [1, 3, 8], "trajectori": [0, 1, 2, 3, 4, 8], "trajectoryfilecallback": [1, 3], "trajectorymetricscallback": [1, 3], "trang": [0, 1, 8], "transform": 5, "transit": [0, 1, 3, 4, 8], "transitiontre": [0, 1, 3, 8], "travers": [1, 5], "tree": [1, 2, 5], "tree_of_thoughts_ag": [1, 8], "tree_search": [1, 8], "treeofthoughtsag": [1, 2], "treesearchrollout": [1, 3], "tresult": 5, "trigger": 1, "true": [1, 2, 3, 4, 5, 7], "trunc": 3, "truncat": [1, 5, 7, 8], "try": [4, 5], "tserializableagentst": 2, "tty": 1, "tupl": [1, 2, 3, 4, 5, 6, 7], "turbo": [6, 7], "tweak": 1, "two": 7, "type": [1, 2, 3, 4, 5, 6, 7], "typic": [2, 5], "u": 5, "uindexmemorymodel": [1, 5], "un": 7, "unbias": 5, "undefin": 3, "under": [2, 5], "undertak": 2, "unicod": 1, "union": [1, 2, 3, 4, 5, 7], "uniqu": 1, "unit": 1, "unit_divisor": 1, "unit_scal": 1, "uniti": 1, "unknown": 7, "unless": 1, "unpaus": [1, 8], "unset": 3, "unspecifi": [1, 2, 7], "until": 1, "unwrap_valu": [1, 5], "up": [1, 2, 5], "updat": [1, 3, 4, 5, 8], "update_everi": [1, 3], "updating_optim": 3, "upon": [1, 5], "upstream": 5, "us": [1, 2, 3, 4, 5, 6], "usag": 1, "usd": 7, "user": [2, 3, 5, 6, 7], "user_cont": 7, "userlist": 4, "usual": 1, "util": [0, 7, 8], "uuid": [1, 5, 7], "uuid4": 7, "v": [1, 5], "v1": [1, 2, 3, 4, 5, 6, 7], "valid": [1, 3, 4, 6, 7], "validate_json_complet": [1, 7], "validate_score_fn": [3, 4], "validate_uuid": [1, 5], "valu": [1, 2, 3, 4, 5, 6, 7, 8], "value_prompt_func": [1, 2], "valueerror": 7, "var": 1, "variabl": [4, 5], "variou": 5, "verbos": 3, "veri": [1, 7], "version": 2, "vhat": 2, "via": [1, 2, 5, 7], "wa": [1, 4, 5], "wai": 1, "wandbloggingcallback": [1, 3], "want": 4, "warn": 1, "we": [1, 2, 4, 5, 7], "weight": 1, "what": [1, 2, 5, 6], "when": [1, 3, 5, 7], "where": [1, 2, 5], "whether": 1, "which": [1, 2, 5, 7], "while": [1, 3], "whole": 5, "width": [1, 3], "window": 1, "within": 1, "without": [1, 2], "won": 5, "work": [1, 2, 6], "world": 7, "would": 2, "wrap": 5, "wrapattr": [1, 8], "wrapper": 1, "write": [1, 3, 8], "write_byt": 1, "write_dot": 3, "write_png": 3, "x": [1, 5], "xml": [2, 5, 6], "xml_string": 7, "yet": 2, "yield": 5, "york": [2, 6], "you": [1, 2, 4, 6], "your": [1, 4], "zero": [1, 2, 4, 5], "zero_estim": [1, 5]}, "titles": ["Welcome to ldp\u2019s documentation!", "ldp package", "ldp.agent package", "ldp.alg package", "ldp.alg.optimizer package", "ldp.graph package", "ldp.graph.modules package", "ldp.llms package", "ldp"], "titleterms": {"": 0, "agent": 2, "agent_cli": 2, "alg": [3, 4], "algorithm": 3, "ap": 4, "async_torch": 5, "beam_search": 3, "callback": 3, "chat": 7, "common_op": 5, "content": [0, 1, 2, 3, 4, 5, 6, 7], "data_structur": 1, "dataset": 3, "document": 0, "embed": 7, "exampl": [], "gradient_estim": 5, "graph": [5, 6], "indic": 0, "interactive_ag": 2, "ldp": [0, 1, 2, 3, 4, 5, 6, 7, 8], "llm": 7, "llm_call": 6, "loss_op": 5, "main": 1, "memori": [4, 5], "memory_ag": 2, "modul": [1, 2, 3, 4, 5, 6, 7], "op": 5, "op_util": 5, "opt": 4, "optim": 4, "packag": [1, 2, 3, 4, 5, 6, 7], "paramet": [], "prompt": 7, "react": 6, "react_ag": 2, "refer": [], "reflect": 6, "replay_buff": 4, "return": [], "rollout": 3, "runner": 3, "shim": 1, "simple_ag": 2, "submodul": [1, 2, 3, 4, 5, 6, 7], "subpackag": [1, 3, 5], "tabl": 0, "thought": 6, "torch_op": 5, "tree_of_thoughts_ag": 2, "tree_search": 3, "util": 1, "welcom": 0}}) \ No newline at end of file