From ea0219a5d521ef1fa0b2d338bb53635f0f26b924 Mon Sep 17 00:00:00 2001 From: KVOJJJin Date: Fri, 7 Jun 2024 16:01:33 +0800 Subject: [PATCH 01/70] Fix: z-index in header (#5017) --- web/app/components/header/HeaderWrapper.tsx | 2 +- web/app/components/tools/provider-list.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/header/HeaderWrapper.tsx b/web/app/components/header/HeaderWrapper.tsx index ba51216dd7dd35..a872a7b3066855 100644 --- a/web/app/components/header/HeaderWrapper.tsx +++ b/web/app/components/header/HeaderWrapper.tsx @@ -15,7 +15,7 @@ const HeaderWrapper = ({ return (
{
Date: Fri, 7 Jun 2024 20:00:39 +0800 Subject: [PATCH 02/70] deal the external image when extract docx image (#5024) --- api/core/rag/extractor/word_extractor.py | 26 +++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/api/core/rag/extractor/word_extractor.py b/api/core/rag/extractor/word_extractor.py index 5b858c6c4c69b8..9045966da92a84 100644 --- a/api/core/rag/extractor/word_extractor.py +++ b/api/core/rag/extractor/word_extractor.py @@ -76,13 +76,25 @@ def _extract_images_from_docx(self, doc, image_folder): for rel in doc.part.rels.values(): if "image" in rel.target_ref: image_count += 1 - image_ext = rel.target_ref.split('.')[-1] - # user uuid as file name - file_uuid = str(uuid.uuid4()) - file_key = 'image_files/' + self.tenant_id + '/' + file_uuid + '.' + image_ext - mime_type, _ = mimetypes.guess_type(file_key) - - storage.save(file_key, rel.target_part.blob) + if rel.is_external: + url = rel.reltype + response = requests.get(url, stream=True) + if response.status_code == 200: + image_ext = mimetypes.guess_extension(response.headers['Content-Type']) + file_uuid = str(uuid.uuid4()) + file_key = 'image_files/' + self.tenant_id + '/' + file_uuid + '.' + image_ext + mime_type, _ = mimetypes.guess_type(file_key) + storage.save(file_key, response.content) + else: + continue + else: + image_ext = rel.target_ref.split('.')[-1] + # user uuid as file name + file_uuid = str(uuid.uuid4()) + file_key = 'image_files/' + self.tenant_id + '/' + file_uuid + '.' + image_ext + mime_type, _ = mimetypes.guess_type(file_key) + + storage.save(file_key, rel.target_part.blob) # save file to db config = current_app.config upload_file = UploadFile( From ea5c8a72e2b1b48a716ea011746c294f996104ec Mon Sep 17 00:00:00 2001 From: doufa Date: Fri, 7 Jun 2024 20:02:08 +0800 Subject: [PATCH 03/70] Fix language setting not success (#5023) --- .../account-setting/language-page/index.tsx | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/web/app/components/header/account-setting/language-page/index.tsx b/web/app/components/header/account-setting/language-page/index.tsx index 7f3011386720c2..fc8db8681359af 100644 --- a/web/app/components/header/account-setting/language-page/index.tsx +++ b/web/app/components/header/account-setting/language-page/index.tsx @@ -22,27 +22,41 @@ export default function LanguagePage() { const { notify } = useContext(ToastContext) const [editing, setEditing] = useState(false) const { t } = useTranslation() - const handleSelect = async (type: string, item: Item) => { - let url = '' - let bodyKey = '' - if (type === 'language') { - url = '/account/interface-language' - bodyKey = 'interface_language' + + const handleSelectLanguage = async (item: Item) => { + const url = '/account/interface-language' + const bodyKey = 'interface_language' + + setEditing(true) + try { + await updateUserProfile({ url, body: { [bodyKey]: item.value } }) + notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) + setLocaleOnClient(item.value.toString()) } - if (type === 'timezone') { - url = '/account/timezone' - bodyKey = 'timezone' + catch (e) { + notify({ type: 'error', message: (e as Error).message }) + } + finally { + setEditing(false) } + } + + const handleSelectTimezone = async (item: Item) => { + const url = '/account/timezone' + const bodyKey = 'timezone' + + setEditing(true) try { - setEditing(true) await updateUserProfile({ url, body: { [bodyKey]: item.value } }) notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) + mutateUserProfile() - setEditing(false) } catch (e) { notify({ type: 'error', message: (e as Error).message }) + } + finally { setEditing(false) } } @@ -54,7 +68,7 @@ export default function LanguagePage() { item.supported)} - onSelect={item => handleSelect('language', item)} + onSelect={item => handleSelectLanguage(item)} disabled={editing} />
@@ -63,7 +77,7 @@ export default function LanguagePage() { handleSelect('timezone', item)} + onSelect={item => handleSelectTimezone(item)} disabled={editing} />
From d319d9fc5e5e58a353ea9ce2129327b089a50f0a Mon Sep 17 00:00:00 2001 From: Pika Date: Fri, 7 Jun 2024 20:59:39 +0800 Subject: [PATCH 04/70] fix(style): some style issues (#5029) --- .../edit-custom-collection-modal/config-credentials.tsx | 4 ++-- .../components/workflow/nodes/_base/components/field.tsx | 2 +- .../workflow/nodes/_base/components/info-panel.tsx | 2 +- .../workflow/nodes/if-else/components/condition-item.tsx | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/web/app/components/tools/edit-custom-collection-modal/config-credentials.tsx b/web/app/components/tools/edit-custom-collection-modal/config-credentials.tsx index cdff5424313785..71fd1cd94df2a2 100644 --- a/web/app/components/tools/edit-custom-collection-modal/config-credentials.tsx +++ b/web/app/components/tools/edit-custom-collection-modal/config-credentials.tsx @@ -53,9 +53,9 @@ const ConfigCredential: FC = ({ positionCenter={positionCenter} onHide={onHide} title={t('tools.createTool.authMethod.title')!} - panelClassName='mt-2 !w-[520px]' + panelClassName='mt-2 !w-[520px] h-fit' maxWidthClassName='!max-w-[520px]' - height='calc(100vh - 16px)' + height={'fit-content'} headerClassName='!border-b-black/5' body={
diff --git a/web/app/components/workflow/nodes/_base/components/field.tsx b/web/app/components/workflow/nodes/_base/components/field.tsx index bdc0e95442f29c..aa93ba75972590 100644 --- a/web/app/components/workflow/nodes/_base/components/field.tsx +++ b/web/app/components/workflow/nodes/_base/components/field.tsx @@ -31,7 +31,7 @@ const Filed: FC = ({ toggle: toggleFold, }] = useBoolean(true) return ( -
+
supportFold && toggleFold()} className={cn('flex justify-between items-center', supportFold && 'cursor-pointer')}> diff --git a/web/app/components/workflow/nodes/_base/components/info-panel.tsx b/web/app/components/workflow/nodes/_base/components/info-panel.tsx index 721a45634b94b6..e7a83ee3142957 100644 --- a/web/app/components/workflow/nodes/_base/components/info-panel.tsx +++ b/web/app/components/workflow/nodes/_base/components/info-panel.tsx @@ -17,7 +17,7 @@ const InfoPanel: FC = ({
{title}
-
+
{content}
diff --git a/web/app/components/workflow/nodes/if-else/components/condition-item.tsx b/web/app/components/workflow/nodes/if-else/components/condition-item.tsx index 4e1163c860af4e..cd511cce2c2a26 100644 --- a/web/app/components/workflow/nodes/if-else/components/condition-item.tsx +++ b/web/app/components/workflow/nodes/if-else/components/condition-item.tsx @@ -145,7 +145,7 @@ const Item: FC = ({ return (
{isShowLogicalOperator && ( -
+
{Line}
= ({ nodeId={nodeId} readonly={readonly} isShowNodeName - className='w-[162px]' + className='min-w-[162px] flex-grow' value={payload.variable_selector} onChange={handleVarReferenceChange} filterVar={filterVar} @@ -229,7 +229,7 @@ const Item: FC = ({ value={!isValueReadOnly ? payload.value : ''} onChange={handleValueChange} placeholder={(!readonly && !isValueReadOnly) ? t(`${i18nPrefix}.enterValue`)! : ''} - className='w-[80px] h-8 leading-8 px-2.5 rounded-lg border-0 bg-gray-100 text-gray-900 text-[13px] placeholder:text-gray-400 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-gray-200' + className='min-w-[80px] flex-grow h-8 leading-8 px-2.5 rounded-lg border-0 bg-gray-100 text-gray-900 text-[13px] placeholder:text-gray-400 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-gray-200' type='text' /> {!readonly && ( From 3b62ab564a44dc8ae62fb21559c2e423b25f7f33 Mon Sep 17 00:00:00 2001 From: zxhlyh Date: Sat, 8 Jun 2024 07:32:34 +0800 Subject: [PATCH 05/70] feat: feature modal style (#5032) --- .../feature-item/preview-imgs/citation.png | Bin 0 -> 29852 bytes .../preview-imgs/more-like-this.png | Bin 0 -> 30202 bytes .../preview-imgs/speech-to-text.png | Bin 0 -> 24529 bytes .../suggested-questions-after-answer.png | Bin 0 -> 42447 bytes .../feature-item/style.module.css | 12 +++++++----- .../feature-item/style.module.css | 16 +++++++++------- 6 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/citation.png create mode 100644 web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/more-like-this.png create mode 100644 web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/speech-to-text.png create mode 100644 web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/suggested-questions-after-answer.png diff --git a/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/citation.png b/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/citation.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0847c942693ac2a2026395c3e6fc86c2dc0626 GIT binary patch literal 29852 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μW73O{l_UeVFQ1ZJfvH!n^l%*g(RX!_ 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 literal 0 HcmV?d00001 diff --git a/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/more-like-this.png b/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/more-like-this.png new file mode 100644 index 0000000000000000000000000000000000000000..9eb1c3a1ceba5873c0a5caddc5ffbf869272873e GIT binary patch literal 30202 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 KZ(uZR!~ProepMC# literal 0 HcmV?d00001 diff --git a/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/speech-to-text.png b/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/speech-to-text.png new file mode 100644 index 0000000000000000000000000000000000000000..c951d0c418b04f345c269307a278c156ca1a5c70 GIT binary patch literal 24529 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 literal 0 HcmV?d00001 diff --git a/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/suggested-questions-after-answer.png b/web/app/components/app/configuration/config/feature/choose-feature/feature-item/preview-imgs/suggested-questions-after-answer.png new file mode 100644 index 0000000000000000000000000000000000000000..bee4be0acf7a4f96252a39d845d0a8fc7e84ac03 GIT binary patch literal 42447 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%0DIHHARnZ~e<=P(Ej+YJgif};= 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%0DV?P)8sE z>BEjQXun|uokRcmO9Z4%NPE|-KW`^wo2oRgyQ+lWPa?ek!_GJF|M0)V_7_%W3E8&e z``_*}CHP$H<&OBg72djPeJ@75xXZ&|G%3FQ4wHcd@q(Z^U%~=^S_%3!r?f6`%=%i& zP(@!m$G zlP!I7kVPhV6mfmoAQ(yvOqkoqUe^4*5cO~4ziXTTuknIRM3l*|aKjX^t(HZ$s$%hN z>qxLVcLLT$9j()3c~IHI@{c;!pkoKskiT2mZ%}!qg|t-(?qI{}&fk$s$o4_s(jHfG@s&9!P1yaP2q{n0 zF_?XcY(3W^(e)dYSF_`cTGz_8)#~*Z^xMGuKYaUP-v4?ZJ_}3`4d={P;2 Date: Sat, 8 Jun 2024 22:29:24 +0800 Subject: [PATCH 06/70] improve: generalize vector factory classes and vector type (#5033) --- api/commands.py | 21 +- api/controllers/console/datasets/datasets.py | 61 ++--- .../datasource/vdb/milvus/milvus_vector.py | 36 ++- .../datasource/vdb/pgvecto_rs/pgvecto_rs.py | 33 ++- .../rag/datasource/vdb/pgvector/pgvector.py | 31 ++- .../datasource/vdb/qdrant/qdrant_vector.py | 46 +++- .../rag/datasource/vdb/relyt/relyt_vector.py | 42 +++- .../datasource/vdb/tidb_vector/tidb_vector.py | 33 +++ api/core/rag/datasource/vdb/vector_base.py | 4 + api/core/rag/datasource/vdb/vector_factory.py | 231 ++++-------------- api/core/rag/datasource/vdb/vector_type.py | 11 + .../vdb/weaviate/weaviate_vector.py | 29 ++- 12 files changed, 344 insertions(+), 234 deletions(-) create mode 100644 api/core/rag/datasource/vdb/vector_type.py diff --git a/api/commands.py b/api/commands.py index 186b97c3fa6a38..da3f7416d434f1 100644 --- a/api/commands.py +++ b/api/commands.py @@ -9,6 +9,7 @@ from constants.languages import languages from core.rag.datasource.vdb.vector_factory import Vector +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document from extensions.ext_database import db from libs.helper import email as email_validate @@ -266,15 +267,15 @@ def migrate_knowledge_vector_database(): skipped_count = skipped_count + 1 continue collection_name = '' - if vector_type == "weaviate": + if vector_type == VectorType.WEAVIATE: dataset_id = dataset.id collection_name = Dataset.gen_collection_name_by_id(dataset_id) index_struct_dict = { - "type": 'weaviate', + "type": VectorType.WEAVIATE, "vector_store": {"class_prefix": collection_name} } dataset.index_struct = json.dumps(index_struct_dict) - elif vector_type == "qdrant": + elif vector_type == VectorType.QDRANT: if dataset.collection_binding_id: dataset_collection_binding = db.session.query(DatasetCollectionBinding). \ filter(DatasetCollectionBinding.id == dataset.collection_binding_id). \ @@ -287,20 +288,20 @@ def migrate_knowledge_vector_database(): dataset_id = dataset.id collection_name = Dataset.gen_collection_name_by_id(dataset_id) index_struct_dict = { - "type": 'qdrant', + "type": VectorType.QDRANT, "vector_store": {"class_prefix": collection_name} } dataset.index_struct = json.dumps(index_struct_dict) - elif vector_type == "milvus": + elif vector_type == VectorType.MILVUS: dataset_id = dataset.id collection_name = Dataset.gen_collection_name_by_id(dataset_id) index_struct_dict = { - "type": 'milvus', + "type": VectorType.MILVUS, "vector_store": {"class_prefix": collection_name} } dataset.index_struct = json.dumps(index_struct_dict) - elif vector_type == "relyt": + elif vector_type == VectorType.RELYT: dataset_id = dataset.id collection_name = Dataset.gen_collection_name_by_id(dataset_id) index_struct_dict = { @@ -308,16 +309,16 @@ def migrate_knowledge_vector_database(): "vector_store": {"class_prefix": collection_name} } dataset.index_struct = json.dumps(index_struct_dict) - elif vector_type == "pgvector": + elif vector_type == VectorType.PGVECTOR: dataset_id = dataset.id collection_name = Dataset.gen_collection_name_by_id(dataset_id) index_struct_dict = { - "type": 'pgvector', + "type": VectorType.PGVECTOR, "vector_store": {"class_prefix": collection_name} } dataset.index_struct = json.dumps(index_struct_dict) else: - raise ValueError(f"Vector store {config.get('VECTOR_STORE')} is not supported.") + raise ValueError(f"Vector store {vector_type} is not supported.") vector = Vector(dataset) click.echo(f"Start to migrate dataset {dataset.id}.") diff --git a/api/controllers/console/datasets/datasets.py b/api/controllers/console/datasets/datasets.py index 72c4c090552acf..49e50caf70fbe8 100644 --- a/api/controllers/console/datasets/datasets.py +++ b/api/controllers/console/datasets/datasets.py @@ -15,6 +15,7 @@ from core.indexing_runner import IndexingRunner from core.model_runtime.entities.model_entities import ModelType from core.provider_manager import ProviderManager +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.extractor.entity.extract_setting import ExtractSetting from extensions.ext_database import db from fields.app_fields import related_app_list @@ -476,20 +477,22 @@ class DatasetRetrievalSettingApi(Resource): @account_initialization_required def get(self): vector_type = current_app.config['VECTOR_STORE'] - if vector_type in {"milvus", "relyt", "pgvector", "pgvecto_rs", 'tidb_vector'}: - return { - 'retrieval_method': [ - 'semantic_search' - ] - } - elif vector_type in {"qdrant", "weaviate"}: - return { - 'retrieval_method': [ - 'semantic_search', 'full_text_search', 'hybrid_search' - ] - } - else: - raise ValueError("Unsupported vector db type.") + + match vector_type: + case VectorType.MILVUS | VectorType.RELYT | VectorType.PGVECTOR | VectorType.TIDB_VECTOR: + return { + 'retrieval_method': [ + 'semantic_search' + ] + } + case VectorType.QDRANT | VectorType.WEAVIATE: + return { + 'retrieval_method': [ + 'semantic_search', 'full_text_search', 'hybrid_search' + ] + } + case _: + raise ValueError(f"Unsupported vector db type {vector_type}.") class DatasetRetrievalSettingMockApi(Resource): @@ -497,20 +500,22 @@ class DatasetRetrievalSettingMockApi(Resource): @login_required @account_initialization_required def get(self, vector_type): - if vector_type in {'milvus', 'relyt', 'pgvector', 'tidb_vector'}: - return { - 'retrieval_method': [ - 'semantic_search' - ] - } - elif vector_type in {'qdrant', 'weaviate'}: - return { - 'retrieval_method': [ - 'semantic_search', 'full_text_search', 'hybrid_search' - ] - } - else: - raise ValueError("Unsupported vector db type.") + match vector_type: + case VectorType.MILVUS | VectorType.RELYT | VectorType.PGVECTOR | VectorType.TIDB_VECTOR: + return { + 'retrieval_method': [ + 'semantic_search' + ] + } + case VectorType.QDRANT | VectorType.WEAVIATE: + return { + 'retrieval_method': [ + 'semantic_search', 'full_text_search', 'hybrid_search' + ] + } + case _: + raise ValueError(f"Unsupported vector db type {vector_type}.") + class DatasetErrorDocs(Resource): @setup_required diff --git a/api/core/rag/datasource/vdb/milvus/milvus_vector.py b/api/core/rag/datasource/vdb/milvus/milvus_vector.py index 0586e279d3b74b..d77cf26d2599c8 100644 --- a/api/core/rag/datasource/vdb/milvus/milvus_vector.py +++ b/api/core/rag/datasource/vdb/milvus/milvus_vector.py @@ -1,14 +1,20 @@ +import json import logging from typing import Any, Optional from uuid import uuid4 +from flask import current_app from pydantic import BaseModel, root_validator from pymilvus import MilvusClient, MilvusException, connections +from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.field import Field from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document from extensions.ext_redis import redis_client +from models.dataset import Dataset logger = logging.getLogger(__name__) @@ -55,7 +61,7 @@ def __init__(self, collection_name: str, config: MilvusConfig): self._fields = [] def get_type(self) -> str: - return 'milvus' + return VectorType.MILVUS def create(self, texts: list[Document], embeddings: list[list[float]], **kwargs): index_params = { @@ -254,10 +260,36 @@ def create_collection( schema=schema, index_param=index_params, consistency_level=self._consistency_level) redis_client.set(collection_exist_cache_key, 1, ex=3600) + def _init_client(self, config) -> MilvusClient: if config.secure: uri = "https://" + str(config.host) + ":" + str(config.port) else: uri = "http://" + str(config.host) + ":" + str(config.port) - client = MilvusClient(uri=uri, user=config.user, password=config.password,db_name=config.database) + client = MilvusClient(uri=uri, user=config.user, password=config.password, db_name=config.database) return client + + +class MilvusVectorFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> MilvusVector: + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict['vector_store']['class_prefix'] + collection_name = class_prefix + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id) + dataset.index_struct = json.dumps( + self.gen_index_struct_dict(VectorType.WEAVIATE, collection_name)) + + config = current_app.config + return MilvusVector( + collection_name=collection_name, + config=MilvusConfig( + host=config.get('MILVUS_HOST'), + port=config.get('MILVUS_PORT'), + user=config.get('MILVUS_USER'), + password=config.get('MILVUS_PASSWORD'), + secure=config.get('MILVUS_SECURE'), + database=config.get('MILVUS_DATABASE'), + ) + ) diff --git a/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py b/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py index 3842aee6c7a519..80a2c3f82bb47f 100644 --- a/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py +++ b/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py @@ -1,7 +1,9 @@ +import json import logging from typing import Any from uuid import UUID, uuid4 +from flask import current_app from numpy import ndarray from pgvecto_rs.sqlalchemy import Vector from pydantic import BaseModel, root_validator @@ -10,10 +12,14 @@ from sqlalchemy.dialects import postgresql from sqlalchemy.orm import Mapped, Session, mapped_column +from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.pgvecto_rs.collection import CollectionORM from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document from extensions.ext_redis import redis_client +from models.dataset import Dataset logger = logging.getLogger(__name__) @@ -67,7 +73,7 @@ class _Table(CollectionORM): self._distance_op = "<=>" def get_type(self) -> str: - return 'pgvecto-rs' + return VectorType.PGVECTO_RS def create(self, texts: list[Document], embeddings: list[list[float]], **kwargs): self.create_collection(len(embeddings[0])) @@ -222,3 +228,28 @@ def search_by_full_text(self, query: str, **kwargs: Any) -> list[Document]: # docs.append(doc) # return docs return [] + + +class PGVectoRSFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> PGVectoRS: + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict['vector_store']['class_prefix'] + collection_name = class_prefix.lower() + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id).lower() + dataset.index_struct = json.dumps( + self.gen_index_struct_dict(VectorType.WEAVIATE, collection_name)) + dim = len(embeddings.embed_query("pgvecto_rs")) + config = current_app.config + return PGVectoRS( + collection_name=collection_name, + config=PgvectoRSConfig( + host=config.get('PGVECTO_RS_HOST'), + port=config.get('PGVECTO_RS_PORT'), + user=config.get('PGVECTO_RS_USER'), + password=config.get('PGVECTO_RS_PASSWORD'), + database=config.get('PGVECTO_RS_DATABASE'), + ), + dim=dim + ) \ No newline at end of file diff --git a/api/core/rag/datasource/vdb/pgvector/pgvector.py b/api/core/rag/datasource/vdb/pgvector/pgvector.py index 22cf790bfa44f4..c9a1508ab28f9a 100644 --- a/api/core/rag/datasource/vdb/pgvector/pgvector.py +++ b/api/core/rag/datasource/vdb/pgvector/pgvector.py @@ -5,11 +5,16 @@ import psycopg2.extras import psycopg2.pool +from flask import current_app from pydantic import BaseModel, root_validator +from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document from extensions.ext_redis import redis_client +from models.dataset import Dataset class PGVectorConfig(BaseModel): @@ -51,7 +56,7 @@ def __init__(self, collection_name: str, config: PGVectorConfig): self.table_name = f"embedding_{collection_name}" def get_type(self) -> str: - return "pgvector" + return VectorType.PGVECTOR def _create_connection_pool(self, config: PGVectorConfig): return psycopg2.pool.SimpleConnectionPool( @@ -167,3 +172,27 @@ def _create_collection(self, dimension: int): cur.execute(SQL_CREATE_TABLE.format(table_name=self.table_name, dimension=dimension)) # TODO: create index https://github.com/pgvector/pgvector?tab=readme-ov-file#indexing redis_client.set(collection_exist_cache_key, 1, ex=3600) + + +class PGVectorFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> PGVector: + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict["vector_store"]["class_prefix"] + collection_name = class_prefix + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id) + dataset.index_struct = json.dumps( + self.gen_index_struct_dict(VectorType.PGVECTOR, collection_name)) + + config = current_app.config + return PGVector( + collection_name=collection_name, + config=PGVectorConfig( + host=config.get("PGVECTOR_HOST"), + port=config.get("PGVECTOR_PORT"), + user=config.get("PGVECTOR_USER"), + password=config.get("PGVECTOR_PASSWORD"), + database=config.get("PGVECTOR_DATABASE"), + ), + ) \ No newline at end of file diff --git a/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py b/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py index 7a92314542ffbb..6a77c135fff70a 100644 --- a/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py +++ b/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py @@ -1,3 +1,4 @@ +import json import os import uuid from collections.abc import Generator, Iterable, Sequence @@ -5,6 +6,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union, cast import qdrant_client +from flask import current_app from pydantic import BaseModel from qdrant_client.http import models as rest from qdrant_client.http.models import ( @@ -17,10 +19,15 @@ ) from qdrant_client.local.qdrant_local import QdrantLocal +from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.field import Field from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document +from extensions.ext_database import db from extensions.ext_redis import redis_client +from models.dataset import Dataset, DatasetCollectionBinding if TYPE_CHECKING: from qdrant_client import grpc # noqa @@ -69,7 +76,7 @@ def __init__(self, collection_name: str, group_id: str, config: QdrantConfig, di self._group_id = group_id def get_type(self) -> str: - return 'qdrant' + return VectorType.QDRANT def to_index_struct(self) -> dict: return { @@ -408,3 +415,40 @@ def _document_from_scored_point( page_content=scored_point.payload.get(content_payload_key), metadata=scored_point.payload.get(metadata_payload_key) or {}, ) + + +class QdrantVectorFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> QdrantVector: + if dataset.collection_binding_id: + dataset_collection_binding = db.session.query(DatasetCollectionBinding). \ + filter(DatasetCollectionBinding.id == dataset.collection_binding_id). \ + one_or_none() + if dataset_collection_binding: + collection_name = dataset_collection_binding.collection_name + else: + raise ValueError('Dataset Collection Bindings is not exist!') + else: + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict['vector_store']['class_prefix'] + collection_name = class_prefix + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id) + + if not dataset.index_struct_dict: + dataset.index_struct = json.dumps( + self.gen_index_struct_dict(VectorType.QDRANT, collection_name)) + + config = current_app.config + return QdrantVector( + collection_name=collection_name, + group_id=dataset.id, + config=QdrantConfig( + endpoint=config.get('QDRANT_URL'), + api_key=config.get('QDRANT_API_KEY'), + root_path=config.root_path, + timeout=config.get('QDRANT_CLIENT_TIMEOUT'), + grpc_port=config.get('QDRANT_GRPC_PORT'), + prefer_grpc=config.get('QDRANT_GRPC_ENABLED') + ) + ) diff --git a/api/core/rag/datasource/vdb/relyt/relyt_vector.py b/api/core/rag/datasource/vdb/relyt/relyt_vector.py index ee88d9fa29b946..5ccb24f57f547b 100644 --- a/api/core/rag/datasource/vdb/relyt/relyt_vector.py +++ b/api/core/rag/datasource/vdb/relyt/relyt_vector.py @@ -1,12 +1,19 @@ +import json import uuid from typing import Any, Optional +from flask import current_app from pydantic import BaseModel, root_validator from sqlalchemy import Column, Sequence, String, Table, create_engine, insert from sqlalchemy import text as sql_text from sqlalchemy.dialects.postgresql import JSON, TEXT from sqlalchemy.orm import Session +from core.rag.datasource.entity.embedding import Embeddings +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType +from models.dataset import Dataset + try: from sqlalchemy.orm import declarative_base except ImportError: @@ -53,7 +60,7 @@ def __init__(self, collection_name: str, config: RelytConfig, group_id: str): self._group_id = group_id def get_type(self) -> str: - return 'relyt' + return VectorType.RELYT def create(self, texts: list[Document], embeddings: list[list[float]], **kwargs): index_params = {} @@ -240,10 +247,10 @@ def search_by_vector(self, query_vector: list[float], **kwargs: Any) -> list[Doc return docs def similarity_search_with_score_by_vector( - self, - embedding: list[float], - k: int = 4, - filter: Optional[dict] = None, + self, + embedding: list[float], + k: int = 4, + filter: Optional[dict] = None, ) -> list[tuple[Document, float]]: # Add the filter if provided try: @@ -298,3 +305,28 @@ def similarity_search_with_score_by_vector( def search_by_full_text(self, query: str, **kwargs: Any) -> list[Document]: # milvus/zilliz/relyt doesn't support bm25 search return [] + + +class RelytVectorFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> RelytVector: + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict['vector_store']['class_prefix'] + collection_name = class_prefix + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id) + dataset.index_struct = json.dumps( + self.gen_index_struct_dict(VectorType.RELYT, collection_name)) + + config = current_app.config + return RelytVector( + collection_name=collection_name, + config=RelytConfig( + host=config.get('RELYT_HOST'), + port=config.get('RELYT_PORT'), + user=config.get('RELYT_USER'), + password=config.get('RELYT_PASSWORD'), + database=config.get('RELYT_DATABASE'), + ), + group_id=dataset.id + ) diff --git a/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py b/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py index 107d17bb4785e0..6564c565d150db 100644 --- a/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py +++ b/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py @@ -3,14 +3,19 @@ from typing import Any import sqlalchemy +from flask import current_app from pydantic import BaseModel, root_validator from sqlalchemy import JSON, TEXT, Column, DateTime, String, Table, create_engine, insert from sqlalchemy import text as sql_text from sqlalchemy.orm import Session, declarative_base +from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document from extensions.ext_redis import redis_client +from models.dataset import Dataset logger = logging.getLogger(__name__) @@ -39,6 +44,9 @@ def validate_config(cls, values: dict) -> dict: class TiDBVector(BaseVector): + def get_type(self) -> str: + return VectorType.TIDB_VECTOR + def _table(self, dim: int) -> Table: from tidb_vector.sqlalchemy import VectorType return Table( @@ -214,3 +222,28 @@ def delete(self) -> None: with Session(self._engine) as session: session.execute(sql_text(f"""DROP TABLE IF EXISTS {self._collection_name};""")) session.commit() + + +class TiDBVectorFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> TiDBVector: + + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict['vector_store']['class_prefix'] + collection_name = class_prefix.lower() + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id).lower() + dataset.index_struct = json.dumps( + self.gen_index_struct_dict(VectorType.TIDB_VECTOR, collection_name)) + + config = current_app.config + return TiDBVector( + collection_name=collection_name, + config=TiDBVectorConfig( + host=config.get('TIDB_VECTOR_HOST'), + port=config.get('TIDB_VECTOR_PORT'), + user=config.get('TIDB_VECTOR_USER'), + password=config.get('TIDB_VECTOR_PASSWORD'), + database=config.get('TIDB_VECTOR_DATABASE'), + ), + ) \ No newline at end of file diff --git a/api/core/rag/datasource/vdb/vector_base.py b/api/core/rag/datasource/vdb/vector_base.py index c5212aa8f239da..9b414e4e123919 100644 --- a/api/core/rag/datasource/vdb/vector_base.py +++ b/api/core/rag/datasource/vdb/vector_base.py @@ -11,6 +11,10 @@ class BaseVector(ABC): def __init__(self, collection_name: str): self._collection_name = collection_name + @abstractmethod + def get_type(self) -> str: + raise NotImplementedError + @abstractmethod def create(self, texts: list[Document], embeddings: list[list[float]], **kwargs): raise NotImplementedError diff --git a/api/core/rag/datasource/vdb/vector_factory.py b/api/core/rag/datasource/vdb/vector_factory.py index b500b37d6064f4..852dc51a3a26e6 100644 --- a/api/core/rag/datasource/vdb/vector_factory.py +++ b/api/core/rag/datasource/vdb/vector_factory.py @@ -1,4 +1,4 @@ -import json +from abc import ABC, abstractmethod from typing import Any from flask import current_app @@ -8,9 +8,23 @@ from core.model_runtime.entities.model_entities import ModelType from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document -from extensions.ext_database import db -from models.dataset import Dataset, DatasetCollectionBinding +from models.dataset import Dataset + + +class AbstractVectorFactory(ABC): + @abstractmethod + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> BaseVector: + raise NotImplementedError + + @staticmethod + def gen_index_struct_dict(vector_type: VectorType, collection_name: str) -> dict: + index_struct_dict = { + "type": vector_type, + "vector_store": {"class_prefix": collection_name} + } + return index_struct_dict class Vector: @@ -32,188 +46,35 @@ def _init_vector(self) -> BaseVector: if not vector_type: raise ValueError("Vector store must be specified.") - if vector_type == "weaviate": - from core.rag.datasource.vdb.weaviate.weaviate_vector import WeaviateConfig, WeaviateVector - if self._dataset.index_struct_dict: - class_prefix: str = self._dataset.index_struct_dict['vector_store']['class_prefix'] - collection_name = class_prefix - else: - dataset_id = self._dataset.id - collection_name = Dataset.gen_collection_name_by_id(dataset_id) - index_struct_dict = { - "type": 'weaviate', - "vector_store": {"class_prefix": collection_name} - } - self._dataset.index_struct = json.dumps(index_struct_dict) - return WeaviateVector( - collection_name=collection_name, - config=WeaviateConfig( - endpoint=config.get('WEAVIATE_ENDPOINT'), - api_key=config.get('WEAVIATE_API_KEY'), - batch_size=int(config.get('WEAVIATE_BATCH_SIZE')) - ), - attributes=self._attributes - ) - elif vector_type == "qdrant": - from core.rag.datasource.vdb.qdrant.qdrant_vector import QdrantConfig, QdrantVector - if self._dataset.collection_binding_id: - dataset_collection_binding = db.session.query(DatasetCollectionBinding). \ - filter(DatasetCollectionBinding.id == self._dataset.collection_binding_id). \ - one_or_none() - if dataset_collection_binding: - collection_name = dataset_collection_binding.collection_name - else: - raise ValueError('Dataset Collection Bindings is not exist!') - else: - if self._dataset.index_struct_dict: - class_prefix: str = self._dataset.index_struct_dict['vector_store']['class_prefix'] - collection_name = class_prefix - else: - dataset_id = self._dataset.id - collection_name = Dataset.gen_collection_name_by_id(dataset_id) - - if not self._dataset.index_struct_dict: - index_struct_dict = { - "type": 'qdrant', - "vector_store": {"class_prefix": collection_name} - } - self._dataset.index_struct = json.dumps(index_struct_dict) - - return QdrantVector( - collection_name=collection_name, - group_id=self._dataset.id, - config=QdrantConfig( - endpoint=config.get('QDRANT_URL'), - api_key=config.get('QDRANT_API_KEY'), - root_path=current_app.root_path, - timeout=config.get('QDRANT_CLIENT_TIMEOUT'), - grpc_port=config.get('QDRANT_GRPC_PORT'), - prefer_grpc=config.get('QDRANT_GRPC_ENABLED') - ) - ) - elif vector_type == "milvus": - from core.rag.datasource.vdb.milvus.milvus_vector import MilvusConfig, MilvusVector - if self._dataset.index_struct_dict: - class_prefix: str = self._dataset.index_struct_dict['vector_store']['class_prefix'] - collection_name = class_prefix - else: - dataset_id = self._dataset.id - collection_name = Dataset.gen_collection_name_by_id(dataset_id) - index_struct_dict = { - "type": 'milvus', - "vector_store": {"class_prefix": collection_name} - } - self._dataset.index_struct = json.dumps(index_struct_dict) - return MilvusVector( - collection_name=collection_name, - config=MilvusConfig( - host=config.get('MILVUS_HOST'), - port=config.get('MILVUS_PORT'), - user=config.get('MILVUS_USER'), - password=config.get('MILVUS_PASSWORD'), - secure=config.get('MILVUS_SECURE'), - database=config.get('MILVUS_DATABASE'), - ) - ) - elif vector_type == "relyt": - from core.rag.datasource.vdb.relyt.relyt_vector import RelytConfig, RelytVector - if self._dataset.index_struct_dict: - class_prefix: str = self._dataset.index_struct_dict['vector_store']['class_prefix'] - collection_name = class_prefix - else: - dataset_id = self._dataset.id - collection_name = Dataset.gen_collection_name_by_id(dataset_id) - index_struct_dict = { - "type": 'relyt', - "vector_store": {"class_prefix": collection_name} - } - self._dataset.index_struct = json.dumps(index_struct_dict) - return RelytVector( - collection_name=collection_name, - config=RelytConfig( - host=config.get('RELYT_HOST'), - port=config.get('RELYT_PORT'), - user=config.get('RELYT_USER'), - password=config.get('RELYT_PASSWORD'), - database=config.get('RELYT_DATABASE'), - ), - group_id=self._dataset.id - ) - elif vector_type == "pgvecto_rs": - from core.rag.datasource.vdb.pgvecto_rs.pgvecto_rs import PGVectoRS, PgvectoRSConfig - if self._dataset.index_struct_dict: - class_prefix: str = self._dataset.index_struct_dict['vector_store']['class_prefix'] - collection_name = class_prefix.lower() - else: - dataset_id = self._dataset.id - collection_name = Dataset.gen_collection_name_by_id(dataset_id).lower() - index_struct_dict = { - "type": 'pgvecto_rs', - "vector_store": {"class_prefix": collection_name} - } - self._dataset.index_struct = json.dumps(index_struct_dict) - dim = len(self._embeddings.embed_query("pgvecto_rs")) - return PGVectoRS( - collection_name=collection_name, - config=PgvectoRSConfig( - host=config.get('PGVECTO_RS_HOST'), - port=config.get('PGVECTO_RS_PORT'), - user=config.get('PGVECTO_RS_USER'), - password=config.get('PGVECTO_RS_PASSWORD'), - database=config.get('PGVECTO_RS_DATABASE'), - ), - dim=dim - ) - elif vector_type == "pgvector": - from core.rag.datasource.vdb.pgvector.pgvector import PGVector, PGVectorConfig - - if self._dataset.index_struct_dict: - class_prefix: str = self._dataset.index_struct_dict["vector_store"]["class_prefix"] - collection_name = class_prefix - else: - dataset_id = self._dataset.id - collection_name = Dataset.gen_collection_name_by_id(dataset_id) - index_struct_dict = { - "type": "pgvector", - "vector_store": {"class_prefix": collection_name}} - self._dataset.index_struct = json.dumps(index_struct_dict) - return PGVector( - collection_name=collection_name, - config=PGVectorConfig( - host=config.get("PGVECTOR_HOST"), - port=config.get("PGVECTOR_PORT"), - user=config.get("PGVECTOR_USER"), - password=config.get("PGVECTOR_PASSWORD"), - database=config.get("PGVECTOR_DATABASE"), - ), - ) - elif vector_type == "tidb_vector": - from core.rag.datasource.vdb.tidb_vector.tidb_vector import TiDBVector, TiDBVectorConfig - - if self._dataset.index_struct_dict: - class_prefix: str = self._dataset.index_struct_dict['vector_store']['class_prefix'] - collection_name = class_prefix.lower() - else: - dataset_id = self._dataset.id - collection_name = Dataset.gen_collection_name_by_id(dataset_id).lower() - index_struct_dict = { - "type": 'tidb_vector', - "vector_store": {"class_prefix": collection_name} - } - self._dataset.index_struct = json.dumps(index_struct_dict) - - return TiDBVector( - collection_name=collection_name, - config=TiDBVectorConfig( - host=config.get('TIDB_VECTOR_HOST'), - port=config.get('TIDB_VECTOR_PORT'), - user=config.get('TIDB_VECTOR_USER'), - password=config.get('TIDB_VECTOR_PASSWORD'), - database=config.get('TIDB_VECTOR_DATABASE'), - ), - ) - else: - raise ValueError(f"Vector store {config.get('VECTOR_STORE')} is not supported.") + vector_factory_cls = self.get_vector_factory(vector_type) + return vector_factory_cls().init_vector(self._dataset, self._attributes, self._embeddings) + + @staticmethod + def get_vector_factory(vector_type: str) -> type[AbstractVectorFactory]: + match vector_type: + case VectorType.MILVUS: + from core.rag.datasource.vdb.milvus.milvus_vector import MilvusVectorFactory + return MilvusVectorFactory + case VectorType.PGVECTOR: + from core.rag.datasource.vdb.pgvector.pgvector import PGVectorFactory + return PGVectorFactory + case VectorType.PGVECTO_RS: + from core.rag.datasource.vdb.pgvecto_rs.pgvecto_rs import PGVectoRSFactory + return PGVectoRSFactory + case VectorType.QDRANT: + from core.rag.datasource.vdb.qdrant.qdrant_vector import QdrantVectorFactory + return QdrantVectorFactory + case VectorType.RELYT: + from core.rag.datasource.vdb.relyt.relyt_vector import RelytVectorFactory + return RelytVectorFactory + case VectorType.TIDB_VECTOR: + from core.rag.datasource.vdb.tidb_vector.tidb_vector import TiDBVectorFactory + return TiDBVectorFactory + case VectorType.WEAVIATE: + from core.rag.datasource.vdb.weaviate.weaviate_vector import WeaviateVectorFactory + return WeaviateVectorFactory + case _: + raise ValueError(f"Vector store {vector_type} is not supported.") def create(self, texts: list = None, **kwargs): if texts: diff --git a/api/core/rag/datasource/vdb/vector_type.py b/api/core/rag/datasource/vdb/vector_type.py new file mode 100644 index 00000000000000..f2e9b9b8d44618 --- /dev/null +++ b/api/core/rag/datasource/vdb/vector_type.py @@ -0,0 +1,11 @@ +from enum import Enum + + +class VectorType(str, Enum): + MILVUS = 'milvus' + PGVECTOR = 'pgvector' + PGVECTO_RS = 'pgvecto-rs' + QDRANT = 'qdrant' + RELYT = 'relyt' + TIDB_VECTOR = 'tidb_vector' + WEAVIATE = 'weaviate' diff --git a/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py b/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py index 93c7480f8ba7d1..73f9c580aad856 100644 --- a/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py +++ b/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py @@ -1,12 +1,17 @@ import datetime +import json from typing import Any, Optional import requests import weaviate +from flask import current_app from pydantic import BaseModel, root_validator +from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.field import Field from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType from core.rag.models.document import Document from extensions.ext_redis import redis_client from models.dataset import Dataset @@ -59,7 +64,7 @@ def _init_client(self, config: WeaviateConfig) -> weaviate.Client: return client def get_type(self) -> str: - return 'weaviate' + return VectorType.WEAVIATE def get_collection_name(self, dataset: Dataset) -> str: if dataset.index_struct_dict: @@ -255,3 +260,25 @@ def _json_serializable(self, value: Any) -> Any: if isinstance(value, datetime.datetime): return value.isoformat() return value + + +class WeaviateVectorFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> WeaviateVector: + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict['vector_store']['class_prefix'] + collection_name = class_prefix + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id) + dataset.index_struct = json.dumps( + self.gen_index_struct_dict(VectorType.WEAVIATE, collection_name)) + + return WeaviateVector( + collection_name=collection_name, + config=WeaviateConfig( + endpoint=current_app.config.get('WEAVIATE_ENDPOINT'), + api_key=current_app.config.get('WEAVIATE_API_KEY'), + batch_size=int(current_app.config.get('WEAVIATE_BATCH_SIZE')) + ), + attributes=attributes + ) From 308ce66af56d4c07b637c27743761551b782b2e2 Mon Sep 17 00:00:00 2001 From: Takuya Ono Date: Sun, 9 Jun 2024 15:39:52 +0900 Subject: [PATCH 07/70] =?UTF-8?q?=F0=9F=94=A7=20fix=20docker-compose=20ssr?= =?UTF-8?q?f=5Fproxy=20service=20WARNING:=20You=20should=20probably=20remo?= =?UTF-8?q?ve=20'::/0'=20from=20the=20ACL=20named=20'all'=20=20(#5005)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/volumes/ssrf_proxy/squid.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/volumes/ssrf_proxy/squid.conf b/docker/volumes/ssrf_proxy/squid.conf index 3028bf35c6a569..be13d0e8987d6d 100644 --- a/docker/volumes/ssrf_proxy/squid.conf +++ b/docker/volumes/ssrf_proxy/squid.conf @@ -46,5 +46,5 @@ logfile_rotate 0 ################################## Reverse Proxy To Sandbox ################################ http_port 8194 accel vhost cache_peer sandbox parent 8194 0 no-query originserver -acl all src all -http_access allow all \ No newline at end of file +acl src_all src all +http_access allow src_all \ No newline at end of file From 2573b138bf43c2a5902173036ac0b16026a807e4 Mon Sep 17 00:00:00 2001 From: Jaxon Ley Date: Sun, 9 Jun 2024 14:44:11 +0800 Subject: [PATCH 08/70] fix: update presence_penalty configuration for wenxin AI ernie-4.0-8k and ernie-3.5-8k models (#5039) --- .../model_runtime/model_providers/wenxin/llm/ernie-3.5-8k.yaml | 3 +++ .../model_runtime/model_providers/wenxin/llm/ernie-4.0-8k.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/api/core/model_runtime/model_providers/wenxin/llm/ernie-3.5-8k.yaml b/api/core/model_runtime/model_providers/wenxin/llm/ernie-3.5-8k.yaml index 555d0b0a80225e..145844a4fffe85 100644 --- a/api/core/model_runtime/model_providers/wenxin/llm/ernie-3.5-8k.yaml +++ b/api/core/model_runtime/model_providers/wenxin/llm/ernie-3.5-8k.yaml @@ -22,6 +22,9 @@ parameter_rules: max: 2048 - name: presence_penalty use_template: presence_penalty + default: 1.0 + min: 1.0 + max: 2.0 - name: frequency_penalty use_template: frequency_penalty - name: response_format diff --git a/api/core/model_runtime/model_providers/wenxin/llm/ernie-4.0-8k.yaml b/api/core/model_runtime/model_providers/wenxin/llm/ernie-4.0-8k.yaml index 483b6df739feb6..9ebb5c8c4fe36b 100644 --- a/api/core/model_runtime/model_providers/wenxin/llm/ernie-4.0-8k.yaml +++ b/api/core/model_runtime/model_providers/wenxin/llm/ernie-4.0-8k.yaml @@ -22,6 +22,9 @@ parameter_rules: max: 2048 - name: presence_penalty use_template: presence_penalty + default: 1.0 + min: 1.0 + max: 2.0 - name: frequency_penalty use_template: frequency_penalty - name: response_format From 5986841e276b9af85d86c24e93963f582e7c3397 Mon Sep 17 00:00:00 2001 From: takatost Date: Sun, 9 Jun 2024 20:28:24 +0800 Subject: [PATCH 09/70] fix: issue where an error occurs when invoking TTS without selecting a voice (#5046) --- api/controllers/web/audio.py | 2 +- api/core/model_manager.py | 2 +- api/services/audio_service.py | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/api/controllers/web/audio.py b/api/controllers/web/audio.py index ca6d774e9d970a..3fed7895e26249 100644 --- a/api/controllers/web/audio.py +++ b/api/controllers/web/audio.py @@ -74,7 +74,7 @@ def post(self, app_model: App, end_user): app_model=app_model, text=request.form['text'], end_user=end_user.external_user_id, - voice=request.form['voice'] if request.form.get('voice') else app_model.app_model_config.text_to_speech_dict.get('voice'), + voice=request.form['voice'] if request.form.get('voice') else None, streaming=False ) diff --git a/api/core/model_manager.py b/api/core/model_manager.py index 8da8442e602ffb..51dff09609472f 100644 --- a/api/core/model_manager.py +++ b/api/core/model_manager.py @@ -328,7 +328,7 @@ def _round_robin_invoke(self, function: callable, *args, **kwargs): except Exception as e: raise e - def get_tts_voices(self, language: str) -> list: + def get_tts_voices(self, language: Optional[str] = None) -> list: """ Invoke large language tts model voices diff --git a/api/services/audio_service.py b/api/services/audio_service.py index d013a51c3e6507..965df918d86744 100644 --- a/api/services/audio_service.py +++ b/api/services/audio_service.py @@ -93,6 +93,13 @@ def transcript_tts(cls, app_model: App, text: str, streaming: bool, raise ProviderNotSupportTextToSpeechServiceError() try: + if not voice: + voices = model_instance.get_tts_voices() + if voices: + voice = voices[0].get('value') + else: + raise ValueError("Sorry, no voice available.") + return model_instance.invoke_tts( content_text=text.strip(), user=end_user, From 9103112555fcda68aa94bbca37d704a55a30a622 Mon Sep 17 00:00:00 2001 From: Pascal M <11357019+perzeuss@users.noreply.github.com> Date: Tue, 11 Jun 2024 05:20:52 +0200 Subject: [PATCH 10/70] fix: wrong link to web app repo in chatflow mode (#5062) --- web/app/components/app/overview/customize/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/components/app/overview/customize/index.tsx b/web/app/components/app/overview/customize/index.tsx index 5baf6dd4d391b3..cc74b175b42d69 100644 --- a/web/app/components/app/overview/customize/index.tsx +++ b/web/app/components/app/overview/customize/index.tsx @@ -44,7 +44,7 @@ const CustomizeModal: FC = ({ }) => { const { t } = useTranslation() const { locale } = useContext(I18n) - const isChatApp = mode === 'chat' + const isChatApp = mode === 'chat' || mode === 'advanced-chat' return Date: Tue, 11 Jun 2024 05:21:38 +0200 Subject: [PATCH 11/70] feat: add dataset delete endpoint (#5048) --- .../service_api/dataset/dataset.py | 36 ++++++++++++++++-- .../datasets/template/template.en.mdx | 37 +++++++++++++++++++ .../datasets/template/template.zh.mdx | 37 +++++++++++++++++++ 3 files changed, 106 insertions(+), 4 deletions(-) diff --git a/api/controllers/service_api/dataset/dataset.py b/api/controllers/service_api/dataset/dataset.py index bf08291d7b9f87..dcbfa88d99487d 100644 --- a/api/controllers/service_api/dataset/dataset.py +++ b/api/controllers/service_api/dataset/dataset.py @@ -1,5 +1,6 @@ from flask import request from flask_restful import marshal, reqparse +from werkzeug.exceptions import NotFound import services.dataset_service from controllers.service_api import api @@ -19,10 +20,12 @@ def _validate_name(name): return name -class DatasetApi(DatasetApiResource): - """Resource for get datasets.""" +class DatasetListApi(DatasetApiResource): + """Resource for datasets.""" def get(self, tenant_id): + """Resource for getting datasets.""" + page = request.args.get('page', default=1, type=int) limit = request.args.get('limit', default=20, type=int) provider = request.args.get('provider', default="vendor") @@ -65,9 +68,9 @@ def get(self, tenant_id): } return response, 200 - """Resource for datasets.""" def post(self, tenant_id): + """Resource for creating datasets.""" parser = reqparse.RequestParser() parser.add_argument('name', nullable=False, required=True, help='type is required. Name must be between 1 to 40 characters.', @@ -89,6 +92,31 @@ def post(self, tenant_id): return marshal(dataset, dataset_detail_fields), 200 +class DatasetApi(DatasetApiResource): + """Resource for dataset.""" + + def delete(self, _, dataset_id): + """ + Deletes a dataset given its ID. + + Args: + dataset_id (UUID): The ID of the dataset to be deleted. + + Returns: + dict: A dictionary with a key 'result' and a value 'success' + if the dataset was successfully deleted. Omitted in HTTP response. + int: HTTP status code 204 indicating that the operation was successful. + + Raises: + NotFound: If the dataset with the given ID does not exist. + """ + + dataset_id_str = str(dataset_id) -api.add_resource(DatasetApi, '/datasets') + if DatasetService.delete_dataset(dataset_id_str, current_user): + return {'result': 'success'}, 204 + else: + raise NotFound("Dataset not found.") +api.add_resource(DatasetListApi, '/datasets') +api.add_resource(DatasetApi, '/datasets/') diff --git a/web/app/(commonLayout)/datasets/template/template.en.mdx b/web/app/(commonLayout)/datasets/template/template.en.mdx index 3775d30d246e1c..36395d391de1b3 100644 --- a/web/app/(commonLayout)/datasets/template/template.en.mdx +++ b/web/app/(commonLayout)/datasets/template/template.en.mdx @@ -345,6 +345,43 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from --- + + + + ### Params + + + Knowledge ID + + + + + + ```bash {{ title: 'cURL' }} + curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}' \ + --header 'Authorization: Bearer {api_key}' + ``` + + + ```text {{ title: 'Response' }} + 204 No Content + ``` + + + + +--- + + + + ### Path + + + 知识库 ID + + + + + + ```bash {{ title: 'cURL' }} + curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}' \ + --header 'Authorization: Bearer {api_key}' + ``` + + + ```text {{ title: 'Response' }} + 204 No Content + ``` + + + + +--- + Date: Tue, 11 Jun 2024 11:22:22 +0800 Subject: [PATCH 12/70] chore: update maas model provider description (#5056) --- .../volcengine_maas/llm/models.py | 20 +++++++++++++++++++ .../volcengine_maas/volcengine_maas.yaml | 18 +++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py b/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py index 2e8ff314fc407d..a2bd81b94553da 100644 --- a/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py +++ b/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py @@ -69,4 +69,24 @@ 'mode': 'chat', } }, + 'Llama3-8B': { + 'req_params': { + 'max_prompt_tokens': 8192, + 'max_new_tokens': 8192, + }, + 'model_properties': { + 'context_size': 8192, + 'mode': 'chat', + } + }, + 'Llama3-70B': { + 'req_params': { + 'max_prompt_tokens': 8192, + 'max_new_tokens': 8192, + }, + 'model_properties': { + 'context_size': 8192, + 'mode': 'chat', + } + } } diff --git a/api/core/model_runtime/model_providers/volcengine_maas/volcengine_maas.yaml b/api/core/model_runtime/model_providers/volcengine_maas/volcengine_maas.yaml index d7bcbd43f80670..4d468969b74edd 100644 --- a/api/core/model_runtime/model_providers/volcengine_maas/volcengine_maas.yaml +++ b/api/core/model_runtime/model_providers/volcengine_maas/volcengine_maas.yaml @@ -2,7 +2,8 @@ provider: volcengine_maas label: en_US: Volcengine description: - en_US: Volcengine MaaS models. + en_US: Volcengine Ark models. + zh_Hans: 火山方舟提供的模型,例如 Doubao-pro-4k、Doubao-pro-32k 和 Doubao-pro-128k。 icon_small: en_US: icon_s_en.svg icon_large: @@ -12,6 +13,7 @@ background: "#F9FAFB" help: title: en_US: Get your Access Key and Secret Access Key from Volcengine Console + zh_Hans: 从火山引擎控制台获取您的 Access Key 和 Secret Access Key url: en_US: https://console.volcengine.com/iam/keymanage/ supported_model_types: @@ -50,7 +52,7 @@ model_credential_schema: required: true label: en_US: Volcengine Region - zh_Hans: 火山引擎地区 + zh_Hans: 火山引擎地域 type: text-input default: cn-beijing placeholder: @@ -124,6 +126,18 @@ model_credential_schema: show_on: - variable: __model_type value: llm + - label: + en_US: Llama3-8B + value: Llama3-8B + show_on: + - variable: __model_type + value: llm + - label: + en_US: Llama3-70B + value: Llama3-70B + show_on: + - variable: __model_type + value: llm - label: en_US: Doubao-embedding value: Doubao-embedding From f426e1b3bd6c90518d8924e84ff29ec06ab5c3c8 Mon Sep 17 00:00:00 2001 From: Takuya Ono Date: Tue, 11 Jun 2024 13:32:05 +0900 Subject: [PATCH 13/70] =?UTF-8?q?=F0=9F=94=A7=20Fix(docker/volumes/ssrf=5F?= =?UTF-8?q?proxy/squid.conf):=20=20The=20squid=20process=20on=20ssrf=5Fpro?= =?UTF-8?q?xy=20docker=20service=20crashes=20at=20startup=20(#5050)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/volumes/ssrf_proxy/squid.conf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docker/volumes/ssrf_proxy/squid.conf b/docker/volumes/ssrf_proxy/squid.conf index be13d0e8987d6d..06bedb8aaf928f 100644 --- a/docker/volumes/ssrf_proxy/squid.conf +++ b/docker/volumes/ssrf_proxy/squid.conf @@ -23,7 +23,7 @@ http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localhost -http_access allow localnet +include /etc/squid/conf.d/*.conf http_access deny all ################################## Proxy Server ################################ @@ -37,7 +37,6 @@ refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims refresh_pattern \/InRelease$ 0 0% 0 refresh-ims refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims refresh_pattern . 0 20% 4320 -logfile_rotate 0 # upstream proxy, set to your own upstream proxy IP to avoid SSRF attacks # cache_peer 172.1.1.1 parent 3128 0 no-query no-digest no-netdb-exchange default @@ -47,4 +46,4 @@ logfile_rotate 0 http_port 8194 accel vhost cache_peer sandbox parent 8194 0 no-query originserver acl src_all src all -http_access allow src_all \ No newline at end of file +http_access allow src_all From f62f71a81af0ff608f808f8c241ba9299d99c37a Mon Sep 17 00:00:00 2001 From: Matri Date: Tue, 11 Jun 2024 13:11:28 +0800 Subject: [PATCH 14/70] build: initial support for poetry build tool (#4513) Co-authored-by: Bowen Liang --- .github/workflows/api-tests.yml | 72 + api/.vscode/launch.json | 6 +- api/README.md | 17 +- api/poetry.lock | 7197 +++++++++++++++++++++++++++++++ api/poetry.toml | 4 + api/pyproject.toml | 110 + 6 files changed, 7403 insertions(+), 3 deletions(-) create mode 100644 api/poetry.lock create mode 100644 api/poetry.toml diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index 82cfdcea068a78..3aa70420b35d8d 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -79,3 +79,75 @@ jobs: - name: Test Vector Stores run: dev/pytest/pytest_vdb.sh + + test-in-poetry: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: + - "3.10" + - "3.11" + + steps: + - name: Install poetry + uses: abatilo/actions-poetry@v3 + with: + poetry-version: "1.8.1" + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'poetry' + cache-dependency-path: ./api/poetry.lock + + - name: Poetry check + run: poetry check -C api + + - name: Install dependencies + run: poetry install -C api + + - name: Run Unit tests + run: poetry run -C api bash dev/pytest/pytest_unit_tests.sh + + - name: Run ModelRuntime + run: poetry run -C api bash dev/pytest/pytest_model_runtime.sh + + - name: Run Tool + run: poetry run -C api bash dev/pytest/pytest_tools.sh + + - name: Set up Sandbox + uses: hoverkraft-tech/compose-action@v2.0.0 + with: + compose-file: | + docker/docker-compose.middleware.yaml + services: | + sandbox + ssrf_proxy + + - name: Run Workflow + run: poetry run -C api bash dev/pytest/pytest_workflow.sh + + - name: Set up Vector Stores (Weaviate, Qdrant, PGVector, Milvus, PgVecto-RS) + uses: hoverkraft-tech/compose-action@v2.0.0 + with: + compose-file: | + docker/docker-compose.middleware.yaml + docker/docker-compose.qdrant.yaml + docker/docker-compose.milvus.yaml + docker/docker-compose.pgvecto-rs.yaml + docker/docker-compose.pgvector.yaml + services: | + weaviate + qdrant + etcd + minio + milvus-standalone + pgvecto-rs + pgvector + + - name: Test Vector Stores + run: poetry run -C api bash dev/pytest/pytest_vdb.sh diff --git a/api/.vscode/launch.json b/api/.vscode/launch.json index 4390e7ef443177..2039d2ca94fcea 100644 --- a/api/.vscode/launch.json +++ b/api/.vscode/launch.json @@ -17,7 +17,8 @@ "FLASK_DEBUG": "1", "GEVENT_SUPPORT": "True" }, - "console": "integratedTerminal" + "console": "integratedTerminal", + "python": "${command:python.interpreterPath}" }, { "name": "Python: Flask", @@ -36,7 +37,8 @@ "--debug" ], "jinja": true, - "justMyCode": true + "justMyCode": true, + "python": "${command:python.interpreterPath}" } ] } \ No newline at end of file diff --git a/api/README.md b/api/README.md index 3d73c63dbb54c7..4ae9875228c8c9 100644 --- a/api/README.md +++ b/api/README.md @@ -17,15 +17,30 @@ ```bash sed -i "/^SECRET_KEY=/c\SECRET_KEY=$(openssl rand -base64 42)" .env ``` -4. If you use Anaconda, create a new environment and activate it +4. Create environment. + - Anaconda + If you use Anaconda, create a new environment and activate it ```bash conda create --name dify python=3.10 conda activate dify ``` + - Poetry + If you use Poetry, you don't need to manually create the environment. You can execute `poetry shell` to activate the environment. 5. Install dependencies + - Anaconda ```bash pip install -r requirements.txt ``` + - Poetry + ```bash + poetry install + ``` + In case of contributors missing to update dependencies for `pyproject.toml`, you can perform the following shell instead. + ```base + poetry shell # activate current environment + poetry add $(cat requirements.txt) # install dependencies of production and update pyproject.toml + poetry add $(cat requirements-dev.txt) --group dev # install dependencies of development and update pyproject.toml + ``` 6. Run migrate Before the first launch, migrate the database to the latest version. diff --git a/api/poetry.lock b/api/poetry.lock new file mode 100644 index 00000000000000..11abee8c755af7 --- /dev/null +++ b/api/poetry.lock @@ -0,0 +1,7197 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "aiohttp" +version = "3.9.5" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, + {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, + {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, + {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, + {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, + {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, + {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, + {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, + {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, + {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "brotlicffi"] + +[[package]] +name = "aiohttp-retry" +version = "2.8.3" +description = "Simple retry client for aiohttp" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiohttp_retry-2.8.3-py3-none-any.whl", hash = "sha256:3aeeead8f6afe48272db93ced9440cf4eda8b6fd7ee2abb25357b7eb28525b45"}, + {file = "aiohttp_retry-2.8.3.tar.gz", hash = "sha256:9a8e637e31682ad36e1ff9f8bcba912fcfc7d7041722bc901a4b948da4d71ea9"}, +] + +[package.dependencies] +aiohttp = "*" + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "alembic" +version = "1.13.1" +description = "A database migration tool for SQLAlchemy." +optional = false +python-versions = ">=3.8" +files = [ + {file = "alembic-1.13.1-py3-none-any.whl", hash = "sha256:2edcc97bed0bd3272611ce3a98d98279e9c209e7186e43e75bbb1b2bdfdbcc43"}, + {file = "alembic-1.13.1.tar.gz", hash = "sha256:4932c8558bf68f2ee92b9bbcb8218671c627064d5b08939437af6d77dc05e595"}, +] + +[package.dependencies] +Mako = "*" +SQLAlchemy = ">=1.3.0" +typing-extensions = ">=4" + +[package.extras] +tz = ["backports.zoneinfo"] + +[[package]] +name = "aliyun-python-sdk-core" +version = "2.15.1" +description = "The core module of Aliyun Python SDK." +optional = false +python-versions = "*" +files = [ + {file = "aliyun-python-sdk-core-2.15.1.tar.gz", hash = "sha256:518550d07f537cd3afac3b6c93b5c997ce3440e4d0c054e3acbdaa8261e90adf"}, +] + +[package.dependencies] +cryptography = ">=2.6.0" +jmespath = ">=0.9.3,<1.0.0" + +[[package]] +name = "aliyun-python-sdk-kms" +version = "2.16.3" +description = "The kms module of Aliyun Python sdk." +optional = false +python-versions = "*" +files = [ + {file = "aliyun-python-sdk-kms-2.16.3.tar.gz", hash = "sha256:c31b7d24e153271a3043e801e7b6b6b3f0db47e95a83c8d10cdab8c11662fc39"}, + {file = "aliyun_python_sdk_kms-2.16.3-py2.py3-none-any.whl", hash = "sha256:8bb8c293be94e0cc9114a5286a503d2ec215eaf8a1fb51de5d6c8bcac209d4a1"}, +] + +[package.dependencies] +aliyun-python-sdk-core = ">=2.11.5" + +[[package]] +name = "amqp" +version = "5.2.0" +description = "Low-level AMQP client for Python (fork of amqplib)." +optional = false +python-versions = ">=3.6" +files = [ + {file = "amqp-5.2.0-py3-none-any.whl", hash = "sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637"}, + {file = "amqp-5.2.0.tar.gz", hash = "sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd"}, +] + +[package.dependencies] +vine = ">=5.0.0,<6.0.0" + +[[package]] +name = "aniso8601" +version = "9.0.1" +description = "A library for parsing ISO 8601 strings." +optional = false +python-versions = "*" +files = [ + {file = "aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f"}, + {file = "aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"}, +] + +[package.extras] +dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"] + +[[package]] +name = "anthropic" +version = "0.23.1" +description = "The official Python library for the anthropic API" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anthropic-0.23.1-py3-none-any.whl", hash = "sha256:6dc5779dae83a5834864f4a4af0166c972b70f4cb8fd2765e1558282cc6d6242"}, + {file = "anthropic-0.23.1.tar.gz", hash = "sha256:9325103702cbc96bb09d1b58c36bde75c726f6a01029fb4d85f41ebba07e9066"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tokenizers = ">=0.13.0" +typing-extensions = ">=4.7,<5" + +[package.extras] +bedrock = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"] +vertex = ["google-auth (>=2,<3)"] + +[[package]] +name = "anyio" +version = "4.3.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arxiv" +version = "2.1.0" +description = "Python wrapper for the arXiv API: https://arxiv.org/help/api/" +optional = false +python-versions = ">=3.7" +files = [ + {file = "arxiv-2.1.0-py3-none-any.whl", hash = "sha256:d634a0a59c9f05baf524eaa65563bb0a4532d2b4727a1162a1a9ba7e1e6e48cc"}, + {file = "arxiv-2.1.0.tar.gz", hash = "sha256:eb4b1d5ab9dfd66027c344bb324c20be21d56fe15f6ce216ed5b209df747dea8"}, +] + +[package.dependencies] +feedparser = "6.0.10" +requests = "2.31.0" + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "authlib" +version = "1.2.0" +description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +optional = false +python-versions = "*" +files = [ + {file = "Authlib-1.2.0-py2.py3-none-any.whl", hash = "sha256:4ddf4fd6cfa75c9a460b361d4bd9dac71ffda0be879dbe4292a02e92349ad55a"}, + {file = "Authlib-1.2.0.tar.gz", hash = "sha256:4fa3e80883a5915ef9f5bc28630564bc4ed5b5af39812a3ff130ec76bd631e9d"}, +] + +[package.dependencies] +cryptography = ">=3.2" + +[[package]] +name = "azure-core" +version = "1.30.1" +description = "Microsoft Azure Core Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-core-1.30.1.tar.gz", hash = "sha256:26273a254131f84269e8ea4464f3560c731f29c0c1f69ac99010845f239c1a8f"}, + {file = "azure_core-1.30.1-py3-none-any.whl", hash = "sha256:7c5ee397e48f281ec4dd773d67a0a47a0962ed6fa833036057f9ea067f688e74"}, +] + +[package.dependencies] +requests = ">=2.21.0" +six = ">=1.11.0" +typing-extensions = ">=4.6.0" + +[package.extras] +aio = ["aiohttp (>=3.0)"] + +[[package]] +name = "azure-identity" +version = "1.15.0" +description = "Microsoft Azure Identity Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-identity-1.15.0.tar.gz", hash = "sha256:4c28fc246b7f9265610eb5261d65931183d019a23d4b0e99357facb2e6c227c8"}, + {file = "azure_identity-1.15.0-py3-none-any.whl", hash = "sha256:a14b1f01c7036f11f148f22cd8c16e05035293d714458d6b44ddf534d93eb912"}, +] + +[package.dependencies] +azure-core = ">=1.23.0,<2.0.0" +cryptography = ">=2.5" +msal = ">=1.24.0,<2.0.0" +msal-extensions = ">=0.3.0,<2.0.0" + +[[package]] +name = "azure-storage-blob" +version = "12.9.0" +description = "Microsoft Azure Blob Storage Client Library for Python" +optional = false +python-versions = "*" +files = [ + {file = "azure-storage-blob-12.9.0.zip", hash = "sha256:cff66a115c73c90e496c8c8b3026898a3ce64100840276e9245434e28a864225"}, + {file = "azure_storage_blob-12.9.0-py2.py3-none-any.whl", hash = "sha256:859195b4850dcfe77ffafbe53500abb74b001e52e77fe6d9492fa73639a22127"}, +] + +[package.dependencies] +azure-core = ">=1.10.0,<2.0.0" +cryptography = ">=2.1.4" +msrest = ">=0.6.21" + +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "billiard" +version = "4.2.0" +description = "Python multiprocessing fork with improvements and bugfixes" +optional = false +python-versions = ">=3.7" +files = [ + {file = "billiard-4.2.0-py3-none-any.whl", hash = "sha256:07aa978b308f334ff8282bd4a746e681b3513db5c9a514cbdd810cbbdc19714d"}, + {file = "billiard-4.2.0.tar.gz", hash = "sha256:9a3c3184cb275aa17a732f93f65b20c525d3d9f253722d26a82194803ade5a2c"}, +] + +[[package]] +name = "blinker" +version = "1.8.2" +description = "Fast, simple object-to-object and broadcast signaling" +optional = false +python-versions = ">=3.8" +files = [ + {file = "blinker-1.8.2-py3-none-any.whl", hash = "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01"}, + {file = "blinker-1.8.2.tar.gz", hash = "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83"}, +] + +[[package]] +name = "boto3" +version = "1.28.17" +description = "The AWS SDK for Python" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "boto3-1.28.17-py3-none-any.whl", hash = "sha256:bca0526f819e0f19c0f1e6eba3e2d1d6b6a92a45129f98c0d716e5aab6d9444b"}, + {file = "boto3-1.28.17.tar.gz", hash = "sha256:90f7cfb5e1821af95b1fc084bc50e6c47fa3edc99f32de1a2591faa0c546bea7"}, +] + +[package.dependencies] +botocore = ">=1.31.17,<1.32.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.6.0,<0.7.0" + +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + +[[package]] +name = "botocore" +version = "1.31.85" +description = "Low-level, data-driven core of boto 3." +optional = false +python-versions = ">= 3.7" +files = [ + {file = "botocore-1.31.85-py3-none-any.whl", hash = "sha256:b8f35d65f2b45af50c36fc25cc1844d6bd61d38d2148b2ef133b8f10e198555d"}, + {file = "botocore-1.31.85.tar.gz", hash = "sha256:ce58e688222df73ec5691f934be1a2122a52c9d11d3037b586b3fff16ed6d25f"}, +] + +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""} + +[package.extras] +crt = ["awscrt (==0.19.12)"] + +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + +[[package]] +name = "bs4" +version = "0.0.1" +description = "Dummy package for Beautiful Soup" +optional = false +python-versions = "*" +files = [ + {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, +] + +[package.dependencies] +beautifulsoup4 = "*" + +[[package]] +name = "cachetools" +version = "5.3.3" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, + {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, +] + +[[package]] +name = "celery" +version = "5.3.6" +description = "Distributed Task Queue." +optional = false +python-versions = ">=3.8" +files = [ + {file = "celery-5.3.6-py3-none-any.whl", hash = "sha256:9da4ea0118d232ce97dff5ed4974587fb1c0ff5c10042eb15278487cdd27d1af"}, + {file = "celery-5.3.6.tar.gz", hash = "sha256:870cc71d737c0200c397290d730344cc991d13a057534353d124c9380267aab9"}, +] + +[package.dependencies] +billiard = ">=4.2.0,<5.0" +click = ">=8.1.2,<9.0" +click-didyoumean = ">=0.3.0" +click-plugins = ">=1.1.1" +click-repl = ">=0.2.0" +kombu = ">=5.3.4,<6.0" +python-dateutil = ">=2.8.2" +tzdata = ">=2022.7" +vine = ">=5.1.0,<6.0" + +[package.extras] +arangodb = ["pyArango (>=2.0.2)"] +auth = ["cryptography (==41.0.5)"] +azureblockblob = ["azure-storage-blob (>=12.15.0)"] +brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] +cassandra = ["cassandra-driver (>=3.25.0,<4)"] +consul = ["python-consul2 (==0.1.5)"] +cosmosdbsql = ["pydocumentdb (==2.3.5)"] +couchbase = ["couchbase (>=3.0.0)"] +couchdb = ["pycouchdb (==1.14.2)"] +django = ["Django (>=2.2.28)"] +dynamodb = ["boto3 (>=1.26.143)"] +elasticsearch = ["elastic-transport (<=8.10.0)", "elasticsearch (<=8.11.0)"] +eventlet = ["eventlet (>=0.32.0)"] +gevent = ["gevent (>=1.5.0)"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +memcache = ["pylibmc (==1.6.3)"] +mongodb = ["pymongo[srv] (>=4.0.2)"] +msgpack = ["msgpack (==1.0.7)"] +pymemcache = ["python-memcached (==1.59)"] +pyro = ["pyro4 (==4.82)"] +pytest = ["pytest-celery (==0.0.0)"] +redis = ["redis (>=4.5.2,!=4.5.5,<6.0.0)"] +s3 = ["boto3 (>=1.26.143)"] +slmq = ["softlayer-messaging (>=1.0.3)"] +solar = ["ephem (==4.1.5)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.0)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] +tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] +yaml = ["PyYAML (>=3.10)"] +zookeeper = ["kazoo (>=1.3.1)"] +zstd = ["zstandard (==0.22.0)"] + +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "chardet" +version = "5.1.0" +description = "Universal encoding detector for Python 3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, + {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click-didyoumean" +version = "0.3.1" +description = "Enables git-like *did-you-mean* feature in click" +optional = false +python-versions = ">=3.6.2" +files = [ + {file = "click_didyoumean-0.3.1-py3-none-any.whl", hash = "sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c"}, + {file = "click_didyoumean-0.3.1.tar.gz", hash = "sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463"}, +] + +[package.dependencies] +click = ">=7" + +[[package]] +name = "click-plugins" +version = "1.1.1" +description = "An extension module for click to enable registering CLI commands via setuptools entry-points." +optional = false +python-versions = "*" +files = [ + {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, + {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, +] + +[package.dependencies] +click = ">=4.0" + +[package.extras] +dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] + +[[package]] +name = "click-repl" +version = "0.3.0" +description = "REPL plugin for Click" +optional = false +python-versions = ">=3.6" +files = [ + {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, + {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, +] + +[package.dependencies] +click = ">=7.0" +prompt-toolkit = ">=3.0.36" + +[package.extras] +testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] + +[[package]] +name = "clickhouse-driver" +version = "0.2.7" +description = "Python driver with native interface for ClickHouse" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "clickhouse-driver-0.2.7.tar.gz", hash = "sha256:299cfbe6d561955d88eeab6e09f3de31e2f6daccc6fdd904a59e46357d2d28d9"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c44fefc2fd44f432d5b162bfe34ad76840137c34167d46a18c554a7c7c6e3566"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e018452a7bf8d8c0adf958afbc5b0d29e402fc09a1fb34e9186293eae57f3b4e"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff8b09f8b13df28d2f91ee3d0d2edd9589cbda76b74acf60669112219cea8c9d"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54aa91c9512fd5a73f038cae4f67ca2ff0b2f8a84de846179a31530936ef4e20"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8342a7ba31ccb393ee31dfd61173aa84c995b4ac0b44d404adc8463534233d5"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:199000f8adf38fade0b5a52c273a396168105539de741a18ba3e68d7fc06e0e6"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60a2a40602b207506e505cfb184a81cd4b752bde17153bc0b32c3931ddb792f"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5db3a26b18146b2b0b06d3f32ce588af5afaa38c719daf6f9606981514228a8b"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5579a31da1f3cf49630e43fbbb11cab891b78161abdcb33908b79820b7cd3a23"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cc39f0fb761aed96917b0f55679174a50f9591afc0e696e745cd698ef822661f"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9aa0f7c740e4e61886c6d388792c5d1a2084d4b5462e6dcfc24e30ca7e7f8e68"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2caee88b6eec7b33ddbccd24501ad99ff8ff2b0a6a4471945cbfb28947a9a791"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-win32.whl", hash = "sha256:a4aef432cc7120a971eebb7ca2fddac4472e810b57e403d3a371b0c69cbb2bb0"}, + {file = "clickhouse_driver-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f307de7df6bc23ad5ec8a1ba1db157f4d14de673ddd4798f37790f23255605b0"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbf3ca8919bf856ca6588669a863065fb732a32a6387095f64d19038fd99db9f"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab68b3d9b9d1386adfd3a57edd47b62858a145bf7ccc7f11b31d308195d966e5"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985a9d60044c5ad39c6e018b852c7105ec4ebfdf4c3abe23183b4867454e570a"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c94330054c8d92d2286898906f843f26e2f96fc2aa11a9a96a7b5593d299bf0"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92938f55c8f797e50e624a4b96e685178d043cdf0ede306a7fd4e7dda19b8dfd"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05bd53e9bf49c3013d06f9e6d2812872d44b150f7a2d1cf18e1498257d42330e"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f1f8ed5404e283a9ded499c33eade2423fdc15e31f8a711d75e91f890d0f70b"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a398085e4a1766d907ac32c282d4172db38a44243bde303372396208d1cbf4bb"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fa1808593123b6056f93808f0afbc7938f06a8149cb4e381aa7b1a234c1d3c18"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:0512d54ae23bd4a69278e04f42b651d7c71b63ba6043e2c6bd97b11329692f99"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5bc2b67e7e68f74ccebf95a8b3a13f13a7c34b89b32c9813103221de14c06c8b"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:04a37cdafc671cb796af3e566cef0aeb39111d82aebeecd9106a049434953b26"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-win32.whl", hash = "sha256:019538c7c23e976538e5081dd2f77a8a40bf663c638a62d857ff05f42b0c9052"}, + {file = "clickhouse_driver-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5166643683584bc53fcadda73c65f6a9077feb472f3d167ecef1a1a7024973aa"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:59affab7b5a3c4aab5b6a730f606575efdefea213458de2eb14927ee4e0640f4"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dcb93dd07fe65ac4f1a2bc0b8967911d4ad2152dbee000f025ea5cb575da5ecb"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55a48019b79181ae1ca90e980e74c5d413c3f8829f6744e2b056646c2d435a1a"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:507463c9157240fd7c3246781e8c30df8db3c80bf68925b36ff3ad4a80c4b924"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e2d8d2295ee9e0cfab8ad77cb635a05da2160334b4f16ed8c3d00fbf39a2343"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e38c44546dcdb956b5ab0944cb3d51e8c98f816e75bab1a2254c478865bc6e7b"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6690a2bdd9e7531fe50b53193279f8b35cbcd5c5ee36c0fcc112518a7d24f16"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc6b4ba0a6467fd09021aa1d87a44fb4589600d61b010fca41e0dfffd0dee322"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:254bbd400eb87ff547a08755bc714f712e11f7a6d3ebbbb7aaa1dd454fb16d44"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7bbbe3f8b87fc1489bc15fa9c88cc9fac9d4d7d683d076f058c2c83e6ee422fd"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:745e5b18f0957d932151527f1523d0e516c199de8c589638e5f55ab2559886f3"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0fa0357fb5f26149e3df86a117d3678329b85d8827b78a5a09bbf224d8dd4541"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-win32.whl", hash = "sha256:ace652af7ca94ba3cb3a04a5c363e135dc5009f31d8201903e21db9d5daf2358"}, + {file = "clickhouse_driver-0.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:c0ba68489544df89e4138a14b0ec3e1e5eb102d5d3283a91d9b837c420c0ab97"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:66267e4ba21fa66c97ce784a5de2202d3b7d4db3e50bfcdde92830a68f6fae30"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cf55c285b75c178487407721baef4980b3c6515c9c0c1a6c1ea8b001afe658e"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:deeb66bb56490db2157f199c6d9aa2c53f046677be430cc834fc1e74eec6e654"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfe5b4020939abeeb407b4eead598c954b1573d2d2b4f174f793b196d378b9d9"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84d39506b5f8d86a1195ebde1c66aba168f34ebce6ebd828888f0625cac54774"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f93a27db2dcbbd3ecad36e8df4395d047cb7410e2dc69f6d037674e15442f4ee"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ebc29e501e47ecbfd44c89c0e5c87b2a722049d38b9e93fdd4bea510a82e16ac"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f9cc8c186fea09a94d89e5c9c4e8d05ec3a80e2f6d25673c48efec8117a13cfc"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:0757dfde5410c42230b24825ea3ab904a78160520e5ceb953482e133e368733b"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c9f88818cf411f928c29ba295c677cd95773bd256b8490f5655fb489e0c6658c"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e19952f158ebe274c65ffeb294ba378d75048a48f31b77573948d606bed019d5"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:008b1f32c7c68564de8051482b72a5289b6933bca9d9b1ad1474dd448d6768ba"}, + {file = "clickhouse_driver-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:622933cc9834c39f03de5d43a12f13fc7133d31d6d2597e67866d4a549ca9e60"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:92540581e5b5f36d915f14d05c30244870fb123c74b38c645fa47663053c5471"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:02dfadc6111b64e01c20b8c11266cab97d4f06685a392a183af437f2f1afb990"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ca17fece86fe85d97705024bec881978271931b3d00db273c9d63244f7d606"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76474f1315ca3ab484ae28ad085b8f756c8b9a755882f93912b2149290482033"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5c0ff12368b34aaf58dd948b0819e5b54d261911de334d3f048328dc9354013"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cd441b17294e90e313b08fabf84fcc782c191d2b9b2a924f163928202db6fcc"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62aa158f61d7d84c58e8cd75b3b8340b28607e5a70132395078f578d518aaae3"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcb2a39a1fef8bf1b581f06125c2a84a5b92c939b079d1a95126e3207b05dc77"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f29cc641a65e89a51a15f6d195f565ad2761d1bd653408c6b4046c987c5fb99"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ac1a43690696bda46c9a23fc6fd79b6fe22d428a18e880bdbdf5e6aeb31008c5"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:1dd5ea4584c42f85d96ddfa7d07da2abb35a797c45e4d3a66ace149ee4977cad"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a736c0af858a3c83af03848b18754ab18dc594cc7f3bf6be0b1fac682def182c"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-win32.whl", hash = "sha256:6cb8ca47f5818c1bc5814b9ff775e383f3c50059b1fd28a02cb9be1b666929f8"}, + {file = "clickhouse_driver-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:a90e7dc92985669a5e6569356bb3028d9d475f95006d4487cb0789aa53f9489c"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04b77cd6c583da9135db4a62c5a7999ae248c2dbfc0cb8e8a3d8a853b1fbfa11"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c7671f8c0e8960d766b2e0eaefcae3088fccdd3920e9cd3dee8e344cfd0a6929"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:502d7cd28522b95a399e993ffd48487e8c12c50ce2d4e89b77b938f945304405"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:969739279f4010e7b5b6b2c9d2ab56a463aed11fdaed5e02424c1b3915f144f8"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed34b60f741eeb02407ea72180d77cbfc368c1be6fc2f2ff8319d1856ce67e10"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a667b48927f4420eb8c03fa33369edfbdf359a788897a01ac945263a2a611461"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f93aa3a90f3847872d7464ec9076482b2e812c4e7d61682daedffdf3471be00"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:190890667215691fdf2155c3b233b39146054ab1cd854c7d91221e6ed633d71e"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ff280aeac5e96c764cd31ba1077c95601337b9a97fb0b9ed4d24c64431f2c322"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01e63e35d2ab55b8eb48facf6e951968c80d27ee6703aa6c91c73d9d0a4d0efe"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a29fb24b910dafc8c11ba882797d13ec0323a97dce80a57673116fa893d1b669"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5f229a7853fc767e63143ea69889d49f6fd5623adc2f7b0f7eb360117d7e91a5"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-win32.whl", hash = "sha256:b7f34ad2ed509f48f8ed1f9b96e89765173a7b35d286c7350aa85934a11c0f49"}, + {file = "clickhouse_driver-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:78b166597afbe490cc0cdac44fed8c8b81668f87125601dda17b154f237eef5d"}, + {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:16ab64beb8d079cb9b3200539539a35168f524eedf890c9acefb719e25bdc96e"}, + {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03e28fd50fc7c54874bf8e638a2ea87f73ae35bfbbf90123fdb395f38d62f159"}, + {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0677b8350acd8d186b6acd0026b62dd262d6fee428a5fa3ad9561908d4b02c39"}, + {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2f3c9e2182809131701bb28a606dec90525c7ab20490714714a4b3eb015454b"}, + {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e03a1a1b30cc58c9bd2cbe25bf5e40b1f1d16d52d44ddefb3af50435d1ed613c"}, + {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1be8081306a4beb12444ed8e3208e1eb6c01ed207c471b33009c13504c88139"}, + {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:933b40722cbca9b1123a5bb2fb4bafafd234deae0f3481125cb6b6fa1d39aa84"}, + {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054b5022f9bf15a5f4663a7cd190f466e70a2d7b8d45429d8742c515b556c10"}, + {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61744760ee046c9a268cb801ca21bfe44c4873db9901a7cd0f3ca8830205feff"}, + {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5e28427e05a72e7a4c3672e36703a2d80107ee0b3ab537e3380d726c96b07821"}, + {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c483f5ec836ae87803478f2a7b9daf15343078edd6a8be7364dd9db64905bbd0"}, + {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28220b794874e68bc2f06dbfff5748f1c5a3236922f59e127abd58d44ae20a3f"}, + {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c09877b59b34d5b3043ad70ec31543173cac8b64b4a8afaa89416b22fb28da5"}, + {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3580f78db27119f7380627873214ae1342066f1ecb35700c1d7bf418dd70ae73"}, + {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0842ac1b2f7a9ca46dac2027849b241bccd8eb8ff1c59cb0a5874042b267b733"}, + {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7a3fb585e2d3514196258a4a3b0267510c03477f3c2380239ade4c056ba689a7"}, + {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ea25287566d45efbaee0857ad25e8b33ffd7fd73e89424d79fe7f532962915"}, + {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee4a4935667b59b4816a5ca77300f5dbe5a7416860551d17376426b8fefc1175"}, + {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:358058cfceea9b43c4af9de81842563746f16984b34525a15b41eacf8fc2bed2"}, + {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ae760fb843dec0b5c398536ca8dfaf243f494ba8fc68132ae1bd62004b0c396a"}, +] + +[package.dependencies] +pytz = "*" +tzlocal = "*" + +[package.extras] +lz4 = ["clickhouse-cityhash (>=1.0.2.1)", "lz4", "lz4 (<=3.0.1)"] +numpy = ["numpy (>=1.12.0)", "pandas (>=0.24.0)"] +zstd = ["clickhouse-cityhash (>=1.0.2.1)", "zstd"] + +[[package]] +name = "cohere" +version = "5.2.6" +description = "" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "cohere-5.2.6-py3-none-any.whl", hash = "sha256:256b4ed00f47eb315401d7f28834655714f098382908e7d0ad5c98225aa6a57d"}, + {file = "cohere-5.2.6.tar.gz", hash = "sha256:15d13682706fbafc8cf700e195f628389a643eb7ebd6d7c5e9d6e1ebd3f942fb"}, +] + +[package.dependencies] +fastavro = ">=1.9.4,<2.0.0" +httpx = ">=0.21.2" +pydantic = ">=1.9.2" +requests = ">=2.0.0,<3.0.0" +tokenizers = ">=0.15.2,<0.16.0" +types-requests = ">=2.0.0,<3.0.0" +typing_extensions = ">=4.0.0" + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "contourpy" +version = "1.2.1" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, +] + +[package.dependencies] +numpy = ">=1.20" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "coverage" +version = "7.2.7" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "crcmod" +version = "1.7" +description = "CRC Generator" +optional = false +python-versions = "*" +files = [ + {file = "crcmod-1.7.tar.gz", hash = "sha256:dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e"}, +] + +[[package]] +name = "cryptography" +version = "42.0.7" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477"}, + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7"}, + {file = "cryptography-42.0.7-cp37-abi3-win32.whl", hash = "sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b"}, + {file = "cryptography-42.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678"}, + {file = "cryptography-42.0.7-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886"}, + {file = "cryptography-42.0.7-cp39-abi3-win32.whl", hash = "sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda"}, + {file = "cryptography-42.0.7-cp39-abi3-win_amd64.whl", hash = "sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68"}, + {file = "cryptography-42.0.7.tar.gz", hash = "sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "cssselect" +version = "1.2.0" +description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cssselect-1.2.0-py2.py3-none-any.whl", hash = "sha256:da1885f0c10b60c03ed5eccbb6b68d6eff248d91976fcde348f395d54c9fd35e"}, + {file = "cssselect-1.2.0.tar.gz", hash = "sha256:666b19839cfaddb9ce9d36bfe4c969132c647b92fc9088c4e23f786b30f1b3dc"}, +] + +[[package]] +name = "curl-cffi" +version = "0.6.4" +description = "libcurl ffi bindings for Python, with impersonation support." +optional = false +python-versions = ">=3.8" +files = [ + {file = "curl_cffi-0.6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a655afb540f018ab6e6ef5e1079df856562be53211764216b8e523a9dd7b69f4"}, + {file = "curl_cffi-0.6.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:dc4fc8964e79c8063a08f9164fa2c8d4a6e29543abdbce986f34df1818733679"}, + {file = "curl_cffi-0.6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461ebf53083c92e30351f22385dbfcdf14391e54d09805e823bc6853f95156d0"}, + {file = "curl_cffi-0.6.4-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c476d9ed4c8eac1dc7a82f733a4841dd462bfbb74a6131110ae14c7374fef10c"}, + {file = "curl_cffi-0.6.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd49429aebb4dd8b58a2d228591508be1735302088b15484e020bc6bbefee60"}, + {file = "curl_cffi-0.6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:06b01552d6b2dae6b3d9af51efaccd7cfbcb2b69b2e6e6aeada05897835fbbe9"}, + {file = "curl_cffi-0.6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:59ab786e34447b28ae268ddc9751033530022cf81617d03aae063ccc94c82363"}, + {file = "curl_cffi-0.6.4-cp38-abi3-win32.whl", hash = "sha256:583d06ec082cde9af292c0de9fa653fdb8fa58ef062205c8da808ce8e18c162d"}, + {file = "curl_cffi-0.6.4-cp38-abi3-win_amd64.whl", hash = "sha256:44614d527f24cb2467690256483c72da40906ac4ccb573e44d75a959774eefe5"}, + {file = "curl_cffi-0.6.4.tar.gz", hash = "sha256:fe721c39926ef69d47c4c1b00c40cf269efb712261b631210fb05801b448f957"}, +] + +[package.dependencies] +certifi = ">=2024.2.2" +cffi = ">=1.12.0" + +[package.extras] +build = ["cibuildwheel", "wheel"] +dev = ["autoflake (==1.4)", "charset-normalizer (>=3.3.2,<4)", "coverage (==6.4.1)", "cryptography (==38.0.3)", "flake8 (==6.0.0)", "flake8-bugbear (==22.7.1)", "flake8-pie (==0.15.0)", "httpx (==0.23.1)", "mypy (==1.9.0)", "pytest (==7.1.2)", "pytest-asyncio (==0.19.0)", "pytest-trio (==0.7.0)", "ruff (==0.3.3)", "trio (==0.21.0)", "trio-typing (==0.7.0)", "trustme (==0.9.0)", "types-certifi (==2021.10.8.2)", "uvicorn (==0.18.3)", "websockets (==11.0.3)"] +test = ["charset-normalizer (>=3.3.2,<4)", "cryptography (==38.0.3)", "fastapi (==0.100.0)", "httpx (==0.23.1)", "proxy.py (==2.4.3)", "pytest (==7.1.2)", "pytest-asyncio (==0.19.0)", "pytest-trio (==0.7.0)", "python-multipart (==0.0.6)", "trio (==0.21.0)", "trio-typing (==0.7.0)", "trustme (==0.9.0)", "types-certifi (==2021.10.8.2)", "uvicorn (==0.18.3)", "websockets (==11.0.3)"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "dashscope" +version = "1.17.1" +description = "dashscope client sdk library" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "dashscope-1.17.1-py3-none-any.whl", hash = "sha256:1e07e7ff4544684797f86ede646766b5ab8f5bd6eb43d2d01f0f757a2941efe1"}, +] + +[package.dependencies] +aiohttp = "*" +requests = "*" +tiktoken = {version = "*", optional = true, markers = "extra == \"tokenizer\""} + +[package.extras] +tokenizer = ["tiktoken"] + +[[package]] +name = "dataclasses" +version = "0.6" +description = "A backport of the dataclasses module for Python 3.6" +optional = false +python-versions = "*" +files = [ + {file = "dataclasses-0.6-py3-none-any.whl", hash = "sha256:454a69d788c7fda44efd71e259be79577822f5e3f53f029a22d08004e951dc9f"}, + {file = "dataclasses-0.6.tar.gz", hash = "sha256:6988bd2b895eef432d562370bb707d540f32f7360ab13da45340101bc2307d84"}, +] + +[[package]] +name = "dataclasses-json" +version = "0.6.6" +description = "Easily serialize dataclasses to and from JSON." +optional = false +python-versions = "<4.0,>=3.7" +files = [ + {file = "dataclasses_json-0.6.6-py3-none-any.whl", hash = "sha256:e54c5c87497741ad454070ba0ed411523d46beb5da102e221efb873801b0ba85"}, + {file = "dataclasses_json-0.6.6.tar.gz", hash = "sha256:0c09827d26fffda27f1be2fed7a7a01a29c5ddcd2eb6393ad5ebf9d77e9deae8"}, +] + +[package.dependencies] +marshmallow = ">=3.18.0,<4.0.0" +typing-inspect = ">=0.4.0,<1" + +[[package]] +name = "db-dtypes" +version = "1.2.0" +description = "Pandas Data Types for SQL systems (BigQuery, Spanner)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "db-dtypes-1.2.0.tar.gz", hash = "sha256:3531bb1fb8b5fbab33121fe243ccc2ade16ab2524f4c113b05cc702a1908e6ea"}, + {file = "db_dtypes-1.2.0-py2.py3-none-any.whl", hash = "sha256:6320bddd31d096447ef749224d64aab00972ed20e4392d86f7d8b81ad79f7ff0"}, +] + +[package.dependencies] +numpy = ">=1.16.6" +packaging = ">=17.0" +pandas = ">=0.24.2" +pyarrow = ">=3.0.0" + +[[package]] +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = false +python-versions = ">=3.6" +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + +[[package]] +name = "docstring-parser" +version = "0.16" +description = "Parse Python docstrings in reST, Google and Numpydoc format" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637"}, + {file = "docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e"}, +] + +[[package]] +name = "duckdb" +version = "1.0.0" +description = "DuckDB in-process database" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "duckdb-1.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4a8ce2d1f9e1c23b9bab3ae4ca7997e9822e21563ff8f646992663f66d050211"}, + {file = "duckdb-1.0.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:19797670f20f430196e48d25d082a264b66150c264c1e8eae8e22c64c2c5f3f5"}, + {file = "duckdb-1.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b71c342090fe117b35d866a91ad6bffce61cd6ff3e0cff4003f93fc1506da0d8"}, + {file = "duckdb-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25dd69f44ad212c35ae2ea736b0e643ea2b70f204b8dff483af1491b0e2a4cec"}, + {file = "duckdb-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8da5f293ecb4f99daa9a9352c5fd1312a6ab02b464653a0c3a25ab7065c45d4d"}, + {file = "duckdb-1.0.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3207936da9967ddbb60644ec291eb934d5819b08169bc35d08b2dedbe7068c60"}, + {file = "duckdb-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1128d6c9c33e883b1f5df6b57c1eb46b7ab1baf2650912d77ee769aaa05111f9"}, + {file = "duckdb-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:02310d263474d0ac238646677feff47190ffb82544c018b2ff732a4cb462c6ef"}, + {file = "duckdb-1.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:75586791ab2702719c284157b65ecefe12d0cca9041da474391896ddd9aa71a4"}, + {file = "duckdb-1.0.0-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:83bb415fc7994e641344f3489e40430ce083b78963cb1057bf714ac3a58da3ba"}, + {file = "duckdb-1.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:bee2e0b415074e84c5a2cefd91f6b5ebeb4283e7196ba4ef65175a7cef298b57"}, + {file = "duckdb-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa5a4110d2a499312609544ad0be61e85a5cdad90e5b6d75ad16b300bf075b90"}, + {file = "duckdb-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa389e6a382d4707b5f3d1bc2087895925ebb92b77e9fe3bfb23c9b98372fdc"}, + {file = "duckdb-1.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7ede6f5277dd851f1a4586b0c78dc93f6c26da45e12b23ee0e88c76519cbdbe0"}, + {file = "duckdb-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0b88cdbc0d5c3e3d7545a341784dc6cafd90fc035f17b2f04bf1e870c68456e5"}, + {file = "duckdb-1.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd1693cdd15375156f7fff4745debc14e5c54928589f67b87fb8eace9880c370"}, + {file = "duckdb-1.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:c65a7fe8a8ce21b985356ee3ec0c3d3b3b2234e288e64b4cfb03356dbe6e5583"}, + {file = "duckdb-1.0.0-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:e5a8eda554379b3a43b07bad00968acc14dd3e518c9fbe8f128b484cf95e3d16"}, + {file = "duckdb-1.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a1b6acdd54c4a7b43bd7cb584975a1b2ff88ea1a31607a2b734b17960e7d3088"}, + {file = "duckdb-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a677bb1b6a8e7cab4a19874249d8144296e6e39dae38fce66a80f26d15e670df"}, + {file = "duckdb-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:752e9d412b0a2871bf615a2ede54be494c6dc289d076974eefbf3af28129c759"}, + {file = "duckdb-1.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3aadb99d098c5e32d00dc09421bc63a47134a6a0de9d7cd6abf21780b678663c"}, + {file = "duckdb-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83b7091d4da3e9301c4f9378833f5ffe934fb1ad2b387b439ee067b2c10c8bb0"}, + {file = "duckdb-1.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:6a8058d0148b544694cb5ea331db44f6c2a00a7b03776cc4dd1470735c3d5ff7"}, + {file = "duckdb-1.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40cb20e5ee19d44bc66ec99969af791702a049079dc5f248c33b1c56af055f4"}, + {file = "duckdb-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7bce1bc0de9af9f47328e24e6e7e39da30093179b1c031897c042dd94a59c8e"}, + {file = "duckdb-1.0.0-cp37-cp37m-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8355507f7a04bc0a3666958f4414a58e06141d603e91c0fa5a7c50e49867fb6d"}, + {file = "duckdb-1.0.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:39f1a46f5a45ad2886dc9b02ce5b484f437f90de66c327f86606d9ba4479d475"}, + {file = "duckdb-1.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d29ba477b27ae41676b62c8fae8d04ee7cbe458127a44f6049888231ca58fa"}, + {file = "duckdb-1.0.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:1bea713c1925918714328da76e79a1f7651b2b503511498ccf5e007a7e67d49e"}, + {file = "duckdb-1.0.0-cp38-cp38-macosx_12_0_universal2.whl", hash = "sha256:bfe67f3bcf181edbf6f918b8c963eb060e6aa26697d86590da4edc5707205450"}, + {file = "duckdb-1.0.0-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:dbc6093a75242f002be1d96a6ace3fdf1d002c813e67baff52112e899de9292f"}, + {file = "duckdb-1.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba1881a2b11c507cee18f8fd9ef10100be066fddaa2c20fba1f9a664245cd6d8"}, + {file = "duckdb-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:445d0bb35087c522705c724a75f9f1c13f1eb017305b694d2686218d653c8142"}, + {file = "duckdb-1.0.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224553432e84432ffb9684f33206572477049b371ce68cc313a01e214f2fbdda"}, + {file = "duckdb-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d3914032e47c4e76636ad986d466b63fdea65e37be8a6dfc484ed3f462c4fde4"}, + {file = "duckdb-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:af9128a2eb7e1bb50cd2c2020d825fb2946fdad0a2558920cd5411d998999334"}, + {file = "duckdb-1.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dd2659a5dbc0df0de68f617a605bf12fe4da85ba24f67c08730984a0892087e8"}, + {file = "duckdb-1.0.0-cp39-cp39-macosx_12_0_universal2.whl", hash = "sha256:ac5a4afb0bc20725e734e0b2c17e99a274de4801aff0d4e765d276b99dad6d90"}, + {file = "duckdb-1.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c5a53bee3668d6e84c0536164589d5127b23d298e4c443d83f55e4150fafe61"}, + {file = "duckdb-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b980713244d7708b25ee0a73de0c65f0e5521c47a0e907f5e1b933d79d972ef6"}, + {file = "duckdb-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cbd4f9fe7b7a56eff96c3f4d6778770dd370469ca2212eddbae5dd63749db5"}, + {file = "duckdb-1.0.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed228167c5d49888c5ef36f6f9cbf65011c2daf9dcb53ea8aa7a041ce567b3e4"}, + {file = "duckdb-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:46d8395fbcea7231fd5032a250b673cc99352fef349b718a23dea2c0dd2b8dec"}, + {file = "duckdb-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:6ad1fc1a4d57e7616944166a5f9417bdbca1ea65c490797e3786e3a42e162d8a"}, + {file = "duckdb-1.0.0.tar.gz", hash = "sha256:a2a059b77bc7d5b76ae9d88e267372deff19c291048d59450c431e166233d453"}, +] + +[[package]] +name = "duckduckgo-search" +version = "5.2.2" +description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." +optional = false +python-versions = ">=3.8" +files = [ + {file = "duckduckgo_search-5.2.2-py3-none-any.whl", hash = "sha256:1b1f399c82498968620eb55f0d644d5f1adca21c2642ac346e1f34dc66654a73"}, + {file = "duckduckgo_search-5.2.2.tar.gz", hash = "sha256:a90240b8a22d554ac56e243ffaded0906d43660592eb7e4f760ef0e5089b1b2b"}, +] + +[package.dependencies] +click = ">=8.1.7" +curl-cffi = ">=0.6.2" +orjson = ">=3.10.0" + +[package.extras] +dev = ["mypy (>=1.9.0)", "pytest (>=8.1.1)", "ruff (>=0.3.4)"] +lxml = ["lxml (>=5.1.1)"] + +[[package]] +name = "emoji" +version = "2.11.1" +description = "Emoji for Python" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "emoji-2.11.1-py2.py3-none-any.whl", hash = "sha256:b7ba25299bbf520cc8727848ae66b986da32aee27dc2887eaea2bff07226ce49"}, + {file = "emoji-2.11.1.tar.gz", hash = "sha256:062ff0b3154b6219143f8b9f4b3e5c64c35bc2b146e6e2349ab5f29e218ce1ee"}, +] + +[package.extras] +dev = ["coverage", "coveralls", "pytest"] + +[[package]] +name = "environs" +version = "9.5.0" +description = "simplified environment variable parsing" +optional = false +python-versions = ">=3.6" +files = [ + {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"}, + {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"}, +] + +[package.dependencies] +marshmallow = ">=3.0.0" +python-dotenv = "*" + +[package.extras] +dev = ["dj-database-url", "dj-email-url", "django-cache-url", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)", "pytest", "tox"] +django = ["dj-database-url", "dj-email-url", "django-cache-url"] +lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] +tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] + +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.1" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastavro" +version = "1.9.4" +description = "Fast read/write of AVRO files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastavro-1.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:60cb38f07462a7fb4e4440ed0de67d3d400ae6b3d780f81327bebde9aa55faef"}, + {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:063d01d197fc929c20adc09ca9f0ca86d33ac25ee0963ce0b438244eee8315ae"}, + {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a9053fcfbc895f2a16a4303af22077e3a8fdcf1cd5d6ed47ff2ef22cbba2f0"}, + {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:02bf1276b7326397314adf41b34a4890f6ffa59cf7e0eb20b9e4ab0a143a1598"}, + {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56bed9eca435389a8861e6e2d631ec7f8f5dda5b23f93517ac710665bd34ca29"}, + {file = "fastavro-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:0cd2099c8c672b853e0b20c13e9b62a69d3fbf67ee7c59c7271ba5df1680310d"}, + {file = "fastavro-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:af8c6d8c43a02b5569c093fc5467469541ac408c79c36a5b0900d3dd0b3ba838"}, + {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a138710bd61580324d23bc5e3df01f0b82aee0a76404d5dddae73d9e4c723f"}, + {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:903d97418120ca6b6a7f38a731166c1ccc2c4344ee5e0470d09eb1dc3687540a"}, + {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c443eeb99899d062dbf78c525e4614dd77e041a7688fa2710c224f4033f193ae"}, + {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ac26ab0774d1b2b7af6d8f4300ad20bbc4b5469e658a02931ad13ce23635152f"}, + {file = "fastavro-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:cf7247874c22be856ba7d1f46a0f6e0379a6025f1a48a7da640444cbac6f570b"}, + {file = "fastavro-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:68912f2020e1b3d70557260b27dd85fb49a4fc6bfab18d384926127452c1da4c"}, + {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6925ce137cdd78e109abdb0bc33aad55de6c9f2d2d3036b65453128f2f5f5b92"}, + {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b928cd294e36e35516d0deb9e104b45be922ba06940794260a4e5dbed6c192a"}, + {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:90c9838bc4c991ffff5dd9d88a0cc0030f938b3fdf038cdf6babde144b920246"}, + {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:eca6e54da571b06a3c5a72dbb7212073f56c92a6fbfbf847b91c347510f8a426"}, + {file = "fastavro-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4b02839ac261100cefca2e2ad04cdfedc556cb66b5ec735e0db428e74b399de"}, + {file = "fastavro-1.9.4-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4451ee9a305a73313a1558d471299f3130e4ecc10a88bf5742aa03fb37e042e6"}, + {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8524fccfb379565568c045d29b2ebf71e1f2c0dd484aeda9fe784ef5febe1a8"}, + {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d0a00a6e09baa20f6f038d7a2ddcb7eef0e7a9980e947a018300cb047091b8"}, + {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:23d7e5b29c9bf6f26e8be754b2c8b919838e506f78ef724de7d22881696712fc"}, + {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e6ab3ee53944326460edf1125b2ad5be2fadd80f7211b13c45fa0c503b4cf8d"}, + {file = "fastavro-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:64d335ec2004204c501f8697c385d0a8f6b521ac82d5b30696f789ff5bc85f3c"}, + {file = "fastavro-1.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:7e05f44c493e89e73833bd3ff3790538726906d2856f59adc8103539f4a1b232"}, + {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:253c63993250bff4ee7b11fb46cf3a4622180a783bedc82a24c6fdcd1b10ca2a"}, + {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d6942eb1db14640c2581e0ecd1bbe0afc8a83731fcd3064ae7f429d7880cb7"}, + {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d47bb66be6091cd48cfe026adcad11c8b11d7d815a2949a1e4ccf03df981ca65"}, + {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c293897f12f910e58a1024f9c77f565aa8e23b36aafda6ad8e7041accc57a57f"}, + {file = "fastavro-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:f05d2afcb10a92e2a9e580a3891f090589b3e567fdc5641f8a46a0b084f120c3"}, + {file = "fastavro-1.9.4.tar.gz", hash = "sha256:56b8363e360a1256c94562393dc7f8611f3baf2b3159f64fb2b9c6b87b14e876"}, +] + +[package.extras] +codecs = ["cramjam", "lz4", "zstandard"] +lz4 = ["lz4"] +snappy = ["cramjam"] +zstandard = ["zstandard"] + +[[package]] +name = "feedfinder2" +version = "0.0.4" +description = "Find the feed URLs for a website." +optional = false +python-versions = "*" +files = [ + {file = "feedfinder2-0.0.4.tar.gz", hash = "sha256:3701ee01a6c85f8b865a049c30ba0b4608858c803fe8e30d1d289fdbe89d0efe"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +requests = "*" +six = "*" + +[[package]] +name = "feedparser" +version = "6.0.10" +description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" +optional = false +python-versions = ">=3.6" +files = [ + {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, + {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, +] + +[package.dependencies] +sgmllib3k = "*" + +[[package]] +name = "filelock" +version = "3.14.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "filetype" +version = "1.2.0" +description = "Infer file type and MIME type of any file/buffer. No external dependencies." +optional = false +python-versions = "*" +files = [ + {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, + {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, +] + +[[package]] +name = "firecrawl-py" +version = "0.0.5" +description = "Python SDK for Firecrawl API" +optional = false +python-versions = "*" +files = [ + {file = "firecrawl-py-0.0.5.tar.gz", hash = "sha256:3d1cc30b7d86c12aa06e6434ebb526072cd70ab9a0c8b145008efe044a1cd09c"}, + {file = "firecrawl_py-0.0.5-py3-none-any.whl", hash = "sha256:476694345141c0145a1bee9c01a8ad0103f75892c12a122dc511a3adad0785e7"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "flask" +version = "3.0.3" +description = "A simple framework for building complex web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "flask-3.0.3-py3-none-any.whl", hash = "sha256:34e815dfaa43340d1d15a5c3a02b8476004037eb4840b34910c6e21679d288f3"}, + {file = "flask-3.0.3.tar.gz", hash = "sha256:ceb27b0af3823ea2737928a4d99d125a06175b8512c445cbd9a9ce200ef76842"}, +] + +[package.dependencies] +blinker = ">=1.6.2" +click = ">=8.1.3" +itsdangerous = ">=2.1.2" +Jinja2 = ">=3.1.2" +Werkzeug = ">=3.0.0" + +[package.extras] +async = ["asgiref (>=3.2)"] +dotenv = ["python-dotenv"] + +[[package]] +name = "flask-compress" +version = "1.15" +description = "Compress responses in your Flask app with gzip, deflate, brotli or zstandard." +optional = false +python-versions = "*" +files = [ + {file = "Flask_Compress-1.15-py3-none-any.whl", hash = "sha256:5d6efe3584c89516c3ab9d94adabe08c218517b957a9bd5cd0c3955dd3834c51"}, + {file = "flask_compress-1.15.tar.gz", hash = "sha256:b7b66cd5d08fc46bbcc71561e13ca64321590b0ca4c172f8001bf5374f8f5c58"}, +] + +[package.dependencies] +brotli = {version = "*", markers = "platform_python_implementation != \"PyPy\""} +brotlicffi = {version = "*", markers = "platform_python_implementation == \"PyPy\""} +flask = "*" +zstandard = [ + {version = "*", markers = "platform_python_implementation != \"PyPy\""}, + {version = "*", extras = ["cffi"], markers = "platform_python_implementation == \"PyPy\""}, +] + +[[package]] +name = "flask-cors" +version = "4.0.1" +description = "A Flask extension adding a decorator for CORS support" +optional = false +python-versions = "*" +files = [ + {file = "Flask_Cors-4.0.1-py2.py3-none-any.whl", hash = "sha256:f2a704e4458665580c074b714c4627dd5a306b333deb9074d0b1794dfa2fb677"}, + {file = "flask_cors-4.0.1.tar.gz", hash = "sha256:eeb69b342142fdbf4766ad99357a7f3876a2ceb77689dc10ff912aac06c389e4"}, +] + +[package.dependencies] +Flask = ">=0.9" + +[[package]] +name = "flask-login" +version = "0.6.3" +description = "User authentication and session management for Flask." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Flask-Login-0.6.3.tar.gz", hash = "sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333"}, + {file = "Flask_Login-0.6.3-py3-none-any.whl", hash = "sha256:849b25b82a436bf830a054e74214074af59097171562ab10bfa999e6b78aae5d"}, +] + +[package.dependencies] +Flask = ">=1.0.4" +Werkzeug = ">=1.0.1" + +[[package]] +name = "flask-migrate" +version = "4.0.7" +description = "SQLAlchemy database migrations for Flask applications using Alembic." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Flask-Migrate-4.0.7.tar.gz", hash = "sha256:dff7dd25113c210b069af280ea713b883f3840c1e3455274745d7355778c8622"}, + {file = "Flask_Migrate-4.0.7-py3-none-any.whl", hash = "sha256:5c532be17e7b43a223b7500d620edae33795df27c75811ddf32560f7d48ec617"}, +] + +[package.dependencies] +alembic = ">=1.9.0" +Flask = ">=0.9" +Flask-SQLAlchemy = ">=1.0" + +[[package]] +name = "flask-restful" +version = "0.3.10" +description = "Simple framework for creating REST APIs" +optional = false +python-versions = "*" +files = [ + {file = "Flask-RESTful-0.3.10.tar.gz", hash = "sha256:fe4af2ef0027df8f9b4f797aba20c5566801b6ade995ac63b588abf1a59cec37"}, + {file = "Flask_RESTful-0.3.10-py2.py3-none-any.whl", hash = "sha256:1cf93c535172f112e080b0d4503a8d15f93a48c88bdd36dd87269bdaf405051b"}, +] + +[package.dependencies] +aniso8601 = ">=0.82" +Flask = ">=0.8" +pytz = "*" +six = ">=1.3.0" + +[package.extras] +docs = ["sphinx"] + +[[package]] +name = "flask-sock" +version = "0.7.0" +description = "WebSocket support for Flask" +optional = false +python-versions = ">=3.6" +files = [ + {file = "flask-sock-0.7.0.tar.gz", hash = "sha256:e023b578284195a443b8d8bdb4469e6a6acf694b89aeb51315b1a34fcf427b7d"}, + {file = "flask_sock-0.7.0-py3-none-any.whl", hash = "sha256:caac4d679392aaf010d02fabcf73d52019f5bdaf1c9c131ec5a428cb3491204a"}, +] + +[package.dependencies] +flask = ">=2" +simple-websocket = ">=0.5.1" + +[package.extras] +docs = ["sphinx"] + +[[package]] +name = "flask-sqlalchemy" +version = "3.0.5" +description = "Add SQLAlchemy support to your Flask application." +optional = false +python-versions = ">=3.7" +files = [ + {file = "flask_sqlalchemy-3.0.5-py3-none-any.whl", hash = "sha256:cabb6600ddd819a9f859f36515bb1bd8e7dbf30206cc679d2b081dff9e383283"}, + {file = "flask_sqlalchemy-3.0.5.tar.gz", hash = "sha256:c5765e58ca145401b52106c0f46178569243c5da25556be2c231ecc60867c5b1"}, +] + +[package.dependencies] +flask = ">=2.2.5" +sqlalchemy = ">=1.4.18" + +[[package]] +name = "fonttools" +version = "4.51.0" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, + {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, + {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, + {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, + {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, + {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, + {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, + {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, + {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, + {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, + {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, + {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, + {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "frozendict" +version = "2.4.4" +description = "A simple immutable dictionary" +optional = false +python-versions = ">=3.6" +files = [ + {file = "frozendict-2.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4a59578d47b3949437519b5c39a016a6116b9e787bb19289e333faae81462e59"}, + {file = "frozendict-2.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12a342e439aef28ccec533f0253ea53d75fe9102bd6ea928ff530e76eac38906"}, + {file = "frozendict-2.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f79c26dff10ce11dad3b3627c89bb2e87b9dd5958c2b24325f16a23019b8b94"}, + {file = "frozendict-2.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2bd009cf4fc47972838a91e9b83654dc9a095dc4f2bb3a37c3f3124c8a364543"}, + {file = "frozendict-2.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:87ebcde21565a14fe039672c25550060d6f6d88cf1f339beac094c3b10004eb0"}, + {file = "frozendict-2.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:fefeb700bc7eb8b4c2dc48704e4221860d254c8989fb53488540bc44e44a1ac2"}, + {file = "frozendict-2.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:4297d694eb600efa429769125a6f910ec02b85606f22f178bafbee309e7d3ec7"}, + {file = "frozendict-2.4.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:812ab17522ba13637826e65454115a914c2da538356e85f43ecea069813e4b33"}, + {file = "frozendict-2.4.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fee9420475bb6ff357000092aa9990c2f6182b2bab15764330f4ad7de2eae49"}, + {file = "frozendict-2.4.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3148062675536724502c6344d7c485dd4667fdf7980ca9bd05e338ccc0c4471e"}, + {file = "frozendict-2.4.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:78c94991944dd33c5376f720228e5b252ee67faf3bac50ef381adc9e51e90d9d"}, + {file = "frozendict-2.4.4-cp36-cp36m-win_amd64.whl", hash = "sha256:1697793b5f62b416c0fc1d94638ec91ed3aa4ab277f6affa3a95216ecb3af170"}, + {file = "frozendict-2.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:199a4d32194f3afed6258de7e317054155bc9519252b568d9cfffde7e4d834e5"}, + {file = "frozendict-2.4.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85375ec6e979e6373bffb4f54576a68bf7497c350861d20686ccae38aab69c0a"}, + {file = "frozendict-2.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2d8536e068d6bf281f23fa835ac07747fb0f8851879dd189e9709f9567408b4d"}, + {file = "frozendict-2.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:259528ba6b56fa051bc996f1c4d8b57e30d6dd3bc2f27441891b04babc4b5e73"}, + {file = "frozendict-2.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:07c3a5dee8bbb84cba770e273cdbf2c87c8e035903af8f781292d72583416801"}, + {file = "frozendict-2.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6874fec816b37b6eb5795b00e0574cba261bf59723e2de607a195d5edaff0786"}, + {file = "frozendict-2.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8f92425686323a950337da4b75b4c17a3327b831df8c881df24038d560640d4"}, + {file = "frozendict-2.4.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d58d9a8d9e49662c6dafbea5e641f97decdb3d6ccd76e55e79818415362ba25"}, + {file = "frozendict-2.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93a7b19afb429cbf99d56faf436b45ef2fa8fe9aca89c49eb1610c3bd85f1760"}, + {file = "frozendict-2.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b70b431e3a72d410a2cdf1497b3aba2f553635e0c0f657ce311d841bf8273b6"}, + {file = "frozendict-2.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:e1b941132d79ce72d562a13341d38fc217bc1ee24d8c35a20d754e79ff99e038"}, + {file = "frozendict-2.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc2228874eacae390e63fd4f2bb513b3144066a977dc192163c9f6c7f6de6474"}, + {file = "frozendict-2.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63aa49f1919af7d45fb8fd5dec4c0859bc09f46880bd6297c79bb2db2969b63d"}, + {file = "frozendict-2.4.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6bf9260018d653f3cab9bd147bd8592bf98a5c6e338be0491ced3c196c034a3"}, + {file = "frozendict-2.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6eb716e6a6d693c03b1d53280a1947716129f5ef9bcdd061db5c17dea44b80fe"}, + {file = "frozendict-2.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d13b4310db337f4d2103867c5a05090b22bc4d50ca842093779ef541ea9c9eea"}, + {file = "frozendict-2.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:b3b967d5065872e27b06f785a80c0ed0a45d1f7c9b85223da05358e734d858ca"}, + {file = "frozendict-2.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:4ae8d05c8d0b6134bfb6bfb369d5fa0c4df21eabb5ca7f645af95fdc6689678e"}, + {file = "frozendict-2.4.4-py311-none-any.whl", hash = "sha256:705efca8d74d3facbb6ace80ab3afdd28eb8a237bfb4063ed89996b024bc443d"}, + {file = "frozendict-2.4.4-py312-none-any.whl", hash = "sha256:d9647563e76adb05b7cde2172403123380871360a114f546b4ae1704510801e5"}, + {file = "frozendict-2.4.4.tar.gz", hash = "sha256:3f7c031b26e4ee6a3f786ceb5e3abf1181c4ade92dce1f847da26ea2c96008c7"}, +] + +[[package]] +name = "frozenlist" +version = "1.4.1" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, +] + +[[package]] +name = "fsspec" +version = "2024.5.0" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2024.5.0-py3-none-any.whl", hash = "sha256:e0fdbc446d67e182f49a70b82cf7889028a63588fde6b222521f10937b2b670c"}, + {file = "fsspec-2024.5.0.tar.gz", hash = "sha256:1d021b0b0f933e3b3029ed808eb400c08ba101ca2de4b3483fbc9ca23fcee94a"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + +[[package]] +name = "gevent" +version = "23.9.1" +description = "Coroutine-based network library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "gevent-23.9.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:a3c5e9b1f766a7a64833334a18539a362fb563f6c4682f9634dea72cbe24f771"}, + {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b101086f109168b23fa3586fccd1133494bdb97f86920a24dc0b23984dc30b69"}, + {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36a549d632c14684bcbbd3014a6ce2666c5f2a500f34d58d32df6c9ea38b6535"}, + {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:272cffdf535978d59c38ed837916dfd2b5d193be1e9e5dcc60a5f4d5025dd98a"}, + {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcb8612787a7f4626aa881ff15ff25439561a429f5b303048f0fca8a1c781c39"}, + {file = "gevent-23.9.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:d57737860bfc332b9b5aa438963986afe90f49645f6e053140cfa0fa1bdae1ae"}, + {file = "gevent-23.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5f3c781c84794926d853d6fb58554dc0dcc800ba25c41d42f6959c344b4db5a6"}, + {file = "gevent-23.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dbb22a9bbd6a13e925815ce70b940d1578dbe5d4013f20d23e8a11eddf8d14a7"}, + {file = "gevent-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:707904027d7130ff3e59ea387dddceedb133cc742b00b3ffe696d567147a9c9e"}, + {file = "gevent-23.9.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:45792c45d60f6ce3d19651d7fde0bc13e01b56bb4db60d3f32ab7d9ec467374c"}, + {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e24c2af9638d6c989caffc691a039d7c7022a31c0363da367c0d32ceb4a0648"}, + {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e1ead6863e596a8cc2a03e26a7a0981f84b6b3e956101135ff6d02df4d9a6b07"}, + {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65883ac026731ac112184680d1f0f1e39fa6f4389fd1fc0bf46cc1388e2599f9"}, + {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7af500da05363e66f122896012acb6e101a552682f2352b618e541c941a011"}, + {file = "gevent-23.9.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c3e5d2fa532e4d3450595244de8ccf51f5721a05088813c1abd93ad274fe15e7"}, + {file = "gevent-23.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c84d34256c243b0a53d4335ef0bc76c735873986d478c53073861a92566a8d71"}, + {file = "gevent-23.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ada07076b380918829250201df1d016bdafb3acf352f35e5693b59dceee8dd2e"}, + {file = "gevent-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:921dda1c0b84e3d3b1778efa362d61ed29e2b215b90f81d498eb4d8eafcd0b7a"}, + {file = "gevent-23.9.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:ed7a048d3e526a5c1d55c44cb3bc06cfdc1947d06d45006cc4cf60dedc628904"}, + {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c1abc6f25f475adc33e5fc2dbcc26a732608ac5375d0d306228738a9ae14d3b"}, + {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4368f341a5f51611411ec3fc62426f52ac3d6d42eaee9ed0f9eebe715c80184e"}, + {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52b4abf28e837f1865a9bdeef58ff6afd07d1d888b70b6804557e7908032e599"}, + {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52e9f12cd1cda96603ce6b113d934f1aafb873e2c13182cf8e86d2c5c41982ea"}, + {file = "gevent-23.9.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:de350fde10efa87ea60d742901e1053eb2127ebd8b59a7d3b90597eb4e586599"}, + {file = "gevent-23.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fde6402c5432b835fbb7698f1c7f2809c8d6b2bd9d047ac1f5a7c1d5aa569303"}, + {file = "gevent-23.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dd6c32ab977ecf7c7b8c2611ed95fa4aaebd69b74bf08f4b4960ad516861517d"}, + {file = "gevent-23.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:455e5ee8103f722b503fa45dedb04f3ffdec978c1524647f8ba72b4f08490af1"}, + {file = "gevent-23.9.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:7ccf0fd378257cb77d91c116e15c99e533374a8153632c48a3ecae7f7f4f09fe"}, + {file = "gevent-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d163d59f1be5a4c4efcdd13c2177baaf24aadf721fdf2e1af9ee54a998d160f5"}, + {file = "gevent-23.9.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7532c17bc6c1cbac265e751b95000961715adef35a25d2b0b1813aa7263fb397"}, + {file = "gevent-23.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:78eebaf5e73ff91d34df48f4e35581ab4c84e22dd5338ef32714264063c57507"}, + {file = "gevent-23.9.1-cp38-cp38-win32.whl", hash = "sha256:f632487c87866094546a74eefbca2c74c1d03638b715b6feb12e80120960185a"}, + {file = "gevent-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:62d121344f7465e3739989ad6b91f53a6ca9110518231553fe5846dbe1b4518f"}, + {file = "gevent-23.9.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:bf456bd6b992eb0e1e869e2fd0caf817f0253e55ca7977fd0e72d0336a8c1c6a"}, + {file = "gevent-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43daf68496c03a35287b8b617f9f91e0e7c0d042aebcc060cadc3f049aadd653"}, + {file = "gevent-23.9.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7c28e38dcde327c217fdafb9d5d17d3e772f636f35df15ffae2d933a5587addd"}, + {file = "gevent-23.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fae8d5b5b8fa2a8f63b39f5447168b02db10c888a3e387ed7af2bd1b8612e543"}, + {file = "gevent-23.9.1-cp39-cp39-win32.whl", hash = "sha256:2c7b5c9912378e5f5ccf180d1fdb1e83f42b71823483066eddbe10ef1a2fcaa2"}, + {file = "gevent-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:a2898b7048771917d85a1d548fd378e8a7b2ca963db8e17c6d90c76b495e0e2b"}, + {file = "gevent-23.9.1.tar.gz", hash = "sha256:72c002235390d46f94938a96920d8856d4ffd9ddf62a303a0d7c118894097e34"}, +] + +[package.dependencies] +cffi = {version = ">=1.12.2", markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\""} +greenlet = [ + {version = ">=3.0rc3", markers = "platform_python_implementation == \"CPython\" and python_version >= \"3.11\""}, + {version = ">=2.0.0", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""}, +] +"zope.event" = "*" +"zope.interface" = "*" + +[package.extras] +dnspython = ["dnspython (>=1.16.0,<2.0)", "idna"] +docs = ["furo", "repoze.sphinx.autointerface", "sphinx", "sphinxcontrib-programoutput", "zope.schema"] +monitor = ["psutil (>=5.7.0)"] +recommended = ["cffi (>=1.12.2)", "dnspython (>=1.16.0,<2.0)", "idna", "psutil (>=5.7.0)"] +test = ["cffi (>=1.12.2)", "coverage (>=5.0)", "dnspython (>=1.16.0,<2.0)", "idna", "objgraph", "psutil (>=5.7.0)", "requests", "setuptools"] + +[[package]] +name = "gmpy2" +version = "2.1.5" +description = "gmpy2 interface to GMP/MPIR, MPFR, and MPC for Python 2.7 and 3.5+" +optional = false +python-versions = "*" +files = [ + {file = "gmpy2-2.1.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:d8e531a799f09cc66bd2de16b867cf19ce981bbc005bd026fa8d9af46cbdc08b"}, + {file = "gmpy2-2.1.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:eec3b3c9413dd1ea4413af57fc9c92ccbb4d5bb8336da5efbbda8f107fd90eec"}, + {file = "gmpy2-2.1.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:55dcf08d4278b439c1ba37d9b6893bb77bc34b55ccc9b1ad8645d4596a12700e"}, + {file = "gmpy2-2.1.5-cp27-cp27m-win_amd64.whl", hash = "sha256:8947f3b8a1c90f5bae26caf83b9ba2313e52cd06472f7c2be7a5b3a32bdc1bdd"}, + {file = "gmpy2-2.1.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:3459447d579dd0620a09c2aa4a9c1dbfc46cc8084b6928b901607e8565f04a83"}, + {file = "gmpy2-2.1.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:931adb3006afb55562094e9a866a1db584c11bc9b4a370d1f4719b551b5403fe"}, + {file = "gmpy2-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df404ae9a97b9f399d9ca6890b02bef175a373f87e317f93cbaae00f68774e11"}, + {file = "gmpy2-2.1.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cd876ee5232b0d70dd0bae2b39f54a75f6cc9bbf1dd90b8f0fda8c267fa383a2"}, + {file = "gmpy2-2.1.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4877978256fbb6d6b51cc3892183327171c174fbf60671962ab7aa5e70af8eb3"}, + {file = "gmpy2-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565d0444f0d174d84bcbcb0da8feede0ce09733dabd905b63343b94d666e46c0"}, + {file = "gmpy2-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:85614559144edad1223a46cae4a3e965818022cb2bb44438f3c42406395a9eb7"}, + {file = "gmpy2-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:29441b7d31ea60c93249667c6ef33f2560d34ce3cf284d7e4e32e91ed1f9ac1b"}, + {file = "gmpy2-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:8946dc912c647f7cd29a587339c9e79860d9b34a3a59cbdc04d6d6fe20cfff39"}, + {file = "gmpy2-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58097d7ef48f3eabc86e55ca078d3eee5fa3574d9d585f944ee7bc0f00900864"}, + {file = "gmpy2-2.1.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa312ec90e643c8ed2224e204f43239c2e27d14261b349c84912c8858a54c5d5"}, + {file = "gmpy2-2.1.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac72073e7938c2307e7e4645367709a32036787f5e176c4acf881c7d8efff28"}, + {file = "gmpy2-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3245fd34217649f6c48515ef42da67eb43794f24a20fc961dc2c0c99bb8ebb39"}, + {file = "gmpy2-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9d64c1e1e66a2137617c361714022da3de75787d51bd1aed205eb28ddb362c"}, + {file = "gmpy2-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:81004086f2543399b6b425989fc96cc02dd38ab74dcbfd3acb324af1a6770eaf"}, + {file = "gmpy2-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:03beaccf3843c9e9d9cf70102a74cd1e617e792337b64ae73a417b80bf96b385"}, + {file = "gmpy2-2.1.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:131d441cc0e77620d88a900eaa6eee8648ba630621b8337b966cda76964e7662"}, + {file = "gmpy2-2.1.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:b6a04cfa85607b47e86eefe102b1124c6d0a8981f4197a3afd7071f0719ac9b6"}, + {file = "gmpy2-2.1.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:09800f5a7566093d74702ad31f775f176df539f1138f4475ba8edf11903a2b2b"}, + {file = "gmpy2-2.1.5-cp35-cp35m-win_amd64.whl", hash = "sha256:a3a61cd88aca0a891e26ada53f2bf3f4433d4fb1c771f12dec97e8edc17f9f7e"}, + {file = "gmpy2-2.1.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:411d1ea2f5a04d8857a7fe1e59d28d384f19232cb7519f29565c087bda364685"}, + {file = "gmpy2-2.1.5-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5fa902b1c6911d41e6045c94eac57cf2ea76f71946ca65ab65ae8f5d20b2aae"}, + {file = "gmpy2-2.1.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51b95d8e2d6914552118d0316c8ce566441b709e001e66c5db16495be1a429ac"}, + {file = "gmpy2-2.1.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7bbe8d39d83e96b5f81b26e65f99a3e8794cf1edfd891e154a233757a26764fb"}, + {file = "gmpy2-2.1.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e7f324dd859a1324bbc5d5375f431f1ac81c6487035a34cba12fbe8658a888f0"}, + {file = "gmpy2-2.1.5-cp36-cp36m-win_amd64.whl", hash = "sha256:c9e9909d12d06697867568007e9b945246f567116fa5b830513f72766ca8b0c7"}, + {file = "gmpy2-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4957d9164a8b2a93263e8a43f99c635a84c1a4044a256e1a496503dd624376a8"}, + {file = "gmpy2-2.1.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efda6e0508d0c7fe79d0fc3fccd3bab90937dba05384224cbc08398856805ce6"}, + {file = "gmpy2-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8f59c69dd138d84d471530e0907c254429855a839b93b00c7e9fa7ec766feae"}, + {file = "gmpy2-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:943078c7abef7757758bb0f313b4346cf9b0c91f93039b5980d22f2ee0d53177"}, + {file = "gmpy2-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c935af5fcd2fbd2ed89d0e0cf1c7fd11603101293dbddb46fd1325c56363573f"}, + {file = "gmpy2-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:18233c35d5bbddfe2ec8c269e216dc841ce24ba5f2b00e79e8278ba843eb22dc"}, + {file = "gmpy2-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6300a0e427bb8b12442db2629b7b271d4d0cd3dbffe2e3880c408932993d31ba"}, + {file = "gmpy2-2.1.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8d2299682455ee22830f7c0f5851a86ae121ccc5fca2f483be7229a91a2f3be5"}, + {file = "gmpy2-2.1.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f50d91d779fe24e7dd3feaa1c06e47e11452a73d0a8c67daeea055a6d58cf233"}, + {file = "gmpy2-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c398e6e5bb470f0529ca4e2490d5a396bc9c50c860818f297f47486e51e86673"}, + {file = "gmpy2-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cfdb61f87edf9a7897e7c3e9204f141ddb1de68ecb7038edf0c676bdea815ef2"}, + {file = "gmpy2-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:356c986799a3b34bdcf845961976398556bcfe104e115379effefc50b2cce320"}, + {file = "gmpy2-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:c40ed4d68e0b54efa53a9d9fe62662342dd85212f08382b852ca9effab2e7666"}, + {file = "gmpy2-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6131ccb4f34849b0fa54b9dd8261c00b16fcf4c3332696cb16469a21c217f884"}, + {file = "gmpy2-2.1.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2fee8bb2934300173d8de0ce670bdfedbb5b09817db94c2467aafa18380a1286"}, + {file = "gmpy2-2.1.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c23c98db9cccb63872dd32bdd98275c9503809117d8a23ddd683d8baa3e3ee67"}, + {file = "gmpy2-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2764dfc443c364b918506ecad8973a61b76ca0b5afdf460f940134166a2a3e7"}, + {file = "gmpy2-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4fccf90d28f934f76cc4252007d2e94cc38700ed016d3fd787974f79819381fd"}, + {file = "gmpy2-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0baf36b2724e154bf98ea17f4ff8234543dc7af7297ce3a0a7098bca0209b768"}, + {file = "gmpy2-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:8739ca54323ff28bc317920ed96723a13558a3c442ef77ac325eb3cdd5d32d05"}, + {file = "gmpy2-2.1.5.tar.gz", hash = "sha256:bc297f1fd8c377ae67a4f493fc0f926e5d1b157e5c342e30a4d84dc7b9f95d96"}, +] + +[[package]] +name = "google-ai-generativelanguage" +version = "0.6.1" +description = "Google Ai Generativelanguage API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-ai-generativelanguage-0.6.1.tar.gz", hash = "sha256:4abf37000718b20c43f4b90672b3ab8850738b02457efffd11f3184e03272ed2"}, + {file = "google_ai_generativelanguage-0.6.1-py3-none-any.whl", hash = "sha256:d2afc991c47663bdf65bd4aabcd89723550b81ad0a6d0be8bfb0160755da4cf0"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0dev" +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-api-core" +version = "2.18.0" +description = "Google API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-core-2.18.0.tar.gz", hash = "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9"}, + {file = "google_api_core-2.18.0-py3-none-any.whl", hash = "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +grpcio = [ + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, +] +grpcio-status = [ + {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, +] +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] + +[[package]] +name = "google-api-python-client" +version = "2.90.0" +description = "Google API Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-python-client-2.90.0.tar.gz", hash = "sha256:cbcb3ba8be37c6806676a49df16ac412077e5e5dc7fa967941eff977b31fba03"}, + {file = "google_api_python_client-2.90.0-py2.py3-none-any.whl", hash = "sha256:4a41ffb7797d4f28e44635fb1e7076240b741c6493e7c3233c0e4421cec7c913"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.19.0,<3.0.0.dev0" +google-auth-httplib2 = ">=0.1.0" +httplib2 = ">=0.15.0,<1.dev0" +uritemplate = ">=3.0.1,<5" + +[[package]] +name = "google-auth" +version = "2.29.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-auth-2.29.0.tar.gz", hash = "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360"}, + {file = "google_auth-2.29.0-py2.py3-none-any.whl", hash = "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "google-auth-httplib2" +version = "0.2.0" +description = "Google Authentication Library: httplib2 transport" +optional = false +python-versions = "*" +files = [ + {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, + {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, +] + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.19.0" + +[[package]] +name = "google-cloud-aiplatform" +version = "1.49.0" +description = "Vertex AI API client library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "google-cloud-aiplatform-1.49.0.tar.gz", hash = "sha256:e6e6d01079bb5def49e4be4db4d12b13c624b5c661079c869c13c855e5807429"}, + {file = "google_cloud_aiplatform-1.49.0-py2.py3-none-any.whl", hash = "sha256:8072d9e0c18d8942c704233d1a93b8d6312fc7b278786a283247950e28ae98df"}, +] + +[package.dependencies] +docstring-parser = "<1" +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-bigquery = ">=1.15.0,<3.20.0 || >3.20.0,<4.0.0dev" +google-cloud-resource-manager = ">=1.3.3,<3.0.0dev" +google-cloud-storage = ">=1.32.0,<3.0.0dev" +packaging = ">=14.3" +proto-plus = ">=1.22.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +pydantic = "<3" +shapely = "<3.0.0dev" + +[package.extras] +autologging = ["mlflow (>=1.27.0,<=2.1.1)"] +cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)"] +endpoint = ["requests (>=2.28.1)"] +full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"] +langchain = ["langchain (>=0.1.13,<0.2)", "langchain-core (<0.2)", "langchain-google-vertexai (<0.2)"] +langchain-testing = ["absl-py", "cloudpickle (>=2.2.1,<3.0)", "langchain (>=0.1.13,<0.2)", "langchain-core (<0.2)", "langchain-google-vertexai (<0.2)", "pydantic (>=2.6.3,<3)", "pytest-xdist"] +lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] +metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] +pipelines = ["pyyaml (>=5.3.1,<7)"] +prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<=0.109.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] +preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"] +private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] +rapid-evaluation = ["nest-asyncio (>=1.0.0,<1.6.0)", "pandas (>=1.0.0,<2.2.0)"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)"] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "ray[train] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "scikit-learn", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +reasoningengine = ["cloudpickle (>=2.2.1,<3.0)", "pydantic (>=2.6.3,<3)"] +tensorboard = ["tensorflow (>=2.3.0,<3.0.0dev)"] +testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] +vizier = ["google-vizier (>=0.1.6)"] +xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] + +[[package]] +name = "google-cloud-bigquery" +version = "3.24.0" +description = "Google BigQuery API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-bigquery-3.24.0.tar.gz", hash = "sha256:e95e6f6e0aa32e6c453d44e2b3298931fdd7947c309ea329a31b6ff1f939e17e"}, + {file = "google_cloud_bigquery-3.24.0-py2.py3-none-any.whl", hash = "sha256:bc08323ce99dee4e811b7c3d0cde8929f5bf0b1aeaed6bcd75fc89796dd87652"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-core = ">=1.6.0,<3.0.0dev" +google-resumable-media = ">=0.6.0,<3.0dev" +packaging = ">=20.0.0" +python-dateutil = ">=2.7.2,<3.0dev" +requests = ">=2.21.0,<3.0.0dev" + +[package.extras] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +bigquery-v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] +geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] +ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"] +ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] +opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] +tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] + +[[package]] +name = "google-cloud-core" +version = "2.4.1" +description = "Google Cloud API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, + {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, +] + +[package.dependencies] +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.25.0,<3.0dev" + +[package.extras] +grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] + +[[package]] +name = "google-cloud-resource-manager" +version = "1.12.3" +description = "Google Cloud Resource Manager API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-resource-manager-1.12.3.tar.gz", hash = "sha256:809851824119834e4f2310b2c4f38621c1d16b2bb14d5b9f132e69c79d355e7f"}, + {file = "google_cloud_resource_manager-1.12.3-py2.py3-none-any.whl", hash = "sha256:92be7d6959927b76d90eafc4028985c37975a46ded5466a018f02e8649e113d4"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0dev" +grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-cloud-storage" +version = "2.16.0" +description = "Google Cloud Storage API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-storage-2.16.0.tar.gz", hash = "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f"}, + {file = "google_cloud_storage-2.16.0-py2.py3-none-any.whl", hash = "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852"}, +] + +[package.dependencies] +google-api-core = ">=2.15.0,<3.0.0dev" +google-auth = ">=2.26.1,<3.0dev" +google-cloud-core = ">=2.3.0,<3.0dev" +google-crc32c = ">=1.0,<2.0dev" +google-resumable-media = ">=2.6.0" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +protobuf = ["protobuf (<5.0.0dev)"] + +[[package]] +name = "google-crc32c" +version = "1.5.0" +description = "A python wrapper of the C library 'Google CRC32C'" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"}, +] + +[package.extras] +testing = ["pytest"] + +[[package]] +name = "google-generativeai" +version = "0.5.0" +description = "Google Generative AI High level API client library and tools." +optional = false +python-versions = ">=3.9" +files = [ + {file = "google_generativeai-0.5.0-py3-none-any.whl", hash = "sha256:207ed12c6a2eeab549a45abbf5373c82077f62b16030bdb502556c78f6d1b5d2"}, +] + +[package.dependencies] +google-ai-generativelanguage = "0.6.1" +google-api-core = "*" +google-api-python-client = "*" +google-auth = ">=2.15.0" +protobuf = "*" +pydantic = "*" +tqdm = "*" +typing-extensions = "*" + +[package.extras] +dev = ["Pillow", "absl-py", "black", "ipython", "nose2", "pandas", "pytype", "pyyaml"] + +[[package]] +name = "google-resumable-media" +version = "2.7.0" +description = "Utilities for Google Media Downloads and Resumable Uploads" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"}, + {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"}, +] + +[package.dependencies] +google-crc32c = ">=1.0,<2.0dev" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] +requests = ["requests (>=2.18.0,<3.0.0dev)"] + +[[package]] +name = "google-search-results" +version = "2.4.2" +description = "Scrape and search localized results from Google, Bing, Baidu, Yahoo, Yandex, Ebay, Homedepot, youtube at scale using SerpApi.com" +optional = false +python-versions = ">=3.5" +files = [ + {file = "google_search_results-2.4.2.tar.gz", hash = "sha256:603a30ecae2af8e600b22635757a6df275dad4b934f975e67878ccd640b78245"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "googleapis-common-protos" +version = "1.63.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis-common-protos-1.63.0.tar.gz", hash = "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e"}, + {file = "googleapis_common_protos-1.63.0-py2.py3-none-any.whl", hash = "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632"}, +] + +[package.dependencies] +grpcio = {version = ">=1.44.0,<2.0.0.dev0", optional = true, markers = "extra == \"grpc\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + +[[package]] +name = "greenlet" +version = "3.0.3" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, + {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, + {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, + {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, + {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, + {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, + {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, + {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, + {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, + {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, + {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, + {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, + {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, + {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, + {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, + {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "grpc-google-iam-v1" +version = "0.13.0" +description = "IAM API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpc-google-iam-v1-0.13.0.tar.gz", hash = "sha256:fad318608b9e093258fbf12529180f400d1c44453698a33509cc6ecf005b294e"}, + {file = "grpc_google_iam_v1-0.13.0-py2.py3-none-any.whl", hash = "sha256:53902e2af7de8df8c1bd91373d9be55b0743ec267a7428ea638db3775becae89"}, +] + +[package.dependencies] +googleapis-common-protos = {version = ">=1.56.0,<2.0.0dev", extras = ["grpc"]} +grpcio = ">=1.44.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "grpcio" +version = "1.58.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.58.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:3e6bebf1dfdbeb22afd95650e4f019219fef3ab86d3fca8ebade52e4bc39389a"}, + {file = "grpcio-1.58.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cde11577d5b6fd73a00e6bfa3cf5f428f3f33c2d2878982369b5372bbc4acc60"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a2d67ff99e70e86b2be46c1017ae40b4840d09467d5455b2708de6d4c127e143"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ed979b273a81de36fc9c6716d9fb09dd3443efa18dcc8652501df11da9583e9"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:458899d2ebd55d5ca2350fd3826dfd8fcb11fe0f79828ae75e2b1e6051d50a29"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc7ffef430b80345729ff0a6825e9d96ac87efe39216e87ac58c6c4ef400de93"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5b23d75e5173faa3d1296a7bedffb25afd2fddb607ef292dfc651490c7b53c3d"}, + {file = "grpcio-1.58.0-cp310-cp310-win32.whl", hash = "sha256:fad9295fe02455d4f158ad72c90ef8b4bcaadfdb5efb5795f7ab0786ad67dd58"}, + {file = "grpcio-1.58.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc325fed4d074367bebd465a20763586e5e1ed5b943e9d8bc7c162b1f44fd602"}, + {file = "grpcio-1.58.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:652978551af02373a5a313e07bfef368f406b5929cf2d50fa7e4027f913dbdb4"}, + {file = "grpcio-1.58.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:9f13a171281ebb4d7b1ba9f06574bce2455dcd3f2f6d1fbe0fd0d84615c74045"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8774219e21b05f750eef8adc416e9431cf31b98f6ce9def288e4cea1548cbd22"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09206106848462763f7f273ca93d2d2d4d26cab475089e0de830bb76be04e9e8"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62831d5e251dd7561d9d9e83a0b8655084b2a1f8ea91e4bd6b3cedfefd32c9d2"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:212f38c6a156862098f6bdc9a79bf850760a751d259d8f8f249fc6d645105855"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4b12754af201bb993e6e2efd7812085ddaaef21d0a6f0ff128b97de1ef55aa4a"}, + {file = "grpcio-1.58.0-cp311-cp311-win32.whl", hash = "sha256:3886b4d56bd4afeac518dbc05933926198aa967a7d1d237a318e6fbc47141577"}, + {file = "grpcio-1.58.0-cp311-cp311-win_amd64.whl", hash = "sha256:002f228d197fea12797a14e152447044e14fb4fdb2eb5d6cfa496f29ddbf79ef"}, + {file = "grpcio-1.58.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b5e8db0aff0a4819946215f156bd722b6f6c8320eb8419567ffc74850c9fd205"}, + {file = "grpcio-1.58.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:201e550b7e2ede113b63e718e7ece93cef5b0fbf3c45e8fe4541a5a4305acd15"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d79b660681eb9bc66cc7cbf78d1b1b9e335ee56f6ea1755d34a31108b80bd3c8"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ef8d4a76d2c7d8065aba829f8d0bc0055495c998dce1964ca5b302d02514fb3"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cba491c638c76d3dc6c191d9c75041ca5b8f5c6de4b8327ecdcab527f130bb4"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6801ff6652ecd2aae08ef994a3e49ff53de29e69e9cd0fd604a79ae4e545a95c"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:24edec346e69e672daf12b2c88e95c6f737f3792d08866101d8c5f34370c54fd"}, + {file = "grpcio-1.58.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7e473a7abad9af48e3ab5f3b5d237d18208024d28ead65a459bd720401bd2f8f"}, + {file = "grpcio-1.58.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:4891bbb4bba58acd1d620759b3be11245bfe715eb67a4864c8937b855b7ed7fa"}, + {file = "grpcio-1.58.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:e9f995a8a421405958ff30599b4d0eec244f28edc760de82f0412c71c61763d2"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2f85f87e2f087d9f632c085b37440a3169fda9cdde80cb84057c2fc292f8cbdf"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb6b92036ff312d5b4182fa72e8735d17aceca74d0d908a7f08e375456f03e07"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d81c2b2b24c32139dd2536972f1060678c6b9fbd106842a9fcdecf07b233eccd"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fbcecb6aedd5c1891db1d70efbfbdc126c986645b5dd616a045c07d6bd2dfa86"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92ae871a902cf19833328bd6498ec007b265aabf2fda845ab5bd10abcaf4c8c6"}, + {file = "grpcio-1.58.0-cp38-cp38-win32.whl", hash = "sha256:dc72e04620d49d3007771c0e0348deb23ca341c0245d610605dddb4ac65a37cb"}, + {file = "grpcio-1.58.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c1c5238c6072470c7f1614bf7c774ffde6b346a100521de9ce791d1e4453afe"}, + {file = "grpcio-1.58.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fe643af248442221db027da43ed43e53b73e11f40c9043738de9a2b4b6ca7697"}, + {file = "grpcio-1.58.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:128eb1f8e70676d05b1b0c8e6600320fc222b3f8c985a92224248b1367122188"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:039003a5e0ae7d41c86c768ef8b3ee2c558aa0a23cf04bf3c23567f37befa092"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f061722cad3f9aabb3fbb27f3484ec9d4667b7328d1a7800c3c691a98f16bb0"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0af11938acf8cd4cf815c46156bcde36fa5850518120920d52620cc3ec1830"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d4cef77ad2fed42b1ba9143465856d7e737279854e444925d5ba45fc1f3ba727"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24765a627eb4d9288ace32d5104161c3654128fe27f2808ecd6e9b0cfa7fc8b9"}, + {file = "grpcio-1.58.0-cp39-cp39-win32.whl", hash = "sha256:f0241f7eb0d2303a545136c59bc565a35c4fc3b924ccbd69cb482f4828d6f31c"}, + {file = "grpcio-1.58.0-cp39-cp39-win_amd64.whl", hash = "sha256:dcfba7befe3a55dab6fe1eb7fc9359dc0c7f7272b30a70ae0af5d5b063842f28"}, + {file = "grpcio-1.58.0.tar.gz", hash = "sha256:532410c51ccd851b706d1fbc00a87be0f5312bd6f8e5dbf89d4e99c7f79d7499"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.58.0)"] + +[[package]] +name = "grpcio-status" +version = "1.58.0" +description = "Status proto mapping for gRPC" +optional = false +python-versions = ">=3.6" +files = [ + {file = "grpcio-status-1.58.0.tar.gz", hash = "sha256:0b42e70c0405a66a82d9e9867fa255fe59e618964a6099b20568c31dd9099766"}, + {file = "grpcio_status-1.58.0-py3-none-any.whl", hash = "sha256:36d46072b71a00147709ebce49344ac59b4b8960942acf0f813a8a7d6c1c28e0"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.5.5" +grpcio = ">=1.58.0" +protobuf = ">=4.21.6" + +[[package]] +name = "grpcio-tools" +version = "1.58.0" +description = "Protobuf code generator for gRPC" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-tools-1.58.0.tar.gz", hash = "sha256:6f4d80ceb591e31ca4dceec747dbe56132e1392a0a9bb1c8fe001d1b5cac898a"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:60c874908f3b40f32f1bb0221f7b3ab65ecb53a4d0a9f0a394f031f1b292c177"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:1852e798f31e5437ca7b37abc910e028b34732fb19364862cedb87b1dab66fad"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:149fb48f53cb691a6328f68bed8e4036c730f7106b7f98e92c2c0403f0b9e93c"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba3d383e5ca93826038b70f326fce8e8d12dd9b2f64d363a3d612f7475f12dd2"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6997511e9d2979f7a2389479682dbb06823f21a904e8fb0a5c6baaf1b4b4a863"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8de0b701da479643f71fad71fe66885cddd89441ae16e2c724939b47742dc72e"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43cc23908b63fcaefe690b10f68a2d8652c994b5b36ab77d2271d9608c895320"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-win32.whl", hash = "sha256:2c2221123d010dc6231799e63a37f2f4786bf614ef65b23009c387cd20d8b193"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-win_amd64.whl", hash = "sha256:df2788736bdf58abe7b0e4d6b1ff806f7686c98c5ad900da312252e3322d91c4"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:b6ea5578712cdb29b0ff60bfc6405bf0e8d681b9c71d106dd1cda54fe7fe4e55"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:c29880f491581c83181c0a84a4d11402af2b13166a5266f64e246adf1da7aa66"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:32d51e933c3565414dd0835f930bb28a1cdeba435d9d2c87fa3cf8b1d284db3c"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ad9d77f25514584b1ddc981d70c9e50dfcfc388aa5ba943eee67520c5267ed9"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4882382631e6352819059278a5c878ce0b067008dd490911d16d5616e8a36d85"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d84091a189d848d94645b7c48b61734c12ec03b0d46e5fc0049343a26989ac5c"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:85ac28a9621e9b92a3fc416288c4ce45542db0b4c31b3e23031dd8e0a0ec5590"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-win32.whl", hash = "sha256:7371d8ea80234b29affec145e25569523f549520ed7e53b2aa92bed412cdecfd"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-win_amd64.whl", hash = "sha256:6997df6e7c5cf4d3ddc764240c1ff6a04b45d70ec28913b38fbc6396ef743e12"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:ac65b8d6e3acaf88b815edf9af88ff844b6600ff3d2591c05ba4f655b45d5fb4"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:88e8191d0dd789bebf42533808728f5ce75d2c51e2a72bdf20abe5b5e3fbec42"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:a3dbece2a121761499a659b799979d4b738586d1065439053de553773eee11ca"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1086fe240c4c879b9721952b47d46996deb283c2d9355a8dc24a804811aacf70"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ae3dca059d5b358dd03fb63277428fa7d771605d4074a019138dd38d70719a"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3f8904ac7fc3da2e874f00b3a986e8b7e004f499344a8e7eb213c26dfb025041"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:aadbd8393ae332e49731adb31e741f2e689989150569b7acc939f5ea43124e2d"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1cb6e24194786687d4f23c64de1f0ce553af51de22746911bc37340f85f9783e"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:6ec43909095c630df3e479e77469bdad367067431f4af602f6ccb978a3b78afd"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:4be49ed320b0ebcbc21d19ef555fbf229c1c452105522b728e1171ee2052078e"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:28eefebddec3d3adf19baca78f8b82a2287d358e1b1575ae018cdca8eacc6269"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ef8c696e9d78676cc3f583a92bbbf2c84e94e350f7ad22f150a52559f4599d1"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aeb5949e46558d21c51fd3ec3eeecc59c94dbca76c67c0a80d3da6b7437930c"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f7144aad9396d35fb1b80429600a970b559c2ad4d07020eeb180fe83cea2bee"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4ee26e9253a721fff355737649678535f76cf5d642aa3ac0cd937832559b90af"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-win32.whl", hash = "sha256:343f572312039059a8797d6e29a7fc62196e73131ab01755660a9d48202267c1"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-win_amd64.whl", hash = "sha256:cd7acfbb43b7338a78cf4a67528d05530d574d92b7c829d185b78dfc451d158f"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:46628247fbce86d18232eead24bd22ed0826c79f3fe2fc2fbdbde45971361049"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:51587842a54e025a3d0d37afcf4ef2b7ac1def9a5d17448665cb424b53d6c287"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:a062ae3072a2a39a3c057f4d68b57b021f1dd2956cd09aab39709f6af494e1de"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eec3c93a08df11c80ef1c29a616bcbb0d83dbc6ea41b48306fcacc720416dfa7"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b63f823ac991ff77104da614d2a2485a59d37d57830eb2e387a6e2a3edc7fa2b"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:579c11a9f198847ed48dbc4f211c67fe96a73320b87c81f01b044b72e24a7d77"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2fc1dd8049d417a5034d944c9df05cee76f855b3e431627ab4292e7c01c47"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-win32.whl", hash = "sha256:453023120114c35d3d9d6717ea0820e5d5c140f51f9d0b621de4397ff854471b"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-win_amd64.whl", hash = "sha256:b6c896f1df99c35cf062d4803c15663ff00a33ff09add28baa6e475cf6b5e258"}, +] + +[package.dependencies] +grpcio = ">=1.58.0" +protobuf = ">=4.21.6,<5.0dev" +setuptools = "*" + +[[package]] +name = "gunicorn" +version = "22.0.0" +description = "WSGI HTTP Server for UNIX" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gunicorn-22.0.0-py3-none-any.whl", hash = "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9"}, + {file = "gunicorn-22.0.0.tar.gz", hash = "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +eventlet = ["eventlet (>=0.24.1,!=0.36.0)"] +gevent = ["gevent (>=1.4.0)"] +setproctitle = ["setproctitle"] +testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] +tornado = ["tornado (>=0.2)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "h2" +version = "4.1.0" +description = "HTTP/2 State-Machine based protocol implementation" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, + {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, +] + +[package.dependencies] +hpack = ">=4.0,<5" +hyperframe = ">=6.0,<7" + +[[package]] +name = "hiredis" +version = "2.3.2" +description = "Python wrapper for hiredis" +optional = false +python-versions = ">=3.7" +files = [ + {file = "hiredis-2.3.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:742093f33d374098aa21c1696ac6e4874b52658c870513a297a89265a4d08fe5"}, + {file = "hiredis-2.3.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:9e14fb70ca4f7efa924f508975199353bf653f452e4ef0a1e47549e208f943d7"}, + {file = "hiredis-2.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d7302b4b17fcc1cc727ce84ded7f6be4655701e8d58744f73b09cb9ed2b13df"}, + {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed63e8b75c193c5e5a8288d9d7b011da076cc314fafc3bfd59ec1d8a750d48c8"}, + {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b4edee59dc089bc3948f4f6fba309f51aa2ccce63902364900aa0a553a85e97"}, + {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6481c3b7673a86276220140456c2a6fbfe8d1fb5c613b4728293c8634134824"}, + {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684840b014ce83541a087fcf2d48227196576f56ae3e944d4dfe14c0a3e0ccb7"}, + {file = "hiredis-2.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c4c0bcf786f0eac9593367b6279e9b89534e008edbf116dcd0de956524702c8"}, + {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66ab949424ac6504d823cba45c4c4854af5c59306a1531edb43b4dd22e17c102"}, + {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:322c668ee1c12d6c5750a4b1057e6b4feee2a75b3d25d630922a463cfe5e7478"}, + {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bfa73e3f163c6e8b2ec26f22285d717a5f77ab2120c97a2605d8f48b26950dac"}, + {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7f39f28ffc65de577c3bc0c7615f149e35bc927802a0f56e612db9b530f316f9"}, + {file = "hiredis-2.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:55ce31bf4711da879b96d511208efb65a6165da4ba91cb3a96d86d5a8d9d23e6"}, + {file = "hiredis-2.3.2-cp310-cp310-win32.whl", hash = "sha256:3dd63d0bbbe75797b743f35d37a4cca7ca7ba35423a0de742ae2985752f20c6d"}, + {file = "hiredis-2.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:ea002656a8d974daaf6089863ab0a306962c8b715db6b10879f98b781a2a5bf5"}, + {file = "hiredis-2.3.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:adfbf2e9c38b77d0db2fb32c3bdaea638fa76b4e75847283cd707521ad2475ef"}, + {file = "hiredis-2.3.2-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:80b02d27864ebaf9b153d4b99015342382eeaed651f5591ce6f07e840307c56d"}, + {file = "hiredis-2.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd40d2e2f82a483de0d0a6dfd8c3895a02e55e5c9949610ecbded18188fd0a56"}, + {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfa904045d7cebfb0f01dad51352551cce1d873d7c3f80c7ded7d42f8cac8f89"}, + {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:28bd184b33e0dd6d65816c16521a4ba1ffbe9ff07d66873c42ea4049a62fed83"}, + {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f70481213373d44614148f0f2e38e7905be3f021902ae5167289413196de4ba4"}, + {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb8797b528c1ff81eef06713623562b36db3dafa106b59f83a6468df788ff0d1"}, + {file = "hiredis-2.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02fc71c8333586871602db4774d3a3e403b4ccf6446dc4603ec12df563127cee"}, + {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0da56915bda1e0a49157191b54d3e27689b70960f0685fdd5c415dacdee2fbed"}, + {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e2674a5a3168349435b08fa0b82998ed2536eb9acccf7087efe26e4cd088a525"}, + {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:dc1c3fd49930494a67dcec37d0558d99d84eca8eb3f03b17198424538f2608d7"}, + {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:14c7b43205e515f538a9defb4e411e0f0576caaeeda76bb9993ed505486f7562"}, + {file = "hiredis-2.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7bac7e02915b970c3723a7a7c5df4ba7a11a3426d2a3f181e041aa506a1ff028"}, + {file = "hiredis-2.3.2-cp311-cp311-win32.whl", hash = "sha256:63a090761ddc3c1f7db5e67aa4e247b4b3bb9890080bdcdadd1b5200b8b89ac4"}, + {file = "hiredis-2.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d226ab0306a5b8d408235cabe51d4bf3554c9e8a72d53ce0b3c5c84cf78881"}, + {file = "hiredis-2.3.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:5c614552c6bd1d0d907f448f75550f6b24fb56cbfce80c094908b7990cad9702"}, + {file = "hiredis-2.3.2-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9c431431abf55b64347ddc8df68b3ef840269cb0aa5bc2d26ad9506eb4b1b866"}, + {file = "hiredis-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a45857e87e9d2b005e81ddac9d815a33efd26ec67032c366629f023fe64fb415"}, + {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e138d141ec5a6ec800b6d01ddc3e5561ce1c940215e0eb9960876bfde7186aae"}, + {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:387f655444d912a963ab68abf64bf6e178a13c8e4aa945cb27388fd01a02e6f1"}, + {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4852f4bf88f0e2d9bdf91279892f5740ed22ae368335a37a52b92a5c88691140"}, + {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d711c107e83117129b7f8bd08e9820c43ceec6204fff072a001fd82f6d13db9f"}, + {file = "hiredis-2.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92830c16885f29163e1c2da1f3c1edb226df1210ec7e8711aaabba3dd0d5470a"}, + {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:16b01d9ceae265d4ab9547be0cd628ecaff14b3360357a9d30c029e5ae8b7e7f"}, + {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5986fb5f380169270a0293bebebd95466a1c85010b4f1afc2727e4d17c452512"}, + {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:49532d7939cc51f8e99efc326090c54acf5437ed88b9c904cc8015b3c4eda9c9"}, + {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8f34801b251ca43ad70691fb08b606a2e55f06b9c9fb1fc18fd9402b19d70f7b"}, + {file = "hiredis-2.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7298562a49d95570ab1c7fc4051e72824c6a80e907993a21a41ba204223e7334"}, + {file = "hiredis-2.3.2-cp312-cp312-win32.whl", hash = "sha256:e1d86b75de787481b04d112067a4033e1ecfda2a060e50318a74e4e1c9b2948c"}, + {file = "hiredis-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:6dbfe1887ffa5cf3030451a56a8f965a9da2fa82b7149357752b67a335a05fc6"}, + {file = "hiredis-2.3.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:4fc242e9da4af48714199216eb535b61e8f8d66552c8819e33fc7806bd465a09"}, + {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e81aa4e9a1fcf604c8c4b51aa5d258e195a6ba81efe1da82dea3204443eba01c"}, + {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419780f8583ddb544ffa86f9d44a7fcc183cd826101af4e5ffe535b6765f5f6b"}, + {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6871306d8b98a15e53a5f289ec1106a3a1d43e7ab6f4d785f95fcef9a7bd9504"}, + {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb0b35b63717ef1e41d62f4f8717166f7c6245064957907cfe177cc144357c"}, + {file = "hiredis-2.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c490191fa1218851f8a80c5a21a05a6f680ac5aebc2e688b71cbfe592f8fec6"}, + {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4baf4b579b108062e91bd2a991dc98b9dc3dc06e6288db2d98895eea8acbac22"}, + {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e627d8ef5e100556e09fb44c9571a432b10e11596d3c4043500080ca9944a91a"}, + {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:ba3dc0af0def8c21ce7d903c59ea1e8ec4cb073f25ece9edaec7f92a286cd219"}, + {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:56e9b7d6051688ca94e68c0c8a54a243f8db841911b683cedf89a29d4de91509"}, + {file = "hiredis-2.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:380e029bb4b1d34cf560fcc8950bf6b57c2ef0c9c8b7c7ac20b7c524a730fadd"}, + {file = "hiredis-2.3.2-cp37-cp37m-win32.whl", hash = "sha256:948d9f2ca7841794dd9b204644963a4bcd69ced4e959b0d4ecf1b8ce994a6daa"}, + {file = "hiredis-2.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:cfa67afe2269b2d203cd1389c00c5bc35a287cd57860441fb0e53b371ea6a029"}, + {file = "hiredis-2.3.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bcbe47da0aebc00a7cfe3ebdcff0373b86ce2b1856251c003e3d69c9db44b5a7"}, + {file = "hiredis-2.3.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f2c9c0d910dd3f7df92f0638e7f65d8edd7f442203caf89c62fc79f11b0b73f8"}, + {file = "hiredis-2.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:01b6c24c0840ac7afafbc4db236fd55f56a9a0919a215c25a238f051781f4772"}, + {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f567489f422d40c21e53212a73bef4638d9f21043848150f8544ef1f3a6ad1"}, + {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:28adecb308293e705e44087a1c2d557a816f032430d8a2a9bb7873902a1c6d48"}, + {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27e9619847e9dc70b14b1ad2d0fb4889e7ca18996585c3463cff6c951fd6b10b"}, + {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a0026cfbf29f07649b0e34509091a2a6016ff8844b127de150efce1c3aff60b"}, + {file = "hiredis-2.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9de7586522e5da6bee83c9cf0dcccac0857a43249cb4d721a2e312d98a684d1"}, + {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e58494f282215fc461b06709e9a195a24c12ba09570f25bdf9efb036acc05101"}, + {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3a32b4b76d46f1eb42b24a918d51d8ca52411a381748196241d59a895f7c5c"}, + {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1979334ccab21a49c544cd1b8d784ffb2747f99a51cb0bd0976eebb517628382"}, + {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0c0773266e1c38a06e7593bd08870ac1503f5f0ce0f5c63f2b4134b090b5d6a4"}, + {file = "hiredis-2.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bd1cee053416183adcc8e6134704c46c60c3f66b8faaf9e65bf76191ca59a2f7"}, + {file = "hiredis-2.3.2-cp38-cp38-win32.whl", hash = "sha256:5341ce3d01ef3c7418a72e370bf028c7aeb16895e79e115fe4c954fff990489e"}, + {file = "hiredis-2.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:8fc7197ff33047ce43a67851ccf190acb5b05c52fd4a001bb55766358f04da68"}, + {file = "hiredis-2.3.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:f47775e27388b58ce52f4f972f80e45b13c65113e9e6b6bf60148f893871dc9b"}, + {file = "hiredis-2.3.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:9412a06b8a8e09abd6313d96864b6d7713c6003a365995a5c70cfb9209df1570"}, + {file = "hiredis-2.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3020b60e3fc96d08c2a9b011f1c2e2a6bdcc09cb55df93c509b88be5cb791df"}, + {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53d0f2c59bce399b8010a21bc779b4f8c32d0f582b2284ac8c98dc7578b27bc4"}, + {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57c0d0c7e308ed5280a4900d4468bbfec51f0e1b4cde1deae7d4e639bc6b7766"}, + {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d63318ca189fddc7e75f6a4af8eae9c0545863619fb38cfba5f43e81280b286"}, + {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e741ffe4e2db78a1b9dd6e5d29678ce37fbaaf65dfe132e5b82a794413302ef1"}, + {file = "hiredis-2.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb98038ccd368e0d88bd92ee575c58cfaf33e77f788c36b2a89a84ee1936dc6b"}, + {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:eae62ed60d53b3561148bcd8c2383e430af38c0deab9f2dd15f8874888ffd26f"}, + {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ca33c175c1cf60222d9c6d01c38fc17ec3a484f32294af781de30226b003e00f"}, + {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c5f6972d2bdee3cd301d5c5438e31195cf1cabf6fd9274491674d4ceb46914d"}, + {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a6b54dabfaa5dbaa92f796f0c32819b4636e66aa8e9106c3d421624bd2a2d676"}, + {file = "hiredis-2.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e96cd35df012a17c87ae276196ea8f215e77d6eeca90709eb03999e2d5e3fd8a"}, + {file = "hiredis-2.3.2-cp39-cp39-win32.whl", hash = "sha256:63b99b5ea9fe4f21469fb06a16ca5244307678636f11917359e3223aaeca0b67"}, + {file = "hiredis-2.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a50c8af811b35b8a43b1590cf890b61ff2233225257a3cad32f43b3ec7ff1b9f"}, + {file = "hiredis-2.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e8bf4444b09419b77ce671088db9f875b26720b5872d97778e2545cd87dba4a"}, + {file = "hiredis-2.3.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bd42d0d45ea47a2f96babd82a659fbc60612ab9423a68e4a8191e538b85542a"}, + {file = "hiredis-2.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80441b55edbef868e2563842f5030982b04349408396e5ac2b32025fb06b5212"}, + {file = "hiredis-2.3.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec444ab8f27562a363672d6a7372bc0700a1bdc9764563c57c5f9efa0e592b5f"}, + {file = "hiredis-2.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f9f606e810858207d4b4287b4ef0dc622c2aa469548bf02b59dcc616f134f811"}, + {file = "hiredis-2.3.2-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c3dde4ca00fe9eee3b76209711f1941bb86db42b8a75d7f2249ff9dfc026ab0e"}, + {file = "hiredis-2.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4dd676107a1d3c724a56a9d9db38166ad4cf44f924ee701414751bd18a784a0"}, + {file = "hiredis-2.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce42649e2676ad783186264d5ffc788a7612ecd7f9effb62d51c30d413a3eefe"}, + {file = "hiredis-2.3.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e3f8b1733078ac663dad57e20060e16389a60ab542f18a97931f3a2a2dd64a4"}, + {file = "hiredis-2.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:532a84a82156a82529ec401d1c25d677c6543c791e54a263aa139541c363995f"}, + {file = "hiredis-2.3.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4d59f88c4daa36b8c38e59ac7bffed6f5d7f68eaccad471484bf587b28ccc478"}, + {file = "hiredis-2.3.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91a14dd95e24dc078204b18b0199226ee44644974c645dc54ee7b00c3157330"}, + {file = "hiredis-2.3.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb777a38797c8c7df0444533119570be18d1a4ce5478dffc00c875684df7bfcb"}, + {file = "hiredis-2.3.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d47c915897a99d0d34a39fad4be97b4b709ab3d0d3b779ebccf2b6024a8c681e"}, + {file = "hiredis-2.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:333b5e04866758b11bda5f5315b4e671d15755fc6ed3b7969721bc6311d0ee36"}, + {file = "hiredis-2.3.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c8937f1100435698c18e4da086968c4b5d70e86ea718376f833475ab3277c9aa"}, + {file = "hiredis-2.3.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa45f7d771094b8145af10db74704ab0f698adb682fbf3721d8090f90e42cc49"}, + {file = "hiredis-2.3.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d5ebc93c39aed4b5bc769f8ce0819bc50e74bb95d57a35f838f1c4378978e0"}, + {file = "hiredis-2.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a797d8c7df9944314d309b0d9e1b354e2fa4430a05bb7604da13b6ad291bf959"}, + {file = "hiredis-2.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e15a408f71a6c8c87b364f1f15a6cd9c1baca12bbc47a326ac8ab99ec7ad3c64"}, + {file = "hiredis-2.3.2.tar.gz", hash = "sha256:733e2456b68f3f126ddaf2cd500a33b25146c3676b97ea843665717bda0c5d43"}, +] + +[[package]] +name = "hpack" +version = "4.0.0" +description = "Pure-Python HPACK header compression" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, + {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, +] + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["chardet (>=2.2)", "genshi", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + +[[package]] +name = "httpcore" +version = "0.17.3" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.7" +files = [ + {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, + {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, +] + +[package.dependencies] +anyio = ">=3.0,<5.0" +certifi = "*" +h11 = ">=0.13,<0.15" +sniffio = "==1.*" + +[package.extras] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "httplib2" +version = "0.22.0" +description = "A comprehensive HTTP client library." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, + {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, +] + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + +[[package]] +name = "httpx" +version = "0.24.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.7" +files = [ + {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, + {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, +] + +[package.dependencies] +certifi = "*" +h2 = {version = ">=3,<5", optional = true, markers = "extra == \"http2\""} +httpcore = ">=0.15.0,<0.18.0" +idna = "*" +sniffio = "*" +socksio = {version = "==1.*", optional = true, markers = "extra == \"socks\""} + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "huggingface-hub" +version = "0.16.4" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "huggingface_hub-0.16.4-py3-none-any.whl", hash = "sha256:0d3df29932f334fead024afc7cb4cc5149d955238b8b5e42dcf9740d6995a349"}, + {file = "huggingface_hub-0.16.4.tar.gz", hash = "sha256:608c7d4f3d368b326d1747f91523dbd1f692871e8e2e7a4750314a2dd8b63e14"}, +] + +[package.dependencies] +filelock = "*" +fsspec = "*" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +inference = ["aiohttp", "pydantic"] +quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["torch"] +typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] + +[[package]] +name = "hyperframe" +version = "6.0.1" +description = "HTTP/2 framing layer for Python" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, + {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, +] + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isodate" +version = "0.6.1" +description = "An ISO 8601 date/time/duration parser and formatter" +optional = false +python-versions = "*" +files = [ + {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, + {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "itsdangerous" +version = "2.2.0" +description = "Safely pass data to untrusted environments and back." +optional = false +python-versions = ">=3.8" +files = [ + {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, + {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, +] + +[[package]] +name = "jieba" +version = "0.42.1" +description = "Chinese Words Segmentation Utilities" +optional = false +python-versions = "*" +files = [ + {file = "jieba-0.42.1.tar.gz", hash = "sha256:055ca12f62674fafed09427f176506079bc135638a14e23e25be909131928db2"}, +] + +[[package]] +name = "jieba3k" +version = "0.35.1" +description = "Chinese Words Segementation Utilities" +optional = false +python-versions = "*" +files = [ + {file = "jieba3k-0.35.1.zip", hash = "sha256:980a4f2636b778d312518066be90c7697d410dd5a472385f5afced71a2db1c10"}, +] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jmespath" +version = "0.10.0" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, + {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, +] + +[[package]] +name = "joblib" +version = "1.4.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, +] + +[[package]] +name = "kaleido" +version = "0.2.1" +description = "Static image export for web-based visualization libraries with zero dependencies" +optional = false +python-versions = "*" +files = [ + {file = "kaleido-0.2.1-py2.py3-none-macosx_10_11_x86_64.whl", hash = "sha256:ca6f73e7ff00aaebf2843f73f1d3bacde1930ef5041093fe76b83a15785049a7"}, + {file = "kaleido-0.2.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bb9a5d1f710357d5d432ee240ef6658a6d124c3e610935817b4b42da9c787c05"}, + {file = "kaleido-0.2.1-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:aa21cf1bf1c78f8fa50a9f7d45e1003c387bd3d6fe0a767cfbbf344b95bdc3a8"}, + {file = "kaleido-0.2.1-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:845819844c8082c9469d9c17e42621fbf85c2b237ef8a86ec8a8527f98b6512a"}, + {file = "kaleido-0.2.1-py2.py3-none-win32.whl", hash = "sha256:ecc72635860be616c6b7161807a65c0dbd9b90c6437ac96965831e2e24066552"}, + {file = "kaleido-0.2.1-py2.py3-none-win_amd64.whl", hash = "sha256:4670985f28913c2d063c5734d125ecc28e40810141bdb0a46f15b76c1d45f23c"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + +[[package]] +name = "kombu" +version = "5.3.7" +description = "Messaging library for Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "kombu-5.3.7-py3-none-any.whl", hash = "sha256:5634c511926309c7f9789f1433e9ed402616b56836ef9878f01bd59267b4c7a9"}, + {file = "kombu-5.3.7.tar.gz", hash = "sha256:011c4cd9a355c14a1de8d35d257314a1d2456d52b7140388561acac3cf1a97bf"}, +] + +[package.dependencies] +amqp = ">=5.1.1,<6.0.0" +vine = "*" + +[package.extras] +azureservicebus = ["azure-servicebus (>=7.10.0)"] +azurestoragequeues = ["azure-identity (>=1.12.0)", "azure-storage-queue (>=12.6.0)"] +confluentkafka = ["confluent-kafka (>=2.2.0)"] +consul = ["python-consul2"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +mongodb = ["pymongo (>=4.1.1)"] +msgpack = ["msgpack"] +pyro = ["pyro4"] +qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] +redis = ["redis (>=4.5.2,!=4.5.5,!=5.0.2)"] +slmq = ["softlayer-messaging (>=1.0.3)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] +yaml = ["PyYAML (>=3.10)"] +zookeeper = ["kazoo (>=2.8.0)"] + +[[package]] +name = "langdetect" +version = "1.0.9" +description = "Language detection library ported from Google's language-detection." +optional = false +python-versions = "*" +files = [ + {file = "langdetect-1.0.9-py2-none-any.whl", hash = "sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a"}, + {file = "langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "lxml" +version = "5.1.0" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=3.6" +files = [ + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, + {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, + {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, + {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, + {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, + {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, + {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, + {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, + {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, + {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, + {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, + {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, + {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, + {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, + {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, + {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, + {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, + {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.7)"] + +[[package]] +name = "mailchimp-transactional" +version = "1.0.56" +description = "Mailchimp Transactional API" +optional = false +python-versions = "*" +files = [ + {file = "mailchimp_transactional-1.0.56-py3-none-any.whl", hash = "sha256:a76ea88b90a2d47d8b5134586aabbd3a96c459f6066d8886748ab59e50de36eb"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +python-dateutil = ">=2.1" +requests = ">=2.23" +six = ">=1.10" +urllib3 = ">=1.23" + +[[package]] +name = "mako" +version = "1.3.5" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Mako-1.3.5-py3-none-any.whl", hash = "sha256:260f1dbc3a519453a9c856dedfe4beb4e50bd5a26d96386cb6c80856556bb91a"}, + {file = "Mako-1.3.5.tar.gz", hash = "sha256:48dbc20568c1d276a2698b36d968fa76161bf127194907ea6fc594fa81f943bc"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + +[[package]] +name = "markdown" +version = "3.5.2" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, + {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, +] + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "marshmallow" +version = "3.21.2" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = false +python-versions = ">=3.8" +files = [ + {file = "marshmallow-3.21.2-py3-none-any.whl", hash = "sha256:70b54a6282f4704d12c0a41599682c5c5450e843b9ec406308653b47c59648a1"}, + {file = "marshmallow-3.21.2.tar.gz", hash = "sha256:82408deadd8b33d56338d2182d455db632c6313aa2af61916672146bb32edc56"}, +] + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] +docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.3.7)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] +tests = ["pytest", "pytz", "simplejson"] + +[[package]] +name = "matplotlib" +version = "3.8.4" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, + {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, + {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, + {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, + {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, + {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, + {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, + {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, + {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, + {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, + {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.21" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[[package]] +name = "minio" +version = "7.2.7" +description = "MinIO Python SDK for Amazon S3 Compatible Cloud Storage" +optional = false +python-versions = "*" +files = [ + {file = "minio-7.2.7-py3-none-any.whl", hash = "sha256:59d1f255d852fe7104018db75b3bebbd987e538690e680f7c5de835e422de837"}, + {file = "minio-7.2.7.tar.gz", hash = "sha256:473d5d53d79f340f3cd632054d0c82d2f93177ce1af2eac34a235bea55708d98"}, +] + +[package.dependencies] +argon2-cffi = "*" +certifi = "*" +pycryptodome = "*" +typing-extensions = "*" +urllib3 = "*" + +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + +[[package]] +name = "msal" +version = "1.28.0" +description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." +optional = false +python-versions = ">=3.7" +files = [ + {file = "msal-1.28.0-py3-none-any.whl", hash = "sha256:3064f80221a21cd535ad8c3fafbb3a3582cd9c7e9af0bb789ae14f726a0ca99b"}, + {file = "msal-1.28.0.tar.gz", hash = "sha256:80bbabe34567cb734efd2ec1869b2d98195c927455369d8077b3c542088c5c9d"}, +] + +[package.dependencies] +cryptography = ">=0.6,<45" +PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} +requests = ">=2.0.0,<3" + +[package.extras] +broker = ["pymsalruntime (>=0.13.2,<0.15)"] + +[[package]] +name = "msal-extensions" +version = "1.1.0" +description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." +optional = false +python-versions = ">=3.7" +files = [ + {file = "msal-extensions-1.1.0.tar.gz", hash = "sha256:6ab357867062db7b253d0bd2df6d411c7891a0ee7308d54d1e4317c1d1c54252"}, + {file = "msal_extensions-1.1.0-py3-none-any.whl", hash = "sha256:01be9711b4c0b1a151450068eeb2c4f0997df3bba085ac299de3a66f585e382f"}, +] + +[package.dependencies] +msal = ">=0.4.1,<2.0.0" +packaging = "*" +portalocker = [ + {version = ">=1.0,<3", markers = "platform_system != \"Windows\""}, + {version = ">=1.6,<3", markers = "platform_system == \"Windows\""}, +] + +[[package]] +name = "msg-parser" +version = "1.2.0" +description = "This module enables reading, parsing and converting Microsoft Outlook MSG E-Mail files." +optional = false +python-versions = ">=3.4" +files = [ + {file = "msg_parser-1.2.0-py2.py3-none-any.whl", hash = "sha256:d47a2f0b2a359cb189fad83cc991b63ea781ecc70d91410324273fbf93e95375"}, + {file = "msg_parser-1.2.0.tar.gz", hash = "sha256:0de858d4fcebb6c8f6f028da83a17a20fe01cdce67c490779cf43b3b0162aa66"}, +] + +[package.dependencies] +olefile = ">=0.46" + +[package.extras] +rtf = ["compressed-rtf (>=1.0.5)"] + +[[package]] +name = "msrest" +version = "0.7.1" +description = "AutoRest swagger generator Python client runtime." +optional = false +python-versions = ">=3.6" +files = [ + {file = "msrest-0.7.1-py3-none-any.whl", hash = "sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32"}, + {file = "msrest-0.7.1.zip", hash = "sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9"}, +] + +[package.dependencies] +azure-core = ">=1.24.0" +certifi = ">=2017.4.17" +isodate = ">=0.6.0" +requests = ">=2.16,<3.0" +requests-oauthlib = ">=0.5.0" + +[package.extras] +async = ["aiodns", "aiohttp (>=3.0)"] + +[[package]] +name = "multidict" +version = "6.0.5" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, +] + +[[package]] +name = "multitasking" +version = "0.0.11" +description = "Non-blocking Python methods using decorators" +optional = false +python-versions = "*" +files = [ + {file = "multitasking-0.0.11-py3-none-any.whl", hash = "sha256:1e5b37a5f8fc1e6cfaafd1a82b6b1cc6d2ed20037d3b89c25a84f499bd7b3dd4"}, + {file = "multitasking-0.0.11.tar.gz", hash = "sha256:4d6bc3cc65f9b2dca72fb5a787850a88dae8f620c2b36ae9b55248e51bcd6026"}, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "newspaper3k" +version = "0.2.8" +description = "Simplified python article discovery & extraction." +optional = false +python-versions = "*" +files = [ + {file = "newspaper3k-0.2.8-py3-none-any.whl", hash = "sha256:44a864222633d3081113d1030615991c3dbba87239f6bbf59d91240f71a22e3e"}, + {file = "newspaper3k-0.2.8.tar.gz", hash = "sha256:9f1bd3e1fb48f400c715abf875cc7b0a67b7ddcd87f50c9aeeb8fcbbbd9004fb"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.4.1" +cssselect = ">=0.9.2" +feedfinder2 = ">=0.0.4" +feedparser = ">=5.2.1" +jieba3k = ">=0.35.1" +lxml = ">=3.6.0" +nltk = ">=3.2.1" +Pillow = ">=3.3.0" +python-dateutil = ">=2.5.3" +PyYAML = ">=3.11" +requests = ">=2.10.0" +tinysegmenter = "0.3" +tldextract = ">=2.0.1" + +[[package]] +name = "nltk" +version = "3.8.1" +description = "Natural Language Toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nltk-3.8.1-py3-none-any.whl", hash = "sha256:fd5c9109f976fa86bcadba8f91e47f5e9293bd034474752e92a520f81c93dda5"}, + {file = "nltk-3.8.1.zip", hash = "sha256:1834da3d0682cba4f2cede2f9aad6b0fafb6461ba451db0efb6f9c39798d64d3"}, +] + +[package.dependencies] +click = "*" +joblib = "*" +regex = ">=2021.8.3" +tqdm = "*" + +[package.extras] +all = ["matplotlib", "numpy", "pyparsing", "python-crfsuite", "requests", "scikit-learn", "scipy", "twython"] +corenlp = ["requests"] +machine-learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] +plot = ["matplotlib"] +tgrep = ["pyparsing"] +twitter = ["twython"] + +[[package]] +name = "numexpr" +version = "2.9.0" +description = "Fast numerical expression evaluator for NumPy" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numexpr-2.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c52b4ac54514f5d4d8ead66768810cd5f77aa198e6064213d9b5c7b2e1c97c35"}, + {file = "numexpr-2.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50f57bc333f285e8c46b1ce61c6e94ec9bb74e4ea0d674d1c6c6f4a286f64fe4"}, + {file = "numexpr-2.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:943ba141f3884ffafa3fa1a3ebf3cdda9e9688a67a3c91986e6eae13dc073d43"}, + {file = "numexpr-2.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee48acd6339748a65c0e32403b802ebfadd9cb0e3b602ba5889896238eafdd61"}, + {file = "numexpr-2.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:972e29b5cecc21466c5b177e38568372ab66aab1f053ae04690a49cea09e747d"}, + {file = "numexpr-2.9.0-cp310-cp310-win32.whl", hash = "sha256:520e55d75bd99c76e376b6326e35ecf44c5ce2635a5caed72799a3885fc49173"}, + {file = "numexpr-2.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:5615497c3f34b637fda9b571f7774b6a82f2367cc1364b7a4573068dd1aabcaa"}, + {file = "numexpr-2.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bffcbc55dea5a5f5255e2586da08f00929998820e6592ee717273a08ad021eb3"}, + {file = "numexpr-2.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:374dc6ca54b2af813cb15c2b34e85092dfeac1f73d51ec358dd81876bd9adcec"}, + {file = "numexpr-2.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:549afc1622296cca3478a132c6e0fb5e55a19e08d32bc0d5a415434824a9c157"}, + {file = "numexpr-2.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c618a5895e34db0a364dcdb9960084c080f93f9d377c45b1ca9c394c24b4e77"}, + {file = "numexpr-2.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:37a7dd36fd79a2b69c3fd2bc2b51ac8270bebc69cc96e6d78f1148e147fcbfa8"}, + {file = "numexpr-2.9.0-cp311-cp311-win32.whl", hash = "sha256:00dab81d49239ea5423861ad627097b44d10d802df5f883d1b00f742139c3349"}, + {file = "numexpr-2.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:0e2574cafb18373774f351cac45ed23b5b360d9ecd1dbf3c12dac6d6eefefc87"}, + {file = "numexpr-2.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9761195526a228e05eba400b8c484c94bbabfea853b9ea35ab8fa1bf415331b1"}, + {file = "numexpr-2.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f619e91034b346ea85a4e1856ff06011dcb7dce10a60eda75e74db90120f880"}, + {file = "numexpr-2.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2749bce1c48706d58894992634a43b8458c4ba9411191471c4565fa41e9979ec"}, + {file = "numexpr-2.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c31f621a625c7be602f92b027d90f2d3d60dcbc19b106e77fb04a4362152af"}, + {file = "numexpr-2.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b937861d13de67d440d54c85a835faed7572be5a6fd10d4f3bd4e66e157f"}, + {file = "numexpr-2.9.0-cp312-cp312-win32.whl", hash = "sha256:aa6298fb46bd7ec69911b5b80927a00663d066e719b29f48eb952d559bdd8371"}, + {file = "numexpr-2.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:8efd879839572bde5a38a1aa3ac23fd4dd9b956fb969bc5e43d1c403419e1e8c"}, + {file = "numexpr-2.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b04f12a6130094a251e3a8fff40130589c1c83be6d4eb223873bea14d8c8b630"}, + {file = "numexpr-2.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:977537f2a1cc843f888fb5f0507626f956ada674e4b3847168214a3f3c7446fa"}, + {file = "numexpr-2.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eae6c0c2d5682c02e8ac9c4287c2232c2443c9148b239df22500eaa3c5d73b7"}, + {file = "numexpr-2.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fae6828042b70c2f52a132bfcb9139da704274ed11b982fbf537f91c075d2ef"}, + {file = "numexpr-2.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c77392aea53f0700d60eb270ad63174b4ff10b04f8de92861101ca2129fee51"}, + {file = "numexpr-2.9.0-cp39-cp39-win32.whl", hash = "sha256:3b03a6cf37a72f5b52f2b962d7ac7f565bea8eaba83c3c4e5fcf8fbb6a938153"}, + {file = "numexpr-2.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:d655b6eacc4e81006b662cba014e4615a9ddd96881b8b4db4ad0d7f6d38069af"}, + {file = "numexpr-2.9.0.tar.gz", hash = "sha256:f21d12f6c432ce349089eb95342babf6629aebb3fddf187a4492d3aadaadaaf0"}, +] + +[package.dependencies] +numpy = ">=1.13.3" + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "olefile" +version = "0.47" +description = "Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f"}, + {file = "olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "openai" +version = "1.29.0" +description = "The official Python library for the openai API" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "openai-1.29.0-py3-none-any.whl", hash = "sha256:c61cd12376c84362d406341f9e2f9a9d6b81c082b133b44484dc0f43954496b1"}, + {file = "openai-1.29.0.tar.gz", hash = "sha256:d5a769f485610cff8bae14343fa45a8b1d346be3d541fa5b28ccd040dbc8baf8"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.7,<5" + +[package.extras] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] + +[[package]] +name = "openpyxl" +version = "3.1.2" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, + {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "orjson" +version = "3.10.3" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orjson-3.10.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9fb6c3f9f5490a3eb4ddd46fc1b6eadb0d6fc16fb3f07320149c3286a1409dd8"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:252124b198662eee80428f1af8c63f7ff077c88723fe206a25df8dc57a57b1fa"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f3e87733823089a338ef9bbf363ef4de45e5c599a9bf50a7a9b82e86d0228da"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8334c0d87103bb9fbbe59b78129f1f40d1d1e8355bbed2ca71853af15fa4ed3"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1952c03439e4dce23482ac846e7961f9d4ec62086eb98ae76d97bd41d72644d7"}, + {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0403ed9c706dcd2809f1600ed18f4aae50be263bd7112e54b50e2c2bc3ebd6d"}, + {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:382e52aa4270a037d41f325e7d1dfa395b7de0c367800b6f337d8157367bf3a7"}, + {file = "orjson-3.10.3-cp310-none-win32.whl", hash = "sha256:be2aab54313752c04f2cbaab4515291ef5af8c2256ce22abc007f89f42f49109"}, + {file = "orjson-3.10.3-cp310-none-win_amd64.whl", hash = "sha256:416b195f78ae461601893f482287cee1e3059ec49b4f99479aedf22a20b1098b"}, + {file = "orjson-3.10.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:73100d9abbbe730331f2242c1fc0bcb46a3ea3b4ae3348847e5a141265479700"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a12eee96e3ab828dbfcb4d5a0023aa971b27143a1d35dc214c176fdfb29b3"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520de5e2ef0b4ae546bea25129d6c7c74edb43fc6cf5213f511a927f2b28148b"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccaa0a401fc02e8828a5bedfd80f8cd389d24f65e5ca3954d72c6582495b4bcf"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7bc9e8bc11bac40f905640acd41cbeaa87209e7e1f57ade386da658092dc16"}, + {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3582b34b70543a1ed6944aca75e219e1192661a63da4d039d088a09c67543b08"}, + {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c23dfa91481de880890d17aa7b91d586a4746a4c2aa9a145bebdbaf233768d5"}, + {file = "orjson-3.10.3-cp311-none-win32.whl", hash = "sha256:1770e2a0eae728b050705206d84eda8b074b65ee835e7f85c919f5705b006c9b"}, + {file = "orjson-3.10.3-cp311-none-win_amd64.whl", hash = "sha256:93433b3c1f852660eb5abdc1f4dd0ced2be031ba30900433223b28ee0140cde5"}, + {file = "orjson-3.10.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a39aa73e53bec8d410875683bfa3a8edf61e5a1c7bb4014f65f81d36467ea098"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0943a96b3fa09bee1afdfccc2cb236c9c64715afa375b2af296c73d91c23eab2"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e852baafceff8da3c9defae29414cc8513a1586ad93e45f27b89a639c68e8176"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18566beb5acd76f3769c1d1a7ec06cdb81edc4d55d2765fb677e3eaa10fa99e0"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd2218d5a3aa43060efe649ec564ebedec8ce6ae0a43654b81376216d5ebd42"}, + {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cf20465e74c6e17a104ecf01bf8cd3b7b252565b4ccee4548f18b012ff2f8069"}, + {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba7f67aa7f983c4345eeda16054a4677289011a478ca947cd69c0a86ea45e534"}, + {file = "orjson-3.10.3-cp312-none-win32.whl", hash = "sha256:17e0713fc159abc261eea0f4feda611d32eabc35708b74bef6ad44f6c78d5ea0"}, + {file = "orjson-3.10.3-cp312-none-win_amd64.whl", hash = "sha256:4c895383b1ec42b017dd2c75ae8a5b862fc489006afde06f14afbdd0309b2af0"}, + {file = "orjson-3.10.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:be2719e5041e9fb76c8c2c06b9600fe8e8584e6980061ff88dcbc2691a16d20d"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0175a5798bdc878956099f5c54b9837cb62cfbf5d0b86ba6d77e43861bcec2"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978be58a68ade24f1af7758626806e13cff7748a677faf95fbb298359aa1e20d"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16bda83b5c61586f6f788333d3cf3ed19015e3b9019188c56983b5a299210eb5"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ad1f26bea425041e0a1adad34630c4825a9e3adec49079b1fb6ac8d36f8b754"}, + {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9e253498bee561fe85d6325ba55ff2ff08fb5e7184cd6a4d7754133bd19c9195"}, + {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a62f9968bab8a676a164263e485f30a0b748255ee2f4ae49a0224be95f4532b"}, + {file = "orjson-3.10.3-cp38-none-win32.whl", hash = "sha256:8d0b84403d287d4bfa9bf7d1dc298d5c1c5d9f444f3737929a66f2fe4fb8f134"}, + {file = "orjson-3.10.3-cp38-none-win_amd64.whl", hash = "sha256:8bc7a4df90da5d535e18157220d7915780d07198b54f4de0110eca6b6c11e290"}, + {file = "orjson-3.10.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9059d15c30e675a58fdcd6f95465c1522b8426e092de9fff20edebfdc15e1cb0"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d40c7f7938c9c2b934b297412c067936d0b54e4b8ab916fd1a9eb8f54c02294"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4a654ec1de8fdaae1d80d55cee65893cb06494e124681ab335218be6a0691e7"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:831c6ef73f9aa53c5f40ae8f949ff7681b38eaddb6904aab89dca4d85099cb78"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99b880d7e34542db89f48d14ddecbd26f06838b12427d5a25d71baceb5ba119d"}, + {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2e5e176c994ce4bd434d7aafb9ecc893c15f347d3d2bbd8e7ce0b63071c52e25"}, + {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b69a58a37dab856491bf2d3bbf259775fdce262b727f96aafbda359cb1d114d8"}, + {file = "orjson-3.10.3-cp39-none-win32.whl", hash = "sha256:b8d4d1a6868cde356f1402c8faeb50d62cee765a1f7ffcfd6de732ab0581e063"}, + {file = "orjson-3.10.3-cp39-none-win_amd64.whl", hash = "sha256:5102f50c5fc46d94f2033fe00d392588564378260d64377aec702f21a7a22912"}, + {file = "orjson-3.10.3.tar.gz", hash = "sha256:2b166507acae7ba2f7c315dcf185a9111ad5e992ac81f2d507aac39193c2c818"}, +] + +[[package]] +name = "oss2" +version = "2.15.0" +description = "Aliyun OSS (Object Storage Service) SDK" +optional = false +python-versions = "*" +files = [ + {file = "oss2-2.15.0.tar.gz", hash = "sha256:d8b5a10ba2291ff4c78246576f243dcec262f1f646344e61f3192dc262e87430"}, +] + +[package.dependencies] +aliyun-python-sdk-core = ">=2.13.12" +aliyun-python-sdk-kms = ">=2.4.1" +crcmod = ">=1.7" +pycryptodome = ">=3.4.7" +requests = "!=2.9.0" +six = "*" + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "pandas" +version = "1.5.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, + {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, + {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, + {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, + {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, + {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, + {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, + {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, +] +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" + +[package.extras] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] + +[[package]] +name = "peewee" +version = "3.17.5" +description = "a little orm" +optional = false +python-versions = "*" +files = [ + {file = "peewee-3.17.5.tar.gz", hash = "sha256:e1b6a64192207fd3ddb4e1188054820f42aef0aadfa749e3981af3c119a76420"}, +] + +[[package]] +name = "pgvecto-rs" +version = "0.1.4" +description = "Python binding for pgvecto.rs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pgvecto_rs-0.1.4-py3-none-any.whl", hash = "sha256:9b08a9e612f0cd65d1cc6e17a35b9bb5956187e0e3981bf6e997ff9e615c6116"}, + {file = "pgvecto_rs-0.1.4.tar.gz", hash = "sha256:078b96cff1f3d417169ad46cacef7fc4d644978bbd6725a5c24c0675de5030ab"}, +] + +[package.dependencies] +numpy = ">=1.23" +toml = ">=0.10" + +[package.extras] +psycopg3 = ["psycopg[binary] (>=3.1.12)"] +sdk = ["openai (>=1.2.2)", "pgvecto_rs[sqlalchemy]"] +sqlalchemy = ["SQLAlchemy (>=2.0.23)", "pgvecto_rs[psycopg3]"] + +[[package]] +name = "pgvector" +version = "0.2.5" +description = "pgvector support for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pgvector-0.2.5-py2.py3-none-any.whl", hash = "sha256:5e5e93ec4d3c45ab1fa388729d56c602f6966296e19deee8878928c6d567e41b"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "pillow" +version = "10.3.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + +[[package]] +name = "plotly" +version = "5.22.0" +description = "An open-source, interactive data visualization library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "plotly-5.22.0-py3-none-any.whl", hash = "sha256:68fc1901f098daeb233cc3dd44ec9dc31fb3ca4f4e53189344199c43496ed006"}, + {file = "plotly-5.22.0.tar.gz", hash = "sha256:859fdadbd86b5770ae2466e542b761b247d1c6b49daed765b95bb8c7063e7469"}, +] + +[package.dependencies] +packaging = "*" +tenacity = ">=6.2.0" + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "portalocker" +version = "2.8.2" +description = "Wraps the portalocker recipe for easy usage" +optional = false +python-versions = ">=3.8" +files = [ + {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"}, + {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"}, +] + +[package.dependencies] +pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} + +[package.extras] +docs = ["sphinx (>=1.7.1)"] +redis = ["redis"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.43" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "proto-plus" +version = "1.23.0" +description = "Beautiful, Pythonic protocol buffers." +optional = false +python-versions = ">=3.6" +files = [ + {file = "proto-plus-1.23.0.tar.gz", hash = "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2"}, + {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"}, +] + +[package.dependencies] +protobuf = ">=3.19.0,<5.0.0dev" + +[package.extras] +testing = ["google-api-core[grpc] (>=1.31.5)"] + +[[package]] +name = "protobuf" +version = "4.25.3" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, + {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, + {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, + {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, + {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, + {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, + {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, + {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, + {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, +] + +[[package]] +name = "psycopg2-binary" +version = "2.9.9" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win32.whl", hash = "sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win32.whl", hash = "sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win32.whl", hash = "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, +] + +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +description = "Get CPU info with pure Python" +optional = false +python-versions = "*" +files = [ + {file = "py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, + {file = "py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, +] + +[[package]] +name = "pyarrow" +version = "16.1.0" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyarrow-16.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:17e23b9a65a70cc733d8b738baa6ad3722298fa0c81d88f63ff94bf25eaa77b9"}, + {file = "pyarrow-16.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4740cc41e2ba5d641071d0ab5e9ef9b5e6e8c7611351a5cb7c1d175eaf43674a"}, + {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98100e0268d04e0eec47b73f20b39c45b4006f3c4233719c3848aa27a03c1aef"}, + {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68f409e7b283c085f2da014f9ef81e885d90dcd733bd648cfba3ef265961848"}, + {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a8914cd176f448e09746037b0c6b3a9d7688cef451ec5735094055116857580c"}, + {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:48be160782c0556156d91adbdd5a4a7e719f8d407cb46ae3bb4eaee09b3111bd"}, + {file = "pyarrow-16.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9cf389d444b0f41d9fe1444b70650fea31e9d52cfcb5f818b7888b91b586efff"}, + {file = "pyarrow-16.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:d0ebea336b535b37eee9eee31761813086d33ed06de9ab6fc6aaa0bace7b250c"}, + {file = "pyarrow-16.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e73cfc4a99e796727919c5541c65bb88b973377501e39b9842ea71401ca6c1c"}, + {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf9251264247ecfe93e5f5a0cd43b8ae834f1e61d1abca22da55b20c788417f6"}, + {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddf5aace92d520d3d2a20031d8b0ec27b4395cab9f74e07cc95edf42a5cc0147"}, + {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:25233642583bf658f629eb230b9bb79d9af4d9f9229890b3c878699c82f7d11e"}, + {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a33a64576fddfbec0a44112eaf844c20853647ca833e9a647bfae0582b2ff94b"}, + {file = "pyarrow-16.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:185d121b50836379fe012753cf15c4ba9638bda9645183ab36246923875f8d1b"}, + {file = "pyarrow-16.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:2e51ca1d6ed7f2e9d5c3c83decf27b0d17bb207a7dea986e8dc3e24f80ff7d6f"}, + {file = "pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06ebccb6f8cb7357de85f60d5da50e83507954af617d7b05f48af1621d331c9a"}, + {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b04707f1979815f5e49824ce52d1dceb46e2f12909a48a6a753fe7cafbc44a0c"}, + {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d32000693deff8dc5df444b032b5985a48592c0697cb6e3071a5d59888714e2"}, + {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8785bb10d5d6fd5e15d718ee1d1f914fe768bf8b4d1e5e9bf253de8a26cb1628"}, + {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e1369af39587b794873b8a307cc6623a3b1194e69399af0efd05bb202195a5a7"}, + {file = "pyarrow-16.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:febde33305f1498f6df85e8020bca496d0e9ebf2093bab9e0f65e2b4ae2b3444"}, + {file = "pyarrow-16.1.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b5f5705ab977947a43ac83b52ade3b881eb6e95fcc02d76f501d549a210ba77f"}, + {file = "pyarrow-16.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0d27bf89dfc2576f6206e9cd6cf7a107c9c06dc13d53bbc25b0bd4556f19cf5f"}, + {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d07de3ee730647a600037bc1d7b7994067ed64d0eba797ac74b2bc77384f4c2"}, + {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbef391b63f708e103df99fbaa3acf9f671d77a183a07546ba2f2c297b361e83"}, + {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19741c4dbbbc986d38856ee7ddfdd6a00fc3b0fc2d928795b95410d38bb97d15"}, + {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f2c5fb249caa17b94e2b9278b36a05ce03d3180e6da0c4c3b3ce5b2788f30eed"}, + {file = "pyarrow-16.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:e6b6d3cd35fbb93b70ade1336022cc1147b95ec6af7d36906ca7fe432eb09710"}, + {file = "pyarrow-16.1.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:18da9b76a36a954665ccca8aa6bd9f46c1145f79c0bb8f4f244f5f8e799bca55"}, + {file = "pyarrow-16.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:99f7549779b6e434467d2aa43ab2b7224dd9e41bdde486020bae198978c9e05e"}, + {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f07fdffe4fd5b15f5ec15c8b64584868d063bc22b86b46c9695624ca3505b7b4"}, + {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddfe389a08ea374972bd4065d5f25d14e36b43ebc22fc75f7b951f24378bf0b5"}, + {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3b20bd67c94b3a2ea0a749d2a5712fc845a69cb5d52e78e6449bbd295611f3aa"}, + {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ba8ac20693c0bb0bf4b238751d4409e62852004a8cf031c73b0e0962b03e45e3"}, + {file = "pyarrow-16.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:31a1851751433d89a986616015841977e0a188662fcffd1a5677453f1df2de0a"}, + {file = "pyarrow-16.1.0.tar.gz", hash = "sha256:15fbb22ea96d11f0b5768504a3f961edab25eaf4197c341720c4a387f6c60315"}, +] + +[package.dependencies] +numpy = ">=1.16.6" + +[[package]] +name = "pyasn1" +version = "0.6.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, + {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, + {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.7.0" + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pycryptodome" +version = "3.19.1" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodome-3.19.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:694020d2ff985cd714381b9da949a21028c24b86f562526186f6af7c7547e986"}, + {file = "pycryptodome-3.19.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:4464b0e8fd5508bff9baf18e6fd4c6548b1ac2ce9862d6965ff6a84ec9cb302a"}, + {file = "pycryptodome-3.19.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:420972f9c62978e852c74055d81c354079ce3c3a2213a92c9d7e37bbc63a26e2"}, + {file = "pycryptodome-3.19.1-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1bc0c49d986a1491d66d2a56570f12e960b12508b7e71f2423f532e28857f36"}, + {file = "pycryptodome-3.19.1-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:e038ab77fec0956d7aa989a3c647652937fc142ef41c9382c2ebd13c127d5b4a"}, + {file = "pycryptodome-3.19.1-cp27-cp27m-win32.whl", hash = "sha256:a991f8ffe8dfe708f86690948ae46442eebdd0fff07dc1b605987939a34ec979"}, + {file = "pycryptodome-3.19.1-cp27-cp27m-win_amd64.whl", hash = "sha256:2c16426ef49d9cba018be2340ea986837e1dfa25c2ea181787971654dd49aadd"}, + {file = "pycryptodome-3.19.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6d0d2b97758ebf2f36c39060520447c26455acb3bcff309c28b1c816173a6ff5"}, + {file = "pycryptodome-3.19.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:b8b80ff92049fd042177282917d994d344365ab7e8ec2bc03e853d93d2401786"}, + {file = "pycryptodome-3.19.1-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd4e7e8bf0fc1ada854688b9b309ee607e2aa85a8b44180f91021a4dd330a928"}, + {file = "pycryptodome-3.19.1-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:8cf5d3d6cf921fa81acd1f632f6cedcc03f5f68fc50c364cd39490ba01d17c49"}, + {file = "pycryptodome-3.19.1-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:67939a3adbe637281c611596e44500ff309d547e932c449337649921b17b6297"}, + {file = "pycryptodome-3.19.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:11ddf6c9b52116b62223b6a9f4741bc4f62bb265392a4463282f7f34bb287180"}, + {file = "pycryptodome-3.19.1-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3e6f89480616781d2a7f981472d0cdb09b9da9e8196f43c1234eff45c915766"}, + {file = "pycryptodome-3.19.1-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27e1efcb68993b7ce5d1d047a46a601d41281bba9f1971e6be4aa27c69ab8065"}, + {file = "pycryptodome-3.19.1-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c6273ca5a03b672e504995529b8bae56da0ebb691d8ef141c4aa68f60765700"}, + {file = "pycryptodome-3.19.1-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b0bfe61506795877ff974f994397f0c862d037f6f1c0bfc3572195fc00833b96"}, + {file = "pycryptodome-3.19.1-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:f34976c5c8eb79e14c7d970fb097482835be8d410a4220f86260695ede4c3e17"}, + {file = "pycryptodome-3.19.1-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7c9e222d0976f68d0cf6409cfea896676ddc1d98485d601e9508f90f60e2b0a2"}, + {file = "pycryptodome-3.19.1-cp35-abi3-win32.whl", hash = "sha256:4805e053571140cb37cf153b5c72cd324bb1e3e837cbe590a19f69b6cf85fd03"}, + {file = "pycryptodome-3.19.1-cp35-abi3-win_amd64.whl", hash = "sha256:a470237ee71a1efd63f9becebc0ad84b88ec28e6784a2047684b693f458f41b7"}, + {file = "pycryptodome-3.19.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:ed932eb6c2b1c4391e166e1a562c9d2f020bfff44a0e1b108f67af38b390ea89"}, + {file = "pycryptodome-3.19.1-pp27-pypy_73-win32.whl", hash = "sha256:81e9d23c0316fc1b45d984a44881b220062336bbdc340aa9218e8d0656587934"}, + {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37e531bf896b70fe302f003d3be5a0a8697737a8d177967da7e23eff60d6483c"}, + {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd4e95b0eb4b28251c825fe7aa941fe077f993e5ca9b855665935b86fbb1cc08"}, + {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22c80246c3c880c6950d2a8addf156cee74ec0dc5757d01e8e7067a3c7da015"}, + {file = "pycryptodome-3.19.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e70f5c839c7798743a948efa2a65d1fe96bb397fe6d7f2bde93d869fe4f0ad69"}, + {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c3df3613592ea6afaec900fd7189d23c8c28b75b550254f4bd33fe94acb84b9"}, + {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08b445799d571041765e7d5c9ca09c5d3866c2f22eeb0dd4394a4169285184f4"}, + {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:954d156cd50130afd53f8d77f830fe6d5801bd23e97a69d358fed068f433fbfe"}, + {file = "pycryptodome-3.19.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b7efd46b0b4ac869046e814d83244aeab14ef787f4850644119b1c8b0ec2d637"}, + {file = "pycryptodome-3.19.1.tar.gz", hash = "sha256:8ae0dd1bcfada451c35f9e29a3e5db385caabc190f98e4a80ad02a61098fb776"}, +] + +[[package]] +name = "pydantic" +version = "1.10.15" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22ed12ee588b1df028a2aa5d66f07bf8f8b4c8579c2e96d5a9c1f96b77f3bb55"}, + {file = "pydantic-1.10.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:75279d3cac98186b6ebc2597b06bcbc7244744f6b0b44a23e4ef01e5683cc0d2"}, + {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50f1666a9940d3d68683c9d96e39640f709d7a72ff8702987dab1761036206bb"}, + {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82790d4753ee5d00739d6cb5cf56bceb186d9d6ce134aca3ba7befb1eedbc2c8"}, + {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d207d5b87f6cbefbdb1198154292faee8017d7495a54ae58db06762004500d00"}, + {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e49db944fad339b2ccb80128ffd3f8af076f9f287197a480bf1e4ca053a866f0"}, + {file = "pydantic-1.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:d3b5c4cbd0c9cb61bbbb19ce335e1f8ab87a811f6d589ed52b0254cf585d709c"}, + {file = "pydantic-1.10.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3d5731a120752248844676bf92f25a12f6e45425e63ce22e0849297a093b5b0"}, + {file = "pydantic-1.10.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c365ad9c394f9eeffcb30a82f4246c0006417f03a7c0f8315d6211f25f7cb654"}, + {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3287e1614393119c67bd4404f46e33ae3be3ed4cd10360b48d0a4459f420c6a3"}, + {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be51dd2c8596b25fe43c0a4a59c2bee4f18d88efb8031188f9e7ddc6b469cf44"}, + {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6a51a1dd4aa7b3f1317f65493a182d3cff708385327c1c82c81e4a9d6d65b2e4"}, + {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4e316e54b5775d1eb59187f9290aeb38acf620e10f7fd2f776d97bb788199e53"}, + {file = "pydantic-1.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:0d142fa1b8f2f0ae11ddd5e3e317dcac060b951d605fda26ca9b234b92214986"}, + {file = "pydantic-1.10.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7ea210336b891f5ea334f8fc9f8f862b87acd5d4a0cbc9e3e208e7aa1775dabf"}, + {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3453685ccd7140715e05f2193d64030101eaad26076fad4e246c1cc97e1bb30d"}, + {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bea1f03b8d4e8e86702c918ccfd5d947ac268f0f0cc6ed71782e4b09353b26f"}, + {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:005655cabc29081de8243126e036f2065bd7ea5b9dff95fde6d2c642d39755de"}, + {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:af9850d98fc21e5bc24ea9e35dd80a29faf6462c608728a110c0a30b595e58b7"}, + {file = "pydantic-1.10.15-cp37-cp37m-win_amd64.whl", hash = "sha256:d31ee5b14a82c9afe2bd26aaa405293d4237d0591527d9129ce36e58f19f95c1"}, + {file = "pydantic-1.10.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e09c19df304b8123938dc3c53d3d3be6ec74b9d7d0d80f4f4b5432ae16c2022"}, + {file = "pydantic-1.10.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7ac9237cd62947db00a0d16acf2f3e00d1ae9d3bd602b9c415f93e7a9fc10528"}, + {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:584f2d4c98ffec420e02305cf675857bae03c9d617fcfdc34946b1160213a948"}, + {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbc6989fad0c030bd70a0b6f626f98a862224bc2b1e36bfc531ea2facc0a340c"}, + {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d573082c6ef99336f2cb5b667b781d2f776d4af311574fb53d908517ba523c22"}, + {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6bd7030c9abc80134087d8b6e7aa957e43d35714daa116aced57269a445b8f7b"}, + {file = "pydantic-1.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:3350f527bb04138f8aff932dc828f154847fbdc7a1a44c240fbfff1b57f49a12"}, + {file = "pydantic-1.10.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:51d405b42f1b86703555797270e4970a9f9bd7953f3990142e69d1037f9d9e51"}, + {file = "pydantic-1.10.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a980a77c52723b0dc56640ced396b73a024d4b74f02bcb2d21dbbac1debbe9d0"}, + {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f1a1fb467d3f49e1708a3f632b11c69fccb4e748a325d5a491ddc7b5d22383"}, + {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:676ed48f2c5bbad835f1a8ed8a6d44c1cd5a21121116d2ac40bd1cd3619746ed"}, + {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:92229f73400b80c13afcd050687f4d7e88de9234d74b27e6728aa689abcf58cc"}, + {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2746189100c646682eff0bce95efa7d2e203420d8e1c613dc0c6b4c1d9c1fde4"}, + {file = "pydantic-1.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:394f08750bd8eaad714718812e7fab615f873b3cdd0b9d84e76e51ef3b50b6b7"}, + {file = "pydantic-1.10.15-py3-none-any.whl", hash = "sha256:28e552a060ba2740d0d2aabe35162652c1459a0b9069fe0db7f4ee0e18e74d58"}, + {file = "pydantic-1.10.15.tar.gz", hash = "sha256:ca832e124eda231a60a041da4f013e3ff24949d94a01154b137fc2f2a43c3ffb"}, +] + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pydub" +version = "0.25.1" +description = "Manipulate audio with an simple and easy high level interface" +optional = false +python-versions = "*" +files = [ + {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, + {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, +] + +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pymilvus" +version = "2.3.1" +description = "Python Sdk for Milvus" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pymilvus-2.3.1-py3-none-any.whl", hash = "sha256:ce65e1de8700f33bd9aade20f013291629702e25b05726773208f1f0b22548ff"}, + {file = "pymilvus-2.3.1.tar.gz", hash = "sha256:d460f6204d7deb2cff93716bd65670c1b440694b77701fb0ab0ead791aa582c6"}, +] + +[package.dependencies] +environs = "<=9.5.0" +grpcio = ">=1.49.1,<=1.58.0" +minio = "*" +pandas = ">=1.2.4" +protobuf = ">=3.20.0" +requests = "*" +ujson = ">=2.0.0" + +[[package]] +name = "pymysql" +version = "1.1.1" +description = "Pure Python MySQL Driver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyMySQL-1.1.1-py3-none-any.whl", hash = "sha256:4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c"}, + {file = "pymysql-1.1.1.tar.gz", hash = "sha256:e127611aaf2b417403c60bf4dc570124aeb4a57f5f37b8e95ae399a42f904cd0"}, +] + +[package.extras] +ed25519 = ["PyNaCl (>=1.4.0)"] +rsa = ["cryptography"] + +[[package]] +name = "pypandoc" +version = "1.13" +description = "Thin wrapper for pandoc." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pypandoc-1.13-py3-none-any.whl", hash = "sha256:4c7d71bf2f1ed122aac287113b5c4d537a33bbc3c1df5aed11a7d4a7ac074681"}, + {file = "pypandoc-1.13.tar.gz", hash = "sha256:31652073c7960c2b03570bd1e94f602ca9bc3e70099df5ead4cea98ff5151c1e"}, +] + +[[package]] +name = "pyparsing" +version = "3.1.2" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pypdfium2" +version = "4.17.0" +description = "Python bindings to PDFium" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pypdfium2-4.17.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e9ed42d5a5065ae41ae3ead3cd642e1f21b6039e69ccc204e260e218e91cd7e1"}, + {file = "pypdfium2-4.17.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0a3b5a8eca53a1e68434969821b70bd2bc9ac2b70e58daf516c6ff0b6b5779e7"}, + {file = "pypdfium2-4.17.0-py3-none-manylinux_2_17_aarch64.whl", hash = "sha256:854e04b51205466ec415b86588fe5dc593e9ca3e8e15b5aa05978c5352bd57d2"}, + {file = "pypdfium2-4.17.0-py3-none-manylinux_2_17_armv7l.whl", hash = "sha256:9ff8707b28568e9585bdf9a96b7a8a9f91c0b5ad05af119b49381dad89983364"}, + {file = "pypdfium2-4.17.0-py3-none-manylinux_2_17_i686.whl", hash = "sha256:09ecbef6212993db0b5460cfd46d6b157a921ff45c97b0764e6fe8ea2e8cdebf"}, + {file = "pypdfium2-4.17.0-py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:f680e469b79c71c3fb086d7ced8361fbd66f4cd7b0ad08ff888289fe6743ab32"}, + {file = "pypdfium2-4.17.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ba7a7da48fbf0f1aaa903dac7d0e62186d6e8ae9a78b7b7b836d3f1b3d1be5d"}, + {file = "pypdfium2-4.17.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:451752170caf59d4b4572b527c2858dfff96eb1da35f2822c66cdce006dd4eae"}, + {file = "pypdfium2-4.17.0-py3-none-win32.whl", hash = "sha256:4930cfa793298214fa644c6986f6466e21f98eba3f338b4577614ebd8aa34af5"}, + {file = "pypdfium2-4.17.0-py3-none-win_amd64.whl", hash = "sha256:99de7f336e967dea4d324484f581fff55db1eb3c8e90baa845567dd9a3cc84f3"}, + {file = "pypdfium2-4.17.0-py3-none-win_arm64.whl", hash = "sha256:9381677b489c13d64ea4f8cbf6ebfc858216b052883e01e40fa993c2818a078e"}, + {file = "pypdfium2-4.17.0.tar.gz", hash = "sha256:2a2b3273c4614ee2004df60ace5f387645f843418ae29f379408ee11560241c0"}, +] + +[[package]] +name = "pypng" +version = "0.20220715.0" +description = "Pure Python library for saving and loading PNG images" +optional = false +python-versions = "*" +files = [ + {file = "pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, + {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, +] + +[[package]] +name = "pytest" +version = "8.1.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.1.2-py3-none-any.whl", hash = "sha256:6c06dc309ff46a05721e6fd48e492a775ed8165d2ecdf57f156a80c7e95bb142"}, + {file = "pytest-8.1.2.tar.gz", hash = "sha256:f3c45d1d5eed96b01a2aea70dee6a4a366d51d38f9957768083e4fecfc77f3ef"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.4,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-benchmark" +version = "4.0.0" +description = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-benchmark-4.0.0.tar.gz", hash = "sha256:fb0785b83efe599a6a956361c0691ae1dbb5318018561af10f3e915caa0048d1"}, + {file = "pytest_benchmark-4.0.0-py3-none-any.whl", hash = "sha256:fdb7db64e31c8b277dff9850d2a2556d8b60bcb0ea6524e36e28ffd7c87f71d6"}, +] + +[package.dependencies] +py-cpuinfo = "*" +pytest = ">=3.8" + +[package.extras] +aspect = ["aspectlib"] +elasticsearch = ["elasticsearch"] +histogram = ["pygal", "pygaljs"] + +[[package]] +name = "pytest-env" +version = "1.1.3" +description = "pytest plugin that allows you to add environment variables." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest_env-1.1.3-py3-none-any.whl", hash = "sha256:aada77e6d09fcfb04540a6e462c58533c37df35fa853da78707b17ec04d17dfc"}, + {file = "pytest_env-1.1.3.tar.gz", hash = "sha256:fcd7dc23bb71efd3d35632bde1bbe5ee8c8dc4489d6617fb010674880d96216b"}, +] + +[package.dependencies] +pytest = ">=7.4.3" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +test = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "pytest-mock (>=3.12)"] + +[[package]] +name = "pytest-mock" +version = "3.14.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, +] + +[package.dependencies] +pytest = ">=6.2.5" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-docx" +version = "1.1.2" +description = "Create, read, and update Microsoft Word .docx files." +optional = false +python-versions = ">=3.7" +files = [ + {file = "python_docx-1.1.2-py3-none-any.whl", hash = "sha256:08c20d6058916fb19853fcf080f7f42b6270d89eac9fa5f8c15f691c0017fabe"}, + {file = "python_docx-1.1.2.tar.gz", hash = "sha256:0cf1f22e95b9002addca7948e16f2cd7acdfd498047f1941ca5d293db7762efd"}, +] + +[package.dependencies] +lxml = ">=3.1.0" +typing-extensions = ">=4.9.0" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-iso639" +version = "2024.4.27" +description = "ISO 639 language codes, names, and other associated information" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python_iso639-2024.4.27-py3-none-any.whl", hash = "sha256:27526a84cebc4c4d53fea9d1ebbc7209c8d279bebaa343e6765a1fc8780565ab"}, + {file = "python_iso639-2024.4.27.tar.gz", hash = "sha256:97e63b5603e085c6a56a12a95740010e75d9134e0aab767e0978b53fd8824f13"}, +] + +[package.extras] +dev = ["black (==24.4.2)", "build (==1.2.1)", "flake8 (==7.0.0)", "pytest (==8.1.2)", "requests (==2.31.0)", "twine (==5.0.0)"] + +[[package]] +name = "python-magic" +version = "0.4.27" +description = "File type identification using libmagic" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, + {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, +] + +[[package]] +name = "python-pptx" +version = "0.6.23" +description = "Generate and manipulate Open XML PowerPoint (.pptx) files" +optional = false +python-versions = "*" +files = [ + {file = "python-pptx-0.6.23.tar.gz", hash = "sha256:587497ff28e779ab18dbb074f6d4052893c85dedc95ed75df319364f331fedee"}, + {file = "python_pptx-0.6.23-py3-none-any.whl", hash = "sha256:dd0527194627a2b7cc05f3ba23ecaa2d9a0d5ac9b6193a28ed1b7a716f4217d4"}, +] + +[package.dependencies] +lxml = ">=3.1.0" +Pillow = ">=3.3.2" +XlsxWriter = ">=0.5.7" + +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "qdrant-client" +version = "1.7.3" +description = "Client library for the Qdrant vector search engine" +optional = false +python-versions = ">=3.8" +files = [ + {file = "qdrant_client-1.7.3-py3-none-any.whl", hash = "sha256:b062420ba55eb847652c7d2a26404fb1986bea13aa785763024013f96a7a915c"}, + {file = "qdrant_client-1.7.3.tar.gz", hash = "sha256:7b809be892cdc5137ae80ea3335da40c06499ad0b0072b5abc6bad79da1d29fc"}, +] + +[package.dependencies] +grpcio = ">=1.41.0" +grpcio-tools = ">=1.41.0" +httpx = {version = ">=0.14.0", extras = ["http2"]} +numpy = [ + {version = ">=1.21", markers = "python_version >= \"3.8\" and python_version < \"3.12\""}, + {version = ">=1.26", markers = "python_version >= \"3.12\""}, +] +portalocker = ">=2.7.0,<3.0.0" +pydantic = ">=1.10.8" +urllib3 = ">=1.26.14,<3" + +[package.extras] +fastembed = ["fastembed (==0.1.1)"] + +[[package]] +name = "qrcode" +version = "7.4.2" +description = "QR Code image generator" +optional = false +python-versions = ">=3.7" +files = [ + {file = "qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, + {file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +pypng = "*" +typing-extensions = "*" + +[package.extras] +all = ["pillow (>=9.1.0)", "pytest", "pytest-cov", "tox", "zest.releaser[recommended]"] +dev = ["pytest", "pytest-cov", "tox"] +maintainer = ["zest.releaser[recommended]"] +pil = ["pillow (>=9.1.0)"] +test = ["coverage", "pytest"] + +[[package]] +name = "rapidfuzz" +version = "3.9.0" +description = "rapid fuzzy string matching" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rapidfuzz-3.9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd375c4830fee11d502dd93ecadef63c137ae88e1aaa29cc15031fa66d1e0abb"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:55e2c5076f38fc1dbaacb95fa026a3e409eee6ea5ac4016d44fb30e4cad42b20"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:488f74126904db6b1bea545c2f3567ea882099f4c13f46012fe8f4b990c683df"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3f2d1ea7cd57dfcd34821e38b4924c80a31bcf8067201b1ab07386996a9faee"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b11e602987bcb4ea22b44178851f27406fca59b0836298d0beb009b504dba266"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3083512e9bf6ed2bb3d25883922974f55e21ae7f8e9f4e298634691ae1aee583"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b33c6d4b3a1190bc0b6c158c3981535f9434e8ed9ffa40cf5586d66c1819fb4b"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcb95fde22f98e6d0480db8d6038c45fe2d18a338690e6f9bba9b82323f3469"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:08d8b49b3a4fb8572e480e73fcddc750da9cbb8696752ee12cca4bf8c8220d52"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e721842e6b601ebbeb8cc5e12c75bbdd1d9e9561ea932f2f844c418c31256e82"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7988363b3a415c5194ce1a68d380629247f8713e669ad81db7548eb156c4f365"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2d267d4c982ab7d177e994ab1f31b98ff3814f6791b90d35dda38307b9e7c989"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0bb28ab5300cf974c7eb68ea21125c493e74b35b1129e629533468b2064ae0a2"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-win32.whl", hash = "sha256:1b1f74997b6d94d66375479fa55f70b1c18e4d865d7afcd13f0785bfd40a9d3c"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c56d2efdfaa1c642029f3a7a5bb76085c5531f7a530777be98232d2ce142553c"}, + {file = "rapidfuzz-3.9.0-cp310-cp310-win_arm64.whl", hash = "sha256:6a83128d505cac76ea560bb9afcb3f6986e14e50a6f467db9a31faef4bd9b347"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e2218d62ab63f3c5ad48eced898854d0c2c327a48f0fb02e2288d7e5332a22c8"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:36bf35df2d6c7d5820da20a6720aee34f67c15cd2daf8cf92e8141995c640c25"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:905b01a9b633394ff6bb5ebb1c5fd660e0e180c03fcf9d90199cc6ed74b87cf7"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33cfabcb7fd994938a6a08e641613ce5fe46757832edc789c6a5602e7933d6fa"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1179dcd3d150a67b8a678cd9c84f3baff7413ff13c9e8fe85e52a16c97e24c9b"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47d97e28c42f1efb7781993b67c749223f198f6653ef177a0c8f2b1c516efcaf"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28da953eb2ef9ad527e536022da7afff6ace7126cdd6f3e21ac20f8762e76d2c"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:182b4e11de928fb4834e8f8b5ecd971b5b10a86fabe8636ab65d3a9b7e0e9ca7"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c74f2da334ce597f31670db574766ddeaee5d9430c2c00e28d0fbb7f76172036"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:014ac55b03f4074f903248ded181f3000f4cdbd134e6155cbf643f0eceb4f70f"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c4ef34b2ddbf448f1d644b4ec6475df8bbe5b9d0fee173ff2e87322a151663bd"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fc02157f521af15143fae88f92ef3ddcc4e0cff05c40153a9549dc0fbdb9adb3"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ff08081c49b18ba253a99e6a47f492e6ee8019e19bbb6ddc3ed360cd3ecb2f62"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-win32.whl", hash = "sha256:b9bf90b3d96925cbf8ef44e5ee3cf39ef0c422f12d40f7a497e91febec546650"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:d5d5684f54d82d9b0cf0b2701e55a630527a9c3dd5ddcf7a2e726a475ac238f2"}, + {file = "rapidfuzz-3.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:a2de844e0e971d7bd8aa41284627dbeacc90e750b90acfb016836553c7a63192"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f81fe99a69ac8ee3fd905e70c62f3af033901aeb60b69317d1d43d547b46e510"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:633b9d03fc04abc585c197104b1d0af04b1f1db1abc99f674d871224cd15557a"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab872cb57ae97c54ba7c71a9e3c9552beb57cb907c789b726895576d1ea9af6f"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdd8c15c3a14e409507fdf0c0434ec481d85c6cbeec8bdcd342a8cd1eda03825"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2444d8155d9846f206e2079bb355b85f365d9457480b0d71677a112d0a7f7128"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83bd3d01f04061c3660742dc85143a89d49fd23eb31eccbf60ad56c4b955617"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ca799f882364e69d0872619afb19efa3652b7133c18352e4a3d86a324fb2bb1"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6993d361f28b9ef5f0fa4e79b8541c2f3507be7471b9f9cb403a255e123b31e1"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:170822a1b1719f02b58e3dce194c8ad7d4c5b39be38c0fdec603bd19c6f9cf81"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e86e39c1c1a0816ceda836e6f7bd3743b930cbc51a43a81bb433b552f203f25"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:731269812ea837e0b93d913648e404736407408e33a00b75741e8f27c590caa2"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8e5ff882d3a3d081157ceba7e0ebc7fac775f95b08cbb143accd4cece6043819"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2003071aa633477a01509890c895f9ef56cf3f2eaa72c7ec0b567f743c1abcba"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-win32.whl", hash = "sha256:13857f9070600ea1f940749f123b02d0b027afbaa45e72186df0f278915761d0"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:134b7098ac109834eeea81424b6822f33c4c52bf80b81508295611e7a21be12a"}, + {file = "rapidfuzz-3.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:2a96209f046fe328be30fc43f06e3d4b91f0d5b74e9dcd627dbfd65890fa4a5e"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:544b0bf9d17170720809918e9ccd0d482d4a3a6eca35630d8e1459f737f71755"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d536f8beb8dd82d6efb20fe9f82c2cfab9ffa0384b5d184327e393a4edde91d"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30f7609da871510583f87484a10820b26555a473a90ab356cdda2f3b4456256c"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f4a2468432a1db491af6f547fad8f6d55fa03e57265c2f20e5eaceb68c7907e"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a7ec4676242c8a430509cff42ce98bca2fbe30188a63d0f60fdcbfd7e84970"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dcb523243e988c849cf81220164ec3bbed378a699e595a8914fffe80596dc49f"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4eea3bf72c4fe68e957526ffd6bcbb403a21baa6b3344aaae2d3252313df6199"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4514980a5d204c076dd5b756960f6b1b7598f030009456e6109d76c4c331d03c"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9a06a99f1335fe43464d7121bc6540de7cd9c9475ac2025babb373fe7f27846b"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6c1ed63345d1581c39d4446b1a8c8f550709656ce2a3c88c47850b258167f3c2"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cd2e6e97daf17ebb3254285cf8dd86c60d56d6cf35c67f0f9a557ef26bd66290"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9bc0f7e6256a9c668482c41c8a3de5d0aa12e8ca346dcc427b97c7edb82cba48"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c09f4e87e82a164c9db769474bc61f8c8b677f2aeb0234b8abac73d2ecf9799"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-win32.whl", hash = "sha256:e65b8f7921bf60cbb207c132842a6b45eefef48c4c3b510eb16087d6c08c70af"}, + {file = "rapidfuzz-3.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9d6478957fb35c7844ad08f2442b62ba76c1857a56370781a707eefa4f4981e1"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:65d9250a4b0bf86320097306084bc3ca479c8f5491927c170d018787793ebe95"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:47b7c0840afa724db3b1a070bc6ed5beab73b4e659b1d395023617fc51bf68a2"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a16c48c6df8fb633efbbdea744361025d01d79bca988f884a620e63e782fe5b"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48105991ff6e4a51c7f754df500baa070270ed3d41784ee0d097549bc9fcb16d"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a7f273906b3c7cc6d63a76e088200805947aa0bc1ada42c6a0e582e19c390d7"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c396562d304e974b4b0d5cd3afc4f92c113ea46a36e6bc62e45333d6aa8837e"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68da1b70458fea5290ec9a169fcffe0c17ff7e5bb3c3257e63d7021a50601a8e"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c5b8f9a7b177af6ce7c6ad5b95588b4b73e37917711aafa33b2e79ee80fe709"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3c42a238bf9dd48f4ccec4c6934ac718225b00bb3a438a008c219e7ccb3894c7"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a365886c42177b2beab475a50ba311b59b04f233ceaebc4c341f6f91a86a78e2"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ce897b5dafb7fb7587a95fe4d449c1ea0b6d9ac4462fbafefdbbeef6eee4cf6a"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:413ac49bae291d7e226a5c9be65c71b2630b3346bce39268d02cb3290232e4b7"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8982fc3bd49d55a91569fc8a3feba0de4cef0b391ff9091be546e9df075b81"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-win32.whl", hash = "sha256:3904d0084ab51f82e9f353031554965524f535522a48ec75c30b223eb5a0a488"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:3733aede16ea112728ffeafeb29ccc62e095ed8ec816822fa2a82e92e2c08696"}, + {file = "rapidfuzz-3.9.0-cp39-cp39-win_arm64.whl", hash = "sha256:fc4e26f592b51f97acf0a3f8dfed95e4d830c6a8fbf359361035df836381ab81"}, + {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e33362e98c7899b5f60dcb06ada00acd8673ce0d59aefe9a542701251fd00423"}, + {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb67cf43ad83cb886cbbbff4df7dcaad7aedf94d64fca31aea0da7d26684283c"}, + {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e2e106cc66453bb80d2ad9c0044f8287415676df5c8036d737d05d4b9cdbf8e"}, + {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1256915f7e7a5cf2c151c9ac44834b37f9bd1c97e8dec6f936884f01b9dfc7d"}, + {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ae643220584518cbff8bf2974a0494d3e250763af816b73326a512c86ae782ce"}, + {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:491274080742110427f38a6085bb12dffcaff1eef12dccf9e8758398c7e3957e"}, + {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bc5559b9b94326922c096b30ae2d8e5b40b2e9c2c100c2cc396ad91bcb84d30"}, + {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:849160dc0f128acb343af514ca827278005c1d00148d025e4035e034fc2d8c7f"}, + {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:623883fb78e692d54ed7c43b09beec52c6685f10a45a7518128e25746667403b"}, + {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d20ab9abc7e19767f1951772a6ab14cb4eddd886493c2da5ee12014596ad253f"}, + {file = "rapidfuzz-3.9.0.tar.gz", hash = "sha256:b182f0fb61f6ac435e416eb7ab330d62efdbf9b63cf0c7fa12d1f57c2eaaf6f3"}, +] + +[package.extras] +full = ["numpy"] + +[[package]] +name = "readabilipy" +version = "0.2.0" +description = "Python wrapper for Mozilla's Readability.js" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "readabilipy-0.2.0-py3-none-any.whl", hash = "sha256:0050853cd6ab012ac75bb4d8f06427feb7dc32054da65060da44654d049802d0"}, + {file = "readabilipy-0.2.0.tar.gz", hash = "sha256:098bf347b19f362042fb6c08864ad776588bf844ac2261fb230f7f9c250fdae5"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.7.1" +html5lib = "*" +lxml = "*" +regex = "*" + +[package.extras] +dev = ["coveralls", "m2r", "pycodestyle", "pyflakes", "pylint", "pytest", "pytest-benchmark", "pytest-cov", "sphinx"] +docs = ["m2r", "sphinx"] +test = ["coveralls", "pycodestyle", "pyflakes", "pylint", "pytest", "pytest-benchmark", "pytest-cov"] + +[[package]] +name = "redis" +version = "5.0.4" +description = "Python client for Redis database and key-value store" +optional = false +python-versions = ">=3.7" +files = [ + {file = "redis-5.0.4-py3-none-any.whl", hash = "sha256:7adc2835c7a9b5033b7ad8f8918d09b7344188228809c98df07af226d39dec91"}, + {file = "redis-5.0.4.tar.gz", hash = "sha256:ec31f2ed9675cc54c21ba854cfe0462e6faf1d83c8ce5944709db8a4700b9c61"}, +] + +[package.dependencies] +async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} +hiredis = {version = ">=1.0.0", optional = true, markers = "extra == \"hiredis\""} + +[package.extras] +hiredis = ["hiredis (>=1.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] + +[[package]] +name = "regex" +version = "2024.5.15" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.8" +files = [ + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, + {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, + {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, + {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, + {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, + {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, + {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, + {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, + {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, + {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, + {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, + {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, +] + +[[package]] +name = "replicate" +version = "0.22.0" +description = "Python client for Replicate" +optional = false +python-versions = ">=3.8" +files = [ + {file = "replicate-0.22.0-py3-none-any.whl", hash = "sha256:a11e20e9589981a96bee6f3817494b5cc29735a108c71aff4515a81863ad9996"}, + {file = "replicate-0.22.0.tar.gz", hash = "sha256:cab48c15ede619d5aa7d023a241626d504c70ea2b7db5792ebfb5ae9fa373cbc"}, +] + +[package.dependencies] +httpx = ">=0.21.0,<1" +packaging = "*" +pydantic = ">1" +typing-extensions = ">=4.5.0" + +[package.extras] +dev = ["pylint", "pyright", "pytest", "pytest-asyncio", "pytest-recording", "respx", "ruff (>=0.1.3)"] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-file" +version = "2.0.0" +description = "File transport adapter for Requests" +optional = false +python-versions = "*" +files = [ + {file = "requests-file-2.0.0.tar.gz", hash = "sha256:20c5931629c558fda566cacc10cfe2cd502433e628f568c34c80d96a0cc95972"}, + {file = "requests_file-2.0.0-py2.py3-none-any.whl", hash = "sha256:3e493d390adb44aa102ebea827a48717336d5268968c370eaf19abaf5cae13bf"}, +] + +[package.dependencies] +requests = ">=1.0.0" + +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=3.4" +files = [ + {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, + {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "resend" +version = "0.7.2" +description = "Resend Python SDK" +optional = false +python-versions = ">=3.7" +files = [ + {file = "resend-0.7.2-py2.py3-none-any.whl", hash = "sha256:4f16711e11b007da7f8826283af6cdc34c99bd77c1dfad92afe9466a90d06c61"}, + {file = "resend-0.7.2.tar.gz", hash = "sha256:bb10522a5ef1235b6cc2d74902df39c4863ac12b89dc48b46dd5c6f980574622"}, +] + +[package.dependencies] +requests = "2.31.0" + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "s3transfer" +version = "0.6.2" +description = "An Amazon S3 Transfer Manager" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, + {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, +] + +[package.dependencies] +botocore = ">=1.12.36,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] + +[[package]] +name = "safetensors" +version = "0.4.3" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "safetensors-0.4.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:dcf5705cab159ce0130cd56057f5f3425023c407e170bca60b4868048bae64fd"}, + {file = "safetensors-0.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb4f8c5d0358a31e9a08daeebb68f5e161cdd4018855426d3f0c23bb51087055"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70a5319ef409e7f88686a46607cbc3c428271069d8b770076feaf913664a07ac"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb9c65bd82f9ef3ce4970dc19ee86be5f6f93d032159acf35e663c6bea02b237"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edb5698a7bc282089f64c96c477846950358a46ede85a1c040e0230344fdde10"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efcc860be094b8d19ac61b452ec635c7acb9afa77beb218b1d7784c6d41fe8ad"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d88b33980222085dd6001ae2cad87c6068e0991d4f5ccf44975d216db3b57376"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5fc6775529fb9f0ce2266edd3e5d3f10aab068e49f765e11f6f2a63b5367021d"}, + {file = "safetensors-0.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9c6ad011c1b4e3acff058d6b090f1da8e55a332fbf84695cf3100c649cc452d1"}, + {file = "safetensors-0.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c496c5401c1b9c46d41a7688e8ff5b0310a3b9bae31ce0f0ae870e1ea2b8caf"}, + {file = "safetensors-0.4.3-cp310-none-win32.whl", hash = "sha256:38e2a8666178224a51cca61d3cb4c88704f696eac8f72a49a598a93bbd8a4af9"}, + {file = "safetensors-0.4.3-cp310-none-win_amd64.whl", hash = "sha256:393e6e391467d1b2b829c77e47d726f3b9b93630e6a045b1d1fca67dc78bf632"}, + {file = "safetensors-0.4.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:22f3b5d65e440cec0de8edaa672efa888030802e11c09b3d6203bff60ebff05a"}, + {file = "safetensors-0.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c4fa560ebd4522adddb71dcd25d09bf211b5634003f015a4b815b7647d62ebe"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9afd5358719f1b2cf425fad638fc3c887997d6782da317096877e5b15b2ce93"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d8c5093206ef4b198600ae484230402af6713dab1bd5b8e231905d754022bec7"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0b2104df1579d6ba9052c0ae0e3137c9698b2d85b0645507e6fd1813b70931a"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cf18888606dad030455d18f6c381720e57fc6a4170ee1966adb7ebc98d4d6a3"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bf4f9d6323d9f86eef5567eabd88f070691cf031d4c0df27a40d3b4aaee755b"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:585c9ae13a205807b63bef8a37994f30c917ff800ab8a1ca9c9b5d73024f97ee"}, + {file = "safetensors-0.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faefeb3b81bdfb4e5a55b9bbdf3d8d8753f65506e1d67d03f5c851a6c87150e9"}, + {file = "safetensors-0.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:befdf0167ad626f22f6aac6163477fcefa342224a22f11fdd05abb3995c1783c"}, + {file = "safetensors-0.4.3-cp311-none-win32.whl", hash = "sha256:a7cef55929dcbef24af3eb40bedec35d82c3c2fa46338bb13ecf3c5720af8a61"}, + {file = "safetensors-0.4.3-cp311-none-win_amd64.whl", hash = "sha256:840b7ac0eff5633e1d053cc9db12fdf56b566e9403b4950b2dc85393d9b88d67"}, + {file = "safetensors-0.4.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:22d21760dc6ebae42e9c058d75aa9907d9f35e38f896e3c69ba0e7b213033856"}, + {file = "safetensors-0.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d22c1a10dff3f64d0d68abb8298a3fd88ccff79f408a3e15b3e7f637ef5c980"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1648568667f820b8c48317c7006221dc40aced1869908c187f493838a1362bc"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:446e9fe52c051aeab12aac63d1017e0f68a02a92a027b901c4f8e931b24e5397"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fef5d70683643618244a4f5221053567ca3e77c2531e42ad48ae05fae909f542"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a1f4430cc0c9d6afa01214a4b3919d0a029637df8e09675ceef1ca3f0dfa0df"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d603846a8585b9432a0fd415db1d4c57c0f860eb4aea21f92559ff9902bae4d"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a844cdb5d7cbc22f5f16c7e2a0271170750763c4db08381b7f696dbd2c78a361"}, + {file = "safetensors-0.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:88887f69f7a00cf02b954cdc3034ffb383b2303bc0ab481d4716e2da51ddc10e"}, + {file = "safetensors-0.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ee463219d9ec6c2be1d331ab13a8e0cd50d2f32240a81d498266d77d07b7e71e"}, + {file = "safetensors-0.4.3-cp312-none-win32.whl", hash = "sha256:d0dd4a1db09db2dba0f94d15addc7e7cd3a7b0d393aa4c7518c39ae7374623c3"}, + {file = "safetensors-0.4.3-cp312-none-win_amd64.whl", hash = "sha256:d14d30c25897b2bf19b6fb5ff7e26cc40006ad53fd4a88244fdf26517d852dd7"}, + {file = "safetensors-0.4.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d1456f814655b224d4bf6e7915c51ce74e389b413be791203092b7ff78c936dd"}, + {file = "safetensors-0.4.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:455d538aa1aae4a8b279344a08136d3f16334247907b18a5c3c7fa88ef0d3c46"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf476bca34e1340ee3294ef13e2c625833f83d096cfdf69a5342475602004f95"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02ef3a24face643456020536591fbd3c717c5abaa2737ec428ccbbc86dffa7a4"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7de32d0d34b6623bb56ca278f90db081f85fb9c5d327e3c18fd23ac64f465768"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a0deb16a1d3ea90c244ceb42d2c6c276059616be21a19ac7101aa97da448faf"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c59d51f182c729f47e841510b70b967b0752039f79f1de23bcdd86462a9b09ee"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1f598b713cc1a4eb31d3b3203557ac308acf21c8f41104cdd74bf640c6e538e3"}, + {file = "safetensors-0.4.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5757e4688f20df083e233b47de43845d1adb7e17b6cf7da5f8444416fc53828d"}, + {file = "safetensors-0.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fe746d03ed8d193674a26105e4f0fe6c726f5bb602ffc695b409eaf02f04763d"}, + {file = "safetensors-0.4.3-cp37-none-win32.whl", hash = "sha256:0d5ffc6a80f715c30af253e0e288ad1cd97a3d0086c9c87995e5093ebc075e50"}, + {file = "safetensors-0.4.3-cp37-none-win_amd64.whl", hash = "sha256:a11c374eb63a9c16c5ed146457241182f310902bd2a9c18255781bb832b6748b"}, + {file = "safetensors-0.4.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1e31be7945f66be23f4ec1682bb47faa3df34cb89fc68527de6554d3c4258a4"}, + {file = "safetensors-0.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:03a4447c784917c9bf01d8f2ac5080bc15c41692202cd5f406afba16629e84d6"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d244bcafeb1bc06d47cfee71727e775bca88a8efda77a13e7306aae3813fa7e4"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53c4879b9c6bd7cd25d114ee0ef95420e2812e676314300624594940a8d6a91f"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74707624b81f1b7f2b93f5619d4a9f00934d5948005a03f2c1845ffbfff42212"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d52c958dc210265157573f81d34adf54e255bc2b59ded6218500c9b15a750eb"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f9568f380f513a60139971169c4a358b8731509cc19112369902eddb33faa4d"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0d9cd8e1560dfc514b6d7859247dc6a86ad2f83151a62c577428d5102d872721"}, + {file = "safetensors-0.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:89f9f17b0dacb913ed87d57afbc8aad85ea42c1085bd5de2f20d83d13e9fc4b2"}, + {file = "safetensors-0.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1139eb436fd201c133d03c81209d39ac57e129f5e74e34bb9ab60f8d9b726270"}, + {file = "safetensors-0.4.3-cp38-none-win32.whl", hash = "sha256:d9c289f140a9ae4853fc2236a2ffc9a9f2d5eae0cb673167e0f1b8c18c0961ac"}, + {file = "safetensors-0.4.3-cp38-none-win_amd64.whl", hash = "sha256:622afd28968ef3e9786562d352659a37de4481a4070f4ebac883f98c5836563e"}, + {file = "safetensors-0.4.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8651c7299cbd8b4161a36cd6a322fa07d39cd23535b144d02f1c1972d0c62f3c"}, + {file = "safetensors-0.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e375d975159ac534c7161269de24ddcd490df2157b55c1a6eeace6cbb56903f0"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:084fc436e317f83f7071fc6a62ca1c513b2103db325cd09952914b50f51cf78f"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:41a727a7f5e6ad9f1db6951adee21bbdadc632363d79dc434876369a17de6ad6"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7dbbde64b6c534548696808a0e01276d28ea5773bc9a2dfb97a88cd3dffe3df"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbae3b4b9d997971431c346edbfe6e41e98424a097860ee872721e176040a893"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01e4b22e3284cd866edeabe4f4d896229495da457229408d2e1e4810c5187121"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dd37306546b58d3043eb044c8103a02792cc024b51d1dd16bd3dd1f334cb3ed"}, + {file = "safetensors-0.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8815b5e1dac85fc534a97fd339e12404db557878c090f90442247e87c8aeaea"}, + {file = "safetensors-0.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e011cc162503c19f4b1fd63dfcddf73739c7a243a17dac09b78e57a00983ab35"}, + {file = "safetensors-0.4.3-cp39-none-win32.whl", hash = "sha256:01feb3089e5932d7e662eda77c3ecc389f97c0883c4a12b5cfdc32b589a811c3"}, + {file = "safetensors-0.4.3-cp39-none-win_amd64.whl", hash = "sha256:3f9cdca09052f585e62328c1c2923c70f46814715c795be65f0b93f57ec98a02"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1b89381517891a7bb7d1405d828b2bf5d75528299f8231e9346b8eba092227f9"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cd6fff9e56df398abc5866b19a32124815b656613c1c5ec0f9350906fd798aac"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:840caf38d86aa7014fe37ade5d0d84e23dcfbc798b8078015831996ecbc206a3"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9650713b2cfa9537a2baf7dd9fee458b24a0aaaa6cafcea8bdd5fb2b8efdc34"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4119532cd10dba04b423e0f86aecb96cfa5a602238c0aa012f70c3a40c44b50"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e066e8861eef6387b7c772344d1fe1f9a72800e04ee9a54239d460c400c72aab"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:90964917f5b0fa0fa07e9a051fbef100250c04d150b7026ccbf87a34a54012e0"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c41e1893d1206aa7054029681778d9a58b3529d4c807002c156d58426c225173"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae7613a119a71a497d012ccc83775c308b9c1dab454806291427f84397d852fd"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9bac020faba7f5dc481e881b14b6425265feabb5bfc552551d21189c0eddc3"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:420a98f593ff9930f5822560d14c395ccbc57342ddff3b463bc0b3d6b1951550"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f5e6883af9a68c0028f70a4c19d5a6ab6238a379be36ad300a22318316c00cb0"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:cdd0a3b5da66e7f377474599814dbf5cbf135ff059cc73694de129b58a5e8a2c"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9bfb92f82574d9e58401d79c70c716985dc049b635fef6eecbb024c79b2c46ad"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3615a96dd2dcc30eb66d82bc76cda2565f4f7bfa89fcb0e31ba3cea8a1a9ecbb"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:868ad1b6fc41209ab6bd12f63923e8baeb1a086814cb2e81a65ed3d497e0cf8f"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffba80aa49bd09195145a7fd233a7781173b422eeb995096f2b30591639517"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0acbe31340ab150423347e5b9cc595867d814244ac14218932a5cf1dd38eb39"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19bbdf95de2cf64f25cd614c5236c8b06eb2cfa47cbf64311f4b5d80224623a3"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b852e47eb08475c2c1bd8131207b405793bfc20d6f45aff893d3baaad449ed14"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5d07cbca5b99babb692d76d8151bec46f461f8ad8daafbfd96b2fca40cadae65"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1ab6527a20586d94291c96e00a668fa03f86189b8a9defa2cdd34a1a01acc7d5"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02318f01e332cc23ffb4f6716e05a492c5f18b1d13e343c49265149396284a44"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec4b52ce9a396260eb9731eb6aea41a7320de22ed73a1042c2230af0212758ce"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:018b691383026a2436a22b648873ed11444a364324e7088b99cd2503dd828400"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:309b10dbcab63269ecbf0e2ca10ce59223bb756ca5d431ce9c9eeabd446569da"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b277482120df46e27a58082df06a15aebda4481e30a1c21eefd0921ae7e03f65"}, + {file = "safetensors-0.4.3.tar.gz", hash = "sha256:2f85fc50c4e07a21e95c24e07460fe6f7e2859d0ce88092838352b798ce711c2"}, +] + +[package.extras] +all = ["safetensors[jax]", "safetensors[numpy]", "safetensors[paddlepaddle]", "safetensors[pinned-tf]", "safetensors[quality]", "safetensors[testing]", "safetensors[torch]"] +dev = ["safetensors[all]"] +jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[numpy]"] +mlx = ["mlx (>=0.0.9)"] +numpy = ["numpy (>=1.21.6)"] +paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"] +pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"] +quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] +tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] +testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] +torch = ["safetensors[numpy]", "torch (>=1.10)"] + +[[package]] +name = "scikit-learn" +version = "1.2.2" +description = "A set of python modules for machine learning and data mining" +optional = false +python-versions = ">=3.8" +files = [ + {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, + {file = "scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, + {file = "scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, + {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, + {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, + {file = "scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, + {file = "scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, + {file = "scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, + {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, + {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, + {file = "scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, + {file = "scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, + {file = "scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, + {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, + {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, + {file = "scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, + {file = "scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, + {file = "scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, + {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, + {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, + {file = "scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, +] + +[package.dependencies] +joblib = ">=1.1.1" +numpy = ">=1.17.3" +scipy = ">=1.3.2" +threadpoolctl = ">=2.0.0" + +[package.extras] +benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] +tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy (>=0.961)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=5.3.1)", "pytest-cov (>=2.9.0)", "scikit-image (>=0.16.2)"] + +[[package]] +name = "scipy" +version = "1.13.0" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "sentry-sdk" +version = "1.39.2" +description = "Python client for Sentry (https://sentry.io)" +optional = false +python-versions = "*" +files = [ + {file = "sentry-sdk-1.39.2.tar.gz", hash = "sha256:24c83b0b41c887d33328a9166f5950dc37ad58f01c9f2fbff6b87a6f1094170c"}, + {file = "sentry_sdk-1.39.2-py2.py3-none-any.whl", hash = "sha256:acaf597b30258fc7663063b291aa99e58f3096e91fe1e6634f4b79f9c1943e8e"}, +] + +[package.dependencies] +blinker = {version = ">=1.1", optional = true, markers = "extra == \"flask\""} +certifi = "*" +flask = {version = ">=0.11", optional = true, markers = "extra == \"flask\""} +markupsafe = {version = "*", optional = true, markers = "extra == \"flask\""} +urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +arq = ["arq (>=0.23)"] +asyncpg = ["asyncpg (>=0.23)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +chalice = ["chalice (>=1.16.0)"] +clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +fastapi = ["fastapi (>=0.79.0)"] +flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] +grpcio = ["grpcio (>=1.21.1)"] +httpx = ["httpx (>=0.16.0)"] +huey = ["huey (>=2)"] +loguru = ["loguru (>=0.5)"] +opentelemetry = ["opentelemetry-distro (>=0.35b0)"] +opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"] +pure-eval = ["asttokens", "executing", "pure_eval"] +pymongo = ["pymongo (>=3.1)"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +starlette = ["starlette (>=0.19.1)"] +starlite = ["starlite (>=1.48)"] +tornado = ["tornado (>=5)"] + +[[package]] +name = "setuptools" +version = "69.5.1" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, + {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "sgmllib3k" +version = "1.0.0" +description = "Py3k port of sgmllib." +optional = false +python-versions = "*" +files = [ + {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, +] + +[[package]] +name = "shapely" +version = "2.0.4" +description = "Manipulation and analysis of geometric objects" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shapely-2.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:011b77153906030b795791f2fdfa2d68f1a8d7e40bce78b029782ade3afe4f2f"}, + {file = "shapely-2.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9831816a5d34d5170aa9ed32a64982c3d6f4332e7ecfe62dc97767e163cb0b17"}, + {file = "shapely-2.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c4849916f71dc44e19ed370421518c0d86cf73b26e8656192fcfcda08218fbd"}, + {file = "shapely-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841f93a0e31e4c64d62ea570d81c35de0f6cea224568b2430d832967536308e6"}, + {file = "shapely-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b4431f522b277c79c34b65da128029a9955e4481462cbf7ebec23aab61fc58"}, + {file = "shapely-2.0.4-cp310-cp310-win32.whl", hash = "sha256:92a41d936f7d6743f343be265ace93b7c57f5b231e21b9605716f5a47c2879e7"}, + {file = "shapely-2.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:30982f79f21bb0ff7d7d4a4e531e3fcaa39b778584c2ce81a147f95be1cd58c9"}, + {file = "shapely-2.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de0205cb21ad5ddaef607cda9a3191eadd1e7a62a756ea3a356369675230ac35"}, + {file = "shapely-2.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d56ce3e2a6a556b59a288771cf9d091470116867e578bebced8bfc4147fbfd7"}, + {file = "shapely-2.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:58b0ecc505bbe49a99551eea3f2e8a9b3b24b3edd2a4de1ac0dc17bc75c9ec07"}, + {file = "shapely-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:790a168a808bd00ee42786b8ba883307c0e3684ebb292e0e20009588c426da47"}, + {file = "shapely-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4310b5494271e18580d61022c0857eb85d30510d88606fa3b8314790df7f367d"}, + {file = "shapely-2.0.4-cp311-cp311-win32.whl", hash = "sha256:63f3a80daf4f867bd80f5c97fbe03314348ac1b3b70fb1c0ad255a69e3749879"}, + {file = "shapely-2.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:c52ed79f683f721b69a10fb9e3d940a468203f5054927215586c5d49a072de8d"}, + {file = "shapely-2.0.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5bbd974193e2cc274312da16b189b38f5f128410f3377721cadb76b1e8ca5328"}, + {file = "shapely-2.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:41388321a73ba1a84edd90d86ecc8bfed55e6a1e51882eafb019f45895ec0f65"}, + {file = "shapely-2.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0776c92d584f72f1e584d2e43cfc5542c2f3dd19d53f70df0900fda643f4bae6"}, + {file = "shapely-2.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c75c98380b1ede1cae9a252c6dc247e6279403fae38c77060a5e6186c95073ac"}, + {file = "shapely-2.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3e700abf4a37b7b8b90532fa6ed5c38a9bfc777098bc9fbae5ec8e618ac8f30"}, + {file = "shapely-2.0.4-cp312-cp312-win32.whl", hash = "sha256:4f2ab0faf8188b9f99e6a273b24b97662194160cc8ca17cf9d1fb6f18d7fb93f"}, + {file = "shapely-2.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:03152442d311a5e85ac73b39680dd64a9892fa42bb08fd83b3bab4fe6999bfa0"}, + {file = "shapely-2.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:994c244e004bc3cfbea96257b883c90a86e8cbd76e069718eb4c6b222a56f78b"}, + {file = "shapely-2.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05ffd6491e9e8958b742b0e2e7c346635033d0a5f1a0ea083547fcc854e5d5cf"}, + {file = "shapely-2.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbdc1140a7d08faa748256438291394967aa54b40009f54e8d9825e75ef6113"}, + {file = "shapely-2.0.4-cp37-cp37m-win32.whl", hash = "sha256:5af4cd0d8cf2912bd95f33586600cac9c4b7c5053a036422b97cfe4728d2eb53"}, + {file = "shapely-2.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:464157509ce4efa5ff285c646a38b49f8c5ef8d4b340f722685b09bb033c5ccf"}, + {file = "shapely-2.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:489c19152ec1f0e5c5e525356bcbf7e532f311bff630c9b6bc2db6f04da6a8b9"}, + {file = "shapely-2.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b79bbd648664aa6f44ef018474ff958b6b296fed5c2d42db60078de3cffbc8aa"}, + {file = "shapely-2.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:674d7baf0015a6037d5758496d550fc1946f34bfc89c1bf247cabdc415d7747e"}, + {file = "shapely-2.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cd4ccecc5ea5abd06deeaab52fcdba372f649728050c6143cc405ee0c166679"}, + {file = "shapely-2.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb5cdcbbe3080181498931b52a91a21a781a35dcb859da741c0345c6402bf00c"}, + {file = "shapely-2.0.4-cp38-cp38-win32.whl", hash = "sha256:55a38dcd1cee2f298d8c2ebc60fc7d39f3b4535684a1e9e2f39a80ae88b0cea7"}, + {file = "shapely-2.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:ec555c9d0db12d7fd777ba3f8b75044c73e576c720a851667432fabb7057da6c"}, + {file = "shapely-2.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9103abd1678cb1b5f7e8e1af565a652e036844166c91ec031eeb25c5ca8af0"}, + {file = "shapely-2.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:263bcf0c24d7a57c80991e64ab57cba7a3906e31d2e21b455f493d4aab534aaa"}, + {file = "shapely-2.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddf4a9bfaac643e62702ed662afc36f6abed2a88a21270e891038f9a19bc08fc"}, + {file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:485246fcdb93336105c29a5cfbff8a226949db37b7473c89caa26c9bae52a242"}, + {file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8de4578e838a9409b5b134a18ee820730e507b2d21700c14b71a2b0757396acc"}, + {file = "shapely-2.0.4-cp39-cp39-win32.whl", hash = "sha256:9dab4c98acfb5fb85f5a20548b5c0abe9b163ad3525ee28822ffecb5c40e724c"}, + {file = "shapely-2.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:31c19a668b5a1eadab82ff070b5a260478ac6ddad3a5b62295095174a8d26398"}, + {file = "shapely-2.0.4.tar.gz", hash = "sha256:5dc736127fac70009b8d309a0eeb74f3e08979e530cf7017f2f507ef62e6cfb8"}, +] + +[package.dependencies] +numpy = ">=1.14,<3" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "simple-websocket" +version = "1.0.0" +description = "Simple WebSocket server and client for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "simple-websocket-1.0.0.tar.gz", hash = "sha256:17d2c72f4a2bd85174a97e3e4c88b01c40c3f81b7b648b0cc3ce1305968928c8"}, + {file = "simple_websocket-1.0.0-py3-none-any.whl", hash = "sha256:1d5bf585e415eaa2083e2bcf02a3ecf91f9712e7b3e6b9fa0b461ad04e0837bc"}, +] + +[package.dependencies] +wsproto = "*" + +[package.extras] +docs = ["sphinx"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "socksio" +version = "1.0.0" +description = "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5." +optional = false +python-versions = ">=3.6" +files = [ + {file = "socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3"}, + {file = "socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac"}, +] + +[[package]] +name = "soupsieve" +version = "2.5" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.30" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b48154678e76445c7ded1896715ce05319f74b1e73cf82d4f8b59b46e9c0ddc"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2753743c2afd061bb95a61a51bbb6a1a11ac1c44292fad898f10c9839a7f75b2"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7bfc726d167f425d4c16269a9a10fe8630ff6d14b683d588044dcef2d0f6be7"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f61ada6979223013d9ab83a3ed003ded6959eae37d0d685db2c147e9143797"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a365eda439b7a00732638f11072907c1bc8e351c7665e7e5da91b169af794af"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bba002a9447b291548e8d66fd8c96a6a7ed4f2def0bb155f4f0a1309fd2735d5"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-win32.whl", hash = "sha256:0138c5c16be3600923fa2169532205d18891b28afa817cb49b50e08f62198bb8"}, + {file = "SQLAlchemy-2.0.30-cp310-cp310-win_amd64.whl", hash = "sha256:99650e9f4cf3ad0d409fed3eec4f071fadd032e9a5edc7270cd646a26446feeb"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:955991a09f0992c68a499791a753523f50f71a6885531568404fa0f231832aa0"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f69e4c756ee2686767eb80f94c0125c8b0a0b87ede03eacc5c8ae3b54b99dc46"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c9db1ce00e59e8dd09d7bae852a9add716efdc070a3e2068377e6ff0d6fdaa"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1429a4b0f709f19ff3b0cf13675b2b9bfa8a7e79990003207a011c0db880a13"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:efedba7e13aa9a6c8407c48facfdfa108a5a4128e35f4c68f20c3407e4376aa9"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16863e2b132b761891d6c49f0a0f70030e0bcac4fd208117f6b7e053e68668d0"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-win32.whl", hash = "sha256:2ecabd9ccaa6e914e3dbb2aa46b76dede7eadc8cbf1b8083c94d936bcd5ffb49"}, + {file = "SQLAlchemy-2.0.30-cp311-cp311-win_amd64.whl", hash = "sha256:0b3f4c438e37d22b83e640f825ef0f37b95db9aa2d68203f2c9549375d0b2260"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a79d65395ac5e6b0c2890935bad892eabb911c4aa8e8015067ddb37eea3d56c"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a5baf9267b752390252889f0c802ea13b52dfee5e369527da229189b8bd592e"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cb5a646930c5123f8461f6468901573f334c2c63c795b9af350063a736d0134"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296230899df0b77dec4eb799bcea6fbe39a43707ce7bb166519c97b583cfcab3"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c62d401223f468eb4da32627bffc0c78ed516b03bb8a34a58be54d618b74d472"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3b69e934f0f2b677ec111b4d83f92dc1a3210a779f69bf905273192cf4ed433e"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-win32.whl", hash = "sha256:77d2edb1f54aff37e3318f611637171e8ec71472f1fdc7348b41dcb226f93d90"}, + {file = "SQLAlchemy-2.0.30-cp312-cp312-win_amd64.whl", hash = "sha256:b6c7ec2b1f4969fc19b65b7059ed00497e25f54069407a8701091beb69e591a5"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a8e3b0a7e09e94be7510d1661339d6b52daf202ed2f5b1f9f48ea34ee6f2d57"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b60203c63e8f984df92035610c5fb76d941254cf5d19751faab7d33b21e5ddc0"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1dc3eabd8c0232ee8387fbe03e0a62220a6f089e278b1f0aaf5e2d6210741ad"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:40ad017c672c00b9b663fcfcd5f0864a0a97828e2ee7ab0c140dc84058d194cf"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e42203d8d20dc704604862977b1470a122e4892791fe3ed165f041e4bf447a1b"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-win32.whl", hash = "sha256:2a4f4da89c74435f2bc61878cd08f3646b699e7d2eba97144030d1be44e27584"}, + {file = "SQLAlchemy-2.0.30-cp37-cp37m-win_amd64.whl", hash = "sha256:b6bf767d14b77f6a18b6982cbbf29d71bede087edae495d11ab358280f304d8e"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc0c53579650a891f9b83fa3cecd4e00218e071d0ba00c4890f5be0c34887ed3"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:311710f9a2ee235f1403537b10c7687214bb1f2b9ebb52702c5aa4a77f0b3af7"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:408f8b0e2c04677e9c93f40eef3ab22f550fecb3011b187f66a096395ff3d9fd"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a4b4fb0dd4d2669070fb05b8b8824afd0af57587393015baee1cf9890242d9"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a943d297126c9230719c27fcbbeab57ecd5d15b0bd6bfd26e91bfcfe64220621"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a089e218654e740a41388893e090d2e2c22c29028c9d1353feb38638820bbeb"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-win32.whl", hash = "sha256:fa561138a64f949f3e889eb9ab8c58e1504ab351d6cf55259dc4c248eaa19da6"}, + {file = "SQLAlchemy-2.0.30-cp38-cp38-win_amd64.whl", hash = "sha256:7d74336c65705b986d12a7e337ba27ab2b9d819993851b140efdf029248e818e"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae8c62fe2480dd61c532ccafdbce9b29dacc126fe8be0d9a927ca3e699b9491a"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2383146973a15435e4717f94c7509982770e3e54974c71f76500a0136f22810b"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8409de825f2c3b62ab15788635ccaec0c881c3f12a8af2b12ae4910a0a9aeef6"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0094c5dc698a5f78d3d1539853e8ecec02516b62b8223c970c86d44e7a80f6c7"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:edc16a50f5e1b7a06a2dcc1f2205b0b961074c123ed17ebda726f376a5ab0953"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f7703c2010355dd28f53deb644a05fc30f796bd8598b43f0ba678878780b6e4c"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-win32.whl", hash = "sha256:1f9a727312ff6ad5248a4367358e2cf7e625e98b1028b1d7ab7b806b7d757513"}, + {file = "SQLAlchemy-2.0.30-cp39-cp39-win_amd64.whl", hash = "sha256:a0ef36b28534f2a5771191be6edb44cc2673c7b2edf6deac6562400288664221"}, + {file = "SQLAlchemy-2.0.30-py3-none-any.whl", hash = "sha256:7108d569d3990c71e26a42f60474b4c02c8586c4681af5fd67e51a044fdea86a"}, + {file = "SQLAlchemy-2.0.30.tar.gz", hash = "sha256:2b1708916730f4830bc69d6f49d37f7698b5bd7530aca7f04f785f8849e95255"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "sqlparse" +version = "0.5.0" +description = "A non-validating SQL parser." +optional = false +python-versions = ">=3.8" +files = [ + {file = "sqlparse-0.5.0-py3-none-any.whl", hash = "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663"}, + {file = "sqlparse-0.5.0.tar.gz", hash = "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93"}, +] + +[package.extras] +dev = ["build", "hatch"] +doc = ["sphinx"] + +[[package]] +name = "sympy" +version = "1.12" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, + {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, +] + +[package.dependencies] +mpmath = ">=0.19" + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tenacity" +version = "8.2.2" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.6" +files = [ + {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, + {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, +] + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "threadpoolctl" +version = "3.5.0" +description = "threadpoolctl" +optional = false +python-versions = ">=3.8" +files = [ + {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, + {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, +] + +[[package]] +name = "tidb-vector" +version = "0.0.9" +description = "A Python client for TiDB Vector" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "tidb_vector-0.0.9-py3-none-any.whl", hash = "sha256:db060ee1c981326d3882d0810e0b8b57811f278668f9381168997b360c4296c2"}, + {file = "tidb_vector-0.0.9.tar.gz", hash = "sha256:e10680872532808e1bcffa7a92dd2b05bb65d63982f833edb3c6cd590dec7709"}, +] + +[package.dependencies] +numpy = ">=1,<2" + +[package.extras] +client = ["SQLAlchemy (>=1.4,<3)"] + +[[package]] +name = "tiktoken" +version = "0.7.0" +description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, + {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79383a6e2c654c6040e5f8506f3750db9ddd71b550c724e673203b4f6b4b4590"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4511c52caacf3c4981d1ae2df85908bd31853f33d30b345c8b6830763f769c"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13c94efacdd3de9aff824a788353aa5749c0faee1fbe3816df365ea450b82311"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8e58c7eb29d2ab35a7a8929cbeea60216a4ccdf42efa8974d8e176d50c9a3df5"}, + {file = "tiktoken-0.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:21a20c3bd1dd3e55b91c1331bf25f4af522c525e771691adbc9a69336fa7f702"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b6e7dc2e7ad1b3757e8a24597415bafcfb454cebf9a33a01f2e6ba2e663992"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1063c5748be36344c7e18c7913c53e2cca116764c2080177e57d62c7ad4576d1"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20295d21419bfcca092644f7e2f2138ff947a6eb8cfc732c09cc7d76988d4a89"}, + {file = "tiktoken-0.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:959d993749b083acc57a317cbc643fb85c014d055b2119b739487288f4e5d1cb"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:71c55d066388c55a9c00f61d2c456a6086673ab7dec22dd739c23f77195b1908"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09ed925bccaa8043e34c519fbb2f99110bd07c6fd67714793c21ac298e449410"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03c6c40ff1db0f48a7b4d2dafeae73a5607aacb472fa11f125e7baf9dce73704"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20b5c6af30e621b4aca094ee61777a44118f52d886dbe4f02b70dfe05c15350"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d427614c3e074004efa2f2411e16c826f9df427d3c70a54725cae860f09e4bf4"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c46d7af7b8c6987fac9b9f61041b452afe92eb087d29c9ce54951280f899a97"}, + {file = "tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2398fecd38c921bcd68418675a6d155fad5f5e14c2e92fcf5fe566fa5485a858"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f5f6afb52fb8a7ea1c811e435e4188f2bef81b5e0f7a8635cc79b0eef0193d6"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:861f9ee616766d736be4147abac500732b505bf7013cfaf019b85892637f235e"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54031f95c6939f6b78122c0aa03a93273a96365103793a22e1793ee86da31685"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fffdcb319b614cf14f04d02a52e26b1d1ae14a570f90e9b55461a72672f7b13d"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c72baaeaefa03ff9ba9688624143c858d1f6b755bb85d456d59e529e17234769"}, + {file = "tiktoken-0.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:131b8aeb043a8f112aad9f46011dced25d62629091e51d9dc1adbf4a1cc6aa98"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cabc6dc77460df44ec5b879e68692c63551ae4fae7460dd4ff17181df75f1db7"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d57f29171255f74c0aeacd0651e29aa47dff6f070cb9f35ebc14c82278f3b25"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ee92776fdbb3efa02a83f968c19d4997a55c8e9ce7be821ceee04a1d1ee149c"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e215292e99cb41fbc96988ef62ea63bb0ce1e15f2c147a61acc319f8b4cbe5bf"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a81bac94769cab437dd3ab0b8a4bc4e0f9cf6835bcaa88de71f39af1791727a"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d6d73ea93e91d5ca771256dfc9d1d29f5a554b83821a1dc0891987636e0ae226"}, + {file = "tiktoken-0.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:2bcb28ddf79ffa424f171dfeef9a4daff61a94c631ca6813f43967cb263b83b9"}, + {file = "tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6"}, +] + +[package.dependencies] +regex = ">=2022.1.18" +requests = ">=2.26.0" + +[package.extras] +blobfile = ["blobfile (>=2)"] + +[[package]] +name = "tinysegmenter" +version = "0.3" +description = "Very compact Japanese tokenizer" +optional = false +python-versions = "*" +files = [ + {file = "tinysegmenter-0.3.tar.gz", hash = "sha256:ed1f6d2e806a4758a73be589754384cbadadc7e1a414c81a166fc9adf2d40c6d"}, +] + +[[package]] +name = "tldextract" +version = "5.1.2" +description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well." +optional = false +python-versions = ">=3.8" +files = [ + {file = "tldextract-5.1.2-py3-none-any.whl", hash = "sha256:4dfc4c277b6b97fa053899fcdb892d2dc27295851ab5fac4e07797b6a21b2e46"}, + {file = "tldextract-5.1.2.tar.gz", hash = "sha256:c9e17f756f05afb5abac04fe8f766e7e70f9fe387adb1859f0f52408ee060200"}, +] + +[package.dependencies] +filelock = ">=3.0.8" +idna = "*" +requests = ">=2.1.0" +requests-file = ">=1.4" + +[package.extras] +release = ["build", "twine"] +testing = ["black", "mypy", "pytest", "pytest-gitignore", "pytest-mock", "responses", "ruff", "syrupy", "tox", "types-filelock", "types-requests"] + +[[package]] +name = "tokenizers" +version = "0.15.2" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9b9b070fdad06e347563b88c278995735292ded1132f8657084989a4c84a6d5"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea621a7eef4b70e1f7a4e84dd989ae3f0eeb50fc8690254eacc08acb623e82f1"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf7fd9a5141634fa3aa8d6b7be362e6ae1b4cda60da81388fa533e0b552c98fd"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f2a832cd0825295f7179eaf173381dc45230f9227ec4b44378322d900447c9"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b9ec69247a23747669ec4b0ca10f8e3dfb3545d550258129bd62291aabe8605"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b6a4c78da863ff26dbd5ad9a8ecc33d8a8d97b535172601cf00aee9d7ce9ce"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5ab2a4d21dcf76af60e05af8063138849eb1d6553a0d059f6534357bce8ba364"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a47acfac7e511f6bbfcf2d3fb8c26979c780a91e06fb5b9a43831b2c0153d024"}, + {file = "tokenizers-0.15.2-cp310-none-win32.whl", hash = "sha256:064ff87bb6acdbd693666de9a4b692add41308a2c0ec0770d6385737117215f2"}, + {file = "tokenizers-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3b919afe4df7eb6ac7cafd2bd14fb507d3f408db7a68c43117f579c984a73843"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:89cd1cb93e4b12ff39bb2d626ad77e35209de9309a71e4d3d4672667b4b256e7"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfed5c64e5be23d7ee0f0e98081a25c2a46b0b77ce99a4f0605b1ec43dd481fa"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a907d76dcfda37023ba203ab4ceeb21bc5683436ebefbd895a0841fd52f6f6f2"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ea60479de6fc7b8ae756b4b097572372d7e4032e2521c1bbf3d90c90a99ff0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:48e2b9335be2bc0171df9281385c2ed06a15f5cf121c44094338306ab7b33f2c"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:112a1dd436d2cc06e6ffdc0b06d55ac019a35a63afd26475205cb4b1bf0bfbff"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4620cca5c2817177ee8706f860364cc3a8845bc1e291aaf661fb899e5d1c45b0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccd73a82751c523b3fc31ff8194702e4af4db21dc20e55b30ecc2079c5d43cb7"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:107089f135b4ae7817affe6264f8c7a5c5b4fd9a90f9439ed495f54fcea56fb4"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0ff110ecc57b7aa4a594396525a3451ad70988e517237fe91c540997c4e50e29"}, + {file = "tokenizers-0.15.2-cp311-none-win32.whl", hash = "sha256:6d76f00f5c32da36c61f41c58346a4fa7f0a61be02f4301fd30ad59834977cc3"}, + {file = "tokenizers-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:cc90102ed17271cf0a1262babe5939e0134b3890345d11a19c3145184b706055"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f86593c18d2e6248e72fb91c77d413a815153b8ea4e31f7cd443bdf28e467670"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0774bccc6608eca23eb9d620196687c8b2360624619623cf4ba9dc9bd53e8b51"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0222c5b7c9b26c0b4822a82f6a7011de0a9d3060e1da176f66274b70f846b98"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3835738be1de66624fff2f4f6f6684775da4e9c00bde053be7564cbf3545cc66"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0143e7d9dcd811855c1ce1ab9bf5d96d29bf5e528fd6c7824d0465741e8c10fd"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db35825f6d54215f6b6009a7ff3eedee0848c99a6271c870d2826fbbedf31a38"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f5e64b0389a2be47091d8cc53c87859783b837ea1a06edd9d8e04004df55a5c"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e0480c452217edd35eca56fafe2029fb4d368b7c0475f8dfa3c5c9c400a7456"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a33ab881c8fe70474980577e033d0bc9a27b7ab8272896e500708b212995d834"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a308a607ca9de2c64c1b9ba79ec9a403969715a1b8ba5f998a676826f1a7039d"}, + {file = "tokenizers-0.15.2-cp312-none-win32.whl", hash = "sha256:b8fcfa81bcb9447df582c5bc96a031e6df4da2a774b8080d4f02c0c16b42be0b"}, + {file = "tokenizers-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:38d7ab43c6825abfc0b661d95f39c7f8af2449364f01d331f3b51c94dcff7221"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:38bfb0204ff3246ca4d5e726e8cc8403bfc931090151e6eede54d0e0cf162ef0"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c861d35e8286a53e06e9e28d030b5a05bcbf5ac9d7229e561e53c352a85b1fc"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:936bf3842db5b2048eaa53dade907b1160f318e7c90c74bfab86f1e47720bdd6"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:620beacc3373277700d0e27718aa8b25f7b383eb8001fba94ee00aeea1459d89"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2735ecbbf37e52db4ea970e539fd2d450d213517b77745114f92867f3fc246eb"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:473c83c5e2359bb81b0b6fde870b41b2764fcdd36d997485e07e72cc3a62264a"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968fa1fb3c27398b28a4eca1cbd1e19355c4d3a6007f7398d48826bbe3a0f728"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:865c60ae6eaebdde7da66191ee9b7db52e542ed8ee9d2c653b6d190a9351b980"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7c0d8b52664ab2d4a8d6686eb5effc68b78608a9008f086a122a7b2996befbab"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f33dfbdec3784093a9aebb3680d1f91336c56d86cc70ddf88708251da1fe9064"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d44ba80988ff9424e33e0a49445072ac7029d8c0e1601ad25a0ca5f41ed0c1d6"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:dce74266919b892f82b1b86025a613956ea0ea62a4843d4c4237be2c5498ed3a"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ef06b9707baeb98b316577acb04f4852239d856b93e9ec3a299622f6084e4be"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73e2e74bbb07910da0d37c326869f34113137b23eadad3fc00856e6b3d9930c"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eeb12daf02a59e29f578a865f55d87cd103ce62bd8a3a5874f8fdeaa82e336b"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ba9f6895af58487ca4f54e8a664a322f16c26bbb442effd01087eba391a719e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccec77aa7150e38eec6878a493bf8c263ff1fa8a62404e16c6203c64c1f16a26"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f40604f5042ff210ba82743dda2b6aa3e55aa12df4e9f2378ee01a17e2855e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5645938a42d78c4885086767c70923abad047163d809c16da75d6b290cb30bbe"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05a77cbfebe28a61ab5c3891f9939cc24798b63fa236d84e5f29f3a85a200c00"}, + {file = "tokenizers-0.15.2-cp37-none-win32.whl", hash = "sha256:361abdc068e8afe9c5b818769a48624687fb6aaed49636ee39bec4e95e1a215b"}, + {file = "tokenizers-0.15.2-cp37-none-win_amd64.whl", hash = "sha256:7ef789f83eb0f9baeb4d09a86cd639c0a5518528f9992f38b28e819df397eb06"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4fe1f74a902bee74a3b25aff180fbfbf4f8b444ab37c4d496af7afd13a784ed2"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4b89038a684f40a6b15d6b09f49650ac64d951ad0f2a3ea9169687bbf2a8ba"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d05a1b06f986d41aed5f2de464c003004b2df8aaf66f2b7628254bcbfb72a438"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508711a108684111ec8af89d3a9e9e08755247eda27d0ba5e3c50e9da1600f6d"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:daa348f02d15160cb35439098ac96e3a53bacf35885072611cd9e5be7d333daa"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494fdbe5932d3416de2a85fc2470b797e6f3226c12845cadf054dd906afd0442"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2d60f5246f4da9373f75ff18d64c69cbf60c3bca597290cea01059c336d2470"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93268e788825f52de4c7bdcb6ebc1fcd4a5442c02e730faa9b6b08f23ead0e24"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fc7083ab404019fc9acafe78662c192673c1e696bd598d16dc005bd663a5cf9"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e39b41e5531d6b2122a77532dbea60e171ef87a3820b5a3888daa847df4153"}, + {file = "tokenizers-0.15.2-cp38-none-win32.whl", hash = "sha256:06cd0487b1cbfabefb2cc52fbd6b1f8d4c37799bd6c6e1641281adaa6b2504a7"}, + {file = "tokenizers-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:5179c271aa5de9c71712e31cb5a79e436ecd0d7532a408fa42a8dbfa4bc23fd9"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82f8652a74cc107052328b87ea8b34291c0f55b96d8fb261b3880216a9f9e48e"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02458bee6f5f3139f1ebbb6d042b283af712c0981f5bc50edf771d6b762d5e4f"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a09cd26cca2e1c349f91aa665309ddb48d71636370749414fbf67bc83c5343"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158be8ea8554e5ed69acc1ce3fbb23a06060bd4bbb09029431ad6b9a466a7121"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddba9a2b0c8c81633eca0bb2e1aa5b3a15362b1277f1ae64176d0f6eba78ab1"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ef5dd1d39797044642dbe53eb2bc56435308432e9c7907728da74c69ee2adca"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:454c203164e07a860dbeb3b1f4a733be52b0edbb4dd2e5bd75023ffa8b49403a"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cf6b7f1d4dc59af960e6ffdc4faffe6460bbfa8dce27a58bf75755ffdb2526d"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2ef09bbc16519f6c25d0c7fc0c6a33a6f62923e263c9d7cca4e58b8c61572afb"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9a2ebdd2ad4ec7a68e7615086e633857c85e2f18025bd05d2a4399e6c5f7169"}, + {file = "tokenizers-0.15.2-cp39-none-win32.whl", hash = "sha256:918fbb0eab96fe08e72a8c2b5461e9cce95585d82a58688e7f01c2bd546c79d0"}, + {file = "tokenizers-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:524e60da0135e106b254bd71f0659be9f89d83f006ea9093ce4d1fab498c6d0d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9b648a58281c4672212fab04e60648fde574877d0139cd4b4f93fe28ca8944"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7c7d18b733be6bbca8a55084027f7be428c947ddf871c500ee603e375013ffba"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:13ca3611de8d9ddfbc4dc39ef54ab1d2d4aaa114ac8727dfdc6a6ec4be017378"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:237d1bf3361cf2e6463e6c140628e6406766e8b27274f5fcc62c747ae3c6f094"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67a0fe1e49e60c664915e9fb6b0cb19bac082ab1f309188230e4b2920230edb3"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e022fe65e99230b8fd89ebdfea138c24421f91c1a4f4781a8f5016fd5cdfb4d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d857be2df69763362ac699f8b251a8cd3fac9d21893de129bc788f8baaef2693"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:708bb3e4283177236309e698da5fcd0879ce8fd37457d7c266d16b550bcbbd18"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c35e09e9899b72a76e762f9854e8750213f67567787d45f37ce06daf57ca78"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1257f4394be0d3b00de8c9e840ca5601d0a4a8438361ce9c2b05c7d25f6057b"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02272fe48280e0293a04245ca5d919b2c94a48b408b55e858feae9618138aeda"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dc3ad9ebc76eabe8b1d7c04d38be884b8f9d60c0cdc09b0aa4e3bcf746de0388"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:32e16bdeffa7c4f46bf2152172ca511808b952701d13e7c18833c0b73cb5c23f"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fb16ba563d59003028b678d2361a27f7e4ae0ab29c7a80690efa20d829c81fdb"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2277c36d2d6cdb7876c274547921a42425b6810d38354327dd65a8009acf870c"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cf75d32e8d250781940d07f7eece253f2fe9ecdb1dc7ba6e3833fa17b82fcbc"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b3b31884dc8e9b21508bb76da80ebf7308fdb947a17affce815665d5c4d028"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10122d8d8e30afb43bb1fe21a3619f62c3e2574bff2699cf8af8b0b6c5dc4a3"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d88b96ff0fe8e91f6ef01ba50b0d71db5017fa4e3b1d99681cec89a85faf7bf7"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:37aaec5a52e959892870a7c47cef80c53797c0db9149d458460f4f31e2fb250e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2ea752f2b0fe96eb6e2f3adbbf4d72aaa1272079b0dfa1145507bd6a5d537e6"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b19a808d8799fda23504a5cd31d2f58e6f52f140380082b352f877017d6342b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c86e5e068ac8b19204419ed8ca90f9d25db20578f5881e337d203b314f4104"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de19c4dc503c612847edf833c82e9f73cd79926a384af9d801dcf93f110cea4e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea09acd2fe3324174063d61ad620dec3bcf042b495515f27f638270a7d466e8b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cf27fd43472e07b57cf420eee1e814549203d56de00b5af8659cb99885472f1f"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7ca22bd897537a0080521445d91a58886c8c04084a6a19e6c78c586e0cfa92a5"}, + {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, +] + +[package.dependencies] +huggingface_hub = ">=0.16.4,<1.0" + +[package.extras] +dev = ["tokenizers[testing]"] +docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] +testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tqdm" +version = "4.66.4" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "transformers" +version = "4.35.2" +description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "transformers-4.35.2-py3-none-any.whl", hash = "sha256:9dfa76f8692379544ead84d98f537be01cd1070de75c74efb13abcbc938fbe2f"}, + {file = "transformers-4.35.2.tar.gz", hash = "sha256:2d125e197d77b0cdb6c9201df9fa7e2101493272e448b9fba9341c695bee2f52"}, +] + +[package.dependencies] +filelock = "*" +huggingface-hub = ">=0.16.4,<1.0" +numpy = ">=1.17" +packaging = ">=20.0" +pyyaml = ">=5.1" +regex = "!=2019.12.17" +requests = "*" +safetensors = ">=0.3.1" +tokenizers = ">=0.14,<0.19" +tqdm = ">=4.27" + +[package.extras] +accelerate = ["accelerate (>=0.20.3)"] +agents = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.10,!=1.12.0)"] +all = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision"] +audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +codecarbon = ["codecarbon (==1.2.0)"] +deepspeed = ["accelerate (>=0.20.3)", "deepspeed (>=0.9.3)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.20.3)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.14,<0.19)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "accelerate (>=0.20.3)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +docs = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "torchaudio", "torchvision"] +docs-specific = ["hf-doc-builder"] +flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)"] +flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +ftfy = ["ftfy"] +integrations = ["optuna", "ray[tune]", "sigopt"] +ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "rhoknp (>=1.1.0,<1.3.1)", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] +modelcreation = ["cookiecutter (==1.7.3)"] +natten = ["natten (>=0.14.6)"] +onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] +onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] +optuna = ["optuna"] +quality = ["GitPython (<3.1.19)", "black (>=23.1,<24.0)", "datasets (!=2.5.0)", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "ruff (>=0.0.241,<=0.0.259)", "urllib3 (<2.0.0)"] +ray = ["ray[tune]"] +retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] +sagemaker = ["sagemaker (>=2.31.0)"] +sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] +serving = ["fastapi", "pydantic (<2)", "starlette", "uvicorn"] +sigopt = ["sigopt"] +sklearn = ["scikit-learn"] +speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "tensorboard", "timeout-decorator"] +tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx"] +tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.6,<2.15)", "tensorflow-text (<2.15)", "tf2onnx"] +tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +timm = ["timm"] +tokenizers = ["tokenizers (>=0.14,<0.19)"] +torch = ["accelerate (>=0.20.3)", "torch (>=1.10,!=1.12.0)"] +torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] +torch-vision = ["Pillow (<10.0.0)", "torchvision"] +torchhub = ["filelock", "huggingface-hub (>=0.16.4,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.14,<0.19)", "torch (>=1.10,!=1.12.0)", "tqdm (>=4.27)"] +video = ["av (==9.2.0)", "decord (==0.6.0)"] +vision = ["Pillow (<10.0.0)"] + +[[package]] +name = "twilio" +version = "9.0.5" +description = "Twilio API client and TwiML generator" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "twilio-9.0.5-py2.py3-none-any.whl", hash = "sha256:5e09e910b9368f50f23cb3c3dd5ba77164d80a81e9d97db955cbac322deb2a4e"}, + {file = "twilio-9.0.5.tar.gz", hash = "sha256:e9b5727943584d25d618fe502f0100fc5283215f31c863f80b5c64581b4702b0"}, +] + +[package.dependencies] +aiohttp = ">=3.8.4" +aiohttp-retry = ">=2.8.3" +PyJWT = ">=2.0.0,<3.0.0" +requests = ">=2.0.0" + +[[package]] +name = "types-requests" +version = "2.31.0.20240406" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-requests-2.31.0.20240406.tar.gz", hash = "sha256:4428df33c5503945c74b3f42e82b181e86ec7b724620419a2966e2de604ce1a1"}, + {file = "types_requests-2.31.0.20240406-py3-none-any.whl", hash = "sha256:6216cdac377c6b9a040ac1c0404f7284bd13199c0e1bb235f4324627e8898cf5"}, +] + +[package.dependencies] +urllib3 = ">=2" + +[[package]] +name = "typing-extensions" +version = "4.11.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +description = "Runtime inspection utilities for typing module." +optional = false +python-versions = "*" +files = [ + {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, + {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[[package]] +name = "tzlocal" +version = "5.2" +description = "tzinfo object for the local timezone" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, + {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, +] + +[package.dependencies] +tzdata = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] + +[[package]] +name = "ujson" +version = "5.10.0" +description = "Ultra fast JSON encoder and decoder for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, + {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cffecf73391e8abd65ef5f4e4dd523162a3399d5e84faa6aebbf9583df86d6"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26b0e2d2366543c1bb4fbd457446f00b0187a2bddf93148ac2da07a53fe51569"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf270c6dba1be7a41125cd1e4fc7ba384bf564650beef0df2dd21a00b7f5770"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a245d59f2ffe750446292b0094244df163c3dc96b3ce152a2c837a44e7cda9d1"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:94a87f6e151c5f483d7d54ceef83b45d3a9cca7a9cb453dbdbb3f5a6f64033f5"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:29b443c4c0a113bcbb792c88bea67b675c7ca3ca80c3474784e08bba01c18d51"}, + {file = "ujson-5.10.0-cp310-cp310-win32.whl", hash = "sha256:c18610b9ccd2874950faf474692deee4223a994251bc0a083c114671b64e6518"}, + {file = "ujson-5.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:924f7318c31874d6bb44d9ee1900167ca32aa9b69389b98ecbde34c1698a250f"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:129e39af3a6d85b9c26d5577169c21d53821d8cf68e079060602e861c6e5da1b"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f77b74475c462cb8b88680471193064d3e715c7c6074b1c8c412cb526466efe9"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ec0ca8c415e81aa4123501fee7f761abf4b7f386aad348501a26940beb1860f"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab13a2a9e0b2865a6c6db9271f4b46af1c7476bfd51af1f64585e919b7c07fd4"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57aaf98b92d72fc70886b5a0e1a1ca52c2320377360341715dd3933a18e827b1"}, + {file = "ujson-5.10.0-cp311-cp311-win32.whl", hash = "sha256:2987713a490ceb27edff77fb184ed09acdc565db700ee852823c3dc3cffe455f"}, + {file = "ujson-5.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:f00ea7e00447918ee0eff2422c4add4c5752b1b60e88fcb3c067d4a21049a720"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98ba15d8cbc481ce55695beee9f063189dce91a4b08bc1d03e7f0152cd4bbdd5"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6627029ae4f52d0e1a2451768c2c37c0c814ffc04f796eb36244cf16b8e57043"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3caf9cd64abfeb11a3b661329085c5e167abbe15256b3b68cb5d914ba7396f3"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6e32abdce572e3a8c3d02c886c704a38a1b015a1fb858004e03d20ca7cecbb21"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a65b6af4d903103ee7b6f4f5b85f1bfd0c90ba4eeac6421aae436c9988aa64a2"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:604a046d966457b6cdcacc5aa2ec5314f0e8c42bae52842c1e6fa02ea4bda42e"}, + {file = "ujson-5.10.0-cp312-cp312-win32.whl", hash = "sha256:6dea1c8b4fc921bf78a8ff00bbd2bfe166345f5536c510671bccececb187c80e"}, + {file = "ujson-5.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:618efd84dc1acbd6bff8eaa736bb6c074bfa8b8a98f55b61c38d4ca2c1f7f287"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38d5d36b4aedfe81dfe251f76c0467399d575d1395a1755de391e58985ab1c2e"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67079b1f9fb29ed9a2914acf4ef6c02844b3153913eb735d4bf287ee1db6e557"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7d0e0ceeb8fe2468c70ec0c37b439dd554e2aa539a8a56365fd761edb418988"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59e02cd37bc7c44d587a0ba45347cc815fb7a5fe48de16bf05caa5f7d0d2e816"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a890b706b64e0065f02577bf6d8ca3b66c11a5e81fb75d757233a38c07a1f20"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:621e34b4632c740ecb491efc7f1fcb4f74b48ddb55e65221995e74e2d00bbff0"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f"}, + {file = "ujson-5.10.0-cp313-cp313-win32.whl", hash = "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165"}, + {file = "ujson-5.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a984a3131da7f07563057db1c3020b1350a3e27a8ec46ccbfbf21e5928a43050"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73814cd1b9db6fc3270e9d8fe3b19f9f89e78ee9d71e8bd6c9a626aeaeaf16bd"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61e1591ed9376e5eddda202ec229eddc56c612b61ac6ad07f96b91460bb6c2fb"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2c75269f8205b2690db4572a4a36fe47cd1338e4368bc73a7a0e48789e2e35a"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7223f41e5bf1f919cd8d073e35b229295aa8e0f7b5de07ed1c8fddac63a6bc5d"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc2fd6b3067c0782e7002ac3b38cf48608ee6366ff176bbd02cf969c9c20fe"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:232cc85f8ee3c454c115455195a205074a56ff42608fd6b942aa4c378ac14dd7"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cc6139531f13148055d691e442e4bc6601f6dba1e6d521b1585d4788ab0bfad4"}, + {file = "ujson-5.10.0-cp38-cp38-win32.whl", hash = "sha256:e7ce306a42b6b93ca47ac4a3b96683ca554f6d35dd8adc5acfcd55096c8dfcb8"}, + {file = "ujson-5.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:e82d4bb2138ab05e18f089a83b6564fee28048771eb63cdecf4b9b549de8a2cc"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dfef2814c6b3291c3c5f10065f745a1307d86019dbd7ea50e83504950136ed5b"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4734ee0745d5928d0ba3a213647f1c4a74a2a28edc6d27b2d6d5bd9fa4319e27"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47ebb01bd865fdea43da56254a3930a413f0c5590372a1241514abae8aa7c76"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dee5e97c2496874acbf1d3e37b521dd1f307349ed955e62d1d2f05382bc36dd5"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7490655a2272a2d0b072ef16b0b58ee462f4973a8f6bbe64917ce5e0a256f9c0"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba17799fcddaddf5c1f75a4ba3fd6441f6a4f1e9173f8a786b42450851bd74f1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2aff2985cef314f21d0fecc56027505804bc78802c0121343874741650a4d3d1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ad88ac75c432674d05b61184178635d44901eb749786c8eb08c102330e6e8996"}, + {file = "ujson-5.10.0-cp39-cp39-win32.whl", hash = "sha256:2544912a71da4ff8c4f7ab5606f947d7299971bdd25a45e008e467ca638d13c9"}, + {file = "ujson-5.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:3ff201d62b1b177a46f113bb43ad300b424b7847f9c5d38b1b4ad8f75d4a282a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b6fee72fa77dc172a28f21693f64d93166534c263adb3f96c413ccc85ef6e64"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:61d0af13a9af01d9f26d2331ce49bb5ac1fb9c814964018ac8df605b5422dcb3"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecb24f0bdd899d368b715c9e6664166cf694d1e57be73f17759573a6986dd95a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeaf1c48e32f07d8820c705ff8e645f8afa690cca1544adba4ebfa067efdc88"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:baed37ea46d756aca2955e99525cc02d9181de67f25515c468856c38d52b5f3b"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7663960f08cd5a2bb152f5ee3992e1af7690a64c0e26d31ba7b3ff5b2ee66337"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8640fb4072d36b08e95a3a380ba65779d356b2fee8696afeb7794cf0902d0a1"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78778a3aa7aafb11e7ddca4e29f46bc5139131037ad628cc10936764282d6753"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0111b27f2d5c820e7f2dbad7d48e3338c824e7ac4d2a12da3dc6061cc39c8e6"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:c66962ca7565605b355a9ed478292da628b8f18c0f2793021ca4425abf8b01e5"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba43cc34cce49cf2d4bc76401a754a81202d8aa926d0e2b79f0ee258cb15d3a4"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ac56eb983edce27e7f51d05bc8dd820586c6e6be1c5216a6809b0c668bb312b8"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44bd4b23a0e723bf8b10628288c2c7c335161d6840013d4d5de20e48551773b"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c10f4654e5326ec14a46bcdeb2b685d4ada6911050aa8baaf3501e57024b804"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0de4971a89a762398006e844ae394bd46991f7c385d7a6a3b93ba229e6dac17e"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e1402f0564a97d2a52310ae10a64d25bcef94f8dd643fcf5d310219d915484f7"}, + {file = "ujson-5.10.0.tar.gz", hash = "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1"}, +] + +[[package]] +name = "unstructured" +version = "0.10.30" +description = "A library that prepares raw documents for downstream ML tasks." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "unstructured-0.10.30-py3-none-any.whl", hash = "sha256:0615f14daa37450e9c0fcf3c3fd178c3a06b6b8d006a36d1a5e54dbe487aa6b6"}, + {file = "unstructured-0.10.30.tar.gz", hash = "sha256:a86c3d15c572a28322d83cb5ecf0ac7a24f1c36864fb7c68df096de8a1acc106"}, +] + +[package.dependencies] +backoff = "*" +beautifulsoup4 = "*" +chardet = "*" +dataclasses-json = "*" +emoji = "*" +filetype = "*" +langdetect = "*" +lxml = "*" +markdown = {version = "*", optional = true, markers = "extra == \"md\""} +msg-parser = {version = "*", optional = true, markers = "extra == \"msg\""} +nltk = "*" +numpy = "*" +pypandoc = {version = "*", optional = true, markers = "extra == \"epub\""} +python-docx = {version = ">=1.1.0", optional = true, markers = "extra == \"docx\""} +python-iso639 = "*" +python-magic = "*" +python-pptx = {version = "<=0.6.23", optional = true, markers = "extra == \"ppt\" or extra == \"pptx\""} +rapidfuzz = "*" +requests = "*" +tabulate = "*" +typing-extensions = "*" + +[package.extras] +airtable = ["pyairtable"] +all-docs = ["markdown", "msg-parser", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pypandoc", "python-docx (>=1.1.0)", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.11)", "unstructured.pytesseract (>=0.3.12)", "xlrd"] +azure = ["adlfs", "fsspec (==2023.9.1)"] +azure-cognitive-search = ["azure-search-documents"] +bedrock = ["boto3", "langchain"] +biomed = ["bs4"] +box = ["boxfs", "fsspec (==2023.9.1)"] +confluence = ["atlassian-python-api"] +csv = ["pandas"] +delta-table = ["deltalake", "fsspec (==2023.9.1)"] +discord = ["discord-py"] +doc = ["python-docx (>=1.1.0)"] +docx = ["python-docx (>=1.1.0)"] +dropbox = ["dropboxdrivefs", "fsspec (==2023.9.1)"] +elasticsearch = ["elasticsearch", "jq"] +embed-huggingface = ["huggingface", "langchain", "sentence-transformers"] +epub = ["pypandoc"] +gcs = ["bs4", "fsspec (==2023.9.1)", "gcsfs"] +github = ["pygithub (>1.58.0)"] +gitlab = ["python-gitlab"] +google-drive = ["google-api-python-client"] +huggingface = ["langdetect", "sacremoses", "sentencepiece", "torch", "transformers"] +image = ["onnx", "pdf2image", "pdfminer.six", "unstructured-inference (==0.7.11)", "unstructured.pytesseract (>=0.3.12)"] +jira = ["atlassian-python-api"] +local-inference = ["markdown", "msg-parser", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pypandoc", "python-docx (>=1.1.0)", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.11)", "unstructured.pytesseract (>=0.3.12)", "xlrd"] +md = ["markdown"] +msg = ["msg-parser"] +notion = ["htmlBuilder", "notion-client"] +odt = ["pypandoc", "python-docx (>=1.1.0)"] +onedrive = ["Office365-REST-Python-Client (<2.4.3)", "bs4", "msal"] +openai = ["langchain", "openai", "tiktoken"] +org = ["pypandoc"] +outlook = ["Office365-REST-Python-Client (<2.4.3)", "msal"] +paddleocr = ["unstructured.paddleocr (==2.6.1.3)"] +pdf = ["onnx", "pdf2image", "pdfminer.six", "unstructured-inference (==0.7.11)", "unstructured.pytesseract (>=0.3.12)"] +ppt = ["python-pptx (<=0.6.23)"] +pptx = ["python-pptx (<=0.6.23)"] +reddit = ["praw"] +rst = ["pypandoc"] +rtf = ["pypandoc"] +s3 = ["fsspec (==2023.9.1)", "s3fs"] +salesforce = ["simple-salesforce"] +sharepoint = ["Office365-REST-Python-Client (<2.4.3)", "msal"] +slack = ["slack-sdk"] +tsv = ["pandas"] +wikipedia = ["wikipedia"] +xlsx = ["networkx", "openpyxl", "pandas", "xlrd"] + +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +optional = false +python-versions = ">=3.6" +files = [ + {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, + {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, +] + +[[package]] +name = "urllib3" +version = "2.0.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "validators" +version = "0.21.0" +description = "Python Data Validation for Humans™" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "validators-0.21.0-py3-none-any.whl", hash = "sha256:3470db6f2384c49727ee319afa2e97aec3f8fad736faa6067e0fd7f9eaf2c551"}, + {file = "validators-0.21.0.tar.gz", hash = "sha256:245b98ab778ed9352a7269c6a8f6c2a839bed5b2a7e3e60273ce399d247dd4b3"}, +] + +[[package]] +name = "vanna" +version = "0.5.5" +description = "Generate SQL queries from natural language" +optional = false +python-versions = ">=3.9" +files = [ + {file = "vanna-0.5.5-py3-none-any.whl", hash = "sha256:e1a308b7127b9e98c2579c0e4178fc1475d891c498e4a0667cffa10df8891e73"}, + {file = "vanna-0.5.5.tar.gz", hash = "sha256:7d9bf188a635bb75e4f8db15f0e6dbe72a426784779485f087b2df0ce175e664"}, +] + +[package.dependencies] +clickhouse_driver = {version = "*", optional = true, markers = "extra == \"clickhouse\""} +db-dtypes = {version = "*", optional = true, markers = "extra == \"postgres\""} +duckdb = {version = "*", optional = true, markers = "extra == \"duckdb\""} +flask = "*" +flask-sock = "*" +kaleido = "*" +pandas = "*" +plotly = "*" +psycopg2-binary = {version = "*", optional = true, markers = "extra == \"postgres\""} +PyMySQL = {version = "*", optional = true, markers = "extra == \"mysql\""} +requests = "*" +sqlalchemy = "*" +sqlparse = "*" +tabulate = "*" + +[package.extras] +all = ["PyMySQL", "anthropic", "chromadb", "db-dtypes", "duckdb", "fastembed", "google-cloud-aiplatform", "google-cloud-bigquery", "google-generativeai", "httpx", "marqo", "mistralai", "ollama", "openai", "opensearch-dsl", "opensearch-py", "pinecone-client", "psycopg2-binary", "qdrant-client", "snowflake-connector-python", "transformers", "zhipuai"] +anthropic = ["anthropic"] +bigquery = ["google-cloud-bigquery"] +chromadb = ["chromadb"] +clickhouse = ["clickhouse_driver"] +duckdb = ["duckdb"] +gemini = ["google-generativeai"] +google = ["google-cloud-aiplatform", "google-generativeai"] +hf = ["transformers"] +marqo = ["marqo"] +mistralai = ["mistralai"] +mysql = ["PyMySQL"] +ollama = ["httpx", "ollama"] +openai = ["openai"] +opensearch = ["opensearch-dsl", "opensearch-py"] +pinecone = ["fastembed", "pinecone-client"] +postgres = ["db-dtypes", "psycopg2-binary"] +qdrant = ["fastembed", "qdrant-client"] +snowflake = ["snowflake-connector-python"] +test = ["tox"] +vllm = ["vllm"] +zhipuai = ["zhipuai"] + +[[package]] +name = "vine" +version = "5.1.0" +description = "Python promises." +optional = false +python-versions = ">=3.6" +files = [ + {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, + {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[[package]] +name = "weaviate-client" +version = "3.21.0" +description = "A python native Weaviate client" +optional = false +python-versions = ">=3.8" +files = [ + {file = "weaviate-client-3.21.0.tar.gz", hash = "sha256:ec94ac554883c765e94da8b2947c4f0fa4a0378ed3bbe9f3653df3a5b1745a6d"}, + {file = "weaviate_client-3.21.0-py3-none-any.whl", hash = "sha256:420444ded7106fb000f4f8b2321b5f5fa2387825aa7a303d702accf61026f9d2"}, +] + +[package.dependencies] +authlib = ">=1.1.0" +requests = ">=2.28.0,<=2.31.0" +tqdm = ">=4.59.0,<5.0.0" +validators = ">=0.18.2,<=0.21.0" + +[package.extras] +grpc = ["grpcio", "grpcio-tools"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.7.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "werkzeug" +version = "3.0.3" +description = "The comprehensive WSGI web application library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog (>=2.3)"] + +[[package]] +name = "wikipedia" +version = "1.4.0" +description = "Wikipedia API for Python" +optional = false +python-versions = "*" +files = [ + {file = "wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +requests = ">=2.0.0,<3.0.0" + +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + +[[package]] +name = "xinference-client" +version = "0.9.4" +description = "Client for Xinference" +optional = false +python-versions = "*" +files = [ + {file = "xinference-client-0.9.4.tar.gz", hash = "sha256:21934bc9f3142ade66aaed33c2b6cf244c274d5b4b3163f9981bebdddacf205f"}, + {file = "xinference_client-0.9.4-py3-none-any.whl", hash = "sha256:6d3f1df3537a011f0afee5f9c9ca4f3ff564ca32cc999cf7038b324c0b907d0c"}, +] + +[package.dependencies] +pydantic = "*" +requests = "*" +typing-extensions = "*" + +[package.extras] +dev = ["black", "cython (>=0.29)", "flake8 (>=3.8.0)", "ipython (>=6.5.0)", "pytest (>=3.5.0)", "pytest-asyncio (>=0.14.0)", "pytest-cov (>=2.5.0)", "pytest-forked (>=1.0)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=1.2.0)"] + +[[package]] +name = "xlrd" +version = "2.0.1" +description = "Library for developers to extract data from Microsoft Excel (tm) .xls spreadsheet files" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "xlrd-2.0.1-py2.py3-none-any.whl", hash = "sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd"}, + {file = "xlrd-2.0.1.tar.gz", hash = "sha256:f72f148f54442c6b056bf931dbc34f986fd0c3b0b6b5a58d013c9aef274d0c88"}, +] + +[package.extras] +build = ["twine", "wheel"] +docs = ["sphinx"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "xlsxwriter" +version = "3.2.0" +description = "A Python module for creating Excel XLSX files." +optional = false +python-versions = ">=3.6" +files = [ + {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"}, + {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"}, +] + +[[package]] +name = "yarl" +version = "1.9.4" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "yfinance" +version = "0.2.39" +description = "Download market data from Yahoo! Finance API" +optional = false +python-versions = "*" +files = [ + {file = "yfinance-0.2.39-py2.py3-none-any.whl", hash = "sha256:00645b8d7fe1b1719f90fce5c20a45f215306aa776dd57a61ed1e0ec4af5d2e5"}, + {file = "yfinance-0.2.39.tar.gz", hash = "sha256:ffb9a78a26c2f464e4d5a13a26e46abcf5c8dcbe3b0b1971137b86f586b105c2"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.11.1" +frozendict = ">=2.3.4" +html5lib = ">=1.1" +lxml = ">=4.9.1" +multitasking = ">=0.0.7" +numpy = ">=1.16.5" +pandas = ">=1.3.0" +peewee = ">=3.16.2" +platformdirs = ">=2.0.0" +pytz = ">=2022.5" +requests = ">=2.31" + +[package.extras] +nospam = ["requests-cache (>=1.0)", "requests-ratelimiter (>=0.3.1)"] +repair = ["scipy (>=1.6.3)"] + +[[package]] +name = "zhipuai" +version = "1.0.7" +description = "A SDK library for accessing big model apis from ZhipuAI" +optional = false +python-versions = ">=3.6" +files = [ + {file = "zhipuai-1.0.7-py3-none-any.whl", hash = "sha256:360c01b8c2698f366061452e86d5a36a5ff68a576ea33940da98e4806f232530"}, + {file = "zhipuai-1.0.7.tar.gz", hash = "sha256:b80f699543d83cce8648acf1ce32bc2725d1c1c443baffa5882abc2cc704d581"}, +] + +[package.dependencies] +cachetools = "*" +dataclasses = "*" +PyJWT = "*" +requests = "*" + +[[package]] +name = "zope-event" +version = "5.0" +description = "Very basic event publishing system" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zope.event-5.0-py3-none-any.whl", hash = "sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26"}, + {file = "zope.event-5.0.tar.gz", hash = "sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd"}, +] + +[package.dependencies] +setuptools = "*" + +[package.extras] +docs = ["Sphinx"] +test = ["zope.testrunner"] + +[[package]] +name = "zope-interface" +version = "6.4" +description = "Interfaces for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zope.interface-6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72faa868fcfde49a29d287dce3c83180322467eecd725dd351098efe96e8d4bb"}, + {file = "zope.interface-6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:855b7233fa5d0d1f3be8c14fadf4718dee1c928e1d75f1584bea6ecec6dcc4af"}, + {file = "zope.interface-6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36ee6e507a9fd4f1f0aab8e8dfc801d162e7211c27503cbfb47e1d558941a7fa"}, + {file = "zope.interface-6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:604fa920478dfc0c76cdb7c203572400a8317ffcdac288245c408b42b3d9aee9"}, + {file = "zope.interface-6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c04bd4ee4766d285e83c6d8c042663a98efb934389e05ccd643fefb066c88a9d"}, + {file = "zope.interface-6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4782e173c2fde4f649c2a9a68082445bc1f2c27f41907de06bf1ba82585847f2"}, + {file = "zope.interface-6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:646cd83d24065d074f22f61fe101d20dbf4b729ca7831cc782ec986eb9156f93"}, + {file = "zope.interface-6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0f61ccbc26e08031d0e72b6a0cbf9b4030f035913cb2b39f940aa42eb8e0063"}, + {file = "zope.interface-6.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:414e6dccdf4a5c96c0c98da68ba040dbf9ba7511b61b34e228f11b0ed90c439d"}, + {file = "zope.interface-6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5092f2712e1fd07579fc3101b18e9c95857c853e836847598bf992c8e672434"}, + {file = "zope.interface-6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21732994aa3ca43bbb6b36335c288023428a3c5b7322b637c7b0a03053937578"}, + {file = "zope.interface-6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe636b49c333bfc5b0913590e36a2f151167c462fb36d9f4acc66029e45c974b"}, + {file = "zope.interface-6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57f34b7997f8de7d2db08363eaccd05dad20f106e39efe95bed4fac84af2d022"}, + {file = "zope.interface-6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6494dc0314e782ce4fb0e624b4ce2458f54d074382f50a920c7700c05cbcef28"}, + {file = "zope.interface-6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cda82ab32f984985f09e4ec20a4f9665b26779a1b8e443b34a148de256f2052"}, + {file = "zope.interface-6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f78e1eac48c4f4e0168a91cabcd8d1aedb972836df5c8769071fc6173294a0a3"}, + {file = "zope.interface-6.4-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:8e246357f52952ae5fa950d19eda8572594c49e6cb1e5462508e6cec561a37de"}, + {file = "zope.interface-6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93f28d84517dcd6c240979bd9b2f262a373832baef856fe663a24b9171d7f04d"}, + {file = "zope.interface-6.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cd56eb9a23767958c9a0654306b9a4a74def485f645b3a7378cc6ab661ef31c"}, + {file = "zope.interface-6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:502d2c9c4231d022b20225dba5c6c736236ed65e1d7e2f6f402b5aa6a7040ec9"}, + {file = "zope.interface-6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ee1e3ca6c98efe213a96dece89100a8aa52e210ac354861d8039d69bd1d6e5ff"}, + {file = "zope.interface-6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e6b756663deade5270f67899753437b39d970f9eecd49e19fae3b880310cf0"}, + {file = "zope.interface-6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f33af86ed460eb28dc9da1de1f3305795271a19c665161c1d973a737596b2081"}, + {file = "zope.interface-6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e85eada0eb551950df05d72dc0e892320f14daa78bc434059e834d4b1f9300"}, + {file = "zope.interface-6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3945f4fda92c1b6fb0cb6eaaaf72599e5c2c2059654bdc42bc09c6e711c214c8"}, + {file = "zope.interface-6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbbb290751f5c4ed81e54ae73fe8557c4a85973f5ab019edbb0f746244ecea6"}, + {file = "zope.interface-6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e4cc017206c1429a6d8fdd8a25c6efc15512065eec0a8d45c350df96a0911ed"}, + {file = "zope_interface-6.4.tar.gz", hash = "sha256:b11f2b67ccc990a1522fa8cd3f5d185a068459f944ab2d0e7a1b15d31bcb4af4"}, +] + +[package.dependencies] +setuptools = "*" + +[package.extras] +docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] +test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] +testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] + +[[package]] +name = "zstandard" +version = "0.22.0" +description = "Zstandard bindings for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zstandard-0.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019"}, + {file = "zstandard-0.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a"}, + {file = "zstandard-0.22.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e"}, + {file = "zstandard-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2"}, + {file = "zstandard-0.22.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202"}, + {file = "zstandard-0.22.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356"}, + {file = "zstandard-0.22.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d"}, + {file = "zstandard-0.22.0-cp310-cp310-win32.whl", hash = "sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e"}, + {file = "zstandard-0.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375"}, + {file = "zstandard-0.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08"}, + {file = "zstandard-0.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26"}, + {file = "zstandard-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09"}, + {file = "zstandard-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775"}, + {file = "zstandard-0.22.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8"}, + {file = "zstandard-0.22.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94"}, + {file = "zstandard-0.22.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88"}, + {file = "zstandard-0.22.0-cp311-cp311-win32.whl", hash = "sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440"}, + {file = "zstandard-0.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd"}, + {file = "zstandard-0.22.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a"}, + {file = "zstandard-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912"}, + {file = "zstandard-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f"}, + {file = "zstandard-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c"}, + {file = "zstandard-0.22.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4"}, + {file = "zstandard-0.22.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc"}, + {file = "zstandard-0.22.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45"}, + {file = "zstandard-0.22.0-cp312-cp312-win32.whl", hash = "sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2"}, + {file = "zstandard-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c"}, + {file = "zstandard-0.22.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df"}, + {file = "zstandard-0.22.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e"}, + {file = "zstandard-0.22.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0"}, + {file = "zstandard-0.22.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69"}, + {file = "zstandard-0.22.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004"}, + {file = "zstandard-0.22.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf"}, + {file = "zstandard-0.22.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d"}, + {file = "zstandard-0.22.0-cp38-cp38-win32.whl", hash = "sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292"}, + {file = "zstandard-0.22.0-cp38-cp38-win_amd64.whl", hash = "sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73"}, + {file = "zstandard-0.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b"}, + {file = "zstandard-0.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93"}, + {file = "zstandard-0.22.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3"}, + {file = "zstandard-0.22.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe"}, + {file = "zstandard-0.22.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb"}, + {file = "zstandard-0.22.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303"}, + {file = "zstandard-0.22.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c"}, + {file = "zstandard-0.22.0-cp39-cp39-win32.whl", hash = "sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0"}, + {file = "zstandard-0.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2"}, + {file = "zstandard-0.22.0.tar.gz", hash = "sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70"}, +] + +[package.dependencies] +cffi = {version = ">=1.11", optional = true, markers = "platform_python_implementation == \"PyPy\" or extra == \"cffi\""} + +[package.extras] +cffi = ["cffi (>=1.11)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "305f6137d6bcdb88ddaf8e507999b46b03f2906f08f86086c00ce91c9120dc66" diff --git a/api/poetry.toml b/api/poetry.toml new file mode 100644 index 00000000000000..9a48dd825ab37c --- /dev/null +++ b/api/poetry.toml @@ -0,0 +1,4 @@ +[virtualenvs] +in-project = true +create = true +prefer-active-python = true \ No newline at end of file diff --git a/api/pyproject.toml b/api/pyproject.toml index a8920139c64304..c5b1a160dc8dc8 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -77,3 +77,113 @@ MOCK_SWITCH = "true" CODE_MAX_STRING_LENGTH = "80000" CODE_EXECUTION_ENDPOINT="http://127.0.0.1:8194" CODE_EXECUTION_API_KEY="dify-sandbox" + + +[tool.poetry] +name = "dify-api" +version = "0.6.10" +description = "" +authors = ["Dify "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.10" +beautifulsoup4 = "^4.12.2" +flask = "^3.0.1" +flask-sqlalchemy = "^3.0.5" +sqlalchemy = "^2.0.29" +flask-compress = "^1.14" +flask-login = "^0.6.3" +flask-migrate = "^4.0.5" +flask-restful = "^0.3.10" +flask-cors = "^4.0.0" +gunicorn = "^22.0.0" +gevent = "^23.9.1" +openai = "^1.29.0" +tiktoken = "^0.7.0" +psycopg2-binary = "^2.9.6" +pycryptodome = "3.19.1" +python-dotenv = "1.0.0" +authlib = "1.2.0" +boto3 = "^1.28.17" +tenacity = "^8.2.2" +cachetools = "^5.3.0" +weaviate-client = "^3.21.0" +mailchimp-transactional = "^1.0.50" +scikit-learn = "1.2.2" +sentry-sdk = {version = "^1.39.2", extras = ["flask"]} +sympy = "1.12" +jieba = "0.42.1" +celery = "^5.3.6" +redis = {version = "^5.0.3", extras = ["hiredis"]} +openpyxl = "3.1.2" +chardet = "^5.1.0" +python-docx = "^1.1.0" +pypdfium2 = "^4.17.0" +resend = "^0.7.0" +pyjwt = "^2.8.0" +anthropic = "^0.23.1" +newspaper3k = "0.2.8" +wikipedia = "1.4.0" +readabilipy = "0.2.0" +google-ai-generativelanguage = "0.6.1" +google-api-core = "^2.18.0" +google-api-python-client = "^2.90.0" +google-auth = "^2.29.0" +google-auth-httplib2 = "0.2.0" +google-generativeai = "0.5.0" +google-search-results = "2.4.2" +googleapis-common-protos = "1.63.0" +google-cloud-storage = "2.16.0" +replicate = "^0.22.0" +websocket-client = "^1.7.0" +dashscope = {version = "^1.17.0", extras = ["tokenizer"]} +huggingface-hub = "^0.16.4" +transformers = "^4.35.0" +tokenizers = "^0.15.0" +pandas = "1.5.3" +xinference-client = "0.9.4" +safetensors = "^0.4.3" +zhipuai = "1.0.7" +werkzeug = "^3.0.1" +pymilvus = "2.3.1" +qdrant-client = "1.7.3" +cohere = "^5.2.4" +pyyaml = "^6.0.1" +numpy = "^1.26.4" +unstructured = {version = "^0.10.27", extras = ["docx", "epub", "md", "msg", "ppt", "pptx"]} +bs4 = "^0.0.1" +markdown = "^3.5.1" +httpx = {version = "^0.24.1", extras = ["socks"]} +matplotlib = "^3.8.2" +yfinance = "^0.2.35" +pydub = "^0.25.1" +gmpy2 = "^2.1.5" +numexpr = "^2.9.0" +duckduckgo-search = "5.2.2" +arxiv = "2.1.0" +yarl = "^1.9.4" +twilio = "^9.0.4" +qrcode = "^7.4.2" +azure-storage-blob = "12.9.0" +azure-identity = "1.15.0" +lxml = "5.1.0" +xlrd = "^2.0.1" +pydantic = "^1.10.0" +pgvecto-rs = "0.1.4" +firecrawl-py = "0.0.5" +oss2 = "2.15.0" +pgvector = "0.2.5" +pymysql = "^1.1.1" +tidb-vector = "^0.0.9" +google-cloud-aiplatform = "1.49.0" +vanna = {version = "==0.5.5", extras = ["postgres", "mysql", "clickhouse", "duckdb"]} +kaleido = "0.2.1" + + +[tool.poetry.group.dev.dependencies] +coverage = "^7.2.4" +pytest = "^8.1.1" +pytest-benchmark = "^4.0.0" +pytest-env = "^1.1.3" +pytest-mock = "^3.14.0" From 472b9769467f1d040bf30b568e2f5be19e3db519 Mon Sep 17 00:00:00 2001 From: ra2230 <83854920+ra2230@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:43:54 +0300 Subject: [PATCH 15/70] Arabic README.md (#5078) --- README.md | 1 + README_AR.md | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 226 insertions(+) create mode 100644 README_AR.md diff --git a/README.md b/README.md index c43b52d7ad27ce..d81e5c76720078 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ README en Français README tlhIngan Hol README in Korean + README بالعربية

diff --git a/README_AR.md b/README_AR.md new file mode 100644 index 00000000000000..9716346fd2b313 --- /dev/null +++ b/README_AR.md @@ -0,0 +1,225 @@ +![cover-v5-optimized](https://github.com/langgenius/dify/assets/13230914/f9e19af5-61ba-4119-b926-d10c4c06ebab) + +

+ Dify Cloud · + الاستضافة الذاتية · + التوثيق · + استفسارات الشركات +

+ +

+ + Static Badge + + Static Badge + + chat on Discord + + follow on Twitter + + Docker Pulls + + Commits last month + + Issues closed + + Discussion posts +

+ +

+ README in English + 简体中文版自述文件 + 日本語のREADME + README en Español + README en Français + README tlhIngan Hol + README in Korean + README بالعربية +

+ +
+مشروع Dify هو منصة تطوير تطبيقات الذكاء الصناعي مفتوحة المصدر. تجمع واجهته البديهية بين سير العمل الذكي بالذكاء الاصطناعي وخط أنابيب RAG وقدرات الوكيل وإدارة النماذج وميزات الملاحظة وأكثر من ذلك، مما يتيح لك الانتقال بسرعة من المرحلة التجريبية إلى الإنتاج. إليك قائمة بالميزات الأساسية: +

+ +**1. سير العمل**: قم ببناء واختبار سير عمل الذكاء الاصطناعي القوي على قماش بصري، مستفيدًا من جميع الميزات التالية وأكثر. + + https://github.com/langgenius/dify/assets/13230914/356df23e-1604-483d-80a6-9517ece318aa + + +**2. الدعم الشامل للنماذج**: تكامل سلس مع مئات من LLMs الخاصة / مفتوحة المصدر من عشرات من موفري التحليل والحلول المستضافة ذاتيًا، مما يغطي GPT و Mistral و Llama3 وأي نماذج متوافقة مع واجهة OpenAI API. يمكن العثور على قائمة كاملة بمزودي النموذج المدعومين [هنا](https://docs.dify.ai/getting-started/readme/model-providers). + +![providers-v5](https://github.com/langgenius/dify/assets/13230914/5a17bdbe-097a-4100-8363-40255b70f6e3) + +**3. بيئة التطوير للأوامر**: واجهة بيئة التطوير المبتكرة لصياغة الأمر ومقارنة أداء النموذج، وإضافة ميزات إضافية مثل تحويل النص إلى كلام إلى تطبيق قائم على الدردشة. + +**4. خط أنابيب RAG**: قدرات RAG الواسعة التي تغطي كل شيء من استيعاب الوثائق إلى الاسترجاع، مع الدعم الفوري لاستخراج النص من ملفات PDF و PPT وتنسيقات الوثائق الشائعة الأخرى. + +**5. قدرات الوكيل**: يمكنك تعريف الوكلاء بناءً على أمر وظيفة LLM أو ReAct، وإضافة أدوات مدمجة أو مخصصة للوكيل. توفر Dify أكثر من 50 أداة مدمجة لوكلاء الذكاء الاصطناعي، مثل البحث في Google و DELL·E وStable Diffusion و WolframAlpha. + +**6. الـ LLMOps**: راقب وتحلل سجلات التطبيق والأداء على مر الزمن. يمكنك تحسين الأوامر والبيانات والنماذج باستمرار استنادًا إلى البيانات الإنتاجية والتعليقات. + +**7.الواجهة الخلفية (Backend) كخدمة**: تأتي جميع عروض Dify مع APIs مطابقة، حتى يمكنك دمج Dify بسهولة في منطق أعمالك الخاص. +## مقارنة الميزات + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
الميزةDify.AILangChainFlowiseOpenAI Assistants API
نهج البرمجةموجّه لـ تطبيق + واجهة برمجة تطبيق (API)برمجة Pythonموجه لتطبيقواجهة برمجة تطبيق (API)
LLMs المدعومةتنوع غنيتنوع غنيتنوع غنيفقط OpenAI
محرك RAG
الوكيل
سير العمل
الملاحظة
ميزات الشركات (SSO / مراقبة الوصول)
نشر محلي
+ + +## استخدام Dify +- **سحابة
** +نحن نستضيف [خدمة Dify Cloud](https://dify.ai) لأي شخص لتجربتها بدون أي إعدادات. توفر كل قدرات النسخة التي تمت استضافتها ذاتيًا، وتتضمن 200 أمر GPT-4 مجانًا في خطة الصندوق الرملي. + +- **استضافة ذاتية لنسخة المجتمع Dify
** +ابدأ سريعًا في تشغيل Dify في بيئتك باستخدام [دليل البدء السريع](#البدء السريع). +استخدم [توثيقنا](https://docs.dify.ai) للمزيد من المراجع والتعليمات الأعمق. + +- **مشروع Dify للشركات / المؤسسات
** +نحن نوفر ميزات إضافية مركزة على الشركات. [جدول اجتماع معنا](https://cal.com/guchenhe/30min) أو [أرسل لنا بريدًا إلكترونيًا](mailto:business@dify.ai?subject=[GitHub]Business%20License%20Inquiry) لمناقشة احتياجات الشركات.
+> بالنسبة للشركات الناشئة والشركات الصغيرة التي تستخدم خدمات AWS، تحقق من [Dify Premium على AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-t22mebxzwjhu6) ونشرها في شبكتك الخاصة على AWS VPC بنقرة واحدة. إنها عرض AMI بأسعار معقولة مع خيار إنشاء تطبيقات بشعار وعلامة تجارية مخصصة. +## البقاء قدمًا + +قم بإضافة نجمة إلى Dify على GitHub وتلق تنبيهًا فوريًا بالإصدارات الجديدة. + +![نجمنا](https://github.com/langgenius/dify/assets/13230914/b823edc1-6388-4e25-ad45-2f6b187adbb4) +## البداية السريعة +> قبل تثبيت Dify، تأكد من أن جهازك يلبي الحد الأدنى من متطلبات النظام التالية: +> +>- معالج >= 2 نواة +>- ذاكرة وصول عشوائي (RAM) >= 4 جيجابايت + +
+ +أسهل طريقة لبدء تشغيل خادم Dify هي تشغيل ملف [docker-compose.yml](docker/docker-compose.yaml) الخاص بنا. قبل تشغيل أمر التثبيت، تأكد من تثبيت [Docker](https://docs.docker.com/get-docker/) و [Docker Compose](https://docs.docker.com/compose/install/) على جهازك: + +```bash +cd docker +docker compose up -d +``` +بعد التشغيل، يمكنك الوصول إلى لوحة تحكم Dify في متصفحك على [http://localhost/install](http://localhost/install) وبدء عملية التهيئة. + +> إذا كنت ترغب في المساهمة في Dify أو القيام بتطوير إضافي، فانظر إلى [دليلنا للنشر من الشفرة (code) المصدرية](https://docs.dify.ai/getting-started/install-self-hosted/local-source-code) + +## الخطوات التالية + +إذا كنت بحاجة إلى تخصيص التكوين، يرجى الرجوع إلى التعليقات في ملف [docker-compose.yml](docker/docker-compose.yaml) لدينا وتعيين التكوينات البيئية يدويًا. بعد إجراء التغييرات، يرجى تشغيل `docker-compose up -d` مرة أخرى. يمكنك رؤية قائمة كاملة بالمتغيرات البيئية [هنا](https://docs.dify.ai/getting-started/install-self-hosted/environments). + +إذا كنت ترغب في تكوين إعداد متوفر بشكل عالي، فهناك [رسوم بيانية Helm](https://helm.sh/) المساهمة من المجتمع تسمح بنشر Dify على Kubernetes. + +- [رسم بياني Helm من قبل @LeoQuote](https://github.com/douban/charts/tree/master/charts/dify) +- [رسم بياني Helm من قبل @BorisPolonsky](https://github.com/BorisPolonsky/dify-helm) + + +## المساهمة + +لأولئك الذين يرغبون في المساهمة، انظر إلى [دليل المساهمة](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) لدينا. +في الوقت نفسه، يرجى النظر في دعم Dify عن طريق مشاركته على وسائل التواصل الاجتماعي وفي الفعاليات والمؤتمرات. + + +> نحن نبحث عن مساهمين لمساعدة في ترجمة Dify إلى لغات أخرى غير اللغة الصينية المندرين أو الإنجليزية. إذا كنت مهتمًا بالمساعدة، يرجى الاطلاع على [README للترجمة](https://github.com/langgenius/dify/blob/main/web/i18n/README.md) لمزيد من المعلومات، واترك لنا تعليقًا في قناة `global-users` على [خادم المجتمع على Discord](https://discord.gg/8Tpq4AcN9c). + +**المساهمون** + + + + + +## المجتمع والاتصال +* [مناقشة Github](https://github.com/langgenius/dify/discussions). الأفضل لـ: مشاركة التعليقات وطرح الأسئلة. +* [المشكلات على GitHub](https://github.com/langgenius/dify/issues). الأفضل لـ: الأخطاء التي تواجهها في استخدام Dify.AI، واقتراحات الميزات. انظر [دليل المساهمة](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md). +* [البريد الإلكتروني](mailto:support@dify.ai?subject=[GitHub]Questions%20About%20Dify). الأفضل لـ: الأسئلة التي تتعلق باستخدام Dify.AI. +* [Discord](https://discord.gg/FngNHpbcY7). الأفضل لـ: مشاركة تطبيقاتك والترفيه مع المجتمع. +* [تويتر](https://twitter.com/dify_ai). الأفضل لـ: مشاركة تطبيقاتك والترفيه مع المجتمع. + +أو، قم بجدولة اجتماع مباشرة مع أحد أعضاء الفريق: + + + + + + + + + + + + + + +
نقطة الاتصالالغرض
Git-Hub-README-Button-3xاستفسارات الأعمال واقتراحات حول المنتج
Git-Hub-README-Button-2xالمساهمات والمشكلات وطلبات الميزات
+ +## تاريخ النجمة + +[![Star History Chart](https://api.star-history.com/svg?repos=langgenius/dify&type=Date)](https://star-history.com/#langgenius/dify&Date) + + +## الكشف عن الأمان + +لحماية خصوصيتك، يرجى تجنب نشر مشكلات الأمان على GitHub. بدلاً من ذلك، أرسل أسئلتك إلى security@dify.ai وسنقدم لك إجابة أكثر تفصيلاً. + +## الرخصة + +هذا المستودع متاح تحت [رخصة البرنامج الحر Dify](LICENSE)، والتي تعتبر بشكل أساسي Apache 2.0 مع بعض القيود الإضافية. From e3544c6ef74bd0c7eb2ff54248afdf49d10971f7 Mon Sep 17 00:00:00 2001 From: takatost Date: Tue, 11 Jun 2024 22:21:18 +0800 Subject: [PATCH 16/70] fix: dependency package versions are not synchronized to requirements.txt (#5084) --- api/poetry.lock | 1257 ++++++++++++++++++++++++++------------------ api/pyproject.toml | 139 +++-- 2 files changed, 826 insertions(+), 570 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 11abee8c755af7..7dddf47433b746 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -225,13 +225,13 @@ vertex = ["google-auth (>=2,<3)"] [[package]] name = "anyio" -version = "4.3.0" +version = "4.4.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, - {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, ] [package.dependencies] @@ -363,13 +363,13 @@ cryptography = ">=3.2" [[package]] name = "azure-core" -version = "1.30.1" +version = "1.30.2" description = "Microsoft Azure Core Library for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "azure-core-1.30.1.tar.gz", hash = "sha256:26273a254131f84269e8ea4464f3560c731f29c0c1f69ac99010845f239c1a8f"}, - {file = "azure_core-1.30.1-py3-none-any.whl", hash = "sha256:7c5ee397e48f281ec4dd773d67a0a47a0962ed6fa833036057f9ea067f688e74"}, + {file = "azure-core-1.30.2.tar.gz", hash = "sha256:a14dc210efcd608821aa472d9fb8e8d035d29b68993819147bc290a8ac224472"}, + {file = "azure_core-1.30.2-py3-none-any.whl", hash = "sha256:cf019c1ca832e96274ae85abd3d9f752397194d9fea3b41487290562ac8abe4a"}, ] [package.dependencies] @@ -399,17 +399,17 @@ msal-extensions = ">=0.3.0,<2.0.0" [[package]] name = "azure-storage-blob" -version = "12.9.0" +version = "12.13.0" description = "Microsoft Azure Blob Storage Client Library for Python" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "azure-storage-blob-12.9.0.zip", hash = "sha256:cff66a115c73c90e496c8c8b3026898a3ce64100840276e9245434e28a864225"}, - {file = "azure_storage_blob-12.9.0-py2.py3-none-any.whl", hash = "sha256:859195b4850dcfe77ffafbe53500abb74b001e52e77fe6d9492fa73639a22127"}, + {file = "azure-storage-blob-12.13.0.zip", hash = "sha256:53f0d4cd32970ac9ff9b9753f83dd2fb3f9ac30e1d01e71638c436c509bfd884"}, + {file = "azure_storage_blob-12.13.0-py3-none-any.whl", hash = "sha256:280a6ab032845bab9627582bee78a50497ca2f14772929b5c5ee8b4605af0cb3"}, ] [package.dependencies] -azure-core = ">=1.10.0,<2.0.0" +azure-core = ">=1.23.1,<2.0.0" cryptography = ">=2.1.4" msrest = ">=0.6.21" @@ -502,6 +502,64 @@ urllib3 = {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""} [package.extras] crt = ["awscrt (==0.19.12)"] +[[package]] +name = "bottleneck" +version = "1.3.8" +description = "Fast NumPy array functions written in C" +optional = false +python-versions = "*" +files = [ + {file = "Bottleneck-1.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:865c8ed5b798c0198b0b80553e09cc0d890c4f5feb3d81d31661517ca7819fa3"}, + {file = "Bottleneck-1.3.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d073a31e259d40b25e29dbba80f73abf38afe98fd730c79dad7edd9a0ad6cff5"}, + {file = "Bottleneck-1.3.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b806b277ab47495032822f55f43b8d336e4b7e73f8506ed34d3ea3da6d644abc"}, + {file = "Bottleneck-1.3.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:770b517609916adeb39d3b1a386a29bc316da03dd61e7ee6e8a38325b80cc327"}, + {file = "Bottleneck-1.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2948502b0394ee419945b55b092585222a505c61d41a874c741be49f2cac056f"}, + {file = "Bottleneck-1.3.8-cp310-cp310-win32.whl", hash = "sha256:271b6333522beb8aee32e640ba49a2064491d2c10317baa58a5996be3dd443e4"}, + {file = "Bottleneck-1.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:d41000ea7ca196b5fd39d6fccd34bf0704c8831731cedd2da2dcae3c6ac49c42"}, + {file = "Bottleneck-1.3.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0a7f454394cd3642498b6e077e70f4a6b9fd46a8eb908c83ac737fdc9f9a98c"}, + {file = "Bottleneck-1.3.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c4ea8b9024dcb4e83b5c118a3c8faa863ace2ad572849da548a74a8ee4e8f2a"}, + {file = "Bottleneck-1.3.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f40724b6e965ff5b88b333d4a10097b1629e60c0db21bb3d08c24d7b1a904a16"}, + {file = "Bottleneck-1.3.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4bd7183b8dcca89d0e65abe4507c19667dd31dacfbcc8ed705bad642f26a46e1"}, + {file = "Bottleneck-1.3.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:20aa31a7d9d747c499ace1610a6e1f7aba6e3d4a9923e0312f6b4b6d68a59af3"}, + {file = "Bottleneck-1.3.8-cp311-cp311-win32.whl", hash = "sha256:350520105d9449e6565b3f0c4ce1f80a0b3e4d63695ebbf29db41f62e13f6461"}, + {file = "Bottleneck-1.3.8-cp311-cp311-win_amd64.whl", hash = "sha256:167a278902775defde7dfded6e98e3707dfe54971ffd9aec25c43bc74e4e381a"}, + {file = "Bottleneck-1.3.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c6e93ed45c6c83392f73d0333b310b38772df7eb78c120c1447245691bdedaf4"}, + {file = "Bottleneck-1.3.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3400f47dda0196b5af50b0b0678e33cc8c42e52e55ae0a63cdfed60725659bc"}, + {file = "Bottleneck-1.3.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fba5fd1805c71b2eeea50bea93d59be449c4af23ebd8da5f75fd74fd0331e314"}, + {file = "Bottleneck-1.3.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:60139c5c3d2a9c1454a04af5ee981a9f56548d27fa36f264069b149a6e9b01ed"}, + {file = "Bottleneck-1.3.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:99fab17fa26c811ccad63e208314726e718ae6605314329eca09641954550523"}, + {file = "Bottleneck-1.3.8-cp312-cp312-win32.whl", hash = "sha256:d3ae2bb5d4168912e438e377cc1301fa01df949ba59cd86317b3e00404fd4a97"}, + {file = "Bottleneck-1.3.8-cp312-cp312-win_amd64.whl", hash = "sha256:bcba1d5d5328c50f94852ab521fcb26f35d9e0ccd928d120d56455d1a5bb743f"}, + {file = "Bottleneck-1.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8d01fd5389d3160d54619119987ac24b020fa6810b7b398fff4945892237b3da"}, + {file = "Bottleneck-1.3.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ca25f0003ef65264942f6306d793e0f270ece8b406c5a293dfc7d878146e9f8"}, + {file = "Bottleneck-1.3.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7763cf1516fa388c3587d12182fc1bc1c8089eab1a0a1bf09761f4c41af73c"}, + {file = "Bottleneck-1.3.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:38837c022350e2a656453f0e448416b7108cf67baccf11d04a0b3b70a48074dd"}, + {file = "Bottleneck-1.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:84ca5e741fae1c1796744dbdd0d2c1789cb74dd79c12ea8ec5834f83430f8520"}, + {file = "Bottleneck-1.3.8-cp37-cp37m-win32.whl", hash = "sha256:f4dfc22a3450227e692ef2ff4657639c33eec88ad04ee3ce29d1a23a4942da24"}, + {file = "Bottleneck-1.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:90b87eed152bbd760c4eb11473c2cf036abdb26e2f84caeb00787da74fb08c40"}, + {file = "Bottleneck-1.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54a1b5d9d63b2d9f2955f8542eea26c418f97873e0abf86ca52beea0208c9306"}, + {file = "Bottleneck-1.3.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:019dd142d1e870388fb0b649213a0d8e569cce784326e183deba8f17826edd9f"}, + {file = "Bottleneck-1.3.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ed34a540eb7df59f45da659af9f792306637de1c69c95f020294f3b9fc4a8"}, + {file = "Bottleneck-1.3.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b69fcd4d818bcf9d53497d8accd0d5f852a447728baaa33b9b7168f8c4221d06"}, + {file = "Bottleneck-1.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:02616a830bd477f5ba51103396092da4b9d83cea2e88f5b8069e3f4f7b796704"}, + {file = "Bottleneck-1.3.8-cp38-cp38-win32.whl", hash = "sha256:93d359fb83eb3bdd6635ef6e64835c38ffdc211441fc190549f286e6af98b5f6"}, + {file = "Bottleneck-1.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:51c8bb3dffeb72c14f0382b80de76eabac6726d316babbd48f7e4056267d7910"}, + {file = "Bottleneck-1.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:84453548b0f722c3be912ce3c6b685917fea842bf1252eeb63714a2c1fd1ffc9"}, + {file = "Bottleneck-1.3.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92700867504a213cafa9b8d9be529bd6e18dc83366b2ba00e86e80769b93f678"}, + {file = "Bottleneck-1.3.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fadfd2f3931fdff42f4b9867eb02ed7c662d01e6099ff6b347b6ced791450651"}, + {file = "Bottleneck-1.3.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:cfbc4a3a934b677bfbc37ac8757c4e1264a76262b774259bd3fa8a265dbd668b"}, + {file = "Bottleneck-1.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3c74c18f86a1ffac22280b005df8bb8a58505ac6663c4d6807f39873c17dc347"}, + {file = "Bottleneck-1.3.8-cp39-cp39-win32.whl", hash = "sha256:211f881159e8adb3a57df2263028ae6dc89ec4328bfd43f3421e507406c28654"}, + {file = "Bottleneck-1.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8615eeb75009ba7c0a112a5a6a5154ed3d61fd6b0879631778b3e42e2d9a6d65"}, + {file = "Bottleneck-1.3.8.tar.gz", hash = "sha256:6780d896969ba7f53c8995ba90c87c548beb3db435dc90c60b9a10ed1ab4d868"}, +] + +[package.dependencies] +numpy = "*" + +[package.extras] +doc = ["gitpython", "numpydoc", "sphinx"] + [[package]] name = "brotli" version = "1.1.0" @@ -635,12 +693,13 @@ cffi = ">=1.0.0" [[package]] name = "bs4" -version = "0.0.1" -description = "Dummy package for Beautiful Soup" +version = "0.0.2" +description = "Dummy package for Beautiful Soup (beautifulsoup4)" optional = false python-versions = "*" files = [ - {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, + {file = "bs4-0.0.2-py2.py3-none-any.whl", hash = "sha256:abf8742c0805ef7f662dce4b51cca104cffe52b835238afc169142ab9b3fbccc"}, + {file = "bs4-0.0.2.tar.gz", hash = "sha256:a48685c58f50fe127722417bae83fe6badf500d54b55f7e39ffe43b798653925"}, ] [package.dependencies] @@ -714,13 +773,13 @@ zstd = ["zstandard (==0.22.0)"] [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, ] [[package]] @@ -1260,43 +1319,43 @@ files = [ [[package]] name = "cryptography" -version = "42.0.7" +version = "42.0.8" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477"}, - {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a"}, - {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604"}, - {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8"}, - {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55"}, - {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc"}, - {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2"}, - {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13"}, - {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da"}, - {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7"}, - {file = "cryptography-42.0.7-cp37-abi3-win32.whl", hash = "sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b"}, - {file = "cryptography-42.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678"}, - {file = "cryptography-42.0.7-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4"}, - {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858"}, - {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785"}, - {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda"}, - {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9"}, - {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e"}, - {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f"}, - {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1"}, - {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886"}, - {file = "cryptography-42.0.7-cp39-abi3-win32.whl", hash = "sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda"}, - {file = "cryptography-42.0.7-cp39-abi3-win_amd64.whl", hash = "sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b"}, - {file = "cryptography-42.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82"}, - {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60"}, - {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd"}, - {file = "cryptography-42.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582"}, - {file = "cryptography-42.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562"}, - {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14"}, - {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9"}, - {file = "cryptography-42.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68"}, - {file = "cryptography-42.0.7.tar.gz", hash = "sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2"}, + {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, + {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, + {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, + {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, + {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, + {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, + {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, + {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, ] [package.dependencies] @@ -1323,34 +1382,6 @@ files = [ {file = "cssselect-1.2.0.tar.gz", hash = "sha256:666b19839cfaddb9ce9d36bfe4c969132c647b92fc9088c4e23f786b30f1b3dc"}, ] -[[package]] -name = "curl-cffi" -version = "0.6.4" -description = "libcurl ffi bindings for Python, with impersonation support." -optional = false -python-versions = ">=3.8" -files = [ - {file = "curl_cffi-0.6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a655afb540f018ab6e6ef5e1079df856562be53211764216b8e523a9dd7b69f4"}, - {file = "curl_cffi-0.6.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:dc4fc8964e79c8063a08f9164fa2c8d4a6e29543abdbce986f34df1818733679"}, - {file = "curl_cffi-0.6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461ebf53083c92e30351f22385dbfcdf14391e54d09805e823bc6853f95156d0"}, - {file = "curl_cffi-0.6.4-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c476d9ed4c8eac1dc7a82f733a4841dd462bfbb74a6131110ae14c7374fef10c"}, - {file = "curl_cffi-0.6.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd49429aebb4dd8b58a2d228591508be1735302088b15484e020bc6bbefee60"}, - {file = "curl_cffi-0.6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:06b01552d6b2dae6b3d9af51efaccd7cfbcb2b69b2e6e6aeada05897835fbbe9"}, - {file = "curl_cffi-0.6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:59ab786e34447b28ae268ddc9751033530022cf81617d03aae063ccc94c82363"}, - {file = "curl_cffi-0.6.4-cp38-abi3-win32.whl", hash = "sha256:583d06ec082cde9af292c0de9fa653fdb8fa58ef062205c8da808ce8e18c162d"}, - {file = "curl_cffi-0.6.4-cp38-abi3-win_amd64.whl", hash = "sha256:44614d527f24cb2467690256483c72da40906ac4ccb573e44d75a959774eefe5"}, - {file = "curl_cffi-0.6.4.tar.gz", hash = "sha256:fe721c39926ef69d47c4c1b00c40cf269efb712261b631210fb05801b448f957"}, -] - -[package.dependencies] -certifi = ">=2024.2.2" -cffi = ">=1.12.0" - -[package.extras] -build = ["cibuildwheel", "wheel"] -dev = ["autoflake (==1.4)", "charset-normalizer (>=3.3.2,<4)", "coverage (==6.4.1)", "cryptography (==38.0.3)", "flake8 (==6.0.0)", "flake8-bugbear (==22.7.1)", "flake8-pie (==0.15.0)", "httpx (==0.23.1)", "mypy (==1.9.0)", "pytest (==7.1.2)", "pytest-asyncio (==0.19.0)", "pytest-trio (==0.7.0)", "ruff (==0.3.3)", "trio (==0.21.0)", "trio-typing (==0.7.0)", "trustme (==0.9.0)", "types-certifi (==2021.10.8.2)", "uvicorn (==0.18.3)", "websockets (==11.0.3)"] -test = ["charset-normalizer (>=3.3.2,<4)", "cryptography (==38.0.3)", "fastapi (==0.100.0)", "httpx (==0.23.1)", "proxy.py (==2.4.3)", "pytest (==7.1.2)", "pytest-asyncio (==0.19.0)", "pytest-trio (==0.7.0)", "python-multipart (==0.0.6)", "trio (==0.21.0)", "trio-typing (==0.7.0)", "trustme (==0.9.0)", "types-certifi (==2021.10.8.2)", "uvicorn (==0.18.3)", "websockets (==11.0.3)"] - [[package]] name = "cycler" version = "0.12.1" @@ -1397,13 +1428,13 @@ files = [ [[package]] name = "dataclasses-json" -version = "0.6.6" +version = "0.6.7" description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = "<4.0,>=3.7" files = [ - {file = "dataclasses_json-0.6.6-py3-none-any.whl", hash = "sha256:e54c5c87497741ad454070ba0ed411523d46beb5da102e221efb873801b0ba85"}, - {file = "dataclasses_json-0.6.6.tar.gz", hash = "sha256:0c09827d26fffda27f1be2fed7a7a01a29c5ddcd2eb6393ad5ebf9d77e9deae8"}, + {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, + {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, ] [package.dependencies] @@ -1427,6 +1458,17 @@ packaging = ">=17.0" pandas = ">=0.24.2" pyarrow = ">=3.0.0" +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + [[package]] name = "distro" version = "1.9.0" @@ -1506,37 +1548,40 @@ files = [ [[package]] name = "duckduckgo-search" -version = "5.2.2" +version = "6.1.5" description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." optional = false python-versions = ">=3.8" files = [ - {file = "duckduckgo_search-5.2.2-py3-none-any.whl", hash = "sha256:1b1f399c82498968620eb55f0d644d5f1adca21c2642ac346e1f34dc66654a73"}, - {file = "duckduckgo_search-5.2.2.tar.gz", hash = "sha256:a90240b8a22d554ac56e243ffaded0906d43660592eb7e4f760ef0e5089b1b2b"}, + {file = "duckduckgo_search-6.1.5-py3-none-any.whl", hash = "sha256:f0a18fe5f20323ba6bb11865ce32d4520bb90086a6ae62f5da510865f5a7dca8"}, + {file = "duckduckgo_search-6.1.5.tar.gz", hash = "sha256:10e5c4d09a4243fd9d85007dc4fe637456c3c3995fd2e1e9b49ffd6f75bb0afb"}, ] [package.dependencies] click = ">=8.1.7" -curl-cffi = ">=0.6.2" -orjson = ">=3.10.0" +orjson = ">=3.10.3" +pyreqwest-impersonate = ">=0.4.7" [package.extras] -dev = ["mypy (>=1.9.0)", "pytest (>=8.1.1)", "ruff (>=0.3.4)"] -lxml = ["lxml (>=5.1.1)"] +dev = ["mypy (>=1.10.0)", "pytest (>=8.2.0)", "pytest-asyncio (>=0.23.6)", "ruff (>=0.4.4)"] +lxml = ["lxml (>=5.2.2)"] [[package]] name = "emoji" -version = "2.11.1" +version = "2.12.1" description = "Emoji for Python" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=3.7" files = [ - {file = "emoji-2.11.1-py2.py3-none-any.whl", hash = "sha256:b7ba25299bbf520cc8727848ae66b986da32aee27dc2887eaea2bff07226ce49"}, - {file = "emoji-2.11.1.tar.gz", hash = "sha256:062ff0b3154b6219143f8b9f4b3e5c64c35bc2b146e6e2349ab5f29e218ce1ee"}, + {file = "emoji-2.12.1-py3-none-any.whl", hash = "sha256:a00d62173bdadc2510967a381810101624a2f0986145b8da0cffa42e29430235"}, + {file = "emoji-2.12.1.tar.gz", hash = "sha256:4aa0488817691aa58d83764b6c209f8a27c0b3ab3f89d1b8dceca1a62e4973eb"}, ] +[package.dependencies] +typing-extensions = ">=4.7.0" + [package.extras] -dev = ["coverage", "coveralls", "pytest"] +dev = ["coverage", "pytest (>=7.4.4)"] [[package]] name = "environs" @@ -1724,23 +1769,19 @@ dotenv = ["python-dotenv"] [[package]] name = "flask-compress" -version = "1.15" -description = "Compress responses in your Flask app with gzip, deflate, brotli or zstandard." +version = "1.14" +description = "Compress responses in your Flask app with gzip, deflate or brotli." optional = false python-versions = "*" files = [ - {file = "Flask_Compress-1.15-py3-none-any.whl", hash = "sha256:5d6efe3584c89516c3ab9d94adabe08c218517b957a9bd5cd0c3955dd3834c51"}, - {file = "flask_compress-1.15.tar.gz", hash = "sha256:b7b66cd5d08fc46bbcc71561e13ca64321590b0ca4c172f8001bf5374f8f5c58"}, + {file = "Flask-Compress-1.14.tar.gz", hash = "sha256:e46528f37b91857012be38e24e65db1a248662c3dc32ee7808b5986bf1d123ee"}, + {file = "Flask_Compress-1.14-py3-none-any.whl", hash = "sha256:b86c9808f0f38ea2246c9730972cf978f2cdf6a9a1a69102ba81e07891e6b26c"}, ] [package.dependencies] brotli = {version = "*", markers = "platform_python_implementation != \"PyPy\""} brotlicffi = {version = "*", markers = "platform_python_implementation == \"PyPy\""} flask = "*" -zstandard = [ - {version = "*", markers = "platform_python_implementation != \"PyPy\""}, - {version = "*", extras = ["cffi"], markers = "platform_python_implementation == \"PyPy\""}, -] [[package]] name = "flask-cors" @@ -1842,53 +1883,53 @@ sqlalchemy = ">=1.4.18" [[package]] name = "fonttools" -version = "4.51.0" +version = "4.53.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, - {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, - {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, - {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, - {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, - {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, - {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, - {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, - {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, - {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, - {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, - {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, - {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca"}, + {file = "fonttools-4.53.0-cp310-cp310-win32.whl", hash = "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068"}, + {file = "fonttools-4.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e"}, + {file = "fonttools-4.53.0-cp311-cp311-win32.whl", hash = "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005"}, + {file = "fonttools-4.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2"}, + {file = "fonttools-4.53.0-cp312-cp312-win32.whl", hash = "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea"}, + {file = "fonttools-4.53.0-cp312-cp312-win_amd64.whl", hash = "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd"}, + {file = "fonttools-4.53.0-cp38-cp38-win32.whl", hash = "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af"}, + {file = "fonttools-4.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0"}, + {file = "fonttools-4.53.0-cp39-cp39-win32.whl", hash = "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9"}, + {file = "fonttools-4.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2"}, + {file = "fonttools-4.53.0-py3-none-any.whl", hash = "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4"}, + {file = "fonttools-4.53.0.tar.gz", hash = "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002"}, ] [package.extras] @@ -2035,13 +2076,13 @@ files = [ [[package]] name = "fsspec" -version = "2024.5.0" +version = "2024.6.0" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2024.5.0-py3-none-any.whl", hash = "sha256:e0fdbc446d67e182f49a70b82cf7889028a63588fde6b222521f10937b2b670c"}, - {file = "fsspec-2024.5.0.tar.gz", hash = "sha256:1d021b0b0f933e3b3029ed808eb400c08ba101ca2de4b3483fbc9ca23fcee94a"}, + {file = "fsspec-2024.6.0-py3-none-any.whl", hash = "sha256:58d7122eb8a1a46f7f13453187bfea4972d66bf01618d37366521b1998034cee"}, + {file = "fsspec-2024.6.0.tar.gz", hash = "sha256:f579960a56e6d8038a9efc8f9c77279ec12e6299aa86b0769a7e9c46b94527c2"}, ] [package.extras] @@ -2050,6 +2091,7 @@ adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] dropbox = ["dropbox", "dropboxdrivefs", "requests"] full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] fuse = ["fusepy"] @@ -2123,8 +2165,8 @@ files = [ [package.dependencies] cffi = {version = ">=1.12.2", markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\""} greenlet = [ - {version = ">=3.0rc3", markers = "platform_python_implementation == \"CPython\" and python_version >= \"3.11\""}, {version = ">=2.0.0", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""}, + {version = ">=3.0rc3", markers = "platform_python_implementation == \"CPython\" and python_version >= \"3.11\""}, ] "zope.event" = "*" "zope.interface" = "*" @@ -2228,12 +2270,12 @@ files = [ google-auth = ">=2.14.1,<3.0.dev0" googleapis-common-protos = ">=1.56.2,<2.0.dev0" grpcio = [ - {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] grpcio-status = [ - {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, + {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" @@ -2541,13 +2583,13 @@ dev = ["Pillow", "absl-py", "black", "ipython", "nose2", "pandas", "pytype", "py [[package]] name = "google-resumable-media" -version = "2.7.0" +version = "2.7.1" description = "Utilities for Google Media Downloads and Resumable Uploads" optional = false -python-versions = ">= 3.7" +python-versions = ">=3.7" files = [ - {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"}, - {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"}, + {file = "google-resumable-media-2.7.1.tar.gz", hash = "sha256:eae451a7b2e2cdbaaa0fd2eb00cc8a1ee5e95e16b55597359cbc3d27d7d90e33"}, + {file = "google_resumable_media-2.7.1-py2.py3-none-any.whl", hash = "sha256:103ebc4ba331ab1bfdac0250f8033627a2cd7cde09e7ccff9181e31ba4315b2c"}, ] [package.dependencies] @@ -2557,19 +2599,6 @@ google-crc32c = ">=1.0,<2.0dev" aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] requests = ["requests (>=2.18.0,<3.0.0dev)"] -[[package]] -name = "google-search-results" -version = "2.4.2" -description = "Scrape and search localized results from Google, Bing, Baidu, Yahoo, Yandex, Ebay, Homedepot, youtube at scale using SerpApi.com" -optional = false -python-versions = ">=3.5" -files = [ - {file = "google_search_results-2.4.2.tar.gz", hash = "sha256:603a30ecae2af8e600b22635757a6df275dad4b934f975e67878ccd640b78245"}, -] - -[package.dependencies] -requests = "*" - [[package]] name = "googleapis-common-protos" version = "1.63.0" @@ -3387,6 +3416,36 @@ files = [ [package.dependencies] six = "*" +[[package]] +name = "llvmlite" +version = "0.42.0" +description = "lightweight wrapper around basic LLVM functionality" +optional = false +python-versions = ">=3.9" +files = [ + {file = "llvmlite-0.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3366938e1bf63d26c34fbfb4c8e8d2ded57d11e0567d5bb243d89aab1eb56098"}, + {file = "llvmlite-0.42.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c35da49666a21185d21b551fc3caf46a935d54d66969d32d72af109b5e7d2b6f"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70f44ccc3c6220bd23e0ba698a63ec2a7d3205da0d848804807f37fc243e3f77"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f8d8717a9073b9e0246998de89929071d15b47f254c10eef2310b9aac033d"}, + {file = "llvmlite-0.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d90edf400b4ceb3a0e776b6c6e4656d05c7187c439587e06f86afceb66d2be5"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ae511caed28beaf1252dbaf5f40e663f533b79ceb408c874c01754cafabb9cbf"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81e674c2fe85576e6c4474e8c7e7aba7901ac0196e864fe7985492b737dbab65"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb3975787f13eb97629052edb5017f6c170eebc1c14a0433e8089e5db43bcce6"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5bece0cdf77f22379f19b1959ccd7aee518afa4afbd3656c6365865f84903f9"}, + {file = "llvmlite-0.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e0c4c11c8c2aa9b0701f91b799cb9134a6a6de51444eff5a9087fc7c1384275"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:08fa9ab02b0d0179c688a4216b8939138266519aaa0aa94f1195a8542faedb56"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b2fce7d355068494d1e42202c7aff25d50c462584233013eb4470c33b995e3ee"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebe66a86dc44634b59a3bc860c7b20d26d9aaffcd30364ebe8ba79161a9121f4"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d47494552559e00d81bfb836cf1c4d5a5062e54102cc5767d5aa1e77ccd2505c"}, + {file = "llvmlite-0.42.0-cp312-cp312-win_amd64.whl", hash = "sha256:05cb7e9b6ce69165ce4d1b994fbdedca0c62492e537b0cc86141b6e2c78d5888"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdd3888544538a94d7ec99e7c62a0cdd8833609c85f0c23fcb6c5c591aec60ad"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0936c2067a67fb8816c908d5457d63eba3e2b17e515c5fe00e5ee2bace06040"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a78ab89f1924fc11482209f6799a7a3fc74ddc80425a7a3e0e8174af0e9e2301"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7599b65c7af7abbc978dbf345712c60fd596aa5670496561cc10e8a71cebfb2"}, + {file = "llvmlite-0.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:43d65cc4e206c2e902c1004dd5418417c4efa6c1d04df05c6c5675a27e8ca90e"}, + {file = "llvmlite-0.42.0.tar.gz", hash = "sha256:f92b09243c0cc3f457da8b983f67bd8e1295d0f5b3746c7a1861d7a99403854a"}, +] + [[package]] name = "lxml" version = "5.1.0" @@ -3602,13 +3661,13 @@ files = [ [[package]] name = "marshmallow" -version = "3.21.2" +version = "3.21.3" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.8" files = [ - {file = "marshmallow-3.21.2-py3-none-any.whl", hash = "sha256:70b54a6282f4704d12c0a41599682c5c5450e843b9ec406308653b47c59648a1"}, - {file = "marshmallow-3.21.2.tar.gz", hash = "sha256:82408deadd8b33d56338d2182d455db632c6313aa2af61916672146bb32edc56"}, + {file = "marshmallow-3.21.3-py3-none-any.whl", hash = "sha256:86ce7fb914aa865001a4b2092c4c2872d13bc347f3d42673272cabfdbad386f1"}, + {file = "marshmallow-3.21.3.tar.gz", hash = "sha256:4f57c5e050a54d66361e826f94fba213eb10b67b2fdb02c3e0343ce207ba1662"}, ] [package.dependencies] @@ -3704,22 +3763,22 @@ tests = ["pytest (>=4.6)"] [[package]] name = "msal" -version = "1.28.0" +version = "1.28.1" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = false python-versions = ">=3.7" files = [ - {file = "msal-1.28.0-py3-none-any.whl", hash = "sha256:3064f80221a21cd535ad8c3fafbb3a3582cd9c7e9af0bb789ae14f726a0ca99b"}, - {file = "msal-1.28.0.tar.gz", hash = "sha256:80bbabe34567cb734efd2ec1869b2d98195c927455369d8077b3c542088c5c9d"}, + {file = "msal-1.28.1-py3-none-any.whl", hash = "sha256:563c2d70de77a2ca9786aab84cb4e133a38a6897e6676774edc23d610bfc9e7b"}, + {file = "msal-1.28.1.tar.gz", hash = "sha256:d72bbfe2d5c2f2555f4bc6205be4450ddfd12976610dd9a16a9ab0f05c68b64d"}, ] [package.dependencies] -cryptography = ">=0.6,<45" +cryptography = ">=2.5,<45" PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} requests = ">=2.0.0,<3" [package.extras] -broker = ["pymsalruntime (>=0.13.2,<0.15)"] +broker = ["pymsalruntime (>=0.13.2,<0.17)"] [[package]] name = "msal-extensions" @@ -3950,6 +4009,40 @@ plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] +[[package]] +name = "numba" +version = "0.59.1" +description = "compiling Python code using LLVM" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numba-0.59.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:97385a7f12212c4f4bc28f648720a92514bee79d7063e40ef66c2d30600fd18e"}, + {file = "numba-0.59.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0b77aecf52040de2a1eb1d7e314497b9e56fba17466c80b457b971a25bb1576d"}, + {file = "numba-0.59.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3476a4f641bfd58f35ead42f4dcaf5f132569c4647c6f1360ccf18ee4cda3990"}, + {file = "numba-0.59.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:525ef3f820931bdae95ee5379c670d5c97289c6520726bc6937a4a7d4230ba24"}, + {file = "numba-0.59.1-cp310-cp310-win_amd64.whl", hash = "sha256:990e395e44d192a12105eca3083b61307db7da10e093972ca285c85bef0963d6"}, + {file = "numba-0.59.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43727e7ad20b3ec23ee4fc642f5b61845c71f75dd2825b3c234390c6d8d64051"}, + {file = "numba-0.59.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:411df625372c77959570050e861981e9d196cc1da9aa62c3d6a836b5cc338966"}, + {file = "numba-0.59.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2801003caa263d1e8497fb84829a7ecfb61738a95f62bc05693fcf1733e978e4"}, + {file = "numba-0.59.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dd2842fac03be4e5324ebbbd4d2d0c8c0fc6e0df75c09477dd45b288a0777389"}, + {file = "numba-0.59.1-cp311-cp311-win_amd64.whl", hash = "sha256:0594b3dfb369fada1f8bb2e3045cd6c61a564c62e50cf1f86b4666bc721b3450"}, + {file = "numba-0.59.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1cce206a3b92836cdf26ef39d3a3242fec25e07f020cc4feec4c4a865e340569"}, + {file = "numba-0.59.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8c8b4477763cb1fbd86a3be7050500229417bf60867c93e131fd2626edb02238"}, + {file = "numba-0.59.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d80bce4ef7e65bf895c29e3889ca75a29ee01da80266a01d34815918e365835"}, + {file = "numba-0.59.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f7ad1d217773e89a9845886401eaaab0a156a90aa2f179fdc125261fd1105096"}, + {file = "numba-0.59.1-cp312-cp312-win_amd64.whl", hash = "sha256:5bf68f4d69dd3a9f26a9b23548fa23e3bcb9042e2935257b471d2a8d3c424b7f"}, + {file = "numba-0.59.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4e0318ae729de6e5dbe64c75ead1a95eb01fabfe0e2ebed81ebf0344d32db0ae"}, + {file = "numba-0.59.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0f68589740a8c38bb7dc1b938b55d1145244c8353078eea23895d4f82c8b9ec1"}, + {file = "numba-0.59.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:649913a3758891c77c32e2d2a3bcbedf4a69f5fea276d11f9119677c45a422e8"}, + {file = "numba-0.59.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9712808e4545270291d76b9a264839ac878c5eb7d8b6e02c970dc0ac29bc8187"}, + {file = "numba-0.59.1-cp39-cp39-win_amd64.whl", hash = "sha256:8d51ccd7008a83105ad6a0082b6a2b70f1142dc7cfd76deb8c5a862367eb8c86"}, + {file = "numba-0.59.1.tar.gz", hash = "sha256:76f69132b96028d2774ed20415e8c528a34e3299a40581bae178f0994a2f370b"}, +] + +[package.dependencies] +llvmlite = "==0.42.*" +numpy = ">=1.22,<1.27" + [[package]] name = "numexpr" version = "2.9.0" @@ -4052,6 +4145,19 @@ rsa = ["cryptography (>=3.0.0)"] signals = ["blinker (>=1.4.0)"] signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] +[[package]] +name = "odfpy" +version = "1.4.1" +description = "Python API and tools to manipulate OpenDocument files" +optional = false +python-versions = "*" +files = [ + {file = "odfpy-1.4.1.tar.gz", hash = "sha256:db766a6e59c5103212f3cc92ec8dd50a0f3a02790233ed0b52148b70d3c438ec"}, +] + +[package.dependencies] +defusedxml = "*" + [[package]] name = "olefile" version = "0.47" @@ -4091,13 +4197,13 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "openpyxl" -version = "3.1.2" +version = "3.1.3" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" optional = false python-versions = ">=3.6" files = [ - {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, - {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, + {file = "openpyxl-3.1.3-py2.py3-none-any.whl", hash = "sha256:25071b558db709de9e8782c3d3e058af3b23ffb2fc6f40c8f0c45a154eced2c3"}, + {file = "openpyxl-3.1.3.tar.gz", hash = "sha256:8dd482e5350125b2388070bb2477927be2e8ebc27df61178709bc8c8751da2f9"}, ] [package.dependencies] @@ -4105,67 +4211,67 @@ et-xmlfile = "*" [[package]] name = "orjson" -version = "3.10.3" +version = "3.10.4" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9fb6c3f9f5490a3eb4ddd46fc1b6eadb0d6fc16fb3f07320149c3286a1409dd8"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:252124b198662eee80428f1af8c63f7ff077c88723fe206a25df8dc57a57b1fa"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f3e87733823089a338ef9bbf363ef4de45e5c599a9bf50a7a9b82e86d0228da"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8334c0d87103bb9fbbe59b78129f1f40d1d1e8355bbed2ca71853af15fa4ed3"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1952c03439e4dce23482ac846e7961f9d4ec62086eb98ae76d97bd41d72644d7"}, - {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0403ed9c706dcd2809f1600ed18f4aae50be263bd7112e54b50e2c2bc3ebd6d"}, - {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:382e52aa4270a037d41f325e7d1dfa395b7de0c367800b6f337d8157367bf3a7"}, - {file = "orjson-3.10.3-cp310-none-win32.whl", hash = "sha256:be2aab54313752c04f2cbaab4515291ef5af8c2256ce22abc007f89f42f49109"}, - {file = "orjson-3.10.3-cp310-none-win_amd64.whl", hash = "sha256:416b195f78ae461601893f482287cee1e3059ec49b4f99479aedf22a20b1098b"}, - {file = "orjson-3.10.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:73100d9abbbe730331f2242c1fc0bcb46a3ea3b4ae3348847e5a141265479700"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a12eee96e3ab828dbfcb4d5a0023aa971b27143a1d35dc214c176fdfb29b3"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520de5e2ef0b4ae546bea25129d6c7c74edb43fc6cf5213f511a927f2b28148b"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccaa0a401fc02e8828a5bedfd80f8cd389d24f65e5ca3954d72c6582495b4bcf"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7bc9e8bc11bac40f905640acd41cbeaa87209e7e1f57ade386da658092dc16"}, - {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3582b34b70543a1ed6944aca75e219e1192661a63da4d039d088a09c67543b08"}, - {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c23dfa91481de880890d17aa7b91d586a4746a4c2aa9a145bebdbaf233768d5"}, - {file = "orjson-3.10.3-cp311-none-win32.whl", hash = "sha256:1770e2a0eae728b050705206d84eda8b074b65ee835e7f85c919f5705b006c9b"}, - {file = "orjson-3.10.3-cp311-none-win_amd64.whl", hash = "sha256:93433b3c1f852660eb5abdc1f4dd0ced2be031ba30900433223b28ee0140cde5"}, - {file = "orjson-3.10.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a39aa73e53bec8d410875683bfa3a8edf61e5a1c7bb4014f65f81d36467ea098"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0943a96b3fa09bee1afdfccc2cb236c9c64715afa375b2af296c73d91c23eab2"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e852baafceff8da3c9defae29414cc8513a1586ad93e45f27b89a639c68e8176"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18566beb5acd76f3769c1d1a7ec06cdb81edc4d55d2765fb677e3eaa10fa99e0"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd2218d5a3aa43060efe649ec564ebedec8ce6ae0a43654b81376216d5ebd42"}, - {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cf20465e74c6e17a104ecf01bf8cd3b7b252565b4ccee4548f18b012ff2f8069"}, - {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba7f67aa7f983c4345eeda16054a4677289011a478ca947cd69c0a86ea45e534"}, - {file = "orjson-3.10.3-cp312-none-win32.whl", hash = "sha256:17e0713fc159abc261eea0f4feda611d32eabc35708b74bef6ad44f6c78d5ea0"}, - {file = "orjson-3.10.3-cp312-none-win_amd64.whl", hash = "sha256:4c895383b1ec42b017dd2c75ae8a5b862fc489006afde06f14afbdd0309b2af0"}, - {file = "orjson-3.10.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:be2719e5041e9fb76c8c2c06b9600fe8e8584e6980061ff88dcbc2691a16d20d"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0175a5798bdc878956099f5c54b9837cb62cfbf5d0b86ba6d77e43861bcec2"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978be58a68ade24f1af7758626806e13cff7748a677faf95fbb298359aa1e20d"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16bda83b5c61586f6f788333d3cf3ed19015e3b9019188c56983b5a299210eb5"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ad1f26bea425041e0a1adad34630c4825a9e3adec49079b1fb6ac8d36f8b754"}, - {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9e253498bee561fe85d6325ba55ff2ff08fb5e7184cd6a4d7754133bd19c9195"}, - {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a62f9968bab8a676a164263e485f30a0b748255ee2f4ae49a0224be95f4532b"}, - {file = "orjson-3.10.3-cp38-none-win32.whl", hash = "sha256:8d0b84403d287d4bfa9bf7d1dc298d5c1c5d9f444f3737929a66f2fe4fb8f134"}, - {file = "orjson-3.10.3-cp38-none-win_amd64.whl", hash = "sha256:8bc7a4df90da5d535e18157220d7915780d07198b54f4de0110eca6b6c11e290"}, - {file = "orjson-3.10.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9059d15c30e675a58fdcd6f95465c1522b8426e092de9fff20edebfdc15e1cb0"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d40c7f7938c9c2b934b297412c067936d0b54e4b8ab916fd1a9eb8f54c02294"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4a654ec1de8fdaae1d80d55cee65893cb06494e124681ab335218be6a0691e7"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:831c6ef73f9aa53c5f40ae8f949ff7681b38eaddb6904aab89dca4d85099cb78"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99b880d7e34542db89f48d14ddecbd26f06838b12427d5a25d71baceb5ba119d"}, - {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2e5e176c994ce4bd434d7aafb9ecc893c15f347d3d2bbd8e7ce0b63071c52e25"}, - {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b69a58a37dab856491bf2d3bbf259775fdce262b727f96aafbda359cb1d114d8"}, - {file = "orjson-3.10.3-cp39-none-win32.whl", hash = "sha256:b8d4d1a6868cde356f1402c8faeb50d62cee765a1f7ffcfd6de732ab0581e063"}, - {file = "orjson-3.10.3-cp39-none-win_amd64.whl", hash = "sha256:5102f50c5fc46d94f2033fe00d392588564378260d64377aec702f21a7a22912"}, - {file = "orjson-3.10.3.tar.gz", hash = "sha256:2b166507acae7ba2f7c315dcf185a9111ad5e992ac81f2d507aac39193c2c818"}, + {file = "orjson-3.10.4-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:afca963f19ca60c7aedadea9979f769139127288dd58ccf3f7c5e8e6dc62cabf"}, + {file = "orjson-3.10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b112eff36ba7ccc7a9d6b87e17b9d6bde4312d05e3ddf66bf5662481dee846"}, + {file = "orjson-3.10.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02b192eaba048b1039eca9a0cef67863bd5623042f5c441889a9957121d97e14"}, + {file = "orjson-3.10.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:827c3d0e4fc44242c82bfdb1a773235b8c0575afee99a9fa9a8ce920c14e440f"}, + {file = "orjson-3.10.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca8ec09724f10ec209244caeb1f9f428b6bb03f2eda9ed5e2c4dd7f2b7fabd44"}, + {file = "orjson-3.10.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8eaa5d531a8fde11993cbcb27e9acf7d9c457ba301adccb7fa3a021bfecab46c"}, + {file = "orjson-3.10.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e112aa7fc4ea67367ec5e86c39a6bb6c5719eddc8f999087b1759e765ddaf2d4"}, + {file = "orjson-3.10.4-cp310-none-win32.whl", hash = "sha256:1538844fb88446c42da3889f8c4ecce95a630b5a5ba18ecdfe5aea596f4dff21"}, + {file = "orjson-3.10.4-cp310-none-win_amd64.whl", hash = "sha256:de02811903a2e434127fba5389c3cc90f689542339a6e52e691ab7f693407b5a"}, + {file = "orjson-3.10.4-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:358afaec75de7237dfea08e6b1b25d226e33a1e3b6dc154fc99eb697f24a1ffa"}, + {file = "orjson-3.10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb4e292c3198ab3d93e5f877301d2746be4ca0ba2d9c513da5e10eb90e19ff52"}, + {file = "orjson-3.10.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c39e57cf6323a39238490092985d5d198a7da4a3be013cc891a33fef13a536e"}, + {file = "orjson-3.10.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f86df433fc01361ff9270ad27455ce1ad43cd05e46de7152ca6adb405a16b2f6"}, + {file = "orjson-3.10.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c9966276a2c97e93e6cbe8286537f88b2a071827514f0d9d47a0aefa77db458"}, + {file = "orjson-3.10.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c499a14155a1f5a1e16e0cd31f6cf6f93965ac60a0822bc8340e7e2d3dac1108"}, + {file = "orjson-3.10.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3087023ce904a327c29487eb7e1f2c060070e8dbb9a3991b8e7952a9c6e62f38"}, + {file = "orjson-3.10.4-cp311-none-win32.whl", hash = "sha256:f965893244fe348b59e5ce560693e6dd03368d577ce26849b5d261ce31c70101"}, + {file = "orjson-3.10.4-cp311-none-win_amd64.whl", hash = "sha256:c212f06fad6aa6ce85d5665e91a83b866579f29441a47d3865c57329c0857357"}, + {file = "orjson-3.10.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d0965a8b0131959833ca8a65af60285995d57ced0de2fd8f16fc03235975d238"}, + {file = "orjson-3.10.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27b64695d9f2aef3ae15a0522e370ec95c946aaea7f2c97a1582a62b3bdd9169"}, + {file = "orjson-3.10.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:867d882ddee6a20be4c8b03ae3d2b0333894d53ad632d32bd9b8123649577171"}, + {file = "orjson-3.10.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0667458f8a8ceb6dee5c08fec0b46195f92c474cbbec71dca2a6b7fd5b67b8d"}, + {file = "orjson-3.10.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3eac9befc4eaec1d1ff3bba6210576be4945332dde194525601c5ddb5c060d3"}, + {file = "orjson-3.10.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4343245443552eae240a33047a6d1bcac7a754ad4b1c57318173c54d7efb9aea"}, + {file = "orjson-3.10.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:30153e269eea43e98918d4d462a36a7065031d9246407dfff2579a4e457515c1"}, + {file = "orjson-3.10.4-cp312-none-win32.whl", hash = "sha256:1a7d092ee043abf3db19c2183115e80676495c9911843fdb3ebd48ca7b73079e"}, + {file = "orjson-3.10.4-cp312-none-win_amd64.whl", hash = "sha256:07a2adbeb8b9efe6d68fc557685954a1f19d9e33f5cc018ae1a89e96647c1b65"}, + {file = "orjson-3.10.4-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f5a746f3d908bce1a1e347b9ca89864047533bdfab5a450066a0315f6566527b"}, + {file = "orjson-3.10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:465b4a8a3e459f8d304c19071b4badaa9b267c59207a005a7dd9dfe13d3a423f"}, + {file = "orjson-3.10.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35858d260728c434a3d91b60685ab32418318567e8902039837e1c2af2719e0b"}, + {file = "orjson-3.10.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a5ba090d40c4460312dd69c232b38c2ff67a823185cfe667e841c9dd5c06841"}, + {file = "orjson-3.10.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dde86755d064664e62e3612a166c28298aa8dfd35a991553faa58855ae739cc"}, + {file = "orjson-3.10.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:020a9e9001cfec85c156ef3b185ff758b62ef986cefdb8384c4579facd5ce126"}, + {file = "orjson-3.10.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3bf8e6e3388a2e83a86466c912387e0f0a765494c65caa7e865f99969b76ba0d"}, + {file = "orjson-3.10.4-cp38-none-win32.whl", hash = "sha256:c5a1cca6a4a3129db3da68a25dc0a459a62ae58e284e363b35ab304202d9ba9e"}, + {file = "orjson-3.10.4-cp38-none-win_amd64.whl", hash = "sha256:ecd97d98d7bee3e3d51d0b51c92c457f05db4993329eea7c69764f9820e27eb3"}, + {file = "orjson-3.10.4-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:71362daa330a2fc85553a1469185ac448547392a8f83d34e67779f8df3a52743"}, + {file = "orjson-3.10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d24b59d1fecb0fd080c177306118a143f7322335309640c55ed9580d2044e363"}, + {file = "orjson-3.10.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e906670aea5a605b083ebb58d575c35e88cf880fa372f7cedaac3d51e98ff164"}, + {file = "orjson-3.10.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ce32ed4bc4d632268e4978e595fe5ea07e026b751482b4a0feec48f66a90abc"}, + {file = "orjson-3.10.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dcd34286246e0c5edd0e230d1da2daab2c1b465fcb6bac85b8d44057229d40a"}, + {file = "orjson-3.10.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c45d4b8c403e50beedb1d006a8916d9910ed56bceaf2035dc253618b44d0a161"}, + {file = "orjson-3.10.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:aaed3253041b5002a4f5bfdf6f7b5cce657d974472b0699a469d439beba40381"}, + {file = "orjson-3.10.4-cp39-none-win32.whl", hash = "sha256:9a4f41b7dbf7896f8dbf559b9b43dcd99e31e0d49ac1b59d74f52ce51ab10eb9"}, + {file = "orjson-3.10.4-cp39-none-win_amd64.whl", hash = "sha256:6c4eb7d867ed91cb61e6514cb4f457aa01d7b0fd663089df60a69f3d38b69d4c"}, + {file = "orjson-3.10.4.tar.gz", hash = "sha256:c912ed25b787c73fe994a5decd81c3f3b256599b8a87d410d799d5d52013af2a"}, ] [[package]] name = "oss2" -version = "2.15.0" +version = "2.18.5" description = "Aliyun OSS (Object Storage Service) SDK" optional = false python-versions = "*" files = [ - {file = "oss2-2.15.0.tar.gz", hash = "sha256:d8b5a10ba2291ff4c78246576f243dcec262f1f646344e61f3192dc262e87430"}, + {file = "oss2-2.18.5.tar.gz", hash = "sha256:555c857f4441ae42a2c0abab8fc9482543fba35d65a4a4be73101c959a2b4011"}, ] [package.dependencies] @@ -4178,61 +4284,96 @@ six = "*" [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] name = "pandas" -version = "1.5.3" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, - {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, - {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, - {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, - {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, - {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, - {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, - {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, - {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, - {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, - {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, - {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, - {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, - {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, - {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, - {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, - {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, - {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, - {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, - {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, - {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, - {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, - {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, - {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, - {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, - {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, - {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, -] - -[package.dependencies] + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +bottleneck = {version = ">=1.3.6", optional = true, markers = "extra == \"performance\""} +numba = {version = ">=0.56.4", optional = true, markers = "extra == \"performance\""} +numexpr = {version = ">=2.8.4", optional = true, markers = "extra == \"performance\""} numpy = [ - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] -python-dateutil = ">=2.8.1" +odfpy = {version = ">=1.4.1", optional = true, markers = "extra == \"excel\""} +openpyxl = {version = ">=3.1.0", optional = true, markers = "extra == \"excel\""} +python-calamine = {version = ">=0.1.7", optional = true, markers = "extra == \"excel\""} +python-dateutil = ">=2.8.2" pytz = ">=2020.1" +pyxlsb = {version = ">=1.0.10", optional = true, markers = "extra == \"excel\""} +tzdata = ">=2022.7" +xlrd = {version = ">=2.0.1", optional = true, markers = "extra == \"excel\""} +xlsxwriter = {version = ">=3.0.5", optional = true, markers = "extra == \"excel\""} [package.extras] -test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] [[package]] name = "peewee" @@ -4430,13 +4571,13 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p [[package]] name = "prompt-toolkit" -version = "3.0.43" +version = "3.0.47" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, - {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, + {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, + {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, ] [package.dependencies] @@ -4871,6 +5012,66 @@ files = [ {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, ] +[[package]] +name = "pyreqwest-impersonate" +version = "0.4.7" +description = "HTTP client that can impersonate web browsers, mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyreqwest_impersonate-0.4.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c175dfc429c4231a6ce03841630b236f50995ca613ff1eea26fa4c75c730b562"}, + {file = "pyreqwest_impersonate-0.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3f83c50cef2d5ed0a9246318fd3ef3bfeabe286d4eabf92df4835c05a0be7dc"}, + {file = "pyreqwest_impersonate-0.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f34930113aa42f47e0542418f6a67bdb2c23fe0e2fa1866f60b29280a036b829"}, + {file = "pyreqwest_impersonate-0.4.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88d2792df548b845edd409a3e4284f76cb4fc2510fe4a69fde9e39d54910b935"}, + {file = "pyreqwest_impersonate-0.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27622d5183185dc63bcab9a7dd1de566688c63b844812b1d9366da7c459a494"}, + {file = "pyreqwest_impersonate-0.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b7bf13d49ef127e659ed134129336e94f7107023ed0138c81a46321b9a580428"}, + {file = "pyreqwest_impersonate-0.4.7-cp310-none-win_amd64.whl", hash = "sha256:0cba006b076b85a875814a4b5dd8cb27f483ebeeb0de83984a3786060fe18e0d"}, + {file = "pyreqwest_impersonate-0.4.7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:370a8cb7a92b15749cbbe3ce7a9f09d35aac7d2a74505eb447f45419ea8ef2ff"}, + {file = "pyreqwest_impersonate-0.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:33244ea10ccee08bac7a7ccdc3a8e6bef6e28f2466ed61de551fa24b76ee4b6a"}, + {file = "pyreqwest_impersonate-0.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dba24fb6db822cbd9cbac32539893cc19cc06dd1820e03536e685b9fd2a2ffdd"}, + {file = "pyreqwest_impersonate-0.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e001ed09fc364cc00578fd31c0ae44d543cf75daf06b2657c7a82dcd99336ce"}, + {file = "pyreqwest_impersonate-0.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:608525535f078e85114fcd4eeba0f0771ffc7093c29208e9c0a55147502723bf"}, + {file = "pyreqwest_impersonate-0.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:38daedba0fc997e29cbc25c684a42a04aed38bfbcf85d8f1ffe8f87314d5f72f"}, + {file = "pyreqwest_impersonate-0.4.7-cp311-none-win_amd64.whl", hash = "sha256:d21f3e93ee0aecdc43d2914800bdf23501bde858d70ac7c0b06168f85f95bf22"}, + {file = "pyreqwest_impersonate-0.4.7-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5caeee29370a06a322ea6951730d21ec3c641ce46417fd2b5805b283564f2fef"}, + {file = "pyreqwest_impersonate-0.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1c7aa4b428ed58370975d828a95eaf10561712e79a4e2eafca1746a4654a34a8"}, + {file = "pyreqwest_impersonate-0.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:887249adcab35487a44a5428ccab2a6363642785b36649a732d5e649df568b8e"}, + {file = "pyreqwest_impersonate-0.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60f932de8033c15323ba79a7470406ca8228e07aa60078dee5a18e89f0a9fc88"}, + {file = "pyreqwest_impersonate-0.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a2e6332fd6d78623a22f4e747688fe9e6005b61b6f208936d5428d2a65d34b39"}, + {file = "pyreqwest_impersonate-0.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:349b005eef323195685ba5cb2b6f302da0db481e59f03696ef57099f232f0c1f"}, + {file = "pyreqwest_impersonate-0.4.7-cp312-none-win_amd64.whl", hash = "sha256:5620025ac138a10c46a9b14c91b6f58114d50063ff865a2d02ad632751b67b29"}, + {file = "pyreqwest_impersonate-0.4.7-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ebf954e09b3dc800a7576c7bde9827b00064531364c7817356c7cc58eb4b46b2"}, + {file = "pyreqwest_impersonate-0.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:112d9561f136548bd67d31cadb6b78d4c31751e526e62e09c6e581c2f1711455"}, + {file = "pyreqwest_impersonate-0.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05213f5f014ecc6732d859a0f51b3dff0424748cc6e2d0d9a42aa1f7108b4eaa"}, + {file = "pyreqwest_impersonate-0.4.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10fa70529a60fc043650ce03481fab7714e7519c3b06f5e81c95206b8b60aec6"}, + {file = "pyreqwest_impersonate-0.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5b1288881eada1891db7e862c69b673fb159834a41f823b9b00fc52d0f096ccc"}, + {file = "pyreqwest_impersonate-0.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:57ca562229c40615074f36e7f1ae5e57b8164f604eddb042132467c3a00fc2c5"}, + {file = "pyreqwest_impersonate-0.4.7-cp38-none-win_amd64.whl", hash = "sha256:c098ef1333511ea9a43be9a818fcc0866bd2caa63cdc9cf4ab48450ace675646"}, + {file = "pyreqwest_impersonate-0.4.7-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:39d961330190bf2d59983ad16dafb4b42d5adcdfe7531ad099c8f3ab53f8d906"}, + {file = "pyreqwest_impersonate-0.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d793591784b89953422b1efaa17460f57f6116de25b3e3065d9fa6cf220ef18"}, + {file = "pyreqwest_impersonate-0.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:945116bb9ffb7e45a87e313f47de28c4da889b14bda620aebc5ba9c3600425cf"}, + {file = "pyreqwest_impersonate-0.4.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b96a0955c49f346786ee997c755561fecf33b7886cecef861fe4db15c7b23ad3"}, + {file = "pyreqwest_impersonate-0.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ed997197f907ccce9b86a75163b5e78743bc469d2ddcf8a22d4d90c2595573cb"}, + {file = "pyreqwest_impersonate-0.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1f54788f6fb0ee8b31c1eaadba81fb003efb406a768844e2a1a50b855f4806bf"}, + {file = "pyreqwest_impersonate-0.4.7-cp39-none-win_amd64.whl", hash = "sha256:0a679e81b0175dcc670a5ed47a5c184d7031ce16b5c58bf6b2c650ab9f2496c8"}, + {file = "pyreqwest_impersonate-0.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bddb07e04e4006a2184608c44154983fdfa0ce2e230b0a7cec81cd4ba88dd07"}, + {file = "pyreqwest_impersonate-0.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:780c53bfd2fbda151081165733fba5d5b1e17dd61999360110820942e351d011"}, + {file = "pyreqwest_impersonate-0.4.7-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4bfa8ea763e6935e7660f8e885f1b00713b0d22f79a526c6ae6932b1856d1343"}, + {file = "pyreqwest_impersonate-0.4.7-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96b23b0688a63cbd6c39237461baa95162a69a15e9533789163aabcaf3f572fb"}, + {file = "pyreqwest_impersonate-0.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b0eb56a8ad9d48952c613903d3ef6d8762d48dcec9807a509fee2a43e94ccac"}, + {file = "pyreqwest_impersonate-0.4.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9330176494e260521ea0eaae349ca06128dc527400248c57b378597c470d335c"}, + {file = "pyreqwest_impersonate-0.4.7-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:6343bc3392781ff470e5dc47fea9f77bb61d8831b07e901900d31c46decec5d1"}, + {file = "pyreqwest_impersonate-0.4.7-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ecd598e16020a165029647ca80078311bf079e8317bf61c1b2fa824b8967e0db"}, + {file = "pyreqwest_impersonate-0.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a38f3014ac31b08f5fb1ef4e1eb6c6e810f51f6cb815d0066ab3f34ec0f82d98"}, + {file = "pyreqwest_impersonate-0.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db76a97068e5145f5b348037e09a91b2bed9c8eab92e79a3297b1306429fa839"}, + {file = "pyreqwest_impersonate-0.4.7-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1596a8ef8f20bbfe606a90ad524946747846611c8633cbdfbad0a4298b538218"}, + {file = "pyreqwest_impersonate-0.4.7-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dcee18bc350b3d3a0455422c446f1f03f00eb762b3e470066e2bc4664fd7110d"}, + {file = "pyreqwest_impersonate-0.4.7.tar.gz", hash = "sha256:74ba7e6e4f4f753da4f71a7e5dc12625b296bd7d6ddd64093a1fbff14d8d5df7"}, +] + +[package.extras] +dev = ["pytest (>=8.1.1)"] + [[package]] name = "pytest" version = "8.1.2" @@ -4948,6 +5149,102 @@ pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] +[[package]] +name = "python-calamine" +version = "0.2.0" +description = "Python binding for Rust's library for reading excel and odf file - calamine" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python_calamine-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:da0c64292f011853046e4ce833e3319d11ab4b0ac1dec5ace1887e1f1630a3e0"}, + {file = "python_calamine-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7adbe5cbcdc04bd850beba71f51208fff69e03071ee2db556c227f992fc5b7ce"}, + {file = "python_calamine-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:984e34a17f91970aa72dc0809339d401943c11a4650c16c79eb9bf5fb25b21f2"}, + {file = "python_calamine-0.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:216e30810f1b1c9a4b8413fdcfa062e3f8a1eafc544966c89e0bfbace258300f"}, + {file = "python_calamine-0.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8d63b506a4759d6bb92029938ea725a58553f5e7d0cfeb8c94fd25dd30f71b"}, + {file = "python_calamine-0.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9f21143b105dcad70f4ee45bda1ab1d76a97ae520f60fe65f27fbbb8a6f70a27"}, + {file = "python_calamine-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35e1e0535d22117b2c720b5c0fb6c1ca4bbcecfb4b06a259e52567a21a365575"}, + {file = "python_calamine-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fc2b4d4188f459639a8ab6ea618fb6941a66b1c7aabe8be71eb3a2c5b8537a"}, + {file = "python_calamine-0.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f4a055c0f47d20c2017e5eb75a388900e2a58beca96e54ecd95647b2c8c97855"}, + {file = "python_calamine-0.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:212637c9b32d0ea00135f280b70b5d950cef270f38fa1b73037d15ed16dafdaa"}, + {file = "python_calamine-0.2.0-cp310-none-win32.whl", hash = "sha256:f53fdaa2fa53512e8e0c9a2e9079e2c77f4e5653ac1af86ce73f90577c186f19"}, + {file = "python_calamine-0.2.0-cp310-none-win_amd64.whl", hash = "sha256:fcc1cc57df8b3527fc083aa707ba5ee6613bb6096014243d2cce4bac17dde142"}, + {file = "python_calamine-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:765123dc19b4ea7dfcb8bc50dc836dc516cabc09d4bc7ddb34276c159b76dc55"}, + {file = "python_calamine-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afefc3764eda1dd334008956b25ff3086b4949ad22f693293d8551b61ab74c2d"}, + {file = "python_calamine-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb52052aedb35387d2d0bfbdd1e8d491b721143abaeb33a9defae89963cd6d37"}, + {file = "python_calamine-0.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38348374b7f76e5334d107f547dad16fd4c6a32d0241166c0fd68084eace2558"}, + {file = "python_calamine-0.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef2b0fdd00c1b0e7c8861912ef78a9ea772186ace7f018c0d6ccddf7c59adf70"}, + {file = "python_calamine-0.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cd33e553a03bd0f7c746df601a95e9d700bda9d691f1d5d9b516535976738cb"}, + {file = "python_calamine-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a494518b55acebab195727d0aa5e35c48aacd2cd85c81e31575cfa690dfd2a"}, + {file = "python_calamine-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f99599821e685042abc5fc550e8dbe3bfc1b7acb327542c86fe4c08505af311"}, + {file = "python_calamine-0.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7416a8ea27fe4954ce2c38d9e9d8c8678844eace612c58c28d1db3b896c9e52e"}, + {file = "python_calamine-0.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0b7b4e47ff5624418290c269a62474047751bcb0263b25e9ad1104c8ceed580d"}, + {file = "python_calamine-0.2.0-cp311-none-win32.whl", hash = "sha256:a620a8ef94db07b292c1e12b46b8b74f3cdfab9cf6221de94fcd8e35a534b613"}, + {file = "python_calamine-0.2.0-cp311-none-win_amd64.whl", hash = "sha256:8ad572df76c2a3593cfbef6ae715b4b9bbc2dd0d54d384c2e9ae93d6e5e00489"}, + {file = "python_calamine-0.2.0-cp311-none-win_arm64.whl", hash = "sha256:747326551bf826a305a0b0c57adf36d08b440f00af63de9c36a170212770eea8"}, + {file = "python_calamine-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9266a850a317b18ff7c3a8364ee18eb63f0db089cb605f67da2e4578f07cfa7"}, + {file = "python_calamine-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b30c5b9b5405f98ddb1f276a231d3f63456ded4e3a3d88eebab61c23584a5b87"}, + {file = "python_calamine-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c8e245cc6189b2931dc49b1750f9416420b73fdcf789a5bf8b7df6128285b2c"}, + {file = "python_calamine-0.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:654f8beda2036fa3dcf707f3772f838bd5d6f0d5df99980b04492cc37d9dfae1"}, + {file = "python_calamine-0.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d1fd1f1d51fb720aca1cc1b2be7224ddaeb0b4e15276504669118419b6f4b90"}, + {file = "python_calamine-0.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dd7efdfa07ffbc048b3374b79c13aa9fc0aee8eccd0e9a8c6b5f17d8316c08"}, + {file = "python_calamine-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7875433fa6050d042c31adf3588dbc1718d7d10ee9c7b0e51ed2e5ee0f6e68e"}, + {file = "python_calamine-0.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:86c3ebc805df4e864fbbb669b868ad72c78f2f2e27d39eb1709267228a36bdcb"}, + {file = "python_calamine-0.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:93e97f3496fed357072acb00ff7145b930cb060a6aa2ac2589187a647db8211f"}, + {file = "python_calamine-0.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac94d26a7cdf3ead932a1352f4112efaa84ec913d1cb6934176428393c6e8b58"}, + {file = "python_calamine-0.2.0-cp312-none-win32.whl", hash = "sha256:91fb49823df1ef80b615a8f1b6b4bbd40bb523f949333c7e41d75efa6cbe88f9"}, + {file = "python_calamine-0.2.0-cp312-none-win_amd64.whl", hash = "sha256:3d167ea8b2d929c1edcc69f0bad0ff57529673ba72cd9448f20b8e1107993268"}, + {file = "python_calamine-0.2.0-cp312-none-win_arm64.whl", hash = "sha256:7d7f829ee9db104e3b1c751414c62ed124aa7186c2887112722e6eb90a376db4"}, + {file = "python_calamine-0.2.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:6430c39fe87f4816ede3311706580fd5fbf7c300ba49086acc5bd1cad400eb38"}, + {file = "python_calamine-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4aaf84cf22b0b8906106cc4aa260dafbbcb8d1b4f91cddcace5aa153fbe5f421"}, + {file = "python_calamine-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:842272e3f9813b956761214460c757576d4b7a81623743e70ab1aecd667a4752"}, + {file = "python_calamine-0.2.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b11fc2283c747899eeb66a0354b91423a9d6a35df9372c6330bde6eeed7c852a"}, + {file = "python_calamine-0.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6722258b934c12ae153f4789e440825d155a428148f2f9d71821e9a515592cb6"}, + {file = "python_calamine-0.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b294ad2a85be8fe161a33e7baa178b381763242c9fcbd16e4d36ee88485706c"}, + {file = "python_calamine-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06369b17b5f3a8e1e3b1988fdbe978301ff94d9c40f3ad2cb4ba814503344abb"}, + {file = "python_calamine-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9d543bbc7b340dcaaee8d4e8e9a934fe75f71f1bfda224e35f7f7f39ad733bf"}, + {file = "python_calamine-0.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5381ee79f12625dca1dccc1d305e6b4948d61e68e208747594c39742a4a7145a"}, + {file = "python_calamine-0.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e8f77ee228ce1ea983c273ea1c17130a334d1049abbf28607de36168b65d676d"}, + {file = "python_calamine-0.2.0-cp38-none-win32.whl", hash = "sha256:c5323089868399ad49175126cdfdc1d5c3f8be122faaf7d497b10f23f6cd41ca"}, + {file = "python_calamine-0.2.0-cp38-none-win_amd64.whl", hash = "sha256:f00ae29d9062c9a490949478bf8880e4dc3551b18b335d4c44dac861ab7a6003"}, + {file = "python_calamine-0.2.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e114069a5189702a3bf2358caa4e349178ec29f2dab711762a48b622e47aa9b9"}, + {file = "python_calamine-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4fb854c110643dab3514e5f54e65090789c56df53fa24f477498b95a3e834a1a"}, + {file = "python_calamine-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3622fa8ae26a01e9a934fdadee00222c1231d56b9343f6f947e0aa8ba4ccda35"}, + {file = "python_calamine-0.2.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c221573ab5a8b642345371f3e6b854c3d293fbad1d7d9be2c7bff2ec8de076b9"}, + {file = "python_calamine-0.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5830829753b1e62353b1c1971992dc9764f5d88d2a78b6386b5077efa98dab8"}, + {file = "python_calamine-0.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e76c87a40d1a5b22ba85ea88c86d2d89311eaa45b4df1afbc121b552c2efede7"}, + {file = "python_calamine-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c67b1468b527fc43038d1e095a62a9cc0db009d7780cd6092cf9ef427bd8a9c"}, + {file = "python_calamine-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9fc8fd1cbf994bdd54a2a48c32ea8cce050a27f0859f0508cf44ffba2def465"}, + {file = "python_calamine-0.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f6924afb342ff9e1264e97835f26a56b542be06a4b5d461fb228c6358a52b24e"}, + {file = "python_calamine-0.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:19e143a8c6f16dcc9a994567b06766a84b5cd6869656efe1d39902d41a99b00a"}, + {file = "python_calamine-0.2.0-cp39-none-win32.whl", hash = "sha256:4e5bfcef754de1553b3ac4f91af2c471aa720ee467d4bad49144be25af724fad"}, + {file = "python_calamine-0.2.0-cp39-none-win_amd64.whl", hash = "sha256:a0e76379128ae6d8fba65eaee01a7c02dad258b11bffccdf2c1a74ee84c90d49"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d767fb8db8527d6ed8d3602fb9e8778a32ae0db66b1081541fbb1f804796bd87"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:74dce7c8dc863dba44d52effb1290505610564be574924fc92770728bdd38393"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36beae8347b414a321276a7d065f672883f075ff40fa1c789e841bf6962b96fa"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa39238ff71d47cb4ed556e7080829e8c9dae3fc0d2a01c6bb0114a1f313cdb"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3e42b156ef7485a846195fc01013eab2816841bc8b87f0393dc8f1c19f2e4f12"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fdb4a5b9e719668054cd9d4b210b38ae0eeb056340125704eb3665555e2f6e04"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e6636349742c73944a3cb05baeb99a2d72371712b35abf7f0b22d9de6b85b8fd"}, + {file = "python_calamine-0.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cb6f2a65444e01032564f7c5fdcfea43b6506b82f2d5308edd7d1d030bb01a13"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e92f84ea190d881bec8852c6b89fa3ca93ce514094a827be2d66c31cec063838"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a2bda72687d6fce125ccf373ad760f5f50561219e91664baf51ab36ec0dbcaf2"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7450398d1212bb668e88e42a5a3c1239b55371d1514c2d9164ecdb89c8b02426"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed12d1780d0235c4ff5a5a2f9fab846498ee90e739def6aa27052895a860e2a5"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:978431179238f2a61046696bbe93aff9f4c9f7c2d054b84b8963c246a837702f"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:97b38e1f9c3d6dd921662d327ebbc1ef912faa970f28066784777745a4b9094a"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c296857b22568a381cb1cf908928ad8bb18ea19590c1ff3f67a51010a29cebb3"}, + {file = "python_calamine-0.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b85f3156c87f870e3f48765ce46347c67c13fd0fc7e3de993285fd428f99b282"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:8f0fc394191aea88efc0ff0e3cb1fdd4d15c33bce13f075187c3caccc995e964"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3c08312a1f8a99cf525714c53854f8c5a9bf12d7c04adaf71a00c88ed8228704"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:183a78c284597c0b25df15a7fb74baa90df71fcc71721190c9c93229958f5809"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91089a7f4dba9c9312b873ea2f47cd0dc868db2a4ae829b720e86a761d6daded"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25b4ee9cc67248ab69e46920a9f10a89efc27bcfe1586ca299136ba0bee16c0d"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2d3b010c9824cddc426cac51654521fda9a33c902c965fb4b2c8fe8d75839e22"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:06bfd869d4e1d0c48273c4c262359aa912eaa5d40ee1b5b653dac3e321a61e4c"}, + {file = "python_calamine-0.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:91b67d4284de11046c5ab20afebba17ea72415e7773089e12c0a3dac390e5e73"}, + {file = "python_calamine-0.2.0.tar.gz", hash = "sha256:3cc81fefbd697050bed7d9968be3562ab41390bf8fd0a79e97eed6056be3d332"}, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -5066,6 +5363,17 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] +[[package]] +name = "pyxlsb" +version = "1.0.10" +description = "Excel 2007-2010 Binary Workbook (xlsb) parser" +optional = false +python-versions = "*" +files = [ + {file = "pyxlsb-1.0.10-py2.py3-none-any.whl", hash = "sha256:87c122a9a622e35ca5e741d2e541201d28af00fb46bec492cfa9586890b120b4"}, + {file = "pyxlsb-1.0.10.tar.gz", hash = "sha256:8062d1ea8626d3f1980e8b1cfe91a4483747449242ecb61013bc2df85435f685"}, +] + [[package]] name = "pyyaml" version = "6.0.1" @@ -5177,101 +5485,104 @@ test = ["coverage", "pytest"] [[package]] name = "rapidfuzz" -version = "3.9.0" +version = "3.9.3" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" files = [ - {file = "rapidfuzz-3.9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd375c4830fee11d502dd93ecadef63c137ae88e1aaa29cc15031fa66d1e0abb"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:55e2c5076f38fc1dbaacb95fa026a3e409eee6ea5ac4016d44fb30e4cad42b20"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:488f74126904db6b1bea545c2f3567ea882099f4c13f46012fe8f4b990c683df"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3f2d1ea7cd57dfcd34821e38b4924c80a31bcf8067201b1ab07386996a9faee"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b11e602987bcb4ea22b44178851f27406fca59b0836298d0beb009b504dba266"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3083512e9bf6ed2bb3d25883922974f55e21ae7f8e9f4e298634691ae1aee583"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b33c6d4b3a1190bc0b6c158c3981535f9434e8ed9ffa40cf5586d66c1819fb4b"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcb95fde22f98e6d0480db8d6038c45fe2d18a338690e6f9bba9b82323f3469"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:08d8b49b3a4fb8572e480e73fcddc750da9cbb8696752ee12cca4bf8c8220d52"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e721842e6b601ebbeb8cc5e12c75bbdd1d9e9561ea932f2f844c418c31256e82"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7988363b3a415c5194ce1a68d380629247f8713e669ad81db7548eb156c4f365"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2d267d4c982ab7d177e994ab1f31b98ff3814f6791b90d35dda38307b9e7c989"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0bb28ab5300cf974c7eb68ea21125c493e74b35b1129e629533468b2064ae0a2"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-win32.whl", hash = "sha256:1b1f74997b6d94d66375479fa55f70b1c18e4d865d7afcd13f0785bfd40a9d3c"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c56d2efdfaa1c642029f3a7a5bb76085c5531f7a530777be98232d2ce142553c"}, - {file = "rapidfuzz-3.9.0-cp310-cp310-win_arm64.whl", hash = "sha256:6a83128d505cac76ea560bb9afcb3f6986e14e50a6f467db9a31faef4bd9b347"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e2218d62ab63f3c5ad48eced898854d0c2c327a48f0fb02e2288d7e5332a22c8"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:36bf35df2d6c7d5820da20a6720aee34f67c15cd2daf8cf92e8141995c640c25"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:905b01a9b633394ff6bb5ebb1c5fd660e0e180c03fcf9d90199cc6ed74b87cf7"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33cfabcb7fd994938a6a08e641613ce5fe46757832edc789c6a5602e7933d6fa"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1179dcd3d150a67b8a678cd9c84f3baff7413ff13c9e8fe85e52a16c97e24c9b"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47d97e28c42f1efb7781993b67c749223f198f6653ef177a0c8f2b1c516efcaf"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28da953eb2ef9ad527e536022da7afff6ace7126cdd6f3e21ac20f8762e76d2c"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:182b4e11de928fb4834e8f8b5ecd971b5b10a86fabe8636ab65d3a9b7e0e9ca7"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c74f2da334ce597f31670db574766ddeaee5d9430c2c00e28d0fbb7f76172036"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:014ac55b03f4074f903248ded181f3000f4cdbd134e6155cbf643f0eceb4f70f"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c4ef34b2ddbf448f1d644b4ec6475df8bbe5b9d0fee173ff2e87322a151663bd"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fc02157f521af15143fae88f92ef3ddcc4e0cff05c40153a9549dc0fbdb9adb3"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ff08081c49b18ba253a99e6a47f492e6ee8019e19bbb6ddc3ed360cd3ecb2f62"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-win32.whl", hash = "sha256:b9bf90b3d96925cbf8ef44e5ee3cf39ef0c422f12d40f7a497e91febec546650"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:d5d5684f54d82d9b0cf0b2701e55a630527a9c3dd5ddcf7a2e726a475ac238f2"}, - {file = "rapidfuzz-3.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:a2de844e0e971d7bd8aa41284627dbeacc90e750b90acfb016836553c7a63192"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f81fe99a69ac8ee3fd905e70c62f3af033901aeb60b69317d1d43d547b46e510"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:633b9d03fc04abc585c197104b1d0af04b1f1db1abc99f674d871224cd15557a"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab872cb57ae97c54ba7c71a9e3c9552beb57cb907c789b726895576d1ea9af6f"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdd8c15c3a14e409507fdf0c0434ec481d85c6cbeec8bdcd342a8cd1eda03825"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2444d8155d9846f206e2079bb355b85f365d9457480b0d71677a112d0a7f7128"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83bd3d01f04061c3660742dc85143a89d49fd23eb31eccbf60ad56c4b955617"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ca799f882364e69d0872619afb19efa3652b7133c18352e4a3d86a324fb2bb1"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6993d361f28b9ef5f0fa4e79b8541c2f3507be7471b9f9cb403a255e123b31e1"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:170822a1b1719f02b58e3dce194c8ad7d4c5b39be38c0fdec603bd19c6f9cf81"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e86e39c1c1a0816ceda836e6f7bd3743b930cbc51a43a81bb433b552f203f25"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:731269812ea837e0b93d913648e404736407408e33a00b75741e8f27c590caa2"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8e5ff882d3a3d081157ceba7e0ebc7fac775f95b08cbb143accd4cece6043819"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2003071aa633477a01509890c895f9ef56cf3f2eaa72c7ec0b567f743c1abcba"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-win32.whl", hash = "sha256:13857f9070600ea1f940749f123b02d0b027afbaa45e72186df0f278915761d0"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:134b7098ac109834eeea81424b6822f33c4c52bf80b81508295611e7a21be12a"}, - {file = "rapidfuzz-3.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:2a96209f046fe328be30fc43f06e3d4b91f0d5b74e9dcd627dbfd65890fa4a5e"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:544b0bf9d17170720809918e9ccd0d482d4a3a6eca35630d8e1459f737f71755"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d536f8beb8dd82d6efb20fe9f82c2cfab9ffa0384b5d184327e393a4edde91d"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30f7609da871510583f87484a10820b26555a473a90ab356cdda2f3b4456256c"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f4a2468432a1db491af6f547fad8f6d55fa03e57265c2f20e5eaceb68c7907e"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a7ec4676242c8a430509cff42ce98bca2fbe30188a63d0f60fdcbfd7e84970"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dcb523243e988c849cf81220164ec3bbed378a699e595a8914fffe80596dc49f"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4eea3bf72c4fe68e957526ffd6bcbb403a21baa6b3344aaae2d3252313df6199"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4514980a5d204c076dd5b756960f6b1b7598f030009456e6109d76c4c331d03c"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9a06a99f1335fe43464d7121bc6540de7cd9c9475ac2025babb373fe7f27846b"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6c1ed63345d1581c39d4446b1a8c8f550709656ce2a3c88c47850b258167f3c2"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cd2e6e97daf17ebb3254285cf8dd86c60d56d6cf35c67f0f9a557ef26bd66290"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9bc0f7e6256a9c668482c41c8a3de5d0aa12e8ca346dcc427b97c7edb82cba48"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c09f4e87e82a164c9db769474bc61f8c8b677f2aeb0234b8abac73d2ecf9799"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-win32.whl", hash = "sha256:e65b8f7921bf60cbb207c132842a6b45eefef48c4c3b510eb16087d6c08c70af"}, - {file = "rapidfuzz-3.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9d6478957fb35c7844ad08f2442b62ba76c1857a56370781a707eefa4f4981e1"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:65d9250a4b0bf86320097306084bc3ca479c8f5491927c170d018787793ebe95"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:47b7c0840afa724db3b1a070bc6ed5beab73b4e659b1d395023617fc51bf68a2"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a16c48c6df8fb633efbbdea744361025d01d79bca988f884a620e63e782fe5b"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48105991ff6e4a51c7f754df500baa070270ed3d41784ee0d097549bc9fcb16d"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a7f273906b3c7cc6d63a76e088200805947aa0bc1ada42c6a0e582e19c390d7"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c396562d304e974b4b0d5cd3afc4f92c113ea46a36e6bc62e45333d6aa8837e"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68da1b70458fea5290ec9a169fcffe0c17ff7e5bb3c3257e63d7021a50601a8e"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c5b8f9a7b177af6ce7c6ad5b95588b4b73e37917711aafa33b2e79ee80fe709"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3c42a238bf9dd48f4ccec4c6934ac718225b00bb3a438a008c219e7ccb3894c7"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a365886c42177b2beab475a50ba311b59b04f233ceaebc4c341f6f91a86a78e2"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ce897b5dafb7fb7587a95fe4d449c1ea0b6d9ac4462fbafefdbbeef6eee4cf6a"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:413ac49bae291d7e226a5c9be65c71b2630b3346bce39268d02cb3290232e4b7"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8982fc3bd49d55a91569fc8a3feba0de4cef0b391ff9091be546e9df075b81"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-win32.whl", hash = "sha256:3904d0084ab51f82e9f353031554965524f535522a48ec75c30b223eb5a0a488"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:3733aede16ea112728ffeafeb29ccc62e095ed8ec816822fa2a82e92e2c08696"}, - {file = "rapidfuzz-3.9.0-cp39-cp39-win_arm64.whl", hash = "sha256:fc4e26f592b51f97acf0a3f8dfed95e4d830c6a8fbf359361035df836381ab81"}, - {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e33362e98c7899b5f60dcb06ada00acd8673ce0d59aefe9a542701251fd00423"}, - {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb67cf43ad83cb886cbbbff4df7dcaad7aedf94d64fca31aea0da7d26684283c"}, - {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e2e106cc66453bb80d2ad9c0044f8287415676df5c8036d737d05d4b9cdbf8e"}, - {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1256915f7e7a5cf2c151c9ac44834b37f9bd1c97e8dec6f936884f01b9dfc7d"}, - {file = "rapidfuzz-3.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ae643220584518cbff8bf2974a0494d3e250763af816b73326a512c86ae782ce"}, - {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:491274080742110427f38a6085bb12dffcaff1eef12dccf9e8758398c7e3957e"}, - {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bc5559b9b94326922c096b30ae2d8e5b40b2e9c2c100c2cc396ad91bcb84d30"}, - {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:849160dc0f128acb343af514ca827278005c1d00148d025e4035e034fc2d8c7f"}, - {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:623883fb78e692d54ed7c43b09beec52c6685f10a45a7518128e25746667403b"}, - {file = "rapidfuzz-3.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d20ab9abc7e19767f1951772a6ab14cb4eddd886493c2da5ee12014596ad253f"}, - {file = "rapidfuzz-3.9.0.tar.gz", hash = "sha256:b182f0fb61f6ac435e416eb7ab330d62efdbf9b63cf0c7fa12d1f57c2eaaf6f3"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdb8c5b8e29238ec80727c2ba3b301efd45aa30c6a7001123a6647b8e6f77ea4"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3bd0d9632088c63a241f217742b1cf86e2e8ae573e01354775bd5016d12138c"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:153f23c03d4917f6a1fc2fb56d279cc6537d1929237ff08ee7429d0e40464a18"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96c5225e840f1587f1bac8fa6f67562b38e095341576e82b728a82021f26d62"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b777cd910ceecd738adc58593d6ed42e73f60ad04ecdb4a841ae410b51c92e0e"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53e06e4b81f552da04940aa41fc556ba39dee5513d1861144300c36c33265b76"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c7ca5b6050f18fdcacdada2dc5fb7619ff998cd9aba82aed2414eee74ebe6cd"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:87bb8d84cb41446a808c4b5f746e29d8a53499381ed72f6c4e456fe0f81c80a8"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:959a15186d18425d19811bea86a8ffbe19fd48644004d29008e636631420a9b7"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a24603dd05fb4e3c09d636b881ce347e5f55f925a6b1b4115527308a323b9f8e"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d055da0e801c71dd74ba81d72d41b2fa32afa182b9fea6b4b199d2ce937450d"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:875b581afb29a7213cf9d98cb0f98df862f1020bce9d9b2e6199b60e78a41d14"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-win32.whl", hash = "sha256:6073a46f61479a89802e3f04655267caa6c14eb8ac9d81a635a13805f735ebc1"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:119c010e20e561249b99ca2627f769fdc8305b07193f63dbc07bca0a6c27e892"}, + {file = "rapidfuzz-3.9.3-cp310-cp310-win_arm64.whl", hash = "sha256:790b0b244f3213581d42baa2fed8875f9ee2b2f9b91f94f100ec80d15b140ba9"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f57e8305c281e8c8bc720515540e0580355100c0a7a541105c6cafc5de71daae"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a4fc7b784cf987dbddc300cef70e09a92ed1bce136f7bb723ea79d7e297fe76d"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b422c0a6fe139d5447a0766268e68e6a2a8c2611519f894b1f31f0a392b9167"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f50fed4a9b0c9825ff37cf0bccafd51ff5792090618f7846a7650f21f85579c9"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b80eb7cbe62348c61d3e67e17057cddfd6defab168863028146e07d5a8b24a89"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f45be77ec82da32ce5709a362e236ccf801615cc7163b136d1778cf9e31b14"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd84b7f652a5610733400307dc732f57c4a907080bef9520412e6d9b55bc9adc"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e6d27dad8c990218b8cd4a5c99cbc8834f82bb46ab965a7265d5aa69fc7ced7"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:05ee0696ebf0dfe8f7c17f364d70617616afc7dafe366532730ca34056065b8a"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2bc8391749e5022cd9e514ede5316f86e332ffd3cfceeabdc0b17b7e45198a8c"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:93981895602cf5944d89d317ae3b1b4cc684d175a8ae2a80ce5b65615e72ddd0"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:754b719a4990735f66653c9e9261dcf52fd4d925597e43d6b9069afcae700d21"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-win32.whl", hash = "sha256:14c9f268ade4c88cf77ab007ad0fdf63699af071ee69378de89fff7aa3cae134"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc1991b4cde6c9d3c0bbcb83d5581dc7621bec8c666c095c65b4277233265a82"}, + {file = "rapidfuzz-3.9.3-cp311-cp311-win_arm64.whl", hash = "sha256:0c34139df09a61b1b557ab65782ada971b4a3bce7081d1b2bee45b0a52231adb"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d6a210347d6e71234af5c76d55eeb0348b026c9bb98fe7c1cca89bac50fb734"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b300708c917ce52f6075bdc6e05b07c51a085733650f14b732c087dc26e0aaad"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83ea7ca577d76778250421de61fb55a719e45b841deb769351fc2b1740763050"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8319838fb5b7b5f088d12187d91d152b9386ce3979ed7660daa0ed1bff953791"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:505d99131afd21529293a9a7b91dfc661b7e889680b95534756134dc1cc2cd86"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c52970f7784518d7c82b07a62a26e345d2de8c2bd8ed4774e13342e4b3ff4200"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:143caf7247449055ecc3c1e874b69e42f403dfc049fc2f3d5f70e1daf21c1318"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b8ab0fa653d9225195a8ff924f992f4249c1e6fa0aea563f685e71b81b9fcccf"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:57e7c5bf7b61c7320cfa5dde1e60e678d954ede9bb7da8e763959b2138391401"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:51fa1ba84653ab480a2e2044e2277bd7f0123d6693051729755addc0d015c44f"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:17ff7f7eecdb169f9236e3b872c96dbbaf116f7787f4d490abd34b0116e3e9c8"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:afe7c72d3f917b066257f7ff48562e5d462d865a25fbcabf40fca303a9fa8d35"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-win32.whl", hash = "sha256:e53ed2e9b32674ce96eed80b3b572db9fd87aae6742941fb8e4705e541d861ce"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:35b7286f177e4d8ba1e48b03612f928a3c4bdac78e5651379cec59f95d8651e6"}, + {file = "rapidfuzz-3.9.3-cp312-cp312-win_arm64.whl", hash = "sha256:e6e4b9380ed4758d0cb578b0d1970c3f32dd9e87119378729a5340cb3169f879"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a39890013f6d5b056cc4bfdedc093e322462ece1027a57ef0c636537bdde7531"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b5bc0fdbf419493163c5c9cb147c5fbe95b8e25844a74a8807dcb1a125e630cf"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efe6e200a75a792d37b960457904c4fce7c928a96ae9e5d21d2bd382fe39066e"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de077c468c225d4c18f7188c47d955a16d65f21aab121cbdd98e3e2011002c37"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f917eaadf5388466a95f6a236f678a1588d231e52eda85374077101842e794e"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858ba57c05afd720db8088a8707079e8d024afe4644001fe0dbd26ef7ca74a65"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d36447d21b05f90282a6f98c5a33771805f9222e5d0441d03eb8824e33e5bbb4"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:acbe4b6f1ccd5b90c29d428e849aa4242e51bb6cab0448d5f3c022eb9a25f7b1"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:53c7f27cdf899e94712972237bda48cfd427646aa6f5d939bf45d084780e4c16"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:6175682a829c6dea4d35ed707f1dadc16513270ef64436568d03b81ccb6bdb74"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:5276df395bd8497397197fca2b5c85f052d2e6a66ffc3eb0544dd9664d661f95"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:77b5c4f3e72924d7845f0e189c304270066d0f49635cf8a3938e122c437e58de"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-win32.whl", hash = "sha256:8add34061e5cd561c72ed4febb5c15969e7b25bda2bb5102d02afc3abc1f52d0"}, + {file = "rapidfuzz-3.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:604e0502a39cf8e67fa9ad239394dddad4cdef6d7008fdb037553817d420e108"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21047f55d674614eb4b0ab34e35c3dc66f36403b9fbfae645199c4a19d4ed447"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a56da3aff97cb56fe85d9ca957d1f55dbac7c27da927a86a2a86d8a7e17f80aa"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:964c08481aec2fe574f0062e342924db2c6b321391aeb73d68853ed42420fd6d"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e2b827258beefbe5d3f958243caa5a44cf46187eff0c20e0b2ab62d1550327a"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6e65a301fcd19fbfbee3a514cc0014ff3f3b254b9fd65886e8a9d6957fb7bca"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbe93ba1725a8d47d2b9dca6c1f435174859427fbc054d83de52aea5adc65729"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca21c0a34adee582775da997a600283e012a608a107398d80a42f9a57ad323d"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:256e07d3465173b2a91c35715a2277b1ee3ae0b9bbab4e519df6af78570741d0"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:802ca2cc8aa6b8b34c6fdafb9e32540c1ba05fca7ad60b3bbd7ec89ed1797a87"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:dd789100fc852cffac1449f82af0da139d36d84fd9faa4f79fc4140a88778343"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5d0abbacdb06e27ff803d7ae0bd0624020096802758068ebdcab9bd49cf53115"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:378d1744828e27490a823fc6fe6ebfb98c15228d54826bf4e49e4b76eb5f5579"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-win32.whl", hash = "sha256:5d0cb272d43e6d3c0dedefdcd9d00007471f77b52d2787a4695e9dd319bb39d2"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:15e4158ac4b3fb58108072ec35b8a69165f651ba1c8f43559a36d518dbf9fb3f"}, + {file = "rapidfuzz-3.9.3-cp39-cp39-win_arm64.whl", hash = "sha256:58c6a4936190c558d5626b79fc9e16497e5df7098589a7e80d8bff68148ff096"}, + {file = "rapidfuzz-3.9.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5410dc848c947a603792f4f51b904a3331cf1dc60621586bfbe7a6de72da1091"}, + {file = "rapidfuzz-3.9.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:282d55700a1a3d3a7980746eb2fcd48c9bbc1572ebe0840d0340d548a54d01fe"}, + {file = "rapidfuzz-3.9.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc1037507810833646481f5729901a154523f98cbebb1157ba3a821012e16402"}, + {file = "rapidfuzz-3.9.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e33f779391caedcba2ba3089fb6e8e557feab540e9149a5c3f7fea7a3a7df37"}, + {file = "rapidfuzz-3.9.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41a81a9f311dc83d22661f9b1a1de983b201322df0c4554042ffffd0f2040c37"}, + {file = "rapidfuzz-3.9.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a93250bd8fae996350c251e1752f2c03335bb8a0a5b0c7e910a593849121a435"}, + {file = "rapidfuzz-3.9.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3617d1aa7716c57d120b6adc8f7c989f2d65bc2b0cbd5f9288f1fc7bf469da11"}, + {file = "rapidfuzz-3.9.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad04a3f5384b82933213bba2459f6424decc2823df40098920856bdee5fd6e88"}, + {file = "rapidfuzz-3.9.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8709918da8a88ad73c9d4dd0ecf24179a4f0ceba0bee21efc6ea21a8b5290349"}, + {file = "rapidfuzz-3.9.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b770f85eab24034e6ef7df04b2bfd9a45048e24f8a808e903441aa5abde8ecdd"}, + {file = "rapidfuzz-3.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930b4e6fdb4d914390141a2b99a6f77a52beacf1d06aa4e170cba3a98e24c1bc"}, + {file = "rapidfuzz-3.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:c8444e921bfc3757c475c4f4d7416a7aa69b2d992d5114fe55af21411187ab0d"}, + {file = "rapidfuzz-3.9.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c1d3ef3878f871abe6826e386c3d61b5292ef5f7946fe646f4206b85836b5da"}, + {file = "rapidfuzz-3.9.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d861bf326ee7dabc35c532a40384541578cd1ec1e1b7db9f9ecbba56eb76ca22"}, + {file = "rapidfuzz-3.9.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cde6b9d9ba5007077ee321ec722fa714ebc0cbd9a32ccf0f4dd3cc3f20952d71"}, + {file = "rapidfuzz-3.9.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bb6546e7b6bed1aefbe24f68a5fb9b891cc5aef61bca6c1a7b1054b7f0359bb"}, + {file = "rapidfuzz-3.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d8a57261ef7996d5ced7c8cba9189ada3fbeffd1815f70f635e4558d93766cb"}, + {file = "rapidfuzz-3.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:67201c02efc596923ad950519e0b75ceb78d524177ea557134d6567b9ac2c283"}, + {file = "rapidfuzz-3.9.3.tar.gz", hash = "sha256:b398ea66e8ed50451bce5997c430197d5e4b06ac4aa74602717f792d8d8d06e2"}, ] [package.extras] @@ -5301,13 +5612,13 @@ test = ["coveralls", "pycodestyle", "pyflakes", "pylint", "pytest", "pytest-benc [[package]] name = "redis" -version = "5.0.4" +version = "5.0.5" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" files = [ - {file = "redis-5.0.4-py3-none-any.whl", hash = "sha256:7adc2835c7a9b5033b7ad8f8918d09b7344188228809c98df07af226d39dec91"}, - {file = "redis-5.0.4.tar.gz", hash = "sha256:ec31f2ed9675cc54c21ba854cfe0462e6faf1d83c8ce5944709db8a4700b9c61"}, + {file = "redis-5.0.5-py3-none-any.whl", hash = "sha256:30b47d4ebb6b7a0b9b40c1275a19b87bb6f46b3bed82a89012cf56dea4024ada"}, + {file = "redis-5.0.5.tar.gz", hash = "sha256:3417688621acf6ee368dec4a04dd95881be24efd34c79f00d31f62bb528800ae"}, ] [package.dependencies] @@ -5449,13 +5760,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-file" -version = "2.0.0" +version = "2.1.0" description = "File transport adapter for Requests" optional = false python-versions = "*" files = [ - {file = "requests-file-2.0.0.tar.gz", hash = "sha256:20c5931629c558fda566cacc10cfe2cd502433e628f568c34c80d96a0cc95972"}, - {file = "requests_file-2.0.0-py2.py3-none-any.whl", hash = "sha256:3e493d390adb44aa102ebea827a48717336d5268968c370eaf19abaf5cae13bf"}, + {file = "requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c"}, + {file = "requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658"}, ] [package.dependencies] @@ -5690,36 +6001,36 @@ tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy ( [[package]] name = "scipy" -version = "1.13.0" +version = "1.13.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, - {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, - {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, - {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, - {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, - {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, - {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, - {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, - {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, - {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, - {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, - {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, - {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, - {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, - {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, - {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, - {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, - {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, - {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, - {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, - {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, - {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, - {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, - {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, - {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, ] [package.dependencies] @@ -5780,19 +6091,18 @@ tornado = ["tornado (>=5)"] [[package]] name = "setuptools" -version = "69.5.1" +version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "sgmllib3k" @@ -6433,13 +6743,13 @@ requests = ">=2.0.0" [[package]] name = "types-requests" -version = "2.31.0.20240406" +version = "2.32.0.20240602" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.31.0.20240406.tar.gz", hash = "sha256:4428df33c5503945c74b3f42e82b181e86ec7b724620419a2966e2de604ce1a1"}, - {file = "types_requests-2.31.0.20240406-py3-none-any.whl", hash = "sha256:6216cdac377c6b9a040ac1c0404f7284bd13199c0e1bb235f4324627e8898cf5"}, + {file = "types-requests-2.32.0.20240602.tar.gz", hash = "sha256:3f98d7bbd0dd94ebd10ff43a7fbe20c3b8528acace6d8efafef0b6a184793f06"}, + {file = "types_requests-2.32.0.20240602-py3-none-any.whl", hash = "sha256:ed3946063ea9fbc6b5fc0c44fa279188bae42d582cb63760be6cb4b9d06c3de8"}, ] [package.dependencies] @@ -6447,13 +6757,13 @@ urllib3 = ">=2" [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] @@ -7024,13 +7334,13 @@ multidict = ">=4.0" [[package]] name = "yfinance" -version = "0.2.39" +version = "0.2.40" description = "Download market data from Yahoo! Finance API" optional = false python-versions = "*" files = [ - {file = "yfinance-0.2.39-py2.py3-none-any.whl", hash = "sha256:00645b8d7fe1b1719f90fce5c20a45f215306aa776dd57a61ed1e0ec4af5d2e5"}, - {file = "yfinance-0.2.39.tar.gz", hash = "sha256:ffb9a78a26c2f464e4d5a13a26e46abcf5c8dcbe3b0b1971137b86f586b105c2"}, + {file = "yfinance-0.2.40-py2.py3-none-any.whl", hash = "sha256:328176b5690de7aa192456a15b351c20ddde31b35d479f8179f5325bd340fc0b"}, + {file = "yfinance-0.2.40.tar.gz", hash = "sha256:b053ac31229b5dc7f49a17a057f66aa7f688de2f5ddeb95c2455ec13cd89511a"}, ] [package.dependencies] @@ -7087,39 +7397,47 @@ test = ["zope.testrunner"] [[package]] name = "zope-interface" -version = "6.4" +version = "6.4.post2" description = "Interfaces for Python" optional = false python-versions = ">=3.7" files = [ - {file = "zope.interface-6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72faa868fcfde49a29d287dce3c83180322467eecd725dd351098efe96e8d4bb"}, - {file = "zope.interface-6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:855b7233fa5d0d1f3be8c14fadf4718dee1c928e1d75f1584bea6ecec6dcc4af"}, - {file = "zope.interface-6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36ee6e507a9fd4f1f0aab8e8dfc801d162e7211c27503cbfb47e1d558941a7fa"}, - {file = "zope.interface-6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:604fa920478dfc0c76cdb7c203572400a8317ffcdac288245c408b42b3d9aee9"}, - {file = "zope.interface-6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c04bd4ee4766d285e83c6d8c042663a98efb934389e05ccd643fefb066c88a9d"}, - {file = "zope.interface-6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4782e173c2fde4f649c2a9a68082445bc1f2c27f41907de06bf1ba82585847f2"}, - {file = "zope.interface-6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:646cd83d24065d074f22f61fe101d20dbf4b729ca7831cc782ec986eb9156f93"}, - {file = "zope.interface-6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0f61ccbc26e08031d0e72b6a0cbf9b4030f035913cb2b39f940aa42eb8e0063"}, - {file = "zope.interface-6.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:414e6dccdf4a5c96c0c98da68ba040dbf9ba7511b61b34e228f11b0ed90c439d"}, - {file = "zope.interface-6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5092f2712e1fd07579fc3101b18e9c95857c853e836847598bf992c8e672434"}, - {file = "zope.interface-6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21732994aa3ca43bbb6b36335c288023428a3c5b7322b637c7b0a03053937578"}, - {file = "zope.interface-6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe636b49c333bfc5b0913590e36a2f151167c462fb36d9f4acc66029e45c974b"}, - {file = "zope.interface-6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57f34b7997f8de7d2db08363eaccd05dad20f106e39efe95bed4fac84af2d022"}, - {file = "zope.interface-6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6494dc0314e782ce4fb0e624b4ce2458f54d074382f50a920c7700c05cbcef28"}, - {file = "zope.interface-6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cda82ab32f984985f09e4ec20a4f9665b26779a1b8e443b34a148de256f2052"}, - {file = "zope.interface-6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f78e1eac48c4f4e0168a91cabcd8d1aedb972836df5c8769071fc6173294a0a3"}, - {file = "zope.interface-6.4-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:8e246357f52952ae5fa950d19eda8572594c49e6cb1e5462508e6cec561a37de"}, - {file = "zope.interface-6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93f28d84517dcd6c240979bd9b2f262a373832baef856fe663a24b9171d7f04d"}, - {file = "zope.interface-6.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cd56eb9a23767958c9a0654306b9a4a74def485f645b3a7378cc6ab661ef31c"}, - {file = "zope.interface-6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:502d2c9c4231d022b20225dba5c6c736236ed65e1d7e2f6f402b5aa6a7040ec9"}, - {file = "zope.interface-6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ee1e3ca6c98efe213a96dece89100a8aa52e210ac354861d8039d69bd1d6e5ff"}, - {file = "zope.interface-6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e6b756663deade5270f67899753437b39d970f9eecd49e19fae3b880310cf0"}, - {file = "zope.interface-6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f33af86ed460eb28dc9da1de1f3305795271a19c665161c1d973a737596b2081"}, - {file = "zope.interface-6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e85eada0eb551950df05d72dc0e892320f14daa78bc434059e834d4b1f9300"}, - {file = "zope.interface-6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3945f4fda92c1b6fb0cb6eaaaf72599e5c2c2059654bdc42bc09c6e711c214c8"}, - {file = "zope.interface-6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbbb290751f5c4ed81e54ae73fe8557c4a85973f5ab019edbb0f746244ecea6"}, - {file = "zope.interface-6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e4cc017206c1429a6d8fdd8a25c6efc15512065eec0a8d45c350df96a0911ed"}, - {file = "zope_interface-6.4.tar.gz", hash = "sha256:b11f2b67ccc990a1522fa8cd3f5d185a068459f944ab2d0e7a1b15d31bcb4af4"}, + {file = "zope.interface-6.4.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2eccd5bef45883802848f821d940367c1d0ad588de71e5cabe3813175444202c"}, + {file = "zope.interface-6.4.post2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:762e616199f6319bb98e7f4f27d254c84c5fb1c25c908c2a9d0f92b92fb27530"}, + {file = "zope.interface-6.4.post2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ef8356f16b1a83609f7a992a6e33d792bb5eff2370712c9eaae0d02e1924341"}, + {file = "zope.interface-6.4.post2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e4fa5d34d7973e6b0efa46fe4405090f3b406f64b6290facbb19dcbf642ad6b"}, + {file = "zope.interface-6.4.post2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d22fce0b0f5715cdac082e35a9e735a1752dc8585f005d045abb1a7c20e197f9"}, + {file = "zope.interface-6.4.post2-cp310-cp310-win_amd64.whl", hash = "sha256:97e615eab34bd8477c3f34197a17ce08c648d38467489359cb9eb7394f1083f7"}, + {file = "zope.interface-6.4.post2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:599f3b07bde2627e163ce484d5497a54a0a8437779362395c6b25e68c6590ede"}, + {file = "zope.interface-6.4.post2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:136cacdde1a2c5e5bc3d0b2a1beed733f97e2dad8c2ad3c2e17116f6590a3827"}, + {file = "zope.interface-6.4.post2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47937cf2e7ed4e0e37f7851c76edeb8543ec9b0eae149b36ecd26176ff1ca874"}, + {file = "zope.interface-6.4.post2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f0a6be264afb094975b5ef55c911379d6989caa87c4e558814ec4f5125cfa2e"}, + {file = "zope.interface-6.4.post2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47654177e675bafdf4e4738ce58cdc5c6d6ee2157ac0a78a3fa460942b9d64a8"}, + {file = "zope.interface-6.4.post2-cp311-cp311-win_amd64.whl", hash = "sha256:e2fb8e8158306567a3a9a41670c1ff99d0567d7fc96fa93b7abf8b519a46b250"}, + {file = "zope.interface-6.4.post2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b912750b13d76af8aac45ddf4679535def304b2a48a07989ec736508d0bbfbde"}, + {file = "zope.interface-6.4.post2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ac46298e0143d91e4644a27a769d1388d5d89e82ee0cf37bf2b0b001b9712a4"}, + {file = "zope.interface-6.4.post2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86a94af4a88110ed4bb8961f5ac72edf782958e665d5bfceaab6bf388420a78b"}, + {file = "zope.interface-6.4.post2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73f9752cf3596771c7726f7eea5b9e634ad47c6d863043589a1c3bb31325c7eb"}, + {file = "zope.interface-6.4.post2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b5c3e9744dcdc9e84c24ed6646d5cf0cf66551347b310b3ffd70f056535854"}, + {file = "zope.interface-6.4.post2-cp312-cp312-win_amd64.whl", hash = "sha256:551db2fe892fcbefb38f6f81ffa62de11090c8119fd4e66a60f3adff70751ec7"}, + {file = "zope.interface-6.4.post2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96ac6b3169940a8cd57b4f2b8edcad8f5213b60efcd197d59fbe52f0accd66e"}, + {file = "zope.interface-6.4.post2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cebff2fe5dc82cb22122e4e1225e00a4a506b1a16fafa911142ee124febf2c9e"}, + {file = "zope.interface-6.4.post2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33ee982237cffaf946db365c3a6ebaa37855d8e3ca5800f6f48890209c1cfefc"}, + {file = "zope.interface-6.4.post2-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:fbf649bc77510ef2521cf797700b96167bb77838c40780da7ea3edd8b78044d1"}, + {file = "zope.interface-6.4.post2-cp37-cp37m-win_amd64.whl", hash = "sha256:4c0b208a5d6c81434bdfa0f06d9b667e5de15af84d8cae5723c3a33ba6611b82"}, + {file = "zope.interface-6.4.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d3fe667935e9562407c2511570dca14604a654988a13d8725667e95161d92e9b"}, + {file = "zope.interface-6.4.post2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a96e6d4074db29b152222c34d7eec2e2db2f92638d2b2b2c704f9e8db3ae0edc"}, + {file = "zope.interface-6.4.post2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:866a0f583be79f0def667a5d2c60b7b4cc68f0c0a470f227e1122691b443c934"}, + {file = "zope.interface-6.4.post2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fe919027f29b12f7a2562ba0daf3e045cb388f844e022552a5674fcdf5d21f1"}, + {file = "zope.interface-6.4.post2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e0343a6e06d94f6b6ac52fbc75269b41dd3c57066541a6c76517f69fe67cb43"}, + {file = "zope.interface-6.4.post2-cp38-cp38-win_amd64.whl", hash = "sha256:dabb70a6e3d9c22df50e08dc55b14ca2a99da95a2d941954255ac76fd6982bc5"}, + {file = "zope.interface-6.4.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:706efc19f9679a1b425d6fa2b4bc770d976d0984335eaea0869bd32f627591d2"}, + {file = "zope.interface-6.4.post2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d136e5b8821073e1a09dde3eb076ea9988e7010c54ffe4d39701adf0c303438"}, + {file = "zope.interface-6.4.post2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1730c93a38b5a18d24549bc81613223962a19d457cfda9bdc66e542f475a36f4"}, + {file = "zope.interface-6.4.post2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc2676312cc3468a25aac001ec727168994ea3b69b48914944a44c6a0b251e79"}, + {file = "zope.interface-6.4.post2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a62fd6cd518693568e23e02f41816adedfca637f26716837681c90b36af3671"}, + {file = "zope.interface-6.4.post2-cp39-cp39-win_amd64.whl", hash = "sha256:d3f7e001328bd6466b3414215f66dde3c7c13d8025a9c160a75d7b2687090d15"}, + {file = "zope.interface-6.4.post2.tar.gz", hash = "sha256:1c207e6f6dfd5749a26f5a5fd966602d6b824ec00d2df84a7e9a924e8933654e"}, ] [package.dependencies] @@ -7130,68 +7448,7 @@ docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] -[[package]] -name = "zstandard" -version = "0.22.0" -description = "Zstandard bindings for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zstandard-0.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019"}, - {file = "zstandard-0.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a"}, - {file = "zstandard-0.22.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e"}, - {file = "zstandard-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2"}, - {file = "zstandard-0.22.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202"}, - {file = "zstandard-0.22.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356"}, - {file = "zstandard-0.22.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d"}, - {file = "zstandard-0.22.0-cp310-cp310-win32.whl", hash = "sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e"}, - {file = "zstandard-0.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375"}, - {file = "zstandard-0.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08"}, - {file = "zstandard-0.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26"}, - {file = "zstandard-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09"}, - {file = "zstandard-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775"}, - {file = "zstandard-0.22.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8"}, - {file = "zstandard-0.22.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94"}, - {file = "zstandard-0.22.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88"}, - {file = "zstandard-0.22.0-cp311-cp311-win32.whl", hash = "sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440"}, - {file = "zstandard-0.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd"}, - {file = "zstandard-0.22.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a"}, - {file = "zstandard-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912"}, - {file = "zstandard-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f"}, - {file = "zstandard-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c"}, - {file = "zstandard-0.22.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4"}, - {file = "zstandard-0.22.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc"}, - {file = "zstandard-0.22.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45"}, - {file = "zstandard-0.22.0-cp312-cp312-win32.whl", hash = "sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2"}, - {file = "zstandard-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c"}, - {file = "zstandard-0.22.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df"}, - {file = "zstandard-0.22.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e"}, - {file = "zstandard-0.22.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0"}, - {file = "zstandard-0.22.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69"}, - {file = "zstandard-0.22.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004"}, - {file = "zstandard-0.22.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf"}, - {file = "zstandard-0.22.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d"}, - {file = "zstandard-0.22.0-cp38-cp38-win32.whl", hash = "sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292"}, - {file = "zstandard-0.22.0-cp38-cp38-win_amd64.whl", hash = "sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73"}, - {file = "zstandard-0.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b"}, - {file = "zstandard-0.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93"}, - {file = "zstandard-0.22.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3"}, - {file = "zstandard-0.22.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe"}, - {file = "zstandard-0.22.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb"}, - {file = "zstandard-0.22.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303"}, - {file = "zstandard-0.22.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c"}, - {file = "zstandard-0.22.0-cp39-cp39-win32.whl", hash = "sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0"}, - {file = "zstandard-0.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2"}, - {file = "zstandard-0.22.0.tar.gz", hash = "sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70"}, -] - -[package.dependencies] -cffi = {version = ">=1.11", optional = true, markers = "platform_python_implementation == \"PyPy\" or extra == \"cffi\""} - -[package.extras] -cffi = ["cffi (>=1.11)"] - [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "305f6137d6bcdb88ddaf8e507999b46b03f2906f08f86086c00ce91c9120dc66" +content-hash = "a525ad5ee7a98124a23736c8ba5e0d1c7cf6d037a19aaac78364ae8c0ce0c242" diff --git a/api/pyproject.toml b/api/pyproject.toml index c5b1a160dc8dc8..9213482547a6cf 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -85,105 +85,104 @@ version = "0.6.10" description = "" authors = ["Dify "] readme = "README.md" +package-mode = false [tool.poetry.dependencies] python = "^3.10" -beautifulsoup4 = "^4.12.2" -flask = "^3.0.1" -flask-sqlalchemy = "^3.0.5" -sqlalchemy = "^2.0.29" -flask-compress = "^1.14" -flask-login = "^0.6.3" -flask-migrate = "^4.0.5" -flask-restful = "^0.3.10" -flask-cors = "^4.0.0" -gunicorn = "^22.0.0" -gevent = "^23.9.1" -openai = "^1.29.0" -tiktoken = "^0.7.0" -psycopg2-binary = "^2.9.6" +beautifulsoup4 = "4.12.2" +flask = "~3.0.1" +flask-sqlalchemy = "~3.0.5" +sqlalchemy = "~2.0.29" +flask-compress = "~1.14" +flask-login = "~0.6.3" +flask-migrate = "~4.0.5" +flask-restful = "~0.3.10" +flask-cors = "~4.0.0" +gunicorn = "~22.0.0" +gevent = "~23.9.1" +openai = "~1.29.0" +tiktoken = "~0.7.0" +psycopg2-binary = "~2.9.6" pycryptodome = "3.19.1" python-dotenv = "1.0.0" authlib = "1.2.0" -boto3 = "^1.28.17" -tenacity = "^8.2.2" -cachetools = "^5.3.0" -weaviate-client = "^3.21.0" -mailchimp-transactional = "^1.0.50" +boto3 = "1.28.17" +tenacity = "8.2.2" +cachetools = "~5.3.0" +weaviate-client = "~3.21.0" +mailchimp-transactional = "~1.0.50" scikit-learn = "1.2.2" -sentry-sdk = {version = "^1.39.2", extras = ["flask"]} +sentry-sdk = {version = "~1.39.2", extras = ["flask"]} sympy = "1.12" jieba = "0.42.1" -celery = "^5.3.6" -redis = {version = "^5.0.3", extras = ["hiredis"]} -openpyxl = "3.1.2" -chardet = "^5.1.0" -python-docx = "^1.1.0" -pypdfium2 = "^4.17.0" -resend = "^0.7.0" -pyjwt = "^2.8.0" -anthropic = "^0.23.1" +celery = "~5.3.6" +redis = {version = "~5.0.3", extras = ["hiredis"]} +chardet = "~5.1.0" +python-docx = "~1.1.0" +pypdfium2 = "~4.17.0" +resend = "~0.7.0" +pyjwt = "~2.8.0" +anthropic = "~0.23.1" newspaper3k = "0.2.8" wikipedia = "1.4.0" readabilipy = "0.2.0" google-ai-generativelanguage = "0.6.1" -google-api-core = "^2.18.0" -google-api-python-client = "^2.90.0" -google-auth = "^2.29.0" +google-api-core = "2.18.0" +google-api-python-client = "2.90.0" +google-auth = "2.29.0" google-auth-httplib2 = "0.2.0" google-generativeai = "0.5.0" -google-search-results = "2.4.2" googleapis-common-protos = "1.63.0" google-cloud-storage = "2.16.0" -replicate = "^0.22.0" -websocket-client = "^1.7.0" -dashscope = {version = "^1.17.0", extras = ["tokenizer"]} -huggingface-hub = "^0.16.4" -transformers = "^4.35.0" -tokenizers = "^0.15.0" -pandas = "1.5.3" +replicate = "~0.22.0" +websocket-client = "~1.7.0" +dashscope = {version = "~1.17.0", extras = ["tokenizer"]} +huggingface-hub = "~0.16.4" +transformers = "~4.35.0" +tokenizers = "~0.15.0" +pandas = { version = "~2.2.2", extras = ["performance", "excel"] } xinference-client = "0.9.4" -safetensors = "^0.4.3" +safetensors = "~0.4.3" zhipuai = "1.0.7" -werkzeug = "^3.0.1" +werkzeug = "~3.0.1" pymilvus = "2.3.1" qdrant-client = "1.7.3" -cohere = "^5.2.4" -pyyaml = "^6.0.1" -numpy = "^1.26.4" -unstructured = {version = "^0.10.27", extras = ["docx", "epub", "md", "msg", "ppt", "pptx"]} -bs4 = "^0.0.1" -markdown = "^3.5.1" -httpx = {version = "^0.24.1", extras = ["socks"]} -matplotlib = "^3.8.2" -yfinance = "^0.2.35" -pydub = "^0.25.1" -gmpy2 = "^2.1.5" -numexpr = "^2.9.0" -duckduckgo-search = "5.2.2" +cohere = "~5.2.4" +pyyaml = "~6.0.1" +numpy = "~1.26.4" +unstructured = {version = "~0.10.27", extras = ["docx", "epub", "md", "msg", "ppt", "pptx"]} +bs4 = "~0.0.1" +markdown = "~3.5.1" +httpx = {version = "~0.24.1", extras = ["socks"]} +matplotlib = "~3.8.2" +yfinance = "~0.2.40" +pydub = "~0.25.1" +gmpy2 = "~2.1.5" +numexpr = "~2.9.0" +duckduckgo-search = "~6.1.5" arxiv = "2.1.0" -yarl = "^1.9.4" -twilio = "^9.0.4" -qrcode = "^7.4.2" -azure-storage-blob = "12.9.0" +yarl = "~1.9.4" +twilio = "~9.0.4" +qrcode = "~7.4.2" +azure-storage-blob = "12.13.0" azure-identity = "1.15.0" lxml = "5.1.0" -xlrd = "^2.0.1" -pydantic = "^1.10.0" +xlrd = "~2.0.1" +pydantic = "~1.10.0" pgvecto-rs = "0.1.4" firecrawl-py = "0.0.5" -oss2 = "2.15.0" +oss2 = "2.18.5" pgvector = "0.2.5" -pymysql = "^1.1.1" -tidb-vector = "^0.0.9" +pymysql = "1.1.1" +tidb-vector = "0.0.9" google-cloud-aiplatform = "1.49.0" -vanna = {version = "==0.5.5", extras = ["postgres", "mysql", "clickhouse", "duckdb"]} +vanna = {version = "0.5.5", extras = ["postgres", "mysql", "clickhouse", "duckdb"]} kaleido = "0.2.1" [tool.poetry.group.dev.dependencies] -coverage = "^7.2.4" -pytest = "^8.1.1" -pytest-benchmark = "^4.0.0" -pytest-env = "^1.1.3" -pytest-mock = "^3.14.0" +coverage = "~7.2.4" +pytest = "~8.1.1" +pytest-benchmark = "~4.0.0" +pytest-env = "~1.1.3" +pytest-mock = "~3.14.0" From 2050a8b8f05963468b2a49037fc3160e361f5918 Mon Sep 17 00:00:00 2001 From: orangeclk Date: Wed, 12 Jun 2024 08:22:17 +0800 Subject: [PATCH 17/70] feat: add glm4 new models and zhipu embedding-2 (#5089) --- .../zhipuai/llm/glm-4-0520.yaml | 39 +++++++++++++++++++ .../zhipuai/llm/glm-4-air.yaml | 39 +++++++++++++++++++ .../zhipuai/llm/glm-4-airx.yaml | 39 +++++++++++++++++++ .../zhipuai/llm/glm-4-flash.yaml | 39 +++++++++++++++++++ .../zhipuai/text_embedding/embedding-2.yaml | 4 ++ 5 files changed, 160 insertions(+) create mode 100644 api/core/model_runtime/model_providers/zhipuai/llm/glm-4-0520.yaml create mode 100644 api/core/model_runtime/model_providers/zhipuai/llm/glm-4-air.yaml create mode 100644 api/core/model_runtime/model_providers/zhipuai/llm/glm-4-airx.yaml create mode 100644 api/core/model_runtime/model_providers/zhipuai/llm/glm-4-flash.yaml create mode 100644 api/core/model_runtime/model_providers/zhipuai/text_embedding/embedding-2.yaml diff --git a/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-0520.yaml b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-0520.yaml new file mode 100644 index 00000000000000..3968e8f26822ab --- /dev/null +++ b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-0520.yaml @@ -0,0 +1,39 @@ +model: glm-4-0520 +label: + en_US: glm-4-0520 +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat +parameter_rules: + - name: temperature + use_template: temperature + default: 0.95 + min: 0.0 + max: 1.0 + help: + zh_Hans: 采样温度,控制输出的随机性,必须为正数取值范围是:(0.0,1.0],不能等于 0,默认值为 0.95 值越大,会使输出更随机,更具创造性;值越小,输出会更加稳定或确定建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Sampling temperature, controls the randomness of the output, must be a positive number. The value range is (0.0,1.0], which cannot be equal to 0. The default value is 0.95. The larger the value, the more random and creative the output will be; the smaller the value, The output will be more stable or certain. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: top_p + use_template: top_p + default: 0.7 + help: + zh_Hans: 用温度取样的另一种方法,称为核取样取值范围是:(0.0, 1.0) 开区间,不能等于 0 或 1,默认值为 0.7 模型考虑具有 top_p 概率质量tokens的结果例如:0.1 意味着模型解码器只考虑从前 10% 的概率的候选集中取 tokens 建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Another method of temperature sampling is called kernel sampling. The value range is (0.0, 1.0) open interval, which cannot be equal to 0 or 1. The default value is 0.7. The model considers the results with top_p probability mass tokens. For example 0.1 means The model decoder only considers tokens from the candidate set with the top 10% probability. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: incremental + label: + zh_Hans: 增量返回 + en_US: Incremental + type: boolean + help: + zh_Hans: SSE接口调用时,用于控制每次返回内容方式是增量还是全量,不提供此参数时默认为增量返回,true 为增量返回,false 为全量返回。 + en_US: When the SSE interface is called, it is used to control whether the content is returned incrementally or in full. If this parameter is not provided, the default is incremental return. true means incremental return, false means full return. + required: false + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 8192 diff --git a/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-air.yaml b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-air.yaml new file mode 100644 index 00000000000000..ae2d5e5d533d1a --- /dev/null +++ b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-air.yaml @@ -0,0 +1,39 @@ +model: glm-4-air +label: + en_US: glm-4-air +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat +parameter_rules: + - name: temperature + use_template: temperature + default: 0.95 + min: 0.0 + max: 1.0 + help: + zh_Hans: 采样温度,控制输出的随机性,必须为正数取值范围是:(0.0,1.0],不能等于 0,默认值为 0.95 值越大,会使输出更随机,更具创造性;值越小,输出会更加稳定或确定建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Sampling temperature, controls the randomness of the output, must be a positive number. The value range is (0.0,1.0], which cannot be equal to 0. The default value is 0.95. The larger the value, the more random and creative the output will be; the smaller the value, The output will be more stable or certain. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: top_p + use_template: top_p + default: 0.7 + help: + zh_Hans: 用温度取样的另一种方法,称为核取样取值范围是:(0.0, 1.0) 开区间,不能等于 0 或 1,默认值为 0.7 模型考虑具有 top_p 概率质量tokens的结果例如:0.1 意味着模型解码器只考虑从前 10% 的概率的候选集中取 tokens 建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Another method of temperature sampling is called kernel sampling. The value range is (0.0, 1.0) open interval, which cannot be equal to 0 or 1. The default value is 0.7. The model considers the results with top_p probability mass tokens. For example 0.1 means The model decoder only considers tokens from the candidate set with the top 10% probability. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: incremental + label: + zh_Hans: 增量返回 + en_US: Incremental + type: boolean + help: + zh_Hans: SSE接口调用时,用于控制每次返回内容方式是增量还是全量,不提供此参数时默认为增量返回,true 为增量返回,false 为全量返回。 + en_US: When the SSE interface is called, it is used to control whether the content is returned incrementally or in full. If this parameter is not provided, the default is incremental return. true means incremental return, false means full return. + required: false + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 8192 diff --git a/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-airx.yaml b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-airx.yaml new file mode 100644 index 00000000000000..c0038a1ab223df --- /dev/null +++ b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-airx.yaml @@ -0,0 +1,39 @@ +model: glm-4-airx +label: + en_US: glm-4-airx +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat +parameter_rules: + - name: temperature + use_template: temperature + default: 0.95 + min: 0.0 + max: 1.0 + help: + zh_Hans: 采样温度,控制输出的随机性,必须为正数取值范围是:(0.0,1.0],不能等于 0,默认值为 0.95 值越大,会使输出更随机,更具创造性;值越小,输出会更加稳定或确定建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Sampling temperature, controls the randomness of the output, must be a positive number. The value range is (0.0,1.0], which cannot be equal to 0. The default value is 0.95. The larger the value, the more random and creative the output will be; the smaller the value, The output will be more stable or certain. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: top_p + use_template: top_p + default: 0.7 + help: + zh_Hans: 用温度取样的另一种方法,称为核取样取值范围是:(0.0, 1.0) 开区间,不能等于 0 或 1,默认值为 0.7 模型考虑具有 top_p 概率质量tokens的结果例如:0.1 意味着模型解码器只考虑从前 10% 的概率的候选集中取 tokens 建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Another method of temperature sampling is called kernel sampling. The value range is (0.0, 1.0) open interval, which cannot be equal to 0 or 1. The default value is 0.7. The model considers the results with top_p probability mass tokens. For example 0.1 means The model decoder only considers tokens from the candidate set with the top 10% probability. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: incremental + label: + zh_Hans: 增量返回 + en_US: Incremental + type: boolean + help: + zh_Hans: SSE接口调用时,用于控制每次返回内容方式是增量还是全量,不提供此参数时默认为增量返回,true 为增量返回,false 为全量返回。 + en_US: When the SSE interface is called, it is used to control whether the content is returned incrementally or in full. If this parameter is not provided, the default is incremental return. true means incremental return, false means full return. + required: false + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 8192 diff --git a/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-flash.yaml b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-flash.yaml new file mode 100644 index 00000000000000..650f9faee6ea0d --- /dev/null +++ b/api/core/model_runtime/model_providers/zhipuai/llm/glm-4-flash.yaml @@ -0,0 +1,39 @@ +model: glm-4-flash +label: + en_US: glm-4-flash +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat +parameter_rules: + - name: temperature + use_template: temperature + default: 0.95 + min: 0.0 + max: 1.0 + help: + zh_Hans: 采样温度,控制输出的随机性,必须为正数取值范围是:(0.0,1.0],不能等于 0,默认值为 0.95 值越大,会使输出更随机,更具创造性;值越小,输出会更加稳定或确定建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Sampling temperature, controls the randomness of the output, must be a positive number. The value range is (0.0,1.0], which cannot be equal to 0. The default value is 0.95. The larger the value, the more random and creative the output will be; the smaller the value, The output will be more stable or certain. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: top_p + use_template: top_p + default: 0.7 + help: + zh_Hans: 用温度取样的另一种方法,称为核取样取值范围是:(0.0, 1.0) 开区间,不能等于 0 或 1,默认值为 0.7 模型考虑具有 top_p 概率质量tokens的结果例如:0.1 意味着模型解码器只考虑从前 10% 的概率的候选集中取 tokens 建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数。 + en_US: Another method of temperature sampling is called kernel sampling. The value range is (0.0, 1.0) open interval, which cannot be equal to 0 or 1. The default value is 0.7. The model considers the results with top_p probability mass tokens. For example 0.1 means The model decoder only considers tokens from the candidate set with the top 10% probability. It is recommended that you adjust the top_p or temperature parameters according to the application scenario, but do not adjust both parameters at the same time. + - name: incremental + label: + zh_Hans: 增量返回 + en_US: Incremental + type: boolean + help: + zh_Hans: SSE接口调用时,用于控制每次返回内容方式是增量还是全量,不提供此参数时默认为增量返回,true 为增量返回,false 为全量返回。 + en_US: When the SSE interface is called, it is used to control whether the content is returned incrementally or in full. If this parameter is not provided, the default is incremental return. true means incremental return, false means full return. + required: false + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 8192 diff --git a/api/core/model_runtime/model_providers/zhipuai/text_embedding/embedding-2.yaml b/api/core/model_runtime/model_providers/zhipuai/text_embedding/embedding-2.yaml new file mode 100644 index 00000000000000..faf0f818c4a782 --- /dev/null +++ b/api/core/model_runtime/model_providers/zhipuai/text_embedding/embedding-2.yaml @@ -0,0 +1,4 @@ +model: embedding-2 +model_type: text-embedding +model_properties: + context_size: 512 From 5f104bab57c4ff4a5ea47c4218e4cd255d265639 Mon Sep 17 00:00:00 2001 From: KVOJJJin Date: Wed, 12 Jun 2024 08:23:39 +0800 Subject: [PATCH 18/70] Fix: infinite loading not work when message is too short (#5075) --- web/app/components/app/log/list.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/components/app/log/list.tsx b/web/app/components/app/log/list.tsx index c2ce0b56330802..a3296da4d01948 100644 --- a/web/app/components/app/log/list.tsx +++ b/web/app/components/app/log/list.tsx @@ -185,7 +185,7 @@ function DetailPanel Date: Wed, 12 Jun 2024 07:24:58 +0700 Subject: [PATCH 19/70] fix: autoHeightTextarea dimensions in Firefox (#4891) --- web/app/components/base/auto-height-textarea/common.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/components/base/auto-height-textarea/common.tsx b/web/app/components/base/auto-height-textarea/common.tsx index 0c500974d02af1..6ec4612c2ed8e7 100644 --- a/web/app/components/base/auto-height-textarea/common.tsx +++ b/web/app/components/base/auto-height-textarea/common.tsx @@ -38,7 +38,7 @@ const AutoHeightTextarea = forwardRef Date: Wed, 12 Jun 2024 09:30:01 +0900 Subject: [PATCH 20/70] fix: Google HL Parameter for SearchApi (#5071) --- api/core/tools/provider/builtin/searchapi/tools/google.yaml | 2 +- .../tools/provider/builtin/searchapi/tools/google_jobs.yaml | 2 +- .../tools/provider/builtin/searchapi/tools/google_news.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/core/tools/provider/builtin/searchapi/tools/google.yaml b/api/core/tools/provider/builtin/searchapi/tools/google.yaml index 566de84b138eda..eab753e5e895c9 100644 --- a/api/core/tools/provider/builtin/searchapi/tools/google.yaml +++ b/api/core/tools/provider/builtin/searchapi/tools/google.yaml @@ -353,7 +353,7 @@ parameters: label: en_US: Italian zh_Hans: 意大利语 - - value: jp + - value: ja label: en_US: Japanese zh_Hans: 日语 diff --git a/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml b/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml index 486b193efa396e..73026d7c41bd60 100644 --- a/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml +++ b/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml @@ -353,7 +353,7 @@ parameters: label: en_US: Italian zh_Hans: 意大利语 - - value: jp + - value: ja label: en_US: Japanese zh_Hans: 日语 diff --git a/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml b/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml index b0212952e60138..719cf6119becb8 100644 --- a/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml +++ b/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml @@ -353,7 +353,7 @@ parameters: label: en_US: Italian zh_Hans: 意大利语 - - value: jp + - value: ja label: en_US: Japanese zh_Hans: 日语 From 3b36ba797f6e2c409526cb39a82493a9f07ef48f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E6=B3=95=E6=93=8D=E4=BD=9C?= Date: Wed, 12 Jun 2024 10:04:10 +0800 Subject: [PATCH 21/70] feat: add duckduckgo img search, translate, ai chat (#5074) --- .../provider/builtin/duckduckgo/duckduckgo.py | 2 +- .../builtin/duckduckgo/tools/ddgo_ai.py | 20 ++ .../builtin/duckduckgo/tools/ddgo_ai.yaml | 41 +++++ .../builtin/duckduckgo/tools/ddgo_img.py | 25 +++ .../builtin/duckduckgo/tools/ddgo_img.yaml | 88 +++++++++ .../builtin/duckduckgo/tools/ddgo_search.py | 29 +++ .../builtin/duckduckgo/tools/ddgo_search.yaml | 65 +++++++ .../duckduckgo/tools/ddgo_translate.py | 20 ++ .../duckduckgo/tools/ddgo_translate.yaml | 51 ++++++ .../duckduckgo/tools/duckduckgo_search.py | 171 ------------------ .../duckduckgo/tools/duckduckgo_search.yaml | 23 --- 11 files changed, 340 insertions(+), 195 deletions(-) create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.py create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.yaml create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.py create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.yaml create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.py create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.yaml create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.py create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.yaml delete mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py delete mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.yaml diff --git a/api/core/tools/provider/builtin/duckduckgo/duckduckgo.py b/api/core/tools/provider/builtin/duckduckgo/duckduckgo.py index 6df8678d307123..2292e89fa6ed13 100644 --- a/api/core/tools/provider/builtin/duckduckgo/duckduckgo.py +++ b/api/core/tools/provider/builtin/duckduckgo/duckduckgo.py @@ -1,5 +1,5 @@ from core.tools.errors import ToolProviderCredentialValidationError -from core.tools.provider.builtin.duckduckgo.tools.duckduckgo_search import DuckDuckGoSearchTool +from core.tools.provider.builtin.duckduckgo.tools.ddgo_search import DuckDuckGoSearchTool from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.py b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.py new file mode 100644 index 00000000000000..878b0d86453a2b --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.py @@ -0,0 +1,20 @@ +from typing import Any + +from duckduckgo_search import DDGS + +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.tool.builtin_tool import BuiltinTool + + +class DuckDuckGoAITool(BuiltinTool): + """ + Tool for performing a search using DuckDuckGo search engine. + """ + + def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage: + query_dict = { + "keywords": tool_parameters.get('query'), + "model": tool_parameters.get('model'), + } + response = DDGS().chat(**query_dict) + return self.create_text_message(text=response) diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.yaml b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.yaml new file mode 100644 index 00000000000000..1ca16e660f71ec --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_ai.yaml @@ -0,0 +1,41 @@ +identity: + name: ddgo_ai + author: hjlarry + label: + en_US: DuckDuckGo AI Chat + zh_Hans: DuckDuckGo AI聊天 +description: + human: + en_US: Use the anonymous private chat provided by DuckDuckGo. + zh_Hans: 使用DuckDuckGo提供的匿名私密聊天。 + llm: Use the anonymous private chat provided by DuckDuckGo. +parameters: + - name: query + type: string + required: true + label: + en_US: Chat Content + zh_Hans: 聊天内容 + human_description: + en_US: The chat content. + zh_Hans: 要聊天的内容。 + llm_description: Key words for chat + form: llm + - name: model + type: select + required: true + options: + - value: gpt-3.5 + label: + en_US: GPT-3.5 + - value: claude-3-haiku + label: + en_US: Claude 3 + default: gpt-3.5 + label: + en_US: Choose Model + zh_Hans: 选择模型 + human_description: + en_US: used to select the model for AI chat. + zh_Hans: 用于选择使用AI聊天的模型 + form: form diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.py b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.py new file mode 100644 index 00000000000000..660611e8a66179 --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.py @@ -0,0 +1,25 @@ +from typing import Any + +from duckduckgo_search import DDGS + +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.tool.builtin_tool import BuiltinTool + + +class DuckDuckGoImageSearchTool(BuiltinTool): + """ + Tool for performing an image search using DuckDuckGo search engine. + """ + + def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> list[ToolInvokeMessage]: + query_dict = { + "keywords": tool_parameters.get('query'), + "timelimit": tool_parameters.get('timelimit'), + "size": tool_parameters.get('size'), + "max_results": tool_parameters.get('max_results'), + } + response = DDGS().images(**query_dict) + results = [] + for res in response: + results.append(self.create_image_message(image=res.get("image"))) + return results diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.yaml b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.yaml new file mode 100644 index 00000000000000..168cface224e40 --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_img.yaml @@ -0,0 +1,88 @@ +identity: + name: ddgo_img + author: hjlarry + label: + en_US: DuckDuckGo Image Search + zh_Hans: DuckDuckGo 图片搜索 +description: + human: + en_US: Perform image searches on DuckDuckGo and get results. + zh_Hans: 在 DuckDuckGo 上进行图片搜索并获取结果。 + llm: Perform image searches on DuckDuckGo and get results. +parameters: + - name: query + type: string + required: true + label: + en_US: Query string + zh_Hans: 查询语句 + human_description: + en_US: The search query. + zh_Hans: 搜索查询语句。 + llm_description: Key words for searching + form: llm + - name: max_results + type: number + required: true + default: 3 + label: + en_US: Max results + zh_Hans: 最大结果数量 + human_description: + en_US: The max results. + zh_Hans: 最大结果数量 + form: form + - name: timelimit + type: select + required: false + options: + - value: Day + label: + en_US: current day + zh_Hans: 当天 + - value: Week + label: + en_US: current week + zh_Hans: 本周 + - value: Month + label: + en_US: current month + zh_Hans: 当月 + - value: Year + label: + en_US: current year + zh_Hans: 今年 + label: + en_US: Result time limit + zh_Hans: 结果时间限制 + human_description: + en_US: Use when querying results within a specific time range only. + zh_Hans: 只查询一定时间范围内的结果时使用 + form: form + - name: size + type: select + required: false + options: + - value: Small + label: + en_US: small + zh_Hans: 小 + - value: Medium + label: + en_US: medium + zh_Hans: 中 + - value: Large + label: + en_US: large + zh_Hans: 大 + - value: Wallpaper + label: + en_US: xl + zh_Hans: 超大 + label: + en_US: image size + zh_Hans: 图片大小 + human_description: + en_US: The size of the image to be searched. + zh_Hans: 要搜索的图片的大小 + form: form diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.py b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.py new file mode 100644 index 00000000000000..bf963f3442fd6c --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.py @@ -0,0 +1,29 @@ +from typing import Any + +from duckduckgo_search import DDGS + +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.tool.builtin_tool import BuiltinTool + + +class DuckDuckGoSearchTool(BuiltinTool): + """ + Tool for performing a search using DuckDuckGo search engine. + """ + + def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage: + query = tool_parameters.get('query', '') + result_type = tool_parameters.get('result_type', 'text') + max_results = tool_parameters.get('max_results', 10) + require_summary = tool_parameters.get('require_summary', False) + response = DDGS().text(query, max_results=max_results) + + if result_type == 'link': + results = [f"[{res.get('title')}]({res.get('href')})" for res in response] + results = "\n".join(results) + return self.create_link_message(link=results) + results = [res.get("body") for res in response] + results = "\n".join(results) + if require_summary: + results = self.summary(user_id=user_id, content=results) + return self.create_text_message(text=results) diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.yaml b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.yaml new file mode 100644 index 00000000000000..a8248d595b362c --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_search.yaml @@ -0,0 +1,65 @@ +identity: + name: ddgo_search + author: Yash Parmar + label: + en_US: DuckDuckGo Search + zh_Hans: DuckDuckGo 搜索 +description: + human: + en_US: Perform searches on DuckDuckGo and get results. + zh_Hans: 在 DuckDuckGo 上进行搜索并获取结果。 + llm: Perform searches on DuckDuckGo and get results. +parameters: + - name: query + type: string + required: true + label: + en_US: Query string + zh_Hans: 查询语句 + human_description: + en_US: The search query. + zh_Hans: 搜索查询语句。 + llm_description: Key words for searching + form: llm + - name: max_results + type: number + required: true + default: 5 + label: + en_US: Max results + zh_Hans: 最大结果数量 + human_description: + en_US: The max results. + zh_Hans: 最大结果数量 + form: form + - name: result_type + type: select + required: true + options: + - value: text + label: + en_US: text + zh_Hans: 文本 + - value: link + label: + en_US: link + zh_Hans: 链接 + default: text + label: + en_US: Result type + zh_Hans: 结果类型 + human_description: + en_US: used for selecting the result type, text or link + zh_Hans: 用于选择结果类型,使用文本还是链接进行展示 + form: form + - name: require_summary + type: boolean + required: true + default: false + label: + en_US: Require Summary + zh_Hans: 是否总结 + human_description: + en_US: Whether to pass the search results to llm for summarization. + zh_Hans: 是否需要将搜索结果传给大模型总结 + form: form diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.py b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.py new file mode 100644 index 00000000000000..9822b37cf0231d --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.py @@ -0,0 +1,20 @@ +from typing import Any + +from duckduckgo_search import DDGS + +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.tool.builtin_tool import BuiltinTool + + +class DuckDuckGoTranslateTool(BuiltinTool): + """ + Tool for performing a search using DuckDuckGo search engine. + """ + + def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage: + query_dict = { + "keywords": tool_parameters.get('query'), + "to": tool_parameters.get('translate_to'), + } + response = DDGS().translate(**query_dict)[0].get('translated', 'Unable to translate!') + return self.create_text_message(text=response) diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.yaml b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.yaml new file mode 100644 index 00000000000000..78b5d0b02275b2 --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/ddgo_translate.yaml @@ -0,0 +1,51 @@ +identity: + name: ddgo_translate + author: hjlarry + label: + en_US: DuckDuckGo Translate + zh_Hans: DuckDuckGo 翻译 +description: + human: + en_US: Use DuckDuckGo's translation feature. + zh_Hans: 使用DuckDuckGo的翻译功能。 + llm: Use DuckDuckGo's translation feature. +parameters: + - name: query + type: string + required: true + label: + en_US: Translate Content + zh_Hans: 翻译内容 + human_description: + en_US: The translate content. + zh_Hans: 要翻译的内容。 + llm_description: Key words for translate + form: llm + - name: translate_to + type: select + required: true + options: + - value: en + label: + en_US: English + zh_Hans: 英语 + - value: zh-Hans + label: + en_US: Simplified Chinese + zh_Hans: 简体中文 + - value: zh-Hant + label: + en_US: Traditional Chinese + zh_Hans: 繁体中文 + - value: ja + label: + en_US: Japanese + zh_Hans: 日语 + default: en + label: + en_US: Choose Language + zh_Hans: 选择语言 + human_description: + en_US: select the language to translate. + zh_Hans: 选择要翻译的语言 + form: form diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py b/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py deleted file mode 100644 index 80722a4d6e882e..00000000000000 --- a/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py +++ /dev/null @@ -1,171 +0,0 @@ -from typing import Any, Optional - -from pydantic import BaseModel, Field - -from core.tools.entities.tool_entities import ToolInvokeMessage -from core.tools.tool.builtin_tool import BuiltinTool - - -class DuckDuckGoSearchAPIWrapper(BaseModel): - """Wrapper for DuckDuckGo Search API. - - Free and does not require any setup. - """ - - region: Optional[str] = "wt-wt" - safesearch: str = "moderate" - time: Optional[str] = "y" - max_results: int = 5 - - def get_snippets(self, query: str) -> list[str]: - """Run query through DuckDuckGo and return concatenated results.""" - from duckduckgo_search import DDGS - - with DDGS() as ddgs: - results = ddgs.text( - query, - region=self.region, - safesearch=self.safesearch, - timelimit=self.time, - ) - if results is None: - return ["No good DuckDuckGo Search Result was found"] - snippets = [] - for i, res in enumerate(results, 1): - if res is not None: - snippets.append(res["body"]) - if len(snippets) == self.max_results: - break - return snippets - - def run(self, query: str) -> str: - snippets = self.get_snippets(query) - return " ".join(snippets) - - def results( - self, query: str, num_results: int, backend: str = "api" - ) -> list[dict[str, str]]: - """Run query through DuckDuckGo and return metadata. - - Args: - query: The query to search for. - num_results: The number of results to return. - - Returns: - A list of dictionaries with the following keys: - snippet - The description of the result. - title - The title of the result. - link - The link to the result. - """ - from duckduckgo_search import DDGS - - with DDGS() as ddgs: - results = ddgs.text( - query, - region=self.region, - safesearch=self.safesearch, - timelimit=self.time, - backend=backend, - ) - if results is None: - return [{"Result": "No good DuckDuckGo Search Result was found"}] - - def to_metadata(result: dict) -> dict[str, str]: - if backend == "news": - return { - "date": result["date"], - "title": result["title"], - "snippet": result["body"], - "source": result["source"], - "link": result["url"], - } - return { - "snippet": result["body"], - "title": result["title"], - "link": result["href"], - } - - formatted_results = [] - for i, res in enumerate(results, 1): - if res is not None: - formatted_results.append(to_metadata(res)) - if len(formatted_results) == num_results: - break - return formatted_results - - -class DuckDuckGoSearchRun(BaseModel): - """Tool that queries the DuckDuckGo search API.""" - - name = "duckduckgo_search" - description = ( - "A wrapper around DuckDuckGo Search. " - "Useful for when you need to answer questions about current events. " - "Input should be a search query." - ) - api_wrapper: DuckDuckGoSearchAPIWrapper = Field( - default_factory=DuckDuckGoSearchAPIWrapper - ) - - def _run( - self, - query: str, - ) -> str: - """Use the tool.""" - return self.api_wrapper.run(query) - - -class DuckDuckGoSearchResults(BaseModel): - """Tool that queries the DuckDuckGo search API and gets back json.""" - - name = "DuckDuckGo Results JSON" - description = ( - "A wrapper around Duck Duck Go Search. " - "Useful for when you need to answer questions about current events. " - "Input should be a search query. Output is a JSON array of the query results" - ) - num_results: int = 4 - api_wrapper: DuckDuckGoSearchAPIWrapper = Field( - default_factory=DuckDuckGoSearchAPIWrapper - ) - backend: str = "api" - - def _run( - self, - query: str, - ) -> str: - """Use the tool.""" - res = self.api_wrapper.results(query, self.num_results, backend=self.backend) - res_strs = [", ".join([f"{k}: {v}" for k, v in d.items()]) for d in res] - return ", ".join([f"[{rs}]" for rs in res_strs]) - -class DuckDuckGoInput(BaseModel): - query: str = Field(..., description="Search query.") - -class DuckDuckGoSearchTool(BuiltinTool): - """ - Tool for performing a search using DuckDuckGo search engine. - """ - - def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]: - """ - Invoke the DuckDuckGo search tool. - - Args: - user_id (str): The ID of the user invoking the tool. - tool_parameters (dict[str, Any]): The parameters for the tool invocation. - - Returns: - ToolInvokeMessage | list[ToolInvokeMessage]: The result of the tool invocation. - """ - query = tool_parameters.get('query', '') - - if not query: - return self.create_text_message('Please input query') - - tool = DuckDuckGoSearchRun(args_schema=DuckDuckGoInput) - - result = tool._run(query) - - return self.create_text_message(self.summary(user_id=user_id, content=result)) - \ No newline at end of file diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.yaml b/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.yaml deleted file mode 100644 index 93c857010cd72c..00000000000000 --- a/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.yaml +++ /dev/null @@ -1,23 +0,0 @@ -identity: - name: duckduckgo_search - author: Yash Parmar - label: - en_US: DuckDuckGo Search - zh_Hans: DuckDuckGo 搜索 -description: - human: - en_US: Perform searches on DuckDuckGo and get results. - zh_Hans: 在 DuckDuckGo 上进行搜索并获取结果。 - llm: Perform searches on DuckDuckGo and get results. -parameters: - - name: query - type: string - required: true - label: - en_US: Query string - zh_Hans: 查询语句 - human_description: - en_US: The search query. - zh_Hans: 搜索查询语句。 - llm_description: Key words for searching - form: llm From 9f7b38c068bc6bb50d3ba87734df0c6fc40d17b9 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 12 Jun 2024 11:29:38 +0800 Subject: [PATCH 22/70] fix: #4970 (#5093) --- .../components/workflow/nodes/llm/components/config-prompt.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/components/workflow/nodes/llm/components/config-prompt.tsx b/web/app/components/workflow/nodes/llm/components/config-prompt.tsx index 3b4c452de34006..297862136a087c 100644 --- a/web/app/components/workflow/nodes/llm/components/config-prompt.tsx +++ b/web/app/components/workflow/nodes/llm/components/config-prompt.tsx @@ -210,7 +210,7 @@ const ConfigPrompt: FC = ({ {t(`${i18nPrefix}.prompt`)}} - value={(payload as PromptItem).edition_type === EditionType.basic ? (payload as PromptItem).text : ((payload as PromptItem).jinja2_text || '')} + value={((payload as PromptItem).edition_type === EditionType.basic || !(payload as PromptItem).edition_type) ? (payload as PromptItem).text : ((payload as PromptItem).jinja2_text || '')} onChange={handleCompletionPromptChange} readOnly={readOnly} isChatModel={isChatModel} From b7c72f7a972f62303226aa1f0f88da207fedc4b1 Mon Sep 17 00:00:00 2001 From: "Charlie.Wei" Date: Wed, 12 Jun 2024 12:59:03 +0800 Subject: [PATCH 23/70] dalle3 add style consistency parameter (#5067) Co-authored-by: luowei Co-authored-by: crazywoola <427733928@qq.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> --- .../builtin/azuredalle/tools/dalle3.py | 27 +++++++++++++------ .../builtin/azuredalle/tools/dalle3.yaml | 13 +++++++++ .../provider/builtin/dalle/tools/dalle3.py | 26 +++++++++++++----- .../provider/builtin/dalle/tools/dalle3.yaml | 13 +++++++++ 4 files changed, 64 insertions(+), 15 deletions(-) diff --git a/api/core/tools/provider/builtin/azuredalle/tools/dalle3.py b/api/core/tools/provider/builtin/azuredalle/tools/dalle3.py index 3c4e6ee9a50d91..45cb9b1fe520d7 100644 --- a/api/core/tools/provider/builtin/azuredalle/tools/dalle3.py +++ b/api/core/tools/provider/builtin/azuredalle/tools/dalle3.py @@ -8,10 +8,10 @@ class DallE3Tool(BuiltinTool): - def _invoke(self, - user_id: str, - tool_parameters: dict[str, Any], - ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: + def _invoke(self, + user_id: str, + tool_parameters: dict[str, Any], + ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: """ invoke tools """ @@ -43,14 +43,18 @@ def _invoke(self, style = tool_parameters.get('style', 'vivid') if style not in ['natural', 'vivid']: return self.create_text_message('Invalid style') + # set extra body + seed_id = tool_parameters.get('seed_id', self._generate_random_id(8)) + extra_body = {'seed': seed_id} # call openapi dalle3 - model=self.runtime.credentials['azure_openai_api_model_name'] + model = self.runtime.credentials['azure_openai_api_model_name'] response = client.images.generate( prompt=prompt, model=model, size=size, n=n, + extra_body=extra_body, style=style, quality=quality, response_format='b64_json' @@ -59,8 +63,15 @@ def _invoke(self, result = [] for image in response.data: - result.append(self.create_blob_message(blob=b64decode(image.b64_json), - meta={ 'mime_type': 'image/png' }, - save_as=self.VARIABLE_KEY.IMAGE.value)) + result.append(self.create_blob_message(blob=b64decode(image.b64_json), + meta={'mime_type': 'image/png'}, + save_as=self.VARIABLE_KEY.IMAGE.value)) + result.append(self.create_text_message(f'\nGenerate image source to Seed ID: {seed_id}')) return result + + @staticmethod + def _generate_random_id(length=8): + characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + random_id = ''.join(random.choices(characters, k=length)) + return random_id diff --git a/api/core/tools/provider/builtin/azuredalle/tools/dalle3.yaml b/api/core/tools/provider/builtin/azuredalle/tools/dalle3.yaml index 5553984e1e137b..63a8c99d97f90c 100644 --- a/api/core/tools/provider/builtin/azuredalle/tools/dalle3.yaml +++ b/api/core/tools/provider/builtin/azuredalle/tools/dalle3.yaml @@ -29,6 +29,19 @@ parameters: pt_BR: Imagem prompt, você pode verificar a documentação oficial do DallE 3 llm_description: Image prompt of DallE 3, you should describe the image you want to generate as a list of words as possible as detailed form: llm + - name: seed_id + type: string + required: false + label: + en_US: Seed ID + zh_Hans: 种子ID + pt_BR: ID da semente + human_description: + en_US: Image generation seed ID to ensure consistency of series generated images + zh_Hans: 图像生成种子ID,确保系列生成图像的一致性 + pt_BR: ID de semente de geração de imagem para garantir a consistência das imagens geradas em série + llm_description: If the user requests image consistency, extract the seed ID from the user's question or context.The seed id consists of an 8-bit string containing uppercase and lowercase letters and numbers + form: llm - name: size type: select required: true diff --git a/api/core/tools/provider/builtin/dalle/tools/dalle3.py b/api/core/tools/provider/builtin/dalle/tools/dalle3.py index 87d18f68e016a9..45a289ddf8c80f 100644 --- a/api/core/tools/provider/builtin/dalle/tools/dalle3.py +++ b/api/core/tools/provider/builtin/dalle/tools/dalle3.py @@ -1,3 +1,4 @@ +import random from base64 import b64decode from typing import Any, Union @@ -9,10 +10,10 @@ class DallE3Tool(BuiltinTool): - def _invoke(self, - user_id: str, - tool_parameters: dict[str, Any], - ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: + def _invoke(self, + user_id: str, + tool_parameters: dict[str, Any], + ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: """ invoke tools """ @@ -53,6 +54,9 @@ def _invoke(self, style = tool_parameters.get('style', 'vivid') if style not in ['natural', 'vivid']: return self.create_text_message('Invalid style') + # set extra body + seed_id = tool_parameters.get('seed_id', self._generate_random_id(8)) + extra_body = {'seed': seed_id} # call openapi dalle3 response = client.images.generate( @@ -60,6 +64,7 @@ def _invoke(self, model='dall-e-3', size=size, n=n, + extra_body=extra_body, style=style, quality=quality, response_format='b64_json' @@ -68,8 +73,15 @@ def _invoke(self, result = [] for image in response.data: - result.append(self.create_blob_message(blob=b64decode(image.b64_json), - meta={ 'mime_type': 'image/png' }, - save_as=self.VARIABLE_KEY.IMAGE.value)) + result.append(self.create_blob_message(blob=b64decode(image.b64_json), + meta={'mime_type': 'image/png'}, + save_as=self.VARIABLE_KEY.IMAGE.value)) + result.append(self.create_text_message(f'\nGenerate image source to Seed ID: {seed_id}')) return result + + @staticmethod + def _generate_random_id(length=8): + characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + random_id = ''.join(random.choices(characters, k=length)) + return random_id diff --git a/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml b/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml index 7ba5c56889c7e4..b07a17212e9b63 100644 --- a/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml +++ b/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml @@ -29,6 +29,19 @@ parameters: pt_BR: Image prompt, you can check the official documentation of DallE 3 llm_description: Image prompt of DallE 3, you should describe the image you want to generate as a list of words as possible as detailed form: llm + - name: seed_id + type: string + required: false + label: + en_US: Seed ID + zh_Hans: 种子ID + pt_BR: ID da semente + human_description: + en_US: Image generation seed ID to ensure consistency of series generated images + zh_Hans: 图像生成种子ID,确保系列生成图像的一致性 + pt_BR: ID de semente de geração de imagem para garantir a consistência das imagens geradas em série + llm_description: If the user requests image consistency, extract the seed ID from the user's question or context.The seed id consists of an 8-bit string containing uppercase and lowercase letters and numbers + form: llm - name: size type: select required: true From 28997772a5edc8d1b9bc5faf6d9fa7418edcb093 Mon Sep 17 00:00:00 2001 From: rerorero Date: Wed, 12 Jun 2024 14:14:53 +0900 Subject: [PATCH 24/70] fix: remote_url doesn't work for gemini (#5090) --- .../model_providers/google/llm/llm.py | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/api/core/model_runtime/model_providers/google/llm/llm.py b/api/core/model_runtime/model_providers/google/llm/llm.py index 5a674fdeeeb77e..2dfde70816eeee 100644 --- a/api/core/model_runtime/model_providers/google/llm/llm.py +++ b/api/core/model_runtime/model_providers/google/llm/llm.py @@ -1,18 +1,22 @@ +import base64 import json import logging +import mimetypes from collections.abc import Generator -from typing import Optional, Union +from typing import Optional, Union, cast import google.ai.generativelanguage as glm import google.api_core.exceptions as exceptions import google.generativeai as genai import google.generativeai.client as client +import requests from google.generativeai.types import ContentType, GenerateContentResponse, HarmBlockThreshold, HarmCategory from google.generativeai.types.content_types import to_part from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta from core.model_runtime.entities.message_entities import ( AssistantPromptMessage, + ImagePromptMessageContent, PromptMessage, PromptMessageContentType, PromptMessageTool, @@ -361,11 +365,22 @@ def _format_message_to_glm_content(self, message: PromptMessage) -> ContentType: for c in message.content: if c.type == PromptMessageContentType.TEXT: glm_content['parts'].append(to_part(c.data)) - else: - metadata, data = c.data.split(',', 1) - mime_type = metadata.split(';', 1)[0].split(':')[1] - blob = {"inline_data":{"mime_type":mime_type,"data":data}} + elif c.type == PromptMessageContentType.IMAGE: + message_content = cast(ImagePromptMessageContent, c) + if message_content.data.startswith("data:"): + metadata, base64_data = c.data.split(',', 1) + mime_type = metadata.split(';', 1)[0].split(':')[1] + else: + # fetch image data from url + try: + image_content = requests.get(message_content.data).content + mime_type, _ = mimetypes.guess_type(message_content.data) + base64_data = base64.b64encode(image_content).decode('utf-8') + except Exception as ex: + raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}") + blob = {"inline_data":{"mime_type":mime_type,"data":base64_data}} glm_content['parts'].append(blob) + return glm_content elif isinstance(message, AssistantPromptMessage): glm_content = { @@ -444,4 +459,4 @@ def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]] exceptions.RequestRangeNotSatisfiable, exceptions.Cancelled, ] - } \ No newline at end of file + } From 25b0a97851c143a9252594d9949f38334a5b06cb Mon Sep 17 00:00:00 2001 From: Bowen Liang Date: Wed, 12 Jun 2024 14:43:03 +0800 Subject: [PATCH 25/70] build: use Poetry as default build system for dependency installation in CI jobs (#5088) --- .github/workflows/api-tests.yml | 16 +++--- .github/workflows/db-migration-test.yml | 12 ++-- .github/workflows/style.yml | 9 ++- api/migrations/README | 1 + api/poetry.lock | 74 ++++++++++++++++++++++++- api/pyproject.toml | 10 ++++ 6 files changed, 106 insertions(+), 16 deletions(-) diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index 3aa70420b35d8d..e2ef85431d0a11 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -14,7 +14,6 @@ concurrency: jobs: test: - name: API Tests runs-on: ubuntu-latest strategy: matrix: @@ -81,6 +80,7 @@ jobs: run: dev/pytest/pytest_vdb.sh test-in-poetry: + name: API Tests runs-on: ubuntu-latest strategy: matrix: @@ -89,26 +89,26 @@ jobs: - "3.11" steps: - - name: Install poetry - uses: abatilo/actions-poetry@v3 - with: - poetry-version: "1.8.1" - - name: Checkout code uses: actions/checkout@v4 + - name: Install Poetry + uses: abatilo/actions-poetry@v3 + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'poetry' - cache-dependency-path: ./api/poetry.lock + cache-dependency-path: | + api/pyproject.toml + api/poetry.lock - name: Poetry check run: poetry check -C api - name: Install dependencies - run: poetry install -C api + run: poetry install -C api --with dev - name: Run Unit tests run: poetry run -C api bash dev/pytest/pytest_unit_tests.sh diff --git a/.github/workflows/db-migration-test.yml b/.github/workflows/db-migration-test.yml index cb8dd06c5e2ecf..2f059bea9d7aae 100644 --- a/.github/workflows/db-migration-test.yml +++ b/.github/workflows/db-migration-test.yml @@ -23,16 +23,20 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Install Poetry + uses: abatilo/actions-poetry@v3 + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - cache: 'pip' + cache: 'poetry' cache-dependency-path: | - ./api/requirements.txt + api/pyproject.toml + api/poetry.lock - name: Install dependencies - run: pip install -r ./api/requirements.txt + run: poetry install -C api - name: Set up Middleware uses: hoverkraft-tech/compose-action@v2.0.0 @@ -50,4 +54,4 @@ jobs: - name: Run DB Migration run: | cd api - flask db upgrade + poetry run python -m flask db upgrade diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index 7dad707fea1d72..160641fdf0bc0d 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -24,6 +24,9 @@ jobs: with: files: api/** + - name: Install Poetry + uses: abatilo/actions-poetry@v3 + - name: Set up Python uses: actions/setup-python@v5 if: steps.changed-files.outputs.any_changed == 'true' @@ -32,15 +35,15 @@ jobs: - name: Python dependencies if: steps.changed-files.outputs.any_changed == 'true' - run: pip install ruff dotenv-linter + run: poetry install -C api --only lint - name: Ruff check if: steps.changed-files.outputs.any_changed == 'true' - run: ruff check --preview ./api + run: poetry run -C api ruff check --preview ./api - name: Dotenv check if: steps.changed-files.outputs.any_changed == 'true' - run: dotenv-linter ./api/.env.example ./web/.env.example + run: poetry run -C api dotenv-linter ./api/.env.example ./web/.env.example - name: Lint hints if: failure() diff --git a/api/migrations/README b/api/migrations/README index 0e048441597444..220678df7ab06e 100644 --- a/api/migrations/README +++ b/api/migrations/README @@ -1 +1,2 @@ Single-database configuration for Flask. + diff --git a/api/poetry.lock b/api/poetry.lock index 7dddf47433b746..5819770652a7ca 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -970,6 +970,23 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} +[[package]] +name = "click-default-group" +version = "1.2.4" +description = "click_default_group" +optional = false +python-versions = ">=2.7" +files = [ + {file = "click_default_group-1.2.4-py2.py3-none-any.whl", hash = "sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f"}, + {file = "click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e"}, +] + +[package.dependencies] +click = "*" + +[package.extras] +test = ["pytest"] + [[package]] name = "click-didyoumean" version = "0.3.1" @@ -1491,6 +1508,24 @@ files = [ {file = "docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e"}, ] +[[package]] +name = "dotenv-linter" +version = "0.5.0" +description = "Linting dotenv files like a charm!" +optional = false +python-versions = ">=3.9,<4.0" +files = [ + {file = "dotenv_linter-0.5.0-py3-none-any.whl", hash = "sha256:fd01cca7f2140cb1710f49cbc1bf0e62397a75a6f0522d26a8b9b2331143c8bd"}, + {file = "dotenv_linter-0.5.0.tar.gz", hash = "sha256:4862a8393e5ecdfb32982f1b32dbc006fff969a7b3c8608ba7db536108beeaea"}, +] + +[package.dependencies] +attrs = "*" +click = ">=6,<9" +click_default_group = ">=1.2,<2.0" +ply = ">=3.11,<4.0" +typing_extensions = ">=4.0,<5.0" + [[package]] name = "duckdb" version = "1.0.0" @@ -4550,6 +4585,17 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "ply" +version = "3.11" +description = "Python Lex & Yacc" +optional = false +python-versions = "*" +files = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] + [[package]] name = "portalocker" version = "2.8.2" @@ -5818,6 +5864,32 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "ruff" +version = "0.4.8" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.4.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7663a6d78f6adb0eab270fa9cf1ff2d28618ca3a652b60f2a234d92b9ec89066"}, + {file = "ruff-0.4.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eeceb78da8afb6de0ddada93112869852d04f1cd0f6b80fe464fd4e35c330913"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aad360893e92486662ef3be0a339c5ca3c1b109e0134fcd37d534d4be9fb8de3"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:284c2e3f3396fb05f5f803c9fffb53ebbe09a3ebe7dda2929ed8d73ded736deb"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7354f921e3fbe04d2a62d46707e569f9315e1a613307f7311a935743c51a764"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:72584676164e15a68a15778fd1b17c28a519e7a0622161eb2debdcdabdc71883"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9678d5c9b43315f323af2233a04d747409d1e3aa6789620083a82d1066a35199"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704977a658131651a22b5ebeb28b717ef42ac6ee3b11e91dc87b633b5d83142b"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05f8d6f0c3cce5026cecd83b7a143dcad503045857bc49662f736437380ad45"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ea874950daca5697309d976c9afba830d3bf0ed66887481d6bca1673fc5b66a"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fc95aac2943ddf360376be9aa3107c8cf9640083940a8c5bd824be692d2216dc"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:384154a1c3f4bf537bac69f33720957ee49ac8d484bfc91720cc94172026ceed"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5ce97cacc99878aa0d084c626a15cd21e6b3d53fd6f9112b7fc485918e1fa"}, + {file = "ruff-0.4.8-py3-none-win32.whl", hash = "sha256:6d795d7639212c2dfd01991259460101c22aabf420d9b943f153ab9d9706e6a9"}, + {file = "ruff-0.4.8-py3-none-win_amd64.whl", hash = "sha256:e14a3a095d07560a9d6769a72f781d73259655919d9b396c650fc98a8157555d"}, + {file = "ruff-0.4.8-py3-none-win_arm64.whl", hash = "sha256:14019a06dbe29b608f6b7cbcec300e3170a8d86efaddb7b23405cb7f7dcaf780"}, + {file = "ruff-0.4.8.tar.gz", hash = "sha256:16d717b1d57b2e2fd68bd0bf80fb43931b79d05a7131aa477d66fc40fbd86268"}, +] + [[package]] name = "s3transfer" version = "0.6.2" @@ -7451,4 +7523,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "a525ad5ee7a98124a23736c8ba5e0d1c7cf6d037a19aaac78364ae8c0ce0c242" +content-hash = "f0a99f84a0dc46b22eaea2344f205fda66f1e99be10806749492e12a7bcf66cf" diff --git a/api/pyproject.toml b/api/pyproject.toml index 9213482547a6cf..9f4c578322684b 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -179,6 +179,8 @@ google-cloud-aiplatform = "1.49.0" vanna = {version = "0.5.5", extras = ["postgres", "mysql", "clickhouse", "duckdb"]} kaleido = "0.2.1" +[tool.poetry.group.dev] +optional = true [tool.poetry.group.dev.dependencies] coverage = "~7.2.4" @@ -186,3 +188,11 @@ pytest = "~8.1.1" pytest-benchmark = "~4.0.0" pytest-env = "~1.1.3" pytest-mock = "~3.14.0" + +[tool.poetry.group.lint] +optional = true + +[tool.poetry.group.lint.dependencies] +ruff = "~0.4.8" +dotenv-linter = "~0.5.0" + From 0ce97e6315836a95cc07ec6d9fe099e8537311c5 Mon Sep 17 00:00:00 2001 From: sino Date: Wed, 12 Jun 2024 15:43:50 +0800 Subject: [PATCH 26/70] feat: support doubao llm function calling (#5100) --- .../model_providers/volcengine_maas/client.py | 30 ++++++++++++- .../volcengine_maas/llm/llm.py | 32 +++++++++++-- .../volcengine_maas/llm/models.py | 45 ++++++++++++++----- 3 files changed, 91 insertions(+), 16 deletions(-) diff --git a/api/core/model_runtime/model_providers/volcengine_maas/client.py b/api/core/model_runtime/model_providers/volcengine_maas/client.py index c7bf4fde8cd182..471cb3c94e01f8 100644 --- a/api/core/model_runtime/model_providers/volcengine_maas/client.py +++ b/api/core/model_runtime/model_providers/volcengine_maas/client.py @@ -7,7 +7,9 @@ ImagePromptMessageContent, PromptMessage, PromptMessageContentType, + PromptMessageTool, SystemPromptMessage, + ToolPromptMessage, UserPromptMessage, ) from core.model_runtime.model_providers.volcengine_maas.errors import wrap_error @@ -36,10 +38,11 @@ def from_credential(cls, credentials: dict) -> 'MaaSClient': client.set_sk(sk) return client - def chat(self, params: dict, messages: list[PromptMessage], stream=False) -> Generator | dict: + def chat(self, params: dict, messages: list[PromptMessage], stream=False, **extra_model_kwargs) -> Generator | dict: req = { 'parameters': params, - 'messages': [self.convert_prompt_message_to_maas_message(prompt) for prompt in messages] + 'messages': [self.convert_prompt_message_to_maas_message(prompt) for prompt in messages], + **extra_model_kwargs, } if not stream: return super().chat( @@ -89,10 +92,22 @@ def convert_prompt_message_to_maas_message(message: PromptMessage) -> dict: message = cast(AssistantPromptMessage, message) message_dict = {'role': ChatRole.ASSISTANT, 'content': message.content} + if message.tool_calls: + message_dict['tool_calls'] = [ + { + 'name': call.function.name, + 'arguments': call.function.arguments + } for call in message.tool_calls + ] elif isinstance(message, SystemPromptMessage): message = cast(SystemPromptMessage, message) message_dict = {'role': ChatRole.SYSTEM, 'content': message.content} + elif isinstance(message, ToolPromptMessage): + message = cast(ToolPromptMessage, message) + message_dict = {'role': ChatRole.FUNCTION, + 'content': message.content, + 'name': message.tool_call_id} else: raise ValueError(f"Got unknown PromptMessage type {message}") @@ -106,3 +121,14 @@ def wrap_exception(fn: Callable[[], dict | Generator]) -> dict | Generator: raise wrap_error(e) return resp + + @staticmethod + def transform_tool_prompt_to_maas_config(tool: PromptMessageTool): + return { + "type": "function", + "function": { + "name": tool.name, + "description": tool.description, + "parameters": tool.parameters, + } + } diff --git a/api/core/model_runtime/model_providers/volcengine_maas/llm/llm.py b/api/core/model_runtime/model_providers/volcengine_maas/llm/llm.py index 7a36d019e27de2..8bea30324b5ad8 100644 --- a/api/core/model_runtime/model_providers/volcengine_maas/llm/llm.py +++ b/api/core/model_runtime/model_providers/volcengine_maas/llm/llm.py @@ -119,8 +119,15 @@ def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptM if stop: req_params['stop'] = stop + extra_model_kwargs = {} + + if tools: + extra_model_kwargs['tools'] = [ + MaaSClient.transform_tool_prompt_to_maas_config(tool) for tool in tools + ] + resp = MaaSClient.wrap_exception( - lambda: client.chat(req_params, prompt_messages, stream)) + lambda: client.chat(req_params, prompt_messages, stream, **extra_model_kwargs)) if not stream: return self._handle_chat_response(model, credentials, prompt_messages, resp) return self._handle_stream_chat_response(model, credentials, prompt_messages, resp) @@ -156,12 +163,26 @@ def _handle_chat_response(self, model: str, credentials: dict, prompt_messages: choice = choices[0] message = choice['message'] + # parse tool calls + tool_calls = [] + if message['tool_calls']: + for call in message['tool_calls']: + tool_call = AssistantPromptMessage.ToolCall( + id=call['function']['name'], + type=call['type'], + function=AssistantPromptMessage.ToolCall.ToolCallFunction( + name=call['function']['name'], + arguments=call['function']['arguments'] + ) + ) + tool_calls.append(tool_call) + return LLMResult( model=model, prompt_messages=prompt_messages, message=AssistantPromptMessage( content=message['content'] if message['content'] else '', - tool_calls=[], + tool_calls=tool_calls, ), usage=self._calc_usage(model, credentials, resp['usage']), ) @@ -252,6 +273,10 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode if credentials.get('context_size'): model_properties[ModelPropertyKey.CONTEXT_SIZE] = int( credentials.get('context_size', 4096)) + + model_features = ModelConfigs.get( + credentials['base_model_name'], {}).get('features', []) + entity = AIModelEntity( model=model, label=I18nObject( @@ -260,7 +285,8 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode fetch_from=FetchFrom.CUSTOMIZABLE_MODEL, model_type=ModelType.LLM, model_properties=model_properties, - parameter_rules=rules + parameter_rules=rules, + features=model_features, ) return entity diff --git a/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py b/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py index a2bd81b94553da..3a793cd6a8dfdf 100644 --- a/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py +++ b/api/core/model_runtime/model_providers/volcengine_maas/llm/models.py @@ -1,3 +1,5 @@ +from core.model_runtime.entities.model_entities import ModelFeature + ModelConfigs = { 'Doubao-pro-4k': { 'req_params': { @@ -7,7 +9,10 @@ 'model_properties': { 'context_size': 4096, 'mode': 'chat', - } + }, + 'features': [ + ModelFeature.TOOL_CALL + ], }, 'Doubao-lite-4k': { 'req_params': { @@ -17,7 +22,10 @@ 'model_properties': { 'context_size': 4096, 'mode': 'chat', - } + }, + 'features': [ + ModelFeature.TOOL_CALL + ], }, 'Doubao-pro-32k': { 'req_params': { @@ -27,7 +35,10 @@ 'model_properties': { 'context_size': 32768, 'mode': 'chat', - } + }, + 'features': [ + ModelFeature.TOOL_CALL + ], }, 'Doubao-lite-32k': { 'req_params': { @@ -37,7 +48,10 @@ 'model_properties': { 'context_size': 32768, 'mode': 'chat', - } + }, + 'features': [ + ModelFeature.TOOL_CALL + ], }, 'Doubao-pro-128k': { 'req_params': { @@ -47,7 +61,10 @@ 'model_properties': { 'context_size': 131072, 'mode': 'chat', - } + }, + 'features': [ + ModelFeature.TOOL_CALL + ], }, 'Doubao-lite-128k': { 'req_params': { @@ -57,7 +74,10 @@ 'model_properties': { 'context_size': 131072, 'mode': 'chat', - } + }, + 'features': [ + ModelFeature.TOOL_CALL + ], }, 'Skylark2-pro-4k': { 'req_params': { @@ -67,26 +87,29 @@ 'model_properties': { 'context_size': 4096, 'mode': 'chat', - } + }, + 'features': [], }, 'Llama3-8B': { - 'req_params': { + 'req_params': { 'max_prompt_tokens': 8192, 'max_new_tokens': 8192, }, 'model_properties': { 'context_size': 8192, 'mode': 'chat', - } + }, + 'features': [], }, 'Llama3-70B': { - 'req_params': { + 'req_params': { 'max_prompt_tokens': 8192, 'max_new_tokens': 8192, }, 'model_properties': { 'context_size': 8192, 'mode': 'chat', - } + }, + 'features': [], } } From 95443bd5518b18a81b2ce6e2cbec0ebbbd2c478d Mon Sep 17 00:00:00 2001 From: zxhlyh Date: Wed, 12 Jun 2024 16:35:19 +0800 Subject: [PATCH 27/70] chore: workflow syncing modal (#5108) --- .../components/workflow/header/editing-title.tsx | 9 +++++++++ .../workflow/hooks/use-workflow-interactions.ts | 4 +++- web/app/components/workflow/index.tsx | 10 ++++++++-- .../nodes/_base/components/prompt/editor.tsx | 3 +++ web/app/components/workflow/store.ts | 8 ++++++++ .../components/workflow/syncing-data-modal.tsx | 15 +++++++++++++++ web/i18n/en-US/workflow.ts | 1 + web/i18n/zh-Hans/workflow.ts | 1 + 8 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 web/app/components/workflow/syncing-data-modal.tsx diff --git a/web/app/components/workflow/header/editing-title.tsx b/web/app/components/workflow/header/editing-title.tsx index 6cff4d99aa7451..44a85631dc66a7 100644 --- a/web/app/components/workflow/header/editing-title.tsx +++ b/web/app/components/workflow/header/editing-title.tsx @@ -10,6 +10,7 @@ const EditingTitle = () => { const { formatTimeFromNow } = useWorkflow() const draftUpdatedAt = useStore(state => state.draftUpdatedAt) const publishedAt = useStore(state => state.publishedAt) + const isSyncingWorkflowDraft = useStore(s => s.isSyncingWorkflowDraft) return (
@@ -26,6 +27,14 @@ const EditingTitle = () => { ? `${t('workflow.common.published')} ${formatTimeFromNow(publishedAt)}` : t('workflow.common.unpublished') } + { + isSyncingWorkflowDraft && ( + <> + · + {t('workflow.common.syncingData')} + + ) + }
) } diff --git a/web/app/components/workflow/hooks/use-workflow-interactions.ts b/web/app/components/workflow/hooks/use-workflow-interactions.ts index 5d5e98146050ec..e110d7c44a5793 100644 --- a/web/app/components/workflow/hooks/use-workflow-interactions.ts +++ b/web/app/components/workflow/hooks/use-workflow-interactions.ts @@ -57,11 +57,13 @@ export const useWorkflowUpdate = () => { const { appId, setSyncWorkflowDraftHash, + setIsSyncingWorkflowDraft, } = workflowStore.getState() + setIsSyncingWorkflowDraft(true) fetchWorkflowDraft(`/apps/${appId}/workflows/draft`).then((response) => { handleUpdateWorkflowCanvas(response.graph as WorkflowDataUpdator) setSyncWorkflowDraftHash(response.hash) - }) + }).finally(() => setIsSyncingWorkflowDraft(false)) }, [handleUpdateWorkflowCanvas, workflowStore]) return { diff --git a/web/app/components/workflow/index.tsx b/web/app/components/workflow/index.tsx index 882ed2f3ac45b6..e9ae8dd84fc8c1 100644 --- a/web/app/components/workflow/index.tsx +++ b/web/app/components/workflow/index.tsx @@ -55,6 +55,7 @@ import HelpLine from './help-line' import CandidateNode from './candidate-node' import PanelContextmenu from './panel-contextmenu' import NodeContextmenu from './node-contextmenu' +import SyncingDataModal from './syncing-data-modal' import { useStore, useWorkflowStore, @@ -99,7 +100,10 @@ const Workflow: FC = memo(({ const controlMode = useStore(s => s.controlMode) const nodeAnimation = useStore(s => s.nodeAnimation) const showConfirm = useStore(s => s.showConfirm) - const { setShowConfirm } = workflowStore.getState() + const { + setShowConfirm, + setControlPromptEditorRerenderKey, + } = workflowStore.getState() const { handleSyncWorkflowDraft, syncWorkflowDraftWhenPageClose, @@ -113,6 +117,7 @@ const Workflow: FC = memo(({ if (v.type === WORKFLOW_DATA_UPDATE) { setNodes(v.payload.nodes) setEdges(v.payload.edges) + setTimeout(() => setControlPromptEditorRerenderKey(Date.now())) } }) @@ -135,7 +140,7 @@ const Workflow: FC = memo(({ if (document.visibilityState === 'hidden') syncWorkflowDraftWhenPageClose() else if (document.visibilityState === 'visible') - handleRefreshWorkflowDraft() + setTimeout(() => handleRefreshWorkflowDraft(), 500) }, [syncWorkflowDraftWhenPageClose, handleRefreshWorkflowDraft]) useEffect(() => { @@ -223,6 +228,7 @@ const Workflow: FC = memo(({ `} ref={workflowContainerRef} > +
diff --git a/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx b/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx index 6c354c0a2c3367..1f14c0e85b40da 100644 --- a/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx +++ b/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx @@ -27,6 +27,7 @@ import TooltipPlus from '@/app/components/base/tooltip-plus' import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor/editor-support-vars' import Switch from '@/app/components/base/switch' import { Jinja } from '@/app/components/base/icons/src/vender/workflow' +import { useStore } from '@/app/components/workflow/store' type Props = { className?: string @@ -82,6 +83,7 @@ const Editor: FC = ({ }) => { const { t } = useTranslation() const { eventEmitter } = useEventEmitterContextContext() + const controlPromptEditorRerenderKey = useStore(s => s.controlPromptEditorRerenderKey) const isShowHistory = !isChatModel && isChatApp @@ -173,6 +175,7 @@ const Editor: FC = ({ ? (
void + isSyncingWorkflowDraft: boolean + setIsSyncingWorkflowDraft: (isSyncingWorkflowDraft: boolean) => void + controlPromptEditorRerenderKey: number + setControlPromptEditorRerenderKey: (controlPromptEditorRerenderKey: number) => void } export const createWorkflowStore = () => { @@ -209,6 +213,10 @@ export const createWorkflowStore = () => { setConnectingNodePayload: connectingNodePayload => set(() => ({ connectingNodePayload })), enteringNodePayload: undefined, setEnteringNodePayload: enteringNodePayload => set(() => ({ enteringNodePayload })), + isSyncingWorkflowDraft: false, + setIsSyncingWorkflowDraft: isSyncingWorkflowDraft => set(() => ({ isSyncingWorkflowDraft })), + controlPromptEditorRerenderKey: 0, + setControlPromptEditorRerenderKey: controlPromptEditorRerenderKey => set(() => ({ controlPromptEditorRerenderKey })), })) } diff --git a/web/app/components/workflow/syncing-data-modal.tsx b/web/app/components/workflow/syncing-data-modal.tsx new file mode 100644 index 00000000000000..fe3843d2fc09be --- /dev/null +++ b/web/app/components/workflow/syncing-data-modal.tsx @@ -0,0 +1,15 @@ +import { useStore } from './store' + +const SyncingDataModal = () => { + const isSyncingWorkflowDraft = useStore(s => s.isSyncingWorkflowDraft) + + if (!isSyncingWorkflowDraft) + return null + + return ( +
+
+ ) +} + +export default SyncingDataModal diff --git a/web/i18n/en-US/workflow.ts b/web/i18n/en-US/workflow.ts index 82e2cca044732b..9ac975f8a22c2d 100644 --- a/web/i18n/en-US/workflow.ts +++ b/web/i18n/en-US/workflow.ts @@ -67,6 +67,7 @@ const translation = { manageInTools: 'Manage in Tools', workflowAsToolTip: 'Tool reconfiguration is required after the workflow update.', viewDetailInTracingPanel: 'View details', + syncingData: 'Syncing data, just a few seconds.', }, errorMsg: { fieldRequired: '{{field}} is required', diff --git a/web/i18n/zh-Hans/workflow.ts b/web/i18n/zh-Hans/workflow.ts index e384f590f33c1c..83b933bc89fcad 100644 --- a/web/i18n/zh-Hans/workflow.ts +++ b/web/i18n/zh-Hans/workflow.ts @@ -67,6 +67,7 @@ const translation = { manageInTools: '访问工具页', workflowAsToolTip: '工作流更新后需要重新配置工具参数', viewDetailInTracingPanel: '查看详细信息', + syncingData: '同步数据中,只需几秒钟。', }, errorMsg: { fieldRequired: '{{field}} 不能为空', From ecc7f130b45b8717869a748330960adc28a07253 Mon Sep 17 00:00:00 2001 From: Pika Date: Wed, 12 Jun 2024 17:01:21 +0800 Subject: [PATCH 28/70] fix(typo): misspelling (#5094) --- .../model_providers/localai/llm/llm.py | 2 +- .../model_runtime/localai/test_llm.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/api/core/model_runtime/model_providers/localai/llm/llm.py b/api/core/model_runtime/model_providers/localai/llm/llm.py index 161e65302ff8ad..2a3fbb5c570350 100644 --- a/api/core/model_runtime/model_providers/localai/llm/llm.py +++ b/api/core/model_runtime/model_providers/localai/llm/llm.py @@ -50,7 +50,7 @@ from core.model_runtime.utils import helper -class LocalAILarguageModel(LargeLanguageModel): +class LocalAILanguageModel(LargeLanguageModel): def _invoke(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], model_parameters: dict, tools: list[PromptMessageTool] | None = None, stop: list[str] | None = None, diff --git a/api/tests/integration_tests/model_runtime/localai/test_llm.py b/api/tests/integration_tests/model_runtime/localai/test_llm.py index 208959815ca3df..6f421403d4d517 100644 --- a/api/tests/integration_tests/model_runtime/localai/test_llm.py +++ b/api/tests/integration_tests/model_runtime/localai/test_llm.py @@ -13,11 +13,11 @@ ) from core.model_runtime.entities.model_entities import ParameterRule from core.model_runtime.errors.validate import CredentialsValidateFailedError -from core.model_runtime.model_providers.localai.llm.llm import LocalAILarguageModel +from core.model_runtime.model_providers.localai.llm.llm import LocalAILanguageModel def test_validate_credentials_for_chat_model(): - model = LocalAILarguageModel() + model = LocalAILanguageModel() with pytest.raises(CredentialsValidateFailedError): model.validate_credentials( @@ -37,7 +37,7 @@ def test_validate_credentials_for_chat_model(): ) def test_invoke_completion_model(): - model = LocalAILarguageModel() + model = LocalAILanguageModel() response = model.invoke( model='chinese-llama-2-7b', @@ -65,7 +65,7 @@ def test_invoke_completion_model(): assert response.usage.total_tokens > 0 def test_invoke_chat_model(): - model = LocalAILarguageModel() + model = LocalAILanguageModel() response = model.invoke( model='chinese-llama-2-7b', @@ -93,7 +93,7 @@ def test_invoke_chat_model(): assert response.usage.total_tokens > 0 def test_invoke_stream_completion_model(): - model = LocalAILarguageModel() + model = LocalAILanguageModel() response = model.invoke( model='chinese-llama-2-7b', @@ -124,7 +124,7 @@ def test_invoke_stream_completion_model(): assert len(chunk.delta.message.content) > 0 if chunk.delta.finish_reason is None else True def test_invoke_stream_chat_model(): - model = LocalAILarguageModel() + model = LocalAILanguageModel() response = model.invoke( model='chinese-llama-2-7b', @@ -155,7 +155,7 @@ def test_invoke_stream_chat_model(): assert len(chunk.delta.message.content) > 0 if chunk.delta.finish_reason is None else True def test_get_num_tokens(): - model = LocalAILarguageModel() + model = LocalAILanguageModel() num_tokens = model.get_num_tokens( model='????', @@ -215,4 +215,4 @@ def test_get_num_tokens(): ) assert isinstance(num_tokens, int) - assert num_tokens == 10 \ No newline at end of file + assert num_tokens == 10 From ea69dc2a7e3f64a4a5de6869098fd2ed43ad70c1 Mon Sep 17 00:00:00 2001 From: xielong Date: Wed, 12 Jun 2024 17:24:23 +0800 Subject: [PATCH 29/70] feat: support hunyuan llm models (#5013) Co-authored-by: takatost Co-authored-by: Bowen Liang --- .../model_providers/_position.yaml | 1 + .../model_providers/hunyuan/__init__.py | 0 .../hunyuan/_assets/icon_l_en.png | Bin 0 -> 68638 bytes .../hunyuan/_assets/icon_s_en.png | Bin 0 -> 60824 bytes .../model_providers/hunyuan/hunyuan.py | 30 +++ .../model_providers/hunyuan/hunyuan.yaml | 40 ++++ .../model_providers/hunyuan/llm/__init__.py | 0 .../hunyuan/llm/_position.yaml | 4 + .../hunyuan/llm/hunyuan-lite.yaml | 28 +++ .../hunyuan/llm/hunyuan-pro.yaml | 28 +++ .../hunyuan/llm/hunyuan-standard-256k.yaml | 28 +++ .../hunyuan/llm/hunyuan-standard.yaml | 28 +++ .../model_providers/hunyuan/llm/llm.py | 205 ++++++++++++++++++ api/requirements.txt | 1 + .../model_runtime/hunyuan/__init__.py | 0 .../model_runtime/hunyuan/test_llm.py | 111 ++++++++++ .../model_runtime/hunyuan/test_provider.py | 25 +++ 17 files changed, 529 insertions(+) create mode 100644 api/core/model_runtime/model_providers/hunyuan/__init__.py create mode 100644 api/core/model_runtime/model_providers/hunyuan/_assets/icon_l_en.png create mode 100644 api/core/model_runtime/model_providers/hunyuan/_assets/icon_s_en.png create mode 100644 api/core/model_runtime/model_providers/hunyuan/hunyuan.py create mode 100644 api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/__init__.py create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml create mode 100644 api/core/model_runtime/model_providers/hunyuan/llm/llm.py create mode 100644 api/tests/integration_tests/model_runtime/hunyuan/__init__.py create mode 100644 api/tests/integration_tests/model_runtime/hunyuan/test_llm.py create mode 100644 api/tests/integration_tests/model_runtime/hunyuan/test_provider.py diff --git a/api/core/model_runtime/model_providers/_position.yaml b/api/core/model_runtime/model_providers/_position.yaml index b483303cadbdd5..21eea7ef3bfb02 100644 --- a/api/core/model_runtime/model_providers/_position.yaml +++ b/api/core/model_runtime/model_providers/_position.yaml @@ -31,3 +31,4 @@ - volcengine_maas - openai_api_compatible - deepseek +- hunyuan diff --git a/api/core/model_runtime/model_providers/hunyuan/__init__.py b/api/core/model_runtime/model_providers/hunyuan/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/core/model_runtime/model_providers/hunyuan/_assets/icon_l_en.png b/api/core/model_runtime/model_providers/hunyuan/_assets/icon_l_en.png new file mode 100644 index 0000000000000000000000000000000000000000..1303055ef8d1ee2b7bd127fa55c8f28a47a2ca4f GIT binary patch literal 68638 zcmZsCRa70@7G-dUV8Jc8ySux)ySqcM5G=U6L-0Uwcb9`haCZyt)|K0%Ki<9l0S6cy zsM>q2xu>iOS5lBfg2#pb@ZkfJw3L|2hYt`Iz}Mekp@Glzhb#BM3z(~lq{xS=3H+lE zABaCliwUcF8Ju>&_^K_WzrAPamRQe0NfCcxE`|>-Eod=uitY&CSyXT(8FBEallG{4 zAE&^hT<41EII+X0RJd~8UR2PlMyhf~9K>cK?lzK>#DH^;X7k%`ynb)@WYh9O?fAaC zIte4e>N>`~;d8M5yn4?+IYvw&EcEdsBqZ4XyaXc1eAS<-jEqJA|Mr!b7#8+_UW8y- zoj?BXkN)}2DG(0U*dx&M>tg$V-UACRk``|I|NU2TLa=oR?GSIc9FyFdIHvoCqK0Bb z|G6OHO-G$H=ZUg+7e9WrJ`{P)f`~J&n1x|>6iiZn?eEcvJQSIknPD~=7JGYp^Q?oX zi8@jsvVUDUEVv}>%RC(GM9a)?Xvdi_{3V5hANbUgwb{LFI|DJ}kz8I3FxSj~4v|yc zC%n5u&n%IBHr)k{#+lsnQ+3D2!yiK6vTGLsq3$Stgo-X zX|VS}WBX-zYf};F+u8Rm@;}Rv#TOW9kT&mBl@hF+Qy)E2Y^}g%|BSY>Z~n>i3d{>> zWd_@9%~%i0vei#5mYfT5^Q*1mk<-)3;fOPS+N!kk1@e&da&$cot37MguuDbp(>>LC zd$P9@$2jgVj{@Pd;YJn`(m1DkKbj%z!>eOb>ZkVvW{a2GTa_EBe{C}tCnST6abvVA zJ!1x8((X@|^u`LgF!@?KTd`#p1iP`6nMNoyHI9&OjB!kZue)!#m=;lEe|#9s4Xj-b z{WzT^3dS4lu^XYrYK2aU?o+Zye(xkqV0IW)GFZz-_>CSHfS=}k5`!^4eWz)6t$Y76 zu5+TxL*W)GBKVvCEtv7pr}`&xbL#?|0-M;suIz9Rk^$HFcYli@j!cX^&%WAhZAnH7 zdr!Txjg(GI-yW$*6lA)%3TOnDS<^{bEs9msi-4bbco>#7<6!tjKVS-$Z4eu=L^ew~ zfz!@uLe@k@cC>!-h%tB25yG0CG} z)(8G}!nKbl6Ct1$+lG#+M^caHf%ycv!N_>?cA0S1?Q=cG|NLcOU0^7>)bS5CQN&

8BrTmGxskG>j;_+WHOA}tK_II*N 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≫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

V79T5P``9UYA`t9GS?v0rsqd;8cS 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%0Amw?TXi)6xvr~2=}yc* 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Ë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 None: + """ + Validate provider credentials + if validate failed, raise exception + + :param credentials: provider credentials, credentials form defined in `provider_credential_schema`. + """ + try: + model_instance = self.get_model_instance(ModelType.LLM) + + # Use `hunyuan-standard` model for validate, + model_instance.validate_credentials( + model='hunyuan-standard', + credentials=credentials + ) + except CredentialsValidateFailedError as ex: + raise ex + except Exception as ex: + logger.exception(f'{self.get_provider_schema().provider} credentials validate failed') + raise ex diff --git a/api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml b/api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml new file mode 100644 index 00000000000000..835a7716f745de --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/hunyuan.yaml @@ -0,0 +1,40 @@ +provider: hunyuan +label: + zh_Hans: 腾讯混元 + en_US: Hunyuan +description: + en_US: Models provided by Tencent Hunyuan, such as hunyuan-standard, hunyuan-standard-256k, hunyuan-pro and hunyuan-lite. + zh_Hans: 腾讯混元提供的模型,例如 hunyuan-standard、 hunyuan-standard-256k, hunyuan-pro 和 hunyuan-lite。 +icon_small: + en_US: icon_s_en.png +icon_large: + en_US: icon_l_en.png +background: "#F6F7F7" +help: + title: + en_US: Get your API Key from Tencent Hunyuan + zh_Hans: 从腾讯混元获取 API Key + url: + en_US: https://console.cloud.tencent.com/cam/capi +supported_model_types: + - llm +configurate_methods: + - predefined-model +provider_credential_schema: + credential_form_schemas: + - variable: secret_id + label: + en_US: Secret ID + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入您的 Secret ID + en_US: Enter your Secret ID + - variable: secret_key + label: + en_US: Secret Key + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入您的 Secret Key + en_US: Enter your Secret Key diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/__init__.py b/api/core/model_runtime/model_providers/hunyuan/llm/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml new file mode 100644 index 00000000000000..2c1b981f8504a4 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/_position.yaml @@ -0,0 +1,4 @@ +- hunyuan-lite +- hunyuan-standard +- hunyuan-standard-256k +- hunyuan-pro diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml new file mode 100644 index 00000000000000..4f5a5dfb4858ae --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-lite.yaml @@ -0,0 +1,28 @@ +model: hunyuan-lite +label: + zh_Hans: hunyuan-lite + en_US: hunyuan-lite +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 256000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 256000 +pricing: + input: '0.00' + output: '0.00' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml new file mode 100644 index 00000000000000..d3b1b6d8b667d2 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-pro.yaml @@ -0,0 +1,28 @@ +model: hunyuan-pro +label: + zh_Hans: hunyuan-pro + en_US: hunyuan-pro +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 32000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 32000 +pricing: + input: '0.03' + output: '0.10' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml new file mode 100644 index 00000000000000..3b28317497fd3e --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard-256k.yaml @@ -0,0 +1,28 @@ +model: hunyuan-standard-256k +label: + zh_Hans: hunyuan-standard-256k + en_US: hunyuan-standard-256k +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 256000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 256000 +pricing: + input: '0.015' + output: '0.06' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml new file mode 100644 index 00000000000000..88b27f51c4f730 --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/hunyuan-standard.yaml @@ -0,0 +1,28 @@ +model: hunyuan-standard +label: + zh_Hans: hunyuan-standard + en_US: hunyuan-standard +model_type: llm +features: + - agent-thought + - tool-call + - multi-tool-call + - stream-tool-call +model_properties: + mode: chat + context_size: 32000 +parameter_rules: + - name: temperature + use_template: temperature + - name: top_p + use_template: top_p + - name: max_tokens + use_template: max_tokens + default: 1024 + min: 1 + max: 32000 +pricing: + input: '0.0045' + output: '0.0005' + unit: '0.001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/hunyuan/llm/llm.py b/api/core/model_runtime/model_providers/hunyuan/llm/llm.py new file mode 100644 index 00000000000000..2b6d8e0047426f --- /dev/null +++ b/api/core/model_runtime/model_providers/hunyuan/llm/llm.py @@ -0,0 +1,205 @@ +import json +import logging +from collections.abc import Generator + +from tencentcloud.common import credential +from tencentcloud.common.exception import TencentCloudSDKException +from tencentcloud.common.profile.client_profile import ClientProfile +from tencentcloud.common.profile.http_profile import HttpProfile +from tencentcloud.hunyuan.v20230901 import hunyuan_client, models + +from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta +from core.model_runtime.entities.message_entities import ( + AssistantPromptMessage, + PromptMessage, + PromptMessageTool, + SystemPromptMessage, + UserPromptMessage, +) +from core.model_runtime.errors.invoke import InvokeError +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel + +logger = logging.getLogger(__name__) + +class HunyuanLargeLanguageModel(LargeLanguageModel): + + def _invoke(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + model_parameters: dict, tools: list[PromptMessageTool] | None = None, + stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ + -> LLMResult | Generator: + + client = self._setup_hunyuan_client(credentials) + request = models.ChatCompletionsRequest() + messages_dict = self._convert_prompt_messages_to_dicts(prompt_messages) + + custom_parameters = { + 'Temperature': model_parameters.get('temperature', 0.0), + 'TopP': model_parameters.get('top_p', 1.0) + } + + params = { + "Model": model, + "Messages": messages_dict, + "Stream": stream, + **custom_parameters, + } + + request.from_json_string(json.dumps(params)) + response = client.ChatCompletions(request) + + if stream: + return self._handle_stream_chat_response(model, credentials, prompt_messages, response) + + return self._handle_chat_response(credentials, model, prompt_messages, response) + + def validate_credentials(self, model: str, credentials: dict) -> None: + """ + Validate credentials + """ + try: + client = self._setup_hunyuan_client(credentials) + + req = models.ChatCompletionsRequest() + params = { + "Model": model, + "Messages": [{ + "Role": "user", + "Content": "hello" + }], + "TopP": 1, + "Temperature": 0, + "Stream": False + } + req.from_json_string(json.dumps(params)) + client.ChatCompletions(req) + except Exception as e: + raise CredentialsValidateFailedError(f'Credentials validation failed: {e}') + + def _setup_hunyuan_client(self, credentials): + secret_id = credentials['secret_id'] + secret_key = credentials['secret_key'] + cred = credential.Credential(secret_id, secret_key) + httpProfile = HttpProfile() + httpProfile.endpoint = "hunyuan.tencentcloudapi.com" + clientProfile = ClientProfile() + clientProfile.httpProfile = httpProfile + client = hunyuan_client.HunyuanClient(cred, "", clientProfile) + return client + + def _convert_prompt_messages_to_dicts(self, prompt_messages: list[PromptMessage]) -> list[dict]: + """Convert a list of PromptMessage objects to a list of dictionaries with 'Role' and 'Content' keys.""" + return [{"Role": message.role.value, "Content": message.content} for message in prompt_messages] + + def _handle_stream_chat_response(self, model, credentials, prompt_messages, resp): + for index, event in enumerate(resp): + logging.debug("_handle_stream_chat_response, event: %s", event) + + data_str = event['data'] + data = json.loads(data_str) + + choices = data.get('Choices', []) + if not choices: + continue + choice = choices[0] + delta = choice.get('Delta', {}) + message_content = delta.get('Content', '') + finish_reason = choice.get('FinishReason', '') + + usage = data.get('Usage', {}) + prompt_tokens = usage.get('PromptTokens', 0) + completion_tokens = usage.get('CompletionTokens', 0) + usage = self._calc_response_usage(model, credentials, prompt_tokens, completion_tokens) + + assistant_prompt_message = AssistantPromptMessage( + content=message_content, + tool_calls=[] + ) + + delta_chunk = LLMResultChunkDelta( + index=index, + role=delta.get('Role', 'assistant'), + message=assistant_prompt_message, + usage=usage, + finish_reason=finish_reason, + ) + + yield LLMResultChunk( + model=model, + prompt_messages=prompt_messages, + delta=delta_chunk, + ) + + def _handle_chat_response(self, credentials, model, prompt_messages, response): + usage = self._calc_response_usage(model, credentials, response.Usage.PromptTokens, + response.Usage.CompletionTokens) + assistant_prompt_message = PromptMessage(role="assistant") + assistant_prompt_message.content = response.Choices[0].Message.Content + result = LLMResult( + model=model, + prompt_messages=prompt_messages, + message=assistant_prompt_message, + usage=usage, + ) + + return result + + def get_num_tokens(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + tools: list[PromptMessageTool] | None = None) -> int: + if len(prompt_messages) == 0: + return 0 + prompt = self._convert_messages_to_prompt(prompt_messages) + return self._get_num_tokens_by_gpt2(prompt) + + def _convert_messages_to_prompt(self, messages: list[PromptMessage]) -> str: + """ + Format a list of messages into a full prompt for the Anthropic model + + :param messages: List of PromptMessage to combine. + :return: Combined string with necessary human_prompt and ai_prompt tags. + """ + messages = messages.copy() # don't mutate the original list + + text = "".join( + self._convert_one_message_to_text(message) + for message in messages + ) + + # trim off the trailing ' ' that might come from the "Assistant: " + return text.rstrip() + + def _convert_one_message_to_text(self, message: PromptMessage) -> str: + """ + Convert a single message to a string. + + :param message: PromptMessage to convert. + :return: String representation of the message. + """ + human_prompt = "\n\nHuman:" + ai_prompt = "\n\nAssistant:" + content = message.content + + if isinstance(message, UserPromptMessage): + message_text = f"{human_prompt} {content}" + elif isinstance(message, AssistantPromptMessage): + message_text = f"{ai_prompt} {content}" + elif isinstance(message, SystemPromptMessage): + message_text = content + else: + raise ValueError(f"Got unknown type {message}") + + return message_text + + @property + def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]: + """ + Map model invoke error to unified error + The key is the error type thrown to the caller + The value is the error type thrown by the model, + which needs to be converted into a unified error type for the caller. + + :return: Invoke error mapping + """ + return { + InvokeError: [TencentCloudSDKException], + } diff --git a/api/requirements.txt b/api/requirements.txt index 1749b4a2df036e..36a08a287a3433 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -85,3 +85,4 @@ pymysql==1.1.1 tidb-vector==0.0.9 google-cloud-aiplatform==1.49.0 vanna[postgres,mysql,clickhouse,duckdb]==0.5.5 +tencentcloud-sdk-python-hunyuan~=3.0.1158 \ No newline at end of file diff --git a/api/tests/integration_tests/model_runtime/hunyuan/__init__.py b/api/tests/integration_tests/model_runtime/hunyuan/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/tests/integration_tests/model_runtime/hunyuan/test_llm.py b/api/tests/integration_tests/model_runtime/hunyuan/test_llm.py new file mode 100644 index 00000000000000..305f967ef0a785 --- /dev/null +++ b/api/tests/integration_tests/model_runtime/hunyuan/test_llm.py @@ -0,0 +1,111 @@ +import os +from collections.abc import Generator + +import pytest + +from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta +from core.model_runtime.entities.message_entities import AssistantPromptMessage, SystemPromptMessage, UserPromptMessage +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.hunyuan.llm.llm import HunyuanLargeLanguageModel + + +def test_validate_credentials(): + model = HunyuanLargeLanguageModel() + + with pytest.raises(CredentialsValidateFailedError): + model.validate_credentials( + model='hunyuan-standard', + credentials={ + 'secret_id': 'invalid_key', + 'secret_key': 'invalid_key' + } + ) + + model.validate_credentials( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + } + ) + + +def test_invoke_model(): + model = HunyuanLargeLanguageModel() + + response = model.invoke( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + }, + prompt_messages=[ + UserPromptMessage( + content='Hi' + ) + ], + model_parameters={ + 'temperature': 0.5, + 'max_tokens': 10 + }, + stop=['How'], + stream=False, + user="abc-123" + ) + + assert isinstance(response, LLMResult) + assert len(response.message.content) > 0 + + +def test_invoke_stream_model(): + model = HunyuanLargeLanguageModel() + + response = model.invoke( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + }, + prompt_messages=[ + UserPromptMessage( + content='Hi' + ) + ], + model_parameters={ + 'temperature': 0.5, + 'max_tokens': 100, + 'seed': 1234 + }, + stream=True, + user="abc-123" + ) + + assert isinstance(response, Generator) + + for chunk in response: + assert isinstance(chunk, LLMResultChunk) + assert isinstance(chunk.delta, LLMResultChunkDelta) + assert isinstance(chunk.delta.message, AssistantPromptMessage) + assert len(chunk.delta.message.content) > 0 if chunk.delta.finish_reason is None else True + + +def test_get_num_tokens(): + model = HunyuanLargeLanguageModel() + + num_tokens = model.get_num_tokens( + model='hunyuan-standard', + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + }, + prompt_messages=[ + SystemPromptMessage( + content='You are a helpful AI assistant.', + ), + UserPromptMessage( + content='Hello World!' + ) + ] + ) + + assert num_tokens == 14 diff --git a/api/tests/integration_tests/model_runtime/hunyuan/test_provider.py b/api/tests/integration_tests/model_runtime/hunyuan/test_provider.py new file mode 100644 index 00000000000000..bdec3d0e22d6d5 --- /dev/null +++ b/api/tests/integration_tests/model_runtime/hunyuan/test_provider.py @@ -0,0 +1,25 @@ +import os + +import pytest + +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.hunyuan.hunyuan import HunyuanProvider + + +def test_validate_provider_credentials(): + provider = HunyuanProvider() + + with pytest.raises(CredentialsValidateFailedError): + provider.validate_provider_credentials( + credentials={ + 'secret_id': 'invalid_key', + 'secret_key': 'invalid_key' + } + ) + + provider.validate_provider_credentials( + credentials={ + 'secret_id': os.environ.get('HUNYUAN_SECRET_ID'), + 'secret_key': os.environ.get('HUNYUAN_SECRET_KEY') + } + ) From e04fc9b3049980fc3f27f121967fafba82400cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E6=B3=95=E6=93=8D=E4=BD=9C?= Date: Wed, 12 Jun 2024 17:46:53 +0800 Subject: [PATCH 30/70] fix: select field not work when it is not required (#5101) --- api/core/tools/tool_manager.py | 2 +- web/app/components/base/select/index.tsx | 25 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/api/core/tools/tool_manager.py b/api/core/tools/tool_manager.py index a0ca9f692a4156..aa184176a11c15 100644 --- a/api/core/tools/tool_manager.py +++ b/api/core/tools/tool_manager.py @@ -210,7 +210,7 @@ def _init_runtime_parameter(cls, parameter_rule: ToolParameter, parameters: dict if parameter_rule.type == ToolParameter.ToolParameterType.SELECT: # check if tool_parameter_config in options options = list(map(lambda x: x.value, parameter_rule.options)) - if parameter_value not in options: + if parameter_value is not None and parameter_value not in options: raise ValueError( f"tool parameter {parameter_rule.name} value {parameter_value} not in options {options}") diff --git a/web/app/components/base/select/index.tsx b/web/app/components/base/select/index.tsx index 503aeab63544db..51e371ac09aa7b 100644 --- a/web/app/components/base/select/index.tsx +++ b/web/app/components/base/select/index.tsx @@ -3,7 +3,7 @@ import type { FC } from 'react' import React, { Fragment, useEffect, useState } from 'react' import { Combobox, Listbox, Transition } from '@headlessui/react' import classNames from 'classnames' -import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/20/solid' +import { CheckIcon, ChevronDownIcon, ChevronUpIcon, XMarkIcon } from '@heroicons/react/20/solid' import { useTranslation } from 'react-i18next' import { PortalToFollowElem, @@ -184,11 +184,24 @@ const SimpleSelect: FC = ({

{selectedItem?.name ?? localPlaceholder} - - {!disabled && ( From b399e8a359880bfdfda63a7ffb558b398283c6d7 Mon Sep 17 00:00:00 2001 From: Harry Wang Date: Wed, 12 Jun 2024 06:02:22 -0400 Subject: [PATCH 31/70] fixed a typo and grammar error in sampled app (#5061) --- api/constants/recommended_apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/constants/recommended_apps.json b/api/constants/recommended_apps.json index 68c913f80a7517..090a1c3b80ffaa 100644 --- a/api/constants/recommended_apps.json +++ b/api/constants/recommended_apps.json @@ -585,7 +585,7 @@ "name": "SVG Logo Design " }, "2cb0135b-a342-4ef3-be05-d2addbfceec7": { - "export_data": "app:\n icon: \"\\U0001F916\"\n icon_background: '#FFEAD5'\n mode: completion\n name: Fully SEO Optimized Article including FAQs\nmodel_config:\n agent_mode:\n enabled: false\n max_iteration: 5\n strategy: function_call\n tools: []\n annotation_reply:\n enabled: false\n chat_prompt_config: {}\n completion_prompt_config: {}\n dataset_configs:\n datasets:\n datasets: []\n retrieval_model: single\n dataset_query_variable: ''\n external_data_tools: []\n file_upload:\n image:\n detail: high\n enabled: false\n number_limits: 3\n transfer_methods:\n - remote_url\n - local_file\n model:\n completion_params:\n frequency_penalty: 0\n max_tokens: 4096\n presence_penalty: 0\n stop: []\n temperature: 0\n top_p: 1\n mode: chat\n name: gpt-3.5-turbo-0125\n provider: openai\n more_like_this:\n enabled: false\n opening_statement: ''\n pre_prompt: \"## Job Description: Fully SEO Optimized Article including FAQ's\\n##\\\n \\ Workflow\\nFirst Step. Before starting an article, Must Develop a comprehensive\\\n \\ \\\"Outline\\\" for a long-form article for the Keyword {{prompt}}, featuring at\\\n \\ least 18 engaging headings and subheadings that are detailed, mutually exclusive,\\\n \\ collectively exhaustive, and cover the entire topic. Must use LSI Keywords in\\\n \\ headings and sub-headings without mentioning them in the \\\"Content\\\". Must show\\\n \\ these \\\"Outlines\\\" in a table. \\n\\nSecond Step Using markdown formatting, act\\\n \\ as an Expert Article Writer and write a fully detailed, long-form, 100% unique,\\\n \\ creative, and human-like informational article of a minimum of 2000 words in\\\n \\ Grade 7 English, using headings and sub-headings. The article should be written\\\n \\ in a formal, informative, and optimistic tone. \\nMust Read all the information\\\n \\ below. Use {{target_language}} for the keyword \\\"{{prompt}}\\\" and write at least\\\n \\ 400\\u2013500 words of engaging paragraph under each and every Heading. This\\\n \\ article should show the experience, expertise, authority and trust for the Topic\\\n \\ {{prompt}}. Include insights based on first-hand knowledge or experiences, and\\\n \\ support the content with credible sources when necessary. Focus on providing\\\n \\ accurate, relevant, and helpful information to readers, showcasing both subject\\\n \\ matter expertise and personal experience in the topic {{prompt}}. Write engaging,\\\n \\ unique, and plagiarism-free content that incorporates a human-like style, and\\\n \\ simple English and bypass ai detector tests directly without mentioning them.\\\n \\ Try to use contractions, idioms, transitional phrases, interjections, dangling\\\n \\ modifiers, and colloquialisms, and avoid repetitive words and unnatural sentence\\\n \\ structures. The article must include an SEO meta-description right after the\\\n \\ title (you must include the {{prompt}} in the description), an introduction,\\\n \\ and a click-worthy short title. Also, use the seed keyword as the first H2.\\\n \\ Always use a combination of paragraphs, lists, and tables for a better reader\\\n \\ experience. Use fully detailed paragraphs that engage the reader. Write at least\\\n \\ one section with the heading {{prompt}}. Write down at least six FAQs with answers\\\n \\ and a conclusion. \\n\\nNote: Don't assign Numbers to Headings. Don't assign numbers\\\n \\ to Questions. Don't write Q: before the question (faqs) Make sure the article\\\n \\ is plagiarism-free. Don't forget to use a question mark (?) at the end of questions.\\\n \\ Try not to change the original {{prompt}} while writing the title. Try to use\\\n \\ \\\"{{prompt}}\\\" 2-3 times in the article. Try to include {{prompt}} in the headings\\\n \\ as well. write content that can easily pass the AI detection tools test. Bold\\\n \\ all the headings and sub-headings using Markdown formatting. \\n\\n### Constraits:\\\n \\ MUST FOLLOW THESE INSTRUCTIONS IN THE ARTICLE:\\n0. Use {{target_language}} strictly\\\n \\ in your response. \\n1. Make sure you are using the Focus Keyword in the SEO\\\n \\ Title.\\n2. Use The Focus Keyword inside the SEO Meta Description.\\n3. Make Sure\\\n \\ The Focus Keyword appears in the first 10% of the content.\\n4. Make sure The\\\n \\ Focus Keyword was found in the content\\n5. Make sure Your content is 2000 words\\\n \\ long.\\n6. Must use The Focus Keyword in the subheading(s).\\n7. Make sure the\\\n \\ Keyword Density is 1.30\\n8. Must Create At least one external link in the content.\\n\\\n 9. Must use a positive or a negative sentiment word in the Title.\\n10. Must use\\\n \\ a Power Keyword in the Title.\\n11. Must use a Number in the Title. Note: Now\\\n \\ Execute the First step and after completion of first step automatically start\\\n \\ the second step. \\n\\n## Context\\nUse the below information as context of the\\\n \\ SEO article. ## Job Description: Fully SEO Optimized Article including FAQ's\\n\\\n {{context}} \\n\\n\"\n prompt_type: simple\n retriever_resource:\n enabled: false\n sensitive_word_avoidance:\n configs: []\n enabled: false\n type: ''\n speech_to_text:\n enabled: false\n suggested_questions: []\n suggested_questions_after_answer:\n enabled: false\n text_to_speech:\n enabled: false\n language: ''\n voice: ''\n user_input_form:\n - text-input:\n default: ''\n label: Keywords\n required: true\n variable: prompt\n - select:\n default: ''\n label: Target Language\n options:\n - \"\\u4E2D\\u6587\"\n - English\n - \"Portugu\\xEAs\"\n required: true\n variable: target_language\n - paragraph:\n default: ''\n label: Context\n required: true\n variable: context\n", + "export_data": "app:\n icon: \"\\U0001F916\"\n icon_background: '#FFEAD5'\n mode: completion\n name: Fully SEO Optimized Article including FAQs\nmodel_config:\n agent_mode:\n enabled: false\n max_iteration: 5\n strategy: function_call\n tools: []\n annotation_reply:\n enabled: false\n chat_prompt_config: {}\n completion_prompt_config: {}\n dataset_configs:\n datasets:\n datasets: []\n retrieval_model: single\n dataset_query_variable: ''\n external_data_tools: []\n file_upload:\n image:\n detail: high\n enabled: false\n number_limits: 3\n transfer_methods:\n - remote_url\n - local_file\n model:\n completion_params:\n frequency_penalty: 0\n max_tokens: 4096\n presence_penalty: 0\n stop: []\n temperature: 0\n top_p: 1\n mode: chat\n name: gpt-3.5-turbo-0125\n provider: openai\n more_like_this:\n enabled: false\n opening_statement: ''\n pre_prompt: \"## Job Description: Fully SEO Optimized Article including FAQ's\\n##\\\n \\ Workflow\\nFirst Step. Before starting an article, Must Develop a comprehensive\\\n \\ \\\"Outline\\\" for a long-form article for the Keyword {{prompt}}, featuring at\\\n \\ least 18 engaging headings and subheadings that are detailed, mutually exclusive,\\\n \\ collectively exhaustive, and cover the entire topic. Must use LSI Keywords in\\\n \\ headings and sub-headings without mentioning them in the \\\"Content\\\". Must show\\\n \\ these \\\"Outlines\\\" in a table. \\n\\nSecond Step Using markdown formatting, act\\\n \\ as an Expert Article Writer and write a fully detailed, long-form, 100% unique,\\\n \\ creative, and human-like informational article of a minimum of 2000 words in\\\n \\ Grade 7 English, using headings and sub-headings. The article should be written\\\n \\ in a formal, informative, and optimistic tone. \\nMust Read all the information\\\n \\ below. Use {{target_language}} for the keyword \\\"{{prompt}}\\\" and write at least\\\n \\ 400\\u2013500 words of engaging paragraph under each and every Heading. This\\\n \\ article should show the experience, expertise, authority and trust for the Topic\\\n \\ {{prompt}}. Include insights based on first-hand knowledge or experiences, and\\\n \\ support the content with credible sources when necessary. Focus on providing\\\n \\ accurate, relevant, and helpful information to readers, showcasing both subject\\\n \\ matter expertise and personal experience in the topic {{prompt}}. Write engaging,\\\n \\ unique, and plagiarism-free content that incorporates a human-like style, and\\\n \\ simple English and bypass ai detector tests directly without mentioning them.\\\n \\ Try to use contractions, idioms, transitional phrases, interjections, dangling\\\n \\ modifiers, and colloquialisms, and avoid repetitive words and unnatural sentence\\\n \\ structures. The article must include an SEO meta-description right after the\\\n \\ title (you must include the {{prompt}} in the description), an introduction,\\\n \\ and a click-worthy short title. Also, use the seed keyword as the first H2.\\\n \\ Always use a combination of paragraphs, lists, and tables for a better reader\\\n \\ experience. Use fully detailed paragraphs that engage the reader. Write at least\\\n \\ one section with the heading {{prompt}}. Write down at least six FAQs with answers\\\n \\ and a conclusion. \\n\\nNote: Don't assign Numbers to Headings. Don't assign numbers\\\n \\ to Questions. Don't write Q: before the question (faqs) Make sure the article\\\n \\ is plagiarism-free. Don't forget to use a question mark (?) at the end of questions.\\\n \\ Try not to change the original {{prompt}} while writing the title. Try to use\\\n \\ \\\"{{prompt}}\\\" 2-3 times in the article. Try to include {{prompt}} in the headings\\\n \\ as well. write content that can easily pass the AI detection tools test. Bold\\\n \\ all the headings and sub-headings using Markdown formatting. \\n\\n## Constrains:\\\n \\ MUST FOLLOW THESE INSTRUCTIONS IN THE ARTICLE:\\n0. Use {{target_language}} strictly\\\n \\ in your response. \\n1. Make sure you are using the Focus Keyword in the SEO\\\n \\ Title.\\n2. Use The Focus Keyword inside the SEO Meta Description.\\n3. Make Sure\\\n \\ The Focus Keyword appears in the first 10% of the content.\\n4. Make sure The\\\n \\ Focus Keyword was found in the content\\n5. Make sure Your content is 2000 words\\\n \\ long.\\n6. Must use The Focus Keyword in the subheading(s).\\n7. Make sure the\\\n \\ Keyword Density is 1.30\\n8. Must Create At least one external link in the content.\\n\\\n 9. Must use a positive or a negative sentiment word in the Title.\\n10. Must use\\\n \\ a Power Keyword in the Title.\\n11. Must use a Number in the Title. Note: Now\\\n \\ Execute the First step and after completion of first step automatically start\\\n \\ the second step. \\n\\n## Context\\nUse the information below as the context of the\\\n \\ SEO article. ## Job Description: Fully SEO Optimized Article including FAQ's\\n\\\n {{context}} \\n\\n\"\n prompt_type: simple\n retriever_resource:\n enabled: false\n sensitive_word_avoidance:\n configs: []\n enabled: false\n type: ''\n speech_to_text:\n enabled: false\n suggested_questions: []\n suggested_questions_after_answer:\n enabled: false\n text_to_speech:\n enabled: false\n language: ''\n voice: ''\n user_input_form:\n - text-input:\n default: ''\n label: Keywords\n required: true\n variable: prompt\n - select:\n default: ''\n label: Target Language\n options:\n - \"\\u4E2D\\u6587\"\n - English\n - \"Portugu\\xEAs\"\n required: true\n variable: target_language\n - paragraph:\n default: ''\n label: Context\n required: true\n variable: context\n", "icon": "\ud83e\udd16", "icon_background": "#FFEAD5", "id": "2cb0135b-a342-4ef3-be05-d2addbfceec7", From 11fd4a5dcc657db8ce9c836fc69f955eaac3b451 Mon Sep 17 00:00:00 2001 From: fishisnow Date: Wed, 12 Jun 2024 19:27:01 +0800 Subject: [PATCH 32/70] Fix: fix load_yaml logging, Avoid setting the log level to warning (#5019) Co-authored-by: huangyusong --- api/core/tools/utils/yaml_utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/core/tools/utils/yaml_utils.py b/api/core/tools/utils/yaml_utils.py index 22e4d3d1280b2a..3526647b4f6d2e 100644 --- a/api/core/tools/utils/yaml_utils.py +++ b/api/core/tools/utils/yaml_utils.py @@ -4,6 +4,7 @@ import yaml from yaml import YAMLError +logger = logging.getLogger(__name__) def load_yaml_file(file_path: str, ignore_error: bool = False) -> dict: """ @@ -24,11 +25,11 @@ def load_yaml_file(file_path: str, ignore_error: bool = False) -> dict: except Exception as e: raise YAMLError(f'Failed to load YAML file {file_path}: {e}') except FileNotFoundError as e: - logging.debug(f'Failed to load YAML file {file_path}: {e}') + logger.debug(f'Failed to load YAML file {file_path}: {e}') return {} except Exception as e: if ignore_error: - logging.warning(f'Failed to load YAML file {file_path}: {e}') + logger.warning(f'Failed to load YAML file {file_path}: {e}') return {} else: raise e From 0c92f81efc93cd46b68d9b8ad2d4f8ed2ffda5d3 Mon Sep 17 00:00:00 2001 From: takatost Date: Thu, 13 Jun 2024 00:06:05 +0800 Subject: [PATCH 33/70] chore: sync pyproject.toml from requirements.txt (#5130) --- api/poetry.lock | 328 ++++++++++++++++++++++++--------------------- api/pyproject.toml | 1 + 2 files changed, 179 insertions(+), 150 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 5819770652a7ca..6539d1518d62f4 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1038,115 +1038,115 @@ testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] [[package]] name = "clickhouse-driver" -version = "0.2.7" +version = "0.2.8" description = "Python driver with native interface for ClickHouse" optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "clickhouse-driver-0.2.7.tar.gz", hash = "sha256:299cfbe6d561955d88eeab6e09f3de31e2f6daccc6fdd904a59e46357d2d28d9"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c44fefc2fd44f432d5b162bfe34ad76840137c34167d46a18c554a7c7c6e3566"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e018452a7bf8d8c0adf958afbc5b0d29e402fc09a1fb34e9186293eae57f3b4e"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff8b09f8b13df28d2f91ee3d0d2edd9589cbda76b74acf60669112219cea8c9d"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54aa91c9512fd5a73f038cae4f67ca2ff0b2f8a84de846179a31530936ef4e20"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8342a7ba31ccb393ee31dfd61173aa84c995b4ac0b44d404adc8463534233d5"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:199000f8adf38fade0b5a52c273a396168105539de741a18ba3e68d7fc06e0e6"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60a2a40602b207506e505cfb184a81cd4b752bde17153bc0b32c3931ddb792f"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5db3a26b18146b2b0b06d3f32ce588af5afaa38c719daf6f9606981514228a8b"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5579a31da1f3cf49630e43fbbb11cab891b78161abdcb33908b79820b7cd3a23"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cc39f0fb761aed96917b0f55679174a50f9591afc0e696e745cd698ef822661f"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9aa0f7c740e4e61886c6d388792c5d1a2084d4b5462e6dcfc24e30ca7e7f8e68"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2caee88b6eec7b33ddbccd24501ad99ff8ff2b0a6a4471945cbfb28947a9a791"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-win32.whl", hash = "sha256:a4aef432cc7120a971eebb7ca2fddac4472e810b57e403d3a371b0c69cbb2bb0"}, - {file = "clickhouse_driver-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f307de7df6bc23ad5ec8a1ba1db157f4d14de673ddd4798f37790f23255605b0"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbf3ca8919bf856ca6588669a863065fb732a32a6387095f64d19038fd99db9f"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab68b3d9b9d1386adfd3a57edd47b62858a145bf7ccc7f11b31d308195d966e5"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985a9d60044c5ad39c6e018b852c7105ec4ebfdf4c3abe23183b4867454e570a"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c94330054c8d92d2286898906f843f26e2f96fc2aa11a9a96a7b5593d299bf0"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92938f55c8f797e50e624a4b96e685178d043cdf0ede306a7fd4e7dda19b8dfd"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05bd53e9bf49c3013d06f9e6d2812872d44b150f7a2d1cf18e1498257d42330e"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f1f8ed5404e283a9ded499c33eade2423fdc15e31f8a711d75e91f890d0f70b"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a398085e4a1766d907ac32c282d4172db38a44243bde303372396208d1cbf4bb"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fa1808593123b6056f93808f0afbc7938f06a8149cb4e381aa7b1a234c1d3c18"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:0512d54ae23bd4a69278e04f42b651d7c71b63ba6043e2c6bd97b11329692f99"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5bc2b67e7e68f74ccebf95a8b3a13f13a7c34b89b32c9813103221de14c06c8b"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:04a37cdafc671cb796af3e566cef0aeb39111d82aebeecd9106a049434953b26"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-win32.whl", hash = "sha256:019538c7c23e976538e5081dd2f77a8a40bf663c638a62d857ff05f42b0c9052"}, - {file = "clickhouse_driver-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5166643683584bc53fcadda73c65f6a9077feb472f3d167ecef1a1a7024973aa"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:59affab7b5a3c4aab5b6a730f606575efdefea213458de2eb14927ee4e0640f4"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dcb93dd07fe65ac4f1a2bc0b8967911d4ad2152dbee000f025ea5cb575da5ecb"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55a48019b79181ae1ca90e980e74c5d413c3f8829f6744e2b056646c2d435a1a"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:507463c9157240fd7c3246781e8c30df8db3c80bf68925b36ff3ad4a80c4b924"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e2d8d2295ee9e0cfab8ad77cb635a05da2160334b4f16ed8c3d00fbf39a2343"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e38c44546dcdb956b5ab0944cb3d51e8c98f816e75bab1a2254c478865bc6e7b"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6690a2bdd9e7531fe50b53193279f8b35cbcd5c5ee36c0fcc112518a7d24f16"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc6b4ba0a6467fd09021aa1d87a44fb4589600d61b010fca41e0dfffd0dee322"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:254bbd400eb87ff547a08755bc714f712e11f7a6d3ebbbb7aaa1dd454fb16d44"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7bbbe3f8b87fc1489bc15fa9c88cc9fac9d4d7d683d076f058c2c83e6ee422fd"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:745e5b18f0957d932151527f1523d0e516c199de8c589638e5f55ab2559886f3"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0fa0357fb5f26149e3df86a117d3678329b85d8827b78a5a09bbf224d8dd4541"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-win32.whl", hash = "sha256:ace652af7ca94ba3cb3a04a5c363e135dc5009f31d8201903e21db9d5daf2358"}, - {file = "clickhouse_driver-0.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:c0ba68489544df89e4138a14b0ec3e1e5eb102d5d3283a91d9b837c420c0ab97"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:66267e4ba21fa66c97ce784a5de2202d3b7d4db3e50bfcdde92830a68f6fae30"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cf55c285b75c178487407721baef4980b3c6515c9c0c1a6c1ea8b001afe658e"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:deeb66bb56490db2157f199c6d9aa2c53f046677be430cc834fc1e74eec6e654"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfe5b4020939abeeb407b4eead598c954b1573d2d2b4f174f793b196d378b9d9"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84d39506b5f8d86a1195ebde1c66aba168f34ebce6ebd828888f0625cac54774"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f93a27db2dcbbd3ecad36e8df4395d047cb7410e2dc69f6d037674e15442f4ee"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ebc29e501e47ecbfd44c89c0e5c87b2a722049d38b9e93fdd4bea510a82e16ac"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f9cc8c186fea09a94d89e5c9c4e8d05ec3a80e2f6d25673c48efec8117a13cfc"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:0757dfde5410c42230b24825ea3ab904a78160520e5ceb953482e133e368733b"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c9f88818cf411f928c29ba295c677cd95773bd256b8490f5655fb489e0c6658c"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e19952f158ebe274c65ffeb294ba378d75048a48f31b77573948d606bed019d5"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:008b1f32c7c68564de8051482b72a5289b6933bca9d9b1ad1474dd448d6768ba"}, - {file = "clickhouse_driver-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:622933cc9834c39f03de5d43a12f13fc7133d31d6d2597e67866d4a549ca9e60"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:92540581e5b5f36d915f14d05c30244870fb123c74b38c645fa47663053c5471"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:02dfadc6111b64e01c20b8c11266cab97d4f06685a392a183af437f2f1afb990"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ca17fece86fe85d97705024bec881978271931b3d00db273c9d63244f7d606"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76474f1315ca3ab484ae28ad085b8f756c8b9a755882f93912b2149290482033"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5c0ff12368b34aaf58dd948b0819e5b54d261911de334d3f048328dc9354013"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cd441b17294e90e313b08fabf84fcc782c191d2b9b2a924f163928202db6fcc"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62aa158f61d7d84c58e8cd75b3b8340b28607e5a70132395078f578d518aaae3"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcb2a39a1fef8bf1b581f06125c2a84a5b92c939b079d1a95126e3207b05dc77"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f29cc641a65e89a51a15f6d195f565ad2761d1bd653408c6b4046c987c5fb99"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ac1a43690696bda46c9a23fc6fd79b6fe22d428a18e880bdbdf5e6aeb31008c5"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:1dd5ea4584c42f85d96ddfa7d07da2abb35a797c45e4d3a66ace149ee4977cad"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a736c0af858a3c83af03848b18754ab18dc594cc7f3bf6be0b1fac682def182c"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-win32.whl", hash = "sha256:6cb8ca47f5818c1bc5814b9ff775e383f3c50059b1fd28a02cb9be1b666929f8"}, - {file = "clickhouse_driver-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:a90e7dc92985669a5e6569356bb3028d9d475f95006d4487cb0789aa53f9489c"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04b77cd6c583da9135db4a62c5a7999ae248c2dbfc0cb8e8a3d8a853b1fbfa11"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c7671f8c0e8960d766b2e0eaefcae3088fccdd3920e9cd3dee8e344cfd0a6929"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:502d7cd28522b95a399e993ffd48487e8c12c50ce2d4e89b77b938f945304405"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:969739279f4010e7b5b6b2c9d2ab56a463aed11fdaed5e02424c1b3915f144f8"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed34b60f741eeb02407ea72180d77cbfc368c1be6fc2f2ff8319d1856ce67e10"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a667b48927f4420eb8c03fa33369edfbdf359a788897a01ac945263a2a611461"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f93aa3a90f3847872d7464ec9076482b2e812c4e7d61682daedffdf3471be00"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:190890667215691fdf2155c3b233b39146054ab1cd854c7d91221e6ed633d71e"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ff280aeac5e96c764cd31ba1077c95601337b9a97fb0b9ed4d24c64431f2c322"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01e63e35d2ab55b8eb48facf6e951968c80d27ee6703aa6c91c73d9d0a4d0efe"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a29fb24b910dafc8c11ba882797d13ec0323a97dce80a57673116fa893d1b669"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5f229a7853fc767e63143ea69889d49f6fd5623adc2f7b0f7eb360117d7e91a5"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-win32.whl", hash = "sha256:b7f34ad2ed509f48f8ed1f9b96e89765173a7b35d286c7350aa85934a11c0f49"}, - {file = "clickhouse_driver-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:78b166597afbe490cc0cdac44fed8c8b81668f87125601dda17b154f237eef5d"}, - {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:16ab64beb8d079cb9b3200539539a35168f524eedf890c9acefb719e25bdc96e"}, - {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03e28fd50fc7c54874bf8e638a2ea87f73ae35bfbbf90123fdb395f38d62f159"}, - {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0677b8350acd8d186b6acd0026b62dd262d6fee428a5fa3ad9561908d4b02c39"}, - {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2f3c9e2182809131701bb28a606dec90525c7ab20490714714a4b3eb015454b"}, - {file = "clickhouse_driver-0.2.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e03a1a1b30cc58c9bd2cbe25bf5e40b1f1d16d52d44ddefb3af50435d1ed613c"}, - {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1be8081306a4beb12444ed8e3208e1eb6c01ed207c471b33009c13504c88139"}, - {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:933b40722cbca9b1123a5bb2fb4bafafd234deae0f3481125cb6b6fa1d39aa84"}, - {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054b5022f9bf15a5f4663a7cd190f466e70a2d7b8d45429d8742c515b556c10"}, - {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61744760ee046c9a268cb801ca21bfe44c4873db9901a7cd0f3ca8830205feff"}, - {file = "clickhouse_driver-0.2.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5e28427e05a72e7a4c3672e36703a2d80107ee0b3ab537e3380d726c96b07821"}, - {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c483f5ec836ae87803478f2a7b9daf15343078edd6a8be7364dd9db64905bbd0"}, - {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28220b794874e68bc2f06dbfff5748f1c5a3236922f59e127abd58d44ae20a3f"}, - {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c09877b59b34d5b3043ad70ec31543173cac8b64b4a8afaa89416b22fb28da5"}, - {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3580f78db27119f7380627873214ae1342066f1ecb35700c1d7bf418dd70ae73"}, - {file = "clickhouse_driver-0.2.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0842ac1b2f7a9ca46dac2027849b241bccd8eb8ff1c59cb0a5874042b267b733"}, - {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7a3fb585e2d3514196258a4a3b0267510c03477f3c2380239ade4c056ba689a7"}, - {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ea25287566d45efbaee0857ad25e8b33ffd7fd73e89424d79fe7f532962915"}, - {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee4a4935667b59b4816a5ca77300f5dbe5a7416860551d17376426b8fefc1175"}, - {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:358058cfceea9b43c4af9de81842563746f16984b34525a15b41eacf8fc2bed2"}, - {file = "clickhouse_driver-0.2.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ae760fb843dec0b5c398536ca8dfaf243f494ba8fc68132ae1bd62004b0c396a"}, +python-versions = "<4,>=3.7" +files = [ + {file = "clickhouse-driver-0.2.8.tar.gz", hash = "sha256:844b3080e558acbacd42ee569ec83ca7aaa3728f7077b9314c8d09aaa393d752"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3a3a708e020ed2df59e424631f1822ffef4353912fcee143f3b7fc34e866621d"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d258d3c3ac0f03527e295eeaf3cebb0a976bc643f6817ccd1d0d71ce970641b4"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f63fb64a55dea29ed6a7d1d6805ebc95c37108c8a36677bc045d904ad600828"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b16d5dbd53fe32a99d3c4ab6c478c8aa9ae02aec5a2bd2f24180b0b4c03e1a5"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad2e1850ce91301ae203bc555fb83272dfebb09ad4df99db38c608d45fc22fa4"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ae9239f61a18050164185ec0a3e92469d084377a66ae033cc6b4efa15922867"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8f222f2577bf304e86eec73dbca9c19d7daa6abcafc0bef68bbf31dd461890b"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:451ac3de1191531d030751b05f122219b93b3c509e781fad81c2c91f0e9256b6"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5a2c4fea88e91f1d5217b760ffea84631e647d8db2265b821cbe7b0e015c7807"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:19825a3044c48ab65dc6659eb9763e2f0821887bdd9ee14a2f9ae8c539281ebf"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ae13044a10015225297868658a6f1843c2e34b9fcaa6268880e25c4fca9f3c4d"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:548a77efb86012800e76db6d45b3dcffea9a1a26fa3d5fd42021298f0b9a6f16"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-win32.whl", hash = "sha256:ebe4328eaaf937365114b5bab5626600ee57e57d4d099ba2ddbae48c2493f73d"}, + {file = "clickhouse_driver-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:7beaeb4d7e6c3aba7e02375eeca85b20cc8e54dc31fcdb25d3c4308f2cd9465f"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e06ef6bb701c8e42a9c686d77ad30805cf431bb79fa8fe0f4d3dee819e9a12c"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4afbcfa557419ed1783ecde3abbee1134e09b26c3ab0ada5b2118ae587357c2b"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85f628b4bf6db0fe8fe13da8576a9b95c23b463dff59f4c7aa58cedf529d7d97"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:036f4b3283796ca51610385c7b24bdac1bb873f8a2e97a179f66544594aa9840"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c8916d3d324ce8fd31f8dedd293dc2c29204b94785a5398d1ec1e7ea4e16a26"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30bee7cddd85c04ec49c753b53580364d907cc05c44daafe31b924a352e5e525"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03c8a844f6b128348d099dc5d75fad70f4e85802d1649c1b835916ac94ae750a"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:33965329393fd7740b445758787ddacdf70f35fa3411f98a1a86918fff679a46"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8cf85a7ebb0a56182c5b659602e20bae6b36c48a0edf518a6e6f56042d3fcee0"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c10fd1f921ff82638cb9513b9b4acfb575b421c44ef6bf6cf57ee3c487b9d538"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0a30d49bb6c34e3f5fe42e43dd6a7da0523ddfd05834ef02bd70b9363ea7de7e"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ea32c377a347b0801fc7f2b242f2ec7d78df58047097352672d0de5fbfa9e390"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-win32.whl", hash = "sha256:2a85529d1c0c3f2eedf7a4f736d0efc6e6c8032ac90ca5a63f7a067db58384fe"}, + {file = "clickhouse_driver-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:1f438f83a7473ce7fe9c16cda8750e2fdda1b09fb87f0ec6b87a2b89acb13f24"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9b71bbef6ee08252cee0593329c8ca8e623547627807d38195331f476eaf8136"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f30b3dd388f28eb4052851effe671354db55aea87de748aaf607e7048f72413e"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3bb27ce7ca61089c04dc04dbf207c9165d62a85eb9c99d1451fd686b6b773f9"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59c04ec0b45602b6a63e0779ca7c3d3614be4710ec5ac7214da1b157d43527c5"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a61b14244993c7e0f312983455b7851576a85ab5a9fcc6374e75d2680a985e76"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99a1b0b7759ccd1bf44c65210543c228ba704e3153014fd3aabfe56a227b1a5"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f14d860088ab2c7eeb3782c9490ad3f6bf6b1e9235e9db9c3b0079cd4751ffa"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:303887a14a71faddcdee150bc8cde498c25c446b0a72ae586bd67d0c366dbff5"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:359814e4f989c138bfb83e3c81f8f88c8449721dcf32cb8cc25fdb86f4b53c99"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:42de61b4cf9053698b14dbe29e1e3d78cb0a7aaef874fd854df390de5c9cc1f1"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:3bf3089f220480e5a69cbec79f3b65c23afb5c2836e7285234140e5f237f2768"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:41daa4ae5ada22f10c758b0b3b477a51f5df56eef8569cff8e2275de6d9b1b96"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-win32.whl", hash = "sha256:03ea71c7167c6c38c3ba2bbed43615ce0c41ebf3bfa28d96ffcd93cd1cdd07d8"}, + {file = "clickhouse_driver-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:76985286e10adb2115da116ae25647319bc485ad9e327cbc27296ccf0b052180"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:271529124914c439a5bbcf8a90e3101311d60c1813e03c0467e01fbabef489ee"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8f499746bc027c6d05de09efa7b2e4f2241f66c1ac2d6b7748f90709b00e10"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f29f256520bb718c532e7fcd85250d4001f49acbaa9e6896bdf4a70d5557e2ef"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:104d062bdf7eab74e92efcbf72088b3241365242b4f119b3fe91057c4d80825c"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee34ed08592a6eff5e176f42897c6ab4dfd8c07df16e9f392e18f1f2ee3fe3ca"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5be9a8d89de881d5ea9d46f9d293caa72dbc7f40b105374cafd88f52b2099ea"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c57efc768fa87e83d6778e7bbd180dd1ff5d647044983ec7d238a8577bd25fa5"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e1a003475f2d54e9fea8de86b57bc26b409c9efea3d298409ab831f194d62c3b"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fba71cf41934a23156290a70ef794a5dadc642b21cc25eb13e1f99f2512c8594"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7289b0e9d1019fed418c577963edd66770222554d1da0c491ca436593667256e"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:16e810cc9be18fdada545b9a521054214dd607bb7aa2f280ca488da23a077e48"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:ed4a6590015f18f414250149255dc2ae81ae956b6e670b290d52c2ecb61ed517"}, + {file = "clickhouse_driver-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9d454f16ccf1b2185cc630f6fb2160b1abde27759c4e94c42e30b9ea911d58f0"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2e487d49c24448873a6802c34aa21858b9e3fb4a2605268a980a5c02b54a6bae"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e877de75b97ddb11a027a7499171ea0aa9cad569b18fce53c9d508353000cfae"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c60dcefddf6e2c65c92b7e6096c222ff6ed73b01b6c5712f9ce8a23f2ec80f1a"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:422cbbabfad3f9b533d9f517f6f4e174111a613cba878402f7ef632b0eadec3a"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ff8a8e25ff6051ff3d0528dbe36305b0140075d2fa49432149ee2a7841f23ed"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19c7a5960d4f7f9a8f9a560ae05020ff5afe874b565cce06510586a0096bb626"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b3333257b46f307b713ba507e4bf11b7531ba3765a4150924532298d645ffd"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bbc2252a697c674e1b8b6123cf205d2b15979eddf74e7ada0e62a0ecc81a75c3"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af7f1a9a99dafb0f2a91d1a2d4a3e37f86076147d59abbe69b28d39308fe20fb"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:580c34cc505c492a8abeacbd863ce46158643bece914d8fe2fadea0e94c4e0c1"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5b905eaa6fd3b453299f946a2c8f4a6392f379597e51e46297c6a37699226cda"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6e2b5891c52841aedf803b8054085eb8a611ad4bf57916787a1a9aabf618fb77"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-win32.whl", hash = "sha256:b58a5612db8b3577dc2ae6fda4c783d61c2376396bb364545530aa6a767f166d"}, + {file = "clickhouse_driver-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:96b0424bb5dd698c10b899091562a78f4933a9a039409f310fb74db405d73854"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22cbed52daa584ca9a93efd772ee5c8c1f68ceaaeb21673985004ec2fd411c49"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e36156fe8a355fc830cc0ea1267c804c631c9dbd9b6accdca868a426213e5929"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c1341325f4180e1318d0d2cf0b268008ea250715c6f30a5ccce586860c000b5"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb52161276f7d77d4af09f1aab97a16edf86014a89e3d9923f0a6b8fdaa12438"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d1ccd47040c0a8753684a20a0f83b8a0820386889fdf460a3248e0eed142032"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcda48e938d011e5f4dcebf965e6ec19e020e8efa207b98eeb99c12fa873236d"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2252ab3f8b3bbd705e1d7dc80395c7bea14f5ae51a268fc7be5328da77c0e200"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e1b9ef3fa0cc6c9de77daa74a2f183186d0b5556c4f6870fc966a41fde6cae2b"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d0afa3c68fed6b5e6f23eb3f053d3aba86d09dbbc7706a0120ab5595d5c37003"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:102027bb687ff7a978f7110348f39f0dce450ab334787edbc64b8a9927238e32"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:9fc1ae52a171ded7d9f1f971b9b5bb0ce4d0490a54e102f3717cea51011d0308"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5a62c691be83b1da72ff3455790b50b0f894b7932ac962a8133f3f9c04c943b3"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-win32.whl", hash = "sha256:8b5068cef07cfba5be25a9a461c010ce7a0fe2de5b0b0262c6030684f43fa7f5"}, + {file = "clickhouse_driver-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:cd71965d00b0f3ba992652d577b1d46b87100a67b3e0dc5c191c88092e484c81"}, + {file = "clickhouse_driver-0.2.8-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4db0812c43f67e7b1805c05e2bc08f7d670ddfd8d8c671c9b47cdb52f4f74129"}, + {file = "clickhouse_driver-0.2.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56622ffefe94a82d9a30747e3486819104d1310d7a94f0e37da461d7112e9864"}, + {file = "clickhouse_driver-0.2.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c47c8ed61b2f35bb29d991f66d6e03d5cc786def56533480331b2a584854dd5"}, + {file = "clickhouse_driver-0.2.8-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dec001a1a49b993522dd134d2fca161352f139d42edcda0e983b8ea8f5023cda"}, + {file = "clickhouse_driver-0.2.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c03bd486540a6c03aa5a164b7ec6c50980df9642ab1ce22cb70327e4090bdc60"}, + {file = "clickhouse_driver-0.2.8-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c059c3da454f0cc0a6f056b542a0c1784cd0398613d25326b11fd1c6f9f7e8d2"}, + {file = "clickhouse_driver-0.2.8-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc7f9677c637b710046ec6c6c0cab25b4c4ff21620e44f462041d7455e9e8d13"}, + {file = "clickhouse_driver-0.2.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3f6b8fdd7a2e6a831ebbcaaf346f7c8c5eb5085a350c9d4d1ce7053a050b70"}, + {file = "clickhouse_driver-0.2.8-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c2db3ae29950c80837d270b5ab63c74597afce226b474930060cac7969287b"}, + {file = "clickhouse_driver-0.2.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b7767019a301dad314e7b515046535a45eda84bd9c29590bc3e99b1c334f69e7"}, + {file = "clickhouse_driver-0.2.8-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba8b8b80fa8850546aa40acc952835b1f149af17182cdf3db4f2133b2a241fe8"}, + {file = "clickhouse_driver-0.2.8-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:924f11e87e3dcbbc1c9e8158af9917f182cd5e96d37385485d6268f59b564142"}, + {file = "clickhouse_driver-0.2.8-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c39e1477ad310a4d276db17c1e1cf6fb059c29eb8d21351afefd5a22de381c6"}, + {file = "clickhouse_driver-0.2.8-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e950b9a63af5fa233e3da0e57a7ebd85d4b319e65eef5f9daac84532836f4123"}, + {file = "clickhouse_driver-0.2.8-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0698dc57373b2f42f3a95bd419d9fa07f2d02150f13a0db2909a2651208262b9"}, + {file = "clickhouse_driver-0.2.8-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e0694ca2fb459c23e44036d975fe89544a7c9918618b5d8bda9a8aa2d24e5c37"}, + {file = "clickhouse_driver-0.2.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62620348aeae5a905ccb8f7e6bff8d76aae9a95d81aa8c8f6fce0f2af7e104b8"}, + {file = "clickhouse_driver-0.2.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66276fd5092cccdd6f3123df4357a068fb1972b7e2622fab6f235948c50b6eed"}, + {file = "clickhouse_driver-0.2.8-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f86fe87327662b597824d0d7505cc600b0919473b22bbbd178a1a4d4e29283e1"}, + {file = "clickhouse_driver-0.2.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:54b9c6ff0aaabdcf7e80a6d9432459611b3413d6a66bec41cbcdad7212721cc7"}, ] [package.dependencies] @@ -1583,22 +1583,22 @@ files = [ [[package]] name = "duckduckgo-search" -version = "6.1.5" +version = "6.1.6" description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." optional = false python-versions = ">=3.8" files = [ - {file = "duckduckgo_search-6.1.5-py3-none-any.whl", hash = "sha256:f0a18fe5f20323ba6bb11865ce32d4520bb90086a6ae62f5da510865f5a7dca8"}, - {file = "duckduckgo_search-6.1.5.tar.gz", hash = "sha256:10e5c4d09a4243fd9d85007dc4fe637456c3c3995fd2e1e9b49ffd6f75bb0afb"}, + {file = "duckduckgo_search-6.1.6-py3-none-any.whl", hash = "sha256:6139ab17579e96ca7c5ed9398365245a36ecca8e7432545e3115ef90a9304eb7"}, + {file = "duckduckgo_search-6.1.6.tar.gz", hash = "sha256:42c83d58f4f1d717a580b89cc86861cbae59e46e75288243776c53349d006bf1"}, ] [package.dependencies] click = ">=8.1.7" -orjson = ">=3.10.3" +orjson = ">=3.10.4" pyreqwest-impersonate = ">=0.4.7" [package.extras] -dev = ["mypy (>=1.10.0)", "pytest (>=8.2.0)", "pytest-asyncio (>=0.23.6)", "ruff (>=0.4.4)"] +dev = ["mypy (>=1.10.0)", "pytest (>=8.2.2)", "pytest-asyncio (>=0.23.7)", "ruff (>=0.4.8)"] lxml = ["lxml (>=5.2.2)"] [[package]] @@ -4885,47 +4885,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.15" +version = "1.10.16" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22ed12ee588b1df028a2aa5d66f07bf8f8b4c8579c2e96d5a9c1f96b77f3bb55"}, - {file = "pydantic-1.10.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:75279d3cac98186b6ebc2597b06bcbc7244744f6b0b44a23e4ef01e5683cc0d2"}, - {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50f1666a9940d3d68683c9d96e39640f709d7a72ff8702987dab1761036206bb"}, - {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82790d4753ee5d00739d6cb5cf56bceb186d9d6ce134aca3ba7befb1eedbc2c8"}, - {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d207d5b87f6cbefbdb1198154292faee8017d7495a54ae58db06762004500d00"}, - {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e49db944fad339b2ccb80128ffd3f8af076f9f287197a480bf1e4ca053a866f0"}, - {file = "pydantic-1.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:d3b5c4cbd0c9cb61bbbb19ce335e1f8ab87a811f6d589ed52b0254cf585d709c"}, - {file = "pydantic-1.10.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3d5731a120752248844676bf92f25a12f6e45425e63ce22e0849297a093b5b0"}, - {file = "pydantic-1.10.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c365ad9c394f9eeffcb30a82f4246c0006417f03a7c0f8315d6211f25f7cb654"}, - {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3287e1614393119c67bd4404f46e33ae3be3ed4cd10360b48d0a4459f420c6a3"}, - {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be51dd2c8596b25fe43c0a4a59c2bee4f18d88efb8031188f9e7ddc6b469cf44"}, - {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6a51a1dd4aa7b3f1317f65493a182d3cff708385327c1c82c81e4a9d6d65b2e4"}, - {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4e316e54b5775d1eb59187f9290aeb38acf620e10f7fd2f776d97bb788199e53"}, - {file = "pydantic-1.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:0d142fa1b8f2f0ae11ddd5e3e317dcac060b951d605fda26ca9b234b92214986"}, - {file = "pydantic-1.10.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7ea210336b891f5ea334f8fc9f8f862b87acd5d4a0cbc9e3e208e7aa1775dabf"}, - {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3453685ccd7140715e05f2193d64030101eaad26076fad4e246c1cc97e1bb30d"}, - {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bea1f03b8d4e8e86702c918ccfd5d947ac268f0f0cc6ed71782e4b09353b26f"}, - {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:005655cabc29081de8243126e036f2065bd7ea5b9dff95fde6d2c642d39755de"}, - {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:af9850d98fc21e5bc24ea9e35dd80a29faf6462c608728a110c0a30b595e58b7"}, - {file = "pydantic-1.10.15-cp37-cp37m-win_amd64.whl", hash = "sha256:d31ee5b14a82c9afe2bd26aaa405293d4237d0591527d9129ce36e58f19f95c1"}, - {file = "pydantic-1.10.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e09c19df304b8123938dc3c53d3d3be6ec74b9d7d0d80f4f4b5432ae16c2022"}, - {file = "pydantic-1.10.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7ac9237cd62947db00a0d16acf2f3e00d1ae9d3bd602b9c415f93e7a9fc10528"}, - {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:584f2d4c98ffec420e02305cf675857bae03c9d617fcfdc34946b1160213a948"}, - {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbc6989fad0c030bd70a0b6f626f98a862224bc2b1e36bfc531ea2facc0a340c"}, - {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d573082c6ef99336f2cb5b667b781d2f776d4af311574fb53d908517ba523c22"}, - {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6bd7030c9abc80134087d8b6e7aa957e43d35714daa116aced57269a445b8f7b"}, - {file = "pydantic-1.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:3350f527bb04138f8aff932dc828f154847fbdc7a1a44c240fbfff1b57f49a12"}, - {file = "pydantic-1.10.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:51d405b42f1b86703555797270e4970a9f9bd7953f3990142e69d1037f9d9e51"}, - {file = "pydantic-1.10.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a980a77c52723b0dc56640ced396b73a024d4b74f02bcb2d21dbbac1debbe9d0"}, - {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f1a1fb467d3f49e1708a3f632b11c69fccb4e748a325d5a491ddc7b5d22383"}, - {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:676ed48f2c5bbad835f1a8ed8a6d44c1cd5a21121116d2ac40bd1cd3619746ed"}, - {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:92229f73400b80c13afcd050687f4d7e88de9234d74b27e6728aa689abcf58cc"}, - {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2746189100c646682eff0bce95efa7d2e203420d8e1c613dc0c6b4c1d9c1fde4"}, - {file = "pydantic-1.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:394f08750bd8eaad714718812e7fab615f873b3cdd0b9d84e76e51ef3b50b6b7"}, - {file = "pydantic-1.10.15-py3-none-any.whl", hash = "sha256:28e552a060ba2740d0d2aabe35162652c1459a0b9069fe0db7f4ee0e18e74d58"}, - {file = "pydantic-1.10.15.tar.gz", hash = "sha256:ca832e124eda231a60a041da4f013e3ff24949d94a01154b137fc2f2a43c3ffb"}, + {file = "pydantic-1.10.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1a539ac40551b01a85e899829aa43ca8036707474af8d74b48be288d4d2d2846"}, + {file = "pydantic-1.10.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a4fcc7b0b8038dbda2dda642cff024032dfae24a7960cc58e57a39eb1949b9b"}, + {file = "pydantic-1.10.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4660dd697de1ae2d4305a85161312611f64d5360663a9ba026cd6ad9e3fe14c3"}, + {file = "pydantic-1.10.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:900a787c574f903a97d0bf52a43ff3b6cf4fa0119674bcfc0e5fd1056d388ad9"}, + {file = "pydantic-1.10.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d30192a63e6d3334c3f0c0506dd6ae9f1dce7b2f8845518915291393a5707a22"}, + {file = "pydantic-1.10.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:16cf23ed599ca5ca937e37ba50ab114e6b5c387eb43a6cc533701605ad1be611"}, + {file = "pydantic-1.10.16-cp310-cp310-win_amd64.whl", hash = "sha256:8d23111f41d1e19334edd51438fd57933f3eee7d9d2fa8cc3f5eda515a272055"}, + {file = "pydantic-1.10.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef287b8d7fc0e86a8bd1f902c61aff6ba9479c50563242fe88ba39692e98e1e0"}, + {file = "pydantic-1.10.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b9ded699bfd3b3912d796ff388b0c607e6d35d41053d37aaf8fd6082c660de9a"}, + {file = "pydantic-1.10.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daeb199814333e4426c5e86d7fb610f4e230289f28cab90eb4de27330bef93cf"}, + {file = "pydantic-1.10.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5973843f1fa99ec6c3ac8d1a8698ac9340b35e45cca6c3e5beb5c3bd1ef15de6"}, + {file = "pydantic-1.10.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6b8a7788a8528a558828fe4a48783cafdcf2612d13c491594a8161dc721629c"}, + {file = "pydantic-1.10.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8abaecf54dacc9d991dda93c3b880d41092a8924cde94eeb811d7d9ab55df7d8"}, + {file = "pydantic-1.10.16-cp311-cp311-win_amd64.whl", hash = "sha256:ddc7b682fbd23f051edc419dc6977e11dd2dbdd0cef9d05f0e15d1387862d230"}, + {file = "pydantic-1.10.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:067c2b5539f7839653ad8c3d1fc2f1343338da8677b7b2172abf3cd3fdc8f719"}, + {file = "pydantic-1.10.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d1fc943583c046ecad0ff5d6281ee571b64e11b5503d9595febdce54f38b290"}, + {file = "pydantic-1.10.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18548b30ccebe71d380b0886cc44ea5d80afbcc155e3518792f13677ad06097d"}, + {file = "pydantic-1.10.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4e92292f9580fc5ea517618580fac24e9f6dc5657196e977c194a8e50e14f5a9"}, + {file = "pydantic-1.10.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5da8bc4bb4f85b8c97cc7f11141fddbbd29eb25e843672e5807e19cc3d7c1b7f"}, + {file = "pydantic-1.10.16-cp37-cp37m-win_amd64.whl", hash = "sha256:a04ee1ea34172b87707a6ecfcdb120d7656892206b7c4dbdb771a73e90179fcb"}, + {file = "pydantic-1.10.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4fa86469fd46e732242c7acb83282d33f83591a7e06f840481327d5bf6d96112"}, + {file = "pydantic-1.10.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:89c2783dc261726fe7a5ce1121bce29a2f7eb9b1e704c68df2b117604e3b346f"}, + {file = "pydantic-1.10.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78e59fa919fa7a192f423d190d8660c35dd444efa9216662273f36826765424b"}, + {file = "pydantic-1.10.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7e82a80068c77f4b074032e031e642530b6d45cb8121fc7c99faa31fb6c6b72"}, + {file = "pydantic-1.10.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d82d5956cee27a30e26a5b88d00a6a2a15a4855e13c9baf50175976de0dc282c"}, + {file = "pydantic-1.10.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b7b99424cc0970ff08deccb549b5a6ec1040c0b449eab91723e64df2bd8fdca"}, + {file = "pydantic-1.10.16-cp38-cp38-win_amd64.whl", hash = "sha256:d97a35e1ba59442775201657171f601a2879e63517a55862a51f8d67cdfc0017"}, + {file = "pydantic-1.10.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9d91f6866fd3e303c632207813ef6bc4d86055e21c5e5a0a311983a9ac5f0192"}, + {file = "pydantic-1.10.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d8d3c71d14c8bd26d2350c081908dbf59d5a6a8f9596d9ef2b09cc1e61c8662b"}, + {file = "pydantic-1.10.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b73e6386b439b4881d79244e9fc1e32d1e31e8d784673f5d58a000550c94a6c0"}, + {file = "pydantic-1.10.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f039881fb2ef86f6de6eacce6e71701b47500355738367413ccc1550b2a69cf"}, + {file = "pydantic-1.10.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3895ddb26f22bdddee7e49741486aa7b389258c6f6771943e87fc00eabd79134"}, + {file = "pydantic-1.10.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55b945da2756b5cef93d792521ad0d457fdf2f69fd5a2d10a27513f5281717dd"}, + {file = "pydantic-1.10.16-cp39-cp39-win_amd64.whl", hash = "sha256:22dd265c77c3976a34be78409b128cb84629284dfd1b69d2fa1507a36f84dc8b"}, + {file = "pydantic-1.10.16-py3-none-any.whl", hash = "sha256:aa2774ba5412fd1c5cb890d08e8b0a3bb5765898913ba1f61a65a4810f03cf29"}, + {file = "pydantic-1.10.16.tar.gz", hash = "sha256:8bb388f6244809af69ee384900b10b677a69f1980fdc655ea419710cffcb5610"}, ] [package.dependencies] @@ -6448,6 +6448,34 @@ files = [ [package.extras] doc = ["reno", "sphinx", "tornado (>=4.5)"] +[[package]] +name = "tencentcloud-sdk-python-common" +version = "3.0.1166" +description = "Tencent Cloud Common SDK for Python" +optional = false +python-versions = "*" +files = [ + {file = "tencentcloud-sdk-python-common-3.0.1166.tar.gz", hash = "sha256:7e20a98f94cd82302f4f9a6c28cd1d1d90e1043767a9ff98eebe10def84ec7b9"}, + {file = "tencentcloud_sdk_python_common-3.0.1166-py2.py3-none-any.whl", hash = "sha256:e230159b275427c0ff95bd708df2ad625ab4a45ff495d9a89d4199d535ce68e9"}, +] + +[package.dependencies] +requests = ">=2.16.0" + +[[package]] +name = "tencentcloud-sdk-python-hunyuan" +version = "3.0.1166" +description = "Tencent Cloud Hunyuan SDK for Python" +optional = false +python-versions = "*" +files = [ + {file = "tencentcloud-sdk-python-hunyuan-3.0.1166.tar.gz", hash = "sha256:9be5f6ca91facdc40da91a0b9c300a0c54a83cf3792305d0e83c4216ca2a2e18"}, + {file = "tencentcloud_sdk_python_hunyuan-3.0.1166-py2.py3-none-any.whl", hash = "sha256:572d41d034a68a898ac74dd4d92f6b764cdb2b993cf71e6fbc52a40e65b0b4b4"}, +] + +[package.dependencies] +tencentcloud-sdk-python-common = "3.0.1166" + [[package]] name = "threadpoolctl" version = "3.5.0" @@ -7523,4 +7551,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "f0a99f84a0dc46b22eaea2344f205fda66f1e99be10806749492e12a7bcf66cf" +content-hash = "014b13a1202e835c1bb52f033d389eb7076d4632ec4e4b4b78f976d33663d6d5" diff --git a/api/pyproject.toml b/api/pyproject.toml index 9f4c578322684b..bd4984207371dc 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -178,6 +178,7 @@ tidb-vector = "0.0.9" google-cloud-aiplatform = "1.49.0" vanna = {version = "0.5.5", extras = ["postgres", "mysql", "clickhouse", "duckdb"]} kaleido = "0.2.1" +tencentcloud-sdk-python-hunyuan = "~3.0.1158" [tool.poetry.group.dev] optional = true From d6fa130cb54dd769cb049c6fa83f131ae0a8b0a5 Mon Sep 17 00:00:00 2001 From: "Charlie.Wei" Date: Thu, 13 Jun 2024 08:05:55 +0800 Subject: [PATCH 34/70] remove dalle3 seed (#5136) Co-authored-by: luowei Co-authored-by: crazywoola <427733928@qq.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> --- .../tools/provider/builtin/dalle/tools/dalle3.py | 6 ------ .../tools/provider/builtin/dalle/tools/dalle3.yaml | 13 ------------- 2 files changed, 19 deletions(-) diff --git a/api/core/tools/provider/builtin/dalle/tools/dalle3.py b/api/core/tools/provider/builtin/dalle/tools/dalle3.py index 45a289ddf8c80f..61609947faf40b 100644 --- a/api/core/tools/provider/builtin/dalle/tools/dalle3.py +++ b/api/core/tools/provider/builtin/dalle/tools/dalle3.py @@ -54,9 +54,6 @@ def _invoke(self, style = tool_parameters.get('style', 'vivid') if style not in ['natural', 'vivid']: return self.create_text_message('Invalid style') - # set extra body - seed_id = tool_parameters.get('seed_id', self._generate_random_id(8)) - extra_body = {'seed': seed_id} # call openapi dalle3 response = client.images.generate( @@ -64,7 +61,6 @@ def _invoke(self, model='dall-e-3', size=size, n=n, - extra_body=extra_body, style=style, quality=quality, response_format='b64_json' @@ -76,8 +72,6 @@ def _invoke(self, result.append(self.create_blob_message(blob=b64decode(image.b64_json), meta={'mime_type': 'image/png'}, save_as=self.VARIABLE_KEY.IMAGE.value)) - result.append(self.create_text_message(f'\nGenerate image source to Seed ID: {seed_id}')) - return result @staticmethod diff --git a/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml b/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml index b07a17212e9b63..7ba5c56889c7e4 100644 --- a/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml +++ b/api/core/tools/provider/builtin/dalle/tools/dalle3.yaml @@ -29,19 +29,6 @@ parameters: pt_BR: Image prompt, you can check the official documentation of DallE 3 llm_description: Image prompt of DallE 3, you should describe the image you want to generate as a list of words as possible as detailed form: llm - - name: seed_id - type: string - required: false - label: - en_US: Seed ID - zh_Hans: 种子ID - pt_BR: ID da semente - human_description: - en_US: Image generation seed ID to ensure consistency of series generated images - zh_Hans: 图像生成种子ID,确保系列生成图像的一致性 - pt_BR: ID de semente de geração de imagem para garantir a consistência das imagens geradas em série - llm_description: If the user requests image consistency, extract the seed ID from the user's question or context.The seed id consists of an 8-bit string containing uppercase and lowercase letters and numbers - form: llm - name: size type: select required: true From 79e848994287d3703ba51590895cf5399e31fd18 Mon Sep 17 00:00:00 2001 From: orangeclk Date: Thu, 13 Jun 2024 12:59:41 +0800 Subject: [PATCH 35/70] feat: support siliconflow (#5129) --- .../model_providers/_position.yaml | 1 + .../siliconflow/_assets/siliconflow.svg | 1 + .../_assets/siliconflow_square.svg | 1 + .../siliconflow/llm/_position.yaml | 8 +++++ .../siliconflow/llm/deepseek-v2-chat.yaml | 32 +++++++++++++++++++ .../siliconflow/llm/glm4-9b-chat.yaml | 32 +++++++++++++++++++ .../model_providers/siliconflow/llm/llm.py | 25 +++++++++++++++ .../llm/qwen2-57b-a14b-instruct.yaml | 32 +++++++++++++++++++ .../siliconflow/llm/qwen2-72b-instruct.yaml | 32 +++++++++++++++++++ .../siliconflow/llm/qwen2-7b-instruct.yaml | 32 +++++++++++++++++++ .../siliconflow/llm/yi-1.5-34b-chat.yaml | 32 +++++++++++++++++++ .../siliconflow/llm/yi-1.5-6b-chat.yaml | 32 +++++++++++++++++++ .../siliconflow/llm/yi-1.5-9b-chat.yaml | 32 +++++++++++++++++++ .../siliconflow/siliconflow.py | 29 +++++++++++++++++ .../siliconflow/siliconflow.yaml | 29 +++++++++++++++++ 15 files changed, 350 insertions(+) create mode 100644 api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow.svg create mode 100644 api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow_square.svg create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/_position.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/deepseek-v2-chat.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/glm4-9b-chat.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/llm.py create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/qwen2-57b-a14b-instruct.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/qwen2-72b-instruct.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/qwen2-7b-instruct.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-34b-chat.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-6b-chat.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-9b-chat.yaml create mode 100644 api/core/model_runtime/model_providers/siliconflow/siliconflow.py create mode 100644 api/core/model_runtime/model_providers/siliconflow/siliconflow.yaml diff --git a/api/core/model_runtime/model_providers/_position.yaml b/api/core/model_runtime/model_providers/_position.yaml index 21eea7ef3bfb02..da654d21741d88 100644 --- a/api/core/model_runtime/model_providers/_position.yaml +++ b/api/core/model_runtime/model_providers/_position.yaml @@ -32,3 +32,4 @@ - openai_api_compatible - deepseek - hunyuan +- siliconflow diff --git a/api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow.svg b/api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow.svg new file mode 100644 index 00000000000000..16e406f030225b --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow_square.svg b/api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow_square.svg new file mode 100644 index 00000000000000..ad6b384f7acd21 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/_assets/siliconflow_square.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/_position.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/_position.yaml new file mode 100644 index 00000000000000..20bb0790c2234e --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/_position.yaml @@ -0,0 +1,8 @@ +- deepseek-v2-chat +- qwen2-72b-instruct +- qwen2-57b-a14b-instruct +- qwen2-7b-instruct +- yi-1.5-34b-chat +- yi-1.5-9b-chat +- yi-1.5-6b-chat +- glm4-9B-chat diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/deepseek-v2-chat.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/deepseek-v2-chat.yaml new file mode 100644 index 00000000000000..da58e822f9018e --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/deepseek-v2-chat.yaml @@ -0,0 +1,32 @@ +model: deepseek-ai/deepseek-v2-chat +label: + en_US: deepseek-ai/deepseek-v2-chat +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 32768 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '1.33' + output: '1.33' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/glm4-9b-chat.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/glm4-9b-chat.yaml new file mode 100644 index 00000000000000..115fc50b943b94 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/glm4-9b-chat.yaml @@ -0,0 +1,32 @@ +model: zhipuai/glm4-9B-chat +label: + en_US: zhipuai/glm4-9B-chat +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 32768 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '0.6' + output: '0.6' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/llm.py b/api/core/model_runtime/model_providers/siliconflow/llm/llm.py new file mode 100644 index 00000000000000..a9ce7b98c35a39 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/llm.py @@ -0,0 +1,25 @@ +from collections.abc import Generator +from typing import Optional, Union + +from core.model_runtime.entities.llm_entities import LLMResult +from core.model_runtime.entities.message_entities import PromptMessage, PromptMessageTool +from core.model_runtime.model_providers.openai_api_compatible.llm.llm import OAIAPICompatLargeLanguageModel + + +class SiliconflowLargeLanguageModel(OAIAPICompatLargeLanguageModel): + def _invoke(self, model: str, credentials: dict, + prompt_messages: list[PromptMessage], model_parameters: dict, + tools: Optional[list[PromptMessageTool]] = None, stop: Optional[list[str]] = None, + stream: bool = True, user: Optional[str] = None) \ + -> Union[LLMResult, Generator]: + self._add_custom_parameters(credentials) + return super()._invoke(model, credentials, prompt_messages, model_parameters, tools, stop, stream) + + def validate_credentials(self, model: str, credentials: dict) -> None: + self._add_custom_parameters(credentials) + super().validate_credentials(model, credentials) + + @classmethod + def _add_custom_parameters(cls, credentials: dict) -> None: + credentials['mode'] = 'chat' + credentials['endpoint_url'] = 'https://api.siliconflow.cn/v1' diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-57b-a14b-instruct.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-57b-a14b-instruct.yaml new file mode 100644 index 00000000000000..75eca7720c2203 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-57b-a14b-instruct.yaml @@ -0,0 +1,32 @@ +model: alibaba/Qwen2-57B-A14B-Instruct +label: + en_US: alibaba/Qwen2-57B-A14B-Instruct +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 32768 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '1.26' + output: '1.26' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-72b-instruct.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-72b-instruct.yaml new file mode 100644 index 00000000000000..fcbc9e0b685bc2 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-72b-instruct.yaml @@ -0,0 +1,32 @@ +model: alibaba/Qwen2-72B-Instruct +label: + en_US: alibaba/Qwen2-72B-Instruct +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 32768 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '4.13' + output: '4.13' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-7b-instruct.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-7b-instruct.yaml new file mode 100644 index 00000000000000..eda1d40642d716 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/qwen2-7b-instruct.yaml @@ -0,0 +1,32 @@ +model: alibaba/Qwen2-7B-Instruct +label: + en_US: alibaba/Qwen2-7B-Instruct +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 32768 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '0.35' + output: '0.35' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-34b-chat.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-34b-chat.yaml new file mode 100644 index 00000000000000..6656e663e91008 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-34b-chat.yaml @@ -0,0 +1,32 @@ +model: 01-ai/Yi-1.5-34B-Chat +label: + en_US: 01-ai/Yi-1.5-34B-Chat +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 16384 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '1.26' + output: '1.26' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-6b-chat.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-6b-chat.yaml new file mode 100644 index 00000000000000..ba6e0c51134c0c --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-6b-chat.yaml @@ -0,0 +1,32 @@ +model: 01-ai/Yi-1.5-6B-Chat +label: + en_US: 01-ai/Yi-1.5-6B-Chat +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 4096 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '0.35' + output: '0.35' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-9b-chat.yaml b/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-9b-chat.yaml new file mode 100644 index 00000000000000..64be8998c55d7b --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/llm/yi-1.5-9b-chat.yaml @@ -0,0 +1,32 @@ +model: 01-ai/Yi-1.5-9B-Chat +label: + en_US: 01-ai/Yi-1.5-9B-Chat +model_type: llm +features: + - multi-tool-call + - agent-thought + - stream-tool-call +model_properties: + mode: chat + context_size: 16384 +parameter_rules: + - name: temperature + use_template: temperature + - name: max_tokens + use_template: max_tokens + type: int + default: 512 + min: 1 + max: 4096 + help: + zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。 + en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter. + - name: top_p + use_template: top_p + - name: frequency_penalty + use_template: frequency_penalty +pricing: + input: '0.42' + output: '0.42' + unit: '0.000001' + currency: RMB diff --git a/api/core/model_runtime/model_providers/siliconflow/siliconflow.py b/api/core/model_runtime/model_providers/siliconflow/siliconflow.py new file mode 100644 index 00000000000000..63f76fa8b58b03 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/siliconflow.py @@ -0,0 +1,29 @@ +import logging + +from core.model_runtime.entities.model_entities import ModelType +from core.model_runtime.errors.validate import CredentialsValidateFailedError +from core.model_runtime.model_providers.__base.model_provider import ModelProvider + +logger = logging.getLogger(__name__) + +class SiliconflowProvider(ModelProvider): + + def validate_provider_credentials(self, credentials: dict) -> None: + """ + Validate provider credentials + if validate failed, raise exception + + :param credentials: provider credentials, credentials form defined in `provider_credential_schema`. + """ + try: + model_instance = self.get_model_instance(ModelType.LLM) + + model_instance.validate_credentials( + model='deepseek-ai/deepseek-v2-chat', + credentials=credentials + ) + except CredentialsValidateFailedError as ex: + raise ex + except Exception as ex: + logger.exception(f'{self.get_provider_schema().provider} credentials validate failed') + raise ex diff --git a/api/core/model_runtime/model_providers/siliconflow/siliconflow.yaml b/api/core/model_runtime/model_providers/siliconflow/siliconflow.yaml new file mode 100644 index 00000000000000..cf44c185d59a21 --- /dev/null +++ b/api/core/model_runtime/model_providers/siliconflow/siliconflow.yaml @@ -0,0 +1,29 @@ +provider: siliconflow +label: + zh_Hans: 硅基流动 + en_US: SiliconFlow +icon_small: + en_US: siliconflow_square.svg +icon_large: + en_US: siliconflow.svg +background: "#ffecff" +help: + title: + en_US: Get your API Key from SiliconFlow + zh_Hans: 从 SiliconFlow 获取 API Key + url: + en_US: https://cloud.siliconflow.cn/keys +supported_model_types: + - llm +configurate_methods: + - predefined-model +provider_credential_schema: + credential_form_schemas: + - variable: api_key + label: + en_US: API Key + type: secret-input + required: true + placeholder: + zh_Hans: 在此输入您的 API Key + en_US: Enter your API Key From 742b08e1d5397ffea2e1b8bd169db66fb30b8dd2 Mon Sep 17 00:00:00 2001 From: smoky Date: Thu, 13 Jun 2024 13:04:51 +0800 Subject: [PATCH 36/70] chore: update question classifier prompt (#5137) Signed-off-by: 0xff-dev --- .../workflow/nodes/question_classifier/template_prompts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/core/workflow/nodes/question_classifier/template_prompts.py b/api/core/workflow/nodes/question_classifier/template_prompts.py index 23bd05a8094b63..e0de148cc2c08c 100644 --- a/api/core/workflow/nodes/question_classifier/template_prompts.py +++ b/api/core/workflow/nodes/question_classifier/template_prompts.py @@ -6,7 +6,7 @@ ### Task Your task is to assign one categories ONLY to the input text and only one category may be assigned returned in the output.Additionally, you need to extract the key words from the text that are related to the classification. ### Format - The input text is in the variable text_field.Categories are specified as a category list with two filed category_id and category_name in the variable categories .Classification instructions may be included to improve the classification accuracy. + The input text is in the variable input_text.Categories are specified as a category list with two filed category_id and category_name in the variable categories .Classification instructions may be included to improve the classification accuracy. ### Constraint DO NOT include anything other than the JSON array in your response. ### Memory @@ -56,7 +56,7 @@ ### Task Your task is to assign one categories ONLY to the input text and only one category may be assigned returned in the output. Additionally, you need to extract the key words from the text that are related to the classification. ### Format -The input text is in the variable text_field. Categories are specified as a category list with two filed category_id and category_name in the variable categories. Classification instructions may be included to improve the classification accuracy. +The input text is in the variable input_text. Categories are specified as a category list with two filed category_id and category_name in the variable categories. Classification instructions may be included to improve the classification accuracy. ### Constraint DO NOT include anything other than the JSON array in your response. ### Example From adc948e87c31c06f53522d5e398d20c98d734735 Mon Sep 17 00:00:00 2001 From: yanghx <30469680+yanghx-git@users.noreply.github.com> Date: Thu, 13 Jun 2024 05:08:30 +0000 Subject: [PATCH 37/70] fix(api/core/model_runtime/model_providers/baichuan,localai): Parse ToolPromptMessage. #4943 (#5138) Co-authored-by: -LAN- --- .../model_providers/baichuan/llm/llm.py | 46 ++++++--- .../model_providers/localai/llm/llm.py | 96 +++++++++++-------- 2 files changed, 88 insertions(+), 54 deletions(-) diff --git a/api/core/model_runtime/model_providers/baichuan/llm/llm.py b/api/core/model_runtime/model_providers/baichuan/llm/llm.py index 4278120093885a..edcd3af4203cfb 100644 --- a/api/core/model_runtime/model_providers/baichuan/llm/llm.py +++ b/api/core/model_runtime/model_providers/baichuan/llm/llm.py @@ -7,6 +7,7 @@ PromptMessage, PromptMessageTool, SystemPromptMessage, + ToolPromptMessage, UserPromptMessage, ) from core.model_runtime.errors.invoke import ( @@ -32,20 +33,21 @@ class BaichuanLarguageModel(LargeLanguageModel): - def _invoke(self, model: str, credentials: dict, - prompt_messages: list[PromptMessage], model_parameters: dict, - tools: list[PromptMessageTool] | None = None, stop: list[str] | None = None, + def _invoke(self, model: str, credentials: dict, + prompt_messages: list[PromptMessage], model_parameters: dict, + tools: list[PromptMessageTool] | None = None, stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ -> LLMResult | Generator: return self._generate(model=model, credentials=credentials, prompt_messages=prompt_messages, - model_parameters=model_parameters, tools=tools, stop=stop, stream=stream, user=user) + model_parameters=model_parameters, tools=tools, stop=stop, stream=stream, user=user) def get_num_tokens(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], tools: list[PromptMessageTool] | None = None) -> int: return self._num_tokens_from_messages(prompt_messages) - def _num_tokens_from_messages(self, messages: list[PromptMessage],) -> int: + def _num_tokens_from_messages(self, messages: list[PromptMessage], ) -> int: """Calculate num tokens for baichuan model""" + def tokens(text: str): return BaichuanTokenizer._get_num_tokens(text) @@ -85,9 +87,20 @@ def _convert_prompt_message_to_dict(self, message: PromptMessage) -> dict: elif isinstance(message, SystemPromptMessage): message = cast(SystemPromptMessage, message) message_dict = {"role": "user", "content": message.content} + elif isinstance(message, ToolPromptMessage): + # copy from core/model_runtime/model_providers/anthropic/llm/llm.py + message = cast(ToolPromptMessage, message) + message_dict = { + "role": "user", + "content": [{ + "type": "tool_result", + "tool_use_id": message.tool_call_id, + "content": message.content + }] + } else: raise ValueError(f"Unknown message type {type(message)}") - + return message_dict def validate_credentials(self, model: str, credentials: dict) -> None: @@ -106,13 +119,13 @@ def validate_credentials(self, model: str, credentials: dict) -> None: except Exception as e: raise CredentialsValidateFailedError(f"Invalid API key: {e}") - def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], - model_parameters: dict, tools: list[PromptMessageTool] | None = None, - stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ + def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + model_parameters: dict, tools: list[PromptMessageTool] | None = None, + stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ -> LLMResult | Generator: if tools is not None and len(tools) > 0: raise InvokeBadRequestError("Baichuan model doesn't support tools") - + instance = BaichuanModel( api_key=credentials['api_key'], secret_key=credentials.get('secret_key', '') @@ -129,11 +142,12 @@ def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptM ] # invoke model - response = instance.generate(model=model, stream=stream, messages=messages, parameters=model_parameters, timeout=60) + response = instance.generate(model=model, stream=stream, messages=messages, parameters=model_parameters, + timeout=60) if stream: return self._handle_chat_generate_stream_response(model, prompt_messages, credentials, response) - + return self._handle_chat_generate_response(model, prompt_messages, credentials, response) def _handle_chat_generate_response(self, model: str, @@ -141,7 +155,9 @@ def _handle_chat_generate_response(self, model: str, credentials: dict, response: BaichuanMessage) -> LLMResult: # convert baichuan message to llm result - usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=response.usage['prompt_tokens'], completion_tokens=response.usage['completion_tokens']) + usage = self._calc_response_usage(model=model, credentials=credentials, + prompt_tokens=response.usage['prompt_tokens'], + completion_tokens=response.usage['completion_tokens']) return LLMResult( model=model, prompt_messages=prompt_messages, @@ -158,7 +174,9 @@ def _handle_chat_generate_stream_response(self, model: str, response: Generator[BaichuanMessage, None, None]) -> Generator: for message in response: if message.usage: - usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=message.usage['prompt_tokens'], completion_tokens=message.usage['completion_tokens']) + usage = self._calc_response_usage(model=model, credentials=credentials, + prompt_tokens=message.usage['prompt_tokens'], + completion_tokens=message.usage['completion_tokens']) yield LLMResultChunk( model=model, prompt_messages=prompt_messages, diff --git a/api/core/model_runtime/model_providers/localai/llm/llm.py b/api/core/model_runtime/model_providers/localai/llm/llm.py index 2a3fbb5c570350..92c14449e44058 100644 --- a/api/core/model_runtime/model_providers/localai/llm/llm.py +++ b/api/core/model_runtime/model_providers/localai/llm/llm.py @@ -27,6 +27,7 @@ PromptMessage, PromptMessageTool, SystemPromptMessage, + ToolPromptMessage, UserPromptMessage, ) from core.model_runtime.entities.model_entities import ( @@ -51,13 +52,13 @@ class LocalAILanguageModel(LargeLanguageModel): - def _invoke(self, model: str, credentials: dict, - prompt_messages: list[PromptMessage], model_parameters: dict, - tools: list[PromptMessageTool] | None = None, stop: list[str] | None = None, + def _invoke(self, model: str, credentials: dict, + prompt_messages: list[PromptMessage], model_parameters: dict, + tools: list[PromptMessageTool] | None = None, stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ -> LLMResult | Generator: return self._generate(model=model, credentials=credentials, prompt_messages=prompt_messages, - model_parameters=model_parameters, tools=tools, stop=stop, stream=stream, user=user) + model_parameters=model_parameters, tools=tools, stop=stop, stream=stream, user=user) def get_num_tokens(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], tools: list[PromptMessageTool] | None = None) -> int: @@ -67,8 +68,9 @@ def get_num_tokens(self, model: str, credentials: dict, prompt_messages: list[Pr def _num_tokens_from_messages(self, messages: list[PromptMessage], tools: list[PromptMessageTool]) -> int: """ Calculate num tokens for baichuan model - LocalAI does not supports + LocalAI does not supports """ + def tokens(text: str): """ We cloud not determine which tokenizer to use, cause the model is customized. @@ -124,7 +126,7 @@ def tokens(text: str): num_tokens += self._num_tokens_for_tools(tools) return num_tokens - + def _num_tokens_for_tools(self, tools: list[PromptMessageTool]) -> int: """ Calculate num tokens for tool calling @@ -133,6 +135,7 @@ def _num_tokens_for_tools(self, tools: list[PromptMessageTool]) -> int: :param tools: tools for tool calling :return: number of tokens """ + def tokens(text: str): return self._get_num_tokens_by_gpt2(text) @@ -193,7 +196,7 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode completion_model = LLMMode.COMPLETION.value else: raise ValueError(f"Unknown completion type {credentials['completion_type']}") - + rules = [ ParameterRule( name='temperature', @@ -227,7 +230,7 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode ) ] - model_properties = { + model_properties = { ModelPropertyKey.MODE: completion_model, } if completion_model else {} @@ -246,11 +249,11 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode return entity - def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], - model_parameters: dict, tools: list[PromptMessageTool] | None = None, - stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ + def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], + model_parameters: dict, tools: list[PromptMessageTool] | None = None, + stop: list[str] | None = None, stream: bool = True, user: str | None = None) \ -> LLMResult | Generator: - + kwargs = self._to_client_kwargs(credentials) # init model client client = OpenAI(**kwargs) @@ -271,7 +274,7 @@ def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptM extra_model_kwargs['functions'] = [ helper.dump_model(tool) for tool in tools ] - + if completion_type == 'chat_completion': result = client.chat.completions.create( messages=[self._convert_prompt_message_to_dict(m) for m in prompt_messages], @@ -294,24 +297,24 @@ def _generate(self, model: str, credentials: dict, prompt_messages: list[PromptM if stream: if completion_type == 'completion': return self._handle_completion_generate_stream_response( - model=model, credentials=credentials, response=result, tools=tools, + model=model, credentials=credentials, response=result, tools=tools, prompt_messages=prompt_messages ) return self._handle_chat_generate_stream_response( - model=model, credentials=credentials, response=result, tools=tools, + model=model, credentials=credentials, response=result, tools=tools, prompt_messages=prompt_messages ) - + if completion_type == 'completion': return self._handle_completion_generate_response( - model=model, credentials=credentials, response=result, + model=model, credentials=credentials, response=result, prompt_messages=prompt_messages ) return self._handle_chat_generate_response( - model=model, credentials=credentials, response=result, tools=tools, + model=model, credentials=credentials, response=result, tools=tools, prompt_messages=prompt_messages ) - + def _to_client_kwargs(self, credentials: dict) -> dict: """ Convert invoke kwargs to client kwargs @@ -321,7 +324,7 @@ def _to_client_kwargs(self, credentials: dict) -> dict: """ if not credentials['server_url'].endswith('/'): credentials['server_url'] += '/' - + client_kwargs = { "timeout": Timeout(315.0, read=300.0, write=10.0, connect=5.0), "api_key": "1", @@ -351,9 +354,20 @@ def _convert_prompt_message_to_dict(self, message: PromptMessage) -> dict: elif isinstance(message, SystemPromptMessage): message = cast(SystemPromptMessage, message) message_dict = {"role": "system", "content": message.content} + elif isinstance(message, ToolPromptMessage): + # copy from core/model_runtime/model_providers/anthropic/llm/llm.py + message = cast(ToolPromptMessage, message) + message_dict = { + "role": "user", + "content": [{ + "type": "tool_result", + "tool_use_id": message.tool_call_id, + "content": message.content + }] + } else: raise ValueError(f"Unknown message type {type(message)}") - + return message_dict def _convert_prompt_message_to_completion_prompts(self, messages: list[PromptMessage]) -> str: @@ -373,14 +387,14 @@ def _convert_prompt_message_to_completion_prompts(self, messages: list[PromptMes prompts += f'{message.content}\n' else: raise ValueError(f"Unknown message type {type(message)}") - + return prompts def _handle_completion_generate_response(self, model: str, - prompt_messages: list[PromptMessage], - credentials: dict, - response: Completion, - ) -> LLMResult: + prompt_messages: list[PromptMessage], + credentials: dict, + response: Completion, + ) -> LLMResult: """ Handle llm chat response @@ -393,7 +407,7 @@ def _handle_completion_generate_response(self, model: str, """ if len(response.choices) == 0: raise InvokeServerUnavailableError("Empty response") - + assistant_message = response.choices[0].text # transform assistant message to prompt message @@ -407,7 +421,8 @@ def _handle_completion_generate_response(self, model: str, ) completion_tokens = self._num_tokens_from_messages(messages=[assistant_prompt_message], tools=[]) - usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=prompt_tokens, completion_tokens=completion_tokens) + usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens) response = LLMResult( model=model, @@ -436,7 +451,7 @@ def _handle_chat_generate_response(self, model: str, """ if len(response.choices) == 0: raise InvokeServerUnavailableError("Empty response") - + assistant_message = response.choices[0].message # convert function call to tool call @@ -452,7 +467,8 @@ def _handle_chat_generate_response(self, model: str, prompt_tokens = self._num_tokens_from_messages(messages=prompt_messages, tools=tools) completion_tokens = self._num_tokens_from_messages(messages=[assistant_prompt_message], tools=tools) - usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=prompt_tokens, completion_tokens=completion_tokens) + usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens) response = LLMResult( model=model, @@ -465,10 +481,10 @@ def _handle_chat_generate_response(self, model: str, return response def _handle_completion_generate_stream_response(self, model: str, - prompt_messages: list[PromptMessage], - credentials: dict, - response: Stream[Completion], - tools: list[PromptMessageTool]) -> Generator: + prompt_messages: list[PromptMessage], + credentials: dict, + response: Stream[Completion], + tools: list[PromptMessageTool]) -> Generator: full_response = '' for chunk in response: @@ -496,9 +512,9 @@ def _handle_completion_generate_stream_response(self, model: str, completion_tokens = self._num_tokens_from_messages(messages=[temp_assistant_prompt_message], tools=[]) - usage = self._calc_response_usage(model=model, credentials=credentials, + usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=prompt_tokens, completion_tokens=completion_tokens) - + yield LLMResultChunk( model=model, prompt_messages=prompt_messages, @@ -538,7 +554,7 @@ def _handle_chat_generate_stream_response(self, model: str, if delta.finish_reason is None and (delta.delta.content is None or delta.delta.content == ''): continue - + # check if there is a tool call in the response function_calls = None if delta.delta.function_call: @@ -562,9 +578,9 @@ def _handle_chat_generate_stream_response(self, model: str, prompt_tokens = self._num_tokens_from_messages(messages=prompt_messages, tools=tools) completion_tokens = self._num_tokens_from_messages(messages=[temp_assistant_prompt_message], tools=[]) - usage = self._calc_response_usage(model=model, credentials=credentials, + usage = self._calc_response_usage(model=model, credentials=credentials, prompt_tokens=prompt_tokens, completion_tokens=completion_tokens) - + yield LLMResultChunk( model=model, prompt_messages=prompt_messages, @@ -613,7 +629,7 @@ def _extract_response_tool_calls(self, ) tool_calls.append(tool_call) - return tool_calls + return tool_calls @property def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]: From a40f68cf94412f5918fa86ebc2fbd8b1cafc6f80 Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Thu, 13 Jun 2024 16:35:14 +0900 Subject: [PATCH 38/70] chore: update qdrant_vector.py (#5128) --- api/core/rag/datasource/vdb/qdrant/qdrant_vector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py b/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py index 6a77c135fff70a..49c0e2c985a4e4 100644 --- a/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py +++ b/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py @@ -128,7 +128,7 @@ def create_collection(self, collection_name: str, vector_size: int): # create doc_id payload index self._client.create_payload_index(collection_name, Field.DOC_ID.value, field_schema=PayloadSchemaType.KEYWORD) - # creat full text index + # create full text index text_index_params = TextIndexParams( type=TextIndexType.TEXT, tokenizer=TokenizerType.MULTILINGUAL, From 790543131ad529ddb7a9c0889109eae472b8e4ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=86=E8=90=8C=E9=97=B7=E6=B2=B9=E7=93=B6?= <253605712@qq.com> Date: Thu, 13 Jun 2024 16:30:47 +0800 Subject: [PATCH 39/70] chore:add some new api version for azure openai (#5142) --- .../model_providers/azure_openai/azure_openai.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/api/core/model_runtime/model_providers/azure_openai/azure_openai.yaml b/api/core/model_runtime/model_providers/azure_openai/azure_openai.yaml index b9f33a8ff29d0f..7e57c3ed2e2819 100644 --- a/api/core/model_runtime/model_providers/azure_openai/azure_openai.yaml +++ b/api/core/model_runtime/model_providers/azure_openai/azure_openai.yaml @@ -53,6 +53,15 @@ model_credential_schema: type: select required: true options: + - label: + en_US: 2024-05-01-preview + value: 2024-05-01-preview + - label: + en_US: 2024-04-01-preview + value: 2024-04-01-preview + - label: + en_US: 2024-03-01-preview + value: 2024-03-01-preview - label: en_US: 2024-02-15-preview value: 2024-02-15-preview From 8210637bc56cecf6c6e2d9172342eb038812203c Mon Sep 17 00:00:00 2001 From: sino Date: Thu, 13 Jun 2024 16:31:18 +0800 Subject: [PATCH 40/70] feat: support jina-clip-v1 embedding model (#5146) --- .../jina/text_embedding/jina-clip-v1.yaml | 9 +++++++ .../jina/text_embedding/text_embedding.py | 26 +++++++++++++------ 2 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 api/core/model_runtime/model_providers/jina/text_embedding/jina-clip-v1.yaml diff --git a/api/core/model_runtime/model_providers/jina/text_embedding/jina-clip-v1.yaml b/api/core/model_runtime/model_providers/jina/text_embedding/jina-clip-v1.yaml new file mode 100644 index 00000000000000..c06bfd7ebeb6cd --- /dev/null +++ b/api/core/model_runtime/model_providers/jina/text_embedding/jina-clip-v1.yaml @@ -0,0 +1,9 @@ +model: jina-clip-v1 +model_type: text-embedding +model_properties: + context_size: 8192 + max_chunks: 2048 +pricing: + input: '0.001' + unit: '0.001' + currency: USD diff --git a/api/core/model_runtime/model_providers/jina/text_embedding/text_embedding.py b/api/core/model_runtime/model_providers/jina/text_embedding/text_embedding.py index 74a1aabf7a64d2..23203491e656fe 100644 --- a/api/core/model_runtime/model_providers/jina/text_embedding/text_embedding.py +++ b/api/core/model_runtime/model_providers/jina/text_embedding/text_embedding.py @@ -52,16 +52,21 @@ def _invoke(self, model: str, credentials: dict, 'Content-Type': 'application/json' } + def transform_jina_input_text(model, text): + if model == 'jina-clip-v1': + return {"text": text} + return text + data = { 'model': model, - 'input': texts + 'input': [transform_jina_input_text(model, text) for text in texts] } try: response = post(url, headers=headers, data=dumps(data)) except Exception as e: raise InvokeConnectionError(str(e)) - + if response.status_code != 200: try: resp = response.json() @@ -75,16 +80,19 @@ def _invoke(self, model: str, credentials: dict, else: raise InvokeBadRequestError(msg) except JSONDecodeError as e: - raise InvokeServerUnavailableError(f"Failed to convert response to json: {e} with text: {response.text}") + raise InvokeServerUnavailableError( + f"Failed to convert response to json: {e} with text: {response.text}") try: resp = response.json() embeddings = resp['data'] usage = resp['usage'] except Exception as e: - raise InvokeServerUnavailableError(f"Failed to convert response to json: {e} with text: {response.text}") + raise InvokeServerUnavailableError( + f"Failed to convert response to json: {e} with text: {response.text}") - usage = self._calc_response_usage(model=model, credentials=credentials, tokens=usage['total_tokens']) + usage = self._calc_response_usage( + model=model, credentials=credentials, tokens=usage['total_tokens']) result = TextEmbeddingResult( model=model, @@ -122,7 +130,8 @@ def validate_credentials(self, model: str, credentials: dict) -> None: try: self._invoke(model=model, credentials=credentials, texts=['ping']) except Exception as e: - raise CredentialsValidateFailedError(f'Credentials validation failed: {e}') + raise CredentialsValidateFailedError( + f'Credentials validation failed: {e}') @property def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]: @@ -144,7 +153,7 @@ def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]] InvokeBadRequestError ] } - + def _calc_response_usage(self, model: str, credentials: dict, tokens: int) -> EmbeddingUsage: """ Calculate response usage @@ -185,7 +194,8 @@ def get_customizable_model_schema(self, model: str, credentials: dict) -> AIMode model_type=ModelType.TEXT_EMBEDDING, fetch_from=FetchFrom.CUSTOMIZABLE_MODEL, model_properties={ - ModelPropertyKey.CONTEXT_SIZE: int(credentials.get('context_size')) + ModelPropertyKey.CONTEXT_SIZE: int( + credentials.get('context_size')) } ) From 015c26d303c3b3933dabc91d875bd91689c3879a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E6=B3=95=E6=93=8D=E4=BD=9C?= Date: Thu, 13 Jun 2024 16:32:42 +0800 Subject: [PATCH 41/70] fix: style misalignment and inconsistency (#5149) --- .../config/agent/agent-tools/setting-built-in-tool.tsx | 4 ++-- .../account-setting/model-provider-page/model-modal/Form.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx b/web/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx index b35217732fcad1..a348e4425612b2 100644 --- a/web/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx +++ b/web/app/components/app/configuration/config/agent/agent-tools/setting-built-in-tool.tsx @@ -152,11 +152,11 @@ const SettingBuiltInTool: FC = ({ isShow onHide={onHide} title={( -
+
{typeof collection.icon === 'string' ? (
= ({
- {label[language] || label.en_US} + {label[language] || label.en_US} {tooltipContent}
Date: Thu, 13 Jun 2024 04:16:59 -0500 Subject: [PATCH 42/70] fix: front end error when same tool is called twice at once (#5068) --- web/app/components/app/chat/thought/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/components/app/chat/thought/index.tsx b/web/app/components/app/chat/thought/index.tsx index 462cf87fbc20fe..e87d484ed4abed 100644 --- a/web/app/components/app/chat/thought/index.tsx +++ b/web/app/components/app/chat/thought/index.tsx @@ -47,7 +47,7 @@ const Thought: FC = ({ const toolThoughtList = toolNames.map((toolName, index) => { return { name: toolName, - label: thought.tool_labels?.[toolName][language] ?? toolName, + label: thought.tool_labels?.toolName?.language ?? toolName, input: getValue(thought.tool_input, isValueArray, index), output: getValue(thought.observation, isValueArray, index), isFinished, From e61f5d029ae7e920ebb16e81f2338a815041adda Mon Sep 17 00:00:00 2001 From: kurokobo Date: Thu, 13 Jun 2024 18:36:01 +0900 Subject: [PATCH 43/70] chore(docs): fix minor small typos (#5124) --- api/core/model_runtime/docs/en_US/interfaces.md | 2 +- api/core/model_runtime/docs/zh_Hans/interfaces.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/core/model_runtime/docs/en_US/interfaces.md b/api/core/model_runtime/docs/en_US/interfaces.md index dc70bfad17ea22..1fb20e5b045716 100644 --- a/api/core/model_runtime/docs/en_US/interfaces.md +++ b/api/core/model_runtime/docs/en_US/interfaces.md @@ -336,7 +336,7 @@ Inherit the `__base.text2speech_model.Text2SpeechModel` base class and implement - Invoke Invocation ```python - def _invoke(elf, model: str, credentials: dict, content_text: str, streaming: bool, user: Optional[str] = None): + def _invoke(self, model: str, credentials: dict, content_text: str, streaming: bool, user: Optional[str] = None): """ Invoke large language model diff --git a/api/core/model_runtime/docs/zh_Hans/interfaces.md b/api/core/model_runtime/docs/zh_Hans/interfaces.md index 743e575dedd9de..78086cc328a10f 100644 --- a/api/core/model_runtime/docs/zh_Hans/interfaces.md +++ b/api/core/model_runtime/docs/zh_Hans/interfaces.md @@ -376,7 +376,7 @@ class XinferenceProvider(Provider): - Invoke 调用 ```python - def _invoke(elf, model: str, credentials: dict, content_text: str, streaming: bool, user: Optional[str] = None): + def _invoke(self, model: str, credentials: dict, content_text: str, streaming: bool, user: Optional[str] = None): """ Invoke large language model From db976a1f7438954680ef285f3ceb42469a9a6f55 Mon Sep 17 00:00:00 2001 From: Kazuki Hasegawa Date: Thu, 13 Jun 2024 18:36:14 +0900 Subject: [PATCH 44/70] Upgrade boto3 library to support EKS Pod Identity. (#5064) --- api/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/requirements.txt b/api/requirements.txt index 36a08a287a3433..f00a6f70797ec0 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -15,7 +15,7 @@ psycopg2-binary~=2.9.6 pycryptodome==3.19.1 python-dotenv==1.0.0 Authlib==1.2.0 -boto3==1.28.17 +boto3==1.34.123 tenacity==8.2.2 cachetools~=5.3.0 weaviate-client~=3.21.0 From 3f18369ad24ad7d6101015afddeb0be41ef4edae Mon Sep 17 00:00:00 2001 From: Kazuki Takamatsu Date: Thu, 13 Jun 2024 18:36:34 +0900 Subject: [PATCH 45/70] Fix: google storage init with sa and download (#5054) --- api/extensions/storage/google_storage.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/api/extensions/storage/google_storage.py b/api/extensions/storage/google_storage.py index 97004fddab20f6..ef6cd69039787c 100644 --- a/api/extensions/storage/google_storage.py +++ b/api/extensions/storage/google_storage.py @@ -1,5 +1,6 @@ import base64 import io +import json from collections.abc import Generator from contextlib import closing @@ -20,7 +21,9 @@ def __init__(self, app: Flask): # if service_account_json_str is empty, use Application Default Credentials if service_account_json_str: service_account_json = base64.b64decode(service_account_json_str).decode('utf-8') - self.client = GoogleCloudStorage.Client.from_service_account_info(service_account_json) + # convert str to object + service_account_obj = json.loads(service_account_json) + self.client = GoogleCloudStorage.Client.from_service_account_info(service_account_obj) else: self.client = GoogleCloudStorage.Client() @@ -48,9 +51,7 @@ def generate(filename: str = filename) -> Generator: def download(self, filename, target_filepath): bucket = self.client.get_bucket(self.bucket_name) blob = bucket.get_blob(filename) - with open(target_filepath, "wb") as my_blob: - blob_data = blob.download_blob() - blob_data.readinto(my_blob) + blob.download_to_filename(target_filepath) def exists(self, filename): bucket = self.client.get_bucket(self.bucket_name) From cdc08a434f8e82809fa33ae4ebe8541a7ffc16a8 Mon Sep 17 00:00:00 2001 From: Bowen Liang Date: Thu, 13 Jun 2024 18:02:18 +0800 Subject: [PATCH 46/70] feat: support Chroma vector store (#5015) --- .github/workflows/api-tests.yml | 8 +- .gitignore | 1 + api/.env.example | 8 + api/config.py | 8 + api/controllers/console/datasets/datasets.py | 4 +- .../rag/datasource/vdb/chroma/__init__.py | 0 .../datasource/vdb/chroma/chroma_vector.py | 147 ++ api/core/rag/datasource/vdb/vector_factory.py | 3 + api/core/rag/datasource/vdb/vector_type.py | 1 + api/poetry.lock | 1249 ++++++++++++++++- api/pyproject.toml | 2 +- api/requirements.txt | 4 +- .../integration_tests/vdb/chroma/__init__.py | 0 .../vdb/chroma/test_chroma.py | 33 + docker/docker-compose.chroma.yaml | 14 + docker/docker-compose.yaml | 14 + 16 files changed, 1483 insertions(+), 13 deletions(-) create mode 100644 api/core/rag/datasource/vdb/chroma/__init__.py create mode 100644 api/core/rag/datasource/vdb/chroma/chroma_vector.py create mode 100644 api/tests/integration_tests/vdb/chroma/__init__.py create mode 100644 api/tests/integration_tests/vdb/chroma/test_chroma.py create mode 100644 docker/docker-compose.chroma.yaml diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index e2ef85431d0a11..cff98db7e42b9d 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -58,7 +58,7 @@ jobs: - name: Run Workflow run: dev/pytest/pytest_workflow.sh - - name: Set up Vector Stores (Weaviate, Qdrant, PGVector, Milvus, PgVecto-RS) + - name: Set up Vector Stores (Weaviate, Qdrant, PGVector, Milvus, PgVecto-RS, Chroma) uses: hoverkraft-tech/compose-action@v2.0.0 with: compose-file: | @@ -67,6 +67,7 @@ jobs: docker/docker-compose.milvus.yaml docker/docker-compose.pgvecto-rs.yaml docker/docker-compose.pgvector.yaml + docker/docker-compose.chroma.yaml services: | weaviate qdrant @@ -75,6 +76,7 @@ jobs: milvus-standalone pgvecto-rs pgvector + chroma - name: Test Vector Stores run: dev/pytest/pytest_vdb.sh @@ -131,7 +133,7 @@ jobs: - name: Run Workflow run: poetry run -C api bash dev/pytest/pytest_workflow.sh - - name: Set up Vector Stores (Weaviate, Qdrant, PGVector, Milvus, PgVecto-RS) + - name: Set up Vector Stores (Weaviate, Qdrant, PGVector, Milvus, PgVecto-RS, Chroma) uses: hoverkraft-tech/compose-action@v2.0.0 with: compose-file: | @@ -140,6 +142,7 @@ jobs: docker/docker-compose.milvus.yaml docker/docker-compose.pgvecto-rs.yaml docker/docker-compose.pgvector.yaml + docker/docker-compose.chroma.yaml services: | weaviate qdrant @@ -148,6 +151,7 @@ jobs: milvus-standalone pgvecto-rs pgvector + chroma - name: Test Vector Stores run: poetry run -C api bash dev/pytest/pytest_vdb.sh diff --git a/.gitignore b/.gitignore index a51465efbc7fa6..35507f4783b6c2 100644 --- a/.gitignore +++ b/.gitignore @@ -149,6 +149,7 @@ docker/volumes/qdrant/* docker/volumes/etcd/* docker/volumes/minio/* docker/volumes/milvus/* +docker/volumes/chroma/* sdks/python-client/build sdks/python-client/dist diff --git a/api/.env.example b/api/.env.example index f112721a7e20cd..bee62cfe0bc19d 100644 --- a/api/.env.example +++ b/api/.env.example @@ -119,6 +119,14 @@ TIDB_VECTOR_USER=xxx.root TIDB_VECTOR_PASSWORD=xxxxxx TIDB_VECTOR_DATABASE=dify +# Chroma configuration +CHROMA_HOST=127.0.0.1 +CHROMA_PORT=8000 +CHROMA_TENANT=default_tenant +CHROMA_DATABASE=default_database +CHROMA_AUTH_PROVIDER=chromadb.auth.token_authn.TokenAuthenticationServerProvider +CHROMA_AUTH_CREDENTIALS=difyai123456 + # Upload configuration UPLOAD_FILE_SIZE_LIMIT=15 UPLOAD_FILE_BATCH_LIMIT=5 diff --git a/api/config.py b/api/config.py index 286b3336a283bf..bb9f85781e527b 100644 --- a/api/config.py +++ b/api/config.py @@ -306,6 +306,14 @@ def __init__(self): self.TIDB_VECTOR_PASSWORD = get_env('TIDB_VECTOR_PASSWORD') self.TIDB_VECTOR_DATABASE = get_env('TIDB_VECTOR_DATABASE') + # chroma settings + self.CHROMA_HOST = get_env('CHROMA_HOST') + self.CHROMA_PORT = get_env('CHROMA_PORT') + self.CHROMA_TENANT = get_env('CHROMA_TENANT') + self.CHROMA_DATABASE = get_env('CHROMA_DATABASE') + self.CHROMA_AUTH_PROVIDER = get_env('CHROMA_AUTH_PROVIDER') + self.CHROMA_AUTH_CREDENTIALS = get_env('CHROMA_AUTH_CREDENTIALS') + # ------------------------ # Mail Configurations. # ------------------------ diff --git a/api/controllers/console/datasets/datasets.py b/api/controllers/console/datasets/datasets.py index 49e50caf70fbe8..6cbe454d37e755 100644 --- a/api/controllers/console/datasets/datasets.py +++ b/api/controllers/console/datasets/datasets.py @@ -479,7 +479,7 @@ def get(self): vector_type = current_app.config['VECTOR_STORE'] match vector_type: - case VectorType.MILVUS | VectorType.RELYT | VectorType.PGVECTOR | VectorType.TIDB_VECTOR: + case VectorType.MILVUS | VectorType.RELYT | VectorType.PGVECTOR | VectorType.TIDB_VECTOR | VectorType.CHROMA: return { 'retrieval_method': [ 'semantic_search' @@ -501,7 +501,7 @@ class DatasetRetrievalSettingMockApi(Resource): @account_initialization_required def get(self, vector_type): match vector_type: - case VectorType.MILVUS | VectorType.RELYT | VectorType.PGVECTOR | VectorType.TIDB_VECTOR: + case VectorType.MILVUS | VectorType.RELYT | VectorType.PGVECTOR | VectorType.TIDB_VECTOR | VectorType.CHROMA: return { 'retrieval_method': [ 'semantic_search' diff --git a/api/core/rag/datasource/vdb/chroma/__init__.py b/api/core/rag/datasource/vdb/chroma/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/core/rag/datasource/vdb/chroma/chroma_vector.py b/api/core/rag/datasource/vdb/chroma/chroma_vector.py new file mode 100644 index 00000000000000..2d4e1975ea3665 --- /dev/null +++ b/api/core/rag/datasource/vdb/chroma/chroma_vector.py @@ -0,0 +1,147 @@ +import json +from typing import Any, Optional + +import chromadb +from chromadb import QueryResult, Settings +from flask import current_app +from pydantic import BaseModel + +from core.rag.datasource.entity.embedding import Embeddings +from core.rag.datasource.vdb.vector_base import BaseVector +from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory +from core.rag.datasource.vdb.vector_type import VectorType +from core.rag.models.document import Document +from extensions.ext_redis import redis_client +from models.dataset import Dataset + + +class ChromaConfig(BaseModel): + host: str + port: int + tenant: str + database: str + auth_provider: Optional[str] = None + auth_credentials: Optional[str] = None + + def to_chroma_params(self): + settings = Settings( + # auth + chroma_client_auth_provider=self.auth_provider, + chroma_client_auth_credentials=self.auth_credentials + ) + + return { + 'host': self.host, + 'port': self.port, + 'ssl': False, + 'tenant': self.tenant, + 'database': self.database, + 'settings': settings, + } + + +class ChromaVector(BaseVector): + + def __init__(self, collection_name: str, config: ChromaConfig): + super().__init__(collection_name) + self._client_config = config + self._client = chromadb.HttpClient(**self._client_config.to_chroma_params()) + + def get_type(self) -> str: + return VectorType.CHROMA + + def create(self, texts: list[Document], embeddings: list[list[float]], **kwargs): + if texts: + # create collection + self.create_collection(self._collection_name) + + self.add_texts(texts, embeddings, **kwargs) + + def create_collection(self, collection_name: str): + lock_name = 'vector_indexing_lock_{}'.format(collection_name) + with redis_client.lock(lock_name, timeout=20): + collection_exist_cache_key = 'vector_indexing_{}'.format(self._collection_name) + if redis_client.get(collection_exist_cache_key): + return + self._client.get_or_create_collection(collection_name) + redis_client.set(collection_exist_cache_key, 1, ex=3600) + + def add_texts(self, documents: list[Document], embeddings: list[list[float]], **kwargs): + uuids = self._get_uuids(documents) + texts = [d.page_content for d in documents] + metadatas = [d.metadata for d in documents] + + collection = self._client.get_or_create_collection(self._collection_name) + collection.upsert(ids=uuids, documents=texts, embeddings=embeddings, metadatas=metadatas) + + def delete_by_metadata_field(self, key: str, value: str): + collection = self._client.get_or_create_collection(self._collection_name) + collection.delete(where={key: {'$eq': value}}) + + def delete(self): + self._client.delete_collection(self._collection_name) + + def delete_by_ids(self, ids: list[str]) -> None: + collection = self._client.get_or_create_collection(self._collection_name) + collection.delete(ids=ids) + + def text_exists(self, id: str) -> bool: + collection = self._client.get_or_create_collection(self._collection_name) + response = collection.get(ids=[id]) + return len(response) > 0 + + def search_by_vector(self, query_vector: list[float], **kwargs: Any) -> list[Document]: + collection = self._client.get_or_create_collection(self._collection_name) + results: QueryResult = collection.query(query_embeddings=query_vector, n_results=kwargs.get("top_k", 4)) + score_threshold = kwargs.get("score_threshold", .0) if kwargs.get('score_threshold', .0) else 0.0 + + ids: list[str] = results['ids'][0] + documents: list[str] = results['documents'][0] + metadatas: dict[str, Any] = results['metadatas'][0] + distances: list[float] = results['distances'][0] + + docs = [] + for index in range(len(ids)): + distance = distances[index] + metadata = metadatas[index] + if distance >= score_threshold: + metadata['score'] = distance + doc = Document( + page_content=documents[index], + metadata=metadata, + ) + docs.append(doc) + + return docs + + def search_by_full_text(self, query: str, **kwargs: Any) -> list[Document]: + # chroma does not support BM25 full text searching + return [] + + +class ChromaVectorFactory(AbstractVectorFactory): + def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings) -> BaseVector: + if dataset.index_struct_dict: + class_prefix: str = dataset.index_struct_dict['vector_store']['class_prefix'] + collection_name = class_prefix.lower() + else: + dataset_id = dataset.id + collection_name = Dataset.gen_collection_name_by_id(dataset_id).lower() + index_struct_dict = { + "type": VectorType.CHROMA, + "vector_store": {"class_prefix": collection_name} + } + dataset.index_struct = json.dumps(index_struct_dict) + + config = current_app.config + return ChromaVector( + collection_name=collection_name, + config=ChromaConfig( + host=config.get('CHROMA_HOST'), + port=int(config.get('CHROMA_PORT')), + tenant=config.get('CHROMA_TENANT', chromadb.DEFAULT_TENANT), + database=config.get('CHROMA_DATABASE', chromadb.DEFAULT_DATABASE), + auth_provider=config.get('CHROMA_AUTH_PROVIDER'), + auth_credentials=config.get('CHROMA_AUTH_CREDENTIALS'), + ), + ) diff --git a/api/core/rag/datasource/vdb/vector_factory.py b/api/core/rag/datasource/vdb/vector_factory.py index 852dc51a3a26e6..d5c803a14a9f2f 100644 --- a/api/core/rag/datasource/vdb/vector_factory.py +++ b/api/core/rag/datasource/vdb/vector_factory.py @@ -52,6 +52,9 @@ def _init_vector(self) -> BaseVector: @staticmethod def get_vector_factory(vector_type: str) -> type[AbstractVectorFactory]: match vector_type: + case VectorType.CHROMA: + from core.rag.datasource.vdb.chroma.chroma_vector import ChromaVectorFactory + return ChromaVectorFactory case VectorType.MILVUS: from core.rag.datasource.vdb.milvus.milvus_vector import MilvusVectorFactory return MilvusVectorFactory diff --git a/api/core/rag/datasource/vdb/vector_type.py b/api/core/rag/datasource/vdb/vector_type.py index f2e9b9b8d44618..76f2f4ae46b454 100644 --- a/api/core/rag/datasource/vdb/vector_type.py +++ b/api/core/rag/datasource/vdb/vector_type.py @@ -2,6 +2,7 @@ class VectorType(str, Enum): + CHROMA = 'chroma' MILVUS = 'milvus' PGVECTOR = 'pgvector' PGVECTO_RS = 'pgvecto-rs' diff --git a/api/poetry.lock b/api/poetry.lock index 6539d1518d62f4..0beb7da768d794 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -317,6 +317,23 @@ files = [ feedparser = "6.0.10" requests = "2.31.0" +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.8" +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -424,6 +441,46 @@ files = [ {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] +[[package]] +name = "bcrypt" +version = "4.1.3" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bcrypt-4.1.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:48429c83292b57bf4af6ab75809f8f4daf52aa5d480632e53707805cc1ce9b74"}, + {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a8bea4c152b91fd8319fef4c6a790da5c07840421c2b785084989bf8bbb7455"}, + {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d3b317050a9a711a5c7214bf04e28333cf528e0ed0ec9a4e55ba628d0f07c1a"}, + {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:094fd31e08c2b102a14880ee5b3d09913ecf334cd604af27e1013c76831f7b05"}, + {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4fb253d65da30d9269e0a6f4b0de32bd657a0208a6f4e43d3e645774fb5457f3"}, + {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:193bb49eeeb9c1e2db9ba65d09dc6384edd5608d9d672b4125e9320af9153a15"}, + {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8cbb119267068c2581ae38790e0d1fbae65d0725247a930fc9900c285d95725d"}, + {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6cac78a8d42f9d120b3987f82252bdbeb7e6e900a5e1ba37f6be6fe4e3848286"}, + {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01746eb2c4299dd0ae1670234bf77704f581dd72cc180f444bfe74eb80495b64"}, + {file = "bcrypt-4.1.3-cp37-abi3-win32.whl", hash = "sha256:037c5bf7c196a63dcce75545c8874610c600809d5d82c305dd327cd4969995bf"}, + {file = "bcrypt-4.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:8a893d192dfb7c8e883c4576813bf18bb9d59e2cfd88b68b725990f033f1b978"}, + {file = "bcrypt-4.1.3-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0d4cf6ef1525f79255ef048b3489602868c47aea61f375377f0d00514fe4a78c"}, + {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5698ce5292a4e4b9e5861f7e53b1d89242ad39d54c3da451a93cac17b61921a"}, + {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec3c2e1ca3e5c4b9edb94290b356d082b721f3f50758bce7cce11d8a7c89ce84"}, + {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3a5be252fef513363fe281bafc596c31b552cf81d04c5085bc5dac29670faa08"}, + {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5f7cd3399fbc4ec290378b541b0cf3d4398e4737a65d0f938c7c0f9d5e686611"}, + {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:c4c8d9b3e97209dd7111bf726e79f638ad9224b4691d1c7cfefa571a09b1b2d6"}, + {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:31adb9cbb8737a581a843e13df22ffb7c84638342de3708a98d5c986770f2834"}, + {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:551b320396e1d05e49cc18dd77d970accd52b322441628aca04801bbd1d52a73"}, + {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6717543d2c110a155e6821ce5670c1f512f602eabb77dba95717ca76af79867d"}, + {file = "bcrypt-4.1.3-cp39-abi3-win32.whl", hash = "sha256:6004f5229b50f8493c49232b8e75726b568535fd300e5039e255d919fc3a07f2"}, + {file = "bcrypt-4.1.3-cp39-abi3-win_amd64.whl", hash = "sha256:2505b54afb074627111b5a8dc9b6ae69d0f01fea65c2fcaea403448c503d3991"}, + {file = "bcrypt-4.1.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:cb9c707c10bddaf9e5ba7cdb769f3e889e60b7d4fea22834b261f51ca2b89fed"}, + {file = "bcrypt-4.1.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9f8ea645eb94fb6e7bea0cf4ba121c07a3a182ac52876493870033141aa687bc"}, + {file = "bcrypt-4.1.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f44a97780677e7ac0ca393bd7982b19dbbd8d7228c1afe10b128fd9550eef5f1"}, + {file = "bcrypt-4.1.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d84702adb8f2798d813b17d8187d27076cca3cd52fe3686bb07a9083930ce650"}, + {file = "bcrypt-4.1.3.tar.gz", hash = "sha256:2ee15dd749f5952fe3f0430d0ff6b74082e159c50332a1413d51b5689cf06623"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + [[package]] name = "beautifulsoup4" version = "4.12.2" @@ -705,6 +762,31 @@ files = [ [package.dependencies] beautifulsoup4 = "*" +[[package]] +name = "build" +version = "1.2.1" +description = "A simple, correct Python build frontend" +optional = false +python-versions = ">=3.8" +files = [ + {file = "build-1.2.1-py3-none-any.whl", hash = "sha256:75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4"}, + {file = "build-1.2.1.tar.gz", hash = "sha256:526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "os_name == \"nt\""} +importlib-metadata = {version = ">=4.6", markers = "python_full_version < \"3.10.2\""} +packaging = ">=19.1" +pyproject_hooks = "*" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] +test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"] +typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"] +uv = ["uv (>=0.1.18)"] +virtualenv = ["virtualenv (>=20.0.35)"] + [[package]] name = "cachetools" version = "5.3.3" @@ -956,6 +1038,83 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "chroma-hnswlib" +version = "0.7.3" +description = "Chromas fork of hnswlib" +optional = false +python-versions = "*" +files = [ + {file = "chroma-hnswlib-0.7.3.tar.gz", hash = "sha256:b6137bedde49fffda6af93b0297fe00429fc61e5a072b1ed9377f909ed95a932"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59d6a7c6f863c67aeb23e79a64001d537060b6995c3eca9a06e349ff7b0998ca"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d71a3f4f232f537b6152947006bd32bc1629a8686df22fd97777b70f416c127a"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c92dc1ebe062188e53970ba13f6b07e0ae32e64c9770eb7f7ffa83f149d4210"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49da700a6656fed8753f68d44b8cc8ae46efc99fc8a22a6d970dc1697f49b403"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:108bc4c293d819b56476d8f7865803cb03afd6ca128a2a04d678fffc139af029"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:11e7ca93fb8192214ac2b9c0943641ac0daf8f9d4591bb7b73be808a83835667"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6f552e4d23edc06cdeb553cdc757d2fe190cdeb10d43093d6a3319f8d4bf1c6b"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f96f4d5699e486eb1fb95849fe35ab79ab0901265805be7e60f4eaa83ce263ec"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368e57fe9ebae05ee5844840fa588028a023d1182b0cfdb1d13f607c9ea05756"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:b7dca27b8896b494456db0fd705b689ac6b73af78e186eb6a42fea2de4f71c6f"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:70f897dc6218afa1d99f43a9ad5eb82f392df31f57ff514ccf4eeadecd62f544"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aef10b4952708f5a1381c124a29aead0c356f8d7d6e0b520b778aaa62a356f4"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee2d8d1529fca3898d512079144ec3e28a81d9c17e15e0ea4665697a7923253"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a4021a70e898783cd6f26e00008b494c6249a7babe8774e90ce4766dd288c8ba"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8f61fa1d417fda848e3ba06c07671f14806a2585272b175ba47501b066fe6b1"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7563be58bc98e8f0866907368e22ae218d6060601b79c42f59af4eccbbd2e0a"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51b8d411486ee70d7b66ec08cc8b9b6620116b650df9c19076d2d8b6ce2ae914"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d706782b628e4f43f1b8a81e9120ac486837fbd9bcb8ced70fe0d9b95c72d77"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:54f053dedc0e3ba657f05fec6e73dd541bc5db5b09aa8bc146466ffb734bdc86"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e607c5a71c610a73167a517062d302c0827ccdd6e259af6e4869a5c1306ffb5d"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2358a795870156af6761890f9eb5ca8cade57eb10c5f046fe94dae1faa04b9e"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cea425df2e6b8a5e201fff0d922a1cc1d165b3cfe762b1408075723c8892218"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:454df3dd3e97aa784fba7cf888ad191e0087eef0fd8c70daf28b753b3b591170"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:df587d15007ca701c6de0ee7d5585dd5e976b7edd2b30ac72bc376b3c3f85882"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "chromadb" +version = "0.5.0" +description = "Chroma." +optional = false +python-versions = ">=3.8" +files = [ + {file = "chromadb-0.5.0-py3-none-any.whl", hash = "sha256:8193dc65c143b61d8faf87f02c44ecfa778d471febd70de517f51c5d88a06009"}, + {file = "chromadb-0.5.0.tar.gz", hash = "sha256:7954af614a9ff7b2902ddbd0a162f33f7ec0669e2429903905c4f7876d1f766f"}, +] + +[package.dependencies] +bcrypt = ">=4.0.1" +build = ">=1.0.3" +chroma-hnswlib = "0.7.3" +fastapi = ">=0.95.2" +grpcio = ">=1.58.0" +importlib-resources = "*" +kubernetes = ">=28.1.0" +mmh3 = ">=4.0.1" +numpy = ">=1.22.5" +onnxruntime = ">=1.14.1" +opentelemetry-api = ">=1.2.0" +opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" +opentelemetry-instrumentation-fastapi = ">=0.41b0" +opentelemetry-sdk = ">=1.2.0" +orjson = ">=3.9.12" +overrides = ">=7.3.1" +posthog = ">=2.4.0" +pydantic = ">=1.9" +pypika = ">=0.48.9" +PyYAML = ">=6.0.0" +requests = ">=2.28" +tenacity = ">=8.2.3" +tokenizers = ">=0.13.2" +tqdm = ">=4.65.0" +typer = ">=0.9.0" +typing-extensions = ">=4.5.0" +uvicorn = {version = ">=0.18.3", extras = ["standard"]} + [[package]] name = "click" version = "8.1.7" @@ -1189,6 +1348,23 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coloredlogs" +version = "15.0.1" +description = "Colored terminal output for Python's logging module" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + [[package]] name = "contourpy" version = "1.2.1" @@ -1486,6 +1662,23 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + [[package]] name = "distro" version = "1.9.0" @@ -1497,6 +1690,26 @@ files = [ {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, ] +[[package]] +name = "dnspython" +version = "2.6.1" +description = "DNS toolkit" +optional = false +python-versions = ">=3.8" +files = [ + {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, + {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, +] + +[package.extras] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=41)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=0.9.25)"] +idna = ["idna (>=3.6)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] + [[package]] name = "docstring-parser" version = "0.16" @@ -1601,6 +1814,21 @@ pyreqwest-impersonate = ">=0.4.7" dev = ["mypy (>=1.10.0)", "pytest (>=8.2.2)", "pytest-asyncio (>=0.23.7)", "ruff (>=0.4.8)"] lxml = ["lxml (>=5.2.2)"] +[[package]] +name = "email-validator" +version = "2.1.1" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "email_validator-2.1.1-py3-none-any.whl", hash = "sha256:97d882d174e2a65732fb43bfce81a3a834cbc1bde8bf419e30ef5ea976370a05"}, + {file = "email_validator-2.1.1.tar.gz", hash = "sha256:200a70680ba08904be6d1eef729205cc0d687634399a5924d842533efb824b84"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + [[package]] name = "emoji" version = "2.12.1" @@ -1664,6 +1892,50 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "fastapi" +version = "0.111.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.111.0-py3-none-any.whl", hash = "sha256:97ecbf994be0bcbdadedf88c3150252bed7b2087075ac99735403b1b76cc8fc0"}, + {file = "fastapi-0.111.0.tar.gz", hash = "sha256:b9db9dd147c91cb8b769f7183535773d8741dd46f9dc6676cd82eab510228cd7"}, +] + +[package.dependencies] +email_validator = ">=2.0.0" +fastapi-cli = ">=0.0.2" +httpx = ">=0.23.0" +jinja2 = ">=2.11.2" +orjson = ">=3.2.1" +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +python-multipart = ">=0.0.7" +starlette = ">=0.37.2,<0.38.0" +typing-extensions = ">=4.8.0" +ujson = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0" +uvicorn = {version = ">=0.12.0", extras = ["standard"]} + +[package.extras] +all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fastapi-cli" +version = "0.0.4" +description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi_cli-0.0.4-py3-none-any.whl", hash = "sha256:a2552f3a7ae64058cdbb530be6fa6dbfc975dc165e4fa66d224c3d396e25e809"}, + {file = "fastapi_cli-0.0.4.tar.gz", hash = "sha256:e2e9ffaffc1f7767f488d6da34b6f5a377751c996f397902eb6abb99a67bde32"}, +] + +[package.dependencies] +typer = ">=0.12.3" + +[package.extras] +standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"] + [[package]] name = "fastavro" version = "1.9.4" @@ -1916,6 +2188,17 @@ files = [ flask = ">=2.2.5" sqlalchemy = ">=1.4.18" +[[package]] +name = "flatbuffers" +version = "24.3.25" +description = "The FlatBuffers serialization format for Python" +optional = false +python-versions = "*" +files = [ + {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, + {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, +] + [[package]] name = "fonttools" version = "4.53.0" @@ -3103,6 +3386,54 @@ files = [ [package.dependencies] pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} +[[package]] +name = "httptools" +version = "0.6.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, +] + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + [[package]] name = "httpx" version = "0.24.1" @@ -3160,6 +3491,20 @@ testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jed torch = ["torch"] typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] +[[package]] +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + [[package]] name = "hyperframe" version = "6.0.1" @@ -3182,6 +3527,40 @@ files = [ {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] +[[package]] +name = "importlib-metadata" +version = "7.1.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "importlib-resources" +version = "6.4.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -3437,6 +3816,32 @@ sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=2.8.0)"] +[[package]] +name = "kubernetes" +version = "30.1.0" +description = "Kubernetes python client" +optional = false +python-versions = ">=3.6" +files = [ + {file = "kubernetes-30.1.0-py2.py3-none-any.whl", hash = "sha256:e212e8b7579031dd2e512168b617373bc1e03888d41ac4e04039240a292d478d"}, + {file = "kubernetes-30.1.0.tar.gz", hash = "sha256:41e4c77af9f28e7a6c314e3bd06a8c6229ddd787cad684e0ab9f69b498e98ebc"}, +] + +[package.dependencies] +certifi = ">=14.05.14" +google-auth = ">=1.0.1" +oauthlib = ">=3.2.2" +python-dateutil = ">=2.5.3" +pyyaml = ">=5.4.1" +requests = "*" +requests-oauthlib = "*" +six = ">=1.9.0" +urllib3 = ">=1.24.2" +websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" + +[package.extras] +adal = ["adal (>=1.0.2)"] + [[package]] name = "langdetect" version = "1.0.9" @@ -3625,6 +4030,30 @@ files = [ docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.5" @@ -3761,6 +4190,17 @@ pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "minio" version = "7.2.7" @@ -3779,6 +4219,109 @@ pycryptodome = "*" typing-extensions = "*" urllib3 = "*" +[[package]] +name = "mmh3" +version = "4.1.0" +description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." +optional = false +python-versions = "*" +files = [ + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be5ac76a8b0cd8095784e51e4c1c9c318c19edcd1709a06eb14979c8d850c31a"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98a49121afdfab67cd80e912b36404139d7deceb6773a83620137aaa0da5714c"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5259ac0535874366e7d1a5423ef746e0d36a9e3c14509ce6511614bdc5a7ef5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5950827ca0453a2be357696da509ab39646044e3fa15cad364eb65d78797437"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1dd0f652ae99585b9dd26de458e5f08571522f0402155809fd1dc8852a613a39"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d25548070942fab1e4a6f04d1626d67e66d0b81ed6571ecfca511f3edf07e6"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53db8d9bad3cb66c8f35cbc894f336273f63489ce4ac416634932e3cbe79eb5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75da0f615eb55295a437264cc0b736753f830b09d102aa4c2a7d719bc445ec05"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b926b07fd678ea84b3a2afc1fa22ce50aeb627839c44382f3d0291e945621e1a"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c5b053334f9b0af8559d6da9dc72cef0a65b325ebb3e630c680012323c950bb6"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bf33dc43cd6de2cb86e0aa73a1cc6530f557854bbbe5d59f41ef6de2e353d7b"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fa7eacd2b830727ba3dd65a365bed8a5c992ecd0c8348cf39a05cc77d22f4970"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42dfd6742b9e3eec599f85270617debfa0bbb913c545bb980c8a4fa7b2d047da"}, + {file = "mmh3-4.1.0-cp310-cp310-win32.whl", hash = "sha256:2974ad343f0d39dcc88e93ee6afa96cedc35a9883bc067febd7ff736e207fa47"}, + {file = "mmh3-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:74699a8984ded645c1a24d6078351a056f5a5f1fe5838870412a68ac5e28d865"}, + {file = "mmh3-4.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:f0dc874cedc23d46fc488a987faa6ad08ffa79e44fb08e3cd4d4cf2877c00a00"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3280a463855b0eae64b681cd5b9ddd9464b73f81151e87bb7c91a811d25619e6"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97ac57c6c3301769e757d444fa7c973ceb002cb66534b39cbab5e38de61cd896"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b6502cdb4dbd880244818ab363c8770a48cdccecf6d729ade0241b736b5ec0"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52ba2da04671a9621580ddabf72f06f0e72c1c9c3b7b608849b58b11080d8f14"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a5fef4c4ecc782e6e43fbeab09cff1bac82c998a1773d3a5ee6a3605cde343e"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5135358a7e00991f73b88cdc8eda5203bf9de22120d10a834c5761dbeb07dd13"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cff9ae76a54f7c6fe0167c9c4028c12c1f6de52d68a31d11b6790bb2ae685560"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f02576a4d106d7830ca90278868bf0983554dd69183b7bbe09f2fcd51cf54f"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:073d57425a23721730d3ff5485e2da489dd3c90b04e86243dd7211f889898106"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:71e32ddec7f573a1a0feb8d2cf2af474c50ec21e7a8263026e8d3b4b629805db"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7cbb20b29d57e76a58b40fd8b13a9130db495a12d678d651b459bf61c0714cea"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a42ad267e131d7847076bb7e31050f6c4378cd38e8f1bf7a0edd32f30224d5c9"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a013979fc9390abadc445ea2527426a0e7a4495c19b74589204f9b71bcaafeb"}, + {file = "mmh3-4.1.0-cp311-cp311-win32.whl", hash = "sha256:1d3b1cdad7c71b7b88966301789a478af142bddcb3a2bee563f7a7d40519a00f"}, + {file = "mmh3-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dc6dc32eb03727467da8e17deffe004fbb65e8b5ee2b502d36250d7a3f4e2ec"}, + {file = "mmh3-4.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:9ae3a5c1b32dda121c7dc26f9597ef7b01b4c56a98319a7fe86c35b8bc459ae6"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0033d60c7939168ef65ddc396611077a7268bde024f2c23bdc283a19123f9e9c"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d82eb4defa245e02bb0b0dc4f1e7ee284f8d212633389c91f7fba99ba993f0a2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb04e2feeabaad6231e89cd43b3d01a4403579aa792c9ab6fdeef45cc58d4ec0"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e3b1a27def545ce11e36158ba5d5390cdbc300cfe456a942cc89d649cf7e3b2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce0ab79ff736d7044e5e9b3bfe73958a55f79a4ae672e6213e92492ad5e734d5"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b02268be6e0a8eeb8a924d7db85f28e47344f35c438c1e149878bb1c47b1cd3"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:deb887f5fcdaf57cf646b1e062d56b06ef2f23421c80885fce18b37143cba828"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99dd564e9e2b512eb117bd0cbf0f79a50c45d961c2a02402787d581cec5448d5"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:08373082dfaa38fe97aa78753d1efd21a1969e51079056ff552e687764eafdfe"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:54b9c6a2ea571b714e4fe28d3e4e2db37abfd03c787a58074ea21ee9a8fd1740"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a7b1edf24c69e3513f879722b97ca85e52f9032f24a52284746877f6a7304086"}, + {file = "mmh3-4.1.0-cp312-cp312-win32.whl", hash = "sha256:411da64b951f635e1e2284b71d81a5a83580cea24994b328f8910d40bed67276"}, + {file = "mmh3-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bebc3ecb6ba18292e3d40c8712482b4477abd6981c2ebf0e60869bd90f8ac3a9"}, + {file = "mmh3-4.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:168473dd608ade6a8d2ba069600b35199a9af837d96177d3088ca91f2b3798e3"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:372f4b7e1dcde175507640679a2a8790185bb71f3640fc28a4690f73da986a3b"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:438584b97f6fe13e944faf590c90fc127682b57ae969f73334040d9fa1c7ffa5"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6e27931b232fc676675fac8641c6ec6b596daa64d82170e8597f5a5b8bdcd3b6"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:571a92bad859d7b0330e47cfd1850b76c39b615a8d8e7aa5853c1f971fd0c4b1"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a69d6afe3190fa08f9e3a58e5145549f71f1f3fff27bd0800313426929c7068"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afb127be0be946b7630220908dbea0cee0d9d3c583fa9114a07156f98566dc28"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940d86522f36348ef1a494cbf7248ab3f4a1638b84b59e6c9e90408bd11ad729"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dcccc4935686619a8e3d1f7b6e97e3bd89a4a796247930ee97d35ea1a39341"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01bb9b90d61854dfc2407c5e5192bfb47222d74f29d140cb2dd2a69f2353f7cc"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bcb1b8b951a2c0b0fb8a5426c62a22557e2ffc52539e0a7cc46eb667b5d606a9"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6477a05d5e5ab3168e82e8b106e316210ac954134f46ec529356607900aea82a"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:da5892287e5bea6977364b15712a2573c16d134bc5fdcdd4cf460006cf849278"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:99180d7fd2327a6fffbaff270f760576839dc6ee66d045fa3a450f3490fda7f5"}, + {file = "mmh3-4.1.0-cp38-cp38-win32.whl", hash = "sha256:9b0d4f3949913a9f9a8fb1bb4cc6ecd52879730aab5ff8c5a3d8f5b593594b73"}, + {file = "mmh3-4.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:598c352da1d945108aee0c3c3cfdd0e9b3edef74108f53b49d481d3990402169"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:475d6d1445dd080f18f0f766277e1237fa2914e5fe3307a3b2a3044f30892103"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5ca07c41e6a2880991431ac717c2a049056fff497651a76e26fc22224e8b5732"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ebe052fef4bbe30c0548d12ee46d09f1b69035ca5208a7075e55adfe091be44"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaefd42e85afb70f2b855a011f7b4d8a3c7e19c3f2681fa13118e4d8627378c5"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0ae43caae5a47afe1b63a1ae3f0986dde54b5fb2d6c29786adbfb8edc9edfb"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6218666f74c8c013c221e7f5f8a693ac9cf68e5ac9a03f2373b32d77c48904de"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac59294a536ba447b5037f62d8367d7d93b696f80671c2c45645fa9f1109413c"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086844830fcd1e5c84fec7017ea1ee8491487cfc877847d96f86f68881569d2e"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e42b38fad664f56f77f6fbca22d08450f2464baa68acdbf24841bf900eb98e87"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d08b790a63a9a1cde3b5d7d733ed97d4eb884bfbc92f075a091652d6bfd7709a"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:73ea4cc55e8aea28c86799ecacebca09e5f86500414870a8abaedfcbaf74d288"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f90938ff137130e47bcec8dc1f4ceb02f10178c766e2ef58a9f657ff1f62d124"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:aa1f13e94b8631c8cd53259250556edcf1de71738936b60febba95750d9632bd"}, + {file = "mmh3-4.1.0-cp39-cp39-win32.whl", hash = "sha256:a3b680b471c181490cf82da2142029edb4298e1bdfcb67c76922dedef789868d"}, + {file = "mmh3-4.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:fefef92e9c544a8dbc08f77a8d1b6d48006a750c4375bbcd5ff8199d761e263b"}, + {file = "mmh3-4.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:8e2c1f6a2b41723a4f82bd5a762a777836d29d664fc0095f17910bea0adfd4a6"}, + {file = "mmh3-4.1.0.tar.gz", hash = "sha256:a1cf25348b9acd229dda464a094d6170f47d2850a1fcb762a3b6172d2ce6ca4a"}, +] + +[package.extras] +test = ["mypy (>=1.0)", "pytest (>=7.0.0)"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + [[package]] name = "mpmath" version = "1.3.0" @@ -4207,6 +4750,48 @@ files = [ [package.extras] tests = ["pytest", "pytest-cov"] +[[package]] +name = "onnxruntime" +version = "1.18.0" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = false +python-versions = "*" +files = [ + {file = "onnxruntime-1.18.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:5a3b7993a5ecf4a90f35542a4757e29b2d653da3efe06cdd3164b91167bbe10d"}, + {file = "onnxruntime-1.18.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:15b944623b2cdfe7f7945690bfb71c10a4531b51997c8320b84e7b0bb59af902"}, + {file = "onnxruntime-1.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e61ce5005118064b1a0ed73ebe936bc773a102f067db34108ea6c64dd62a179"}, + {file = "onnxruntime-1.18.0-cp310-cp310-win32.whl", hash = "sha256:a4fc8a2a526eb442317d280610936a9f73deece06c7d5a91e51570860802b93f"}, + {file = "onnxruntime-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:71ed219b768cab004e5cd83e702590734f968679bf93aa488c1a7ffbe6e220c3"}, + {file = "onnxruntime-1.18.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:3d24bd623872a72a7fe2f51c103e20fcca2acfa35d48f2accd6be1ec8633d960"}, + {file = "onnxruntime-1.18.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f15e41ca9b307a12550bfd2ec93f88905d9fba12bab7e578f05138ad0ae10d7b"}, + {file = "onnxruntime-1.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f45ca2887f62a7b847d526965686b2923efa72538c89b7703c7b3fe970afd59"}, + {file = "onnxruntime-1.18.0-cp311-cp311-win32.whl", hash = "sha256:9e24d9ecc8781323d9e2eeda019b4b24babc4d624e7d53f61b1fe1a929b0511a"}, + {file = "onnxruntime-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:f8608398976ed18aef450d83777ff6f77d0b64eced1ed07a985e1a7db8ea3771"}, + {file = "onnxruntime-1.18.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:f1d79941f15fc40b1ee67738b2ca26b23e0181bf0070b5fb2984f0988734698f"}, + {file = "onnxruntime-1.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e8caf3a8565c853a22d323a3eebc2a81e3de7591981f085a4f74f7a60aab2d"}, + {file = "onnxruntime-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:498d2b8380635f5e6ebc50ec1b45f181588927280f32390fb910301d234f97b8"}, + {file = "onnxruntime-1.18.0-cp312-cp312-win32.whl", hash = "sha256:ba7cc0ce2798a386c082aaa6289ff7e9bedc3dee622eef10e74830cff200a72e"}, + {file = "onnxruntime-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:1fa175bd43f610465d5787ae06050c81f7ce09da2bf3e914eb282cb8eab363ef"}, + {file = "onnxruntime-1.18.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:0284c579c20ec8b1b472dd190290a040cc68b6caec790edb960f065d15cf164a"}, + {file = "onnxruntime-1.18.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d47353d036d8c380558a5643ea5f7964d9d259d31c86865bad9162c3e916d1f6"}, + {file = "onnxruntime-1.18.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:885509d2b9ba4b01f08f7fa28d31ee54b6477953451c7ccf124a84625f07c803"}, + {file = "onnxruntime-1.18.0-cp38-cp38-win32.whl", hash = "sha256:8614733de3695656411d71fc2f39333170df5da6c7efd6072a59962c0bc7055c"}, + {file = "onnxruntime-1.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:47af3f803752fce23ea790fd8d130a47b2b940629f03193f780818622e856e7a"}, + {file = "onnxruntime-1.18.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:9153eb2b4d5bbab764d0aea17adadffcfc18d89b957ad191b1c3650b9930c59f"}, + {file = "onnxruntime-1.18.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c7fd86eca727c989bb8d9c5104f3c45f7ee45f445cc75579ebe55d6b99dfd7c"}, + {file = "onnxruntime-1.18.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac67a4de9c1326c4d87bcbfb652c923039b8a2446bb28516219236bec3b494f5"}, + {file = "onnxruntime-1.18.0-cp39-cp39-win32.whl", hash = "sha256:6ffb445816d06497df7a6dd424b20e0b2c39639e01e7fe210e247b82d15a23b9"}, + {file = "onnxruntime-1.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:46de6031cb6745f33f7eca9e51ab73e8c66037fb7a3b6b4560887c5b55ab5d5d"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + [[package]] name = "openai" version = "1.29.0" @@ -4244,6 +4829,168 @@ files = [ [package.dependencies] et-xmlfile = "*" +[[package]] +name = "opentelemetry-api" +version = "1.25.0" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_api-1.25.0-py3-none-any.whl", hash = "sha256:757fa1aa020a0f8fa139f8959e53dec2051cc26b832e76fa839a6d76ecefd737"}, + {file = "opentelemetry_api-1.25.0.tar.gz", hash = "sha256:77c4985f62f2614e42ce77ee4c9da5fa5f0bc1e1821085e9a47533a9323ae869"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<=7.1" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.25.0" +description = "OpenTelemetry Protobuf encoding" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_common-1.25.0-py3-none-any.whl", hash = "sha256:15637b7d580c2675f70246563363775b4e6de947871e01d0f4e3881d1848d693"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.25.0.tar.gz", hash = "sha256:c93f4e30da4eee02bacd1e004eb82ce4da143a2f8e15b987a9f603e0a85407d3"}, +] + +[package.dependencies] +opentelemetry-proto = "1.25.0" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.25.0" +description = "OpenTelemetry Collector Protobuf over gRPC Exporter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_grpc-1.25.0-py3-none-any.whl", hash = "sha256:3131028f0c0a155a64c430ca600fd658e8e37043cb13209f0109db5c1a3e4eb4"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.25.0.tar.gz", hash = "sha256:c0b1661415acec5af87625587efa1ccab68b873745ca0ee96b69bb1042087eac"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +googleapis-common-protos = ">=1.52,<2.0" +grpcio = ">=1.0.0,<2.0.0" +opentelemetry-api = ">=1.15,<2.0" +opentelemetry-exporter-otlp-proto-common = "1.25.0" +opentelemetry-proto = "1.25.0" +opentelemetry-sdk = ">=1.25.0,<1.26.0" + +[[package]] +name = "opentelemetry-instrumentation" +version = "0.46b0" +description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation-0.46b0-py3-none-any.whl", hash = "sha256:89cd721b9c18c014ca848ccd11181e6b3fd3f6c7669e35d59c48dc527408c18b"}, + {file = "opentelemetry_instrumentation-0.46b0.tar.gz", hash = "sha256:974e0888fb2a1e01c38fbacc9483d024bb1132aad92d6d24e2e5543887a7adda"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.4,<2.0" +setuptools = ">=16.0" +wrapt = ">=1.0.0,<2.0.0" + +[[package]] +name = "opentelemetry-instrumentation-asgi" +version = "0.46b0" +description = "ASGI instrumentation for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_asgi-0.46b0-py3-none-any.whl", hash = "sha256:f13c55c852689573057837a9500aeeffc010c4ba59933c322e8f866573374759"}, + {file = "opentelemetry_instrumentation_asgi-0.46b0.tar.gz", hash = "sha256:02559f30cf4b7e2a737ab17eb52aa0779bcf4cc06573064f3e2cb4dcc7d3040a"}, +] + +[package.dependencies] +asgiref = ">=3.0,<4.0" +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.46b0" +opentelemetry-semantic-conventions = "0.46b0" +opentelemetry-util-http = "0.46b0" + +[package.extras] +instruments = ["asgiref (>=3.0,<4.0)"] + +[[package]] +name = "opentelemetry-instrumentation-fastapi" +version = "0.46b0" +description = "OpenTelemetry FastAPI Instrumentation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_fastapi-0.46b0-py3-none-any.whl", hash = "sha256:e0f5d150c6c36833dd011f0e6ef5ede6d7406c1aed0c7c98b2d3b38a018d1b33"}, + {file = "opentelemetry_instrumentation_fastapi-0.46b0.tar.gz", hash = "sha256:928a883a36fc89f9702f15edce43d1a7104da93d740281e32d50ffd03dbb4365"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.46b0" +opentelemetry-instrumentation-asgi = "0.46b0" +opentelemetry-semantic-conventions = "0.46b0" +opentelemetry-util-http = "0.46b0" + +[package.extras] +instruments = ["fastapi (>=0.58,<1.0)"] + +[[package]] +name = "opentelemetry-proto" +version = "1.25.0" +description = "OpenTelemetry Python Proto" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_proto-1.25.0-py3-none-any.whl", hash = "sha256:f07e3341c78d835d9b86665903b199893befa5e98866f63d22b00d0b7ca4972f"}, + {file = "opentelemetry_proto-1.25.0.tar.gz", hash = "sha256:35b6ef9dc4a9f7853ecc5006738ad40443701e52c26099e197895cbda8b815a3"}, +] + +[package.dependencies] +protobuf = ">=3.19,<5.0" + +[[package]] +name = "opentelemetry-sdk" +version = "1.25.0" +description = "OpenTelemetry Python SDK" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_sdk-1.25.0-py3-none-any.whl", hash = "sha256:d97ff7ec4b351692e9d5a15af570c693b8715ad78b8aafbec5c7100fe966b4c9"}, + {file = "opentelemetry_sdk-1.25.0.tar.gz", hash = "sha256:ce7fc319c57707ef5bf8b74fb9f8ebdb8bfafbe11898410e0d2a761d08a98ec7"}, +] + +[package.dependencies] +opentelemetry-api = "1.25.0" +opentelemetry-semantic-conventions = "0.46b0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.46b0" +description = "OpenTelemetry Semantic Conventions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_semantic_conventions-0.46b0-py3-none-any.whl", hash = "sha256:6daef4ef9fa51d51855d9f8e0ccd3a1bd59e0e545abe99ac6203804e36ab3e07"}, + {file = "opentelemetry_semantic_conventions-0.46b0.tar.gz", hash = "sha256:fbc982ecbb6a6e90869b15c1673be90bd18c8a56ff1cffc0864e38e2edffaefa"}, +] + +[package.dependencies] +opentelemetry-api = "1.25.0" + +[[package]] +name = "opentelemetry-util-http" +version = "0.46b0" +description = "Web util for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_util_http-0.46b0-py3-none-any.whl", hash = "sha256:8dc1949ce63caef08db84ae977fdc1848fe6dc38e6bbaad0ae3e6ecd0d451629"}, + {file = "opentelemetry_util_http-0.46b0.tar.gz", hash = "sha256:03b6e222642f9c7eae58d9132343e045b50aca9761fcb53709bd2b663571fdf6"}, +] + [[package]] name = "orjson" version = "3.10.4" @@ -4317,6 +5064,17 @@ pycryptodome = ">=3.4.7" requests = "!=2.9.0" six = "*" +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "24.1" @@ -4615,6 +5373,29 @@ docs = ["sphinx (>=1.7.1)"] redis = ["redis"] tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] +[[package]] +name = "posthog" +version = "3.5.0" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, + {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] + [[package]] name = "prompt-toolkit" version = "3.0.47" @@ -4946,6 +5727,20 @@ files = [ {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, ] +[[package]] +name = "pygments" +version = "2.18.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + [[package]] name = "pyjwt" version = "2.8.0" @@ -5047,6 +5842,16 @@ files = [ {file = "pypdfium2-4.17.0.tar.gz", hash = "sha256:2a2b3273c4614ee2004df60ace5f387645f843418ae29f379408ee11560241c0"}, ] +[[package]] +name = "pypika" +version = "0.48.9" +description = "A SQL query builder API for Python" +optional = false +python-versions = "*" +files = [ + {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, +] + [[package]] name = "pypng" version = "0.20220715.0" @@ -5058,6 +5863,28 @@ files = [ {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, ] +[[package]] +name = "pyproject-hooks" +version = "1.1.0" +description = "Wrappers to call pyproject.toml-based build backend hooks." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyproject_hooks-1.1.0-py3-none-any.whl", hash = "sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2"}, + {file = "pyproject_hooks-1.1.0.tar.gz", hash = "sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965"}, +] + +[[package]] +name = "pyreadline3" +version = "3.4.1" +description = "A python implementation of GNU readline." +optional = false +python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] + [[package]] name = "pyreqwest-impersonate" version = "0.4.7" @@ -5359,6 +6186,20 @@ files = [ {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, ] +[[package]] +name = "python-multipart" +version = "0.0.9" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python_multipart-0.0.9-py3-none-any.whl", hash = "sha256:97ca7b8ea7b05f977dc3849c3ba99d51689822fab725c3703af7c866a0c2b215"}, + {file = "python_multipart-0.0.9.tar.gz", hash = "sha256:03f54688c663f1b7977105f021043b0793151e4cb1c1a9d4a11fc13d622c4026"}, +] + +[package.extras] +dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatch", "invoke (==2.2.0)", "more-itertools (==10.2.0)", "pbr (==6.0.0)", "pluggy (==1.4.0)", "py (==1.11.0)", "pytest (==8.0.0)", "pytest-cov (==4.1.0)", "pytest-timeout (==2.2.0)", "pyyaml (==6.0.1)", "ruff (==0.2.1)"] + [[package]] name = "python-pptx" version = "0.6.23" @@ -5850,6 +6691,24 @@ files = [ [package.dependencies] requests = "2.31.0" +[[package]] +name = "rich" +version = "13.7.1" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + [[package]] name = "rsa" version = "4.9" @@ -6243,6 +7102,17 @@ numpy = ">=1.14,<3" docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] test = ["pytest", "pytest-cov"] +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + [[package]] name = "simple-websocket" version = "1.0.0" @@ -6406,6 +7276,23 @@ files = [ dev = ["build", "hatch"] doc = ["sphinx"] +[[package]] +name = "starlette" +version = "0.37.2" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"}, + {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + [[package]] name = "sympy" version = "1.12" @@ -6436,17 +7323,18 @@ widechars = ["wcwidth"] [[package]] name = "tenacity" -version = "8.2.2" +version = "8.3.0" description = "Retry code until it succeeds" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, - {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, + {file = "tenacity-8.3.0-py3-none-any.whl", hash = "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185"}, + {file = "tenacity-8.3.0.tar.gz", hash = "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2"}, ] [package.extras] -doc = ["reno", "sphinx", "tornado (>=4.5)"] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "tencentcloud-sdk-python-common" @@ -6841,6 +7729,23 @@ aiohttp-retry = ">=2.8.3" PyJWT = ">=2.0.0,<3.0.0" requests = ">=2.0.0" +[[package]] +name = "typer" +version = "0.12.3" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.7" +files = [ + {file = "typer-0.12.3-py3-none-any.whl", hash = "sha256:070d7ca53f785acbccba8e7d28b08dcd88f79f1fbda035ade0aecec71ca5c914"}, + {file = "typer-0.12.3.tar.gz", hash = "sha256:49e73131481d804288ef62598d97a1ceef3058905aa536a1134f90891ba35482"}, +] + +[package.dependencies] +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" + [[package]] name = "types-requests" version = "2.32.0.20240602" @@ -7107,6 +8012,76 @@ secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17. socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "uvicorn" +version = "0.30.1" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.30.1-py3-none-any.whl", hash = "sha256:cd17daa7f3b9d7a24de3617820e634d0933b69eed8e33a516071174427238c81"}, + {file = "uvicorn-0.30.1.tar.gz", hash = "sha256:d46cd8e0fd80240baffbcd9ec1012a712938754afcf81bce56c024c1656aece8"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + [[package]] name = "validators" version = "0.21.0" @@ -7180,6 +8155,93 @@ files = [ {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, ] +[[package]] +name = "watchfiles" +version = "0.22.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchfiles-0.22.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:da1e0a8caebf17976e2ffd00fa15f258e14749db5e014660f53114b676e68538"}, + {file = "watchfiles-0.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61af9efa0733dc4ca462347becb82e8ef4945aba5135b1638bfc20fad64d4f0e"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d9188979a58a096b6f8090e816ccc3f255f137a009dd4bbec628e27696d67c1"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2bdadf6b90c099ca079d468f976fd50062905d61fae183f769637cb0f68ba59a"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:067dea90c43bf837d41e72e546196e674f68c23702d3ef80e4e816937b0a3ffd"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbf8a20266136507abf88b0df2328e6a9a7c7309e8daff124dda3803306a9fdb"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1235c11510ea557fe21be5d0e354bae2c655a8ee6519c94617fe63e05bca4171"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2444dc7cb9d8cc5ab88ebe792a8d75709d96eeef47f4c8fccb6df7c7bc5be71"}, + {file = "watchfiles-0.22.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c5af2347d17ab0bd59366db8752d9e037982e259cacb2ba06f2c41c08af02c39"}, + {file = "watchfiles-0.22.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9624a68b96c878c10437199d9a8b7d7e542feddda8d5ecff58fdc8e67b460848"}, + {file = "watchfiles-0.22.0-cp310-none-win32.whl", hash = "sha256:4b9f2a128a32a2c273d63eb1fdbf49ad64852fc38d15b34eaa3f7ca2f0d2b797"}, + {file = "watchfiles-0.22.0-cp310-none-win_amd64.whl", hash = "sha256:2627a91e8110b8de2406d8b2474427c86f5a62bf7d9ab3654f541f319ef22bcb"}, + {file = "watchfiles-0.22.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8c39987a1397a877217be1ac0fb1d8b9f662c6077b90ff3de2c05f235e6a8f96"}, + {file = "watchfiles-0.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a927b3034d0672f62fb2ef7ea3c9fc76d063c4b15ea852d1db2dc75fe2c09696"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052d668a167e9fc345c24203b104c313c86654dd6c0feb4b8a6dfc2462239249"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e45fb0d70dda1623a7045bd00c9e036e6f1f6a85e4ef2c8ae602b1dfadf7550"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c49b76a78c156979759d759339fb62eb0549515acfe4fd18bb151cc07366629c"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4a65474fd2b4c63e2c18ac67a0c6c66b82f4e73e2e4d940f837ed3d2fd9d4da"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc0cba54f47c660d9fa3218158b8963c517ed23bd9f45fe463f08262a4adae1"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ebe84a035993bb7668f58a0ebf998174fb723a39e4ef9fce95baabb42b787f"}, + {file = "watchfiles-0.22.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e0f0a874231e2839abbf473256efffe577d6ee2e3bfa5b540479e892e47c172d"}, + {file = "watchfiles-0.22.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:213792c2cd3150b903e6e7884d40660e0bcec4465e00563a5fc03f30ea9c166c"}, + {file = "watchfiles-0.22.0-cp311-none-win32.whl", hash = "sha256:b44b70850f0073b5fcc0b31ede8b4e736860d70e2dbf55701e05d3227a154a67"}, + {file = "watchfiles-0.22.0-cp311-none-win_amd64.whl", hash = "sha256:00f39592cdd124b4ec5ed0b1edfae091567c72c7da1487ae645426d1b0ffcad1"}, + {file = "watchfiles-0.22.0-cp311-none-win_arm64.whl", hash = "sha256:3218a6f908f6a276941422b035b511b6d0d8328edd89a53ae8c65be139073f84"}, + {file = "watchfiles-0.22.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c7b978c384e29d6c7372209cbf421d82286a807bbcdeb315427687f8371c340a"}, + {file = "watchfiles-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd4c06100bce70a20c4b81e599e5886cf504c9532951df65ad1133e508bf20be"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:425440e55cd735386ec7925f64d5dde392e69979d4c8459f6bb4e920210407f2"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68fe0c4d22332d7ce53ad094622b27e67440dacefbaedd29e0794d26e247280c"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8a31bfd98f846c3c284ba694c6365620b637debdd36e46e1859c897123aa232"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc2e8fe41f3cac0660197d95216c42910c2b7e9c70d48e6d84e22f577d106fc1"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b7cc10261c2786c41d9207193a85c1db1b725cf87936df40972aab466179b6"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28585744c931576e535860eaf3f2c0ec7deb68e3b9c5a85ca566d69d36d8dd27"}, + {file = "watchfiles-0.22.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00095dd368f73f8f1c3a7982a9801190cc88a2f3582dd395b289294f8975172b"}, + {file = "watchfiles-0.22.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:52fc9b0dbf54d43301a19b236b4a4614e610605f95e8c3f0f65c3a456ffd7d35"}, + {file = "watchfiles-0.22.0-cp312-none-win32.whl", hash = "sha256:581f0a051ba7bafd03e17127735d92f4d286af941dacf94bcf823b101366249e"}, + {file = "watchfiles-0.22.0-cp312-none-win_amd64.whl", hash = "sha256:aec83c3ba24c723eac14225194b862af176d52292d271c98820199110e31141e"}, + {file = "watchfiles-0.22.0-cp312-none-win_arm64.whl", hash = "sha256:c668228833c5619f6618699a2c12be057711b0ea6396aeaece4ded94184304ea"}, + {file = "watchfiles-0.22.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d47e9ef1a94cc7a536039e46738e17cce058ac1593b2eccdede8bf72e45f372a"}, + {file = "watchfiles-0.22.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28f393c1194b6eaadcdd8f941307fc9bbd7eb567995232c830f6aef38e8a6e88"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd64f3a4db121bc161644c9e10a9acdb836853155a108c2446db2f5ae1778c3d"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2abeb79209630da981f8ebca30a2c84b4c3516a214451bfc5f106723c5f45843"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cc382083afba7918e32d5ef12321421ef43d685b9a67cc452a6e6e18920890e"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d048ad5d25b363ba1d19f92dcf29023988524bee6f9d952130b316c5802069cb"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:103622865599f8082f03af4214eaff90e2426edff5e8522c8f9e93dc17caee13"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3e1f3cf81f1f823e7874ae563457828e940d75573c8fbf0ee66818c8b6a9099"}, + {file = "watchfiles-0.22.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8597b6f9dc410bdafc8bb362dac1cbc9b4684a8310e16b1ff5eee8725d13dcd6"}, + {file = "watchfiles-0.22.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0b04a2cbc30e110303baa6d3ddce8ca3664bc3403be0f0ad513d1843a41c97d1"}, + {file = "watchfiles-0.22.0-cp38-none-win32.whl", hash = "sha256:b610fb5e27825b570554d01cec427b6620ce9bd21ff8ab775fc3a32f28bba63e"}, + {file = "watchfiles-0.22.0-cp38-none-win_amd64.whl", hash = "sha256:fe82d13461418ca5e5a808a9e40f79c1879351fcaeddbede094028e74d836e86"}, + {file = "watchfiles-0.22.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3973145235a38f73c61474d56ad6199124e7488822f3a4fc97c72009751ae3b0"}, + {file = "watchfiles-0.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:280a4afbc607cdfc9571b9904b03a478fc9f08bbeec382d648181c695648202f"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a0d883351a34c01bd53cfa75cd0292e3f7e268bacf2f9e33af4ecede7e21d1d"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9165bcab15f2b6d90eedc5c20a7f8a03156b3773e5fb06a790b54ccecdb73385"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc1b9b56f051209be458b87edb6856a449ad3f803315d87b2da4c93b43a6fe72"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dc1fc25a1dedf2dd952909c8e5cb210791e5f2d9bc5e0e8ebc28dd42fed7562"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc92d2d2706d2b862ce0568b24987eba51e17e14b79a1abcd2edc39e48e743c8"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97b94e14b88409c58cdf4a8eaf0e67dfd3ece7e9ce7140ea6ff48b0407a593ec"}, + {file = "watchfiles-0.22.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96eec15e5ea7c0b6eb5bfffe990fc7c6bd833acf7e26704eb18387fb2f5fd087"}, + {file = "watchfiles-0.22.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:28324d6b28bcb8d7c1041648d7b63be07a16db5510bea923fc80b91a2a6cbed6"}, + {file = "watchfiles-0.22.0-cp39-none-win32.whl", hash = "sha256:8c3e3675e6e39dc59b8fe5c914a19d30029e36e9f99468dddffd432d8a7b1c93"}, + {file = "watchfiles-0.22.0-cp39-none-win_amd64.whl", hash = "sha256:25c817ff2a86bc3de3ed2df1703e3d24ce03479b27bb4527c57e722f8554d971"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b810a2c7878cbdecca12feae2c2ae8af59bea016a78bc353c184fa1e09f76b68"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f7e1f9c5d1160d03b93fc4b68a0aeb82fe25563e12fbcdc8507f8434ab6f823c"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:030bc4e68d14bcad2294ff68c1ed87215fbd9a10d9dea74e7cfe8a17869785ab"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace7d060432acde5532e26863e897ee684780337afb775107c0a90ae8dbccfd2"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5834e1f8b71476a26df97d121c0c0ed3549d869124ed2433e02491553cb468c2"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0bc3b2f93a140df6806c8467c7f51ed5e55a931b031b5c2d7ff6132292e803d6"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fdebb655bb1ba0122402352b0a4254812717a017d2dc49372a1d47e24073795"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c8e0aa0e8cc2a43561e0184c0513e291ca891db13a269d8d47cb9841ced7c71"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2f350cbaa4bb812314af5dab0eb8d538481e2e2279472890864547f3fe2281ed"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7a74436c415843af2a769b36bf043b6ccbc0f8d784814ba3d42fc961cdb0a9dc"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00ad0bcd399503a84cc688590cdffbe7a991691314dde5b57b3ed50a41319a31"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72a44e9481afc7a5ee3291b09c419abab93b7e9c306c9ef9108cb76728ca58d2"}, + {file = "watchfiles-0.22.0.tar.gz", hash = "sha256:988e981aaab4f3955209e7e28c7794acdb690be1efa7f16f8ea5aba7ffdadacb"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + [[package]] name = "wcwidth" version = "0.2.13" @@ -7238,6 +8300,87 @@ docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] +[[package]] +name = "websockets" +version = "12.0" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, +] + [[package]] name = "werkzeug" version = "3.0.3" @@ -7269,6 +8412,85 @@ files = [ beautifulsoup4 = "*" requests = ">=2.0.0,<3.0.0" +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + [[package]] name = "wsproto" version = "1.2.0" @@ -7477,6 +8699,21 @@ dataclasses = "*" PyJWT = "*" requests = "*" +[[package]] +name = "zipp" +version = "3.19.2" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.19.2-py3-none-any.whl", hash = "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c"}, + {file = "zipp-3.19.2.tar.gz", hash = "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19"}, +] + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + [[package]] name = "zope-event" version = "5.0" @@ -7551,4 +8788,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "014b13a1202e835c1bb52f033d389eb7076d4632ec4e4b4b78f976d33663d6d5" +content-hash = "509e7821d929dd859378b5b45285469dc6d6b358b2175df30188492fb8cea485" diff --git a/api/pyproject.toml b/api/pyproject.toml index bd4984207371dc..d9d785dda79749 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -107,7 +107,6 @@ pycryptodome = "3.19.1" python-dotenv = "1.0.0" authlib = "1.2.0" boto3 = "1.28.17" -tenacity = "8.2.2" cachetools = "~5.3.0" weaviate-client = "~3.21.0" mailchimp-transactional = "~1.0.50" @@ -179,6 +178,7 @@ google-cloud-aiplatform = "1.49.0" vanna = {version = "0.5.5", extras = ["postgres", "mysql", "clickhouse", "duckdb"]} kaleido = "0.2.1" tencentcloud-sdk-python-hunyuan = "~3.0.1158" +chromadb = "~0.5.0" [tool.poetry.group.dev] optional = true diff --git a/api/requirements.txt b/api/requirements.txt index f00a6f70797ec0..f17f56aca39356 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -16,7 +16,6 @@ pycryptodome==3.19.1 python-dotenv==1.0.0 Authlib==1.2.0 boto3==1.34.123 -tenacity==8.2.2 cachetools~=5.3.0 weaviate-client~=3.21.0 mailchimp-transactional~=1.0.50 @@ -85,4 +84,5 @@ pymysql==1.1.1 tidb-vector==0.0.9 google-cloud-aiplatform==1.49.0 vanna[postgres,mysql,clickhouse,duckdb]==0.5.5 -tencentcloud-sdk-python-hunyuan~=3.0.1158 \ No newline at end of file +tencentcloud-sdk-python-hunyuan~=3.0.1158 +chromadb~=0.5.0 diff --git a/api/tests/integration_tests/vdb/chroma/__init__.py b/api/tests/integration_tests/vdb/chroma/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/api/tests/integration_tests/vdb/chroma/test_chroma.py b/api/tests/integration_tests/vdb/chroma/test_chroma.py new file mode 100644 index 00000000000000..033f9a54da678c --- /dev/null +++ b/api/tests/integration_tests/vdb/chroma/test_chroma.py @@ -0,0 +1,33 @@ +import chromadb + +from core.rag.datasource.vdb.chroma.chroma_vector import ChromaConfig, ChromaVector +from tests.integration_tests.vdb.test_vector_store import ( + AbstractVectorTest, + get_example_text, + setup_mock_redis, +) + + +class ChromaVectorTest(AbstractVectorTest): + def __init__(self): + super().__init__() + self.vector = ChromaVector( + collection_name=self.collection_name, + config=ChromaConfig( + host='localhost', + port=8000, + tenant=chromadb.DEFAULT_TENANT, + database=chromadb.DEFAULT_DATABASE, + auth_provider="chromadb.auth.token_authn.TokenAuthClientProvider", + auth_credentials="difyai123456", + ) + ) + + def search_by_full_text(self): + # chroma dos not support full text searching + hits_by_full_text = self.vector.search_by_full_text(query=get_example_text()) + assert len(hits_by_full_text) == 0 + + +def test_chroma_vector(setup_mock_redis): + ChromaVectorTest().run_all_tests() diff --git a/docker/docker-compose.chroma.yaml b/docker/docker-compose.chroma.yaml new file mode 100644 index 00000000000000..6ca521b4878f4f --- /dev/null +++ b/docker/docker-compose.chroma.yaml @@ -0,0 +1,14 @@ +version: '3' +services: + # Chroma vector store. + chroma: + image: ghcr.io/chroma-core/chroma:0.5.0 + restart: always + volumes: + - ./volumes/chroma:/chroma/chroma + environment: + CHROMA_SERVER_AUTHN_CREDENTIALS: difyai123456 + CHROMA_SERVER_AUTHN_PROVIDER: chromadb.auth.token_authn.TokenAuthenticationServerProvider + IS_PERSISTENT: TRUE + ports: + - "8000:8000" diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index c3b5430514c744..5c67406bcb5eeb 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -140,6 +140,13 @@ services: TIDB_VECTOR_USER: xxx.root TIDB_VECTOR_PASSWORD: xxxxxx TIDB_VECTOR_DATABASE: dify + # Chroma configuration + CHROMA_HOST: 127.0.0.1 + CHROMA_PORT: 8000 + CHROMA_TENANT: default_tenant + CHROMA_DATABASE: default_database + CHROMA_AUTH_PROVIDER: chromadb.auth.token_authn.TokenAuthClientProvider + CHROMA_AUTH_CREDENTIALS: xxxxxx # Mail configuration, support: resend, smtp MAIL_TYPE: '' # default send from email address, if not specified @@ -301,6 +308,13 @@ services: TIDB_VECTOR_USER: xxx.root TIDB_VECTOR_PASSWORD: xxxxxx TIDB_VECTOR_DATABASE: dify + # Chroma configuration + CHROMA_HOST: 127.0.0.1 + CHROMA_PORT: 8000 + CHROMA_TENANT: default_tenant + CHROMA_DATABASE: default_database + CHROMA_AUTH_PROVIDER: chromadb.auth.token_authn.TokenAuthClientProvider + CHROMA_AUTH_CREDENTIALS: xxxxxx # Notion import configuration, support public and internal NOTION_INTEGRATION_TYPE: public NOTION_CLIENT_SECRET: you-client-secret From 0cccf9c67d2448216aa6b446943be4458f958699 Mon Sep 17 00:00:00 2001 From: Yeuoly <45712896+Yeuoly@users.noreply.github.com> Date: Thu, 13 Jun 2024 23:08:05 +0800 Subject: [PATCH 47/70] feat: introduce APP_MAX_EXECUTION_TIME (#5167) --- api/.env.example | 3 +++ api/config.py | 2 ++ api/core/app/apps/base_app_queue_manager.py | 5 +++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/api/.env.example b/api/.env.example index bee62cfe0bc19d..571f5b168ea5a7 100644 --- a/api/.env.example +++ b/api/.env.example @@ -203,3 +203,6 @@ INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=1000 WORKFLOW_MAX_EXECUTION_STEPS=500 WORKFLOW_MAX_EXECUTION_TIME=1200 WORKFLOW_CALL_MAX_DEPTH=5 + +# App configuration +APP_MAX_EXECUTION_TIME=1200 \ No newline at end of file diff --git a/api/config.py b/api/config.py index bb9f85781e527b..53cc6ce393b6ab 100644 --- a/api/config.py +++ b/api/config.py @@ -85,6 +85,7 @@ 'WORKFLOW_MAX_EXECUTION_STEPS': 500, 'WORKFLOW_MAX_EXECUTION_TIME': 1200, 'WORKFLOW_CALL_MAX_DEPTH': 5, + 'APP_MAX_EXECUTION_TIME': 1200, } @@ -372,6 +373,7 @@ def __init__(self): self.WORKFLOW_MAX_EXECUTION_STEPS = int(get_env('WORKFLOW_MAX_EXECUTION_STEPS')) self.WORKFLOW_MAX_EXECUTION_TIME = int(get_env('WORKFLOW_MAX_EXECUTION_TIME')) self.WORKFLOW_CALL_MAX_DEPTH = int(get_env('WORKFLOW_CALL_MAX_DEPTH')) + self.APP_MAX_EXECUTION_TIME = int(get_env('APP_MAX_EXECUTION_TIME')) # Moderation in app Configurations. self.OUTPUT_MODERATION_BUFFER_SIZE = int(get_env('OUTPUT_MODERATION_BUFFER_SIZE')) diff --git a/api/core/app/apps/base_app_queue_manager.py b/api/core/app/apps/base_app_queue_manager.py index 43a44819f9495e..eff07cc071d6ae 100644 --- a/api/core/app/apps/base_app_queue_manager.py +++ b/api/core/app/apps/base_app_queue_manager.py @@ -5,6 +5,7 @@ from enum import Enum from typing import Any +from flask import current_app from sqlalchemy.orm import DeclarativeMeta from core.app.entities.app_invoke_entities import InvokeFrom @@ -46,8 +47,8 @@ def listen(self) -> Generator: Listen to queue :return: """ - # wait for 10 minutes to stop listen - listen_timeout = 600 + # wait for APP_MAX_EXECUTION_TIME seconds to stop listen + listen_timeout = current_app.config.get("APP_MAX_EXECUTION_TIME") start_time = time.time() last_ping_time = 0 From e8afc416dd18b94b09f7ec6749abbcd6f23ad4ec Mon Sep 17 00:00:00 2001 From: Yeuoly <45712896+Yeuoly@users.noreply.github.com> Date: Thu, 13 Jun 2024 23:16:28 +0800 Subject: [PATCH 48/70] improve: CI experience (#5168) --- api/tests/integration_tests/model_runtime/__mock/anthropic.py | 2 -- .../integration_tests/model_runtime/__mock/openai_chat.py | 4 +--- .../model_runtime/__mock/openai_completion.py | 4 +--- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/api/tests/integration_tests/model_runtime/__mock/anthropic.py b/api/tests/integration_tests/model_runtime/__mock/anthropic.py index 037501c41086da..3326f874b09505 100644 --- a/api/tests/integration_tests/model_runtime/__mock/anthropic.py +++ b/api/tests/integration_tests/model_runtime/__mock/anthropic.py @@ -1,6 +1,5 @@ import os from collections.abc import Iterable -from time import sleep from typing import Any, Literal, Union import anthropic @@ -64,7 +63,6 @@ def mocked_anthropic_chat_create_stream(model: str) -> Stream[MessageStreamEvent index = 0 for i in range(0, len(full_response_text)): - sleep(0.1) yield ContentBlockDeltaEvent( type='content_block_delta', delta=TextDelta(text=full_response_text[i], type='text_delta'), diff --git a/api/tests/integration_tests/model_runtime/__mock/openai_chat.py b/api/tests/integration_tests/model_runtime/__mock/openai_chat.py index 35a93b24895d81..c5af941d1efd7d 100644 --- a/api/tests/integration_tests/model_runtime/__mock/openai_chat.py +++ b/api/tests/integration_tests/model_runtime/__mock/openai_chat.py @@ -1,7 +1,7 @@ import re from collections.abc import Generator from json import dumps, loads -from time import sleep, time +from time import time # import monkeypatch from typing import Any, Literal, Optional, Union @@ -112,7 +112,6 @@ def mocked_openai_chat_create_sync( if not function_call: tool_calls = MockChatClass.generate_tool_calls(tools=tools) - sleep(1) return _ChatCompletion( id='cmpl-3QJQa5jXJ5Z5X', choices=[ @@ -151,7 +150,6 @@ def mocked_openai_chat_create_stream( full_text = "Hello, world!\n\n```python\nprint('Hello, world!')\n```" for i in range(0, len(full_text) + 1): - sleep(0.1) if i == len(full_text): yield ChatCompletionChunk( id='cmpl-3QJQa5jXJ5Z5X', diff --git a/api/tests/integration_tests/model_runtime/__mock/openai_completion.py b/api/tests/integration_tests/model_runtime/__mock/openai_completion.py index ec0f306aa37613..b0d26759055bff 100644 --- a/api/tests/integration_tests/model_runtime/__mock/openai_completion.py +++ b/api/tests/integration_tests/model_runtime/__mock/openai_completion.py @@ -1,6 +1,6 @@ import re from collections.abc import Generator -from time import sleep, time +from time import time # import monkeypatch from typing import Any, Literal, Optional, Union @@ -20,7 +20,6 @@ class MockCompletionsClass: def mocked_openai_completion_create_sync( model: str ) -> CompletionMessage: - sleep(1) return CompletionMessage( id="cmpl-3QJQa5jXJ5Z5X", object="text_completion", @@ -48,7 +47,6 @@ def mocked_openai_completion_create_stream( ) -> Generator[CompletionMessage, None, None]: full_text = "Hello, world!\n\n```python\nprint('Hello, world!')\n```" for i in range(0, len(full_text) + 1): - sleep(0.1) if i == len(full_text): yield CompletionMessage( id="cmpl-3QJQa5jXJ5Z5X", From f976740b57b2ebf42dff60a9a09d5507d44908e9 Mon Sep 17 00:00:00 2001 From: Bowen Liang Date: Fri, 14 Jun 2024 01:05:37 +0800 Subject: [PATCH 49/70] improve: mordernizing validation by migrating pydantic from 1.x to 2.x (#4592) --- api/controllers/console/feature.py | 4 +- api/controllers/web/feature.py | 2 +- api/core/agent/cot_agent_runner.py | 14 +- api/core/agent/fc_agent_runner.py | 4 +- api/core/app/apps/agent_chat/app_runner.py | 18 +- api/core/app/apps/base_app_queue_manager.py | 2 +- api/core/app/apps/base_app_runner.py | 4 +- api/core/app/apps/chat/app_runner.py | 20 +- api/core/app/apps/completion/app_runner.py | 16 +- .../app/apps/message_based_app_generator.py | 4 +- api/core/app/entities/app_invoke_entities.py | 10 +- api/core/app/entities/queue_entities.py | 55 ++-- api/core/app/entities/task_entities.py | 12 +- .../hosting_moderation/hosting_moderation.py | 2 +- .../easy_ui_based_generate_task_pipeline.py | 2 +- .../agent_tool_callback_handler.py | 2 +- api/core/entities/message_entities.py | 2 +- api/core/entities/model_entities.py | 5 +- api/core/entities/provider_configuration.py | 12 +- api/core/entities/provider_entities.py | 8 +- api/core/extension/extensible.py | 2 +- .../helper/code_executor/code_executor.py | 6 +- .../code_executor/code_node_provider.py | 2 +- .../code_executor/template_transformer.py | 4 +- api/core/indexing_runner.py | 2 +- .../entities/message_entities.py | 9 +- .../model_runtime/entities/model_entities.py | 6 +- .../entities/provider_entities.py | 6 +- .../model_providers/__base/ai_model.py | 5 + .../__base/large_language_model.py | 5 + .../__base/moderation_model.py | 5 + .../__base/speech2text_model.py | 5 + .../model_providers/__base/text2img_model.py | 5 + .../__base/text_embedding_model.py | 5 + .../model_providers/__base/tts_model.py | 5 + .../model_providers/model_provider_factory.py | 8 +- api/core/model_runtime/utils/encoders.py | 2 +- api/core/model_runtime/utils/helper.py | 2 +- api/core/moderation/api/api.py | 4 +- api/core/moderation/output_moderation.py | 6 +- .../entities/advanced_prompt_entities.py | 4 +- .../datasource/vdb/milvus/milvus_vector.py | 4 +- .../datasource/vdb/pgvecto_rs/pgvecto_rs.py | 4 +- .../rag/datasource/vdb/pgvector/pgvector.py | 4 +- .../datasource/vdb/qdrant/qdrant_vector.py | 4 +- .../rag/datasource/vdb/relyt/relyt_vector.py | 4 +- .../datasource/vdb/tidb_vector/tidb_vector.py | 4 +- .../vdb/weaviate/weaviate_vector.py | 6 +- api/core/rag/extractor/blod/blod.py | 12 +- .../rag/extractor/entity/extract_setting.py | 10 +- api/core/tools/entities/api_entities.py | 2 +- api/core/tools/entities/tool_entities.py | 12 +- .../provider/builtin/aippt/tools/aippt.py | 11 +- .../builtin/arxiv/tools/arxiv_search.py | 12 +- .../builtin/bing/tools/bing_web_search.py | 2 +- .../builtin/brave/tools/brave_search.py | 6 +- .../duckduckgo/tools/duckduckgo_search.py | 174 +++++++++++++ .../builtin/firecrawl/tools/crawl.yaml | 4 +- .../builtin/pubmed/tools/pubmed_search.py | 14 +- .../builtin/qrcode/tools/qrcode_generator.py | 2 +- .../builtin/searxng/tools/searxng_search.py | 6 +- .../builtin/stability/tools/text2image.py | 2 +- .../tools/searchStackExQuestions.yaml | 4 +- .../builtin/tavily/tools/tavily_search.yaml | 24 +- .../builtin/twilio/tools/send_message.py | 7 +- .../builtin/webscraper/tools/webscraper.yaml | 4 +- api/core/tools/tool/api_tool.py | 6 +- .../dataset_retriever_base_tool.py | 6 +- api/core/tools/tool/tool.py | 15 +- api/core/workflow/nodes/code/entities.py | 2 +- .../workflow/nodes/http_request/entities.py | 15 +- .../nodes/http_request/http_request_node.py | 2 +- api/core/workflow/nodes/iteration/entities.py | 2 +- .../nodes/knowledge_retrieval/entities.py | 6 +- .../nodes/parameter_extractor/entities.py | 18 +- .../nodes/question_classifier/entities.py | 4 +- api/core/workflow/nodes/tool/entities.py | 21 +- .../nodes/variable_aggregator/entities.py | 2 +- api/core/workflow/workflow_engine_manager.py | 2 +- .../deduct_quota_when_messaeg_created.py | 2 +- ...vider_last_used_at_when_messaeg_created.py | 2 +- api/poetry.lock | 243 ++++++++++++++---- api/pyproject.toml | 4 +- api/requirements.txt | 4 +- .../entities/model_provider_entities.py | 10 +- api/services/feature_service.py | 5 +- .../rag/datasource/vdb/milvus/test_milvus.py | 2 +- 87 files changed, 702 insertions(+), 305 deletions(-) create mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py diff --git a/api/controllers/console/feature.py b/api/controllers/console/feature.py index 44d9d6752226dd..8475cd848822a7 100644 --- a/api/controllers/console/feature.py +++ b/api/controllers/console/feature.py @@ -16,12 +16,12 @@ class FeatureApi(Resource): @account_initialization_required @cloud_utm_record def get(self): - return FeatureService.get_features(current_user.current_tenant_id).dict() + return FeatureService.get_features(current_user.current_tenant_id).model_dump() class SystemFeatureApi(Resource): def get(self): - return FeatureService.get_system_features().dict() + return FeatureService.get_system_features().model_dump() api.add_resource(FeatureApi, '/features') diff --git a/api/controllers/web/feature.py b/api/controllers/web/feature.py index 65842d78c6c970..69b38faaf655e8 100644 --- a/api/controllers/web/feature.py +++ b/api/controllers/web/feature.py @@ -6,7 +6,7 @@ class SystemFeatureApi(Resource): def get(self): - return FeatureService.get_system_features().dict() + return FeatureService.get_system_features().model_dump() api.add_resource(SystemFeatureApi, '/system-features') diff --git a/api/core/agent/cot_agent_runner.py b/api/core/agent/cot_agent_runner.py index 40cfb20d0bf3fd..141ba2c252d95d 100644 --- a/api/core/agent/cot_agent_runner.py +++ b/api/core/agent/cot_agent_runner.py @@ -43,9 +43,9 @@ def run(self, message: Message, self._init_react_state(query) # check model mode - if 'Observation' not in app_generate_entity.model_config.stop: - if app_generate_entity.model_config.provider not in self._ignore_observation_providers: - app_generate_entity.model_config.stop.append('Observation') + if 'Observation' not in app_generate_entity.model_conf.stop: + if app_generate_entity.model_conf.provider not in self._ignore_observation_providers: + app_generate_entity.model_conf.stop.append('Observation') app_config = self.app_config @@ -109,9 +109,9 @@ def increase_usage(final_llm_usage_dict: dict[str, LLMUsage], usage: LLMUsage): # invoke model chunks: Generator[LLMResultChunk, None, None] = model_instance.invoke_llm( prompt_messages=prompt_messages, - model_parameters=app_generate_entity.model_config.parameters, + model_parameters=app_generate_entity.model_conf.parameters, tools=[], - stop=app_generate_entity.model_config.stop, + stop=app_generate_entity.model_conf.stop, stream=True, user=self.user_id, callbacks=[], @@ -141,8 +141,8 @@ def increase_usage(final_llm_usage_dict: dict[str, LLMUsage], usage: LLMUsage): if isinstance(chunk, AgentScratchpadUnit.Action): action = chunk # detect action - scratchpad.agent_response += json.dumps(chunk.dict()) - scratchpad.action_str = json.dumps(chunk.dict()) + scratchpad.agent_response += json.dumps(chunk.model_dump()) + scratchpad.action_str = json.dumps(chunk.model_dump()) scratchpad.action = action else: scratchpad.agent_response += chunk diff --git a/api/core/agent/fc_agent_runner.py b/api/core/agent/fc_agent_runner.py index d416a319a4022a..d7b063eb92ec55 100644 --- a/api/core/agent/fc_agent_runner.py +++ b/api/core/agent/fc_agent_runner.py @@ -84,9 +84,9 @@ def increase_usage(final_llm_usage_dict: dict[str, LLMUsage], usage: LLMUsage): # invoke model chunks: Union[Generator[LLMResultChunk, None, None], LLMResult] = model_instance.invoke_llm( prompt_messages=prompt_messages, - model_parameters=app_generate_entity.model_config.parameters, + model_parameters=app_generate_entity.model_conf.parameters, tools=prompt_messages_tools, - stop=app_generate_entity.model_config.stop, + stop=app_generate_entity.model_conf.stop, stream=self.stream_tool_call, user=self.user_id, callbacks=[], diff --git a/api/core/app/apps/agent_chat/app_runner.py b/api/core/app/apps/agent_chat/app_runner.py index dfa5d4591b39d8..d6367300de26e3 100644 --- a/api/core/app/apps/agent_chat/app_runner.py +++ b/api/core/app/apps/agent_chat/app_runner.py @@ -58,7 +58,7 @@ def run(self, application_generate_entity: AgentChatAppGenerateEntity, # Not Include: memory, external data, dataset context self.get_pre_calculate_rest_tokens( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -69,8 +69,8 @@ def run(self, application_generate_entity: AgentChatAppGenerateEntity, if application_generate_entity.conversation_id: # get memory of conversation (read-only) model_instance = ModelInstance( - provider_model_bundle=application_generate_entity.model_config.provider_model_bundle, - model=application_generate_entity.model_config.model + provider_model_bundle=application_generate_entity.model_conf.provider_model_bundle, + model=application_generate_entity.model_conf.model ) memory = TokenBufferMemory( @@ -83,7 +83,7 @@ def run(self, application_generate_entity: AgentChatAppGenerateEntity, # memory(optional) prompt_messages, _ = self.organize_prompt_messages( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -152,7 +152,7 @@ def run(self, application_generate_entity: AgentChatAppGenerateEntity, # memory(optional), external data, dataset context(optional) prompt_messages, _ = self.organize_prompt_messages( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -182,12 +182,12 @@ def run(self, application_generate_entity: AgentChatAppGenerateEntity, # init model instance model_instance = ModelInstance( - provider_model_bundle=application_generate_entity.model_config.provider_model_bundle, - model=application_generate_entity.model_config.model + provider_model_bundle=application_generate_entity.model_conf.provider_model_bundle, + model=application_generate_entity.model_conf.model ) prompt_message, _ = self.organize_prompt_messages( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -225,7 +225,7 @@ def run(self, application_generate_entity: AgentChatAppGenerateEntity, application_generate_entity=application_generate_entity, conversation=conversation, app_config=app_config, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, config=agent_entity, queue_manager=queue_manager, message=message, diff --git a/api/core/app/apps/base_app_queue_manager.py b/api/core/app/apps/base_app_queue_manager.py index eff07cc071d6ae..b5c49d65c2283d 100644 --- a/api/core/app/apps/base_app_queue_manager.py +++ b/api/core/app/apps/base_app_queue_manager.py @@ -100,7 +100,7 @@ def publish(self, event: AppQueueEvent, pub_from: PublishFrom) -> None: :param pub_from: :return: """ - self._check_for_sqlalchemy_models(event.dict()) + self._check_for_sqlalchemy_models(event.model_dump()) self._publish(event, pub_from) @abstractmethod diff --git a/api/core/app/apps/base_app_runner.py b/api/core/app/apps/base_app_runner.py index 545463c8bd69cd..53f457cb116c02 100644 --- a/api/core/app/apps/base_app_runner.py +++ b/api/core/app/apps/base_app_runner.py @@ -218,7 +218,7 @@ def direct_output(self, queue_manager: AppQueueManager, index = 0 for token in text: chunk = LLMResultChunk( - model=app_generate_entity.model_config.model, + model=app_generate_entity.model_conf.model, prompt_messages=prompt_messages, delta=LLMResultChunkDelta( index=index, @@ -237,7 +237,7 @@ def direct_output(self, queue_manager: AppQueueManager, queue_manager.publish( QueueMessageEndEvent( llm_result=LLMResult( - model=app_generate_entity.model_config.model, + model=app_generate_entity.model_conf.model, prompt_messages=prompt_messages, message=AssistantPromptMessage(content=text), usage=usage if usage else LLMUsage.empty_usage() diff --git a/api/core/app/apps/chat/app_runner.py b/api/core/app/apps/chat/app_runner.py index ba2095076fa404..7d243d0726724e 100644 --- a/api/core/app/apps/chat/app_runner.py +++ b/api/core/app/apps/chat/app_runner.py @@ -54,7 +54,7 @@ def run(self, application_generate_entity: ChatAppGenerateEntity, # Not Include: memory, external data, dataset context self.get_pre_calculate_rest_tokens( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -65,8 +65,8 @@ def run(self, application_generate_entity: ChatAppGenerateEntity, if application_generate_entity.conversation_id: # get memory of conversation (read-only) model_instance = ModelInstance( - provider_model_bundle=application_generate_entity.model_config.provider_model_bundle, - model=application_generate_entity.model_config.model + provider_model_bundle=application_generate_entity.model_conf.provider_model_bundle, + model=application_generate_entity.model_conf.model ) memory = TokenBufferMemory( @@ -79,7 +79,7 @@ def run(self, application_generate_entity: ChatAppGenerateEntity, # memory(optional) prompt_messages, stop = self.organize_prompt_messages( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -159,7 +159,7 @@ def run(self, application_generate_entity: ChatAppGenerateEntity, app_id=app_record.id, user_id=application_generate_entity.user_id, tenant_id=app_record.tenant_id, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, config=app_config.dataset, query=query, invoke_from=application_generate_entity.invoke_from, @@ -173,7 +173,7 @@ def run(self, application_generate_entity: ChatAppGenerateEntity, # memory(optional), external data, dataset context(optional) prompt_messages, stop = self.organize_prompt_messages( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -194,21 +194,21 @@ def run(self, application_generate_entity: ChatAppGenerateEntity, # Re-calculate the max tokens if sum(prompt_token + max_tokens) over model token limit self.recalc_llm_max_tokens( - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_messages=prompt_messages ) # Invoke model model_instance = ModelInstance( - provider_model_bundle=application_generate_entity.model_config.provider_model_bundle, - model=application_generate_entity.model_config.model + provider_model_bundle=application_generate_entity.model_conf.provider_model_bundle, + model=application_generate_entity.model_conf.model ) db.session.close() invoke_result = model_instance.invoke_llm( prompt_messages=prompt_messages, - model_parameters=application_generate_entity.model_config.parameters, + model_parameters=application_generate_entity.model_conf.parameters, stop=stop, stream=application_generate_entity.stream, user=application_generate_entity.user_id, diff --git a/api/core/app/apps/completion/app_runner.py b/api/core/app/apps/completion/app_runner.py index 40102f89996ba8..a3a9945bc0436b 100644 --- a/api/core/app/apps/completion/app_runner.py +++ b/api/core/app/apps/completion/app_runner.py @@ -50,7 +50,7 @@ def run(self, application_generate_entity: CompletionAppGenerateEntity, # Not Include: memory, external data, dataset context self.get_pre_calculate_rest_tokens( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -61,7 +61,7 @@ def run(self, application_generate_entity: CompletionAppGenerateEntity, # Include: prompt template, inputs, query(optional), files(optional) prompt_messages, stop = self.organize_prompt_messages( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -119,7 +119,7 @@ def run(self, application_generate_entity: CompletionAppGenerateEntity, app_id=app_record.id, user_id=application_generate_entity.user_id, tenant_id=app_record.tenant_id, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, config=dataset_config, query=query, invoke_from=application_generate_entity.invoke_from, @@ -132,7 +132,7 @@ def run(self, application_generate_entity: CompletionAppGenerateEntity, # memory(optional), external data, dataset context(optional) prompt_messages, stop = self.organize_prompt_messages( app_record=app_record, - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_template_entity=app_config.prompt_template, inputs=inputs, files=files, @@ -152,21 +152,21 @@ def run(self, application_generate_entity: CompletionAppGenerateEntity, # Re-calculate the max tokens if sum(prompt_token + max_tokens) over model token limit self.recalc_llm_max_tokens( - model_config=application_generate_entity.model_config, + model_config=application_generate_entity.model_conf, prompt_messages=prompt_messages ) # Invoke model model_instance = ModelInstance( - provider_model_bundle=application_generate_entity.model_config.provider_model_bundle, - model=application_generate_entity.model_config.model + provider_model_bundle=application_generate_entity.model_conf.provider_model_bundle, + model=application_generate_entity.model_conf.model ) db.session.close() invoke_result = model_instance.invoke_llm( prompt_messages=prompt_messages, - model_parameters=application_generate_entity.model_config.parameters, + model_parameters=application_generate_entity.model_conf.parameters, stop=stop, stream=application_generate_entity.stream, user=application_generate_entity.user_id, diff --git a/api/core/app/apps/message_based_app_generator.py b/api/core/app/apps/message_based_app_generator.py index c70c5a97aefae1..6acf5da8df4d2a 100644 --- a/api/core/app/apps/message_based_app_generator.py +++ b/api/core/app/apps/message_based_app_generator.py @@ -158,8 +158,8 @@ def _init_generate_records(self, model_id = None else: app_model_config_id = app_config.app_model_config_id - model_provider = application_generate_entity.model_config.provider - model_id = application_generate_entity.model_config.model + model_provider = application_generate_entity.model_conf.provider + model_id = application_generate_entity.model_conf.model override_model_configs = None if app_config.app_model_config_from == EasyUIBasedAppModelConfigFrom.ARGS \ and app_config.app_mode in [AppMode.AGENT_CHAT, AppMode.CHAT, AppMode.COMPLETION]: diff --git a/api/core/app/entities/app_invoke_entities.py b/api/core/app/entities/app_invoke_entities.py index cc63fa46843fd6..f27a110870b111 100644 --- a/api/core/app/entities/app_invoke_entities.py +++ b/api/core/app/entities/app_invoke_entities.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Any, Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.app.app_config.entities import AppConfig, EasyUIBasedAppConfig, WorkflowUIBasedAppConfig from core.entities.provider_configuration import ProviderModelBundle @@ -62,6 +62,9 @@ class ModelConfigWithCredentialsEntity(BaseModel): parameters: dict[str, Any] = {} stop: list[str] = [] + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + class AppGenerateEntity(BaseModel): """ @@ -93,10 +96,13 @@ class EasyUIBasedAppGenerateEntity(AppGenerateEntity): """ # app config app_config: EasyUIBasedAppConfig - model_config: ModelConfigWithCredentialsEntity + model_conf: ModelConfigWithCredentialsEntity query: Optional[str] = None + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + class ChatAppGenerateEntity(EasyUIBasedAppGenerateEntity): """ diff --git a/api/core/app/entities/queue_entities.py b/api/core/app/entities/queue_entities.py index 47fa2ac19d7659..b7e8a3a73e664e 100644 --- a/api/core/app/entities/queue_entities.py +++ b/api/core/app/entities/queue_entities.py @@ -1,14 +1,14 @@ from enum import Enum from typing import Any, Optional -from pydantic import BaseModel, validator +from pydantic import BaseModel, field_validator from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk from core.workflow.entities.base_node_data_entities import BaseNodeData from core.workflow.entities.node_entities import NodeType -class QueueEvent(Enum): +class QueueEvent(str, Enum): """ QueueEvent enum """ @@ -47,14 +47,14 @@ class QueueLLMChunkEvent(AppQueueEvent): """ QueueLLMChunkEvent entity """ - event = QueueEvent.LLM_CHUNK + event: QueueEvent = QueueEvent.LLM_CHUNK chunk: LLMResultChunk class QueueIterationStartEvent(AppQueueEvent): """ QueueIterationStartEvent entity """ - event = QueueEvent.ITERATION_START + event: QueueEvent = QueueEvent.ITERATION_START node_id: str node_type: NodeType node_data: BaseNodeData @@ -68,16 +68,17 @@ class QueueIterationNextEvent(AppQueueEvent): """ QueueIterationNextEvent entity """ - event = QueueEvent.ITERATION_NEXT + event: QueueEvent = QueueEvent.ITERATION_NEXT index: int node_id: str node_type: NodeType node_run_index: int - output: Optional[Any] # output for the current iteration + output: Optional[Any] = None # output for the current iteration - @validator('output', pre=True, always=True) + @classmethod + @field_validator('output', mode='before') def set_output(cls, v): """ Set output @@ -92,7 +93,7 @@ class QueueIterationCompletedEvent(AppQueueEvent): """ QueueIterationCompletedEvent entity """ - event = QueueEvent.ITERATION_COMPLETED + event:QueueEvent = QueueEvent.ITERATION_COMPLETED node_id: str node_type: NodeType @@ -104,7 +105,7 @@ class QueueTextChunkEvent(AppQueueEvent): """ QueueTextChunkEvent entity """ - event = QueueEvent.TEXT_CHUNK + event: QueueEvent = QueueEvent.TEXT_CHUNK text: str metadata: Optional[dict] = None @@ -113,7 +114,7 @@ class QueueAgentMessageEvent(AppQueueEvent): """ QueueMessageEvent entity """ - event = QueueEvent.AGENT_MESSAGE + event: QueueEvent = QueueEvent.AGENT_MESSAGE chunk: LLMResultChunk @@ -121,7 +122,7 @@ class QueueMessageReplaceEvent(AppQueueEvent): """ QueueMessageReplaceEvent entity """ - event = QueueEvent.MESSAGE_REPLACE + event: QueueEvent = QueueEvent.MESSAGE_REPLACE text: str @@ -129,7 +130,7 @@ class QueueRetrieverResourcesEvent(AppQueueEvent): """ QueueRetrieverResourcesEvent entity """ - event = QueueEvent.RETRIEVER_RESOURCES + event: QueueEvent = QueueEvent.RETRIEVER_RESOURCES retriever_resources: list[dict] @@ -137,7 +138,7 @@ class QueueAnnotationReplyEvent(AppQueueEvent): """ QueueAnnotationReplyEvent entity """ - event = QueueEvent.ANNOTATION_REPLY + event: QueueEvent = QueueEvent.ANNOTATION_REPLY message_annotation_id: str @@ -145,7 +146,7 @@ class QueueMessageEndEvent(AppQueueEvent): """ QueueMessageEndEvent entity """ - event = QueueEvent.MESSAGE_END + event: QueueEvent = QueueEvent.MESSAGE_END llm_result: Optional[LLMResult] = None @@ -153,28 +154,28 @@ class QueueAdvancedChatMessageEndEvent(AppQueueEvent): """ QueueAdvancedChatMessageEndEvent entity """ - event = QueueEvent.ADVANCED_CHAT_MESSAGE_END + event: QueueEvent = QueueEvent.ADVANCED_CHAT_MESSAGE_END class QueueWorkflowStartedEvent(AppQueueEvent): """ QueueWorkflowStartedEvent entity """ - event = QueueEvent.WORKFLOW_STARTED + event: QueueEvent = QueueEvent.WORKFLOW_STARTED class QueueWorkflowSucceededEvent(AppQueueEvent): """ QueueWorkflowSucceededEvent entity """ - event = QueueEvent.WORKFLOW_SUCCEEDED + event: QueueEvent = QueueEvent.WORKFLOW_SUCCEEDED class QueueWorkflowFailedEvent(AppQueueEvent): """ QueueWorkflowFailedEvent entity """ - event = QueueEvent.WORKFLOW_FAILED + event: QueueEvent = QueueEvent.WORKFLOW_FAILED error: str @@ -182,7 +183,7 @@ class QueueNodeStartedEvent(AppQueueEvent): """ QueueNodeStartedEvent entity """ - event = QueueEvent.NODE_STARTED + event: QueueEvent = QueueEvent.NODE_STARTED node_id: str node_type: NodeType @@ -195,7 +196,7 @@ class QueueNodeSucceededEvent(AppQueueEvent): """ QueueNodeSucceededEvent entity """ - event = QueueEvent.NODE_SUCCEEDED + event: QueueEvent = QueueEvent.NODE_SUCCEEDED node_id: str node_type: NodeType @@ -213,7 +214,7 @@ class QueueNodeFailedEvent(AppQueueEvent): """ QueueNodeFailedEvent entity """ - event = QueueEvent.NODE_FAILED + event: QueueEvent = QueueEvent.NODE_FAILED node_id: str node_type: NodeType @@ -230,7 +231,7 @@ class QueueAgentThoughtEvent(AppQueueEvent): """ QueueAgentThoughtEvent entity """ - event = QueueEvent.AGENT_THOUGHT + event: QueueEvent = QueueEvent.AGENT_THOUGHT agent_thought_id: str @@ -238,7 +239,7 @@ class QueueMessageFileEvent(AppQueueEvent): """ QueueAgentThoughtEvent entity """ - event = QueueEvent.MESSAGE_FILE + event: QueueEvent = QueueEvent.MESSAGE_FILE message_file_id: str @@ -246,15 +247,15 @@ class QueueErrorEvent(AppQueueEvent): """ QueueErrorEvent entity """ - event = QueueEvent.ERROR - error: Any + event: QueueEvent = QueueEvent.ERROR + error: Any = None class QueuePingEvent(AppQueueEvent): """ QueuePingEvent entity """ - event = QueueEvent.PING + event: QueueEvent = QueueEvent.PING class QueueStopEvent(AppQueueEvent): @@ -270,7 +271,7 @@ class StopBy(Enum): OUTPUT_MODERATION = "output-moderation" INPUT_MODERATION = "input-moderation" - event = QueueEvent.STOP + event: QueueEvent = QueueEvent.STOP stopped_by: StopBy diff --git a/api/core/app/entities/task_entities.py b/api/core/app/entities/task_entities.py index 5956bc35fad55f..cb023ae9fe6759 100644 --- a/api/core/app/entities/task_entities.py +++ b/api/core/app/entities/task_entities.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Any, Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.model_runtime.entities.llm_entities import LLMResult, LLMUsage from core.model_runtime.utils.encoders import jsonable_encoder @@ -118,9 +118,7 @@ class ErrorStreamResponse(StreamResponse): """ event: StreamEvent = StreamEvent.ERROR err: Exception - - class Config: - arbitrary_types_allowed = True + model_config = ConfigDict(arbitrary_types_allowed=True) class MessageStreamResponse(StreamResponse): @@ -360,7 +358,7 @@ class Data(BaseModel): title: str index: int created_at: int - pre_iteration_output: Optional[Any] + pre_iteration_output: Optional[Any] = None extras: dict = {} event: StreamEvent = StreamEvent.ITERATION_NEXT @@ -379,12 +377,12 @@ class Data(BaseModel): node_id: str node_type: str title: str - outputs: Optional[dict] + outputs: Optional[dict] = None created_at: int extras: dict = None inputs: dict = None status: WorkflowNodeExecutionStatus - error: Optional[str] + error: Optional[str] = None elapsed_time: float total_tokens: int finished_at: int diff --git a/api/core/app/features/hosting_moderation/hosting_moderation.py b/api/core/app/features/hosting_moderation/hosting_moderation.py index ec316248a27afe..b8f3e0e1f65b74 100644 --- a/api/core/app/features/hosting_moderation/hosting_moderation.py +++ b/api/core/app/features/hosting_moderation/hosting_moderation.py @@ -16,7 +16,7 @@ def check(self, application_generate_entity: EasyUIBasedAppGenerateEntity, :param prompt_messages: prompt messages :return: """ - model_config = application_generate_entity.model_config + model_config = application_generate_entity.model_conf text = "" for prompt_message in prompt_messages: diff --git a/api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py b/api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py index f71470edb242df..ccb684d84b0c8f 100644 --- a/api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py +++ b/api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py @@ -85,7 +85,7 @@ def __init__(self, application_generate_entity: Union[ :param stream: stream """ super().__init__(application_generate_entity, queue_manager, user, stream) - self._model_config = application_generate_entity.model_config + self._model_config = application_generate_entity.model_conf self._conversation = conversation self._message = message diff --git a/api/core/callback_handler/agent_tool_callback_handler.py b/api/core/callback_handler/agent_tool_callback_handler.py index af9db39890eeba..ac5076cd012d0d 100644 --- a/api/core/callback_handler/agent_tool_callback_handler.py +++ b/api/core/callback_handler/agent_tool_callback_handler.py @@ -29,7 +29,7 @@ def print_text( class DifyAgentCallbackHandler(BaseModel): """Callback Handler that prints to std out.""" color: Optional[str] = '' - current_loop = 1 + current_loop: int = 1 def __init__(self, color: Optional[str] = None) -> None: super().__init__() diff --git a/api/core/entities/message_entities.py b/api/core/entities/message_entities.py index b9406e24c4a987..370aeee4633550 100644 --- a/api/core/entities/message_entities.py +++ b/api/core/entities/message_entities.py @@ -17,7 +17,7 @@ def value_of(value): class PromptMessageFile(BaseModel): type: PromptMessageFileType - data: Any + data: Any = None class ImagePromptMessageFile(PromptMessageFile): diff --git a/api/core/entities/model_entities.py b/api/core/entities/model_entities.py index 9a797c1c95363d..22a21ecf9331ea 100644 --- a/api/core/entities/model_entities.py +++ b/api/core/entities/model_entities.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.model_runtime.entities.common_entities import I18nObject from core.model_runtime.entities.model_entities import ModelType, ProviderModel @@ -77,3 +77,6 @@ class DefaultModelEntity(BaseModel): model: str model_type: ModelType provider: DefaultModelProviderEntity + + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) diff --git a/api/core/entities/provider_configuration.py b/api/core/entities/provider_configuration.py index ec1b2d0d48a5c9..397409622eaede 100644 --- a/api/core/entities/provider_configuration.py +++ b/api/core/entities/provider_configuration.py @@ -6,7 +6,7 @@ from json import JSONDecodeError from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.entities.model_entities import ModelStatus, ModelWithProviderEntity, SimpleModelProviderEntity from core.entities.provider_entities import ( @@ -54,6 +54,9 @@ class ProviderConfiguration(BaseModel): custom_configuration: CustomConfiguration model_settings: list[ModelSettings] + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def __init__(self, **data): super().__init__(**data) @@ -1019,7 +1022,6 @@ class ProviderModelBundle(BaseModel): provider_instance: ModelProvider model_type_instance: AIModel - class Config: - """Configuration for this pydantic object.""" - - arbitrary_types_allowed = True + # pydantic configs + model_config = ConfigDict(arbitrary_types_allowed=True, + protected_namespaces=()) diff --git a/api/core/entities/provider_entities.py b/api/core/entities/provider_entities.py index 1eaa6ea02ca296..23f0b9cb3b367c 100644 --- a/api/core/entities/provider_entities.py +++ b/api/core/entities/provider_entities.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.model_runtime.entities.model_entities import ModelType from models.provider import ProviderQuotaType @@ -27,6 +27,9 @@ class RestrictModel(BaseModel): base_model_name: Optional[str] = None model_type: ModelType + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + class QuotaConfiguration(BaseModel): """ @@ -65,6 +68,9 @@ class CustomModelConfiguration(BaseModel): model_type: ModelType credentials: dict + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + class CustomConfiguration(BaseModel): """ diff --git a/api/core/extension/extensible.py b/api/core/extension/extensible.py index 3a37c6492e149b..b10654256475d0 100644 --- a/api/core/extension/extensible.py +++ b/api/core/extension/extensible.py @@ -16,7 +16,7 @@ class ExtensionModule(enum.Enum): class ModuleExtension(BaseModel): - extension_class: Any + extension_class: Any = None name: str label: Optional[dict] = None form_schema: Optional[list] = None diff --git a/api/core/helper/code_executor/code_executor.py b/api/core/helper/code_executor/code_executor.py index 37573c88cee6b6..c1874ed641987d 100644 --- a/api/core/helper/code_executor/code_executor.py +++ b/api/core/helper/code_executor/code_executor.py @@ -28,8 +28,8 @@ class CodeExecutionException(Exception): class CodeExecutionResponse(BaseModel): class Data(BaseModel): - stdout: Optional[str] - error: Optional[str] + stdout: Optional[str] = None + error: Optional[str] = None code: int message: str @@ -88,7 +88,7 @@ def execute_code(cls, } if dependencies: - data['dependencies'] = [dependency.dict() for dependency in dependencies] + data['dependencies'] = [dependency.model_dump() for dependency in dependencies] try: response = post(str(url), json=data, headers=headers, timeout=CODE_EXECUTION_TIMEOUT) diff --git a/api/core/helper/code_executor/code_node_provider.py b/api/core/helper/code_executor/code_node_provider.py index b76e15eeabeb23..761c0e2b2524fa 100644 --- a/api/core/helper/code_executor/code_node_provider.py +++ b/api/core/helper/code_executor/code_node_provider.py @@ -25,7 +25,7 @@ def get_default_code(cls) -> str: @classmethod def get_default_available_packages(cls) -> list[dict]: - return [p.dict() for p in CodeExecutor.list_dependencies(cls.get_language())] + return [p.model_dump() for p in CodeExecutor.list_dependencies(cls.get_language())] @classmethod def get_default_config(cls) -> dict: diff --git a/api/core/helper/code_executor/template_transformer.py b/api/core/helper/code_executor/template_transformer.py index 39af803f6efdb8..da7ef469d91abf 100644 --- a/api/core/helper/code_executor/template_transformer.py +++ b/api/core/helper/code_executor/template_transformer.py @@ -4,12 +4,10 @@ from base64 import b64encode from typing import Optional -from pydantic import BaseModel - from core.helper.code_executor.entities import CodeDependency -class TemplateTransformer(ABC, BaseModel): +class TemplateTransformer(ABC): _code_placeholder: str = '{{code}}' _inputs_placeholder: str = '{{inputs}}' _result_tag: str = '<>' diff --git a/api/core/indexing_runner.py b/api/core/indexing_runner.py index 7fa1d7d4b9ba0f..f2fb3771431ae2 100644 --- a/api/core/indexing_runner.py +++ b/api/core/indexing_runner.py @@ -550,7 +550,7 @@ def format_qa_document(self, flask_app: Flask, tenant_id: str, document_node, al document_qa_list = self.format_split_text(response) qa_documents = [] for result in document_qa_list: - qa_document = Document(page_content=result['question'], metadata=document_node.metadata.copy()) + qa_document = Document(page_content=result['question'], metadata=document_node.metadata.model_copy()) doc_id = str(uuid.uuid4()) hash = helper.generate_text_hash(result['question']) qa_document.metadata['answer'] = result['answer'] diff --git a/api/core/model_runtime/entities/message_entities.py b/api/core/model_runtime/entities/message_entities.py index 823c217c0928cc..2d32ce85c01f79 100644 --- a/api/core/model_runtime/entities/message_entities.py +++ b/api/core/model_runtime/entities/message_entities.py @@ -2,7 +2,7 @@ from enum import Enum from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, field_validator class PromptMessageRole(Enum): @@ -123,6 +123,13 @@ class ToolCallFunction(BaseModel): type: str function: ToolCallFunction + @field_validator('id', mode='before') + def transform_id_to_str(cls, value) -> str: + if not isinstance(value, str): + return str(value) + else: + return value + role: PromptMessageRole = PromptMessageRole.ASSISTANT tool_calls: list[ToolCall] = [] diff --git a/api/core/model_runtime/entities/model_entities.py b/api/core/model_runtime/entities/model_entities.py index 7dfd811b4f6416..3d471787bbef8e 100644 --- a/api/core/model_runtime/entities/model_entities.py +++ b/api/core/model_runtime/entities/model_entities.py @@ -2,7 +2,7 @@ from enum import Enum from typing import Any, Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.model_runtime.entities.common_entities import I18nObject @@ -148,9 +148,7 @@ class ProviderModel(BaseModel): fetch_from: FetchFrom model_properties: dict[ModelPropertyKey, Any] deprecated: bool = False - - class Config: - protected_namespaces = () + model_config = ConfigDict(protected_namespaces=()) class ParameterRule(BaseModel): diff --git a/api/core/model_runtime/entities/provider_entities.py b/api/core/model_runtime/entities/provider_entities.py index acc453bb845694..f0a3997204be1a 100644 --- a/api/core/model_runtime/entities/provider_entities.py +++ b/api/core/model_runtime/entities/provider_entities.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.model_runtime.entities.common_entities import I18nObject from core.model_runtime.entities.model_entities import AIModelEntity, ModelType, ProviderModel @@ -122,8 +122,8 @@ class ProviderEntity(BaseModel): provider_credential_schema: Optional[ProviderCredentialSchema] = None model_credential_schema: Optional[ModelCredentialSchema] = None - class Config: - protected_namespaces = () + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) def to_simple_provider(self) -> SimpleProviderEntity: """ diff --git a/api/core/model_runtime/model_providers/__base/ai_model.py b/api/core/model_runtime/model_providers/__base/ai_model.py index 919e72554c9fe0..83cfffa6116dc3 100644 --- a/api/core/model_runtime/model_providers/__base/ai_model.py +++ b/api/core/model_runtime/model_providers/__base/ai_model.py @@ -3,6 +3,8 @@ from abc import ABC, abstractmethod from typing import Optional +from pydantic import ConfigDict + from core.helper.position_helper import get_position_map, sort_by_position_map from core.model_runtime.entities.common_entities import I18nObject from core.model_runtime.entities.defaults import PARAMETER_RULE_TEMPLATE @@ -28,6 +30,9 @@ class AIModel(ABC): model_schemas: list[AIModelEntity] = None started_at: float = 0 + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + @abstractmethod def validate_credentials(self, model: str, credentials: dict) -> None: """ diff --git a/api/core/model_runtime/model_providers/__base/large_language_model.py b/api/core/model_runtime/model_providers/__base/large_language_model.py index 40bde385657115..f148625954952f 100644 --- a/api/core/model_runtime/model_providers/__base/large_language_model.py +++ b/api/core/model_runtime/model_providers/__base/large_language_model.py @@ -6,6 +6,8 @@ from collections.abc import Generator from typing import Optional, Union +from pydantic import ConfigDict + from core.model_runtime.callbacks.base_callback import Callback from core.model_runtime.callbacks.logging_callback import LoggingCallback from core.model_runtime.entities.llm_entities import LLMMode, LLMResult, LLMResultChunk, LLMResultChunkDelta, LLMUsage @@ -34,6 +36,9 @@ class LargeLanguageModel(AIModel): """ model_type: ModelType = ModelType.LLM + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def invoke(self, model: str, credentials: dict, prompt_messages: list[PromptMessage], model_parameters: Optional[dict] = None, tools: Optional[list[PromptMessageTool]] = None, stop: Optional[list[str]] = None, diff --git a/api/core/model_runtime/model_providers/__base/moderation_model.py b/api/core/model_runtime/model_providers/__base/moderation_model.py index 00cb1d6cc31624..2b17f292c5db00 100644 --- a/api/core/model_runtime/model_providers/__base/moderation_model.py +++ b/api/core/model_runtime/model_providers/__base/moderation_model.py @@ -2,6 +2,8 @@ from abc import abstractmethod from typing import Optional +from pydantic import ConfigDict + from core.model_runtime.entities.model_entities import ModelType from core.model_runtime.model_providers.__base.ai_model import AIModel @@ -12,6 +14,9 @@ class ModerationModel(AIModel): """ model_type: ModelType = ModelType.MODERATION + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def invoke(self, model: str, credentials: dict, text: str, user: Optional[str] = None) \ -> bool: diff --git a/api/core/model_runtime/model_providers/__base/speech2text_model.py b/api/core/model_runtime/model_providers/__base/speech2text_model.py index a084baf3401dd2..4fb11025fe07fd 100644 --- a/api/core/model_runtime/model_providers/__base/speech2text_model.py +++ b/api/core/model_runtime/model_providers/__base/speech2text_model.py @@ -2,6 +2,8 @@ from abc import abstractmethod from typing import IO, Optional +from pydantic import ConfigDict + from core.model_runtime.entities.model_entities import ModelType from core.model_runtime.model_providers.__base.ai_model import AIModel @@ -12,6 +14,9 @@ class Speech2TextModel(AIModel): """ model_type: ModelType = ModelType.SPEECH2TEXT + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def invoke(self, model: str, credentials: dict, file: IO[bytes], user: Optional[str] = None) \ -> str: diff --git a/api/core/model_runtime/model_providers/__base/text2img_model.py b/api/core/model_runtime/model_providers/__base/text2img_model.py index 972a2ea14ad73b..e0f1adb1c47f23 100644 --- a/api/core/model_runtime/model_providers/__base/text2img_model.py +++ b/api/core/model_runtime/model_providers/__base/text2img_model.py @@ -1,6 +1,8 @@ from abc import abstractmethod from typing import IO, Optional +from pydantic import ConfigDict + from core.model_runtime.entities.model_entities import ModelType from core.model_runtime.model_providers.__base.ai_model import AIModel @@ -11,6 +13,9 @@ class Text2ImageModel(AIModel): """ model_type: ModelType = ModelType.TEXT2IMG + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def invoke(self, model: str, credentials: dict, prompt: str, model_parameters: dict, user: Optional[str] = None) \ -> list[IO[bytes]]: diff --git a/api/core/model_runtime/model_providers/__base/text_embedding_model.py b/api/core/model_runtime/model_providers/__base/text_embedding_model.py index 1da4dcef9182fe..381d2f6cd19ed4 100644 --- a/api/core/model_runtime/model_providers/__base/text_embedding_model.py +++ b/api/core/model_runtime/model_providers/__base/text_embedding_model.py @@ -2,6 +2,8 @@ from abc import abstractmethod from typing import Optional +from pydantic import ConfigDict + from core.model_runtime.entities.model_entities import ModelPropertyKey, ModelType from core.model_runtime.entities.text_embedding_entities import TextEmbeddingResult from core.model_runtime.model_providers.__base.ai_model import AIModel @@ -13,6 +15,9 @@ class TextEmbeddingModel(AIModel): """ model_type: ModelType = ModelType.TEXT_EMBEDDING + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def invoke(self, model: str, credentials: dict, texts: list[str], user: Optional[str] = None) \ -> TextEmbeddingResult: diff --git a/api/core/model_runtime/model_providers/__base/tts_model.py b/api/core/model_runtime/model_providers/__base/tts_model.py index 22e546aad702a2..bc6a475f3672cd 100644 --- a/api/core/model_runtime/model_providers/__base/tts_model.py +++ b/api/core/model_runtime/model_providers/__base/tts_model.py @@ -4,6 +4,8 @@ from abc import abstractmethod from typing import Optional +from pydantic import ConfigDict + from core.model_runtime.entities.model_entities import ModelPropertyKey, ModelType from core.model_runtime.errors.invoke import InvokeBadRequestError from core.model_runtime.model_providers.__base.ai_model import AIModel @@ -15,6 +17,9 @@ class TTSModel(AIModel): """ model_type: ModelType = ModelType.TTS + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def invoke(self, model: str, tenant_id: str, credentials: dict, content_text: str, voice: str, streaming: bool, user: Optional[str] = None): """ diff --git a/api/core/model_runtime/model_providers/model_provider_factory.py b/api/core/model_runtime/model_providers/model_provider_factory.py index 26c4199d169384..a4dbaabfc9827b 100644 --- a/api/core/model_runtime/model_providers/model_provider_factory.py +++ b/api/core/model_runtime/model_providers/model_provider_factory.py @@ -2,7 +2,7 @@ import os from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.helper.module_import_helper import load_single_subclass_from_source from core.helper.position_helper import get_position_map, sort_to_dict_by_position_map @@ -19,11 +19,7 @@ class ModelProviderExtension(BaseModel): provider_instance: ModelProvider name: str position: Optional[int] = None - - class Config: - """Configuration for this pydantic object.""" - - arbitrary_types_allowed = True + model_config = ConfigDict(arbitrary_types_allowed=True) class ModelProviderFactory: diff --git a/api/core/model_runtime/utils/encoders.py b/api/core/model_runtime/utils/encoders.py index cf6c98e01a9a71..e41d49216c4f3c 100644 --- a/api/core/model_runtime/utils/encoders.py +++ b/api/core/model_runtime/utils/encoders.py @@ -12,9 +12,9 @@ from uuid import UUID from pydantic import BaseModel -from pydantic.color import Color from pydantic.networks import AnyUrl, NameEmail from pydantic.types import SecretBytes, SecretStr +from pydantic_extra_types.color import Color from ._compat import PYDANTIC_V2, Url, _model_dump diff --git a/api/core/model_runtime/utils/helper.py b/api/core/model_runtime/utils/helper.py index 09d08fa3bdb88f..c68a554471703f 100644 --- a/api/core/model_runtime/utils/helper.py +++ b/api/core/model_runtime/utils/helper.py @@ -6,4 +6,4 @@ def dump_model(model: BaseModel) -> dict: if hasattr(pydantic, 'model_dump'): return pydantic.model_dump(model) else: - return model.dict() + return model.model_dump() diff --git a/api/core/moderation/api/api.py b/api/core/moderation/api/api.py index 9cafbf17a360dc..f96e2a1c214f5d 100644 --- a/api/core/moderation/api/api.py +++ b/api/core/moderation/api/api.py @@ -51,7 +51,7 @@ def moderation_for_inputs(self, inputs: dict, query: str = "") -> ModerationInpu query=query ) - result = self._get_config_by_requestor(APIBasedExtensionPoint.APP_MODERATION_INPUT, params.dict()) + result = self._get_config_by_requestor(APIBasedExtensionPoint.APP_MODERATION_INPUT, params.model_dump()) return ModerationInputsResult(**result) return ModerationInputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response) @@ -66,7 +66,7 @@ def moderation_for_outputs(self, text: str) -> ModerationOutputsResult: text=text ) - result = self._get_config_by_requestor(APIBasedExtensionPoint.APP_MODERATION_OUTPUT, params.dict()) + result = self._get_config_by_requestor(APIBasedExtensionPoint.APP_MODERATION_OUTPUT, params.model_dump()) return ModerationOutputsResult(**result) return ModerationOutputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response) diff --git a/api/core/moderation/output_moderation.py b/api/core/moderation/output_moderation.py index af8910614da0cd..35874669524480 100644 --- a/api/core/moderation/output_moderation.py +++ b/api/core/moderation/output_moderation.py @@ -4,7 +4,7 @@ from typing import Any, Optional from flask import Flask, current_app -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.app.apps.base_app_queue_manager import AppQueueManager, PublishFrom from core.app.entities.queue_entities import QueueMessageReplaceEvent @@ -33,9 +33,7 @@ class OutputModeration(BaseModel): buffer: str = '' is_final_chunk: bool = False final_output: Optional[str] = None - - class Config: - arbitrary_types_allowed = True + model_config = ConfigDict(arbitrary_types_allowed=True) def should_direct_output(self): return self.final_output is not None diff --git a/api/core/prompt/entities/advanced_prompt_entities.py b/api/core/prompt/entities/advanced_prompt_entities.py index 23a8602bea6930..61df69163cba1c 100644 --- a/api/core/prompt/entities/advanced_prompt_entities.py +++ b/api/core/prompt/entities/advanced_prompt_entities.py @@ -11,7 +11,7 @@ class ChatModelMessage(BaseModel): """ text: str role: PromptMessageRole - edition_type: Optional[Literal['basic', 'jinja2']] + edition_type: Optional[Literal['basic', 'jinja2']] = None class CompletionModelPromptTemplate(BaseModel): @@ -19,7 +19,7 @@ class CompletionModelPromptTemplate(BaseModel): Completion Model Prompt Template. """ text: str - edition_type: Optional[Literal['basic', 'jinja2']] + edition_type: Optional[Literal['basic', 'jinja2']] = None class MemoryConfig(BaseModel): diff --git a/api/core/rag/datasource/vdb/milvus/milvus_vector.py b/api/core/rag/datasource/vdb/milvus/milvus_vector.py index d77cf26d2599c8..830836c854a205 100644 --- a/api/core/rag/datasource/vdb/milvus/milvus_vector.py +++ b/api/core/rag/datasource/vdb/milvus/milvus_vector.py @@ -4,7 +4,7 @@ from uuid import uuid4 from flask import current_app -from pydantic import BaseModel, root_validator +from pydantic import BaseModel, model_validator from pymilvus import MilvusClient, MilvusException, connections from core.rag.datasource.entity.embedding import Embeddings @@ -28,7 +28,7 @@ class MilvusConfig(BaseModel): batch_size: int = 100 database: str = "default" - @root_validator() + @model_validator(mode='before') def validate_config(cls, values: dict) -> dict: if not values.get('host'): raise ValueError("config MILVUS_HOST is required") diff --git a/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py b/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py index 80a2c3f82bb47f..61cac4f3a3e3f5 100644 --- a/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py +++ b/api/core/rag/datasource/vdb/pgvecto_rs/pgvecto_rs.py @@ -6,7 +6,7 @@ from flask import current_app from numpy import ndarray from pgvecto_rs.sqlalchemy import Vector -from pydantic import BaseModel, root_validator +from pydantic import BaseModel, model_validator from sqlalchemy import Float, String, create_engine, insert, select, text from sqlalchemy import text as sql_text from sqlalchemy.dialects import postgresql @@ -31,7 +31,7 @@ class PgvectoRSConfig(BaseModel): password: str database: str - @root_validator() + @model_validator(mode='before') def validate_config(cls, values: dict) -> dict: if not values['host']: raise ValueError("config PGVECTO_RS_HOST is required") diff --git a/api/core/rag/datasource/vdb/pgvector/pgvector.py b/api/core/rag/datasource/vdb/pgvector/pgvector.py index c9a1508ab28f9a..72d0a85f8d4b0d 100644 --- a/api/core/rag/datasource/vdb/pgvector/pgvector.py +++ b/api/core/rag/datasource/vdb/pgvector/pgvector.py @@ -6,7 +6,7 @@ import psycopg2.extras import psycopg2.pool from flask import current_app -from pydantic import BaseModel, root_validator +from pydantic import BaseModel, model_validator from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.vector_base import BaseVector @@ -24,7 +24,7 @@ class PGVectorConfig(BaseModel): password: str database: str - @root_validator() + @model_validator(mode='before') def validate_config(cls, values: dict) -> dict: if not values["host"]: raise ValueError("config PGVECTOR_HOST is required") diff --git a/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py b/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py index 49c0e2c985a4e4..bccc3a39f6479d 100644 --- a/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py +++ b/api/core/rag/datasource/vdb/qdrant/qdrant_vector.py @@ -40,9 +40,9 @@ class QdrantConfig(BaseModel): endpoint: str - api_key: Optional[str] + api_key: Optional[str] = None timeout: float = 20 - root_path: Optional[str] + root_path: Optional[str] = None grpc_port: int = 6334 prefer_grpc: bool = False diff --git a/api/core/rag/datasource/vdb/relyt/relyt_vector.py b/api/core/rag/datasource/vdb/relyt/relyt_vector.py index 5ccb24f57f547b..d2b32324a172d9 100644 --- a/api/core/rag/datasource/vdb/relyt/relyt_vector.py +++ b/api/core/rag/datasource/vdb/relyt/relyt_vector.py @@ -3,7 +3,7 @@ from typing import Any, Optional from flask import current_app -from pydantic import BaseModel, root_validator +from pydantic import BaseModel, model_validator from sqlalchemy import Column, Sequence, String, Table, create_engine, insert from sqlalchemy import text as sql_text from sqlalchemy.dialects.postgresql import JSON, TEXT @@ -33,7 +33,7 @@ class RelytConfig(BaseModel): password: str database: str - @root_validator() + @model_validator(mode='before') def validate_config(cls, values: dict) -> dict: if not values['host']: raise ValueError("config RELYT_HOST is required") diff --git a/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py b/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py index 6564c565d150db..3a9a56f93aa3e3 100644 --- a/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py +++ b/api/core/rag/datasource/vdb/tidb_vector/tidb_vector.py @@ -4,7 +4,7 @@ import sqlalchemy from flask import current_app -from pydantic import BaseModel, root_validator +from pydantic import BaseModel, model_validator from sqlalchemy import JSON, TEXT, Column, DateTime, String, Table, create_engine, insert from sqlalchemy import text as sql_text from sqlalchemy.orm import Session, declarative_base @@ -27,7 +27,7 @@ class TiDBVectorConfig(BaseModel): password: str database: str - @root_validator() + @model_validator(mode='before') def validate_config(cls, values: dict) -> dict: if not values['host']: raise ValueError("config TIDB_VECTOR_HOST is required") diff --git a/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py b/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py index 73f9c580aad856..c3595ae495a900 100644 --- a/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py +++ b/api/core/rag/datasource/vdb/weaviate/weaviate_vector.py @@ -5,7 +5,7 @@ import requests import weaviate from flask import current_app -from pydantic import BaseModel, root_validator +from pydantic import BaseModel, model_validator from core.rag.datasource.entity.embedding import Embeddings from core.rag.datasource.vdb.field import Field @@ -19,10 +19,10 @@ class WeaviateConfig(BaseModel): endpoint: str - api_key: Optional[str] + api_key: Optional[str] = None batch_size: int = 100 - @root_validator() + @model_validator(mode='before') def validate_config(cls, values: dict) -> dict: if not values['endpoint']: raise ValueError("config WEAVIATE_ENDPOINT is required") diff --git a/api/core/rag/extractor/blod/blod.py b/api/core/rag/extractor/blod/blod.py index 8d423e1b3f6236..abfdafcfa251a4 100644 --- a/api/core/rag/extractor/blod/blod.py +++ b/api/core/rag/extractor/blod/blod.py @@ -14,7 +14,7 @@ from pathlib import PurePath from typing import Any, Optional, Union -from pydantic import BaseModel, root_validator +from pydantic import BaseModel, ConfigDict, model_validator PathLike = Union[str, PurePath] @@ -29,7 +29,7 @@ class Blob(BaseModel): Inspired by: https://developer.mozilla.org/en-US/docs/Web/API/Blob """ - data: Union[bytes, str, None] # Raw data + data: Union[bytes, str, None] = None # Raw data mimetype: Optional[str] = None # Not to be confused with a file extension encoding: str = "utf-8" # Use utf-8 as default encoding, if decoding to string # Location where the original content was found @@ -37,17 +37,15 @@ class Blob(BaseModel): # Useful for situations where downstream code assumes it must work with file paths # rather than in-memory content. path: Optional[PathLike] = None - - class Config: - arbitrary_types_allowed = True - frozen = True + model_config = ConfigDict(arbitrary_types_allowed=True, frozen=True) @property def source(self) -> Optional[str]: """The source location of the blob as string if known otherwise none.""" return str(self.path) if self.path else None - @root_validator(pre=True) + @model_validator(mode="before") + @classmethod def check_blob_is_valid(cls, values: Mapping[str, Any]) -> Mapping[str, Any]: """Verify that either data or path is provided.""" if "data" not in values and "path" not in values: diff --git a/api/core/rag/extractor/entity/extract_setting.py b/api/core/rag/extractor/entity/extract_setting.py index 49cd4d0c033143..33d9786691932e 100644 --- a/api/core/rag/extractor/entity/extract_setting.py +++ b/api/core/rag/extractor/entity/extract_setting.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from models.dataset import Document from models.model import UploadFile @@ -13,9 +13,7 @@ class NotionInfo(BaseModel): notion_page_type: str document: Document = None tenant_id: str - - class Config: - arbitrary_types_allowed = True + model_config = ConfigDict(arbitrary_types_allowed=True) def __init__(self, **data) -> None: super().__init__(**data) @@ -29,9 +27,7 @@ class ExtractSetting(BaseModel): upload_file: UploadFile = None notion_info: NotionInfo = None document_model: str = None - - class Config: - arbitrary_types_allowed = True + model_config = ConfigDict(arbitrary_types_allowed=True) def __init__(self, **data) -> None: super().__init__(**data) diff --git a/api/core/tools/entities/api_entities.py b/api/core/tools/entities/api_entities.py index b6c553f3f12285..da12996b2bd6d1 100644 --- a/api/core/tools/entities/api_entities.py +++ b/api/core/tools/entities/api_entities.py @@ -13,7 +13,7 @@ class UserTool(BaseModel): name: str # identifier label: I18nObject # label description: I18nObject - parameters: Optional[list[ToolParameter]] + parameters: Optional[list[ToolParameter]] = None labels: list[str] = None UserToolProviderTypeLiteral = Optional[Literal[ diff --git a/api/core/tools/entities/tool_entities.py b/api/core/tools/entities/tool_entities.py index 55ef8e829121d9..265ee572f9ec5b 100644 --- a/api/core/tools/entities/tool_entities.py +++ b/api/core/tools/entities/tool_entities.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Any, Optional, Union, cast -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, field_validator from core.tools.entities.common_entities import I18nObject @@ -116,6 +116,14 @@ class ToolParameterOption(BaseModel): value: str = Field(..., description="The value of the option") label: I18nObject = Field(..., description="The label of the option") + @classmethod + @field_validator('value', mode='before') + def transform_id_to_str(cls, value) -> str: + if isinstance(value, bool): + return str(value) + else: + return value + class ToolParameter(BaseModel): class ToolParameterType(str, Enum): @@ -278,7 +286,7 @@ def dict(self) -> dict: 'conversation_id': self.conversation_id, 'user_id': self.user_id, 'tenant_id': self.tenant_id, - 'pool': [variable.dict() for variable in self.pool], + 'pool': [variable.model_dump() for variable in self.pool], } def set_text(self, tool_name: str, name: str, value: str) -> None: diff --git a/api/core/tools/provider/builtin/aippt/tools/aippt.py b/api/core/tools/provider/builtin/aippt/tools/aippt.py index 81465848a22f2a..518eb732c2348c 100644 --- a/api/core/tools/provider/builtin/aippt/tools/aippt.py +++ b/api/core/tools/provider/builtin/aippt/tools/aippt.py @@ -4,7 +4,7 @@ from json import loads as json_loads from threading import Lock from time import sleep, time -from typing import Any +from typing import Any, Optional from httpx import get, post from requests import get as requests_get @@ -22,9 +22,9 @@ class AIPPTGenerateTool(BuiltinTool): _api_base_url = URL('https://co.aippt.cn/api') _api_token_cache = {} - _api_token_cache_lock = Lock() + _api_token_cache_lock:Optional[Lock] = None _style_cache = {} - _style_cache_lock = Lock() + _style_cache_lock:Optional[Lock] = None _task = {} _task_type_map = { @@ -32,6 +32,11 @@ class AIPPTGenerateTool(BuiltinTool): 'markdown': 7, } + def __init__(self, **kwargs: Any): + super().__init__(**kwargs) + self._api_token_cache_lock = Lock() + self._style_cache_lock = Lock() + def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]: """ Invokes the AIPPT generate tool with the given user ID and tool parameters. diff --git a/api/core/tools/provider/builtin/arxiv/tools/arxiv_search.py b/api/core/tools/provider/builtin/arxiv/tools/arxiv_search.py index 448d2e8f849cd0..ce28373880ba18 100644 --- a/api/core/tools/provider/builtin/arxiv/tools/arxiv_search.py +++ b/api/core/tools/provider/builtin/arxiv/tools/arxiv_search.py @@ -44,14 +44,10 @@ class ArxivAPIWrapper(BaseModel): arxiv.run("tree of thought llm) """ - arxiv_search = arxiv.Search #: :meta private: - arxiv_exceptions = ( - arxiv.ArxivError, - arxiv.UnexpectedEmptyPageError, - arxiv.HTTPError, - ) # :meta private: + arxiv_search: type[arxiv.Search] = arxiv.Search #: :meta private: + arxiv_http_error: tuple[type[Exception]] = (arxiv.ArxivError, arxiv.UnexpectedEmptyPageError, arxiv.HTTPError) top_k_results: int = 3 - ARXIV_MAX_QUERY_LENGTH = 300 + ARXIV_MAX_QUERY_LENGTH: int = 300 load_max_docs: int = 100 load_all_available_meta: bool = False doc_content_chars_max: Optional[int] = 4000 @@ -73,7 +69,7 @@ def run(self, query: str) -> str: results = self.arxiv_search( # type: ignore query[: self.ARXIV_MAX_QUERY_LENGTH], max_results=self.top_k_results ).results() - except self.arxiv_exceptions as ex: + except arxiv_http_error as ex: return f"Arxiv exception: {ex}" docs = [ f"Published: {result.updated.date()}\n" diff --git a/api/core/tools/provider/builtin/bing/tools/bing_web_search.py b/api/core/tools/provider/builtin/bing/tools/bing_web_search.py index d133f38082c5c2..761aecde9412d3 100644 --- a/api/core/tools/provider/builtin/bing/tools/bing_web_search.py +++ b/api/core/tools/provider/builtin/bing/tools/bing_web_search.py @@ -8,7 +8,7 @@ class BingSearchTool(BuiltinTool): - url = 'https://api.bing.microsoft.com/v7.0/search' + url: str = 'https://api.bing.microsoft.com/v7.0/search' def _invoke_bing(self, user_id: str, diff --git a/api/core/tools/provider/builtin/brave/tools/brave_search.py b/api/core/tools/provider/builtin/brave/tools/brave_search.py index f121cb0e34f72e..21cbf2c7dae11d 100644 --- a/api/core/tools/provider/builtin/brave/tools/brave_search.py +++ b/api/core/tools/provider/builtin/brave/tools/brave_search.py @@ -15,7 +15,7 @@ class BraveSearchWrapper(BaseModel): """The API key to use for the Brave search engine.""" search_kwargs: dict = Field(default_factory=dict) """Additional keyword arguments to pass to the search request.""" - base_url = "https://api.search.brave.com/res/v1/web/search" + base_url: str = "https://api.search.brave.com/res/v1/web/search" """The base URL for the Brave search engine.""" def run(self, query: str) -> str: @@ -58,8 +58,8 @@ def _search_request(self, query: str) -> list[dict]: class BraveSearch(BaseModel): """Tool that queries the BraveSearch.""" - name = "brave_search" - description = ( + name: str = "brave_search" + description: str = ( "a search engine. " "useful for when you need to answer questions about current events." " input should be a search query." diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py b/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py new file mode 100644 index 00000000000000..5beaa7bf44aaf5 --- /dev/null +++ b/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py @@ -0,0 +1,174 @@ +<<<<<<< HEAD +======= +from typing import Any, Optional + +from pydantic import BaseModel, Field + +from core.tools.entities.tool_entities import ToolInvokeMessage +from core.tools.tool.builtin_tool import BuiltinTool + + +class DuckDuckGoSearchAPIWrapper(BaseModel): + """Wrapper for DuckDuckGo Search API. + + Free and does not require any setup. + """ + + region: Optional[str] = "wt-wt" + safesearch: str = "moderate" + time: Optional[str] = "y" + max_results: int = 5 + + def get_snippets(self, query: str) -> list[str]: + """Run query through DuckDuckGo and return concatenated results.""" + from duckduckgo_search import DDGS + + with DDGS() as ddgs: + results = ddgs.text( + query, + region=self.region, + safesearch=self.safesearch, + timelimit=self.time, + ) + if results is None: + return ["No good DuckDuckGo Search Result was found"] + snippets = [] + for i, res in enumerate(results, 1): + if res is not None: + snippets.append(res["body"]) + if len(snippets) == self.max_results: + break + return snippets + + def run(self, query: str) -> str: + snippets = self.get_snippets(query) + return " ".join(snippets) + + def results( + self, query: str, num_results: int, backend: str = "api" + ) -> list[dict[str, str]]: + """Run query through DuckDuckGo and return metadata. + + Args: + query: The query to search for. + num_results: The number of results to return. + + Returns: + A list of dictionaries with the following keys: + snippet - The description of the result. + title - The title of the result. + link - The link to the result. + """ + from duckduckgo_search import DDGS + + with DDGS() as ddgs: + results = ddgs.text( + query, + region=self.region, + safesearch=self.safesearch, + timelimit=self.time, + backend=backend, + ) + if results is None: + return [{"Result": "No good DuckDuckGo Search Result was found"}] + + def to_metadata(result: dict) -> dict[str, str]: + if backend == "news": + return { + "date": result["date"], + "title": result["title"], + "snippet": result["body"], + "source": result["source"], + "link": result["url"], + } + return { + "snippet": result["body"], + "title": result["title"], + "link": result["href"], + } + + formatted_results = [] + for i, res in enumerate(results, 1): + if res is not None: + formatted_results.append(to_metadata(res)) + if len(formatted_results) == num_results: + break + return formatted_results + + +class DuckDuckGoSearchRun(BaseModel): + """Tool that queries the DuckDuckGo search API.""" + + name: str = "duckduckgo_search" + description: str = ( + "A wrapper around DuckDuckGo Search. " + "Useful for when you need to answer questions about current events. " + "Input should be a search query." + ) + api_wrapper: DuckDuckGoSearchAPIWrapper = Field( + default_factory=DuckDuckGoSearchAPIWrapper + ) + + def _run( + self, + query: str, + ) -> str: + """Use the tool.""" + return self.api_wrapper.run(query) + + +class DuckDuckGoSearchResults(BaseModel): + """Tool that queries the DuckDuckGo search API and gets back json.""" + + name: str = "DuckDuckGo Results JSON" + description: str = ( + "A wrapper around Duck Duck Go Search. " + "Useful for when you need to answer questions about current events. " + "Input should be a search query. Output is a JSON array of the query results" + ) + num_results: int = 4 + api_wrapper: DuckDuckGoSearchAPIWrapper = Field( + default_factory=DuckDuckGoSearchAPIWrapper + ) + backend: str = "api" + + def _run( + self, + query: str, + ) -> str: + """Use the tool.""" + res = self.api_wrapper.results(query, self.num_results, backend=self.backend) + res_strs = [", ".join([f"{k}: {v}" for k, v in d.items()]) for d in res] + return ", ".join([f"[{rs}]" for rs in res_strs]) + +class DuckDuckGoInput(BaseModel): + query: str = Field(..., description="Search query.") + +class DuckDuckGoSearchTool(BuiltinTool): + """ + Tool for performing a search using DuckDuckGo search engine. + """ + + def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]: + """ + Invoke the DuckDuckGo search tool. + + Args: + user_id (str): The ID of the user invoking the tool. + tool_parameters (dict[str, Any]): The parameters for the tool invocation. + + Returns: + ToolInvokeMessage | list[ToolInvokeMessage]: The result of the tool invocation. + """ + query = tool_parameters.get('query', '') + + if not query: + return self.create_text_message('Please input query') + + tool = DuckDuckGoSearchRun(args_schema=DuckDuckGoInput) + + result = tool._run(query) + + return self.create_text_message(self.summary(user_id=user_id, content=result)) + +>>>>>>> 4c2ba442b (missing type in DuckDuckGoSearchAPIWrapper) diff --git a/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml b/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml index fd3bcc839a101e..5f6ba955b8b84f 100644 --- a/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml +++ b/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml @@ -69,10 +69,10 @@ parameters: options: - value: true label: - en_US: Yes + en_US: 'Yes' zh_Hans: 是 - value: false label: - en_US: No + en_US: 'No' zh_Hans: 否 default: false diff --git a/api/core/tools/provider/builtin/pubmed/tools/pubmed_search.py b/api/core/tools/provider/builtin/pubmed/tools/pubmed_search.py index ee465d9bca1a55..58811d65e6fe9a 100644 --- a/api/core/tools/provider/builtin/pubmed/tools/pubmed_search.py +++ b/api/core/tools/provider/builtin/pubmed/tools/pubmed_search.py @@ -28,15 +28,15 @@ class PubMedAPIWrapper(BaseModel): if False: the `metadata` gets only the most informative fields. """ - base_url_esearch = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?" - base_url_efetch = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?" - max_retry = 5 - sleep_time = 0.2 + base_url_esearch: str = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?" + base_url_efetch: str = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?" + max_retry: int = 5 + sleep_time: float = 0.2 # Default values for the parameters top_k_results: int = 3 load_max_docs: int = 25 - ARXIV_MAX_QUERY_LENGTH = 300 + ARXIV_MAX_QUERY_LENGTH: int = 300 doc_content_chars_max: int = 2000 load_all_available_meta: bool = False email: str = "your_email@example.com" @@ -160,8 +160,8 @@ def retrieve_article(self, uid: str, webenv: str) -> dict: class PubmedQueryRun(BaseModel): """Tool that searches the PubMed API.""" - name = "PubMed" - description = ( + name: str = "PubMed" + description: str = ( "A wrapper around PubMed.org " "Useful for when you need to answer questions about Physics, Mathematics, " "Computer Science, Quantitative Biology, Quantitative Finance, Statistics, " diff --git a/api/core/tools/provider/builtin/qrcode/tools/qrcode_generator.py b/api/core/tools/provider/builtin/qrcode/tools/qrcode_generator.py index 8db5b1f8e82a73..5eede98f5eed6c 100644 --- a/api/core/tools/provider/builtin/qrcode/tools/qrcode_generator.py +++ b/api/core/tools/provider/builtin/qrcode/tools/qrcode_generator.py @@ -12,7 +12,7 @@ class QRCodeGeneratorTool(BuiltinTool): - error_correction_levels = { + error_correction_levels: dict[str, int] = { 'L': ERROR_CORRECT_L, # <=7% 'M': ERROR_CORRECT_M, # <=15% 'Q': ERROR_CORRECT_Q, # <=25% diff --git a/api/core/tools/provider/builtin/searxng/tools/searxng_search.py b/api/core/tools/provider/builtin/searxng/tools/searxng_search.py index 50f04760a70b2a..3e46916b9b4da6 100644 --- a/api/core/tools/provider/builtin/searxng/tools/searxng_search.py +++ b/api/core/tools/provider/builtin/searxng/tools/searxng_search.py @@ -24,21 +24,21 @@ class SearXNGSearchTool(BuiltinTool): Tool for performing a search using SearXNG engine. """ - SEARCH_TYPE = { + SEARCH_TYPE: dict[str, str] = { "page": "general", "news": "news", "image": "images", # "video": "videos", # "file": "files" } - LINK_FILED = { + LINK_FILED: dict[str, str] = { "page": "url", "news": "url", "image": "img_src", # "video": "iframe_src", # "file": "magnetlink" } - TEXT_FILED = { + TEXT_FILED: dict[str, str] = { "page": "content", "news": "content", "image": "img_src", diff --git a/api/core/tools/provider/builtin/stability/tools/text2image.py b/api/core/tools/provider/builtin/stability/tools/text2image.py index e8aa22d41331a7..41236f7b433cef 100644 --- a/api/core/tools/provider/builtin/stability/tools/text2image.py +++ b/api/core/tools/provider/builtin/stability/tools/text2image.py @@ -11,7 +11,7 @@ class StableDiffusionTool(BuiltinTool, BaseStabilityAuthorization): """ This class is responsible for providing the stable diffusion tool. """ - model_endpoint_map = { + model_endpoint_map: dict[str, str] = { 'sd3': 'https://api.stability.ai/v2beta/stable-image/generate/sd3', 'sd3-turbo': 'https://api.stability.ai/v2beta/stable-image/generate/sd3', 'core': 'https://api.stability.ai/v2beta/stable-image/generate/core', diff --git a/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml b/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml index b805c59a56e04f..ec36abd1296b8b 100644 --- a/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml +++ b/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml @@ -98,11 +98,11 @@ parameters: options: - value: true label: - en_US: Yes + en_US: 'Yes' zh_Hans: 是 - value: false label: - en_US: No + en_US: 'No' zh_Hans: 否 default: true - name: pagesize diff --git a/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml b/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml index fc386555769b66..bfa578458d44d2 100644 --- a/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml +++ b/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml @@ -64,14 +64,14 @@ parameters: options: - value: true label: - en_US: Yes + en_US: 'Yes' zh_Hans: 是 - pt_BR: Yes + pt_BR: 'Yes' - value: false label: - en_US: No + en_US: 'No' zh_Hans: 否 - pt_BR: No + pt_BR: 'No' default: false - name: include_answer type: boolean @@ -88,14 +88,14 @@ parameters: options: - value: true label: - en_US: Yes + en_US: 'Yes' zh_Hans: 是 - pt_BR: Yes + pt_BR: 'Yes' - value: false label: - en_US: No + en_US: 'No' zh_Hans: 否 - pt_BR: No + pt_BR: 'No' default: false - name: include_raw_content type: boolean @@ -112,14 +112,14 @@ parameters: options: - value: true label: - en_US: Yes + en_US: 'Yes' zh_Hans: 是 - pt_BR: Yes + pt_BR: 'Yes' - value: false label: - en_US: No + en_US: 'No' zh_Hans: 否 - pt_BR: No + pt_BR: 'No' default: false - name: max_results type: number diff --git a/api/core/tools/provider/builtin/twilio/tools/send_message.py b/api/core/tools/provider/builtin/twilio/tools/send_message.py index 48e3876a4acc82..48ce7d839bba14 100644 --- a/api/core/tools/provider/builtin/twilio/tools/send_message.py +++ b/api/core/tools/provider/builtin/twilio/tools/send_message.py @@ -1,6 +1,6 @@ from typing import Any, Optional, Union -from pydantic import BaseModel, validator +from pydantic import BaseModel, field_validator from core.tools.entities.tool_entities import ToolInvokeMessage from core.tools.tool.builtin_tool import BuiltinTool @@ -15,7 +15,7 @@ class TwilioAPIWrapper(BaseModel): named parameters to the constructor. """ - client: Any #: :meta private: + client: Any = None #: :meta private: account_sid: Optional[str] = None """Twilio account string identifier.""" auth_token: Optional[str] = None @@ -32,7 +32,8 @@ class TwilioAPIWrapper(BaseModel): must be empty. """ - @validator("client", pre=True, always=True) + @classmethod + @field_validator('client', mode='before') def set_validator(cls, values: dict) -> dict: """Validate that api key and python package exists in environment.""" try: diff --git a/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml b/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml index 180cfec6fc687d..0dae3db22f7a5c 100644 --- a/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml +++ b/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml @@ -51,10 +51,10 @@ parameters: options: - value: true label: - en_US: Yes + en_US: 'Yes' zh_Hans: 是 - value: false label: - en_US: No + en_US: 'No' zh_Hans: 否 default: false diff --git a/api/core/tools/tool/api_tool.py b/api/core/tools/tool/api_tool.py index ff7d4015ab3d37..c39f4aa3b7dc8d 100644 --- a/api/core/tools/tool/api_tool.py +++ b/api/core/tools/tool/api_tool.py @@ -32,10 +32,10 @@ def fork_tool_runtime(self, runtime: dict[str, Any]) -> 'Tool': :return: the new tool """ return self.__class__( - identity=self.identity.copy() if self.identity else None, + identity=self.identity.model_copy() if self.identity else None, parameters=self.parameters.copy() if self.parameters else None, - description=self.description.copy() if self.description else None, - api_bundle=self.api_bundle.copy() if self.api_bundle else None, + description=self.description.model_copy() if self.description else None, + api_bundle=self.api_bundle.model_copy() if self.api_bundle else None, runtime=Tool.Runtime(**runtime) ) diff --git a/api/core/tools/tool/dataset_retriever/dataset_retriever_base_tool.py b/api/core/tools/tool/dataset_retriever/dataset_retriever_base_tool.py index 1f8478f5541acf..62e97a02306e58 100644 --- a/api/core/tools/tool/dataset_retriever/dataset_retriever_base_tool.py +++ b/api/core/tools/tool/dataset_retriever/dataset_retriever_base_tool.py @@ -2,7 +2,7 @@ from typing import Any, Optional from msal_extensions.persistence import ABC -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.callback_handler.index_tool_callback_handler import DatasetIndexToolCallbackHandler @@ -17,9 +17,7 @@ class DatasetRetrieverBaseTool(BaseModel, ABC): hit_callbacks: list[DatasetIndexToolCallbackHandler] = [] return_resource: bool retriever_from: str - - class Config: - arbitrary_types_allowed = True + model_config = ConfigDict(arbitrary_types_allowed=True) @abstractmethod def _run( diff --git a/api/core/tools/tool/tool.py b/api/core/tools/tool/tool.py index 5ae54e47289dcd..df5a2a1e6693d7 100644 --- a/api/core/tools/tool/tool.py +++ b/api/core/tools/tool/tool.py @@ -3,7 +3,8 @@ from enum import Enum from typing import Any, Optional, Union -from pydantic import BaseModel, validator +from pydantic import BaseModel, ConfigDict, field_validator +from pydantic_core.core_schema import ValidationInfo from core.app.entities.app_invoke_entities import InvokeFrom from core.file.file_obj import FileVar @@ -28,8 +29,12 @@ class Tool(BaseModel, ABC): description: ToolDescription = None is_team_authorization: bool = False - @validator('parameters', pre=True, always=True) - def set_parameters(cls, v, values): + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + + @classmethod + @field_validator('parameters', mode='before') + def set_parameters(cls, v, validation_info: ValidationInfo) -> list[ToolParameter]: return v or [] class Runtime(BaseModel): @@ -65,9 +70,9 @@ def fork_tool_runtime(self, runtime: dict[str, Any]) -> 'Tool': :return: the new tool """ return self.__class__( - identity=self.identity.copy() if self.identity else None, + identity=self.identity.model_copy() if self.identity else None, parameters=self.parameters.copy() if self.parameters else None, - description=self.description.copy() if self.description else None, + description=self.description.model_copy() if self.description else None, runtime=Tool.Runtime(**runtime), ) diff --git a/api/core/workflow/nodes/code/entities.py b/api/core/workflow/nodes/code/entities.py index 03044268ab588a..83a5416d57ce6a 100644 --- a/api/core/workflow/nodes/code/entities.py +++ b/api/core/workflow/nodes/code/entities.py @@ -14,7 +14,7 @@ class CodeNodeData(BaseNodeData): """ class Output(BaseModel): type: Literal['string', 'number', 'object', 'array[string]', 'array[number]', 'array[object]'] - children: Optional[dict[str, 'Output']] + children: Optional[dict[str, 'Output']] = None variables: list[VariableSelector] code_language: Literal[CodeLanguage.PYTHON3, CodeLanguage.JAVASCRIPT] diff --git a/api/core/workflow/nodes/http_request/entities.py b/api/core/workflow/nodes/http_request/entities.py index 4a81a4176d9ed1..981e3fcc682e20 100644 --- a/api/core/workflow/nodes/http_request/entities.py +++ b/api/core/workflow/nodes/http_request/entities.py @@ -1,7 +1,7 @@ import os from typing import Literal, Optional, Union -from pydantic import BaseModel, validator +from pydantic import BaseModel, field_validator from core.workflow.entities.base_node_data_entities import BaseNodeData @@ -14,15 +14,18 @@ class HttpRequestNodeData(BaseNodeData): Code Node Data. """ class Authorization(BaseModel): + # TODO[pydantic]: The `Config` class inherits from another class, please create the `model_config` manually. + # Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-config for more information. class Config(BaseModel): type: Literal[None, 'basic', 'bearer', 'custom'] - api_key: Union[None, str] - header: Union[None, str] + api_key: Union[None, str] = None + header: Union[None, str] = None type: Literal['no-auth', 'api-key'] config: Optional[Config] - @validator('config', always=True, pre=True) + @classmethod + @field_validator('config', mode='before') def check_config(cls, v, values): """ Check config, if type is no-auth, config should be None, otherwise it should be a dict. @@ -37,7 +40,7 @@ def check_config(cls, v, values): class Body(BaseModel): type: Literal['none', 'form-data', 'x-www-form-urlencoded', 'raw-text', 'json'] - data: Union[None, str] + data: Union[None, str] = None class Timeout(BaseModel): connect: Optional[int] = MAX_CONNECT_TIMEOUT @@ -50,5 +53,5 @@ class Timeout(BaseModel): headers: str params: str body: Optional[Body] - timeout: Optional[Timeout] + timeout: Optional[Timeout] = None mask_authorization_header: Optional[bool] = True diff --git a/api/core/workflow/nodes/http_request/http_request_node.py b/api/core/workflow/nodes/http_request/http_request_node.py index d983a30695e7e5..276c02f62df3e2 100644 --- a/api/core/workflow/nodes/http_request/http_request_node.py +++ b/api/core/workflow/nodes/http_request/http_request_node.py @@ -39,7 +39,7 @@ def get_default_config(cls) -> dict: "type": "none" }, "timeout": { - **HTTP_REQUEST_DEFAULT_TIMEOUT.dict(), + **HTTP_REQUEST_DEFAULT_TIMEOUT.model_dump(), "max_connect_timeout": MAX_CONNECT_TIMEOUT, "max_read_timeout": MAX_READ_TIMEOUT, "max_write_timeout": MAX_WRITE_TIMEOUT, diff --git a/api/core/workflow/nodes/iteration/entities.py b/api/core/workflow/nodes/iteration/entities.py index c85aa66c7b8748..177b47b9518e00 100644 --- a/api/core/workflow/nodes/iteration/entities.py +++ b/api/core/workflow/nodes/iteration/entities.py @@ -7,7 +7,7 @@ class IterationNodeData(BaseIterationNodeData): """ Iteration Node Data. """ - parent_loop_id: Optional[str] # redundant field, not used currently + parent_loop_id: Optional[str] = None # redundant field, not used currently iterator_selector: list[str] # variable selector output_selector: list[str] # output selector diff --git a/api/core/workflow/nodes/knowledge_retrieval/entities.py b/api/core/workflow/nodes/knowledge_retrieval/entities.py index e63e33c7859384..c8874ff22c46e7 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/entities.py +++ b/api/core/workflow/nodes/knowledge_retrieval/entities.py @@ -18,7 +18,7 @@ class MultipleRetrievalConfig(BaseModel): Multiple Retrieval Config. """ top_k: int - score_threshold: Optional[float] + score_threshold: Optional[float] = None reranking_model: RerankingModelConfig @@ -47,5 +47,5 @@ class KnowledgeRetrievalNodeData(BaseNodeData): query_variable_selector: list[str] dataset_ids: list[str] retrieval_mode: Literal['single', 'multiple'] - multiple_retrieval_config: Optional[MultipleRetrievalConfig] - single_retrieval_config: Optional[SingleRetrievalConfig] + multiple_retrieval_config: Optional[MultipleRetrievalConfig] = None + single_retrieval_config: Optional[SingleRetrievalConfig] = None diff --git a/api/core/workflow/nodes/parameter_extractor/entities.py b/api/core/workflow/nodes/parameter_extractor/entities.py index a89a6903ef02bf..83702eae412fbe 100644 --- a/api/core/workflow/nodes/parameter_extractor/entities.py +++ b/api/core/workflow/nodes/parameter_extractor/entities.py @@ -1,6 +1,6 @@ from typing import Any, Literal, Optional -from pydantic import BaseModel, validator +from pydantic import BaseModel, field_validator from core.prompt.entities.advanced_prompt_entities import MemoryConfig from core.workflow.entities.base_node_data_entities import BaseNodeData @@ -21,12 +21,13 @@ class ParameterConfig(BaseModel): """ name: str type: Literal['string', 'number', 'bool', 'select', 'array[string]', 'array[number]', 'array[object]'] - options: Optional[list[str]] + options: Optional[list[str]] = None description: str required: bool - @validator('name', pre=True, always=True) - def validate_name(cls, value): + @classmethod + @field_validator('name', mode='before') + def validate_name(cls, value) -> str: if not value: raise ValueError('Parameter name is required') if value in ['__reason', '__is_success']: @@ -40,12 +41,13 @@ class ParameterExtractorNodeData(BaseNodeData): model: ModelConfig query: list[str] parameters: list[ParameterConfig] - instruction: Optional[str] - memory: Optional[MemoryConfig] + instruction: Optional[str] = None + memory: Optional[MemoryConfig] = None reasoning_mode: Literal['function_call', 'prompt'] - @validator('reasoning_mode', pre=True, always=True) - def set_reasoning_mode(cls, v): + @classmethod + @field_validator('reasoning_mode', mode='before') + def set_reasoning_mode(cls, v) -> str: return v or 'function_call' def get_parameter_json_schema(self) -> dict: diff --git a/api/core/workflow/nodes/question_classifier/entities.py b/api/core/workflow/nodes/question_classifier/entities.py index 9e660a88ddbec0..c0b0a8b6968ead 100644 --- a/api/core/workflow/nodes/question_classifier/entities.py +++ b/api/core/workflow/nodes/question_classifier/entities.py @@ -32,5 +32,5 @@ class QuestionClassifierNodeData(BaseNodeData): type: str = 'question-classifier' model: ModelConfig classes: list[ClassConfig] - instruction: Optional[str] - memory: Optional[MemoryConfig] + instruction: Optional[str] = None + memory: Optional[MemoryConfig] = None diff --git a/api/core/workflow/nodes/tool/entities.py b/api/core/workflow/nodes/tool/entities.py index 98b28ac4f1a290..72825d7cc3dcd4 100644 --- a/api/core/workflow/nodes/tool/entities.py +++ b/api/core/workflow/nodes/tool/entities.py @@ -1,6 +1,7 @@ from typing import Any, Literal, Union -from pydantic import BaseModel, validator +from pydantic import BaseModel, field_validator +from pydantic_core.core_schema import ValidationInfo from core.workflow.entities.base_node_data_entities import BaseNodeData @@ -13,13 +14,14 @@ class ToolEntity(BaseModel): tool_label: str # redundancy tool_configurations: dict[str, Any] - @validator('tool_configurations', pre=True, always=True) - def validate_tool_configurations(cls, value, values): + @classmethod + @field_validator('tool_configurations', mode='before') + def validate_tool_configurations(cls, value, values: ValidationInfo) -> dict[str, Any]: if not isinstance(value, dict): raise ValueError('tool_configurations must be a dictionary') - for key in values.get('tool_configurations', {}).keys(): - value = values.get('tool_configurations', {}).get(key) + for key in values.data.get('tool_configurations', {}).keys(): + value = values.data.get('tool_configurations', {}).get(key) if not isinstance(value, str | int | float | bool): raise ValueError(f'{key} must be a string') @@ -30,10 +32,11 @@ class ToolInput(BaseModel): value: Union[Any, list[str]] type: Literal['mixed', 'variable', 'constant'] - @validator('type', pre=True, always=True) - def check_type(cls, value, values): + @classmethod + @field_validator('type', mode='before') + def check_type(cls, value, validation_info: ValidationInfo): typ = value - value = values.get('value') + value = validation_info.data.get('value') if typ == 'mixed' and not isinstance(value, str): raise ValueError('value must be a string') elif typ == 'variable': @@ -45,7 +48,7 @@ def check_type(cls, value, values): elif typ == 'constant' and not isinstance(value, str | int | float | bool): raise ValueError('value must be a string, int, float, or bool') return typ - + """ Tool Node Schema """ diff --git a/api/core/workflow/nodes/variable_aggregator/entities.py b/api/core/workflow/nodes/variable_aggregator/entities.py index d38e934451bb06..cea88334b90738 100644 --- a/api/core/workflow/nodes/variable_aggregator/entities.py +++ b/api/core/workflow/nodes/variable_aggregator/entities.py @@ -30,4 +30,4 @@ class VariableAssignerNodeData(BaseNodeData): type: str = 'variable-assigner' output_type: str variables: list[list[str]] - advanced_settings: Optional[AdvancedSettings] \ No newline at end of file + advanced_settings: Optional[AdvancedSettings] = None \ No newline at end of file diff --git a/api/core/workflow/workflow_engine_manager.py b/api/core/workflow/workflow_engine_manager.py index afd19abfde579c..22deafb8a37997 100644 --- a/api/core/workflow/workflow_engine_manager.py +++ b/api/core/workflow/workflow_engine_manager.py @@ -592,7 +592,7 @@ def _workflow_iteration_started(self, graph: dict, node_data=current_iteration_node.node_data, inputs=workflow_run_state.current_iteration_state.inputs, predecessor_node_id=predecessor_node_id, - metadata=workflow_run_state.current_iteration_state.metadata.dict() + metadata=workflow_run_state.current_iteration_state.metadata.model_dump() ) # add steps diff --git a/api/events/event_handlers/deduct_quota_when_messaeg_created.py b/api/events/event_handlers/deduct_quota_when_messaeg_created.py index 53cbb2ecdc96ce..8cf52bf8f5d0b8 100644 --- a/api/events/event_handlers/deduct_quota_when_messaeg_created.py +++ b/api/events/event_handlers/deduct_quota_when_messaeg_created.py @@ -13,7 +13,7 @@ def handle(sender, **kwargs): if not isinstance(application_generate_entity, ChatAppGenerateEntity | AgentChatAppGenerateEntity): return - model_config = application_generate_entity.model_config + model_config = application_generate_entity.model_conf provider_model_bundle = model_config.provider_model_bundle provider_configuration = provider_model_bundle.configuration diff --git a/api/events/event_handlers/update_provider_last_used_at_when_messaeg_created.py b/api/events/event_handlers/update_provider_last_used_at_when_messaeg_created.py index 81cb86118082b9..6188f1a0850ac4 100644 --- a/api/events/event_handlers/update_provider_last_used_at_when_messaeg_created.py +++ b/api/events/event_handlers/update_provider_last_used_at_when_messaeg_created.py @@ -16,6 +16,6 @@ def handle(sender, **kwargs): db.session.query(Provider).filter( Provider.tenant_id == application_generate_entity.app_config.tenant_id, - Provider.provider_name == application_generate_entity.model_config.provider + Provider.provider_name == application_generate_entity.model_conf.provider ).update({'last_used': datetime.now(timezone.utc).replace(tzinfo=None)}) db.session.commit() diff --git a/api/poetry.lock b/api/poetry.lock index 0beb7da768d794..4114166bd24d17 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -199,6 +199,17 @@ files = [ [package.extras] dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"] +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + [[package]] name = "anthropic" version = "0.23.1" @@ -787,6 +798,23 @@ typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", " uv = ["uv (>=0.1.18)"] virtualenv = ["virtualenv (>=20.0.35)"] +[[package]] +name = "bump-pydantic" +version = "0.8.0" +description = "Convert Pydantic from V1 to V2 ♻" +optional = false +python-versions = ">=3.8" +files = [ + {file = "bump_pydantic-0.8.0-py3-none-any.whl", hash = "sha256:6cbb4deb5869a69baa5a477f28f3e2d8fb09b687e114c018bd54470590ae7bf7"}, + {file = "bump_pydantic-0.8.0.tar.gz", hash = "sha256:6092e61930e85619e74eeb04131b4387feda16f02d8bb2e3cf9507fa492c69e9"}, +] + +[package.dependencies] +libcst = ">=0.4.2" +rich = "*" +typer = ">=0.7.0" +typing-extensions = "*" + [[package]] name = "cachetools" version = "5.3.3" @@ -3856,6 +3884,46 @@ files = [ [package.dependencies] six = "*" +[[package]] +name = "libcst" +version = "1.4.0" +description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.12 programs." +optional = false +python-versions = ">=3.9" +files = [ + {file = "libcst-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:279b54568ea1f25add50ea4ba3d76d4f5835500c82f24d54daae4c5095b986aa"}, + {file = "libcst-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3401dae41fe24565387a65baee3887e31a44e3e58066b0250bc3f3ccf85b1b5a"}, + {file = "libcst-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1989fa12d3cd79118ebd29ebe2a6976d23d509b1a4226bc3d66fcb7cb50bd5d"}, + {file = "libcst-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addc6d585141a7677591868886f6bda0577529401a59d210aa8112114340e129"}, + {file = "libcst-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17d71001cb25e94cfe8c3d997095741a8c4aa7a6d234c0f972bc42818c88dfaf"}, + {file = "libcst-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:2d47de16d105e7dd5f4e01a428d9f4dc1e71efd74f79766daf54528ce37f23c3"}, + {file = "libcst-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6227562fc5c9c1efd15dfe90b0971ae254461b8b6b23c1b617139b6003de1c1"}, + {file = "libcst-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3399e6c95df89921511b44d8c5bf6a75bcbc2d51f1f6429763609ba005c10f6b"}, + {file = "libcst-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48601e3e590e2d6a7ab8c019cf3937c70511a78d778ab3333764531253acdb33"}, + {file = "libcst-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42797309bb725f0f000510d5463175ccd7155395f09b5e7723971b0007a976d"}, + {file = "libcst-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb4e42ea107a37bff7f9fdbee9532d39f9ea77b89caa5c5112b37057b12e0838"}, + {file = "libcst-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:9d0cc3c5a2a51fa7e1d579a828c0a2e46b2170024fd8b1a0691c8a52f3abb2d9"}, + {file = "libcst-1.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7ece51d935bc9bf60b528473d2e5cc67cbb88e2f8146297e40ee2c7d80be6f13"}, + {file = "libcst-1.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:81653dea1cdfa4c6520a7c5ffb95fa4d220cbd242e446c7a06d42d8636bfcbba"}, + {file = "libcst-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6abce0e66bba2babfadc20530fd3688f672d565674336595b4623cd800b91ef"}, + {file = "libcst-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5da9d7dc83801aba3b8d911f82dc1a375db0d508318bad79d9fb245374afe068"}, + {file = "libcst-1.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c54aa66c86d8ece9c93156a2cf5ca512b0dce40142fe9e072c86af2bf892411"}, + {file = "libcst-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:62e2682ee1567b6a89c91853865372bf34f178bfd237853d84df2b87b446e654"}, + {file = "libcst-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b8ecdba8934632b4dadacb666cd3816627a6ead831b806336972ccc4ba7ca0e9"}, + {file = "libcst-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8e54c777b8d27339b70f304d16fc8bc8674ef1bd34ed05ea874bf4921eb5a313"}, + {file = "libcst-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:061d6855ef30efe38b8a292b7e5d57c8e820e71fc9ec9846678b60a934b53bbb"}, + {file = "libcst-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb0abf627ee14903d05d0ad9b2c6865f1b21eb4081e2c7bea1033f85db2b8bae"}, + {file = "libcst-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d024f44059a853b4b852cfc04fec33e346659d851371e46fc8e7c19de24d3da9"}, + {file = "libcst-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3c6a8faab9da48c5b371557d0999b4ca51f4f2cbd37ee8c2c4df0ac01c781465"}, + {file = "libcst-1.4.0.tar.gz", hash = "sha256:449e0b16604f054fa7f27c3ffe86ea7ef6c409836fe68fe4e752a1894175db00"}, +] + +[package.dependencies] +pyyaml = ">=5.2" + +[package.extras] +dev = ["Sphinx (>=5.1.1)", "black (==23.12.1)", "build (>=0.10.0)", "coverage (>=4.5.4)", "fixit (==2.1.0)", "flake8 (==7.0.0)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.4)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<1.6)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.18)", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.6.0)", "usort (==1.0.8.post1)"] + [[package]] name = "llvmlite" version = "0.42.0" @@ -5666,55 +5734,134 @@ files = [ [[package]] name = "pydantic" -version = "1.10.16" -description = "Data validation and settings management using python type hints" +version = "2.7.4" +description = "Data validation using Python type hints" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic-1.10.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1a539ac40551b01a85e899829aa43ca8036707474af8d74b48be288d4d2d2846"}, - {file = "pydantic-1.10.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a4fcc7b0b8038dbda2dda642cff024032dfae24a7960cc58e57a39eb1949b9b"}, - {file = "pydantic-1.10.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4660dd697de1ae2d4305a85161312611f64d5360663a9ba026cd6ad9e3fe14c3"}, - {file = "pydantic-1.10.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:900a787c574f903a97d0bf52a43ff3b6cf4fa0119674bcfc0e5fd1056d388ad9"}, - {file = "pydantic-1.10.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d30192a63e6d3334c3f0c0506dd6ae9f1dce7b2f8845518915291393a5707a22"}, - {file = "pydantic-1.10.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:16cf23ed599ca5ca937e37ba50ab114e6b5c387eb43a6cc533701605ad1be611"}, - {file = "pydantic-1.10.16-cp310-cp310-win_amd64.whl", hash = "sha256:8d23111f41d1e19334edd51438fd57933f3eee7d9d2fa8cc3f5eda515a272055"}, - {file = "pydantic-1.10.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef287b8d7fc0e86a8bd1f902c61aff6ba9479c50563242fe88ba39692e98e1e0"}, - {file = "pydantic-1.10.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b9ded699bfd3b3912d796ff388b0c607e6d35d41053d37aaf8fd6082c660de9a"}, - {file = "pydantic-1.10.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daeb199814333e4426c5e86d7fb610f4e230289f28cab90eb4de27330bef93cf"}, - {file = "pydantic-1.10.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5973843f1fa99ec6c3ac8d1a8698ac9340b35e45cca6c3e5beb5c3bd1ef15de6"}, - {file = "pydantic-1.10.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6b8a7788a8528a558828fe4a48783cafdcf2612d13c491594a8161dc721629c"}, - {file = "pydantic-1.10.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8abaecf54dacc9d991dda93c3b880d41092a8924cde94eeb811d7d9ab55df7d8"}, - {file = "pydantic-1.10.16-cp311-cp311-win_amd64.whl", hash = "sha256:ddc7b682fbd23f051edc419dc6977e11dd2dbdd0cef9d05f0e15d1387862d230"}, - {file = "pydantic-1.10.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:067c2b5539f7839653ad8c3d1fc2f1343338da8677b7b2172abf3cd3fdc8f719"}, - {file = "pydantic-1.10.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d1fc943583c046ecad0ff5d6281ee571b64e11b5503d9595febdce54f38b290"}, - {file = "pydantic-1.10.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18548b30ccebe71d380b0886cc44ea5d80afbcc155e3518792f13677ad06097d"}, - {file = "pydantic-1.10.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4e92292f9580fc5ea517618580fac24e9f6dc5657196e977c194a8e50e14f5a9"}, - {file = "pydantic-1.10.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5da8bc4bb4f85b8c97cc7f11141fddbbd29eb25e843672e5807e19cc3d7c1b7f"}, - {file = "pydantic-1.10.16-cp37-cp37m-win_amd64.whl", hash = "sha256:a04ee1ea34172b87707a6ecfcdb120d7656892206b7c4dbdb771a73e90179fcb"}, - {file = "pydantic-1.10.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4fa86469fd46e732242c7acb83282d33f83591a7e06f840481327d5bf6d96112"}, - {file = "pydantic-1.10.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:89c2783dc261726fe7a5ce1121bce29a2f7eb9b1e704c68df2b117604e3b346f"}, - {file = "pydantic-1.10.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78e59fa919fa7a192f423d190d8660c35dd444efa9216662273f36826765424b"}, - {file = "pydantic-1.10.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7e82a80068c77f4b074032e031e642530b6d45cb8121fc7c99faa31fb6c6b72"}, - {file = "pydantic-1.10.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d82d5956cee27a30e26a5b88d00a6a2a15a4855e13c9baf50175976de0dc282c"}, - {file = "pydantic-1.10.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b7b99424cc0970ff08deccb549b5a6ec1040c0b449eab91723e64df2bd8fdca"}, - {file = "pydantic-1.10.16-cp38-cp38-win_amd64.whl", hash = "sha256:d97a35e1ba59442775201657171f601a2879e63517a55862a51f8d67cdfc0017"}, - {file = "pydantic-1.10.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9d91f6866fd3e303c632207813ef6bc4d86055e21c5e5a0a311983a9ac5f0192"}, - {file = "pydantic-1.10.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d8d3c71d14c8bd26d2350c081908dbf59d5a6a8f9596d9ef2b09cc1e61c8662b"}, - {file = "pydantic-1.10.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b73e6386b439b4881d79244e9fc1e32d1e31e8d784673f5d58a000550c94a6c0"}, - {file = "pydantic-1.10.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f039881fb2ef86f6de6eacce6e71701b47500355738367413ccc1550b2a69cf"}, - {file = "pydantic-1.10.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3895ddb26f22bdddee7e49741486aa7b389258c6f6771943e87fc00eabd79134"}, - {file = "pydantic-1.10.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55b945da2756b5cef93d792521ad0d457fdf2f69fd5a2d10a27513f5281717dd"}, - {file = "pydantic-1.10.16-cp39-cp39-win_amd64.whl", hash = "sha256:22dd265c77c3976a34be78409b128cb84629284dfd1b69d2fa1507a36f84dc8b"}, - {file = "pydantic-1.10.16-py3-none-any.whl", hash = "sha256:aa2774ba5412fd1c5cb890d08e8b0a3bb5765898913ba1f61a65a4810f03cf29"}, - {file = "pydantic-1.10.16.tar.gz", hash = "sha256:8bb388f6244809af69ee384900b10b677a69f1980fdc655ea419710cffcb5610"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] + {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, + {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.18.4" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.18.4" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, + {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, + {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, + {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, + {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, + {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, + {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, + {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, + {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, + {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, + {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, + {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, + {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, + {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydantic-extra-types" +version = "2.8.1" +description = "Extra Pydantic types." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_extra_types-2.8.1-py3-none-any.whl", hash = "sha256:ca3fce71ee46bc1043bdf3d0e3c149a09ab162cb305c4ed8c501a5034a592dd6"}, + {file = "pydantic_extra_types-2.8.1.tar.gz", hash = "sha256:c7cabe403234658207dcefed3489f2e8bfc8f4a8e305e7ab25ee29eceed65b39"}, +] + +[package.dependencies] +pydantic = ">=2.5.2" + +[package.extras] +all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23)", "python-ulid (>=1,<2)", "python-ulid (>=1,<3)"] +pendulum = ["pendulum (>=3.0.0,<4.0.0)"] +phonenumbers = ["phonenumbers (>=8,<9)"] +pycountry = ["pycountry (>=23)"] +python-ulid = ["python-ulid (>=1,<2)", "python-ulid (>=1,<3)"] [[package]] name = "pydub" @@ -8788,4 +8935,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "509e7821d929dd859378b5b45285469dc6d6b358b2175df30188492fb8cea485" +content-hash = "6845b0f3a5b5be84d32a9a79f23d389d1502cc70f5530becb313fa8b2268448f" diff --git a/api/pyproject.toml b/api/pyproject.toml index d9d785dda79749..a5ee32bdee3a9e 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -167,7 +167,9 @@ azure-storage-blob = "12.13.0" azure-identity = "1.15.0" lxml = "5.1.0" xlrd = "~2.0.1" -pydantic = "~1.10.0" +pydantic = "~2.7.3" +pydantic_extra_types = "~2.8.0" +bump-pydantic = "~0.8.0" pgvecto-rs = "0.1.4" firecrawl-py = "0.0.5" oss2 = "2.18.5" diff --git a/api/requirements.txt b/api/requirements.txt index f17f56aca39356..c0f6b2a8249887 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -75,7 +75,9 @@ qrcode~=7.4.2 azure-storage-blob==12.13.0 azure-identity==1.15.0 lxml==5.1.0 -pydantic~=1.10.0 +pydantic~=2.7.3 +pydantic_extra_types~=2.8.0 +bump-pydantic~=0.8.0 pgvecto-rs==0.1.4 firecrawl-py==0.0.5 oss2==2.18.5 diff --git a/api/services/entities/model_provider_entities.py b/api/services/entities/model_provider_entities.py index 77bb5e08c32839..853172ea13f219 100644 --- a/api/services/entities/model_provider_entities.py +++ b/api/services/entities/model_provider_entities.py @@ -2,7 +2,7 @@ from typing import Optional from flask import current_app -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from core.entities.model_entities import ModelWithProviderEntity, ProviderModelWithStatusEntity from core.entities.provider_entities import QuotaConfiguration @@ -61,6 +61,9 @@ class ProviderResponse(BaseModel): custom_configuration: CustomConfigurationResponse system_configuration: SystemConfigurationResponse + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + def __init__(self, **data) -> None: super().__init__(**data) @@ -139,6 +142,9 @@ class DefaultModelResponse(BaseModel): model_type: ModelType provider: SimpleProviderEntityResponse + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + class ModelWithProviderEntityResponse(ModelWithProviderEntity): """ @@ -147,4 +153,4 @@ class ModelWithProviderEntityResponse(ModelWithProviderEntity): provider: SimpleProviderEntityResponse def __init__(self, model: ModelWithProviderEntity) -> None: - super().__init__(**model.dict()) + super().__init__(**model.model_dump()) diff --git a/api/services/feature_service.py b/api/services/feature_service.py index 36cbc3902b3631..07d1448bf22911 100644 --- a/api/services/feature_service.py +++ b/api/services/feature_service.py @@ -1,5 +1,5 @@ from flask import current_app -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict from services.billing_service import BillingService from services.enterprise.enterprise_service import EnterpriseService @@ -31,6 +31,9 @@ class FeatureModel(BaseModel): can_replace_logo: bool = False model_load_balancing_enabled: bool = False + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) + class SystemFeatureModel(BaseModel): sso_enforced_for_signin: bool = False diff --git a/api/tests/unit_tests/core/rag/datasource/vdb/milvus/test_milvus.py b/api/tests/unit_tests/core/rag/datasource/vdb/milvus/test_milvus.py index 9abc07fae55fa6..9e43b23658f41a 100644 --- a/api/tests/unit_tests/core/rag/datasource/vdb/milvus/test_milvus.py +++ b/api/tests/unit_tests/core/rag/datasource/vdb/milvus/test_milvus.py @@ -17,7 +17,7 @@ def test_default_value(): del config[key] with pytest.raises(ValidationError) as e: MilvusConfig(**config) - assert e.value.errors()[1]['msg'] == f'config MILVUS_{key.upper()} is required' + assert e.value.errors()[0]['msg'] == f'Value error, config MILVUS_{key.upper()} is required' config = MilvusConfig(**valid_config) assert config.secure is False From f13af5a811dac818c077c5d396d6e2b96879f9db Mon Sep 17 00:00:00 2001 From: "Pan, Wen-Ming" Date: Fri, 14 Jun 2024 01:34:31 +0800 Subject: [PATCH 50/70] fix(model_providers/vertex_ai): Vertex AI Anthropic models authentication failed (#4971) --- .../model_providers/vertex_ai/llm/llm.py | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/api/core/model_runtime/model_providers/vertex_ai/llm/llm.py b/api/core/model_runtime/model_providers/vertex_ai/llm/llm.py index 0d6dd8d982375c..bb3255e04bdbb1 100644 --- a/api/core/model_runtime/model_providers/vertex_ai/llm/llm.py +++ b/api/core/model_runtime/model_providers/vertex_ai/llm/llm.py @@ -5,6 +5,7 @@ from typing import Optional, Union, cast import google.api_core.exceptions as exceptions +import google.auth.transport.requests import vertexai.generative_models as glm from anthropic import AnthropicVertex, Stream from anthropic.types import ( @@ -44,15 +45,6 @@ logger = logging.getLogger(__name__) -GEMINI_BLOCK_MODE_PROMPT = """You should always follow the instructions and output a valid {{block}} object. -The structure of the {{block}} object you can found in the instructions, use {"answer": "$your_answer"} as the default structure -if you are not sure about the structure. - - -{{instructions}} - -""" - class VertexAiLargeLanguageModel(LargeLanguageModel): @@ -95,17 +87,37 @@ def _generate_anthropic(self, model: str, credentials: dict, prompt_messages: li """ # use Anthropic official SDK references # - https://github.com/anthropics/anthropic-sdk-python + service_account_info = json.loads(base64.b64decode(credentials["vertex_service_account_key"])) project_id = credentials["vertex_project_id"] + SCOPES = ["https://www.googleapis.com/auth/cloud-platform"] + token = '' + # get access token from service account credential + if service_account_info: + credentials = service_account.Credentials.from_service_account_info(service_account_info, scopes=SCOPES) + request = google.auth.transport.requests.Request() + credentials.refresh(request) + token = credentials.token + + # Vertex AI Anthropic Claude3 Opus model avaiable in us-east5 region, Sonnet and Haiku avaiable in us-central1 region if 'opus' in model: location = 'us-east5' else: location = 'us-central1' - - client = AnthropicVertex( - region=location, - project_id=project_id - ) + + # use access token to authenticate + if token: + client = AnthropicVertex( + region=location, + project_id=project_id, + access_token=token + ) + # When access token is empty, try to use the Google Cloud VM's built-in service account or the GOOGLE_APPLICATION_CREDENTIALS environment variable + else: + client = AnthropicVertex( + region=location, + project_id=project_id, + ) extra_model_kwargs = {} if stop: @@ -462,7 +474,7 @@ def _generate(self, model: str, credentials: dict, aiplatform.init(project=project_id, location=location) history = [] - system_instruction = GEMINI_BLOCK_MODE_PROMPT + system_instruction = "" # hack for gemini-pro-vision, which currently does not support multi-turn chat if model == "gemini-1.0-pro-vision-001": last_msg = prompt_messages[-1] From 5ec7d8562949d20e7439775effc1f45914c4699a Mon Sep 17 00:00:00 2001 From: takatost Date: Fri, 14 Jun 2024 02:28:28 +0800 Subject: [PATCH 51/70] fix: issues by pydantic2 upgrade (#5171) --- api/core/entities/provider_entities.py | 3 + api/core/tools/entities/api_entities.py | 4 +- .../provider/builtin/aippt/tools/aippt.py | 4 +- .../builtin/bing/tools/bing_web_search.yaml | 2 +- .../duckduckgo/tools/duckduckgo_search.py | 174 ------------------ .../builtin/firecrawl/tools/crawl.yaml | 6 +- .../builtin/searchapi/tools/google.yaml | 2 +- .../builtin/searchapi/tools/google_jobs.yaml | 6 +- .../builtin/searchapi/tools/google_news.yaml | 2 +- .../builtin/stackexchange/stackexchange.yaml | 2 +- .../tools/searchStackExQuestions.yaml | 6 +- .../builtin/tavily/tools/tavily_search.yaml | 18 +- .../builtin/webscraper/tools/webscraper.yaml | 6 +- api/core/tools/tool/tool.py | 20 +- .../tools/builtin_tools_manage_service.py | 43 +++-- api/services/tools/tools_transform_service.py | 4 +- 16 files changed, 68 insertions(+), 234 deletions(-) delete mode 100644 api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py diff --git a/api/core/entities/provider_entities.py b/api/core/entities/provider_entities.py index 23f0b9cb3b367c..0d5b0a1b2c6ba6 100644 --- a/api/core/entities/provider_entities.py +++ b/api/core/entities/provider_entities.py @@ -97,3 +97,6 @@ class ModelSettings(BaseModel): model_type: ModelType enabled: bool = True load_balancing_configs: list[ModelLoadBalancingConfiguration] = [] + + # pydantic configs + model_config = ConfigDict(protected_namespaces=()) diff --git a/api/core/tools/entities/api_entities.py b/api/core/tools/entities/api_entities.py index da12996b2bd6d1..2b01b8fd8e89c9 100644 --- a/api/core/tools/entities/api_entities.py +++ b/api/core/tools/entities/api_entities.py @@ -28,8 +28,8 @@ class UserToolProvider(BaseModel): icon: str label: I18nObject # label type: ToolProviderType - masked_credentials: dict = None - original_credentials: dict = None + masked_credentials: Optional[dict] = None + original_credentials: Optional[dict] = None is_team_authorization: bool = False allow_delete: bool = True tools: list[UserTool] = None diff --git a/api/core/tools/provider/builtin/aippt/tools/aippt.py b/api/core/tools/provider/builtin/aippt/tools/aippt.py index 518eb732c2348c..8d6883a3b114ac 100644 --- a/api/core/tools/provider/builtin/aippt/tools/aippt.py +++ b/api/core/tools/provider/builtin/aippt/tools/aippt.py @@ -507,9 +507,9 @@ def get_runtime_parameters(self) -> list[ToolParameter]: colors, styles = self.get_styles(user_id='__dify_system__') except Exception as e: colors, styles = [ - {'id': -1, 'name': '__default__', 'en_name': '__default__'} + {'id': '-1', 'name': '__default__', 'en_name': '__default__'} ], [ - {'id': -1, 'name': '__default__', 'en_name': '__default__'} + {'id': '-1', 'name': '__default__', 'en_name': '__default__'} ] return [ diff --git a/api/core/tools/provider/builtin/bing/tools/bing_web_search.yaml b/api/core/tools/provider/builtin/bing/tools/bing_web_search.yaml index 6bf64efb999f56..a3f60bb09b6509 100644 --- a/api/core/tools/provider/builtin/bing/tools/bing_web_search.yaml +++ b/api/core/tools/provider/builtin/bing/tools/bing_web_search.yaml @@ -263,7 +263,7 @@ parameters: en_US: New Zealand zh_Hans: 新西兰 pt_BR: New Zealand - - value: NO + - value: 'NO' label: en_US: Norway zh_Hans: 挪威 diff --git a/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py b/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py deleted file mode 100644 index 5beaa7bf44aaf5..00000000000000 --- a/api/core/tools/provider/builtin/duckduckgo/tools/duckduckgo_search.py +++ /dev/null @@ -1,174 +0,0 @@ -<<<<<<< HEAD -======= -from typing import Any, Optional - -from pydantic import BaseModel, Field - -from core.tools.entities.tool_entities import ToolInvokeMessage -from core.tools.tool.builtin_tool import BuiltinTool - - -class DuckDuckGoSearchAPIWrapper(BaseModel): - """Wrapper for DuckDuckGo Search API. - - Free and does not require any setup. - """ - - region: Optional[str] = "wt-wt" - safesearch: str = "moderate" - time: Optional[str] = "y" - max_results: int = 5 - - def get_snippets(self, query: str) -> list[str]: - """Run query through DuckDuckGo and return concatenated results.""" - from duckduckgo_search import DDGS - - with DDGS() as ddgs: - results = ddgs.text( - query, - region=self.region, - safesearch=self.safesearch, - timelimit=self.time, - ) - if results is None: - return ["No good DuckDuckGo Search Result was found"] - snippets = [] - for i, res in enumerate(results, 1): - if res is not None: - snippets.append(res["body"]) - if len(snippets) == self.max_results: - break - return snippets - - def run(self, query: str) -> str: - snippets = self.get_snippets(query) - return " ".join(snippets) - - def results( - self, query: str, num_results: int, backend: str = "api" - ) -> list[dict[str, str]]: - """Run query through DuckDuckGo and return metadata. - - Args: - query: The query to search for. - num_results: The number of results to return. - - Returns: - A list of dictionaries with the following keys: - snippet - The description of the result. - title - The title of the result. - link - The link to the result. - """ - from duckduckgo_search import DDGS - - with DDGS() as ddgs: - results = ddgs.text( - query, - region=self.region, - safesearch=self.safesearch, - timelimit=self.time, - backend=backend, - ) - if results is None: - return [{"Result": "No good DuckDuckGo Search Result was found"}] - - def to_metadata(result: dict) -> dict[str, str]: - if backend == "news": - return { - "date": result["date"], - "title": result["title"], - "snippet": result["body"], - "source": result["source"], - "link": result["url"], - } - return { - "snippet": result["body"], - "title": result["title"], - "link": result["href"], - } - - formatted_results = [] - for i, res in enumerate(results, 1): - if res is not None: - formatted_results.append(to_metadata(res)) - if len(formatted_results) == num_results: - break - return formatted_results - - -class DuckDuckGoSearchRun(BaseModel): - """Tool that queries the DuckDuckGo search API.""" - - name: str = "duckduckgo_search" - description: str = ( - "A wrapper around DuckDuckGo Search. " - "Useful for when you need to answer questions about current events. " - "Input should be a search query." - ) - api_wrapper: DuckDuckGoSearchAPIWrapper = Field( - default_factory=DuckDuckGoSearchAPIWrapper - ) - - def _run( - self, - query: str, - ) -> str: - """Use the tool.""" - return self.api_wrapper.run(query) - - -class DuckDuckGoSearchResults(BaseModel): - """Tool that queries the DuckDuckGo search API and gets back json.""" - - name: str = "DuckDuckGo Results JSON" - description: str = ( - "A wrapper around Duck Duck Go Search. " - "Useful for when you need to answer questions about current events. " - "Input should be a search query. Output is a JSON array of the query results" - ) - num_results: int = 4 - api_wrapper: DuckDuckGoSearchAPIWrapper = Field( - default_factory=DuckDuckGoSearchAPIWrapper - ) - backend: str = "api" - - def _run( - self, - query: str, - ) -> str: - """Use the tool.""" - res = self.api_wrapper.results(query, self.num_results, backend=self.backend) - res_strs = [", ".join([f"{k}: {v}" for k, v in d.items()]) for d in res] - return ", ".join([f"[{rs}]" for rs in res_strs]) - -class DuckDuckGoInput(BaseModel): - query: str = Field(..., description="Search query.") - -class DuckDuckGoSearchTool(BuiltinTool): - """ - Tool for performing a search using DuckDuckGo search engine. - """ - - def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]: - """ - Invoke the DuckDuckGo search tool. - - Args: - user_id (str): The ID of the user invoking the tool. - tool_parameters (dict[str, Any]): The parameters for the tool invocation. - - Returns: - ToolInvokeMessage | list[ToolInvokeMessage]: The result of the tool invocation. - """ - query = tool_parameters.get('query', '') - - if not query: - return self.create_text_message('Please input query') - - tool = DuckDuckGoSearchRun(args_schema=DuckDuckGoInput) - - result = tool._run(query) - - return self.create_text_message(self.summary(user_id=user_id, content=result)) - ->>>>>>> 4c2ba442b (missing type in DuckDuckGoSearchAPIWrapper) diff --git a/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml b/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml index 5f6ba955b8b84f..386167014043cb 100644 --- a/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml +++ b/api/core/tools/provider/builtin/firecrawl/tools/crawl.yaml @@ -67,12 +67,12 @@ parameters: zh_Hans: 如果启用,爬虫将仅返回页面的主要内容,不包括标题、导航、页脚等。 form: form options: - - value: true + - value: 'true' label: en_US: 'Yes' zh_Hans: 是 - - value: false + - value: 'false' label: en_US: 'No' zh_Hans: 否 - default: false + default: 'false' diff --git a/api/core/tools/provider/builtin/searchapi/tools/google.yaml b/api/core/tools/provider/builtin/searchapi/tools/google.yaml index eab753e5e895c9..b69a0e1d3e706b 100644 --- a/api/core/tools/provider/builtin/searchapi/tools/google.yaml +++ b/api/core/tools/provider/builtin/searchapi/tools/google.yaml @@ -185,7 +185,7 @@ parameters: en_US: New Zealand zh_Hans: 新西兰 pt_BR: New Zealand - - value: NO + - value: 'NO' label: en_US: Norway zh_Hans: 挪威 diff --git a/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml b/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml index 73026d7c41bd60..9033bc0f8784cc 100644 --- a/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml +++ b/api/core/tools/provider/builtin/searchapi/tools/google_jobs.yaml @@ -185,7 +185,7 @@ parameters: en_US: New Zealand zh_Hans: 新西兰 pt_BR: New Zealand - - value: NO + - value: 'NO' label: en_US: Norway zh_Hans: 挪威 @@ -468,11 +468,11 @@ parameters: required: false form: form options: - - value: true + - value: 'true' label: en_US: "true" zh_Hans: "true" - - value: false + - value: 'false' label: en_US: "false" zh_Hans: "false" diff --git a/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml b/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml index 719cf6119becb8..cbb0edf9829595 100644 --- a/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml +++ b/api/core/tools/provider/builtin/searchapi/tools/google_news.yaml @@ -185,7 +185,7 @@ parameters: en_US: New Zealand zh_Hans: 新西兰 pt_BR: New Zealand - - value: NO + - value: 'NO' label: en_US: Norway zh_Hans: 挪威 diff --git a/api/core/tools/provider/builtin/stackexchange/stackexchange.yaml b/api/core/tools/provider/builtin/stackexchange/stackexchange.yaml index ad64b9595a8759..d382a3cca9cef2 100644 --- a/api/core/tools/provider/builtin/stackexchange/stackexchange.yaml +++ b/api/core/tools/provider/builtin/stackexchange/stackexchange.yaml @@ -6,7 +6,7 @@ identity: zh_Hans: Stack Exchange description: en_US: Access questions and answers from the Stack Exchange and its sub-sites. - zh_Hans: 从Stack Exchange和其子论坛获取问题和答案。 + zh_Hans: 从 Stack Exchange 和其子论坛获取问题和答案。 icon: icon.svg tags: - search diff --git a/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml b/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml index ec36abd1296b8b..bbfbae38b06e1a 100644 --- a/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml +++ b/api/core/tools/provider/builtin/stackexchange/tools/searchStackExQuestions.yaml @@ -96,15 +96,15 @@ parameters: zh_Hans: 是否限制为只有已接受答案的问题。 form: form options: - - value: true + - value: 'true' label: en_US: 'Yes' zh_Hans: 是 - - value: false + - value: 'false' label: en_US: 'No' zh_Hans: 否 - default: true + default: 'true' - name: pagesize type: number required: true diff --git a/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml b/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml index bfa578458d44d2..88426056afb353 100644 --- a/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml +++ b/api/core/tools/provider/builtin/tavily/tools/tavily_search.yaml @@ -62,17 +62,17 @@ parameters: pt_BR: Include images in the search results form: form options: - - value: true + - value: 'true' label: en_US: 'Yes' zh_Hans: 是 pt_BR: 'Yes' - - value: false + - value: 'false' label: en_US: 'No' zh_Hans: 否 pt_BR: 'No' - default: false + default: 'false' - name: include_answer type: boolean required: false @@ -86,17 +86,17 @@ parameters: pt_BR: Include answers in the search results form: form options: - - value: true + - value: 'true' label: en_US: 'Yes' zh_Hans: 是 pt_BR: 'Yes' - - value: false + - value: 'false' label: en_US: 'No' zh_Hans: 否 pt_BR: 'No' - default: false + default: 'false' - name: include_raw_content type: boolean required: false @@ -110,17 +110,17 @@ parameters: pt_BR: Include raw content in the search results form: form options: - - value: true + - value: 'true' label: en_US: 'Yes' zh_Hans: 是 pt_BR: 'Yes' - - value: false + - value: 'false' label: en_US: 'No' zh_Hans: 否 pt_BR: 'No' - default: false + default: 'false' - name: max_results type: number required: false diff --git a/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml b/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml index 0dae3db22f7a5c..0bb48a941dcffe 100644 --- a/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml +++ b/api/core/tools/provider/builtin/webscraper/tools/webscraper.yaml @@ -49,12 +49,12 @@ parameters: zh_Hans: 如果启用,爬虫将仅返回页面摘要内容。 form: form options: - - value: true + - value: 'true' label: en_US: 'Yes' zh_Hans: 是 - - value: false + - value: 'false' label: en_US: 'No' zh_Hans: 否 - default: false + default: 'false' diff --git a/api/core/tools/tool/tool.py b/api/core/tools/tool/tool.py index df5a2a1e6693d7..37432a6116d1be 100644 --- a/api/core/tools/tool/tool.py +++ b/api/core/tools/tool/tool.py @@ -24,9 +24,9 @@ class Tool(BaseModel, ABC): - identity: ToolIdentity = None + identity: Optional[ToolIdentity] = None parameters: Optional[list[ToolParameter]] = None - description: ToolDescription = None + description: Optional[ToolDescription] = None is_team_authorization: bool = False # pydantic configs @@ -46,15 +46,15 @@ def __init__(self, **data: Any): if not self.runtime_parameters: self.runtime_parameters = {} - tenant_id: str = None - tool_id: str = None - invoke_from: InvokeFrom = None - tool_invoke_from: ToolInvokeFrom = None - credentials: dict[str, Any] = None - runtime_parameters: dict[str, Any] = None + tenant_id: Optional[str] = None + tool_id: Optional[str] = None + invoke_from: Optional[InvokeFrom] = None + tool_invoke_from: Optional[ToolInvokeFrom] = None + credentials: Optional[dict[str, Any]] = None + runtime_parameters: Optional[dict[str, Any]] = None - runtime: Runtime = None - variables: ToolRuntimeVariablePool = None + runtime: Optional[Runtime] = None + variables: Optional[ToolRuntimeVariablePool] = None def __init__(self, **data: Any): super().__init__(**data) diff --git a/api/services/tools/builtin_tools_manage_service.py b/api/services/tools/builtin_tools_manage_service.py index 2503191b63c0b6..ea6ecf0c6985f5 100644 --- a/api/services/tools/builtin_tools_manage_service.py +++ b/api/services/tools/builtin_tools_manage_service.py @@ -201,26 +201,29 @@ def list_builtin_tools( result: list[UserToolProvider] = [] for provider_controller in provider_controllers: - # convert provider controller to user provider - user_builtin_provider = ToolTransformService.builtin_provider_to_user_provider( - provider_controller=provider_controller, - db_provider=find_provider(provider_controller.identity.name), - decrypt_credentials=True - ) - - # add icon - ToolTransformService.repack_provider(user_builtin_provider) - - tools = provider_controller.get_tools() - for tool in tools: - user_builtin_provider.tools.append(ToolTransformService.tool_to_user_tool( - tenant_id=tenant_id, - tool=tool, - credentials=user_builtin_provider.original_credentials, - labels=ToolLabelManager.get_tool_labels(provider_controller) - )) - - result.append(user_builtin_provider) + try: + # convert provider controller to user provider + user_builtin_provider = ToolTransformService.builtin_provider_to_user_provider( + provider_controller=provider_controller, + db_provider=find_provider(provider_controller.identity.name), + decrypt_credentials=True + ) + + # add icon + ToolTransformService.repack_provider(user_builtin_provider) + + tools = provider_controller.get_tools() + for tool in tools: + user_builtin_provider.tools.append(ToolTransformService.tool_to_user_tool( + tenant_id=tenant_id, + tool=tool, + credentials=user_builtin_provider.original_credentials, + labels=ToolLabelManager.get_tool_labels(provider_controller) + )) + + result.append(user_builtin_provider) + except Exception as e: + raise e return BuiltinToolProviderSort.sort(result) \ No newline at end of file diff --git a/api/services/tools/tools_transform_service.py b/api/services/tools/tools_transform_service.py index ba8c20d79b0fba..5c777324689341 100644 --- a/api/services/tools/tools_transform_service.py +++ b/api/services/tools/tools_transform_service.py @@ -4,8 +4,8 @@ from flask import current_app -from core.model_runtime.entities.common_entities import I18nObject from core.tools.entities.api_entities import UserTool, UserToolProvider +from core.tools.entities.common_entities import I18nObject from core.tools.entities.tool_bundle import ApiToolBundle from core.tools.entities.tool_entities import ( ApiProviderAuthType, @@ -81,11 +81,13 @@ def builtin_provider_to_user_provider( description=I18nObject( en_US=provider_controller.identity.description.en_US, zh_Hans=provider_controller.identity.description.zh_Hans, + pt_BR=provider_controller.identity.description.pt_BR, ), icon=provider_controller.identity.icon, label=I18nObject( en_US=provider_controller.identity.label.en_US, zh_Hans=provider_controller.identity.label.zh_Hans, + pt_BR=provider_controller.identity.label.pt_BR, ), type=ToolProviderType.BUILT_IN, masked_credentials={}, From b85ae146a7fa42542c639c6a94692972ac7e36ca Mon Sep 17 00:00:00 2001 From: rerorero Date: Fri, 14 Jun 2024 03:32:09 +0900 Subject: [PATCH 52/70] fix: JSON mode with an image doesn't work for Gemini (#5169) --- .../model_providers/__base/large_language_model.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/api/core/model_runtime/model_providers/__base/large_language_model.py b/api/core/model_runtime/model_providers/__base/large_language_model.py index f148625954952f..ef633c61cd01da 100644 --- a/api/core/model_runtime/model_providers/__base/large_language_model.py +++ b/api/core/model_runtime/model_providers/__base/large_language_model.py @@ -14,6 +14,7 @@ from core.model_runtime.entities.message_entities import ( AssistantPromptMessage, PromptMessage, + PromptMessageContentType, PromptMessageTool, SystemPromptMessage, UserPromptMessage, @@ -205,8 +206,14 @@ def _code_block_mode_wrapper(self, model: str, credentials: dict, prompt_message )) if len(prompt_messages) > 0 and isinstance(prompt_messages[-1], UserPromptMessage): - # add ```JSON\n to the last message - prompt_messages[-1].content += f"\n```{code_block}\n" + # add ```JSON\n to the last text message + if isinstance(prompt_messages[-1].content, str): + prompt_messages[-1].content += f"\n```{code_block}\n" + elif isinstance(prompt_messages[-1].content, list): + for i in range(len(prompt_messages[-1].content) - 1, -1, -1): + if prompt_messages[-1].content[i].type == PromptMessageContentType.TEXT: + prompt_messages[-1].content[i].data += f"\n```{code_block}\n" + break else: # append a user message prompt_messages.append(UserPromptMessage( From edf2047f04aaec04a4ca01a264346ace0a49a3b1 Mon Sep 17 00:00:00 2001 From: "saga.rey" Date: Fri, 14 Jun 2024 02:36:01 +0800 Subject: [PATCH 53/70] fix: milvus_vector default dataset index_struct type from weaviate to milvus (#5098) --- api/core/rag/datasource/vdb/milvus/milvus_vector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/core/rag/datasource/vdb/milvus/milvus_vector.py b/api/core/rag/datasource/vdb/milvus/milvus_vector.py index 830836c854a205..665a697e1ab265 100644 --- a/api/core/rag/datasource/vdb/milvus/milvus_vector.py +++ b/api/core/rag/datasource/vdb/milvus/milvus_vector.py @@ -279,7 +279,7 @@ def init_vector(self, dataset: Dataset, attributes: list, embeddings: Embeddings dataset_id = dataset.id collection_name = Dataset.gen_collection_name_by_id(dataset_id) dataset.index_struct = json.dumps( - self.gen_index_struct_dict(VectorType.WEAVIATE, collection_name)) + self.gen_index_struct_dict(VectorType.MILVUS, collection_name)) config = current_app.config return MilvusVector( From 415022aa1486ead1383b483dc6ddfed842ae214f Mon Sep 17 00:00:00 2001 From: takatost Date: Fri, 14 Jun 2024 03:05:04 +0800 Subject: [PATCH 54/70] fix: pydantic2 error (#5172) --- api/core/app/apps/agent_chat/app_generator.py | 2 +- api/core/app/apps/chat/app_generator.py | 2 +- api/core/app/apps/completion/app_generator.py | 4 ++-- api/core/model_runtime/model_providers/google/llm/llm.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/core/app/apps/agent_chat/app_generator.py b/api/core/app/apps/agent_chat/app_generator.py index fb4c28a8555d3c..407fb931ecb9bd 100644 --- a/api/core/app/apps/agent_chat/app_generator.py +++ b/api/core/app/apps/agent_chat/app_generator.py @@ -107,7 +107,7 @@ def generate(self, app_model: App, application_generate_entity = AgentChatAppGenerateEntity( task_id=str(uuid.uuid4()), app_config=app_config, - model_config=ModelConfigConverter.convert(app_config), + model_conf=ModelConfigConverter.convert(app_config), conversation_id=conversation.id if conversation else None, inputs=conversation.inputs if conversation else self._get_cleaned_inputs(inputs, app_config), query=query, diff --git a/api/core/app/apps/chat/app_generator.py b/api/core/app/apps/chat/app_generator.py index 4ad26e850674f5..505ada09db5c90 100644 --- a/api/core/app/apps/chat/app_generator.py +++ b/api/core/app/apps/chat/app_generator.py @@ -104,7 +104,7 @@ def generate(self, app_model: App, application_generate_entity = ChatAppGenerateEntity( task_id=str(uuid.uuid4()), app_config=app_config, - model_config=ModelConfigConverter.convert(app_config), + model_conf=ModelConfigConverter.convert(app_config), conversation_id=conversation.id if conversation else None, inputs=conversation.inputs if conversation else self._get_cleaned_inputs(inputs, app_config), query=query, diff --git a/api/core/app/apps/completion/app_generator.py b/api/core/app/apps/completion/app_generator.py index 31ce4d70b6790d..52d907b5353143 100644 --- a/api/core/app/apps/completion/app_generator.py +++ b/api/core/app/apps/completion/app_generator.py @@ -98,7 +98,7 @@ def generate(self, app_model: App, application_generate_entity = CompletionAppGenerateEntity( task_id=str(uuid.uuid4()), app_config=app_config, - model_config=ModelConfigConverter.convert(app_config), + model_conf=ModelConfigConverter.convert(app_config), inputs=self._get_cleaned_inputs(inputs, app_config), query=query, files=file_objs, @@ -257,7 +257,7 @@ def generate_more_like_this(self, app_model: App, application_generate_entity = CompletionAppGenerateEntity( task_id=str(uuid.uuid4()), app_config=app_config, - model_config=ModelConfigConverter.convert(app_config), + model_conf=ModelConfigConverter.convert(app_config), inputs=message.inputs, query=message.query, files=file_objs, diff --git a/api/core/model_runtime/model_providers/google/llm/llm.py b/api/core/model_runtime/model_providers/google/llm/llm.py index 2dfde70816eeee..c934c54634de6d 100644 --- a/api/core/model_runtime/model_providers/google/llm/llm.py +++ b/api/core/model_runtime/model_providers/google/llm/llm.py @@ -313,7 +313,7 @@ def _handle_generate_stream_response(self, model: str, credentials: dict, respon delta=LLMResultChunkDelta( index=index, message=assistant_prompt_message, - finish_reason=chunk.candidates[0].finish_reason, + finish_reason=str(chunk.candidates[0].finish_reason), usage=usage ) ) From 7189a4c379106fdfe4017b355dbdd4d80d7ae3d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 03:24:32 +0800 Subject: [PATCH 55/70] chore(deps): bump azure-identity from 1.15.0 to 1.16.1 in /api (#5116) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: takatost --- api/poetry.lock | 18 +++++++++--------- api/pyproject.toml | 2 +- api/requirements.txt | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 4114166bd24d17..c630bdae59924e 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -410,20 +410,20 @@ aio = ["aiohttp (>=3.0)"] [[package]] name = "azure-identity" -version = "1.15.0" +version = "1.16.1" description = "Microsoft Azure Identity Library for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "azure-identity-1.15.0.tar.gz", hash = "sha256:4c28fc246b7f9265610eb5261d65931183d019a23d4b0e99357facb2e6c227c8"}, - {file = "azure_identity-1.15.0-py3-none-any.whl", hash = "sha256:a14b1f01c7036f11f148f22cd8c16e05035293d714458d6b44ddf534d93eb912"}, + {file = "azure-identity-1.16.1.tar.gz", hash = "sha256:6d93f04468f240d59246d8afde3091494a5040d4f141cad0f49fc0c399d0d91e"}, + {file = "azure_identity-1.16.1-py3-none-any.whl", hash = "sha256:8fb07c25642cd4ac422559a8b50d3e77f73dcc2bbfaba419d06d6c9d7cff6726"}, ] [package.dependencies] -azure-core = ">=1.23.0,<2.0.0" +azure-core = ">=1.23.0" cryptography = ">=2.5" -msal = ">=1.24.0,<2.0.0" -msal-extensions = ">=0.3.0,<2.0.0" +msal = ">=1.24.0" +msal-extensions = ">=0.3.0" [[package]] name = "azure-storage-blob" @@ -8935,4 +8935,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "6845b0f3a5b5be84d32a9a79f23d389d1502cc70f5530becb313fa8b2268448f" +content-hash = "e2ce8246ee3113b7c7d080ef52e0998ab71ffe76dbe85b324803ed4e369882c4" diff --git a/api/pyproject.toml b/api/pyproject.toml index a5ee32bdee3a9e..277b1e703c7f3e 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -164,7 +164,7 @@ yarl = "~1.9.4" twilio = "~9.0.4" qrcode = "~7.4.2" azure-storage-blob = "12.13.0" -azure-identity = "1.15.0" +azure-identity = "1.16.1" lxml = "5.1.0" xlrd = "~2.0.1" pydantic = "~2.7.3" diff --git a/api/requirements.txt b/api/requirements.txt index c0f6b2a8249887..8aeb41c868bd6d 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -73,7 +73,7 @@ yarl~=1.9.4 twilio~=9.0.4 qrcode~=7.4.2 azure-storage-blob==12.13.0 -azure-identity==1.15.0 +azure-identity==1.16.1 lxml==5.1.0 pydantic~=2.7.3 pydantic_extra_types~=2.8.0 From 7f98c2ea3fec1670bd23ad0b956d082553ccba03 Mon Sep 17 00:00:00 2001 From: Summer-Gu <37869445+gubinjie@users.noreply.github.com> Date: Fri, 14 Jun 2024 03:25:38 +0800 Subject: [PATCH 56/70] refactor: Delete the dataset to verify whether it is in use (#5112) --- api/controllers/console/datasets/datasets.py | 13 ++++++++----- api/controllers/console/datasets/error.py | 6 ++++++ api/controllers/service_api/dataset/dataset.py | 13 ++++++++----- api/controllers/service_api/dataset/error.py | 6 ++++++ api/services/dataset_service.py | 6 ++++-- api/services/errors/dataset.py | 4 ++++ 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/api/controllers/console/datasets/datasets.py b/api/controllers/console/datasets/datasets.py index 6cbe454d37e755..c014fd67468742 100644 --- a/api/controllers/console/datasets/datasets.py +++ b/api/controllers/console/datasets/datasets.py @@ -8,7 +8,7 @@ from controllers.console import api from controllers.console.apikey import api_key_fields, api_key_list from controllers.console.app.error import ProviderNotInitializeError -from controllers.console.datasets.error import DatasetNameDuplicateError +from controllers.console.datasets.error import DatasetInUseError, DatasetNameDuplicateError from controllers.console.setup import setup_required from controllers.console.wraps import account_initialization_required from core.errors.error import LLMBadRequestError, ProviderTokenNotInitError @@ -217,10 +217,13 @@ def delete(self, dataset_id): if not current_user.is_admin_or_owner: raise Forbidden() - if DatasetService.delete_dataset(dataset_id_str, current_user): - return {'result': 'success'}, 204 - else: - raise NotFound("Dataset not found.") + try: + if DatasetService.delete_dataset(dataset_id_str, current_user): + return {'result': 'success'}, 204 + else: + raise NotFound("Dataset not found.") + except services.errors.dataset.DatasetInUseError: + raise DatasetInUseError() class DatasetQueryApi(Resource): diff --git a/api/controllers/console/datasets/error.py b/api/controllers/console/datasets/error.py index 29142b80e627f3..e77693b6c9495c 100644 --- a/api/controllers/console/datasets/error.py +++ b/api/controllers/console/datasets/error.py @@ -71,3 +71,9 @@ class InvalidMetadataError(BaseHTTPException): error_code = 'invalid_metadata' description = "The metadata content is incorrect. Please check and verify." code = 400 + + +class DatasetInUseError(BaseHTTPException): + error_code = 'dataset_in_use' + description = "The dataset is being used by some apps. Please remove the dataset from the apps before deleting it." + code = 409 diff --git a/api/controllers/service_api/dataset/dataset.py b/api/controllers/service_api/dataset/dataset.py index dcbfa88d99487d..8dd16c0787cbca 100644 --- a/api/controllers/service_api/dataset/dataset.py +++ b/api/controllers/service_api/dataset/dataset.py @@ -4,7 +4,7 @@ import services.dataset_service from controllers.service_api import api -from controllers.service_api.dataset.error import DatasetNameDuplicateError +from controllers.service_api.dataset.error import DatasetInUseError, DatasetNameDuplicateError from controllers.service_api.wraps import DatasetApiResource from core.model_runtime.entities.model_entities import ModelType from core.provider_manager import ProviderManager @@ -113,10 +113,13 @@ def delete(self, _, dataset_id): dataset_id_str = str(dataset_id) - if DatasetService.delete_dataset(dataset_id_str, current_user): - return {'result': 'success'}, 204 - else: - raise NotFound("Dataset not found.") + try: + if DatasetService.delete_dataset(dataset_id_str, current_user): + return {'result': 'success'}, 204 + else: + raise NotFound("Dataset not found.") + except services.errors.dataset.DatasetInUseError: + raise DatasetInUseError() api.add_resource(DatasetListApi, '/datasets') api.add_resource(DatasetApi, '/datasets/') diff --git a/api/controllers/service_api/dataset/error.py b/api/controllers/service_api/dataset/error.py index 29142b80e627f3..e77693b6c9495c 100644 --- a/api/controllers/service_api/dataset/error.py +++ b/api/controllers/service_api/dataset/error.py @@ -71,3 +71,9 @@ class InvalidMetadataError(BaseHTTPException): error_code = 'invalid_metadata' description = "The metadata content is incorrect. Please check and verify." code = 400 + + +class DatasetInUseError(BaseHTTPException): + error_code = 'dataset_in_use' + description = "The dataset is being used by some apps. Please remove the dataset from the apps before deleting it." + code = 409 diff --git a/api/services/dataset_service.py b/api/services/dataset_service.py index 06d3e9ec403795..97a6f5d103f324 100644 --- a/api/services/dataset_service.py +++ b/api/services/dataset_service.py @@ -33,7 +33,7 @@ from models.model import UploadFile from models.source import DataSourceBinding from services.errors.account import NoPermissionError -from services.errors.dataset import DatasetNameDuplicateError +from services.errors.dataset import DatasetInUseError, DatasetNameDuplicateError from services.errors.document import DocumentIndexingError from services.errors.file import FileNotExistsError from services.feature_service import FeatureModel, FeatureService @@ -232,7 +232,9 @@ def update_dataset(dataset_id, data, user): @staticmethod def delete_dataset(dataset_id, user): - # todo: cannot delete dataset if it is being processed + count = AppDatasetJoin.query.filter_by(dataset_id=dataset_id).count() + if count > 0: + raise DatasetInUseError() dataset = DatasetService.get_dataset(dataset_id) diff --git a/api/services/errors/dataset.py b/api/services/errors/dataset.py index 254a70ffe313dd..d36cd1111c78f8 100644 --- a/api/services/errors/dataset.py +++ b/api/services/errors/dataset.py @@ -3,3 +3,7 @@ class DatasetNameDuplicateError(BaseServiceError): pass + + +class DatasetInUseError(BaseServiceError): + pass From 54e02b8147fbcddf950494f32f3a6db3f3b3a74b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 03:55:40 +0800 Subject: [PATCH 57/70] chore(deps): bump authlib from 1.2.0 to 1.3.1 in /api (#5115) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: takatost --- api/poetry.lock | 12 ++++++------ api/pyproject.toml | 2 +- api/requirements.txt | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index c630bdae59924e..8fabdc7f7d8f64 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -377,17 +377,17 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p [[package]] name = "authlib" -version = "1.2.0" +version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "Authlib-1.2.0-py2.py3-none-any.whl", hash = "sha256:4ddf4fd6cfa75c9a460b361d4bd9dac71ffda0be879dbe4292a02e92349ad55a"}, - {file = "Authlib-1.2.0.tar.gz", hash = "sha256:4fa3e80883a5915ef9f5bc28630564bc4ed5b5af39812a3ff130ec76bd631e9d"}, + {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, + {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, ] [package.dependencies] -cryptography = ">=3.2" +cryptography = "*" [[package]] name = "azure-core" @@ -8935,4 +8935,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "e2ce8246ee3113b7c7d080ef52e0998ab71ffe76dbe85b324803ed4e369882c4" +content-hash = "a8683613366c50518046395d46bcad094748176d285b409120445c2dbf09967b" diff --git a/api/pyproject.toml b/api/pyproject.toml index 277b1e703c7f3e..9f361ca6e58aac 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -105,7 +105,7 @@ tiktoken = "~0.7.0" psycopg2-binary = "~2.9.6" pycryptodome = "3.19.1" python-dotenv = "1.0.0" -authlib = "1.2.0" +authlib = "1.3.1" boto3 = "1.28.17" cachetools = "~5.3.0" weaviate-client = "~3.21.0" diff --git a/api/requirements.txt b/api/requirements.txt index 8aeb41c868bd6d..c883bd1e54e71f 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -14,7 +14,7 @@ tiktoken~=0.7.0 psycopg2-binary~=2.9.6 pycryptodome==3.19.1 python-dotenv==1.0.0 -Authlib==1.2.0 +Authlib==1.3.1 boto3==1.34.123 cachetools~=5.3.0 weaviate-client~=3.21.0 From 4289f17be229aa1541ea43f84ce99547a7066252 Mon Sep 17 00:00:00 2001 From: KVOJJJin Date: Fri, 14 Jun 2024 08:42:41 +0800 Subject: [PATCH 58/70] Chore: refactor embedded chatbot (#5125) --- .../(shareLayout)/chatbot/[token]/page.tsx | 4 +- .../app/chat/icon-component/index.tsx | 4 +- web/app/components/base/app-unavailable.tsx | 6 +- .../base/chat/chat-with-history/index.tsx | 18 +- .../chat/embedded-chatbot/chat-wrapper.tsx | 135 ++++++++ .../config-panel/form-input.tsx | 46 +++ .../embedded-chatbot/config-panel/form.tsx | 83 +++++ .../embedded-chatbot/config-panel/index.tsx | 168 ++++++++++ .../base/chat/embedded-chatbot/context.tsx | 64 ++++ .../base/chat/embedded-chatbot/header.tsx | 58 ++++ .../base/chat/embedded-chatbot/hooks.tsx | 293 ++++++++++++++++++ .../base/chat/embedded-chatbot/index.tsx | 181 +++++++++++ .../base/chat/embedded-chatbot/utils.ts | 3 + web/app/components/share/chat/index.tsx | 4 +- web/app/components/share/chatbot/index.tsx | 4 +- 15 files changed, 1051 insertions(+), 20 deletions(-) create mode 100644 web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/config-panel/form-input.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/config-panel/form.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/config-panel/index.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/context.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/header.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/hooks.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/index.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/utils.ts diff --git a/web/app/(shareLayout)/chatbot/[token]/page.tsx b/web/app/(shareLayout)/chatbot/[token]/page.tsx index 0dc7b071699a57..b78680c503eca4 100644 --- a/web/app/(shareLayout)/chatbot/[token]/page.tsx +++ b/web/app/(shareLayout)/chatbot/[token]/page.tsx @@ -3,7 +3,7 @@ import type { FC } from 'react' import React, { useEffect } from 'react' import cn from 'classnames' import type { IMainProps } from '@/app/components/share/chat' -import Main from '@/app/components/share/chatbot' +import EmbeddedChatbot from '@/app/components/base/chat/embedded-chatbot' import Loading from '@/app/components/base/loading' import { fetchSystemFeatures } from '@/service/share' import LogoSite from '@/app/components/base/logo/logo-site' @@ -77,7 +77,7 @@ const Chatbot: FC = () => {
) - :
+ : } )} diff --git a/web/app/components/app/chat/icon-component/index.tsx b/web/app/components/app/chat/icon-component/index.tsx index f5d17a80b1c370..c35fb77855fb62 100644 --- a/web/app/components/app/chat/icon-component/index.tsx +++ b/web/app/components/app/chat/icon-component/index.tsx @@ -37,7 +37,7 @@ export const TryToAskIcon = ( ) export const ReplayIcon = ({ className }: SVGProps) => ( - - + + ) diff --git a/web/app/components/base/app-unavailable.tsx b/web/app/components/base/app-unavailable.tsx index 57cf9727fc69f3..c5ea7be0b9c114 100644 --- a/web/app/components/base/app-unavailable.tsx +++ b/web/app/components/base/app-unavailable.tsx @@ -5,13 +5,13 @@ import { useTranslation } from 'react-i18next' type IAppUnavailableProps = { code?: number - isUnknwonReason?: boolean + isUnknownReason?: boolean unknownReason?: string } const AppUnavailable: FC = ({ code = 404, - isUnknwonReason, + isUnknownReason, unknownReason, }) => { const { t } = useTranslation() @@ -22,7 +22,7 @@ const AppUnavailable: FC = ({ style={{ borderRight: '1px solid rgba(0,0,0,.3)', }}>{code} -
{unknownReason || (isUnknwonReason ? t('share.common.appUnkonwError') : t('share.common.appUnavailable'))}
+
{unknownReason || (isUnknownReason ? t('share.common.appUnkonwError') : t('share.common.appUnavailable'))}
) } diff --git a/web/app/components/base/chat/chat-with-history/index.tsx b/web/app/components/base/chat/chat-with-history/index.tsx index f51620b151f9eb..b02091231ddb0a 100644 --- a/web/app/components/base/chat/chat-with-history/index.tsx +++ b/web/app/components/base/chat/chat-with-history/index.tsx @@ -181,12 +181,12 @@ const ChatWithHistoryWrapWithCheckToken: FC = ({ installedAppInfo, className, }) => { - const [inited, setInited] = useState(false) + const [initialized, setInitialized] = useState(false) const [appUnavailable, setAppUnavailable] = useState(false) - const [isUnknwonReason, setIsUnknwonReason] = useState(false) + const [isUnknownReason, setIsUnknownReason] = useState(false) useAsyncEffect(async () => { - if (!inited) { + if (!initialized) { if (!installedAppInfo) { try { await checkOrSetAccessToken() @@ -196,21 +196,21 @@ const ChatWithHistoryWrapWithCheckToken: FC = ({ setAppUnavailable(true) } else { - setIsUnknwonReason(true) + setIsUnknownReason(true) setAppUnavailable(true) } } } - setInited(true) + setInitialized(true) } }, []) - if (appUnavailable) - return - - if (!inited) + if (!initialized) return null + if (appUnavailable) + return + return ( { + const { + appParams, + appPrevChatList, + currentConversationId, + currentConversationItem, + inputsForms, + newConversationInputs, + handleNewConversationCompleted, + isMobile, + isInstalledApp, + appId, + appMeta, + handleFeedback, + currentChatInstanceRef, + } = useEmbeddedChatbotContext() + const appConfig = useMemo(() => { + const config = appParams || {} + + return { + ...config, + supportFeedback: true, + opening_statement: currentConversationId ? currentConversationItem?.introduction : (config as any).opening_statement, + } as ChatConfig + }, [appParams, currentConversationItem?.introduction, currentConversationId]) + const { + chatList, + handleSend, + handleStop, + isResponding, + suggestedQuestions, + } = useChat( + appConfig, + { + inputs: (currentConversationId ? currentConversationItem?.inputs : newConversationInputs) as any, + promptVariables: inputsForms, + }, + appPrevChatList, + taskId => stopChatMessageResponding('', taskId, isInstalledApp, appId), + ) + + useEffect(() => { + if (currentChatInstanceRef.current) + currentChatInstanceRef.current.handleStop = handleStop + }, []) + + const doSend: OnSend = useCallback((message, files) => { + const data: any = { + query: message, + inputs: currentConversationId ? currentConversationItem?.inputs : newConversationInputs, + conversation_id: currentConversationId, + } + + if (appConfig?.file_upload?.image.enabled && files?.length) + data.files = files + + handleSend( + getUrl('chat-messages', isInstalledApp, appId || ''), + data, + { + onGetSuggestedQuestions: responseItemId => fetchSuggestedQuestions(responseItemId, isInstalledApp, appId), + onConversationComplete: currentConversationId ? undefined : handleNewConversationCompleted, + isPublicAPI: !isInstalledApp, + }, + ) + }, [ + appConfig, + currentConversationId, + currentConversationItem, + handleSend, + newConversationInputs, + handleNewConversationCompleted, + isInstalledApp, + appId, + ]) + const chatNode = useMemo(() => { + if (inputsForms.length) { + return ( + <> + {!currentConversationId && ( +
+
+ +
+
+ )} + + ) + } + + return
+ }, [currentConversationId, inputsForms, isMobile]) + + return ( + : null} + hideProcessDetail + /> + ) +} + +export default ChatWrapper diff --git a/web/app/components/base/chat/embedded-chatbot/config-panel/form-input.tsx b/web/app/components/base/chat/embedded-chatbot/config-panel/form-input.tsx new file mode 100644 index 00000000000000..c163e9409c97a4 --- /dev/null +++ b/web/app/components/base/chat/embedded-chatbot/config-panel/form-input.tsx @@ -0,0 +1,46 @@ +import type { FC } from 'react' +import { useTranslation } from 'react-i18next' +import { memo } from 'react' + +type InputProps = { + form: any + value: string + onChange: (variable: string, value: string) => void +} +const FormInput: FC = ({ + form, + value, + onChange, +}) => { + const { t } = useTranslation() + const { + type, + label, + required, + max_length, + variable, + } = form + + if (type === 'paragraph') { + return ( +