zylon-ai / private-gpt

Interact with your documents using the power of GPT, 100% privately, no data leaks
https://privategpt.dev
Apache License 2.0
53.87k stars 7.24k forks source link

Connecting to an existing collection on Qdrant is failing #1751

Closed bcatalin closed 2 months ago

bcatalin commented 6 months ago

I am runnign Qdrant in a Docker container. If I am starting privateGPT and the default collection make_this_parameterizable_per_api_call doens't exist in Qdrant, everything is working fine, I can ingest and retieve documents, no issue at all.

If I stop the privateGPT and I am restarting it again, it tryes to connect to the Qdrant and it is fine, the Qdrant is replying with the corect status code and the right JSON but then I see the following error:

13:45:26.993 [INFO    ]                     httpx - HTTP Request: GET http://127.0.0.1:6333/collections/make_this_parameterizable_per_api_call "HTTP/1.1 200 OK"
Traceback (most recent call last):
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 94, in send
    return parse_as_type(response.json(), type_)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 213, in parse_as_type
    return model_type(obj=obj).obj
           ^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/pydantic/main.py", line 171, in __init__
    self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ParsingModel[InlineResponse2005] (for parse_as_type)
obj.result.config.optimizer_config.max_optimization_threads
  Input should be a valid integer [type=int_type, input_value=None, input_type=NoneType]
    For further information visit https://errors.pydantic.dev/2.6/v/int_type

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/root/PROJECTS/ROSES/RAG/privateGPT/private_gpt/__main__.py", line 5, in <module>
    from private_gpt.main import app
  File "/root/PROJECTS/ROSES/RAG/privateGPT/private_gpt/main.py", line 6, in <module>
    app = create_app(global_injector)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/PROJECTS/ROSES/RAG/privateGPT/private_gpt/launcher.py", line 63, in create_app
    ui = root_injector.get(PrivateGptUi)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
    provider_instance = scope_instance.get(interface, binding.provider)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
    instance = self._get_instance(key, provider, self.injector)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
    return provider.get(injector)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
    return injector.create_object(self._cls)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
    self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
    dependencies = self.args_to_inject(
                   ^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
    instance: Any = self.get(interface)
                    ^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
    provider_instance = scope_instance.get(interface, binding.provider)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
    instance = self._get_instance(key, provider, self.injector)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
    return provider.get(injector)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
    return injector.create_object(self._cls)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
    self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 1031, in call_with_injection
    dependencies = self.args_to_inject(
                   ^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 1079, in args_to_inject
    instance: Any = self.get(interface)
                    ^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 974, in get
    provider_instance = scope_instance.get(interface, binding.provider)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 91, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 800, in get
    instance = self._get_instance(key, provider, self.injector)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 811, in _get_instance
    return provider.get(injector)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 264, in get
    return injector.create_object(self._cls)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 998, in create_object
    self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/injector/__init__.py", line 1040, in call_with_injection
    return callable(*full_args, **dependencies)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/PROJECTS/ROSES/RAG/privateGPT/private_gpt/components/vector_store/vector_store_component.py", line 119, in __init__
    QdrantVectorStore(
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/llama_index/vector_stores/qdrant/base.py", line 145, in __init__
    self._collection_initialized = self._collection_exists(collection_name)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/llama_index/vector_stores/qdrant/base.py", line 423, in _collection_exists
    self._client.get_collection(collection_name)
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/qdrant_client.py", line 1543, in get_collection
    return self._client.get_collection(collection_name=collection_name, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/qdrant_remote.py", line 1963, in get_collection
    result: Optional[types.CollectionInfo] = self.http.collections_api.get_collection(
                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/http/api/collections_api.py", line 1262, in get_collection
    return self._build_for_get_collection(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/http/api/collections_api.py", line 377, in _build_for_get_collection
    return self.api_client.request(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 74, in request
    return self.send(request, type_)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/private-gpt-3BfzvcRI-py3.11/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 96, in send
    raise ResponseHandlingException(e)
qdrant_client.http.exceptions.ResponseHandlingException: 1 validation error for ParsingModel[InlineResponse2005] (for parse_as_type)
obj.result.config.optimizer_config.max_optimization_threads
  Input should be a valid integer [type=int_type, input_value=None, input_type=NoneType]
    For further information visit https://errors.pydantic.dev/2.6/v/int_type
make: *** [Makefile:36: run] Error 1

It looks like obj.result.config.optimizer_config.max_optimization_threads is not set

I have all the latest packages updated.

Anush008 commented 6 months ago

Hi @bcatalin. This is due to a type compatibility issue. You can fix this by updating qdrant_client to latest. That is, running

poetry run pip install "qdrant_client==1.8.0"

By default, v1.7 is installed. The latest version is v1.8.0.

bcatalin commented 6 months ago

Thank you @Anush008 !!! Updating the qdrant client to 1.8.0 solved the issue.

Next battle is with keeping the vectors in-memory :-)

Thanks again!