2024-05-09 15:40:36 +02:00
|
|
|
# SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai>
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
2024-02-19 13:59:48 +01:00
|
|
|
import tempfile
|
2024-03-13 16:59:26 +01:00
|
|
|
from unittest import mock
|
2024-02-19 13:59:48 +01:00
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
from haystack import Pipeline
|
2024-02-29 12:23:32 +01:00
|
|
|
from haystack.core.pipeline.template import PipelineTemplate, PredefinedPipeline
|
2024-02-19 13:59:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def random_valid_template():
|
2024-02-27 17:39:23 +01:00
|
|
|
template = """
|
|
|
|
components:
|
|
|
|
generator:
|
|
|
|
{{ generator | indent }}
|
|
|
|
|
|
|
|
prompt_builder:
|
|
|
|
{{ prompt_builder | indent }}
|
2024-02-19 13:59:48 +01:00
|
|
|
|
|
|
|
connections:
|
2024-02-27 17:39:23 +01:00
|
|
|
- receiver: generator.prompt
|
|
|
|
sender: prompt_builder.prompt
|
2024-02-19 13:59:48 +01:00
|
|
|
"""
|
|
|
|
return template
|
|
|
|
|
|
|
|
|
2024-02-27 17:39:23 +01:00
|
|
|
class TestPipelineTemplate:
|
2024-02-19 13:59:48 +01:00
|
|
|
def test_from_str(self):
|
|
|
|
with pytest.raises(ValueError):
|
2024-02-28 11:33:40 +01:00
|
|
|
PipelineTemplate("{{ invalid template }")
|
2024-02-19 13:59:48 +01:00
|
|
|
|
2024-02-28 11:33:40 +01:00
|
|
|
assert PipelineTemplate("{{ valid_template }}").template_content == "{{ valid_template }}"
|
2024-02-19 13:59:48 +01:00
|
|
|
|
2024-02-27 17:39:23 +01:00
|
|
|
def test_from_file(self, random_valid_template):
|
2024-02-19 13:59:48 +01:00
|
|
|
with pytest.raises(FileNotFoundError):
|
2024-02-27 17:39:23 +01:00
|
|
|
PipelineTemplate.from_file("invalid/path")
|
2024-02-19 13:59:48 +01:00
|
|
|
|
2024-02-27 17:39:23 +01:00
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False) as fp:
|
|
|
|
fp.write(random_valid_template)
|
|
|
|
fp.seek(0)
|
|
|
|
assert PipelineTemplate.from_file(fp.name).template_content == random_valid_template
|
2024-02-19 13:59:48 +01:00
|
|
|
|
2024-02-27 17:39:23 +01:00
|
|
|
def test_from_predefined(self):
|
|
|
|
tpl = PipelineTemplate.from_predefined(PredefinedPipeline.INDEXING)
|
|
|
|
assert len(tpl.template_content)
|
2024-02-21 12:02:04 +01:00
|
|
|
|
2024-02-19 13:59:48 +01:00
|
|
|
# Building a pipeline directly using all default components specified in a predefined or custom template.
|
2024-03-07 08:52:25 +01:00
|
|
|
def test_build_pipeline_with_default_components(self, monkeypatch):
|
|
|
|
monkeypatch.setenv("OPENAI_API_KEY", "fake_key")
|
2024-06-04 12:57:33 +02:00
|
|
|
rendered = PipelineTemplate.from_predefined(PredefinedPipeline.INDEXING).render()
|
|
|
|
pipeline = Pipeline.loads(rendered)
|
2024-03-13 16:59:26 +01:00
|
|
|
|
2024-06-04 12:57:33 +02:00
|
|
|
# pipeline has components
|
|
|
|
assert pipeline.get_component("cleaner")
|
|
|
|
assert pipeline.get_component("writer")
|
|
|
|
assert pipeline.get_component("embedder")
|
2024-03-13 16:59:26 +01:00
|
|
|
|
2024-06-04 12:57:33 +02:00
|
|
|
# pipeline should have inputs and outputs
|
|
|
|
assert len(pipeline.inputs()) > 0
|
|
|
|
assert len(pipeline.outputs()) > 0
|