parallel-web-tools 0.1.3__tar.gz → 0.3.0__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.
Files changed (49) hide show
  1. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/.gitignore +2 -0
  2. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/PKG-INFO +37 -8
  3. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/README.md +30 -1
  4. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/__init__.py +1 -1
  5. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/cli/commands.py +489 -156
  6. parallel_web_tools-0.3.0/parallel_web_tools/cli/skills.py +204 -0
  7. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/__init__.py +2 -0
  8. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/batch.py +26 -3
  9. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/research.py +106 -19
  10. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/runner.py +17 -9
  11. parallel_web_tools-0.3.0/parallel_web_tools/core/skills.py +311 -0
  12. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/bigquery/cloud_function/requirements.txt +1 -1
  13. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/processors/bigquery.py +9 -3
  14. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/processors/csv.py +9 -3
  15. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/processors/duckdb.py +9 -3
  16. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/processors/json.py +9 -3
  17. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/pyproject.toml +11 -9
  18. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/cli/__init__.py +0 -0
  19. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/cli/planner.py +0 -0
  20. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/cli/updater.py +0 -0
  21. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/auth.py +0 -0
  22. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/findall.py +0 -0
  23. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/monitor.py +0 -0
  24. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/polling.py +0 -0
  25. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/result.py +0 -0
  26. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/schema.py +0 -0
  27. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/sql_utils.py +0 -0
  28. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/core/user_agent.py +0 -0
  29. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/__init__.py +0 -0
  30. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/bigquery/__init__.py +0 -0
  31. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/bigquery/cloud_function/main.py +0 -0
  32. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/bigquery/deploy.py +0 -0
  33. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/bigquery/sql/create_functions.sql +0 -0
  34. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/duckdb/__init__.py +0 -0
  35. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/duckdb/batch.py +0 -0
  36. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/duckdb/findall.py +0 -0
  37. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/duckdb/udf.py +0 -0
  38. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/polars/__init__.py +0 -0
  39. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/polars/enrich.py +0 -0
  40. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/snowflake/__init__.py +0 -0
  41. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/snowflake/deploy.py +0 -0
  42. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/snowflake/sql/01_setup.sql +0 -0
  43. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/snowflake/sql/02_create_udf.sql +0 -0
  44. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/snowflake/sql/03_cleanup.sql +0 -0
  45. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/spark/__init__.py +0 -0
  46. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/spark/streaming.py +0 -0
  47. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/spark/udf.py +0 -0
  48. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/integrations/utils.py +0 -0
  49. {parallel_web_tools-0.1.3 → parallel_web_tools-0.3.0}/parallel_web_tools/processors/__init__.py +0 -0
@@ -12,6 +12,8 @@ wheels/
12
12
  # Environment files
13
13
  .env.local
14
14
  .env
15
+ .envrc
16
+ .direnv
15
17
 
16
18
  # Data files
17
19
  data/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: parallel-web-tools
3
- Version: 0.1.3
3
+ Version: 0.3.0
4
4
  Summary: Parallel Tools: CLI and Python SDK for AI-powered web intelligence
5
5
  Project-URL: Homepage, https://github.com/parallel-web/parallel-web-tools
6
6
  Project-URL: Documentation, https://docs.parallel.ai
@@ -51,19 +51,19 @@ Requires-Dist: duckdb>=1.0.0; extra == 'dev'
51
51
  Requires-Dist: nest-asyncio>=1.6.0; extra == 'dev'
52
52
  Requires-Dist: pandas>=2.3.0; extra == 'dev'
53
53
  Requires-Dist: polars>=1.37.0; extra == 'dev'
54
- Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
54
+ Requires-Dist: pre-commit>=4.6.0; extra == 'dev'
55
55
  Requires-Dist: pyarrow>=18.0.0; extra == 'dev'
