fix: deserialize Document Stores using specific from_dict class methods (#8207)

* use from_dict

* unused import

* improve logic

* improve reno
This commit is contained in:
Stefano Fiorucci 2024-08-14 10:56:32 +02:00 committed by GitHub
parent 5ac56ebdaf
commit 109e98aa44
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 23 additions and 4 deletions

View File

@ -82,7 +82,10 @@ class CacheChecker:
doc_store_class = import_class_by_name(doc_store_data["type"])
except ImportError as e:
raise DeserializationError(f"Class '{doc_store_data['type']}' not correctly imported") from e
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
if hasattr(doc_store_class, "from_dict"):
data["init_parameters"]["document_store"] = doc_store_class.from_dict(doc_store_data)
else:
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
return default_from_dict(cls, data)

View File

@ -88,7 +88,10 @@ class FilterRetriever:
doc_store_class = import_class_by_name(doc_store_data["type"])
except ImportError as e:
raise DeserializationError(f"Class '{doc_store_data['type']}' not correctly imported") from e
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
if hasattr(doc_store_class, "from_dict"):
data["init_parameters"]["document_store"] = doc_store_class.from_dict(doc_store_data)
else:
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
return default_from_dict(cls, data)

View File

@ -131,7 +131,10 @@ class SentenceWindowRetriever:
except ImportError as e:
raise DeserializationError(f"Class '{doc_store_data['type']}' not correctly imported") from e
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
if hasattr(doc_store_class, "from_dict"):
data["init_parameters"]["document_store"] = doc_store_class.from_dict(doc_store_data)
else:
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
# deserialize the component
return default_from_dict(cls, data)

View File

@ -84,7 +84,10 @@ class DocumentWriter:
doc_store_class = import_class_by_name(doc_store_data["type"])
except ImportError as e:
raise DeserializationError(f"Class '{doc_store_data['type']}' not correctly imported") from e
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
if hasattr(doc_store_class, "from_dict"):
data["init_parameters"]["document_store"] = doc_store_class.from_dict(doc_store_data)
else:
data["init_parameters"]["document_store"] = default_from_dict(doc_store_class, doc_store_data)
data["init_parameters"]["policy"] = DuplicatePolicy[data["init_parameters"]["policy"]]
return default_from_dict(cls, data)

View File

@ -0,0 +1,7 @@
---
fixes:
- |
For components that support multiple Document Stores, prioritize using the specific `from_dict` class method
for deserialization when available. Otherwise, fall back to the generic `default_from_dict` method.
This impacts the following generic components: `CacheChecker`, `DocumentWriter`, `FilterRetriever`, and
`SentenceWindowRetriever`.