From 93b340044037917fec175cb768dfadfc9cb28a1a Mon Sep 17 00:00:00 2001 From: MichelBartels Date: Wed, 16 Aug 2023 11:56:22 +0200 Subject: [PATCH] Add Answer class (#5563) * add answer class * inheritance instead of composition * make answer immutable * Remove probability field for GenerativeAnswer * rename Answer classes * fix name change * add release notes --- haystack/preview/__init__.py | 2 +- haystack/preview/dataclasses/__init__.py | 3 ++- haystack/preview/dataclasses/answer.py | 25 +++++++++++++++++++ .../add-v2-answer-class-31bc8d3116922594.yaml | 4 +++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 haystack/preview/dataclasses/answer.py create mode 100644 releasenotes/notes/add-v2-answer-class-31bc8d3116922594.yaml diff --git a/haystack/preview/__init__.py b/haystack/preview/__init__.py index 8c6c6b879..2cbdfc850 100644 --- a/haystack/preview/__init__.py +++ b/haystack/preview/__init__.py @@ -1,4 +1,4 @@ from canals.component import component from haystack.preview.document_stores.decorator import document_store -from haystack.preview.dataclasses import Document +from haystack.preview.dataclasses import Document, ContentType, ExtractedAnswer, GeneratedAnswer, Answer from haystack.preview.pipeline import Pipeline, PipelineError, NoSuchDocumentStoreError, load_pipelines, save_pipelines diff --git a/haystack/preview/dataclasses/__init__.py b/haystack/preview/dataclasses/__init__.py index 6432e492b..37117cb20 100644 --- a/haystack/preview/dataclasses/__init__.py +++ b/haystack/preview/dataclasses/__init__.py @@ -1,3 +1,4 @@ from haystack.preview.dataclasses.document import Document, ContentType +from haystack.preview.dataclasses.answer import ExtractedAnswer, GeneratedAnswer, Answer -__all__ = ["Document", "ContentType"] +__all__ = ["Document", "ContentType", "ExtractedAnswer", "GeneratedAnswer", "Answer"] diff --git a/haystack/preview/dataclasses/answer.py b/haystack/preview/dataclasses/answer.py new file mode 100644 index 000000000..e08e8f57f --- /dev/null +++ b/haystack/preview/dataclasses/answer.py @@ -0,0 +1,25 @@ +from typing import Any, Dict, List, Optional +from dataclasses import dataclass +from haystack.preview.dataclasses.document import Document + + +@dataclass(frozen=True) +class Answer: + data: Any + question: str + metadata: Dict[str, Any] + + +@dataclass(frozen=True) +class ExtractedAnswer(Answer): + data: Optional[str] + document: Document + probability: float + start: Optional[int] = None + end: Optional[int] = None + + +@dataclass(frozen=True) +class GeneratedAnswer(Answer): + data: str + documents: List[Document] diff --git a/releasenotes/notes/add-v2-answer-class-31bc8d3116922594.yaml b/releasenotes/notes/add-v2-answer-class-31bc8d3116922594.yaml new file mode 100644 index 000000000..e10453dee --- /dev/null +++ b/releasenotes/notes/add-v2-answer-class-31bc8d3116922594.yaml @@ -0,0 +1,4 @@ +--- +features: + - Add Answer base class for haystack v2 + - Add GeneratedAnswer and ExtractedAnswer