commit 8dcd5b9e4bd856e9bb2a019eac6ef0be4a2c4527
Author: old-tom <892955278@msn.cn>
Date: Mon Apr 14 19:33:18 2025 +0800
feat:first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dda4f8f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,164 @@
+### Python template
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
+.pdm.toml
+.pdm-python
+.pdm-build/
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/dictionaries/old_tom.xml b/.idea/dictionaries/old_tom.xml
new file mode 100644
index 0000000..df092ff
--- /dev/null
+++ b/.idea/dictionaries/old_tom.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..c2bae49
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..6bc159d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+ CSS
+
+
+ Probable bugsCSS
+
+
+
+
+ CSS
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..1597f75
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/sttFunctionCallBackend.iml b/.idea/sttFunctionCallBackend.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/.idea/sttFunctionCallBackend.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Pipfile b/Pipfile
new file mode 100644
index 0000000..11a5b1a
--- /dev/null
+++ b/Pipfile
@@ -0,0 +1,16 @@
+[[source]]
+url = "https://pypi.org/simple"
+verify_ssl = true
+name = "pypi"
+
+[packages]
+fastapi = "*"
+uvicorn = {version = "*", extras = ["standard"]}
+ipython = "*"
+marqo = "*"
+
+[dev-packages]
+
+[requires]
+python_version = "3.10"
+python_full_version = "3.10.11"
diff --git a/Pipfile.lock b/Pipfile.lock
new file mode 100644
index 0000000..211c147
--- /dev/null
+++ b/Pipfile.lock
@@ -0,0 +1,793 @@
+{
+ "_meta": {
+ "hash": {
+ "sha256": "556feb6233fdafb10943f454e4c984bafeeeec9e7e35bc1efe86e709da72eb1b"
+ },
+ "pipfile-spec": 6,
+ "requires": {
+ "python_full_version": "3.10.11",
+ "python_version": "3.10"
+ },
+ "sources": [
+ {
+ "name": "pypi",
+ "url": "https://pypi.org/simple",
+ "verify_ssl": true
+ }
+ ]
+ },
+ "default": {
+ "annotated-types": {
+ "hashes": [
+ "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53",
+ "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==0.7.0"
+ },
+ "anyio": {
+ "hashes": [
+ "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028",
+ "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"
+ ],
+ "markers": "python_version >= '3.9'",
+ "version": "==4.9.0"
+ },
+ "asttokens": {
+ "hashes": [
+ "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7",
+ "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==3.0.0"
+ },
+ "certifi": {
+ "hashes": [
+ "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651",
+ "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"
+ ],
+ "markers": "python_version >= '3.6'",
+ "version": "==2025.1.31"
+ },
+ "charset-normalizer": {
+ "hashes": [
+ "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537",
+ "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa",
+ "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a",
+ "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294",
+ "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b",
+ "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd",
+ "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601",
+ "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd",
+ "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4",
+ "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d",
+ "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2",
+ "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313",
+ "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd",
+ "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa",
+ "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8",
+ "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1",
+ "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2",
+ "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496",
+ "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d",
+ "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b",
+ "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e",
+ "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a",
+ "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4",
+ "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca",
+ "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78",
+ "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408",
+ "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5",
+ "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3",
+ "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f",
+ "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a",
+ "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765",
+ "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6",
+ "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146",
+ "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6",
+ "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9",
+ "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd",
+ "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c",
+ "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f",
+ "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545",
+ "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176",
+ "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770",
+ "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824",
+ "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f",
+ "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf",
+ "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487",
+ "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d",
+ "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd",
+ "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b",
+ "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534",
+ "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f",
+ "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b",
+ "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9",
+ "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd",
+ "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125",
+ "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9",
+ "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de",
+ "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11",
+ "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d",
+ "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35",
+ "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f",
+ "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda",
+ "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7",
+ "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a",
+ "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971",
+ "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8",
+ "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41",
+ "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d",
+ "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f",
+ "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757",
+ "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a",
+ "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886",
+ "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77",
+ "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76",
+ "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247",
+ "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85",
+ "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb",
+ "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7",
+ "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e",
+ "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6",
+ "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037",
+ "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1",
+ "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e",
+ "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807",
+ "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407",
+ "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c",
+ "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12",
+ "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3",
+ "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089",
+ "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd",
+ "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e",
+ "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00",
+ "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==3.4.1"
+ },
+ "click": {
+ "hashes": [
+ "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2",
+ "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==8.1.8"
+ },
+ "decorator": {
+ "hashes": [
+ "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360",
+ "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==5.2.1"
+ },
+ "exceptiongroup": {
+ "hashes": [
+ "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b",
+ "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"
+ ],
+ "markers": "python_version < '3.11'",
+ "version": "==1.2.2"
+ },
+ "executing": {
+ "hashes": [
+ "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa",
+ "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==2.2.0"
+ },
+ "fastapi": {
+ "hashes": [
+ "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681",
+ "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"
+ ],
+ "index": "pypi",
+ "version": "==0.115.12"
+ },
+ "h11": {
+ "hashes": [
+ "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d",
+ "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==0.14.0"
+ },
+ "httptools": {
+ "hashes": [
+ "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a",
+ "sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd",
+ "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2",
+ "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17",
+ "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8",
+ "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3",
+ "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5",
+ "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da",
+ "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0",
+ "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721",
+ "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636",
+ "sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff",
+ "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0",
+ "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071",
+ "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c",
+ "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4",
+ "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1",
+ "sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9",
+ "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44",
+ "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083",
+ "sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003",
+ "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959",
+ "sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc",
+ "sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076",
+ "sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490",
+ "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660",
+ "sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6",
+ "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c",
+ "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50",
+ "sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547",
+ "sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba",
+ "sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440",
+ "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988",
+ "sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab",
+ "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970",
+ "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1",
+ "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2",
+ "sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f",
+ "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81",
+ "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069",
+ "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975",
+ "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f",
+ "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43"
+ ],
+ "version": "==0.6.4"
+ },
+ "idna": {
+ "hashes": [
+ "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9",
+ "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"
+ ],
+ "markers": "python_version >= '3.6'",
+ "version": "==3.10"
+ },
+ "ipython": {
+ "hashes": [
+ "sha256:d200b7d93c3f5883fc36ab9ce28a18249c7706e51347681f80a0aef9895f2520",
+ "sha256:e6b7470468ba6f1f0a7b116bb688a3ece2f13e2f94138e508201fad677a788ba"
+ ],
+ "index": "pypi",
+ "version": "==8.35.0"
+ },
+ "jedi": {
+ "hashes": [
+ "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0",
+ "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"
+ ],
+ "markers": "python_version >= '3.6'",
+ "version": "==0.19.2"
+ },
+ "marqo": {
+ "hashes": [
+ "sha256:5c2e0a01fc3a7be5a7db8a4630f2f7d7164b09cf8d72480a5f6db68550f24afb",
+ "sha256:e30e33308465629ff5b245d1072cb5a94606891fceb84d8cd873995066bd4b17"
+ ],
+ "index": "pypi",
+ "version": "==3.12.0"
+ },
+ "matplotlib-inline": {
+ "hashes": [
+ "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90",
+ "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==0.1.7"
+ },
+ "packaging": {
+ "hashes": [
+ "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759",
+ "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==24.2"
+ },
+ "parso": {
+ "hashes": [
+ "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18",
+ "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"
+ ],
+ "markers": "python_version >= '3.6'",
+ "version": "==0.8.4"
+ },
+ "pexpect": {
+ "hashes": [
+ "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523",
+ "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"
+ ],
+ "markers": "sys_platform != 'win32' and sys_platform != 'emscripten'",
+ "version": "==4.9.0"
+ },
+ "prompt-toolkit": {
+ "hashes": [
+ "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab",
+ "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"
+ ],
+ "markers": "python_full_version >= '3.8.0'",
+ "version": "==3.0.50"
+ },
+ "ptyprocess": {
+ "hashes": [
+ "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35",
+ "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"
+ ],
+ "version": "==0.7.0"
+ },
+ "pure-eval": {
+ "hashes": [
+ "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0",
+ "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"
+ ],
+ "version": "==0.2.3"
+ },
+ "pydantic": {
+ "hashes": [
+ "sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3",
+ "sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f"
+ ],
+ "markers": "python_version >= '3.9'",
+ "version": "==2.11.3"
+ },
+ "pydantic-core": {
+ "hashes": [
+ "sha256:0483847fa9ad5e3412265c1bd72aad35235512d9ce9d27d81a56d935ef489672",
+ "sha256:048831bd363490be79acdd3232f74a0e9951b11b2b4cc058aeb72b22fdc3abe1",
+ "sha256:048c01eee07d37cbd066fc512b9d8b5ea88ceeb4e629ab94b3e56965ad655add",
+ "sha256:049e0de24cf23766f12cc5cc71d8abc07d4a9deb9061b334b62093dedc7cb068",
+ "sha256:08530b8ac922003033f399128505f513e30ca770527cc8bbacf75a84fcc2c74b",
+ "sha256:0fb935c5591573ae3201640579f30128ccc10739b45663f93c06796854405505",
+ "sha256:1293d7febb995e9d3ec3ea09caf1a26214eec45b0f29f6074abb004723fc1de8",
+ "sha256:177d50460bc976a0369920b6c744d927b0ecb8606fb56858ff542560251b19e5",
+ "sha256:1a28239037b3d6f16916a4c831a5a0eadf856bdd6d2e92c10a0da3a59eadcf3e",
+ "sha256:1b30d92c9412beb5ac6b10a3eb7ef92ccb14e3f2a8d7732e2d739f58b3aa7544",
+ "sha256:1c607801d85e2e123357b3893f82c97a42856192997b95b4d8325deb1cd0c5f4",
+ "sha256:1d20eb4861329bb2484c021b9d9a977566ab16d84000a57e28061151c62b349a",
+ "sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a",
+ "sha256:25626fb37b3c543818c14821afe0fd3830bc327a43953bc88db924b68c5723f1",
+ "sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266",
+ "sha256:2ea62419ba8c397e7da28a9170a16219d310d2cf4970dbc65c32faf20d828c83",
+ "sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764",
+ "sha256:2f9284e11c751b003fd4215ad92d325d92c9cb19ee6729ebd87e3250072cdcde",
+ "sha256:3077cfdb6125cc8dab61b155fdd714663e401f0e6883f9632118ec12cf42df26",
+ "sha256:32cd11c5914d1179df70406427097c7dcde19fddf1418c787540f4b730289896",
+ "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18",
+ "sha256:35a5ec3fa8c2fe6c53e1b2ccc2454398f95d5393ab398478f53e1afbbeb4d939",
+ "sha256:398a38d323f37714023be1e0285765f0a27243a8b1506b7b7de87b647b517e48",
+ "sha256:3a371dc00282c4b84246509a5ddc808e61b9864aa1eae9ecc92bb1268b82db4a",
+ "sha256:3a64e81e8cba118e108d7126362ea30e021291b7805d47e4896e52c791be2761",
+ "sha256:3ab2d36e20fbfcce8f02d73c33a8a7362980cff717926bbae030b93ae46b56c7",
+ "sha256:3f1fdb790440a34f6ecf7679e1863b825cb5ffde858a9197f851168ed08371e5",
+ "sha256:3f2648b9262607a7fb41d782cc263b48032ff7a03a835581abbf7a3bec62bcf5",
+ "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d",
+ "sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e",
+ "sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3",
+ "sha256:5183e4f6a2d468787243ebcd70cf4098c247e60d73fb7d68d5bc1e1beaa0c4db",
+ "sha256:5277aec8d879f8d05168fdd17ae811dd313b8ff894aeeaf7cd34ad28b4d77e33",
+ "sha256:52928d8c1b6bda03cc6d811e8923dffc87a2d3c8b3bfd2ce16471c7147a24850",
+ "sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde",
+ "sha256:5773da0ee2d17136b1f1c6fbde543398d452a6ad2a7b54ea1033e2daa739b8d2",
+ "sha256:5ab77f45d33d264de66e1884fca158bc920cb5e27fd0764a72f72f5756ae8bdb",
+ "sha256:5c834f54f8f4640fd7e4b193f80eb25a0602bba9e19b3cd2fc7ffe8199f5ae02",
+ "sha256:5ccd429694cf26af7997595d627dd2637e7932214486f55b8a357edaac9dae8c",
+ "sha256:681d65e9011f7392db5aa002b7423cc442d6a673c635668c227c6c8d0e5a4f77",
+ "sha256:694ad99a7f6718c1a498dc170ca430687a39894a60327f548e02a9c7ee4b6504",
+ "sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516",
+ "sha256:6e966fc3caaf9f1d96b349b0341c70c8d6573bf1bac7261f7b0ba88f96c56c24",
+ "sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a",
+ "sha256:723c5630c4259400818b4ad096735a829074601805d07f8cafc366d95786d331",
+ "sha256:7965c13b3967909a09ecc91f21d09cfc4576bf78140b988904e94f130f188396",
+ "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c",
+ "sha256:7edbc454a29fc6aeae1e1eecba4f07b63b8d76e76a748532233c4c167b4cb9ea",
+ "sha256:7fb66263e9ba8fea2aa85e1e5578980d127fb37d7f2e292773e7bc3a38fb0c7b",
+ "sha256:87d3776f0001b43acebfa86f8c64019c043b55cc5a6a2e313d728b5c95b46969",
+ "sha256:8ab581d3530611897d863d1a649fb0644b860286b4718db919bfd51ece41f10b",
+ "sha256:8d13f0276806ee722e70a1c93da19748594f19ac4299c7e41237fc791d1861ea",
+ "sha256:8ffab8b2908d152e74862d276cf5017c81a2f3719f14e8e3e8d6b83fda863927",
+ "sha256:902dbc832141aa0ec374f4310f1e4e7febeebc3256f00dc359a9ac3f264a45dc",
+ "sha256:9097b9f17f91eea659b9ec58148c0747ec354a42f7389b9d50701610d86f812e",
+ "sha256:91815221101ad3c6b507804178a7bb5cb7b2ead9ecd600041669c8d805ebd595",
+ "sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d",
+ "sha256:99b56acd433386c8f20be5c4000786d1e7ca0523c8eefc995d14d79c7a081498",
+ "sha256:9d3da303ab5f378a268fa7d45f37d7d85c3ec19769f28d2cc0c61826a8de21fe",
+ "sha256:9f466e8bf0a62dc43e068c12166281c2eca72121dd2adc1040f3aa1e21ef8599",
+ "sha256:9fea9c1869bb4742d174a57b4700c6dadea951df8b06de40c2fedb4f02931c2e",
+ "sha256:a0d5f3acc81452c56895e90643a625302bd6be351e7010664151cc55b7b97f89",
+ "sha256:a3edde68d1a1f9af1273b2fe798997b33f90308fb6d44d8550c89fc6a3647cf6",
+ "sha256:a62c3c3ef6a7e2c45f7853b10b5bc4ddefd6ee3cd31024754a1a5842da7d598d",
+ "sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523",
+ "sha256:ab0277cedb698749caada82e5d099dc9fed3f906a30d4c382d1a21725777a1e5",
+ "sha256:ad05b683963f69a1d5d2c2bdab1274a31221ca737dbbceaa32bcb67359453cdd",
+ "sha256:b172f7b9d2f3abc0efd12e3386f7e48b576ef309544ac3a63e5e9cdd2e24585d",
+ "sha256:b1caa0bc2741b043db7823843e1bde8aaa58a55a58fda06083b0569f8b45693a",
+ "sha256:bae370459da6a5466978c0eacf90690cb57ec9d533f8e63e564ef3822bfa04fe",
+ "sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df",
+ "sha256:bdc84017d28459c00db6f918a7272a5190bec3090058334e43a76afb279eac7c",
+ "sha256:bfd0adeee563d59c598ceabddf2c92eec77abcb3f4a391b19aa7366170bd9e30",
+ "sha256:c566dd9c5f63d22226409553531f89de0cac55397f2ab8d97d6f06cfce6d947e",
+ "sha256:c91dbb0ab683fa0cd64a6e81907c8ff41d6497c346890e26b23de7ee55353f96",
+ "sha256:c964fd24e6166420d18fb53996d8c9fd6eac9bf5ae3ec3d03015be4414ce497f",
+ "sha256:cc77ec5b7e2118b152b0d886c7514a4653bcb58c6b1d760134a9fab915f777b3",
+ "sha256:d100e3ae783d2167782391e0c1c7a20a31f55f8015f3293647544df3f9c67824",
+ "sha256:d3a07fadec2a13274a8d861d3d37c61e97a816beae717efccaa4b36dfcaadcde",
+ "sha256:d5e3d15245b08fa4a84cefc6c9222e6f37c98111c8679fbd94aa145f9a0ae23d",
+ "sha256:de9e06abe3cc5ec6a2d5f75bc99b0bdca4f5c719a5b34026f8c57efbdecd2ee3",
+ "sha256:df6a94bf9452c6da9b5d76ed229a5683d0306ccb91cca8e1eea883189780d568",
+ "sha256:e100c52f7355a48413e2999bfb4e139d2977a904495441b374f3d4fb4a170961",
+ "sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4",
+ "sha256:e14f369c98a7c15772b9da98987f58e2b509a93235582838bd0d1d8c08b68fda",
+ "sha256:e3de2777e3b9f4d603112f78006f4ae0acb936e95f06da6cb1a45fbad6bdb4b5",
+ "sha256:e7aaba1b4b03aaea7bb59e1b5856d734be011d3e6d98f5bcaa98cb30f375f2ad",
+ "sha256:ec259f62538e8bf364903a7d0d0239447059f9434b284f5536e8402b7dd198db",
+ "sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd",
+ "sha256:ed3eb16d51257c763539bde21e011092f127a2202692afaeaccb50db55a31383",
+ "sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40",
+ "sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f",
+ "sha256:ef99779001d7ac2e2461d8ab55d3373fe7315caefdbecd8ced75304ae5a6fc6b",
+ "sha256:f59295ecc75a1788af8ba92f2e8c6eeaa5a94c22fc4d151e8d9638814f85c8fc",
+ "sha256:f995719707e0e29f0f41a8aa3bcea6e761a36c9136104d3189eafb83f5cec5e5",
+ "sha256:f99aeda58dce827f76963ee87a0ebe75e648c72ff9ba1174a253f6744f518f65",
+ "sha256:fc6bf8869e193855e8d91d91f6bf59699a5cdfaa47a404e278e776dd7f168b39",
+ "sha256:fc903512177361e868bc1f5b80ac8c8a6e05fcdd574a5fb5ffeac5a9982b9e89",
+ "sha256:fe44d56aa0b00d66640aa84a3cbe80b7a3ccdc6f0b1ca71090696a6d4777c091"
+ ],
+ "markers": "python_version >= '3.9'",
+ "version": "==2.33.1"
+ },
+ "pygments": {
+ "hashes": [
+ "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f",
+ "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==2.19.1"
+ },
+ "python-dotenv": {
+ "hashes": [
+ "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5",
+ "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"
+ ],
+ "version": "==1.1.0"
+ },
+ "pyyaml": {
+ "hashes": [
+ "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff",
+ "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48",
+ "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086",
+ "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e",
+ "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133",
+ "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5",
+ "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484",
+ "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee",
+ "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5",
+ "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68",
+ "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a",
+ "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf",
+ "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99",
+ "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8",
+ "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85",
+ "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19",
+ "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc",
+ "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a",
+ "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1",
+ "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317",
+ "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c",
+ "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631",
+ "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d",
+ "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652",
+ "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5",
+ "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e",
+ "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b",
+ "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8",
+ "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476",
+ "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706",
+ "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563",
+ "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237",
+ "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b",
+ "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083",
+ "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180",
+ "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425",
+ "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e",
+ "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f",
+ "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725",
+ "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183",
+ "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab",
+ "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774",
+ "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725",
+ "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e",
+ "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5",
+ "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d",
+ "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290",
+ "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44",
+ "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed",
+ "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4",
+ "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba",
+ "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12",
+ "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"
+ ],
+ "version": "==6.0.2"
+ },
+ "requests": {
+ "hashes": [
+ "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760",
+ "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==2.32.3"
+ },
+ "sniffio": {
+ "hashes": [
+ "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2",
+ "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==1.3.1"
+ },
+ "stack-data": {
+ "hashes": [
+ "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9",
+ "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"
+ ],
+ "version": "==0.6.3"
+ },
+ "starlette": {
+ "hashes": [
+ "sha256:3c88d58ee4bd1bb807c0d1acb381838afc7752f9ddaec81bbe4383611d833230",
+ "sha256:77c74ed9d2720138b25875133f3a2dae6d854af2ec37dceb56aef370c1d8a227"
+ ],
+ "markers": "python_version >= '3.9'",
+ "version": "==0.46.1"
+ },
+ "traitlets": {
+ "hashes": [
+ "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7",
+ "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==5.14.3"
+ },
+ "typing-extensions": {
+ "hashes": [
+ "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c",
+ "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==4.13.2"
+ },
+ "typing-inspection": {
+ "hashes": [
+ "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f",
+ "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"
+ ],
+ "markers": "python_version >= '3.9'",
+ "version": "==0.4.0"
+ },
+ "urllib3": {
+ "hashes": [
+ "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466",
+ "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"
+ ],
+ "markers": "python_version >= '3.9'",
+ "version": "==2.4.0"
+ },
+ "uvicorn": {
+ "extras": [
+ "standard"
+ ],
+ "hashes": [
+ "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4",
+ "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"
+ ],
+ "index": "pypi",
+ "version": "==0.34.0"
+ },
+ "uvloop": {
+ "hashes": [
+ "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0",
+ "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f",
+ "sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc",
+ "sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414",
+ "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f",
+ "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d",
+ "sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd",
+ "sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff",
+ "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c",
+ "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3",
+ "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d",
+ "sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a",
+ "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb",
+ "sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2",
+ "sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0",
+ "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6",
+ "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c",
+ "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af",
+ "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc",
+ "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb",
+ "sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75",
+ "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb",
+ "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553",
+ "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e",
+ "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6",
+ "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d",
+ "sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206",
+ "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc",
+ "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281",
+ "sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b",
+ "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8",
+ "sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79",
+ "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f",
+ "sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe",
+ "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26",
+ "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816",
+ "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2"
+ ],
+ "version": "==0.21.0"
+ },
+ "watchfiles": {
+ "hashes": [
+ "sha256:0125f91f70e0732a9f8ee01e49515c35d38ba48db507a50c5bdcad9503af5827",
+ "sha256:0a04059f4923ce4e856b4b4e5e783a70f49d9663d22a4c3b3298165996d1377f",
+ "sha256:0b289572c33a0deae62daa57e44a25b99b783e5f7aed81b314232b3d3c81a11d",
+ "sha256:10f6ae86d5cb647bf58f9f655fcf577f713915a5d69057a0371bc257e2553234",
+ "sha256:13bb21f8ba3248386337c9fa51c528868e6c34a707f729ab041c846d52a0c69a",
+ "sha256:15ac96dd567ad6c71c71f7b2c658cb22b7734901546cd50a475128ab557593ca",
+ "sha256:18b3bd29954bc4abeeb4e9d9cf0b30227f0f206c86657674f544cb032296acd5",
+ "sha256:1909e0a9cd95251b15bff4261de5dd7550885bd172e3536824bf1cf6b121e200",
+ "sha256:1a2902ede862969077b97523987c38db28abbe09fb19866e711485d9fbf0d417",
+ "sha256:1a7bac2bde1d661fb31f4d4e8e539e178774b76db3c2c17c4bb3e960a5de07a2",
+ "sha256:237f9be419e977a0f8f6b2e7b0475ababe78ff1ab06822df95d914a945eac827",
+ "sha256:266710eb6fddc1f5e51843c70e3bebfb0f5e77cf4f27129278c70554104d19ed",
+ "sha256:29c7fd632ccaf5517c16a5188e36f6612d6472ccf55382db6c7fe3fcccb7f59f",
+ "sha256:2b7a21715fb12274a71d335cff6c71fe7f676b293d322722fe708a9ec81d91f5",
+ "sha256:2cfb371be97d4db374cba381b9f911dd35bb5f4c58faa7b8b7106c8853e5d225",
+ "sha256:2cfcb3952350e95603f232a7a15f6c5f86c5375e46f0bd4ae70d43e3e063c13d",
+ "sha256:2f1fefb2e90e89959447bc0420fddd1e76f625784340d64a2f7d5983ef9ad246",
+ "sha256:360a398c3a19672cf93527f7e8d8b60d8275119c5d900f2e184d32483117a705",
+ "sha256:3e380c89983ce6e6fe2dd1e1921b9952fb4e6da882931abd1824c092ed495dec",
+ "sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc",
+ "sha256:4ab626da2fc1ac277bbf752446470b367f84b50295264d2d313e28dc4405d663",
+ "sha256:4b6227351e11c57ae997d222e13f5b6f1f0700d84b8c52304e8675d33a808382",
+ "sha256:554389562c29c2c182e3908b149095051f81d28c2fec79ad6c8997d7d63e0009",
+ "sha256:5c40fe7dd9e5f81e0847b1ea64e1f5dd79dd61afbedb57759df06767ac719b40",
+ "sha256:68b2dddba7a4e6151384e252a5632efcaa9bc5d1c4b567f3cb621306b2ca9f63",
+ "sha256:7ee32c9a9bee4d0b7bd7cbeb53cb185cf0b622ac761efaa2eba84006c3b3a614",
+ "sha256:830aa432ba5c491d52a15b51526c29e4a4b92bf4f92253787f9726fe01519487",
+ "sha256:832ccc221927c860e7286c55c9b6ebcc0265d5e072f49c7f6456c7798d2b39aa",
+ "sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936",
+ "sha256:852de68acd6212cd6d33edf21e6f9e56e5d98c6add46f48244bd479d97c967c6",
+ "sha256:85fbb6102b3296926d0c62cfc9347f6237fb9400aecd0ba6bbda94cae15f2b3b",
+ "sha256:86c0df05b47a79d80351cd179893f2f9c1b1cae49d96e8b3290c7f4bd0ca0a92",
+ "sha256:894342d61d355446d02cd3988a7326af344143eb33a2fd5d38482a92072d9563",
+ "sha256:8c0db396e6003d99bb2d7232c957b5f0b5634bbd1b24e381a5afcc880f7373fb",
+ "sha256:8e637810586e6fe380c8bc1b3910accd7f1d3a9a7262c8a78d4c8fb3ba6a2b3d",
+ "sha256:9475b0093767e1475095f2aeb1d219fb9664081d403d1dff81342df8cd707034",
+ "sha256:95cf944fcfc394c5f9de794ce581914900f82ff1f855326f25ebcf24d5397418",
+ "sha256:974866e0db748ebf1eccab17862bc0f0303807ed9cda465d1324625b81293a18",
+ "sha256:9848b21ae152fe79c10dd0197304ada8f7b586d3ebc3f27f43c506e5a52a863c",
+ "sha256:9f4571a783914feda92018ef3901dab8caf5b029325b5fe4558c074582815249",
+ "sha256:a056c2f692d65bf1e99c41045e3bdcaea3cb9e6b5a53dcaf60a5f3bd95fc9763",
+ "sha256:a0dbcb1c2d8f2ab6e0a81c6699b236932bd264d4cef1ac475858d16c403de74d",
+ "sha256:a16512051a822a416b0d477d5f8c0e67b67c1a20d9acecb0aafa3aa4d6e7d256",
+ "sha256:a2014a2b18ad3ca53b1f6c23f8cd94a18ce930c1837bd891262c182640eb40a6",
+ "sha256:a3904d88955fda461ea2531fcf6ef73584ca921415d5cfa44457a225f4a42bc1",
+ "sha256:a74add8d7727e6404d5dc4dcd7fac65d4d82f95928bbee0cf5414c900e86773e",
+ "sha256:ab44e1580924d1ffd7b3938e02716d5ad190441965138b4aa1d1f31ea0877f04",
+ "sha256:b551d4fb482fc57d852b4541f911ba28957d051c8776e79c3b4a51eb5e2a1b11",
+ "sha256:b5eb568c2aa6018e26da9e6c86f3ec3fd958cee7f0311b35c2630fa4217d17f2",
+ "sha256:b659576b950865fdad31fa491d31d37cf78b27113a7671d39f919828587b429b",
+ "sha256:b6e76ceb1dd18c8e29c73f47d41866972e891fc4cc7ba014f487def72c1cf096",
+ "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9",
+ "sha256:b9dca99744991fc9850d18015c4f0438865414e50069670f5f7eee08340d8b40",
+ "sha256:ba5552a1b07c8edbf197055bc9d518b8f0d98a1c6a73a293bc0726dce068ed01",
+ "sha256:bfe0cbc787770e52a96c6fda6726ace75be7f840cb327e1b08d7d54eadc3bc85",
+ "sha256:c0901429650652d3f0da90bad42bdafc1f9143ff3605633c455c999a2d786cac",
+ "sha256:cb1489f25b051a89fae574505cc26360c8e95e227a9500182a7fe0afcc500ce0",
+ "sha256:cd47d063fbeabd4c6cae1d4bcaa38f0902f8dc5ed168072874ea11d0c7afc1ff",
+ "sha256:d363152c5e16b29d66cbde8fa614f9e313e6f94a8204eaab268db52231fe5358",
+ "sha256:d5730f3aa35e646103b53389d5bc77edfbf578ab6dab2e005142b5b80a35ef25",
+ "sha256:d6f9367b132078b2ceb8d066ff6c93a970a18c3029cea37bfd7b2d3dd2e5db8f",
+ "sha256:dfd6ae1c385ab481766b3c61c44aca2b3cd775f6f7c0fa93d979ddec853d29d5",
+ "sha256:e0da39ff917af8b27a4bdc5a97ac577552a38aac0d260a859c1517ea3dc1a7c4",
+ "sha256:ecf6cd9f83d7c023b1aba15d13f705ca7b7d38675c121f3cc4a6e25bd0857ee9",
+ "sha256:ee0822ce1b8a14fe5a066f93edd20aada932acfe348bede8aa2149f1a4489512",
+ "sha256:f2e55a9b162e06e3f862fb61e399fe9f05d908d019d87bf5b496a04ef18a970a",
+ "sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11",
+ "sha256:f59b870db1f1ae5a9ac28245707d955c8721dd6565e7f411024fa374b5362d1d",
+ "sha256:fc533aa50664ebd6c628b2f30591956519462f5d27f951ed03d6c82b2dfd9965",
+ "sha256:fe43139b2c0fdc4a14d4f8d5b5d967f7a2777fd3d38ecf5b1ec669b0d7e43c21",
+ "sha256:fed1cd825158dcaae36acce7b2db33dcbfd12b30c34317a88b8ed80f0541cc57"
+ ],
+ "version": "==1.0.5"
+ },
+ "wcwidth": {
+ "hashes": [
+ "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859",
+ "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"
+ ],
+ "version": "==0.2.13"
+ },
+ "websockets": {
+ "hashes": [
+ "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2",
+ "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9",
+ "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5",
+ "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3",
+ "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8",
+ "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e",
+ "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1",
+ "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256",
+ "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85",
+ "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880",
+ "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123",
+ "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375",
+ "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065",
+ "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed",
+ "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41",
+ "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411",
+ "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597",
+ "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f",
+ "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c",
+ "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3",
+ "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb",
+ "sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e",
+ "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee",
+ "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f",
+ "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf",
+ "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf",
+ "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4",
+ "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a",
+ "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665",
+ "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22",
+ "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675",
+ "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4",
+ "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d",
+ "sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5",
+ "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65",
+ "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792",
+ "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57",
+ "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9",
+ "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3",
+ "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151",
+ "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d",
+ "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475",
+ "sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940",
+ "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431",
+ "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee",
+ "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413",
+ "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8",
+ "sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b",
+ "sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a",
+ "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054",
+ "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb",
+ "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205",
+ "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04",
+ "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4",
+ "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa",
+ "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9",
+ "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122",
+ "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b",
+ "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905",
+ "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770",
+ "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe",
+ "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b",
+ "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562",
+ "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561",
+ "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215",
+ "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931",
+ "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9",
+ "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f",
+ "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7"
+ ],
+ "version": "==15.0.1"
+ }
+ },
+ "develop": {}
+}
diff --git a/env.toml b/env.toml
new file mode 100644
index 0000000..90a0289
--- /dev/null
+++ b/env.toml
@@ -0,0 +1,40 @@
+[base]
+# 多轮对话历史存储类型(memory:内存)
+history_chat_store = 'memory'
+# 相似度阈值
+similarity_threshold = 0.93
+# debug模式 (不适用于流式输出)
+debug = false
+# 详细输出 (不适用于流式输出)
+verbose = false
+#
+####### 模型配置 #######
+[siliconflow]
+# 硅基流动
+# 密钥
+api_key = 'sk-rdoyeoxcyvqjynufqjmewmipwtvrhjjzerqlinpqxiodyafp'
+# 模型名称
+model = 'Qwen/QwQ-32B'
+# API地址
+base_url = 'https://api.siliconflow.cn/v1/'
+# 最大token数
+max_tokens = 4096
+# 温度系数
+temperature = 0.6
+# 是否流式返回
+streaming = true
+
+[ark]
+# 火山引擎
+# 密钥
+api_key = '4eefc827-187f-4756-9637-7e0153c93d81'
+# 模型名称
+model = 'deepseek-r1-250120'
+# API地址
+base_url = 'https://ark.cn-beijing.volces.com/api/v3/'
+# 最大token数
+max_tokens = 4096
+# 温度系数
+temperature = 0.6
+# 是否流式返回
+streaming = true
diff --git a/llmagent/__init__.py b/llmagent/__init__.py
new file mode 100644
index 0000000..cd3f204
--- /dev/null
+++ b/llmagent/__init__.py
@@ -0,0 +1,7 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @Time : 2025/4/12 15:29
+# @Author : old-tom
+# @File : __init__.py
+# @Project : sttFunctionCallBackend
+# @Desc :
diff --git a/llmagent/llm_agent.py b/llmagent/llm_agent.py
new file mode 100644
index 0000000..561dc3e
--- /dev/null
+++ b/llmagent/llm_agent.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @Time : 2025/3/16 09:46
+# @Author : old-tom
+# @File : llm_agent
+# @Project : llmFunctionCallDemo
+# @Desc : 已图的方式构建代理,参考 https://github.langchain.ac.cn/langgraph/tutorials/introduction/#part-1-build-a-basic-chatbot
+from typing import Annotated
+
+from langchain_core.messages import AnyMessage
+from typing_extensions import TypedDict
+from langgraph.graph import StateGraph, START, END
+from langgraph.graph.message import add_messages
+from llmagent.llm_config import LLMConfigLoader
+from langchain_openai import ChatOpenAI
+from llmtools.tool_impl import tool_node, tools
+from langgraph.prebuilt import tools_condition
+from langgraph.checkpoint.memory import MemorySaver
+
+memory = MemorySaver()
+
+# 初始化LLM模型
+llm_conf = LLMConfigLoader.load(item_name='siliconflow')
+llm = ChatOpenAI(
+ model=llm_conf.model, api_key=llm_conf.api_key,
+ base_url=llm_conf.base_url, max_tokens=llm_conf.max_tokens,
+ temperature=llm_conf.temperature,
+ streaming=llm_conf.streaming
+)
+llm_with_tools = llm.bind_tools(tools)
+
+
+class State(TypedDict):
+ """
+ 图的状态机
+ add_messages 函数会自动合并message到一个list中,例如HumanMessage\AIMessage
+ """
+ messages: Annotated[list[AnyMessage], add_messages]
+
+
+graph_builder = StateGraph(State)
+
+
+def chat(state: State):
+ """
+ LLM单轮对话
+ :param state: 状态机
+ LLM需要从状态机获取message
+ :return:
+ """
+ return {"messages": [llm_with_tools.invoke(state["messages"])]}
+
+
+graph_builder.add_node("chat_llm", chat)
+graph_builder.add_node("tools", tool_node)
+graph_builder.add_edge(START, "chat_llm")
+graph_builder.add_edge("chat_llm", END)
+graph_builder.add_conditional_edges("chat_llm", tools_condition)
+graph_builder.add_edge("tools", "chat_llm")
+graph = graph_builder.compile(checkpointer=memory)
+
+
+def stream_graph_updates(user_input: str):
+ config = {"configurable": {"thread_id": "1"}}
+ events = graph.stream(
+ {"messages": [{"role": "user", "content": user_input}]},
+ config,
+ stream_mode="values"
+ )
+ for event in events:
+ event["messages"][-1].pretty_print()
+
+
+while True:
+ try:
+ user_input = input("User: ")
+ if user_input.lower() in ["quit", "exit", "q"]:
+ print("Goodbye!")
+ break
+
+ stream_graph_updates(user_input)
+ except:
+ # fallback if input() is not available
+ user_input = "What do you know about LangGraph?"
+ print("User: " + user_input)
+ stream_graph_updates(user_input)
+ break
diff --git a/llmagent/llm_config.py b/llmagent/llm_config.py
new file mode 100644
index 0000000..321b265
--- /dev/null
+++ b/llmagent/llm_config.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @Time : 2025/3/29 08:49
+# @Author : old-tom
+# @File : llm_config
+# @Project : llmFunctionCallDemo
+# @Desc : llm配置文件解析
+import os
+
+from pydantic import BaseModel
+import toml
+
+# 默认配置文件名
+DEFAULT_CONF_NAME = 'env.toml'
+path = os.path.dirname(__file__)
+path = os.path.dirname(path)
+# 默认配置文件位置
+DEFAULT_CONF_PATH = os.path.join(path, DEFAULT_CONF_NAME)
+
+
+class ConfigNotFoundError(Exception):
+ """
+ 配置不存在异常
+ """
+
+ def __init__(self, msg):
+ Exception.__init__(self, msg)
+
+
+def load_env():
+ if not os.path.isfile(DEFAULT_CONF_PATH):
+ raise ConfigNotFoundError(f'模型配置文件{DEFAULT_CONF_NAME}不存在')
+ return toml.load(DEFAULT_CONF_PATH)
+
+
+conf = load_env()
+
+
+class LLMConf(BaseModel):
+ api_key: str
+ model: str
+ base_url: str
+ max_tokens: int
+ temperature: float
+ streaming: bool = True
+
+
+class LLMConfigLoader(object):
+ @staticmethod
+ def load(item_name) -> LLMConf:
+ """
+ 校验并加载配置
+ :return:
+ """
+ return LLMConf(**conf[item_name])
+
+
+class BaseConf(BaseModel):
+ history_chat_store: str
+ similarity_threshold: float
+ debug: bool = False
+ verbose: bool = False
+
+
+base_conf = BaseConf(**conf['base'])
diff --git a/llmtools/__init__.py b/llmtools/__init__.py
new file mode 100644
index 0000000..20dfd2e
--- /dev/null
+++ b/llmtools/__init__.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @Time : 2025/4/12 14:54
+# @Author : old-tom
+# @File : __init__.py
+# @Project : sttFunctionCallBackend
+# @Desc : 自定义工具,langchain 标准
+
diff --git a/llmtools/tool_impl.py b/llmtools/tool_impl.py
new file mode 100644
index 0000000..f3e5494
--- /dev/null
+++ b/llmtools/tool_impl.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @Time : 2025/4/12 14:55
+# @Author : old-tom
+# @File : tool_impl
+# @Project : sttFunctionCallBackend
+# @Desc : 工具定义
+
+from typing import Annotated
+from langchain_core.tools import tool
+from vector_db import query_vector_db
+from log_conf import log
+from llmagent.llm_config import base_conf
+import json
+from langchain_core.messages import ToolMessage
+from langgraph.prebuilt import ToolNode
+
+
+@tool("play_video", description="播放、查看、打开实时视频")
+def play_video(camera_name: Annotated[str, "相机名称,例如:南卡口1号相机"]) -> str:
+ camera_info = query_camera_from_db(camera_name)
+ log.info('【function】play_video 输入 [{}],向量库返回{}', camera_name, camera_info)
+ if camera_info:
+ if len(camera_info) > 1:
+ hit_camera_names = [x['carme_name'] for x in camera_info]
+ return f"找到以下相机,请选择一个:{hit_camera_names}"
+ else:
+ # TODO 调用业务系统
+ return f"正在打开{camera_name},请等待操作完成"
+ else:
+ return "未找到该相机,请尝试其他名称"
+
+
+@tool("split_screen", description="切换分屏")
+def split_screen(split_n: Annotated[int, "要切换的分屏数量,整数并且大于0,例如:1分屏、2分屏"]) -> str:
+ return f"正在切换到{split_n}分屏,请等待操作完成"
+
+
+@tool("play_video_record", description="播放、打开录像")
+def play_video_record(camera_name: Annotated[str, "相机名称,例如:南卡口1号相机"],
+ start_time: Annotated[str, "录像开始时间,格式为yyyy-MM-dd hh:mm:ss,例 2025-03-16 01:00:00"],
+ end_time: Annotated[str, "录像结束时间,格式为yyyy-MM-dd hh:mm:ss,例 2025-03-16 02:09:31"]) -> str:
+ log.info('【function】play_video_record 输入 [{},{},{}]', camera_name, start_time, end_time)
+ return f"正在打开{camera_name}的录像,请等待操作完成"
+
+
+@tool("switch_page", description="打开、跳转页面")
+def switch_page(page_name: Annotated[str, "页面中文名称或者缩写,例:人员核查、系统日志、设备管理、首页"]) -> str:
+ pass
+
+
+@tool("zoom_in", description="放大电子地图")
+def zoom_in(level_n: Annotated[int, "放大等级,整数并且大于0小于5,例如:放大1级、放大2级"]) -> str:
+ pass
+
+
+@tool("view_flight_details", description="查询指定机场指定航班及时间的出入境人员明细")
+def view_flight_details(
+ airport_name: Annotated[str, "机场名称,简体中文,可以是缩写,例如:成都天府机场、天府机场、长水机场、上海浦东机场"],
+ flight_code: Annotated[
+ str, "航班编号,由字母+数字组成的完整编号,若编号包含多余字符(如标点符号),需过滤后保留有效部分"],
+ flight_date: Annotated[str, "提取完整日期(年月日),自动补零至标准格式 yyyy-MM-dd, 例:2025-03-16"],
+ ie_type: Annotated[str, "出入境类型,仅识别'入境'或'出境'两种类型"]) -> str:
+ log.info('【function】view_flight_details 输入 [{},{},{},{}]', airport_name, flight_code, flight_date, ie_type)
+ return f"{airport_name}航班号{flight_code}{flight_date}{ie_type}数据,共100人乘机,起飞准时,晚点降落"
+
+
+def query_camera_from_db(camera_name: str, top_n: int = 3) -> str:
+ """
+ 相机名称查询向量库,根据相似度阈值取top_one或者top_n
+ :param camera_name: 相机名称
+ :param top_n: 返回前N个
+ :return:
+ """
+ rt = query_vector_db(camera_name)
+ if rt:
+ log.info('【function】相机相似度检索查询[{}],返回 {}', camera_name, rt)
+ # 判断相似度最高的相机是否超过阈值
+ top_one = rt['hits'][0]
+ # 相似度评分
+ score = top_one['_score']
+ if score > base_conf.similarity_threshold:
+ return rt['hits'][0:1]
+ else:
+ return rt['hits'][0:top_n]
+
+
+tools = [play_video, split_screen, play_video_record, switch_page, zoom_in, view_flight_details]
+tool_node = ToolNode(tools=tools)
diff --git a/log_conf.py b/log_conf.py
new file mode 100644
index 0000000..26abb9b
--- /dev/null
+++ b/log_conf.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @Time : 2025/4/12 14:51
+# @Author : old-tom
+# @File : log_conf
+# @Project : sttFunctionCallBackend
+# @Desc :
+
+import sys
+import os
+from loguru import logger
+
+BASE_DIR = os.path.dirname(os.path.abspath(__file__))
+
+# 日志输出路径
+LOG_PATH = os.path.join(BASE_DIR, r'logout/logout.log')
+
+
+class Logger(object):
+ def __init__(self):
+ self.logger = logger
+ self.logger.remove()
+ self.logger.add(sys.stdout,
+ format="{time:YYYY-MM-DD HH:mm:ss} | " # 颜色>时间
+ "{process.name} | " # 进程名
+ "{thread.name} | " # 进程名
+ "{module}.{function}" # 模块名.方法名
+ ":{line} | " # 行号
+ "{level}: " # 等级
+ "{message}", # 日志内容
+ )
+ # 输出到文件的格式,注释下面的add',则关闭日志写入
+ self.logger.add(LOG_PATH, level='DEBUG',
+ format='{time:YYYY-MM-DD HH:mm:ss} - ' # 时间
+ "{process.name} | " # 进程名
+ "{thread.name} | " # 进程名
+ '{module}.{function}:{line} - {level} -{message}', # 模块名.方法名:行号
+ rotation="10 MB")
+
+ def get_logger(self):
+ return self.logger
+
+
+log = Logger().get_logger()
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..6d7c6d9
--- /dev/null
+++ b/main.py
@@ -0,0 +1,13 @@
+from fastapi import FastAPI
+
+app = FastAPI()
+
+
+@app.get("/")
+async def root():
+ return {"message": "Hello World"}
+
+
+@app.get("/hello/{name}")
+async def say_hello(name: str):
+ return {"message": f"Hello {name}"}
diff --git a/vector_db.py b/vector_db.py
new file mode 100644
index 0000000..66f32ae
--- /dev/null
+++ b/vector_db.py
@@ -0,0 +1,631 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @Time : 2025/3/16 20:09
+# @Author : old-tom
+# @File : vector_agent
+# @Project : llmFunctionCallDemo
+# @Desc : 向量数据库,解决相似度查询,例如 相机名称
+import marqo
+
+# 索引名称
+INDEX_NAME = 'test_index'
+# 初始化marqo
+mq = marqo.Client(url='http://localhost:8882')
+
+# mq.delete_index(INDEX_NAME)
+
+settings = {
+ "treatUrlsAndPointersAsImages": False,
+ "model": "hf/bge-large-zh-v1.5",
+ "normalizeEmbeddings": True,
+}
+
+
+def create_and_set_index():
+ """
+ 全局只能调用一次
+ :return:
+ """
+ mq.create_index(INDEX_NAME, settings_dict=settings)
+ # 添加文档(测试用)
+ mq.index(INDEX_NAME).add_documents([
+ {
+ "carme_name": "中方国门AI算法",
+ "ip": "192.168.10.80",
+ "location": "国门顶部"
+ },
+ {
+ "carme_name": "中方国门AI算法0102",
+ "ip": "192.168.10.80",
+ "location": "国门顶部"
+ },
+ {
+ "carme_name": "中方国门入境1",
+ "ip": "192.168.10.77",
+ "location": "国门通道"
+ },
+ {
+ "carme_name": "中方国门入境2",
+ "ip": "192.168.10.79",
+ "location": "国门通道"
+ },
+ {
+ "carme_name": "中方国门入境摄像头中",
+ "ip": "192.168.10.72",
+ "location": "登临检验"
+ },
+ {
+ "carme_name": "中方国门入境摄像头右",
+ "ip": "192.168.10.74",
+ "location": "登临检验"
+ },
+ {
+ "carme_name": "中方国门入境摄像头左",
+ "ip": "192.168.10.75",
+ "location": "登临检验"
+ },
+ {
+ "carme_name": "中方国门出境1",
+ "ip": "192.168.10.76",
+ "location": "国门通道"
+ },
+ {
+ "carme_name": "中方国门出境2",
+ "ip": "192.168.10.78",
+ "location": "国门通道"
+ },
+ {
+ "carme_name": "中方国门出境摄像头右",
+ "ip": "192.168.10.71",
+ "location": "登临检验"
+ },
+ {
+ "carme_name": "中方国门出境摄像头左",
+ "ip": "192.168.10.73",
+ "location": "登临检验"
+ },
+ {
+ "carme_name": "中方国门-面向国门球机",
+ "ip": "192.168.10.215",
+ "location": "国门通道拐角"
+ },
+ {
+ "carme_name": "中方国门高点1",
+ "ip": "192.168.10.70",
+ "location": "国门顶部"
+ },
+ {
+ "carme_name": "北卡口AI摄像头全景",
+ "ip": "192.168.10.30",
+ "location": "北卡口对面"
+ },
+ {
+ "carme_name": "北卡口AI摄像头细节",
+ "ip": "192.168.10.30",
+ "location": "北卡口对面"
+ },
+ {
+ "carme_name": "北卡口入境摄像头入场4号通道",
+ "ip": "192.168.10.112",
+ "location": "入场通道"
+ },
+ {
+ "carme_name": "北卡口入境摄像头入场5号通道",
+ "ip": "192.168.10.114",
+ "location": "入场通道"
+ },
+ {
+ "carme_name": "北卡口入境摄像头入场6号通道",
+ "ip": "192.168.10.117",
+ "location": "入场通道"
+ },
+ {
+ "carme_name": "北卡口入境摄像头出场1号通道",
+ "ip": "192.168.10.115",
+ "location": "出场通道"
+ },
+ {
+ "carme_name": "北卡口入境摄像头出场2号通道",
+ "ip": "192.168.10.116",
+ "location": "出场通道"
+ },
+ {
+ "carme_name": "北卡口入境摄像头出场3号通道",
+ "ip": "192.168.10.113",
+ "location": "出场通道"
+ },
+ {
+ "carme_name": "北卡口出口道路监控",
+ "ip": "192.168.10.153",
+ "location": "路口"
+ },
+ {
+ "carme_name": "能投大厦高点1",
+ "ip": "192.168.10.89",
+ "location": "能投楼顶"
+ },
+ {
+ "carme_name": "南卡口AI算法2",
+ "ip": "192.168.10.210",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "南卡口AI算法20102",
+ "ip": "192.168.10.210",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "南卡口AI算法识别摄像机",
+ "ip": "192.168.10.91",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "南卡口AI算法识别摄像机0102",
+ "ip": "192.168.10.91",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "南卡口出境摄像头1号通道",
+ "ip": "192.168.10.100",
+ "location": "出境通道"
+ },
+ {
+ "carme_name": "南卡口出境摄像头2号通道",
+ "ip": "192.168.10.103",
+ "location": "出境通道"
+ },
+ {
+ "carme_name": "南卡口出境摄像头3号通道",
+ "ip": "192.168.10.104",
+ "location": "出境通道"
+ },
+ {
+ "carme_name": "南卡口出境摄像头4号通道",
+ "ip": "192.168.10.102",
+ "location": "出境通道"
+ },
+ {
+ "carme_name": "南卡口出境摄像头5号通道",
+ "ip": "192.168.10.99",
+ "location": "出境通道"
+ },
+ {
+ "carme_name": "南卡口出境摄像头6号通道",
+ "ip": "192.168.10.101",
+ "location": "出境通道"
+ },
+ {
+ "carme_name": "南卡口入境摄像头7号通道",
+ "ip": "192.168.10.98",
+ "location": "入境通道"
+ },
+ {
+ "carme_name": "南卡口入境摄像头8号通道",
+ "ip": "192.168.10.93",
+ "location": "入境通道"
+ },
+ {
+ "carme_name": "南卡口入境摄像头9号通道",
+ "ip": "192.168.10.97",
+ "location": "入境通道"
+ },
+ {
+ "carme_name": "南卡口入境摄像头10号通道",
+ "ip": "192.168.10.96",
+ "location": "入境通道"
+ },
+ {
+ "carme_name": "南卡口入境摄像头11号通道",
+ "ip": "192.168.10.94",
+ "location": "入境通道"
+ },
+ {
+ "carme_name": "南卡口入境摄像头12号通道",
+ "ip": "192.168.10.95",
+ "location": "入境通道"
+ },
+ {
+ "carme_name": "南卡口高点-1",
+ "ip": "192.168.10.90",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "南卡口高点-2",
+ "ip": "192.168.10.92",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "南卡口高点-3",
+ "ip": "192.168.3.12",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "1.3公里封闭道路入境出场1",
+ "ip": "192.168.10.82",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "1.3公里封闭道路入境出场2",
+ "ip": "192.168.10.88",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "1.3公里封闭道路入境出场20102",
+ "ip": "192.168.10.88",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "1.3公里封闭道路入境摄像头入场2",
+ "ip": "192.168.10.87",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "1.3公里封闭道路入境摄像头入场20102",
+ "ip": "192.168.10.87",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "1.3公里封闭道路入境入场1",
+ "ip": "192.168.10.81",
+ "location": "南卡口顶部"
+ },
+ {
+ "carme_name": "H9861号口摄像头入场",
+ "ip": "192.168.10.107",
+ "location": "H986停车场出入口"
+ },
+ {
+ "carme_name": "H9862号口摄像头出场",
+ "ip": "192.168.10.109",
+ "location": "H987停车场出入口"
+ },
+ {
+ "carme_name": "H9862号口摄像头入场",
+ "ip": "192.168.10.190",
+ "location": "H988停车场出入口"
+ },
+ {
+ "carme_name": "车辆定位AI摄像头",
+ "ip": "192.168.10.29",
+ "location": "H988停车场山上"
+ },
+ {
+ "carme_name": "车辆定位AI摄像头0102",
+ "ip": "192.168.10.29",
+ "location": "H989停车场山上"
+ },
+ {
+ "carme_name": "北山货场森林公园制高点",
+ "ip": "192.168.10.191",
+ "location": "H990停车场山上"
+ },
+ {
+ "carme_name": "边民互市入境摄像头出场",
+ "ip": "192.168.10.119",
+ "location": "边民互市"
+ },
+ {
+ "carme_name": "边民互市入境摄像头入场",
+ "ip": "192.168.10.118",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "车辆缓冲区1号门入口",
+ "ip": "192.168.10.193",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "车辆缓冲区2号门入口",
+ "ip": "192.168.10.195",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "车辆缓冲区2号门出口",
+ "ip": "192.168.10.194",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "车辆缓冲区1号门出口",
+ "ip": "192.168.10.192",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "大贸查验场进口入境摄像头入场东口",
+ "ip": "192.168.10.181",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "大贸查验场进口入境摄像头出场东口",
+ "ip": "192.168.10.180",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "大贸查验场(进口)入境摄像头入场(西口)",
+ "ip": "192.168.10.106",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "大贸查验场(进口)高点1",
+ "ip": "192.168.10.156",
+ "location": "高点"
+ },
+ {
+ "carme_name": "大贸查验场出口出境摄像头出场2",
+ "ip": "192.168.10.110",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "大贸查验场出口出境摄像头入场左",
+ "ip": "192.168.10.184",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "大贸查验场出口出境摄像头出场1",
+ "ip": "192.168.10.111",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "北山高速收费站入境摄像头入场出方向",
+ "ip": "192.168.10.170",
+ "location": "道路"
+ },
+ {
+ "carme_name": "北山高速收费站入境摄像头入场入方向",
+ "ip": "192.168.10.169",
+ "location": "道路"
+ },
+ {
+ "carme_name": "坝洒高点",
+ "ip": "192.168.10.164",
+ "location": ""
+ },
+ {
+ "carme_name": "停车场卡口(坝洒)入境摄像头入场",
+ "ip": "192.168.10.165",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "停车场卡口(坝洒)入境摄像头出场",
+ "ip": "192.168.10.166",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "东西干道卡口入境摄像头入场",
+ "ip": "192.168.10.136",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "东西干道卡口入境摄像头出场",
+ "ip": "192.168.10.135",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "主卡口(临时)货场大门-高点",
+ "ip": "192.168.10.146",
+ "location": ""
+ },
+ {
+ "carme_name": "利丰酒店往边民互市高点",
+ "ip": "192.168.10.211",
+ "location": "利丰酒店楼顶"
+ },
+ {
+ "carme_name": "利丰货场近御峰货场入境摄像头出场2",
+ "ip": "192.168.10.132",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "利丰酒店往边民互市高点2",
+ "ip": "192.168.10.212",
+ "location": "利丰酒店楼顶"
+ },
+ {
+ "carme_name": "利丰货场近御峰货场入境摄像头入场2",
+ "ip": "192.168.10.139",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "利丰货场入境摄像头出场左",
+ "ip": "192.168.10.127",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "利丰货场入境摄像头入场左",
+ "ip": "192.168.10.128",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "利丰货场入境摄像头出场右",
+ "ip": "192.168.10.126",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "利丰货场-高点",
+ "ip": "192.168.10.125",
+ "location": ""
+ },
+ {
+ "carme_name": "利丰货场近御峰货场入境摄像头出场1",
+ "ip": "192.168.10.131",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "利丰货场入境摄像头入场右",
+ "ip": "192.168.10.129",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "利丰货场近御峰货场入境摄像头入场1",
+ "ip": "192.168.10.130",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "南屏高速收费站入境摄像头出场",
+ "ip": "192.168.10.168",
+ "location": "道路"
+ },
+ {
+ "carme_name": "南屏高速收费站入境摄像头入场",
+ "ip": "192.168.10.167",
+ "location": "道路"
+ },
+ {
+ "carme_name": "停车场卡口老表入境摄像头入场",
+ "ip": "192.168.10.160",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "停车场卡口老表右入境摄像头入场",
+ "ip": "192.168.10.162",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "停车场卡口老表入境摄像头出场",
+ "ip": "192.168.10.161",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "停车场卡口老表右入境摄像头出场",
+ "ip": "192.168.10.163",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "槟榔寨站入境摄像头入场",
+ "ip": "192.168.10.173",
+ "location": "道路"
+ },
+ {
+ "carme_name": "槟榔寨站入境摄像头出场",
+ "ip": "192.168.10.174",
+ "location": "道路"
+ },
+ {
+ "carme_name": "外围冷链停车区入境摄像头出场",
+ "ip": "192.168.10.158",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "外围冷链停车区入境摄像头入场",
+ "ip": "192.168.10.157",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "清水河隧道出",
+ "ip": "192.168.10.175",
+ "location": "道路"
+ },
+ {
+ "carme_name": "清水河隧道入",
+ "ip": "192.168.10.186",
+ "location": "道路"
+ },
+ {
+ "carme_name": "商阜路闭环区道路监控-高点",
+ "ip": "192.168.10.154",
+ "location": "道路"
+ },
+ {
+ "carme_name": "商阜路闭环区道路监控道路监控高点2",
+ "ip": "192.168.10.155",
+ "location": "道路"
+ },
+ {
+ "carme_name": "商阜路闭环区道路监控道路监控-后",
+ "ip": "192.168.10.152",
+ "location": "道路"
+ },
+ {
+ "carme_name": "越南城十字路口-东西干道入境摄像头出场",
+ "ip": "192.168.10.172",
+ "location": "道路"
+ },
+ {
+ "carme_name": "越南城十字路口-东西干道入境摄像头入场",
+ "ip": "192.168.10.171",
+ "location": "道路"
+ },
+ {
+ "carme_name": "停车场卡口能投入境摄像头出场",
+ "ip": "192.168.10.124",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "停车场卡口能投入境摄像头入场2",
+ "ip": "192.168.10.123",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "停车场卡口能投入境摄像头入场1",
+ "ip": "192.168.10.122",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场冷链入境摄像头出场出口",
+ "ip": "192.168.10.145",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场(冷链)-高点",
+ "ip": "192.168.10.137",
+ "location": ""
+ },
+ {
+ "carme_name": "御峰货场冷链入境摄像头入场进口",
+ "ip": "192.168.10.133",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场冷链入境摄像头入场出口",
+ "ip": "192.168.10.138",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场冷链入境摄像头出场进口",
+ "ip": "192.168.10.141",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场干货入境摄像头入场",
+ "ip": "192.168.10.140",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场干货入境摄像头入场2",
+ "ip": "192.168.10.148",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场干货入境摄像头出场",
+ "ip": "192.168.10.144",
+ "location": "出入口"
+ },
+ {
+ "carme_name": "御峰货场(干货)-高点1",
+ "ip": "192.168.10.142",
+ "location": ""
+ },
+ {
+ "carme_name": "御峰货场(干货)-高点2",
+ "ip": "192.168.10.143",
+ "location": ""
+ },
+ {
+ "carme_name": "御峰货场干货入境摄像头出场2",
+ "ip": "192.168.10.147",
+ "location": "出入口"
+ }],
+ tensor_fields=["carme_name"]
+ )
+
+
+def query_vector_db(query):
+ return mq.index(INDEX_NAME).search(q=query)
+
+
+if __name__ == '__main__':
+ # create_and_set_index()
+ rt = query_vector_db('利丰酒店高点')
+ # TODO 根据 _score字段 取出相似度最高的结果
+ if rt:
+ for ele in rt['hits']:
+ print(ele)