-
Notifications
You must be signed in to change notification settings - Fork 2k
Description
What happened?
I am developing an application using the OpenAI API, combined with ChromaDB as a tool for Retrieval-Augmented Generation (RAG) to build a custom responsive chatbot powered with business data. Currently, I am deploying my application on AWS. The ChromaDB instance is running on CloudFormation, and my backend Python function is deployed as a Lambda function.
In my Lambda function, I need to connect to the ChromaDB instance to query the collection and retrieve data, which will later be embedded as context in a call to the OpenAI API.
In a lambda function I need to connect to chromadb instance to query collection and retrieve data to later embed it as context in a call to the OpenAI.
chroma_client = chromadb.HttpClient(host='11.111.111.11’, port=8000)
One way to include dependencies in Lambda functions is by uploading .zip packages to Lambda layers. I successfully packaged all dependencies, but encountered some issues with ChromaDB.
The original ChromaDB distribution is 107 MB when zipped, which exceeds the storage limits for both Lambda layers (50 MB max) and S3 buckets. I then discovered the smaller chromadb-client library, which can be uploaded to AWS. However, after including it, I encountered the following error, likely related to packaging. I tried both zipping on MacOS and Virtual Linux machine
My questions are:
1) Is the way I am handling ChromaDB in this example optimal? Am I on the right path for deploying the app on AWS?
2) Is there an official distribution of a zipped chromadb-client or chromadb that is compatible with Lambda Layers? How would you recommend to handle this issue?
Any help will be greatly appreciated! Thanks! 🙌🏻✨
Versions
chromadb-client 0.4.25.dev0
Python 3.10.12
MacOS 13.1/VM Linux Ubuntu
Relevant log output
Response
{
"errorMessage": "Invalid Schema:\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.0.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].dict.values_schema.union.choices.2.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict]\n Input tag 'tuple' found using 'type' does not match any of the expected tags: 'any', 'none', 'bool', 'int', 'float', 'decimal', 'str', 'bytes', 'date', 'time', 'datetime', 'timedelta', 'literal', 'is-instance', 'is-subclass', 'callable', 'list', 'tuple-positional', 'tuple-variable', 'set', 'frozenset', 'generator', 'dict', 'function-after', 'function-before', 'function-wrap', 'function-plain', 'default', 'nullable', 'union', 'tagged-union', 'chain', 'lax-or-strict', 'json-or-python', 'typed-dict', 'model-fields', 'model', 'dataclass-args', 'dataclass', 'arguments', 'call', 'custom-error', 'json', 'url', 'multi-host-url', 'definitions', 'definition-ref', 'uuid' [type=union_tag_invalid, input_value={'type': 'tuple', 'items_...}, {'type': 'bytes'}]}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/union_tag_invalid\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.0.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].dict.values_schema.union.choices.2.`tuple[..., str]`\n Input should be a valid tuple [type=tuple_type, input_value={'type': 'tuple', 'items_...}, {'type': 'bytes'}]}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/tuple_type\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.0.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].dict.values_schema.union.choices.3.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict]\n Input tag 'tuple' found using 'type' does not match any of the expected tags: 'any', 'none', 'bool', 'int', 'float', 'decimal', 'str', 'bytes', 'date', 'time', 'datetime', 'timedelta', 'literal', 'is-instance', 'is-subclass', 'callable', 'list', 'tuple-positional', 'tuple-variable', 'set', 'frozenset', 'generator', 'dict', 'function-after', 'function-before', 'function-wrap', 'function-plain', 'default', 'nullable', 'union', 'tagged-union', 'chain', 'lax-or-strict', 'json-or-python', 'typed-dict', 'model-fields', 'model', 'dataclass-args', 'dataclass', 'arguments', 'call', 'custom-error', 'json', 'url', 'multi-host-url', 'definitions', 'definition-ref', 'uuid' [type=union_tag_invalid, input_value={'type': 'tuple', 'items_...ema': {'type': 'str'}}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/union_tag_invalid\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.0.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].dict.values_schema.union.choices.3.`tuple[..., str]`\n Input should be a valid tuple [type=tuple_type, input_value={'type': 'tuple', 'items_...ema': {'type': 'str'}}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/tuple_type\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.0.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].dict.values_schema.union.choices.4.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict]\n Input tag 'tuple' found using 'type' does not match any of the expected tags: 'any', 'none', 'bool', 'int', 'float', 'decimal', 'str', 'bytes', 'date', 'time', 'datetime', 'timedelta', 'literal', 'is-instance', 'is-subclass', 'callable', 'list', 'tuple-positional', 'tuple-variable', 'set', 'frozenset', 'generator', 'dict', 'function-after', 'function-before', 'function-wrap', 'function-plain', 'default', 'nullable', 'union', 'tagged-union', 'chain', 'lax-or-strict', 'json-or-python', 'typed-dict', 'model-fields', 'model', 'dataclass-args', 'dataclass', 'arguments', 'call', 'custom-error', 'json', 'url', 'multi-host-url', 'definitions', 'definition-ref', 'uuid' [type=union_tag_invalid, input_value={'type': 'tuple', 'items_...tr'}, 'strict': False}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/union_tag_invalid\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.0.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].dict.values_schema.union.choices.4.`tuple[..., str]`\n Input should be a valid tuple [type=tuple_type, input_value={'type': 'tuple', 'items_...tr'}, 'strict': False}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/tuple_type\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.0.`tuple[..., str]`\n Input should be a valid tuple [type=tuple_type, input_value={'type': 'dict', 'keys_sc...e}]}]}, 'strict': False}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/tuple_type\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.1.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].json-or-python.json_schema.list.items_schema\n Input tag 'tuple' found using 'type' does not match any of the expected tags: 'any', 'none', 'bool', 'int', 'float', 'decimal', 'str', 'bytes', 'date', 'time', 'datetime', 'timedelta', 'literal', 'is-instance', 'is-subclass', 'callable', 'list', 'tuple-positional', 'tuple-variable', 'set', 'frozenset', 'generator', 'dict', 'function-after', 'function-before', 'function-wrap', 'function-plain', 'default', 'nullable', 'union', 'tagged-union', 'chain', 'lax-or-strict', 'json-or-python', 'typed-dict', 'model-fields', 'model', 'dataclass-args', 'dataclass', 'arguments', 'call', 'custom-error', 'json', 'url', 'multi-host-url', 'definitions', 'definition-ref', 'uuid' [type=union_tag_invalid, input_value={'type': 'tuple', 'items_..., 'strict': False}]}]}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/union_tag_invalid\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.1.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].json-or-python.python_schema.chain.steps.1.function-wrap.schema.list.items_schema\n Input tag 'tuple' found using 'type' does not match any of the expected tags: 'any', 'none', 'bool', 'int', 'float', 'decimal', 'str', 'bytes', 'date', 'time', 'datetime', 'timedelta', 'literal', 'is-instance', 'is-subclass', 'callable', 'list', 'tuple-positional', 'tuple-variable', 'set', 'frozenset', 'generator', 'dict', 'function-after', 'function-before', 'function-wrap', 'function-plain', 'default', 'nullable', 'union', 'tagged-union', 'chain', 'lax-or-strict', 'json-or-python', 'typed-dict', 'model-fields', 'model', 'dataclass-args', 'dataclass', 'arguments', 'call', 'custom-error', 'json', 'url', 'multi-host-url', 'definitions', 'definition-ref', 'uuid' [type=union_tag_invalid, input_value={'type': 'tuple', 'items_..., 'strict': False}]}]}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/union_tag_invalid\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.1.tagged-union[typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict,typed-dict].json-or-python.serialization.function-wrap.schema\n Input tag 'tuple' found using 'type' does not match any of the expected tags: 'any', 'none', 'bool', 'int', 'float', 'decimal', 'str', 'bytes', 'date', 'time', 'datetime', 'timedelta', 'literal', 'is-instance', 'is-subclass', 'callable', 'list', 'tuple-positional', 'tuple-variable', 'set', 'frozenset', 'generator', 'dict', 'function-after', 'function-before', 'function-wrap', 'function-plain', 'default', 'nullable', 'union', 'tagged-union', 'chain', 'lax-or-strict', 'json-or-python', 'typed-dict', 'model-fields', 'model', 'dataclass-args', 'dataclass', 'arguments', 'call', 'custom-error', 'json', 'url', 'multi-host-url', 'definitions', 'definition-ref', 'uuid' [type=union_tag_invalid, input_value={'type': 'tuple', 'items_..., 'strict': False}]}]}]}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/union_tag_invalid\nmodel.schema.model-fields.fields.files.schema.default.schema.nullable.schema.union.choices.1.`tuple[..., str]`\n Input should be a valid tuple [type=tuple_type, input_value={'type': 'json-or-python'...'strict': False}]}]}]}}}, input_type=dict]\n For further information visit https://errors.pydantic.dev/2.7/v/tuple_type",
"errorType": "SchemaError",
"requestId": "",
"stackTrace": [
" File \"/var/lang/lib/python3.10/importlib/__init__.py\", line 126, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n",
" File \"<frozen importlib._bootstrap>\", line 1050, in _gcd_import\n",
" File \"<frozen importlib._bootstrap>\", line 1027, in _find_and_load\n",
" File \"<frozen importlib._bootstrap>\", line 1006, in _find_and_load_unlocked\n",
" File \"<frozen importlib._bootstrap>\", line 688, in _load_unlocked\n",
" File \"<frozen importlib._bootstrap_external>\", line 883, in exec_module\n",
" File \"<frozen importlib._bootstrap>\", line 241, in _call_with_frames_removed\n",
" File \"/var/task/lambda_function.py\", line 3, in <module>\n from openai import OpenAI\n",
" File \"/opt/python/openai/__init__.py\", line 8, in <module>\n from . import types\n",
" File \"/opt/python/openai/types/__init__.py\", line 5, in <module>\n from .edit import Edit as Edit\n",
" File \"/opt/python/openai/types/edit.py\", line 6, in <module>\n from .._models import BaseModel\n",
" File \"/opt/python/openai/_models.py\", line 414, in <module>\n class FinalRequestOptions(pydantic.BaseModel):\n",
" File \"/opt/python/pydantic/_internal/_model_construction.py\", line 202, in __new__\n complete_model_class(\n",
" File \"/opt/python/pydantic/_internal/_model_construction.py\", line 549, in complete_model_class\n schema = gen_schema.clean_schema(schema)\n",
" File \"/opt/python/pydantic/_internal/_generate_schema.py\", line 442, in clean_schema\n schema = validate_core_schema(schema)\n",
" File \"/opt/python/pydantic/_internal/_core_utils.py\", line 568, in validate_core_schema\n return _validate_core_schema(schema)\n"
]
}