56
- Requires-Dist: pyinstaller>=6.0.0; extra == 'dev'
56
+ Requires-Dist: pyinstaller>=6.20.0; extra == 'dev'
57
57
  Requires-Dist: pyspark>=3.4.0; extra == 'dev'
58
- Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
59
- Requires-Dist: pytest>=8.0.0; extra == 'dev'
58
+ Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
59
+ Requires-Dist: pytest>=9.0.0; extra == 'dev'
60
60
  Requires-Dist: pyyaml>=6.0.0; extra == 'dev'
61
61
  Requires-Dist: questionary>=2.0.0; extra == 'dev'
62
- Requires-Dist: ruff>=0.14.0; extra == 'dev'
62
+ Requires-Dist: ruff>=0.15.0; extra == 'dev'
63
63
  Requires-Dist: snowflake-connector-python>=3.0.0; extra == 'dev'
64
64
  Requires-Dist: sqlalchemy-bigquery>=1.11.0; extra == 'dev'
65
65
  Requires-Dist: sqlalchemy>=2.0.0; extra == 'dev'
66
- Requires-Dist: ty>=0.0.21; extra == 'dev'
66
+ Requires-Dist: ty>=0.0.33; extra == 'dev'
67
67
  Provides-Extra: duckdb
68
68
  Requires-Dist: duckdb>=1.0.0; extra == 'duckdb'
69
69
  Requires-Dist: nest-asyncio>=1.6.0; extra == 'duckdb'
