Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

load faster... #407

Open
7978178 opened this issue Feb 19, 2024 · 21 comments
Open

load faster... #407

7978178 opened this issue Feb 19, 2024 · 21 comments

Comments

@7978178
Copy link

7978178 commented Feb 19, 2024

import langroid as lr
from langroid.language_models import Role, LLMMessage

cfg = lr.language_models.OpenAIGPTConfig(
    chat_model = lr.language_models.OpenAIChatModel.GPT4
)
mdl = lr.language_models.OpenAIGPT(cfg)
msg = LLMMessage(
    content = "what is the capital of Bangladesh",
    role = Role.USER
)
response = mdl.chat([msg], max_tokens=200)
print(response.message)
exit(0)

takes a long time to load (mbp 2020 16gb ram i5) making iterations slower... can you post some tips to load faster?

@pchalasani
Copy link
Contributor

It looks like the imports are taking a while. Will look

@pchalasani
Copy link
Contributor

pchalasani commented Feb 19, 2024

A minimal example. Even something simple like this takes ~5 secs (M1 MBP Pro Max) to get to printing "hello":

from langroid.utils.configuration import settings
print("hello")

@nilspalumbo do you think this may be due to the various top level imports? Or maybe some imports are running code?

@nilspalumbo
Copy link
Collaborator

nilspalumbo commented Feb 19, 2024

Hmm that could be possible when running import langroid as lr since that loads the entire repo, but from langroid.utils.configuration import settings shouldn't. It runs some code (i.e. the load_dotenv) but that should be very fast; I'll look into it.

@pchalasani
Copy link
Contributor

but from langroid.utils.configuration import settings shouldn't.

if I rename langroid/__init__.py to something else, then it's fast, which means that any from langroid.* statement does activate the entire set of imports in langroid/__init__.py. We could do a lazy loading strategy, something like below, but that has a tradeoff (improves import time at the cost of some transparency):

class LazyModuleLoader:
    def __init__(self, module_name):
        self.module_name = module_name
        self.module = None

    def __getattr__(self, name):
        if self.module is None:
            self.module = __import__(self.module_name, fromlist=[name])
        return getattr(self.module, name)

module1 = LazyModuleLoader('blah.module1')
module2 = LazyModuleLoader('blah.module2')
# Repeat for other modules as necessary

# Then, to allow for 'import blah as bl' and 'bl.module1', etc.
__all__ = ['module1', 'module2']  # List all module names here

@nilspalumbo
Copy link
Collaborator

nilspalumbo commented Feb 19, 2024

I think we should do that; the loss of transparency isn't too bad. Hopefully mypy tolerates it; this might cause problems with static analysis. If it doesn't, I'll update things.

@pchalasani
Copy link
Contributor

pchalasani commented Feb 22, 2024

Turns out even if I add lazy loads in every __init__ that has an "__all__", it makes the trivial script above load fast, BUT examples/basic/chat.py still takes 5 secs -- I tracked it down and found this is because of large number of imports in agent.base.py, so when we do from langroid.agent.base import Agent, it takes 5 secs. So the only way to solve this is to have on-demand imports within agent/base.py, which doesn't seem all that nice.

@7978178
Copy link
Author

7978178 commented Feb 22, 2024

