apify-haystack 1.0.0__tar.gz → 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.0.1](https://github.com/apify/apify-haystack/releases/tag/v1.0.1) (2026-10-29)
6
+
7
+ ### 🐛 Bug Fixes
8
+
9
+ - Allow running Actors and tasks without input ([#84](https://github.com/apify/apify-haystack/pull/84)) ([3036312](https://github.com/apify/apify-haystack/commit/3036312e567dc513529e1d822db009b44ca97041)) by [@vdusek](https://github.com/vdusek)
10
+
11
+
5
12
  ## [1.0.0](https://github.com/apify/apify-haystack/releases/tag/v1.0.0) (2026-10-27)
6
13
 
7
14
  ### 🚀 Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apify_haystack
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: Apify integration for Haystack: load Actor results as Documents, search the web, and give Agents access to Apify Actors.
5
5
  Keywords: agents,apify,crawler,haystack,llm,rag,scraper,scraping,web-search
6
6
  Author: Apify Technologies s.r.o.
@@ -27,13 +27,20 @@ Project-URL: Issue Tracker, https://github.com/apify/apify-haystack/issues
27
27
  Project-URL: Repository, https://github.com/apify/apify-haystack
28
28
  Description-Content-Type: text/markdown
29
29
 
30
- # Apify-Haystack integration
30
+ <h1 align="center">Apify-Haystack integration</h1>
31
31
 
32
- [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/apify/apify-haystack/blob/main/LICENSE)
33
- [![PyPi Package](https://badge.fury.io/py/apify-haystack.svg)](https://badge.fury.io/py/apify-haystack)
34
- [![Python](https://img.shields.io/pypi/pyversions/apify-haystack)](https://pypi.org/project/apify-haystack)
32
+ <p align="center">
33
+ <strong>The official integration of the <a href="https://apify.com/">Apify</a> platform with <a href="https://haystack.deepset.ai/">Haystack</a>.</strong>
34
+ </p>
35
35
 
36
- The Apify-Haystack integration allows easy interaction between the [Apify](https://apify.com/) platform and [Haystack](https://haystack.deepset.ai/).
36
+ <p align="center">
37
+ <a href="https://pypi.org/project/apify-haystack/"><img src="https://badge.fury.io/py/apify-haystack.svg" alt="PyPI version"></a>
38
+ <a href="https://pypi.org/project/apify-haystack/"><img src="https://img.shields.io/pypi/dm/apify-haystack" alt="PyPI downloads"></a>
39
+ <a href="https://pypi.org/project/apify-haystack/"><img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python versions"></a>
40
+ <a href="https://github.com/apify/apify-haystack/actions/workflows/on_main.yaml"><img src="https://github.com/apify/apify-haystack/actions/workflows/on_main.yaml/badge.svg?branch=main" alt="Build status"></a>
41
+ <a href="https://github.com/apify/apify-haystack/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/apify-haystack" alt="License"></a>
42
+ <a href="https://discord.gg/jyEM2PRvMU"><img src="https://img.shields.io/discord/801163717915574323?label=discord" alt="Chat on Discord"></a>
43
+ </p>
37
44
 
38
45
  Apify is a platform for web scraping, data extraction, and web automation tasks.
39
46
  It provides serverless applications called Actors for tasks like crawling websites and scraping Facebook, Instagram, and Google results.
@@ -1,10 +1,17 @@
1
- # Apify-Haystack integration
2
-
3
- [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/apify/apify-haystack/blob/main/LICENSE)
4
- [![PyPi Package](https://badge.fury.io/py/apify-haystack.svg)](https://badge.fury.io/py/apify-haystack)
5
- [![Python](https://img.shields.io/pypi/pyversions/apify-haystack)](https://pypi.org/project/apify-haystack)
6
-
7
- The Apify-Haystack integration allows easy interaction between the [Apify](https://apify.com/) platform and [Haystack](https://haystack.deepset.ai/).
1
+ <h1 align="center">Apify-Haystack integration</h1>
2
+
3
+ <p align="center">
4
+ <strong>The official integration of the <a href="https://apify.com/">Apify</a> platform with <a href="https://haystack.deepset.ai/">Haystack</a>.</strong>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="https://pypi.org/project/apify-haystack/"><img src="https://badge.fury.io/py/apify-haystack.svg" alt="PyPI version"></a>
9
+ <a href="https://pypi.org/project/apify-haystack/"><img src="https://img.shields.io/pypi/dm/apify-haystack" alt="PyPI downloads"></a>
10
+ <a href="https://pypi.org/project/apify-haystack/"><img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python versions"></a>
11
+ <a href="https://github.com/apify/apify-haystack/actions/workflows/on_main.yaml"><img src="https://github.com/apify/apify-haystack/actions/workflows/on_main.yaml/badge.svg?branch=main" alt="Build status"></a>
12
+ <a href="https://github.com/apify/apify-haystack/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/apify-haystack" alt="License"></a>
13
+ <a href="https://discord.gg/jyEM2PRvMU"><img src="https://img.shields.io/discord/801163717915574323?label=discord" alt="Chat on Discord"></a>
14
+ </p>
8
15
 
9
16
  Apify is a platform for web scraping, data extraction, and web automation tasks.
10
17
  It provides serverless applications called Actors for tasks like crawling websites and scraping Facebook, Instagram, and Google results.
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "apify_haystack"
7
- version = "1.0.0"
7
+ version = "1.0.1"
8
8
  description = "Apify integration for Haystack: load Actor results as Documents, search the web, and give Agents access to Apify Actors."
9
9
  license = "Apache-2.0"
10
10
  license-files = ["LICENSE"]
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "apify_haystack"
7
- version = "1.0.0"
7
+ version = "1.0.1"
8
8
  description = "Apify integration for Haystack: load Actor results as Documents, search the web, and give Agents access to Apify Actors."
9
9
  authors = [{ name = "Apify Technologies s.r.o.", email = "support@apify.com" }]
10
10
  license = "Apache-2.0"
@@ -132,7 +132,8 @@ class ApifyDatasetFromActorCall(ApifyDatasetComponent):
132
132
  `default_dataset_mapping_function`.
133
133
  run_input (dict, optional): The input parameters for the Actor you want to run. This can be provided
134
134
  either in the `run` method or during the class instantiation. If specified in both places,
135
- the inputs are merged and the values from `run` take precedence.
135
+ the inputs are merged and the values from `run` take precedence. Without any input, the
136
+ Actor runs with its default input.
136
137
  build (str, optional): Optionally specifies the Actor build to run.
137
138
  It can be either a build tag or build number.
138
139
  memory_mbytes (int, optional): Optional memory limit for the run, in megabytes.
@@ -160,7 +161,8 @@ class ApifyDatasetFromActorCall(ApifyDatasetComponent):
160
161
  Args:
161
162
  run_input (dict, optional): The input parameters for the Actor you want to run. This can be provided
162
163
  either in the `run` method or during the class instantiation. If specified in both places,
163
- the inputs are merged and the values from `run` take precedence.
164
+ the inputs are merged and the values from `run` take precedence. Without any input, the
165
+ Actor runs with its default input.
164
166
 
165
167
  Example:
166
168
  .. code-block:: python
@@ -172,8 +174,7 @@ class ApifyDatasetFromActorCall(ApifyDatasetComponent):
172
174
  )
173
175
  dataset = actor.run(run_input={"startUrls": [{"url": "https://haystack.deepset.ai/"}]})
174
176
  """
175
- if not (run_input := _merge_inputs(self.run_input, run_input)):
176
- raise ValueError('Please provide the run_input either in the constructor or in the run method.')
177
+ run_input = _merge_inputs(self.run_input, run_input)
177
178
 
178
179
  client = self._get_client()
179
180
  run = client.actor(self.actor_id).call(
@@ -193,10 +194,10 @@ class ApifyDatasetFromActorCall(ApifyDatasetComponent):
193
194
  Args:
194
195
  run_input (dict, optional): The input parameters for the Actor you want to run. This can be provided
195
196
  either in the `run_async` method or during the class instantiation. If specified in both places,
196
- the inputs are merged and the values from `run_async` take precedence.
197
+ the inputs are merged and the values from `run_async` take precedence. Without any input, the
198
+ Actor runs with its default input.
197
199
  """
198
- if not (run_input := _merge_inputs(self.run_input, run_input)):
199
- raise ValueError('Please provide the run_input either in the constructor or in the run method.')
200
+ run_input = _merge_inputs(self.run_input, run_input)
200
201
 
201
202
  client = self._get_async_client()
202
203
  run = await client.actor(self.actor_id).call(
@@ -260,7 +261,8 @@ class ApifyDatasetFromTaskCall(ApifyDatasetComponent):
260
261
  `default_dataset_mapping_function`.
261
262
  task_input (dict, optional): The input parameters for the task you want to run. This can be provided
262
263
  either in the `run` method or during the class instantiation. If specified in both places,
263
- the inputs are merged and the values from `run` take precedence.
264
+ the inputs are merged and the values from `run` take precedence. Without any input, the
265
+ task runs with its saved input.
264
266
  build (str, optional): Optionally specifies the Actor build to run.
265
267
  It can be either a build tag or build number.
266
268
  memory_mbytes (int, optional): Optional memory limit for the run, in megabytes.
@@ -288,10 +290,10 @@ class ApifyDatasetFromTaskCall(ApifyDatasetComponent):
288
290
  Args:
289
291
  task_input (dict, optional): The input parameters for the task you want to run. This can be provided
290
292
  either in the `run` method or during the class instantiation. If specified in both places,
291
- the inputs are merged and the values from `run` take precedence.
293
+ the inputs are merged and the values from `run` take precedence. Without any input, the
294
+ task runs with its saved input.
292
295
  """
293
- if not (task_input := _merge_inputs(self.task_input, task_input)):
294
- raise ValueError('Please provide the task_input either in the constructor or in the run method.')
296
+ task_input = _merge_inputs(self.task_input, task_input)
295
297
 
296
298
  client = self._get_client()
297
299
  run = client.task(self.task_id).call(
@@ -311,10 +313,10 @@ class ApifyDatasetFromTaskCall(ApifyDatasetComponent):
311
313
  Args:
312
314
  task_input (dict, optional): The input parameters for the task you want to run. This can be provided
313
315
  either in the `run_async` method or during the class instantiation. If specified in both places,
314
- the inputs are merged and the values from `run_async` take precedence.
316
+ the inputs are merged and the values from `run_async` take precedence. Without any input, the
317
+ task runs with its saved input.
315
318
  """
316
- if not (task_input := _merge_inputs(self.task_input, task_input)):
317
- raise ValueError('Please provide the task_input either in the constructor or in the run method.')
319
+ task_input = _merge_inputs(self.task_input, task_input)
318
320
 
319
321
  client = self._get_async_client()
320
322
  run = await client.task(self.task_id).call(
@@ -375,9 +377,8 @@ def _serialize_mapping_function(dataset_mapping_function: Callable[[dict], Docum
375
377
 
376
378
 
377
379
  def _merge_inputs(input1: dict | None, input2: dict | None) -> dict | None:
378
- if input1 and input2:
379
- return input1 | input2
380
- return input1 or input2
380
+ merged = (input1 or {}) | (input2 or {})
381
+ return merged or None
381
382
 
382
383
 
383
384
  def _load_documents(
File without changes