@@ -98,6 +98,7 @@ CLI and data enrichment utilities for the [Parallel API](https://docs.parallel.a
98
98
  - **Web Search** - AI-powered search with domain filtering and date ranges
99
99
  - **Content Extraction** - Extract clean markdown from any URL
100
100
  - **Data Enrichment** - Enrich CSV, JSON, DuckDB, and BigQuery data with AI
101
+ - **Follow-up Context** - Chain research and enrichment tasks using `--previous-interaction-id`
101
102
  - **AI-Assisted Planning** - Use natural language to define what data you want
102
103
  - **Multiple Integrations** - Polars, DuckDB, Snowflake, BigQuery, Spark
103
104
 
@@ -293,13 +294,41 @@ echo "What is the latest funding for Anthropic?" | parallel-cli search - --json
293
294
  echo "Research question" | parallel-cli research run - --json
294
295
 
295
296
  # Async: launch then poll separately
296
- parallel-cli research run "question" --no-wait --json # returns run_id
297
+ parallel-cli research run "question" --no-wait --json # returns run_id + interaction_id
297
298
  parallel-cli research status trun_xxx --json # check status
298
299
  parallel-cli research poll trun_xxx --json # wait and get result
299
300
 
301
+ # Follow-up: reuse context from a previous task
302
+ parallel-cli research run "follow-up question" --previous-interaction-id trun_xxx --json
303
+ parallel-cli enrich run --data '[...]' --previous-interaction-id trun_xxx --json
304
+
300
305
  # Exit codes: 0=ok, 2=bad input, 3=auth error, 4=api error, 5=timeout
301
306
  ```
302
307
 
308
+ ### Follow-up research with context reuse
309
+
310
+ Tasks return an `interaction_id` that can be passed as `--previous-interaction-id` on a subsequent research or enrichment run. The new task inherits the context from the prior one, so follow-up questions can reference earlier results without repeating them.
311
+
312
+ ```bash
313
+ # Step 1: Run initial research (interaction_id is in the JSON output)
314
+ parallel-cli research run "What are the top 3 AI companies?" --json --processor lite-fast
315
+ # → { "run_id": "trun_abc", "interaction_id": "trun_abc", ... }
316
+
317
+ # Step 2: Follow-up research referencing the first task's context
318
+ parallel-cli research run "What products does the #1 company make?" \
319
+ --previous-interaction-id trun_abc --json
320
+
321
+ # Step 3: Use research context for enrichment
322
+ parallel-cli enrich run \
323
+ --data '[{"company": "Anthropic"}, {"company": "OpenAI"}]' \
324
+ --target enriched.csv \
325
+ --source-columns '[{"name": "company", "description": "Company name"}]' \
326
+ --enriched-columns '[{"name": "products", "description": "Main products"}]' \
327
+ --previous-interaction-id trun_abc --json
328
+ ```
329
+
330
+ The `interaction_id` is shown in both human-readable and `--json` output for `research run`, `research status`, and `research poll`.
331
+
303
332
  ### More examples
304
333
 
305
334
  ```bash
@@ -13,6 +13,7 @@ CLI and data enrichment utilities for the [Parallel API](https://docs.parallel.a
13
13
  - **Web Search** - AI-powered search with domain filtering and date ranges
14
14
  - **Content Extraction** - Extract clean markdown from any URL
15
15
  - **Data Enrichment** - Enrich CSV, JSON, DuckDB, and BigQuery data with AI
16
+ - **Follow-up Context** - Chain research and enrichment tasks using `--previous-interaction-id`
16
17
  - **AI-Assisted Planning** - Use natural language to define what data you want
17
18
  - **Multiple Integrations** - Polars, DuckDB, Snowflake, BigQuery, Spark
18
19
 
@@ -208,13 +209,41 @@ echo "What is the latest funding for Anthropic?" | parallel-cli search - --json
208
209
  echo "Research question" | parallel-cli research run - --json
209
210
 
210
211
  # Async: launch then poll separately
211
- parallel-cli research run "question" --no-wait --json # returns run_id
212
+ parallel-cli research run "question" --no-wait --json # returns run_id + interaction_id
212
213
  parallel-cli research status trun_xxx --json # check status
213
214
  parallel-cli research poll trun_xxx --json # wait and get result
214
215
 
216
+ # Follow-up: reuse context from a previous task
217
+ parallel-cli research run "follow-up question" --previous-interaction-id trun_xxx --json
218
+ parallel-cli enrich run --data '[...]' --previous-interaction-id trun_xxx --json
219
+
215
220
  # Exit codes: 0=ok, 2=bad input, 3=auth error, 4=api error, 5=timeout
216
221
  ```
217
222
 
223
+ ### Follow-up research with context reuse
224
+
225
+ Tasks return an `interaction_id` that can be passed as `--previous-interaction-id` on a subsequent research or enrichment run. The new task inherits the context from the prior one, so follow-up questions can reference earlier results without repeating them.
226
+
227
+ ```bash
228
+ # Step 1: Run initial research (interaction_id is in the JSON output)
229
+ parallel-cli research run "What are the top 3 AI companies?" --json --processor lite-fast
230
+ # → { "run_id": "trun_abc", "interaction_id": "trun_abc", ... }
231
+
232
+ # Step 2: Follow-up research referencing the first task's context
233
+ parallel-cli research run "What products does the #1 company make?" \
234
+ --previous-interaction-id trun_abc --json
235
+
236
+ # Step 3: Use research context for enrichment
237
+ parallel-cli enrich run \
238
+ --data '[{"company": "Anthropic"}, {"company": "OpenAI"}]' \
239
+ --target enriched.csv \
240
+ --source-columns '[{"name": "company", "description": "Company name"}]' \
241
+ --enriched-columns '[{"name": "products", "description": "Main products"}]' \
242
+ --previous-interaction-id trun_abc --json
243
+ ```
244
+
245
+ The `interaction_id` is shown in both human-readable and `--json` output for `research run`, `research status`, and `research poll`.
246
+
218
247
  ### More examples
219
248
 
220
249
  ```bash
@@ -29,7 +29,7 @@ from parallel_web_tools.core import (
29
29
  run_tasks,
30
30
  )
31
31
 
32
- __version__ = "0.1.3"
32
+ __version__ = "0.3.0"
33
33
 
34
34
  __all__ = [
35
35
  # Auth