:-( looks like one has to live with it as part of program. don't suprise me when pip freeze returns ~350 packages

guess refactoring the package might be one way provided that's on the roadmap

@nilspalumbo
Copy link
Collaborator

Hmm perhaps we if we replace the imports with a single import langroid as lr the lazy loading would work; this would delay referencing specific modules until needed.

@pchalasani
Copy link
Contributor

Hmm perhaps we if we replace the imports with a single import langroid as lr the lazy loading would work; this would delay referencing specific modules until needed.

You mean do this at the top and within the code in base.py we access everything using “lr.” ? Yes that should work

@nilspalumbo
Copy link
Collaborator

nilspalumbo commented Feb 23, 2024

Yeah, that's what I was thinking. We may want to keep some additional imports to keep the code clean though; importing sub-packages rather than individual modules would help with that, since lazy loading would still apply in that case (and the init files are very light).

@7978178
Copy link
Author

7978178 commented Feb 26, 2024

ran this dependency graph:
does one have to load all the vector databases, search engines etc etc on startup?

(.venv) bxs:oai bs$ pipdeptree -p langroid
langroid==0.1.191
├── aiohttp [required: >=3.9.1,<4.0.0, installed: 3.9.3]
│   ├── aiosignal [required: >=1.1.2, installed: 1.3.1]
│   │   └── frozenlist [required: >=1.1.0, installed: 1.4.1]
│   ├── attrs [required: >=17.3.0, installed: 23.2.0]
│   ├── frozenlist [required: >=1.1.1, installed: 1.4.1]
│   ├── multidict [required: >=4.5,<7.0, installed: 6.0.5]
│   └── yarl [required: >=1.0,<2.0, installed: 1.9.4]
│       ├── idna [required: >=2.0, installed: 3.6]
│       └── multidict [required: >=4.0, installed: 6.0.5]
├── async-generator [required: >=1.10,<2.0, installed: 1.10]
├── autopep8 [required: >=2.0.2,<3.0.0, installed: 2.0.4]
│   └── pycodestyle [required: >=2.10.0, installed: 2.11.1]
├── black [required: >=23.3.0,<24.0.0, installed: 23.12.1]
│   ├── click [required: >=8.0.0, installed: 8.1.7]
│   ├── mypy-extensions [required: >=0.4.3, installed: 1.0.0]
│   ├── packaging [required: >=22.0, installed: 23.2]
│   ├── pathspec [required: >=0.9.0, installed: 0.12.1]
│   └── platformdirs [required: >=2, installed: 4.2.0]
├── bs4 [required: >=0.0.1,<0.0.2, installed: 0.0.1]
│   └── beautifulsoup4 [required: Any, installed: 4.12.3]
│       └── soupsieve [required: >1.2, installed: 2.5]
├── chromadb [required: ==0.3.21, installed: 0.3.21]
│   ├── clickhouse-connect [required: >=0.5.7, installed: 0.7.0]
│   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   ├── lz4 [required: Any, installed: 4.3.3]
│   │   ├── pytz [required: Any, installed: 2024.1]
│   │   ├── urllib3 [required: >=1.26, installed: 2.2.0]
│   │   └── zstandard [required: Any, installed: 0.22.0]
│   ├── duckdb [required: >=0.7.1, installed: 0.9.2]
│   ├── fastapi [required: >=0.85.1, installed: 0.109.2]
│   │   ├── pydantic [required: >=1.7.4,<3.0.0,!=2.1.0,!=2.0.1,!=2.0.0,!=1.8.1,!=1.8, installed: 1.10.13]
│   │   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   │   ├── starlette [required: >=0.36.3,<0.37.0, installed: 0.36.3]
│   │   │   └── anyio [required: >=3.4.0,<5, installed: 4.2.0]
│   │   │       ├── idna [required: >=2.8, installed: 3.6]
│   │   │       └── sniffio [required: >=1.1, installed: 1.3.0]
│   │   └── typing-extensions [required: >=4.8.0, installed: 4.9.0]
│   ├── hnswlib [required: >=0.7, installed: 0.8.0]
│   │   └── numpy [required: Any, installed: 1.26.4]
│   ├── numpy [required: >=1.21.6, installed: 1.26.4]
│   ├── pandas [required: >=1.3, installed: 2.2.0]
│   │   ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
│   │   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── pytz [required: >=2020.1, installed: 2024.1]
│   │   └── tzdata [required: >=2022.7, installed: 2023.4]
│   ├── posthog [required: >=2.4.0, installed: 3.4.0]
│   │   ├── backoff [required: >=1.10.0, installed: 2.2.1]
│   │   ├── monotonic [required: >=1.5, installed: 1.6]
│   │   ├── python-dateutil [required: >2.1, installed: 2.8.2]
│   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── requests [required: >=2.7,<3.0, installed: 2.31.0]
│   │   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │   └── six [required: >=1.5, installed: 1.16.0]
│   ├── pydantic [required: >=1.9, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   ├── requests [required: >=2.28, installed: 2.31.0]
│   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── sentence-transformers [required: >=2.2.2, installed: 2.3.1]
│   │   ├── huggingface-hub [required: >=0.15.1, installed: 0.20.3]
│   │   │   ├── filelock [required: Any, installed: 3.13.1]
│   │   │   ├── fsspec [required: >=2023.5.0, installed: 2024.2.0]
│   │   │   ├── packaging [required: >=20.9, installed: 23.2]
│   │   │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │   │   ├── requests [required: Any, installed: 2.31.0]
│   │   │   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   │   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   │   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   │   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │   │   ├── tqdm [required: >=4.42.1, installed: 4.66.2]
│   │   │   └── typing-extensions [required: >=3.7.4.3, installed: 4.9.0]
│   │   ├── nltk [required: Any, installed: 3.8.1]
│   │   │   ├── click [required: Any, installed: 8.1.7]
│   │   │   ├── joblib [required: Any, installed: 1.3.2]
│   │   │   ├── regex [required: >=2021.8.3, installed: 2023.12.25]
│   │   │   └── tqdm [required: Any, installed: 4.66.2]
│   │   ├── numpy [required: Any, installed: 1.26.4]
│   │   ├── pillow [required: Any, installed: 10.2.0]
│   │   ├── scikit-learn [required: Any, installed: 1.4.0]
│   │   │   ├── joblib [required: >=1.2.0, installed: 1.3.2]
│   │   │   ├── numpy [required: >=1.19.5,<2.0, installed: 1.26.4]
│   │   │   ├── scipy [required: >=1.6.0, installed: 1.12.0]
│   │   │   │   └── numpy [required: >=1.22.4,<1.29.0, installed: 1.26.4]
│   │   │   └── threadpoolctl [required: >=2.0.0, installed: 3.2.0]
│   │   ├── scipy [required: Any, installed: 1.12.0]
│   │   │   └── numpy [required: >=1.22.4,<1.29.0, installed: 1.26.4]
│   │   ├── sentencepiece [required: Any, installed: 0.1.99]
│   │   ├── torch [required: >=1.11.0, installed: 2.0.1]
│   │   │   ├── filelock [required: Any, installed: 3.13.1]
│   │   │   ├── Jinja2 [required: Any, installed: 3.1.3]
│   │   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   │   ├── networkx [required: Any, installed: 3.2.1]
│   │   │   ├── sympy [required: Any, installed: 1.12]
│   │   │   │   └── mpmath [required: >=0.19, installed: 1.3.0]
│   │   │   └── typing-extensions [required: Any, installed: 4.9.0]
│   │   ├── tqdm [required: Any, installed: 4.66.2]
│   │   └── transformers [required: >=4.32.0,<5.0.0, installed: 4.36.2]
│   │       ├── filelock [required: Any, installed: 3.13.1]
│   │       ├── huggingface-hub [required: >=0.19.3,<1.0, installed: 0.20.3]
│   │       │   ├── filelock [required: Any, installed: 3.13.1]
│   │       │   ├── fsspec [required: >=2023.5.0, installed: 2024.2.0]
│   │       │   ├── packaging [required: >=20.9, installed: 23.2]
│   │       │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │       │   ├── requests [required: Any, installed: 2.31.0]
│   │       │   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       │   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       │   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       │   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │       │   ├── tqdm [required: >=4.42.1, installed: 4.66.2]
│   │       │   └── typing-extensions [required: >=3.7.4.3, installed: 4.9.0]
│   │       ├── numpy [required: >=1.17, installed: 1.26.4]
│   │       ├── packaging [required: >=20.0, installed: 23.2]
│   │       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │       ├── regex [required: !=2019.12.17, installed: 2023.12.25]
│   │       ├── requests [required: Any, installed: 2.31.0]
│   │       │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │       ├── safetensors [required: >=0.3.1, installed: 0.4.2]
│   │       ├── tokenizers [required: >=0.14,<0.19, installed: 0.15.1]
│   │       │   └── huggingface-hub [required: >=0.16.4,<1.0, installed: 0.20.3]
│   │       │       ├── filelock [required: Any, installed: 3.13.1]
│   │       │       ├── fsspec [required: >=2023.5.0, installed: 2024.2.0]
│   │       │       ├── packaging [required: >=20.9, installed: 23.2]
│   │       │       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │       │       ├── requests [required: Any, installed: 2.31.0]
│   │       │       │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       │       │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       │       │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       │       │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │       │       ├── tqdm [required: >=4.42.1, installed: 4.66.2]
│   │       │       └── typing-extensions [required: >=3.7.4.3, installed: 4.9.0]
│   │       └── tqdm [required: >=4.27, installed: 4.66.2]
│   └── uvicorn [required: >=0.18.3, installed: 0.27.1]
│       ├── click [required: >=7.0, installed: 8.1.7]
│       └── h11 [required: >=0.8, installed: 0.14.0]
├── colorlog [required: >=6.7.0,<7.0.0, installed: 6.8.2]
├── docstring-parser [required: >=0.15,<0.16, installed: 0.15]
├── duckduckgo-search [required: >=4.4,<5.0, installed: 4.4]
│   ├── click [required: >=8.1.7, installed: 8.1.7]
│   ├── curl-cffi [required: >=0.6.0b7, installed: 0.6.0b9]
│   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   └── cffi [required: >=1.12.0, installed: 1.16.0]
│   │       └── pycparser [required: Any, installed: 2.21]
│   ├── docstring-inheritance [required: >=2.1.2, installed: 2.1.2]
│   ├── lxml [required: >=4.9.3, installed: 4.9.4]
│   └── nest-asyncio [required: >=1.6.0, installed: 1.6.0]
├── Faker [required: >=18.9.0,<19.0.0, installed: 18.13.0]
│   └── python-dateutil [required: >=2.4, installed: 2.8.2]
│       └── six [required: >=1.5, installed: 1.16.0]
├── fakeredis [required: >=2.12.1,<3.0.0, installed: 2.21.0]
│   ├── redis [required: >=4, installed: 5.0.1]
│   └── sortedcontainers [required: >=2,<3, installed: 2.4.0]
├── farm-haystack [required: >=1.21.1,<2.0.0, installed: 1.24.1]
│   ├── boilerpy3 [required: Any, installed: 1.0.7]
│   ├── Events [required: Any, installed: 0.5]
│   ├── httpx [required: Any, installed: 0.26.0]
│   │   ├── anyio [required: Any, installed: 4.2.0]
│   │   │   ├── idna [required: >=2.8, installed: 3.6]
│   │   │   └── sniffio [required: >=1.1, installed: 1.3.0]
│   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   ├── httpcore [required: ==1.*, installed: 1.0.2]
│   │   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   │   └── h11 [required: >=0.13,<0.15, installed: 0.14.0]
│   │   ├── idna [required: Any, installed: 3.6]
│   │   └── sniffio [required: Any, installed: 1.3.0]
│   ├── jsonschema [required: Any, installed: 4.21.1]
│   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   ├── jsonschema-specifications [required: >=2023.03.6, installed: 2023.12.1]
│   │   │   └── referencing [required: >=0.31.0, installed: 0.33.0]
│   │   │       ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │       └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   ├── referencing [required: >=0.28.4, installed: 0.33.0]
│   │   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   └── rpds-py [required: >=0.7.1, installed: 0.17.1]
│   ├── lazy-imports [required: ==0.3.1, installed: 0.3.1]
│   ├── more-itertools [required: Any, installed: 10.2.0]
│   ├── networkx [required: Any, installed: 3.2.1]
│   ├── pandas [required: Any, installed: 2.2.0]
│   │   ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
│   │   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── pytz [required: >=2020.1, installed: 2024.1]
│   │   └── tzdata [required: >=2022.7, installed: 2023.4]
│   ├── pillow [required: Any, installed: 10.2.0]
│   ├── platformdirs [required: Any, installed: 4.2.0]
│   ├── posthog [required: Any, installed: 3.4.0]
│   │   ├── backoff [required: >=1.10.0, installed: 2.2.1]
│   │   ├── monotonic [required: >=1.5, installed: 1.6]
│   │   ├── python-dateutil [required: >2.1, installed: 2.8.2]
│   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── requests [required: >=2.7,<3.0, installed: 2.31.0]
│   │   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │   └── six [required: >=1.5, installed: 1.16.0]
│   ├── prompthub-py [required: ==4.0.0, installed: 4.0.0]
│   │   ├── PyYAML [required: >=6.0,<7.0, installed: 6.0.1]
│   │   └── requests [required: >=2.28.2,<3.0.0, installed: 2.31.0]
│   │       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── pydantic [required: <2, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   ├── quantulum3 [required: Any, installed: 0.9.0]
│   │   ├── inflect [required: Any, installed: 7.0.0]
│   │   │   ├── pydantic [required: >=1.9.1, installed: 1.10.13]
│   │   │   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   │   │   └── typing-extensions [required: Any, installed: 4.9.0]
│   │   └── num2words [required: Any, installed: 0.5.13]
│   │       └── docopt [required: >=0.6.2, installed: 0.6.2]
│   ├── rank-bm25 [required: Any, installed: 0.2.2]
│   │   └── numpy [required: Any, installed: 1.26.4]
│   ├── requests [required: Any, installed: 2.31.0]
│   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── requests-cache [required: <1.0.0, installed: 0.9.8]
│   │   ├── appdirs [required: >=1.4.4, installed: 1.4.4]
│   │   ├── attrs [required: >=21.2, installed: 23.2.0]
│   │   ├── cattrs [required: >=22.2, installed: 23.2.3]
│   │   │   └── attrs [required: >=23.1.0, installed: 23.2.0]
│   │   ├── requests [required: >=2.22, installed: 2.31.0]
│   │   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │   ├── url-normalize [required: >=1.4, installed: 1.4.3]
│   │   │   └── six [required: Any, installed: 1.16.0]
│   │   └── urllib3 [required: >=1.25.5, installed: 2.2.0]
│   ├── scikit-learn [required: >=1.3.0, installed: 1.4.0]
│   │   ├── joblib [required: >=1.2.0, installed: 1.3.2]
│   │   ├── numpy [required: >=1.19.5,<2.0, installed: 1.26.4]
│   │   ├── scipy [required: >=1.6.0, installed: 1.12.0]
│   │   │   └── numpy [required: >=1.22.4,<1.29.0, installed: 1.26.4]
│   │   └── threadpoolctl [required: >=2.0.0, installed: 3.2.0]
│   ├── sseclient-py [required: Any, installed: 1.8.0]
│   ├── tenacity [required: Any, installed: 8.2.3]
│   ├── tiktoken [required: >=0.5.1, installed: 0.5.2]
│   │   ├── regex [required: >=2022.1.18, installed: 2023.12.25]
│   │   └── requests [required: >=2.26.0, installed: 2.31.0]
│   │       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── tqdm [required: Any, installed: 4.66.2]
│   └── transformers [required: ==4.36.2, installed: 4.36.2]
│       ├── filelock [required: Any, installed: 3.13.1]
│       ├── huggingface-hub [required: >=0.19.3,<1.0, installed: 0.20.3]
│       │   ├── filelock [required: Any, installed: 3.13.1]
│       │   ├── fsspec [required: >=2023.5.0, installed: 2024.2.0]
│       │   ├── packaging [required: >=20.9, installed: 23.2]
│       │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│       │   ├── requests [required: Any, installed: 2.31.0]
│       │   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       │   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       │   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│       │   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│       │   ├── tqdm [required: >=4.42.1, installed: 4.66.2]
│       │   └── typing-extensions [required: >=3.7.4.3, installed: 4.9.0]
│       ├── numpy [required: >=1.17, installed: 1.26.4]
│       ├── packaging [required: >=20.0, installed: 23.2]
│       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│       ├── regex [required: !=2019.12.17, installed: 2023.12.25]
│       ├── requests [required: Any, installed: 2.31.0]
│       │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       │   ├── idna [required: >=2.5,<4, installed: 3.6]
│       │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│       ├── safetensors [required: >=0.3.1, installed: 0.4.2]
│       ├── tokenizers [required: >=0.14,<0.19, installed: 0.15.1]
│       │   └── huggingface-hub [required: >=0.16.4,<1.0, installed: 0.20.3]
│       │       ├── filelock [required: Any, installed: 3.13.1]
│       │       ├── fsspec [required: >=2023.5.0, installed: 2024.2.0]
│       │       ├── packaging [required: >=20.9, installed: 23.2]
│       │       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│       │       ├── requests [required: Any, installed: 2.31.0]
│       │       │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       │       │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       │       │   ├── idna [required: >=2.5,<4, installed: 3.6]
│       │       │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│       │       ├── tqdm [required: >=4.42.1, installed: 4.66.2]
│       │       └── typing-extensions [required: >=3.7.4.3, installed: 4.9.0]
│       └── tqdm [required: >=4.27, installed: 4.66.2]
├── fire [required: >=0.5.0,<0.6.0, installed: 0.5.0]
│   ├── six [required: Any, installed: 1.16.0]
│   └── termcolor [required: Any, installed: 2.4.0]
├── flake8 [required: >=6.0.0,<7.0.0, installed: 6.1.0]
│   ├── mccabe [required: >=0.7.0,<0.8.0, installed: 0.7.0]
│   ├── pycodestyle [required: >=2.11.0,<2.12.0, installed: 2.11.1]
│   └── pyflakes [required: >=3.1.0,<3.2.0, installed: 3.1.0]
├── google-api-python-client [required: >=2.95.0,<3.0.0, installed: 2.117.0]
│   ├── google-api-core [required: >=1.31.5,<3.0.0.dev0,!=2.3.0,!=2.2.*,!=2.1.*,!=2.0.*, installed: 2.17.0]
│   │   ├── google-auth [required: >=2.14.1,<3.0.dev0, installed: 2.27.0]
│   │   │   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   │   │   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   │   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   │   │   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│   │   │       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
│   │   ├── googleapis-common-protos [required: >=1.56.2,<2.0.dev0, installed: 1.62.0]
│   │   │   └── protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=3.20.1,!=3.20.0, installed: 4.25.2]
│   │   ├── protobuf [required: >=3.19.5,<5.0.0.dev0,!=4.21.5,!=4.21.4,!=4.21.3,!=4.21.2,!=4.21.1,!=4.21.0,!=3.20.1,!=3.20.0, installed: 4.25.2]
│   │   └── requests [required: >=2.18.0,<3.0.0.dev0, installed: 2.31.0]
│   │       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── google-auth [required: >=1.19.0,<3.0.0.dev0, installed: 2.27.0]
│   │   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   │   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   │   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│   │       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
│   ├── google-auth-httplib2 [required: >=0.1.0, installed: 0.2.0]
│   │   ├── google-auth [required: Any, installed: 2.27.0]
│   │   │   ├── cachetools [required: >=2.0.0,<6.0, installed: 5.3.2]
│   │   │   ├── pyasn1-modules [required: >=0.2.1, installed: 0.3.0]
│   │   │   │   └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   │   │   └── rsa [required: >=3.1.4,<5, installed: 4.9]
│   │   │       └── pyasn1 [required: >=0.1.3, installed: 0.5.1]
│   │   └── httplib2 [required: >=0.19.0, installed: 0.22.0]
│   │       └── pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
│   ├── httplib2 [required: >=0.15.0,<1.dev0, installed: 0.22.0]
│   │   └── pyparsing [required: >=2.4.2,<4,!=3.0.3,!=3.0.2,!=3.0.1,!=3.0.0, installed: 3.1.1]
│   └── uritemplate [required: >=3.0.1,<5, installed: 4.1.1]
├── halo [required: >=0.0.31,<0.0.32, installed: 0.0.31]
│   ├── colorama [required: >=0.3.9, installed: 0.4.6]
│   ├── log-symbols [required: >=0.0.14, installed: 0.0.14]
│   │   └── colorama [required: >=0.3.9, installed: 0.4.6]
│   ├── six [required: >=1.12.0, installed: 1.16.0]
│   ├── spinners [required: >=0.0.24, installed: 0.0.24]
│   └── termcolor [required: >=1.1.0, installed: 2.4.0]
├── Jinja2 [required: >=3.1.2,<4.0.0, installed: 3.1.3]
│   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
├── lancedb [required: >=0.4.1,<0.5.0, installed: 0.4.4]
│   ├── attrs [required: >=21.3.0, installed: 23.2.0]
│   ├── cachetools [required: Any, installed: 5.3.2]
│   ├── click [required: >=8.1.7, installed: 8.1.7]
│   ├── deprecation [required: Any, installed: 2.1.0]
│   │   └── packaging [required: Any, installed: 23.2]
│   ├── overrides [required: >=0.7, installed: 7.7.0]
│   ├── pydantic [required: >=1.10, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   ├── pylance [required: ==0.9.6, installed: 0.9.6]
│   │   ├── numpy [required: >=1.22, installed: 1.26.4]
│   │   └── pyarrow [required: >=12, installed: 15.0.0]
│   │       └── numpy [required: >=1.16.6,<2, installed: 1.26.4]
│   ├── PyYAML [required: >=6.0, installed: 6.0.1]
│   ├── ratelimiter [required: ~=1.0, installed: 1.2.0.post0]
│   ├── requests [required: >=2.31.0, installed: 2.31.0]
│   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── retry [required: >=0.9.2, installed: 0.9.2]
│   │   ├── decorator [required: >=3.4.2, installed: 5.1.1]
│   │   └── py [required: >=1.4.26,<2.0.0, installed: 1.11.0]
│   ├── semver [required: >=3.0, installed: 3.0.2]
│   └── tqdm [required: >=4.27.0, installed: 4.66.2]
├── lxml [required: >=4.9.3,<5.0.0, installed: 4.9.4]
├── meilisearch [required: >=0.28.3,<0.29.0, installed: 0.28.4]
│   ├── camel-converter [required: Any, installed: 3.1.1]
│   └── requests [required: Any, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── meilisearch-python-sdk [required: >=2.2.3,<3.0.0, installed: 2.6.1]
│   ├── aiofiles [required: >=0.7, installed: 23.2.1]
│   ├── camel-converter [required: >=1.0.0, installed: 3.1.1]
│   ├── httpx [required: >=0.17, installed: 0.26.0]
│   │   ├── anyio [required: Any, installed: 4.2.0]
│   │   │   ├── idna [required: >=2.8, installed: 3.6]
│   │   │   └── sniffio [required: >=1.1, installed: 1.3.0]
│   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   ├── httpcore [required: ==1.*, installed: 1.0.2]
│   │   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   │   └── h11 [required: >=0.13,<0.15, installed: 0.14.0]
│   │   ├── idna [required: Any, installed: 3.6]
│   │   └── sniffio [required: Any, installed: 1.3.0]
│   ├── pydantic [required: >=1.8, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   └── PyJWT [required: >=2.3.0, installed: 2.8.0]
├── mkdocs [required: >=1.4.2,<2.0.0, installed: 1.5.3]
│   ├── click [required: >=7.0, installed: 8.1.7]
│   ├── ghp-import [required: >=1.0, installed: 2.1.0]
│   │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│   │       └── six [required: >=1.5, installed: 1.16.0]
│   ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│   ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│   ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│   ├── packaging [required: >=20.5, installed: 23.2]
│   ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│   ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│   │   └── PyYAML [required: Any, installed: 6.0.1]
│   └── watchdog [required: >=2.0, installed: 4.0.0]
├── mkdocs-awesome-pages-plugin [required: >=2.8.0,<3.0.0, installed: 2.9.2]
│   ├── mkdocs [required: >=1, installed: 1.5.3]
│   │   ├── click [required: >=7.0, installed: 8.1.7]
│   │   ├── ghp-import [required: >=1.0, installed: 2.1.0]
│   │   │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│   │   │       └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│   │   ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│   │   ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│   │   ├── packaging [required: >=20.5, installed: 23.2]
│   │   ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│   │   ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│   │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │   ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│   │   │   └── PyYAML [required: Any, installed: 6.0.1]
│   │   └── watchdog [required: >=2.0, installed: 4.0.0]
│   ├── natsort [required: >=8.1.0, installed: 8.4.0]
│   └── wcmatch [required: >=7, installed: 8.5]
│       └── bracex [required: >=2.1.1, installed: 2.4]
├── mkdocs-gen-files [required: >=0.4.0,<0.5.0, installed: 0.4.0]
│   └── mkdocs [required: >=1.0.3,<2.0.0, installed: 1.5.3]
│       ├── click [required: >=7.0, installed: 8.1.7]
│       ├── ghp-import [required: >=1.0, installed: 2.1.0]
│       │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│       │       └── six [required: >=1.5, installed: 1.16.0]
│       ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│       │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│       ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│       ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│       ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│       ├── packaging [required: >=20.5, installed: 23.2]
│       ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│       ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│       ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│       │   └── PyYAML [required: Any, installed: 6.0.1]
│       └── watchdog [required: >=2.0, installed: 4.0.0]
├── mkdocs-jupyter [required: >=0.24.1,<0.25.0, installed: 0.24.6]
│   ├── ipykernel [required: >6.0.0,<7.0.0, installed: 6.29.2]
│   │   ├── appnope [required: Any, installed: 0.1.4]
│   │   ├── comm [required: >=0.1.1, installed: 0.2.1]
│   │   │   └── traitlets [required: >=4, installed: 5.14.1]
│   │   ├── debugpy [required: >=1.6.5, installed: 1.8.1]
│   │   ├── ipython [required: >=7.23.1, installed: 8.21.0]
│   │   │   ├── decorator [required: Any, installed: 5.1.1]
│   │   │   ├── jedi [required: >=0.16, installed: 0.19.1]
│   │   │   │   └── parso [required: >=0.8.3,<0.9.0, installed: 0.8.3]
│   │   │   ├── matplotlib-inline [required: Any, installed: 0.1.6]
│   │   │   │   └── traitlets [required: Any, installed: 5.14.1]
│   │   │   ├── pexpect [required: >4.3, installed: 4.9.0]
│   │   │   │   └── ptyprocess [required: >=0.5, installed: 0.7.0]
│   │   │   ├── prompt-toolkit [required: >=3.0.41,<3.1.0, installed: 3.0.43]
│   │   │   │   └── wcwidth [required: Any, installed: 0.2.13]
│   │   │   ├── pygments [required: >=2.4.0, installed: 2.17.2]
│   │   │   ├── stack-data [required: Any, installed: 0.6.3]
│   │   │   │   ├── asttokens [required: >=2.1.0, installed: 2.4.1]
│   │   │   │   │   └── six [required: >=1.12.0, installed: 1.16.0]
│   │   │   │   ├── executing [required: >=1.2.0, installed: 2.0.1]
│   │   │   │   └── pure-eval [required: Any, installed: 0.2.2]
│   │   │   └── traitlets [required: >=5, installed: 5.14.1]
│   │   ├── jupyter-client [required: >=6.1.12, installed: 8.6.0]
│   │   │   ├── jupyter-core [required: >=4.12,!=5.0.*, installed: 5.7.1]
│   │   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   │   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   │   ├── pyzmq [required: >=23.0, installed: 25.1.2]
│   │   │   ├── tornado [required: >=6.2, installed: 6.4]
│   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   ├── jupyter-core [required: >=4.12,!=5.0.*, installed: 5.7.1]
│   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   ├── matplotlib-inline [required: >=0.1, installed: 0.1.6]
│   │   │   └── traitlets [required: Any, installed: 5.14.1]
│   │   ├── nest-asyncio [required: Any, installed: 1.6.0]
│   │   ├── packaging [required: Any, installed: 23.2]
│   │   ├── psutil [required: Any, installed: 5.9.8]
│   │   ├── pyzmq [required: >=24, installed: 25.1.2]
│   │   ├── tornado [required: >=6.1, installed: 6.4]
│   │   └── traitlets [required: >=5.4.0, installed: 5.14.1]
│   ├── jupytext [required: >1.13.8,<2, installed: 1.16.1]
│   │   ├── markdown-it-py [required: >=1.0, installed: 3.0.0]
│   │   │   └── mdurl [required: ~=0.1, installed: 0.1.2]
│   │   ├── mdit-py-plugins [required: Any, installed: 0.4.0]
│   │   │   └── markdown-it-py [required: >=1.0.0,<4.0.0, installed: 3.0.0]
│   │   │       └── mdurl [required: ~=0.1, installed: 0.1.2]
│   │   ├── nbformat [required: Any, installed: 5.9.2]
│   │   │   ├── fastjsonschema [required: Any, installed: 2.19.1]
│   │   │   ├── jsonschema [required: >=2.6, installed: 4.21.1]
│   │   │   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   ├── jsonschema-specifications [required: >=2023.03.6, installed: 2023.12.1]
│   │   │   │   │   └── referencing [required: >=0.31.0, installed: 0.33.0]
│   │   │   │   │       ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   │       └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   │   │   ├── referencing [required: >=0.28.4, installed: 0.33.0]
│   │   │   │   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   │   └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   │   │   └── rpds-py [required: >=0.7.1, installed: 0.17.1]
│   │   │   ├── jupyter-core [required: Any, installed: 5.7.1]
│   │   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   │   └── traitlets [required: >=5.1, installed: 5.14.1]
│   │   ├── packaging [required: Any, installed: 23.2]
│   │   ├── PyYAML [required: Any, installed: 6.0.1]
│   │   └── toml [required: Any, installed: 0.10.2]
│   ├── mkdocs [required: >=1.4.0,<2, installed: 1.5.3]
│   │   ├── click [required: >=7.0, installed: 8.1.7]
│   │   ├── ghp-import [required: >=1.0, installed: 2.1.0]
│   │   │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│   │   │       └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│   │   ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│   │   ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│   │   ├── packaging [required: >=20.5, installed: 23.2]
│   │   ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│   │   ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│   │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │   ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│   │   │   └── PyYAML [required: Any, installed: 6.0.1]
│   │   └── watchdog [required: >=2.0, installed: 4.0.0]
│   ├── mkdocs-material [required: >9.0.0, installed: 9.5.9]
│   │   ├── Babel [required: ~=2.10, installed: 2.14.0]
│   │   ├── colorama [required: ~=0.4, installed: 0.4.6]
│   │   ├── Jinja2 [required: ~=3.0, installed: 3.1.3]
│   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   ├── Markdown [required: ~=3.2, installed: 3.5.2]
│   │   ├── mkdocs [required: ~=1.5.3, installed: 1.5.3]
│   │   │   ├── click [required: >=7.0, installed: 8.1.7]
│   │   │   ├── ghp-import [required: >=1.0, installed: 2.1.0]
│   │   │   │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│   │   │   │       └── six [required: >=1.5, installed: 1.16.0]
│   │   │   ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   │   ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│   │   │   ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│   │   │   ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│   │   │   ├── packaging [required: >=20.5, installed: 23.2]
│   │   │   ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│   │   │   ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│   │   │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │   │   ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│   │   │   │   └── PyYAML [required: Any, installed: 6.0.1]
│   │   │   └── watchdog [required: >=2.0, installed: 4.0.0]
│   │   ├── mkdocs-material-extensions [required: ~=1.3, installed: 1.3.1]
│   │   ├── paginate [required: ~=0.5, installed: 0.5.6]
│   │   ├── pygments [required: ~=2.16, installed: 2.17.2]
│   │   ├── pymdown-extensions [required: ~=10.2, installed: 10.7]
│   │   │   ├── Markdown [required: >=3.5, installed: 3.5.2]
│   │   │   └── PyYAML [required: Any, installed: 6.0.1]
│   │   ├── regex [required: >=2022.4, installed: 2023.12.25]
│   │   └── requests [required: ~=2.26, installed: 2.31.0]
│   │       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── nbconvert [required: >=7.2.9,<8, installed: 7.16.0]
│   │   ├── beautifulsoup4 [required: Any, installed: 4.12.3]
│   │   │   └── soupsieve [required: >1.2, installed: 2.5]
│   │   ├── bleach [required: !=5.0.0, installed: 6.1.0]
│   │   │   ├── six [required: >=1.9.0, installed: 1.16.0]
│   │   │   └── webencodings [required: Any, installed: 0.5.1]
│   │   ├── defusedxml [required: Any, installed: 0.7.1]
│   │   ├── Jinja2 [required: >=3.0, installed: 3.1.3]
│   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   ├── jupyter-core [required: >=4.7, installed: 5.7.1]
│   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   ├── jupyterlab-pygments [required: Any, installed: 0.3.0]
│   │   ├── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   ├── mistune [required: >=2.0.3,<4, installed: 3.0.2]
│   │   ├── nbclient [required: >=0.5.0, installed: 0.9.0]
│   │   │   ├── jupyter-client [required: >=6.1.12, installed: 8.6.0]
│   │   │   │   ├── jupyter-core [required: >=4.12,!=5.0.*, installed: 5.7.1]
│   │   │   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   │   │   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   │   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   │   │   ├── pyzmq [required: >=23.0, installed: 25.1.2]
│   │   │   │   ├── tornado [required: >=6.2, installed: 6.4]
│   │   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   │   ├── jupyter-core [required: >=4.12,!=5.0.*, installed: 5.7.1]
│   │   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   │   ├── nbformat [required: >=5.1, installed: 5.9.2]
│   │   │   │   ├── fastjsonschema [required: Any, installed: 2.19.1]
│   │   │   │   ├── jsonschema [required: >=2.6, installed: 4.21.1]
│   │   │   │   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   │   ├── jsonschema-specifications [required: >=2023.03.6, installed: 2023.12.1]
│   │   │   │   │   │   └── referencing [required: >=0.31.0, installed: 0.33.0]
│   │   │   │   │   │       ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   │   │       └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   │   │   │   ├── referencing [required: >=0.28.4, installed: 0.33.0]
│   │   │   │   │   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   │   │   └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   │   │   │   └── rpds-py [required: >=0.7.1, installed: 0.17.1]
│   │   │   │   ├── jupyter-core [required: Any, installed: 5.7.1]
│   │   │   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   │   │   └── traitlets [required: >=5.1, installed: 5.14.1]
│   │   │   └── traitlets [required: >=5.4, installed: 5.14.1]
│   │   ├── nbformat [required: >=5.7, installed: 5.9.2]
│   │   │   ├── fastjsonschema [required: Any, installed: 2.19.1]
│   │   │   ├── jsonschema [required: >=2.6, installed: 4.21.1]
│   │   │   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   ├── jsonschema-specifications [required: >=2023.03.6, installed: 2023.12.1]
│   │   │   │   │   └── referencing [required: >=0.31.0, installed: 0.33.0]
│   │   │   │   │       ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   │       └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   │   │   ├── referencing [required: >=0.28.4, installed: 0.33.0]
│   │   │   │   │   ├── attrs [required: >=22.2.0, installed: 23.2.0]
│   │   │   │   │   └── rpds-py [required: >=0.7.0, installed: 0.17.1]
│   │   │   │   └── rpds-py [required: >=0.7.1, installed: 0.17.1]
│   │   │   ├── jupyter-core [required: Any, installed: 5.7.1]
│   │   │   │   ├── platformdirs [required: >=2.5, installed: 4.2.0]
│   │   │   │   └── traitlets [required: >=5.3, installed: 5.14.1]
│   │   │   └── traitlets [required: >=5.1, installed: 5.14.1]
│   │   ├── packaging [required: Any, installed: 23.2]
│   │   ├── pandocfilters [required: >=1.4.1, installed: 1.5.1]
│   │   ├── pygments [required: >=2.4.1, installed: 2.17.2]
│   │   ├── tinycss2 [required: Any, installed: 1.2.1]
│   │   │   └── webencodings [required: >=0.4, installed: 0.5.1]
│   │   └── traitlets [required: >=5.1, installed: 5.14.1]
│   └── pygments [required: >2.12.0, installed: 2.17.2]
├── mkdocs-literate-nav [required: >=0.6.0,<0.7.0, installed: 0.6.1]
│   └── mkdocs [required: >=1.0.3, installed: 1.5.3]
│       ├── click [required: >=7.0, installed: 8.1.7]
│       ├── ghp-import [required: >=1.0, installed: 2.1.0]
│       │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│       │       └── six [required: >=1.5, installed: 1.16.0]
│       ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│       │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│       ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│       ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│       ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│       ├── packaging [required: >=20.5, installed: 23.2]
│       ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│       ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│       ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│       │   └── PyYAML [required: Any, installed: 6.0.1]
│       └── watchdog [required: >=2.0, installed: 4.0.0]
├── mkdocs-material [required: >=9.1.5,<10.0.0, installed: 9.5.9]
│   ├── Babel [required: ~=2.10, installed: 2.14.0]
│   ├── colorama [required: ~=0.4, installed: 0.4.6]
│   ├── Jinja2 [required: ~=3.0, installed: 3.1.3]
│   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   ├── Markdown [required: ~=3.2, installed: 3.5.2]
│   ├── mkdocs [required: ~=1.5.3, installed: 1.5.3]
│   │   ├── click [required: >=7.0, installed: 8.1.7]
│   │   ├── ghp-import [required: >=1.0, installed: 2.1.0]
│   │   │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│   │   │       └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│   │   ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│   │   ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│   │   ├── packaging [required: >=20.5, installed: 23.2]
│   │   ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│   │   ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│   │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │   ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│   │   │   └── PyYAML [required: Any, installed: 6.0.1]
│   │   └── watchdog [required: >=2.0, installed: 4.0.0]
│   ├── mkdocs-material-extensions [required: ~=1.3, installed: 1.3.1]
│   ├── paginate [required: ~=0.5, installed: 0.5.6]
│   ├── pygments [required: ~=2.16, installed: 2.17.2]
│   ├── pymdown-extensions [required: ~=10.2, installed: 10.7]
│   │   ├── Markdown [required: >=3.5, installed: 3.5.2]
│   │   └── PyYAML [required: Any, installed: 6.0.1]
│   ├── regex [required: >=2022.4, installed: 2023.12.25]
│   └── requests [required: ~=2.26, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── mkdocs-rss-plugin [required: >=1.8.0,<2.0.0, installed: 1.12.0]
│   ├── GitPython [required: >=3.1,<3.2, installed: 3.1.41]
│   │   └── gitdb [required: >=4.0.1,<5, installed: 4.0.11]
│   │       └── smmap [required: >=3.0.1,<6, installed: 5.0.1]
│   └── mkdocs [required: >=1.4,<2, installed: 1.5.3]
│       ├── click [required: >=7.0, installed: 8.1.7]
│       ├── ghp-import [required: >=1.0, installed: 2.1.0]
│       │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│       │       └── six [required: >=1.5, installed: 1.16.0]
│       ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│       │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│       ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│       ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│       ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│       ├── packaging [required: >=20.5, installed: 23.2]
│       ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│       ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│       ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│       │   └── PyYAML [required: Any, installed: 6.0.1]
│       └── watchdog [required: >=2.0, installed: 4.0.0]
├── mkdocs-section-index [required: >=0.3.5,<0.4.0, installed: 0.3.8]
│   └── mkdocs [required: >=1.2, installed: 1.5.3]
│       ├── click [required: >=7.0, installed: 8.1.7]
│       ├── ghp-import [required: >=1.0, installed: 2.1.0]
│       │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│       │       └── six [required: >=1.5, installed: 1.16.0]
│       ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│       │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│       ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│       ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│       ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│       ├── packaging [required: >=20.5, installed: 23.2]
│       ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│       ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│       ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│       │   └── PyYAML [required: Any, installed: 6.0.1]
│       └── watchdog [required: >=2.0, installed: 4.0.0]
├── mkdocstrings [required: >=0.21.2,<0.22.0, installed: 0.21.2]
│   ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   ├── Markdown [required: >=3.3, installed: 3.5.2]
│   ├── MarkupSafe [required: >=1.1, installed: 2.1.5]
│   ├── mkdocs [required: >=1.2, installed: 1.5.3]
│   │   ├── click [required: >=7.0, installed: 8.1.7]
│   │   ├── ghp-import [required: >=1.0, installed: 2.1.0]
│   │   │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│   │   │       └── six [required: >=1.5, installed: 1.16.0]
│   │   ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │   │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │   ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│   │   ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│   │   ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│   │   ├── packaging [required: >=20.5, installed: 23.2]
│   │   ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│   │   ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│   │   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │   ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│   │   │   └── PyYAML [required: Any, installed: 6.0.1]
│   │   └── watchdog [required: >=2.0, installed: 4.0.0]
│   ├── mkdocs-autorefs [required: >=0.3.1, installed: 0.5.0]
│   │   ├── Markdown [required: >=3.3, installed: 3.5.2]
│   │   └── mkdocs [required: >=1.1, installed: 1.5.3]
│   │       ├── click [required: >=7.0, installed: 8.1.7]
│   │       ├── ghp-import [required: >=1.0, installed: 2.1.0]
│   │       │   └── python-dateutil [required: >=2.8.1, installed: 2.8.2]
│   │       │       └── six [required: >=1.5, installed: 1.16.0]
│   │       ├── Jinja2 [required: >=2.11.1, installed: 3.1.3]
│   │       │   └── MarkupSafe [required: >=2.0, installed: 2.1.5]
│   │       ├── Markdown [required: >=3.2.1, installed: 3.5.2]
│   │       ├── MarkupSafe [required: >=2.0.1, installed: 2.1.5]
│   │       ├── mergedeep [required: >=1.3.4, installed: 1.3.4]
│   │       ├── packaging [required: >=20.5, installed: 23.2]
│   │       ├── pathspec [required: >=0.11.1, installed: 0.12.1]
│   │       ├── platformdirs [required: >=2.2.0, installed: 4.2.0]
│   │       ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   │       ├── pyyaml-env-tag [required: >=0.1, installed: 0.1]
│   │       │   └── PyYAML [required: Any, installed: 6.0.1]
│   │       └── watchdog [required: >=2.0, installed: 4.0.0]
│   └── pymdown-extensions [required: >=6.3, installed: 10.7]
│       ├── Markdown [required: >=3.5, installed: 3.5.2]
│       └── PyYAML [required: Any, installed: 6.0.1]
├── momento [required: >=1.10.2,<2.0.0, installed: 1.18.0]
│   ├── grpcio [required: >=1.46.0,<2.0.0, installed: 1.60.1]
│   ├── momento-wire-types [required: >=0.105.3,<0.106.0, installed: 0.105.3]
│   │   ├── grpcio [required: Any, installed: 1.60.1]
│   │   └── protobuf [required: >=3,<5, installed: 4.25.2]
│   └── PyJWT [required: >=2.4.0,<3.0.0, installed: 2.8.0]
├── mypy [required: >=1.7.0,<2.0.0, installed: 1.8.0]
│   ├── mypy-extensions [required: >=1.0.0, installed: 1.0.0]
│   └── typing-extensions [required: >=4.1.0, installed: 4.9.0]
├── nltk [required: >=3.8.1,<4.0.0, installed: 3.8.1]
│   ├── click [required: Any, installed: 8.1.7]
│   ├── joblib [required: Any, installed: 1.3.2]
│   ├── regex [required: >=2021.8.3, installed: 2023.12.25]
│   └── tqdm [required: Any, installed: 4.66.2]
├── onnxruntime [required: ==1.16.1, installed: 1.16.1]
│   ├── coloredlogs [required: Any, installed: 15.0.1]
│   │   └── humanfriendly [required: >=9.1, installed: 10.0]
│   ├── flatbuffers [required: Any, installed: 23.5.26]
│   ├── numpy [required: >=1.24.2, installed: 1.26.4]
│   ├── packaging [required: Any, installed: 23.2]
│   ├── protobuf [required: Any, installed: 4.25.2]
│   └── sympy [required: Any, installed: 1.12]
│       └── mpmath [required: >=0.19, installed: 1.3.0]
├── openai [required: >=1.2.3,<2.0.0, installed: 1.12.0]
│   ├── anyio [required: >=3.5.0,<5, installed: 4.2.0]
│   │   ├── idna [required: >=2.8, installed: 3.6]
│   │   └── sniffio [required: >=1.1, installed: 1.3.0]
│   ├── distro [required: >=1.7.0,<2, installed: 1.9.0]
│   ├── httpx [required: >=0.23.0,<1, installed: 0.26.0]
│   │   ├── anyio [required: Any, installed: 4.2.0]
│   │   │   ├── idna [required: >=2.8, installed: 3.6]
│   │   │   └── sniffio [required: >=1.1, installed: 1.3.0]
│   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   ├── httpcore [required: ==1.*, installed: 1.0.2]
│   │   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   │   └── h11 [required: >=0.13,<0.15, installed: 0.14.0]
│   │   ├── idna [required: Any, installed: 3.6]
│   │   └── sniffio [required: Any, installed: 1.3.0]
│   ├── pydantic [required: >=1.9.0,<3, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   ├── sniffio [required: Any, installed: 1.3.0]
│   ├── tqdm [required: >4, installed: 4.66.2]
│   └── typing-extensions [required: >=4.7,<5, installed: 4.9.0]
├── pandas [required: >=2.0.3,<3.0.0, installed: 2.2.0]
│   ├── numpy [required: >=1.23.2,<2, installed: 1.26.4]
│   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   └── six [required: >=1.5, installed: 1.16.0]
│   ├── pytz [required: >=2020.1, installed: 2024.1]
│   └── tzdata [required: >=2022.7, installed: 2023.4]
├── pdfplumber [required: >=0.10.2,<0.11.0, installed: 0.10.4]
│   ├── pdfminer.six [required: ==20221105, installed: 20221105]
│   │   ├── charset-normalizer [required: >=2.0.0, installed: 3.3.2]
│   │   └── cryptography [required: >=36.0.0, installed: 42.0.2]
│   │       └── cffi [required: >=1.12, installed: 1.16.0]
│   │           └── pycparser [required: Any, installed: 2.21]
│   ├── pillow [required: >=9.1, installed: 10.2.0]
│   └── pypdfium2 [required: >=4.18.0, installed: 4.27.0]
├── pre-commit [required: >=3.3.2,<4.0.0, installed: 3.6.1]
│   ├── cfgv [required: >=2.0.0, installed: 3.4.0]
│   ├── identify [required: >=1.0.0, installed: 2.5.34]
│   ├── nodeenv [required: >=0.11.1, installed: 1.8.0]
│   │   └── setuptools [required: Any, installed: 69.0.2]
│   ├── PyYAML [required: >=5.1, installed: 6.0.1]
│   └── virtualenv [required: >=20.10.0, installed: 20.25.0]
│       ├── distlib [required: >=0.3.7,<1, installed: 0.3.8]
│       ├── filelock [required: >=3.12.2,<4, installed: 3.13.1]
│       └── platformdirs [required: >=3.9.1,<5, installed: 4.2.0]
├── prettytable [required: >=3.8.0,<4.0.0, installed: 3.9.0]
│   └── wcwidth [required: Any, installed: 0.2.13]
├── pydantic [required: ==1.10.13, installed: 1.10.13]
│   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
├── PyGithub [required: >=1.58.1,<2.0.0, installed: 1.59.1]
│   ├── Deprecated [required: Any, installed: 1.2.14]
│   │   └── wrapt [required: >=1.10,<2, installed: 1.16.0]
│   ├── PyJWT [required: >=2.4.0, installed: 2.8.0]
│   ├── PyNaCl [required: >=1.4.0, installed: 1.5.0]
│   │   └── cffi [required: >=1.4.1, installed: 1.16.0]
│   │       └── pycparser [required: Any, installed: 2.21]
│   └── requests [required: >=2.14.0, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── pygments [required: >=2.15.1,<3.0.0, installed: 2.17.2]
├── PyMuPDF [required: >=1.23.3,<2.0.0, installed: 1.23.21]
│   └── PyMuPDFb [required: ==1.23.9, installed: 1.23.9]
├── pyparsing [required: >=3.0.9,<4.0.0, installed: 3.1.1]
├── pypdf [required: >=3.12.2,<4.0.0, installed: 3.17.4]
├── pytest-asyncio [required: >=0.21.1,<0.22.0, installed: 0.21.1]
│   └── pytest [required: >=7.0.0, installed: 8.0.0]
│       ├── iniconfig [required: Any, installed: 2.0.0]
│       ├── packaging [required: Any, installed: 23.2]
│       └── pluggy [required: >=1.3.0,<2.0, installed: 1.4.0]
├── pytest-redis [required: >=3.0.2,<4.0.0, installed: 3.0.2]
│   ├── mirakuru [required: Any, installed: 2.5.2]
│   │   └── psutil [required: >=4.0.0, installed: 5.9.8]
│   ├── port-for [required: >=0.6.0, installed: 0.7.2]
│   ├── pytest [required: >=6.2, installed: 8.0.0]
│   │   ├── iniconfig [required: Any, installed: 2.0.0]
│   │   ├── packaging [required: Any, installed: 23.2]
│   │   └── pluggy [required: >=1.3.0,<2.0, installed: 1.4.0]
│   └── redis [required: >=3, installed: 5.0.1]
├── python-docx [required: >=1.1.0,<2.0.0, installed: 1.1.0]
│   ├── lxml [required: >=3.1.0, installed: 4.9.4]
│   └── typing-extensions [required: Any, installed: 4.9.0]
├── python-dotenv [required: >=1.0.0,<2.0.0, installed: 1.0.1]
├── qdrant-client [required: >=1.7.0,<2.0.0, installed: 1.7.3]
│   ├── grpcio [required: >=1.41.0, installed: 1.60.1]
│   ├── grpcio-tools [required: >=1.41.0, installed: 1.60.1]
│   │   ├── grpcio [required: >=1.60.1, installed: 1.60.1]
│   │   ├── protobuf [required: >=4.21.6,<5.0dev, installed: 4.25.2]
│   │   └── setuptools [required: Any, installed: 69.0.2]
│   ├── httpx [required: >=0.14.0, installed: 0.26.0]
│   │   ├── anyio [required: Any, installed: 4.2.0]
│   │   │   ├── idna [required: >=2.8, installed: 3.6]
│   │   │   └── sniffio [required: >=1.1, installed: 1.3.0]
│   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   ├── httpcore [required: ==1.*, installed: 1.0.2]
│   │   │   ├── certifi [required: Any, installed: 2024.2.2]
│   │   │   └── h11 [required: >=0.13,<0.15, installed: 0.14.0]
│   │   ├── idna [required: Any, installed: 3.6]
│   │   └── sniffio [required: Any, installed: 1.3.0]
│   ├── numpy [required: >=1.21, installed: 1.26.4]
│   ├── portalocker [required: >=2.7.0,<3.0.0, installed: 2.8.2]
│   ├── pydantic [required: >=1.10.8, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   └── urllib3 [required: >=1.26.14,<3, installed: 2.2.0]
├── rank-bm25 [required: >=0.2.2,<0.3.0, installed: 0.2.2]
│   └── numpy [required: Any, installed: 1.26.4]
├── redis [required: >=5.0.1,<6.0.0, installed: 5.0.1]
├── requests [required: >=2.31.0,<3.0.0, installed: 2.31.0]
│   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   ├── idna [required: >=2.5,<4, installed: 3.6]
│   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── requests-oauthlib [required: >=1.3.1,<2.0.0, installed: 1.3.1]
│   ├── oauthlib [required: >=3.0.0, installed: 3.2.2]
│   └── requests [required: >=2.0.0, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── rich [required: >=13.3.4,<14.0.0, installed: 13.7.0]
│   ├── markdown-it-py [required: >=2.2.0, installed: 3.0.0]
│   │   └── mdurl [required: ~=0.1, installed: 0.1.2]
│   └── pygments [required: >=2.13.0,<3.0.0, installed: 2.17.2]
├── ruff [required: >=0.0.270,<0.0.271, installed: 0.0.270]
├── Scrapy [required: >=2.11.0,<3.0.0, installed: 2.11.0]
│   ├── cryptography [required: >=36.0.0, installed: 42.0.2]
│   │   └── cffi [required: >=1.12, installed: 1.16.0]
│   │       └── pycparser [required: Any, installed: 2.21]
│   ├── cssselect [required: >=0.9.1, installed: 1.2.0]
│   ├── itemadapter [required: >=0.1.0, installed: 0.8.0]
│   ├── itemloaders [required: >=1.0.1, installed: 1.1.0]
│   │   ├── itemadapter [required: >=0.1.0, installed: 0.8.0]
│   │   ├── jmespath [required: >=0.9.5, installed: 1.0.1]
│   │   ├── parsel [required: >=1.5.0, installed: 1.8.1]
│   │   │   ├── cssselect [required: >=0.9, installed: 1.2.0]
│   │   │   ├── jmespath [required: Any, installed: 1.0.1]
│   │   │   ├── lxml [required: Any, installed: 4.9.4]
│   │   │   ├── packaging [required: Any, installed: 23.2]
│   │   │   └── w3lib [required: >=1.19.0, installed: 2.1.2]
│   │   └── w3lib [required: >=1.17.0, installed: 2.1.2]
│   ├── lxml [required: >=4.4.1, installed: 4.9.4]
│   ├── packaging [required: Any, installed: 23.2]
│   ├── parsel [required: >=1.5.0, installed: 1.8.1]
│   │   ├── cssselect [required: >=0.9, installed: 1.2.0]
│   │   ├── jmespath [required: Any, installed: 1.0.1]
│   │   ├── lxml [required: Any, installed: 4.9.4]
│   │   ├── packaging [required: Any, installed: 23.2]
│   │   └── w3lib [required: >=1.19.0, installed: 2.1.2]
│   ├── Protego [required: >=0.1.15, installed: 0.3.0]
│   ├── PyDispatcher [required: >=2.0.5, installed: 2.0.7]
│   ├── pyOpenSSL [required: >=21.0.0, installed: 24.0.0]
│   │   └── cryptography [required: >=41.0.5,<43, installed: 42.0.2]
│   │       └── cffi [required: >=1.12, installed: 1.16.0]
│   │           └── pycparser [required: Any, installed: 2.21]
│   ├── queuelib [required: >=1.4.2, installed: 1.6.2]
│   ├── service-identity [required: >=18.1.0, installed: 24.1.0]
│   │   ├── attrs [required: >=19.1.0, installed: 23.2.0]
│   │   ├── cryptography [required: Any, installed: 42.0.2]
│   │   │   └── cffi [required: >=1.12, installed: 1.16.0]
│   │   │       └── pycparser [required: Any, installed: 2.21]
│   │   ├── pyasn1 [required: Any, installed: 0.5.1]
│   │   └── pyasn1-modules [required: Any, installed: 0.3.0]
│   │       └── pyasn1 [required: >=0.4.6,<0.6.0, installed: 0.5.1]
│   ├── setuptools [required: Any, installed: 69.0.2]
│   ├── tldextract [required: Any, installed: 5.1.1]
│   │   ├── filelock [required: >=3.0.8, installed: 3.13.1]
│   │   ├── idna [required: Any, installed: 3.6]
│   │   ├── requests [required: >=2.1.0, installed: 2.31.0]
│   │   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   │   └── requests-file [required: >=1.4, installed: 2.0.0]
│   │       └── requests [required: >=1.0.0, installed: 2.31.0]
│   │           ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │           ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │           ├── idna [required: >=2.5,<4, installed: 3.6]
│   │           └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── Twisted [required: >=18.9.0,<23.8.0, installed: 22.10.0]
│   │   ├── attrs [required: >=19.2.0, installed: 23.2.0]
│   │   ├── Automat [required: >=0.8.0, installed: 22.10.0]
│   │   │   ├── attrs [required: >=19.2.0, installed: 23.2.0]
│   │   │   └── six [required: Any, installed: 1.16.0]
│   │   ├── constantly [required: >=15.1, installed: 23.10.4]
│   │   ├── hyperlink [required: >=17.1.1, installed: 21.0.0]
│   │   │   └── idna [required: >=2.5, installed: 3.6]
│   │   ├── incremental [required: >=21.3.0, installed: 22.10.0]
│   │   ├── typing-extensions [required: >=3.6.5, installed: 4.9.0]
│   │   └── zope.interface [required: >=4.4.2, installed: 6.1]
│   │       └── setuptools [required: Any, installed: 69.0.2]
│   ├── w3lib [required: >=1.17.0, installed: 2.1.2]
│   └── zope.interface [required: >=5.1.0, installed: 6.1]
│       └── setuptools [required: Any, installed: 69.0.2]
├── SQLAlchemy [required: >=2.0.19,<3.0.0, installed: 2.0.26]
│   ├── greenlet [required: !=0.4.17, installed: 3.0.3]
│   └── typing-extensions [required: >=4.6.0, installed: 4.9.0]
├── tantivy [required: >=0.21.0,<0.22.0, installed: 0.21.0]
├── thefuzz [required: >=0.20.0,<0.21.0, installed: 0.20.0]
│   └── rapidfuzz [required: >=3.0.0,<4.0.0, installed: 3.6.1]
├── tiktoken [required: >=0.5.1,<0.6.0, installed: 0.5.2]
│   ├── regex [required: >=2022.1.18, installed: 2023.12.25]
│   └── requests [required: >=2.26.0, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── trafilatura [required: >=1.5.0,<2.0.0, installed: 1.7.0]
│   ├── certifi [required: Any, installed: 2024.2.2]
│   ├── charset-normalizer [required: >=3.2.0, installed: 3.3.2]
│   ├── courlan [required: >=0.9.5, installed: 1.0.0]
│   │   ├── langcodes [required: >=3.3.0, installed: 3.3.0]
│   │   ├── tld [required: >=0.13, installed: 0.13]
│   │   └── urllib3 [required: >=1.26,<3, installed: 2.2.0]
│   ├── htmldate [required: >=1.7.0, installed: 1.7.0]
│   │   ├── charset-normalizer [required: >=3.3.2, installed: 3.3.2]
│   │   ├── dateparser [required: >=1.1.2, installed: 1.2.0]
│   │   │   ├── python-dateutil [required: Any, installed: 2.8.2]
│   │   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   │   ├── pytz [required: Any, installed: 2024.1]
│   │   │   ├── regex [required: !=2021.8.27,!=2019.02.19, installed: 2023.12.25]
│   │   │   └── tzlocal [required: Any, installed: 5.2]
│   │   ├── lxml [required: >=4.9.4,<6, installed: 4.9.4]
│   │   ├── python-dateutil [required: >=2.8.2, installed: 2.8.2]
│   │   │   └── six [required: >=1.5, installed: 1.16.0]
│   │   └── urllib3 [required: >=1.26,<3, installed: 2.2.0]
│   ├── jusText [required: >=3.0.0, installed: 3.0.0]
│   │   └── lxml [required: >=4.4.2, installed: 4.9.4]
│   ├── lxml [required: >=4.9.4,<6, installed: 4.9.4]
│   └── urllib3 [required: >=1.26,<3, installed: 2.2.0]
├── typer [required: >=0.9.0,<0.10.0, installed: 0.9.0]
│   ├── click [required: >=7.1.1,<9.0.0, installed: 8.1.7]
│   └── typing-extensions [required: >=3.7.4.3, installed: 4.9.0]
├── types-redis [required: >=4.5.5.2,<5.0.0.0, installed: 4.6.0.20240106]
│   ├── cryptography [required: >=35.0.0, installed: 42.0.2]
│   │   └── cffi [required: >=1.12, installed: 1.16.0]
│   │       └── pycparser [required: Any, installed: 2.21]
│   └── types-pyOpenSSL [required: Any, installed: 24.0.0.20240130]
│       └── cryptography [required: >=35.0.0, installed: 42.0.2]
│           └── cffi [required: >=1.12, installed: 1.16.0]
│               └── pycparser [required: Any, installed: 2.21]
├── types-requests [required: >=2.31.0.1,<3.0.0.0, installed: 2.31.0.20240125]
│   └── urllib3 [required: >=2, installed: 2.2.0]
├── unstructured [required: >=0.10.16,<0.10.18, installed: 0.10.16]
│   ├── beautifulsoup4 [required: Any, installed: 4.12.3]
│   │   └── soupsieve [required: >1.2, installed: 2.5]
│   ├── chardet [required: Any, installed: 5.2.0]
│   ├── dataclasses-json [required: Any, installed: 0.6.4]
│   │   ├── marshmallow [required: >=3.18.0,<4.0.0, installed: 3.20.2]
│   │   │   └── packaging [required: >=17.0, installed: 23.2]
│   │   └── typing-inspect [required: >=0.4.0,<1, installed: 0.9.0]
│   │       ├── mypy-extensions [required: >=0.3.0, installed: 1.0.0]
│   │       └── typing-extensions [required: >=3.7.4, installed: 4.9.0]
│   ├── emoji [required: Any, installed: 2.10.1]
│   ├── filetype [required: Any, installed: 1.2.0]
│   ├── lxml [required: Any, installed: 4.9.4]
│   ├── nltk [required: Any, installed: 3.8.1]
│   │   ├── click [required: Any, installed: 8.1.7]
│   │   ├── joblib [required: Any, installed: 1.3.2]
│   │   ├── regex [required: >=2021.8.3, installed: 2023.12.25]
│   │   └── tqdm [required: Any, installed: 4.66.2]
│   ├── python-iso639 [required: Any, installed: 2024.2.7]
│   ├── python-magic [required: Any, installed: 0.4.27]
│   ├── requests [required: Any, installed: 2.31.0]
│   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   └── tabulate [required: Any, installed: 0.9.0]
└── wget [required: >=3.2,<4.0, installed: 3.2]

@7978178
Copy link
Author

7978178 commented Feb 26, 2024

for kicks tried langchain

(.venv) bxs:o bs$ pipdeptree -p langchain-core
langchain-core==0.1.23
├── anyio [required: >=3,<5, installed: 4.2.0]
│   ├── idna [required: >=2.8, installed: 3.6]
│   └── sniffio [required: >=1.1, installed: 1.3.0]
├── jsonpatch [required: >=1.33,<2.0, installed: 1.33]
│   └── jsonpointer [required: >=1.9, installed: 2.4]
├── langsmith [required: >=0.0.87,<0.0.88, installed: 0.0.87]
│   ├── pydantic [required: >=1,<3, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   └── requests [required: >=2,<3, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── packaging [required: >=23.2,<24.0, installed: 23.2]
├── pydantic [required: >=1,<3, installed: 1.10.13]
│   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
├── PyYAML [required: >=5.3, installed: 6.0.1]
├── requests [required: >=2,<3, installed: 2.31.0]
│   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   ├── idna [required: >=2.5,<4, installed: 3.6]
│   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
└── tenacity [required: >=8.1.0,<9.0.0, installed: 8.2.3]
(.venv) bxs:o bs$ pipdeptree -p langchain-community
langchain-community==0.0.20
├── aiohttp [required: >=3.8.3,<4.0.0, installed: 3.9.3]
│   ├── aiosignal [required: >=1.1.2, installed: 1.3.1]
│   │   └── frozenlist [required: >=1.1.0, installed: 1.4.1]
│   ├── attrs [required: >=17.3.0, installed: 23.2.0]
│   ├── frozenlist [required: >=1.1.1, installed: 1.4.1]
│   ├── multidict [required: >=4.5,<7.0, installed: 6.0.5]
│   └── yarl [required: >=1.0,<2.0, installed: 1.9.4]
│       ├── idna [required: >=2.0, installed: 3.6]
│       └── multidict [required: >=4.0, installed: 6.0.5]
├── dataclasses-json [required: >=0.5.7,<0.7, installed: 0.6.4]
│   ├── marshmallow [required: >=3.18.0,<4.0.0, installed: 3.20.2]
│   │   └── packaging [required: >=17.0, installed: 23.2]
│   └── typing-inspect [required: >=0.4.0,<1, installed: 0.9.0]
│       ├── mypy-extensions [required: >=0.3.0, installed: 1.0.0]
│       └── typing-extensions [required: >=3.7.4, installed: 4.9.0]
├── langchain-core [required: >=0.1.21,<0.2, installed: 0.1.23]
│   ├── anyio [required: >=3,<5, installed: 4.2.0]
│   │   ├── idna [required: >=2.8, installed: 3.6]
│   │   └── sniffio [required: >=1.1, installed: 1.3.0]
│   ├── jsonpatch [required: >=1.33,<2.0, installed: 1.33]
│   │   └── jsonpointer [required: >=1.9, installed: 2.4]
│   ├── langsmith [required: >=0.0.87,<0.0.88, installed: 0.0.87]
│   │   ├── pydantic [required: >=1,<3, installed: 1.10.13]
│   │   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   │   └── requests [required: >=2,<3, installed: 2.31.0]
│   │       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │       ├── idna [required: >=2.5,<4, installed: 3.6]
│   │       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   ├── packaging [required: >=23.2,<24.0, installed: 23.2]
│   ├── pydantic [required: >=1,<3, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   ├── PyYAML [required: >=5.3, installed: 6.0.1]
│   ├── requests [required: >=2,<3, installed: 2.31.0]
│   │   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   │   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   │   ├── idna [required: >=2.5,<4, installed: 3.6]
│   │   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
│   └── tenacity [required: >=8.1.0,<9.0.0, installed: 8.2.3]
├── langsmith [required: >=0.0.83,<0.1, installed: 0.0.87]
│   ├── pydantic [required: >=1,<3, installed: 1.10.13]
│   │   └── typing-extensions [required: >=4.2.0, installed: 4.9.0]
│   └── requests [required: >=2,<3, installed: 2.31.0]
│       ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│       ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│       ├── idna [required: >=2.5,<4, installed: 3.6]
│       └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── numpy [required: >=1,<2, installed: 1.26.4]
├── PyYAML [required: >=5.3, installed: 6.0.1]
├── requests [required: >=2,<3, installed: 2.31.0]
│   ├── certifi [required: >=2017.4.17, installed: 2024.2.2]
│   ├── charset-normalizer [required: >=2,<4, installed: 3.3.2]
│   ├── idna [required: >=2.5,<4, installed: 3.6]
│   └── urllib3 [required: >=1.21.1,<3, installed: 2.2.0]
├── SQLAlchemy [required: >=1.4,<3, installed: 2.0.26]
│   ├── greenlet [required: !=0.4.17, installed: 3.0.3]
│   └── typing-extensions [required: >=4.6.0, installed: 4.9.0]
└── tenacity [required: >=8.1.0,<9.0.0, installed: 8.2.3]

@pchalasani
Copy link
Contributor

does one have to load all the vector databases, search engines etc etc on startup?

Short answer is No. We have to put some time into deciding what we want to consider as "core" langroid, for a "batteries-included" experience. We can certainly mark a bunch of these as "extra" dependencies in pyproject.toml, which means people will have to explicitly install the extras they want. @nilspalumbo any other ideas?

@7978178
Copy link
Author

7978178 commented Feb 26, 2024

atleast knocking off mkdocs, search engines and vectordb's would cut it to a third in size!

@pchalasani
Copy link
Contributor

atleast knocking off mkdocs, search engines and vectordb's would cut it to a third in size!

Wow, surprising to hear that, thanks much for digging into this! We'll think about the right way to set this up.

@pchalasani
Copy link
Contributor

So... large number of dependencies and slow imports may be orthogonal issues. Reducing deps is good but won't speed up the imports, which is simply due to the large number of imports in agent/base.py etc.

For dependencies, I'm finding that unstructuured and chromadb are pulling in numerous dependencies that are otherwise marked as optional/extra in toml. I'll deal with those.

@7978178
Copy link
Author

7978178 commented Feb 27, 2024

what's the farm-haystack dependency?

@pchalasani
Copy link
Contributor

what's the farm-haystack dependency?

It's for parsing pdf docs, but I just made a new release that eliminates haystack and transformers dependencies (which also eliminates torch as a dependency), so installs should be slimmer/faster now with v 0.1.198

@7978178
Copy link
Author

7978178 commented Feb 28, 2024

did an update and this is what i get for sample code at top

(.venv) bxs:oai bs$ time python test.py
The capital of Bangladesh is Dhaka.

real    0m5.214s
user    0m5.092s
sys     0m0.821s
(.venv) bxs:oai bs$ pip show langroid
Name: langroid
Version: 0.1.198
Summary: Harness LLMs with Multi-Agent Programming
Home-page: 
Author: Prasad Chalasani
Author-email: [email protected]
License: MIT
Location: /Users/bs/oai/.venv/lib/python3.11/site-packages
Requires: aiohttp, async-generator, autopep8, black, bs4, chromadb, colorlog, docstring-parser, duckduckgo-search, faker, fakeredis, fire, flake8, google-api-python-client, halo, jinja2, lancedb, lxml, meilisearch, meilisearch-python-sdk, mkdocs, mkdocs-awesome-pages-plugin, mkdocs-gen-files, mkdocs-jupyter, mkdocs-literate-nav, mkdocs-material, mkdocs-rss-plugin, mkdocs-section-index, mkdocstrings, momento, mypy, nltk, onnxruntime, openai, pandas, pdfplumber, pre-commit, prettytable, pydantic, pygithub, pygments, pymupdf, pyparsing, pypdf, pytest-asyncio, pytest-redis, python-docx, python-dotenv, qdrant-client, rank-bm25, redis, requests, requests-oauthlib, rich, ruff, scrapy, sqlalchemy, tantivy, thefuzz, tiktoken, trafilatura, typer, types-redis, types-requests, wget
Required-by:

@pchalasani
Copy link
Contributor

and this is what i get for sample code at top

yes I don't expect this to improve the script startup time. That is still an issue due to the large imports in agent/base.py.

@7978178
Copy link
Author

7978178 commented Feb 28, 2024

i quickly looked at it but could'nt discern which import is the killer, other than agent/base.py seeming to pull up all the code in langroid/* one way or other

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants