agent-recipes 0.0.5__py3-none-any.whl
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.
- agent_recipes/__init__.py +27 -0
- agent_recipes/recipe_runtime/__init__.py +28 -0
- agent_recipes/recipe_runtime/core.py +385 -0
- agent_recipes/templates/ai-ab-hook-tester/recipe.yaml +45 -0
- agent_recipes/templates/ai-ab-hook-tester/tools.py +169 -0
- agent_recipes/templates/ai-angle-generator/recipe.yaml +49 -0
- agent_recipes/templates/ai-angle-generator/tools.py +182 -0
- agent_recipes/templates/ai-api-doc-generator/README.md +59 -0
- agent_recipes/templates/ai-api-doc-generator/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-api-tester/README.md +60 -0
- agent_recipes/templates/ai-api-tester/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-audio-enhancer/README.md +59 -0
- agent_recipes/templates/ai-audio-enhancer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-audio-normalizer/README.md +13 -0
- agent_recipes/templates/ai-audio-normalizer/TEMPLATE.yaml +44 -0
- agent_recipes/templates/ai-audio-splitter/README.md +14 -0
- agent_recipes/templates/ai-audio-splitter/TEMPLATE.yaml +47 -0
- agent_recipes/templates/ai-background-music-generator/README.md +59 -0
- agent_recipes/templates/ai-background-music-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-background-remover/README.md +60 -0
- agent_recipes/templates/ai-background-remover/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-barcode-scanner/README.md +60 -0
- agent_recipes/templates/ai-barcode-scanner/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-blog-generator/README.md +59 -0
- agent_recipes/templates/ai-blog-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-brief-generator/recipe.yaml +52 -0
- agent_recipes/templates/ai-brief-generator/tools.py +231 -0
- agent_recipes/templates/ai-broll-builder/recipe.yaml +47 -0
- agent_recipes/templates/ai-broll-builder/tools.py +204 -0
- agent_recipes/templates/ai-calendar-scheduler/README.md +60 -0
- agent_recipes/templates/ai-calendar-scheduler/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-changelog-generator/README.md +14 -0
- agent_recipes/templates/ai-changelog-generator/TEMPLATE.yaml +46 -0
- agent_recipes/templates/ai-chart-generator/README.md +61 -0
- agent_recipes/templates/ai-chart-generator/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-code-documenter/README.md +12 -0
- agent_recipes/templates/ai-code-documenter/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-code-refactorer/README.md +59 -0
- agent_recipes/templates/ai-code-refactorer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-code-reviewer/README.md +59 -0
- agent_recipes/templates/ai-code-reviewer/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-color-palette-extractor/README.md +60 -0
- agent_recipes/templates/ai-color-palette-extractor/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-comment-miner/recipe.yaml +40 -0
- agent_recipes/templates/ai-comment-miner/tools.py +141 -0
- agent_recipes/templates/ai-commit-message-generator/README.md +59 -0
- agent_recipes/templates/ai-commit-message-generator/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-content-calendar/recipe.yaml +43 -0
- agent_recipes/templates/ai-content-calendar/tools.py +170 -0
- agent_recipes/templates/ai-context-enricher/recipe.yaml +48 -0
- agent_recipes/templates/ai-context-enricher/tools.py +258 -0
- agent_recipes/templates/ai-contract-analyzer/README.md +60 -0
- agent_recipes/templates/ai-contract-analyzer/TEMPLATE.yaml +34 -0
- agent_recipes/templates/ai-csv-cleaner/README.md +13 -0
- agent_recipes/templates/ai-csv-cleaner/TEMPLATE.yaml +45 -0
- agent_recipes/templates/ai-cta-generator/recipe.yaml +54 -0
- agent_recipes/templates/ai-cta-generator/tools.py +174 -0
- agent_recipes/templates/ai-daily-news-show/recipe.yaml +103 -0
- agent_recipes/templates/ai-daily-news-show/tools.py +308 -0
- agent_recipes/templates/ai-data-anonymizer/README.md +60 -0
- agent_recipes/templates/ai-data-anonymizer/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-data-profiler/README.md +14 -0
- agent_recipes/templates/ai-data-profiler/TEMPLATE.yaml +42 -0
- agent_recipes/templates/ai-dependency-auditor/README.md +12 -0
- agent_recipes/templates/ai-dependency-auditor/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-doc-translator/README.md +12 -0
- agent_recipes/templates/ai-doc-translator/TEMPLATE.yaml +41 -0
- agent_recipes/templates/ai-duplicate-finder/README.md +59 -0
- agent_recipes/templates/ai-duplicate-finder/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-ebook-converter/README.md +60 -0
- agent_recipes/templates/ai-ebook-converter/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-email-parser/README.md +59 -0
- agent_recipes/templates/ai-email-parser/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-etl-pipeline/README.md +60 -0
- agent_recipes/templates/ai-etl-pipeline/TEMPLATE.yaml +30 -0
- agent_recipes/templates/ai-excel-formula-generator/README.md +59 -0
- agent_recipes/templates/ai-excel-formula-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-face-blur/README.md +60 -0
- agent_recipes/templates/ai-face-blur/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-fact-checker/recipe.yaml +52 -0
- agent_recipes/templates/ai-fact-checker/tools.py +279 -0
- agent_recipes/templates/ai-faq-generator/README.md +59 -0
- agent_recipes/templates/ai-faq-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-file-organizer/README.md +59 -0
- agent_recipes/templates/ai-file-organizer/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-folder-packager/README.md +15 -0
- agent_recipes/templates/ai-folder-packager/TEMPLATE.yaml +48 -0
- agent_recipes/templates/ai-form-filler/README.md +60 -0
- agent_recipes/templates/ai-form-filler/TEMPLATE.yaml +30 -0
- agent_recipes/templates/ai-hashtag-optimizer/recipe.yaml +45 -0
- agent_recipes/templates/ai-hashtag-optimizer/tools.py +134 -0
- agent_recipes/templates/ai-hook-generator/recipe.yaml +50 -0
- agent_recipes/templates/ai-hook-generator/tools.py +177 -0
- agent_recipes/templates/ai-image-captioner/README.md +59 -0
- agent_recipes/templates/ai-image-captioner/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-image-cataloger/README.md +13 -0
- agent_recipes/templates/ai-image-cataloger/TEMPLATE.yaml +39 -0
- agent_recipes/templates/ai-image-optimizer/README.md +13 -0
- agent_recipes/templates/ai-image-optimizer/TEMPLATE.yaml +43 -0
- agent_recipes/templates/ai-image-resizer/README.md +12 -0
- agent_recipes/templates/ai-image-resizer/TEMPLATE.yaml +39 -0
- agent_recipes/templates/ai-image-tagger/README.md +59 -0
- agent_recipes/templates/ai-image-tagger/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-image-upscaler/README.md +60 -0
- agent_recipes/templates/ai-image-upscaler/TEMPLATE.yaml +27 -0
- agent_recipes/templates/ai-invoice-processor/README.md +60 -0
- agent_recipes/templates/ai-invoice-processor/TEMPLATE.yaml +34 -0
- agent_recipes/templates/ai-json-to-csv/README.md +12 -0
- agent_recipes/templates/ai-json-to-csv/TEMPLATE.yaml +36 -0
- agent_recipes/templates/ai-log-analyzer/README.md +59 -0
- agent_recipes/templates/ai-log-analyzer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-markdown-to-pdf/README.md +12 -0
- agent_recipes/templates/ai-markdown-to-pdf/TEMPLATE.yaml +40 -0
- agent_recipes/templates/ai-meeting-summarizer/README.md +59 -0
- agent_recipes/templates/ai-meeting-summarizer/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-meta-tag-generator/README.md +59 -0
- agent_recipes/templates/ai-meta-tag-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-news-capture-pack/recipe.yaml +42 -0
- agent_recipes/templates/ai-news-capture-pack/tools.py +150 -0
- agent_recipes/templates/ai-news-crawler/recipe.yaml +99 -0
- agent_recipes/templates/ai-news-crawler/tools.py +417 -0
- agent_recipes/templates/ai-news-deduper/recipe.yaml +47 -0
- agent_recipes/templates/ai-news-deduper/tools.py +235 -0
- agent_recipes/templates/ai-newsletter-generator/README.md +59 -0
- agent_recipes/templates/ai-newsletter-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-note-summarizer/README.md +59 -0
- agent_recipes/templates/ai-note-summarizer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-pdf-summarizer/README.md +12 -0
- agent_recipes/templates/ai-pdf-summarizer/TEMPLATE.yaml +40 -0
- agent_recipes/templates/ai-pdf-to-markdown/README.md +19 -0
- agent_recipes/templates/ai-pdf-to-markdown/TEMPLATE.yaml +63 -0
- agent_recipes/templates/ai-performance-analyzer/recipe.yaml +45 -0
- agent_recipes/templates/ai-performance-analyzer/tools.py +159 -0
- agent_recipes/templates/ai-podcast-cleaner/README.md +117 -0
- agent_recipes/templates/ai-podcast-cleaner/TEMPLATE.yaml +117 -0
- agent_recipes/templates/ai-podcast-cleaner/agents.yaml +59 -0
- agent_recipes/templates/ai-podcast-cleaner/workflow.yaml +77 -0
- agent_recipes/templates/ai-podcast-transcriber/README.md +59 -0
- agent_recipes/templates/ai-podcast-transcriber/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-post-copy-generator/recipe.yaml +41 -0
- agent_recipes/templates/ai-post-copy-generator/tools.py +105 -0
- agent_recipes/templates/ai-product-description-generator/README.md +59 -0
- agent_recipes/templates/ai-product-description-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-publisher-pack/recipe.yaml +44 -0
- agent_recipes/templates/ai-publisher-pack/tools.py +252 -0
- agent_recipes/templates/ai-qr-code-generator/README.md +60 -0
- agent_recipes/templates/ai-qr-code-generator/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-regex-generator/README.md +59 -0
- agent_recipes/templates/ai-regex-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-repo-readme/README.md +13 -0
- agent_recipes/templates/ai-repo-readme/TEMPLATE.yaml +42 -0
- agent_recipes/templates/ai-report-generator/README.md +61 -0
- agent_recipes/templates/ai-report-generator/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-resume-parser/README.md +60 -0
- agent_recipes/templates/ai-resume-parser/TEMPLATE.yaml +33 -0
- agent_recipes/templates/ai-rss-aggregator/README.md +60 -0
- agent_recipes/templates/ai-rss-aggregator/TEMPLATE.yaml +30 -0
- agent_recipes/templates/ai-schema-generator/README.md +12 -0
- agent_recipes/templates/ai-schema-generator/TEMPLATE.yaml +34 -0
- agent_recipes/templates/ai-screen-recorder/recipe.yaml +43 -0
- agent_recipes/templates/ai-screen-recorder/tools.py +184 -0
- agent_recipes/templates/ai-screenshot-capture/recipe.yaml +45 -0
- agent_recipes/templates/ai-screenshot-capture/tools.py +231 -0
- agent_recipes/templates/ai-screenshot-ocr/README.md +12 -0
- agent_recipes/templates/ai-screenshot-ocr/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-script-writer/recipe.yaml +58 -0
- agent_recipes/templates/ai-script-writer/tools.py +297 -0
- agent_recipes/templates/ai-sentiment-analyzer/README.md +59 -0
- agent_recipes/templates/ai-sentiment-analyzer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-seo-optimizer/README.md +59 -0
- agent_recipes/templates/ai-seo-optimizer/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-signal-ranker/recipe.yaml +54 -0
- agent_recipes/templates/ai-signal-ranker/tools.py +256 -0
- agent_recipes/templates/ai-sitemap-generator/README.md +59 -0
- agent_recipes/templates/ai-sitemap-generator/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-sitemap-scraper/README.md +13 -0
- agent_recipes/templates/ai-sitemap-scraper/TEMPLATE.yaml +41 -0
- agent_recipes/templates/ai-slide-generator/README.md +60 -0
- agent_recipes/templates/ai-slide-generator/TEMPLATE.yaml +29 -0
- agent_recipes/templates/ai-slide-to-notes/README.md +12 -0
- agent_recipes/templates/ai-slide-to-notes/TEMPLATE.yaml +37 -0
- agent_recipes/templates/ai-social-media-generator/README.md +59 -0
- agent_recipes/templates/ai-social-media-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-sql-generator/README.md +59 -0
- agent_recipes/templates/ai-sql-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-subtitle-generator/README.md +59 -0
- agent_recipes/templates/ai-subtitle-generator/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-test-generator/README.md +59 -0
- agent_recipes/templates/ai-test-generator/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-translation-batch/README.md +59 -0
- agent_recipes/templates/ai-translation-batch/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-url-to-markdown/README.md +14 -0
- agent_recipes/templates/ai-url-to-markdown/TEMPLATE.yaml +44 -0
- agent_recipes/templates/ai-video-chapter-generator/README.md +59 -0
- agent_recipes/templates/ai-video-chapter-generator/TEMPLATE.yaml +32 -0
- agent_recipes/templates/ai-video-compressor/README.md +59 -0
- agent_recipes/templates/ai-video-compressor/TEMPLATE.yaml +28 -0
- agent_recipes/templates/ai-video-editor/README.md +254 -0
- agent_recipes/templates/ai-video-editor/TEMPLATE.yaml +139 -0
- agent_recipes/templates/ai-video-editor/agents.yaml +36 -0
- agent_recipes/templates/ai-video-editor/requirements.txt +8 -0
- agent_recipes/templates/ai-video-editor/scripts/run.sh +10 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__init__.py +45 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__main__.py +8 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/__init__.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/cli.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/config.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/ffmpeg_probe.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/heuristics.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/llm_plan.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/models.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/pipeline.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/render.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/timeline.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/transcribe.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/utils.cpython-312.pyc +0 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/cli.py +343 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/config.py +102 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/ffmpeg_probe.py +92 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/heuristics.py +119 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/llm_plan.py +277 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/models.py +343 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/pipeline.py +287 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/render.py +274 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/timeline.py +278 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/transcribe.py +233 -0
- agent_recipes/templates/ai-video-editor/src/ai_video_editor/utils.py +222 -0
- agent_recipes/templates/ai-video-editor/src/input.mov +0 -0
- agent_recipes/templates/ai-video-editor/src/out.mp4 +0 -0
- agent_recipes/templates/ai-video-editor/tests/test_heuristics.py +130 -0
- agent_recipes/templates/ai-video-editor/tests/test_models.py +152 -0
- agent_recipes/templates/ai-video-editor/tests/test_timeline.py +105 -0
- agent_recipes/templates/ai-video-editor/workflow.yaml +51 -0
- agent_recipes/templates/ai-video-highlight-extractor/README.md +60 -0
- agent_recipes/templates/ai-video-highlight-extractor/TEMPLATE.yaml +33 -0
- agent_recipes/templates/ai-video-merger/recipe.yaml +40 -0
- agent_recipes/templates/ai-video-merger/tools.py +172 -0
- agent_recipes/templates/ai-video-thumbnails/README.md +16 -0
- agent_recipes/templates/ai-video-thumbnails/TEMPLATE.yaml +53 -0
- agent_recipes/templates/ai-video-to-gif/README.md +14 -0
- agent_recipes/templates/ai-video-to-gif/TEMPLATE.yaml +64 -0
- agent_recipes/templates/ai-voice-cloner/README.md +59 -0
- agent_recipes/templates/ai-voice-cloner/TEMPLATE.yaml +31 -0
- agent_recipes/templates/ai-voiceover-generator/recipe.yaml +41 -0
- agent_recipes/templates/ai-voiceover-generator/tools.py +194 -0
- agent_recipes/templates/ai-watermark-adder/README.md +59 -0
- agent_recipes/templates/ai-watermark-adder/TEMPLATE.yaml +26 -0
- agent_recipes/templates/ai-watermark-remover/README.md +60 -0
- agent_recipes/templates/ai-watermark-remover/TEMPLATE.yaml +32 -0
- agent_recipes/templates/data-transformer/README.md +75 -0
- agent_recipes/templates/data-transformer/TEMPLATE.yaml +63 -0
- agent_recipes/templates/data-transformer/agents.yaml +70 -0
- agent_recipes/templates/data-transformer/workflow.yaml +92 -0
- agent_recipes/templates/shorts-generator/README.md +61 -0
- agent_recipes/templates/shorts-generator/TEMPLATE.yaml +65 -0
- agent_recipes/templates/shorts-generator/agents.yaml +66 -0
- agent_recipes/templates/shorts-generator/workflow.yaml +86 -0
- agent_recipes/templates/transcript-generator/README.md +103 -0
- agent_recipes/templates/transcript-generator/TEMPLATE.yaml +57 -0
- agent_recipes/templates/transcript-generator/agents.yaml +62 -0
- agent_recipes/templates/transcript-generator/workflow.yaml +82 -0
- agent_recipes/templates/video-editor/README.md +70 -0
- agent_recipes/templates/video-editor/TEMPLATE.yaml +55 -0
- agent_recipes/templates/video-editor/agents.yaml +68 -0
- agent_recipes/templates/video-editor/workflow.yaml +92 -0
- agent_recipes-0.0.5.dist-info/METADATA +145 -0
- agent_recipes-0.0.5.dist-info/RECORD +269 -0
- agent_recipes-0.0.5.dist-info/WHEEL +5 -0
- agent_recipes-0.0.5.dist-info/top_level.txt +1 -0
- /236/326/177nE/243/231/214/232/265/322m/201/253/353/022C/372/321/266/b/225^=/272/017t/262/3337/310@/315wb/341pB/277z/216/330/314/004/265B/213/375/236/203/026/373/307/354z41/347#/374q/262/22589/032/276 /277/244Vh/322/017/004/224/215/004/367/377/375/335/n +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Color Palette Extractor
|
|
2
|
+
|
|
3
|
+
Extract dominant colors from images
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install agent-recipes
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## CLI Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Basic usage
|
|
15
|
+
praison recipes run ai-color-palette-extractor <input>
|
|
16
|
+
|
|
17
|
+
# With output directory
|
|
18
|
+
praison recipes run ai-color-palette-extractor <input> --output ./output/
|
|
19
|
+
|
|
20
|
+
# Dry run (check dependencies only)
|
|
21
|
+
praison recipes run ai-color-palette-extractor <input> --dry-run
|
|
22
|
+
|
|
23
|
+
# Show recipe info
|
|
24
|
+
praison recipes info ai-color-palette-extractor
|
|
25
|
+
|
|
26
|
+
# Check dependencies
|
|
27
|
+
praison recipes doctor ai-color-palette-extractor
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Python Usage
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from praisonaiagents import Agent
|
|
34
|
+
from agent_recipes import load_recipe
|
|
35
|
+
|
|
36
|
+
# Load and run recipe
|
|
37
|
+
recipe = load_recipe("ai-color-palette-extractor")
|
|
38
|
+
result = recipe.run(input="<your-input>")
|
|
39
|
+
print(result)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Requirements
|
|
43
|
+
|
|
44
|
+
### Packages
|
|
45
|
+
- pillow
|
|
46
|
+
- colorthief
|
|
47
|
+
|
|
48
|
+
### Environment Variables
|
|
49
|
+
- None
|
|
50
|
+
|
|
51
|
+
### External Tools
|
|
52
|
+
- None
|
|
53
|
+
|
|
54
|
+
## Tags
|
|
55
|
+
|
|
56
|
+
`image`, `color`, `palette`
|
|
57
|
+
|
|
58
|
+
## License
|
|
59
|
+
|
|
60
|
+
Apache-2.0
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: ai-color-palette-extractor
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Extract dominant colors from images
|
|
4
|
+
author: praison
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
tags:
|
|
7
|
+
- image
|
|
8
|
+
- color
|
|
9
|
+
- palette
|
|
10
|
+
|
|
11
|
+
requires:
|
|
12
|
+
tools:
|
|
13
|
+
- image_tool
|
|
14
|
+
packages:
|
|
15
|
+
- pillow
|
|
16
|
+
- colorthief
|
|
17
|
+
|
|
18
|
+
cli:
|
|
19
|
+
command: praison recipes run ai-color-palette-extractor
|
|
20
|
+
examples:
|
|
21
|
+
- praison recipes run ai-color-palette-extractor <input>
|
|
22
|
+
- praison recipes run ai-color-palette-extractor <input> --output ./output/
|
|
23
|
+
- praison recipes run ai-color-palette-extractor <input> --dry-run
|
|
24
|
+
|
|
25
|
+
safety:
|
|
26
|
+
dry_run_default: false
|
|
27
|
+
overwrites_files: true
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: ai-comment-miner
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: Mine comments for content ideas and audience insights
|
|
4
|
+
author: PraisonAI
|
|
5
|
+
tags:
|
|
6
|
+
- comments
|
|
7
|
+
- ideas
|
|
8
|
+
- audience
|
|
9
|
+
- mining
|
|
10
|
+
|
|
11
|
+
config:
|
|
12
|
+
extract_ideas: true
|
|
13
|
+
sentiment_analysis: true
|
|
14
|
+
max_comments: 100
|
|
15
|
+
|
|
16
|
+
input:
|
|
17
|
+
type: object
|
|
18
|
+
properties:
|
|
19
|
+
comments:
|
|
20
|
+
type: array
|
|
21
|
+
|
|
22
|
+
output:
|
|
23
|
+
type: object
|
|
24
|
+
properties:
|
|
25
|
+
ideas:
|
|
26
|
+
type: array
|
|
27
|
+
insights:
|
|
28
|
+
type: object
|
|
29
|
+
|
|
30
|
+
requires:
|
|
31
|
+
env:
|
|
32
|
+
- OPENAI_API_KEY
|
|
33
|
+
|
|
34
|
+
workflow:
|
|
35
|
+
agents:
|
|
36
|
+
- name: miner
|
|
37
|
+
role: Comment Miner
|
|
38
|
+
tools:
|
|
39
|
+
- extract_ideas
|
|
40
|
+
- analyze_sentiment
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AI Comment Miner Tools
|
|
3
|
+
|
|
4
|
+
Extract content ideas and insights from comments.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
import os
|
|
9
|
+
from typing import Any, Dict, List
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def call_llm(prompt: str, max_tokens: int = 800) -> str:
|
|
15
|
+
"""Call OpenAI API."""
|
|
16
|
+
import requests
|
|
17
|
+
api_key = os.environ.get("OPENAI_API_KEY")
|
|
18
|
+
if not api_key:
|
|
19
|
+
raise ValueError("OPENAI_API_KEY not set")
|
|
20
|
+
response = requests.post(
|
|
21
|
+
"https://api.openai.com/v1/chat/completions",
|
|
22
|
+
headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
|
|
23
|
+
json={"model": "gpt-4o-mini", "messages": [{"role": "user", "content": prompt}], "max_tokens": max_tokens},
|
|
24
|
+
timeout=60,
|
|
25
|
+
)
|
|
26
|
+
response.raise_for_status()
|
|
27
|
+
return response.json()["choices"][0]["message"]["content"]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def extract_ideas(
|
|
31
|
+
comments: List[str],
|
|
32
|
+
max_ideas: int = 10,
|
|
33
|
+
) -> Dict[str, Any]:
|
|
34
|
+
"""
|
|
35
|
+
Extract content ideas from comments.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
comments: List of comment texts
|
|
39
|
+
max_ideas: Maximum ideas to extract
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
Dictionary with extracted ideas
|
|
43
|
+
"""
|
|
44
|
+
comments_text = "\n".join([f"- {c[:200]}" for c in comments[:50]])
|
|
45
|
+
|
|
46
|
+
prompt = f"""Analyze these audience comments and extract content ideas:
|
|
47
|
+
|
|
48
|
+
{comments_text}
|
|
49
|
+
|
|
50
|
+
Extract:
|
|
51
|
+
1. Questions people are asking (potential video topics)
|
|
52
|
+
2. Pain points mentioned (problems to solve)
|
|
53
|
+
3. Requests for content (what they want to see)
|
|
54
|
+
4. Trending topics mentioned
|
|
55
|
+
|
|
56
|
+
Provide {max_ideas} specific, actionable content ideas based on these comments.
|
|
57
|
+
Format each idea on its own line."""
|
|
58
|
+
|
|
59
|
+
try:
|
|
60
|
+
result = call_llm(prompt, max_tokens=600)
|
|
61
|
+
|
|
62
|
+
ideas = []
|
|
63
|
+
for line in result.split("\n"):
|
|
64
|
+
line = line.strip().lstrip("-•0123456789.").strip()
|
|
65
|
+
if line and len(line) > 10:
|
|
66
|
+
ideas.append(line)
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
"ideas": ideas[:max_ideas],
|
|
70
|
+
"comments_analyzed": len(comments),
|
|
71
|
+
}
|
|
72
|
+
except Exception as e:
|
|
73
|
+
logger.error(f"Error extracting ideas: {e}")
|
|
74
|
+
return {"error": str(e)}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def analyze_sentiment(
|
|
78
|
+
comments: List[str],
|
|
79
|
+
) -> Dict[str, Any]:
|
|
80
|
+
"""
|
|
81
|
+
Analyze sentiment of comments.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
comments: List of comment texts
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Sentiment analysis results
|
|
88
|
+
"""
|
|
89
|
+
positive = 0
|
|
90
|
+
negative = 0
|
|
91
|
+
neutral = 0
|
|
92
|
+
|
|
93
|
+
positive_words = ["love", "great", "awesome", "amazing", "helpful", "thanks", "best", "excellent"]
|
|
94
|
+
negative_words = ["hate", "bad", "terrible", "worst", "boring", "waste", "disappointed"]
|
|
95
|
+
|
|
96
|
+
for comment in comments:
|
|
97
|
+
comment_lower = comment.lower()
|
|
98
|
+
pos_count = sum(1 for w in positive_words if w in comment_lower)
|
|
99
|
+
neg_count = sum(1 for w in negative_words if w in comment_lower)
|
|
100
|
+
|
|
101
|
+
if pos_count > neg_count:
|
|
102
|
+
positive += 1
|
|
103
|
+
elif neg_count > pos_count:
|
|
104
|
+
negative += 1
|
|
105
|
+
else:
|
|
106
|
+
neutral += 1
|
|
107
|
+
|
|
108
|
+
total = len(comments)
|
|
109
|
+
|
|
110
|
+
return {
|
|
111
|
+
"sentiment": {
|
|
112
|
+
"positive": positive,
|
|
113
|
+
"negative": negative,
|
|
114
|
+
"neutral": neutral,
|
|
115
|
+
"positive_rate": round(positive / total * 100, 1) if total > 0 else 0,
|
|
116
|
+
"negative_rate": round(negative / total * 100, 1) if total > 0 else 0,
|
|
117
|
+
},
|
|
118
|
+
"total_analyzed": total,
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def mine_comments(
|
|
123
|
+
comments: List[str],
|
|
124
|
+
) -> Dict[str, Any]:
|
|
125
|
+
"""
|
|
126
|
+
Full comment mining pipeline.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
comments: List of comment texts
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
Complete mining results
|
|
133
|
+
"""
|
|
134
|
+
ideas = extract_ideas(comments)
|
|
135
|
+
sentiment = analyze_sentiment(comments)
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
"ideas": ideas.get("ideas", []),
|
|
139
|
+
"sentiment": sentiment.get("sentiment", {}),
|
|
140
|
+
"total_comments": len(comments),
|
|
141
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Commit Message Generator
|
|
2
|
+
|
|
3
|
+
Generate git commit messages from diffs
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install agent-recipes
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## CLI Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Basic usage
|
|
15
|
+
praison recipes run ai-commit-message-generator <input>
|
|
16
|
+
|
|
17
|
+
# With output directory
|
|
18
|
+
praison recipes run ai-commit-message-generator <input> --output ./output/
|
|
19
|
+
|
|
20
|
+
# Dry run (check dependencies only)
|
|
21
|
+
praison recipes run ai-commit-message-generator <input> --dry-run
|
|
22
|
+
|
|
23
|
+
# Show recipe info
|
|
24
|
+
praison recipes info ai-commit-message-generator
|
|
25
|
+
|
|
26
|
+
# Check dependencies
|
|
27
|
+
praison recipes doctor ai-commit-message-generator
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Python Usage
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from praisonaiagents import Agent
|
|
34
|
+
from agent_recipes import load_recipe
|
|
35
|
+
|
|
36
|
+
# Load and run recipe
|
|
37
|
+
recipe = load_recipe("ai-commit-message-generator")
|
|
38
|
+
result = recipe.run(input="<your-input>")
|
|
39
|
+
print(result)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Requirements
|
|
43
|
+
|
|
44
|
+
### Packages
|
|
45
|
+
- openai
|
|
46
|
+
|
|
47
|
+
### Environment Variables
|
|
48
|
+
- OPENAI_API_KEY
|
|
49
|
+
|
|
50
|
+
### External Tools
|
|
51
|
+
- git
|
|
52
|
+
|
|
53
|
+
## Tags
|
|
54
|
+
|
|
55
|
+
`code`, `git`, `commit`
|
|
56
|
+
|
|
57
|
+
## License
|
|
58
|
+
|
|
59
|
+
Apache-2.0
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: ai-commit-message-generator
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Generate git commit messages from diffs
|
|
4
|
+
author: praison
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
tags:
|
|
7
|
+
- code
|
|
8
|
+
- git
|
|
9
|
+
- commit
|
|
10
|
+
|
|
11
|
+
requires:
|
|
12
|
+
tools:
|
|
13
|
+
- repo_tool
|
|
14
|
+
- llm_tool
|
|
15
|
+
packages:
|
|
16
|
+
- openai
|
|
17
|
+
env:
|
|
18
|
+
- OPENAI_API_KEY
|
|
19
|
+
external:
|
|
20
|
+
- git
|
|
21
|
+
|
|
22
|
+
cli:
|
|
23
|
+
command: praison recipes run ai-commit-message-generator
|
|
24
|
+
examples:
|
|
25
|
+
- praison recipes run ai-commit-message-generator <input>
|
|
26
|
+
- praison recipes run ai-commit-message-generator <input> --output ./output/
|
|
27
|
+
- praison recipes run ai-commit-message-generator <input> --dry-run
|
|
28
|
+
|
|
29
|
+
safety:
|
|
30
|
+
dry_run_default: true
|
|
31
|
+
overwrites_files: true
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: ai-content-calendar
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: Generate content calendars with what/when/where scheduling
|
|
4
|
+
author: PraisonAI
|
|
5
|
+
tags:
|
|
6
|
+
- calendar
|
|
7
|
+
- scheduling
|
|
8
|
+
- planning
|
|
9
|
+
- content
|
|
10
|
+
|
|
11
|
+
config:
|
|
12
|
+
schedule_frequency: daily
|
|
13
|
+
platforms:
|
|
14
|
+
- youtube
|
|
15
|
+
- x
|
|
16
|
+
- linkedin
|
|
17
|
+
timezone: UTC
|
|
18
|
+
|
|
19
|
+
input:
|
|
20
|
+
type: object
|
|
21
|
+
properties:
|
|
22
|
+
topics:
|
|
23
|
+
type: array
|
|
24
|
+
duration_days:
|
|
25
|
+
type: integer
|
|
26
|
+
|
|
27
|
+
output:
|
|
28
|
+
type: object
|
|
29
|
+
properties:
|
|
30
|
+
calendar:
|
|
31
|
+
type: array
|
|
32
|
+
|
|
33
|
+
requires:
|
|
34
|
+
env:
|
|
35
|
+
- OPENAI_API_KEY
|
|
36
|
+
|
|
37
|
+
workflow:
|
|
38
|
+
agents:
|
|
39
|
+
- name: calendar_planner
|
|
40
|
+
role: Content Calendar Planner
|
|
41
|
+
tools:
|
|
42
|
+
- generate_calendar
|
|
43
|
+
- optimize_schedule
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AI Content Calendar Tools
|
|
3
|
+
|
|
4
|
+
Generate content calendars with:
|
|
5
|
+
- Optimal posting times
|
|
6
|
+
- Platform-specific scheduling
|
|
7
|
+
- Topic distribution
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
import logging
|
|
12
|
+
import os
|
|
13
|
+
from datetime import datetime, timedelta, timezone
|
|
14
|
+
from typing import Any, Dict, List, Optional
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def call_llm(prompt: str, max_tokens: int = 1000) -> str:
|
|
20
|
+
"""Call OpenAI API."""
|
|
21
|
+
import requests
|
|
22
|
+
|
|
23
|
+
api_key = os.environ.get("OPENAI_API_KEY")
|
|
24
|
+
if not api_key:
|
|
25
|
+
raise ValueError("OPENAI_API_KEY not set")
|
|
26
|
+
|
|
27
|
+
response = requests.post(
|
|
28
|
+
"https://api.openai.com/v1/chat/completions",
|
|
29
|
+
headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
|
|
30
|
+
json={"model": "gpt-4o-mini", "messages": [{"role": "user", "content": prompt}], "max_tokens": max_tokens},
|
|
31
|
+
timeout=60,
|
|
32
|
+
)
|
|
33
|
+
response.raise_for_status()
|
|
34
|
+
return response.json()["choices"][0]["message"]["content"]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def generate_calendar(
|
|
38
|
+
topics: List[str],
|
|
39
|
+
duration_days: int = 30,
|
|
40
|
+
platforms: Optional[List[str]] = None,
|
|
41
|
+
posts_per_day: int = 1,
|
|
42
|
+
) -> Dict[str, Any]:
|
|
43
|
+
"""
|
|
44
|
+
Generate a content calendar.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
topics: List of content topics
|
|
48
|
+
duration_days: Calendar duration in days
|
|
49
|
+
platforms: Target platforms
|
|
50
|
+
posts_per_day: Posts per day
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
Dictionary with calendar entries
|
|
54
|
+
"""
|
|
55
|
+
platforms = platforms or ["youtube", "x", "linkedin"]
|
|
56
|
+
|
|
57
|
+
# Optimal posting times by platform
|
|
58
|
+
optimal_times = {
|
|
59
|
+
"youtube": ["09:00", "12:00", "17:00"],
|
|
60
|
+
"x": ["08:00", "12:00", "17:00", "20:00"],
|
|
61
|
+
"linkedin": ["07:30", "12:00", "17:30"],
|
|
62
|
+
"instagram": ["11:00", "14:00", "19:00"],
|
|
63
|
+
"tiktok": ["07:00", "12:00", "19:00", "22:00"],
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
calendar = []
|
|
67
|
+
start_date = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0)
|
|
68
|
+
|
|
69
|
+
topic_idx = 0
|
|
70
|
+
|
|
71
|
+
for day in range(duration_days):
|
|
72
|
+
current_date = start_date + timedelta(days=day)
|
|
73
|
+
|
|
74
|
+
for post_num in range(posts_per_day):
|
|
75
|
+
# Rotate through topics
|
|
76
|
+
topic = topics[topic_idx % len(topics)]
|
|
77
|
+
topic_idx += 1
|
|
78
|
+
|
|
79
|
+
# Rotate through platforms
|
|
80
|
+
platform = platforms[post_num % len(platforms)]
|
|
81
|
+
|
|
82
|
+
# Get optimal time
|
|
83
|
+
times = optimal_times.get(platform, ["12:00"])
|
|
84
|
+
post_time = times[post_num % len(times)]
|
|
85
|
+
|
|
86
|
+
calendar.append({
|
|
87
|
+
"date": current_date.strftime("%Y-%m-%d"),
|
|
88
|
+
"time": post_time,
|
|
89
|
+
"platform": platform,
|
|
90
|
+
"topic": topic,
|
|
91
|
+
"status": "scheduled",
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
"calendar": calendar,
|
|
96
|
+
"stats": {
|
|
97
|
+
"total_posts": len(calendar),
|
|
98
|
+
"duration_days": duration_days,
|
|
99
|
+
"platforms": platforms,
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def optimize_schedule(
|
|
105
|
+
calendar: List[Dict[str, Any]],
|
|
106
|
+
avoid_weekends: bool = False,
|
|
107
|
+
peak_hours_only: bool = True,
|
|
108
|
+
) -> Dict[str, Any]:
|
|
109
|
+
"""
|
|
110
|
+
Optimize a content calendar schedule.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
calendar: Existing calendar entries
|
|
114
|
+
avoid_weekends: Skip weekend posts
|
|
115
|
+
peak_hours_only: Only schedule during peak hours
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
Optimized calendar
|
|
119
|
+
"""
|
|
120
|
+
optimized = []
|
|
121
|
+
|
|
122
|
+
for entry in calendar:
|
|
123
|
+
date_str = entry.get("date", "")
|
|
124
|
+
|
|
125
|
+
try:
|
|
126
|
+
date = datetime.strptime(date_str, "%Y-%m-%d")
|
|
127
|
+
|
|
128
|
+
# Skip weekends if requested
|
|
129
|
+
if avoid_weekends and date.weekday() >= 5:
|
|
130
|
+
continue
|
|
131
|
+
|
|
132
|
+
optimized.append(entry)
|
|
133
|
+
|
|
134
|
+
except ValueError:
|
|
135
|
+
optimized.append(entry)
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
"calendar": optimized,
|
|
139
|
+
"removed": len(calendar) - len(optimized),
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def export_calendar(
|
|
144
|
+
calendar: List[Dict[str, Any]],
|
|
145
|
+
output_path: str,
|
|
146
|
+
format: str = "json",
|
|
147
|
+
) -> Dict[str, Any]:
|
|
148
|
+
"""
|
|
149
|
+
Export calendar to file.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
calendar: Calendar entries
|
|
153
|
+
output_path: Output file path
|
|
154
|
+
format: Export format (json, csv, ical)
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
Export info
|
|
158
|
+
"""
|
|
159
|
+
if format == "json":
|
|
160
|
+
with open(output_path, "w") as f:
|
|
161
|
+
json.dump(calendar, f, indent=2)
|
|
162
|
+
elif format == "csv":
|
|
163
|
+
import csv
|
|
164
|
+
with open(output_path, "w", newline="") as f:
|
|
165
|
+
if calendar:
|
|
166
|
+
writer = csv.DictWriter(f, fieldnames=calendar[0].keys())
|
|
167
|
+
writer.writeheader()
|
|
168
|
+
writer.writerows(calendar)
|
|
169
|
+
|
|
170
|
+
return {"path": output_path, "format": format, "entries": len(calendar)}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: ai-context-enricher
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: Enrich news articles with background context, prior art, stakeholder analysis, and hype detection
|
|
4
|
+
author: PraisonAI
|
|
5
|
+
tags:
|
|
6
|
+
- news
|
|
7
|
+
- enrichment
|
|
8
|
+
- context
|
|
9
|
+
- analysis
|
|
10
|
+
|
|
11
|
+
config:
|
|
12
|
+
enrichment_types:
|
|
13
|
+
- background
|
|
14
|
+
- prior_art
|
|
15
|
+
- stakeholders
|
|
16
|
+
- hype_detection
|
|
17
|
+
max_context_length: 500
|
|
18
|
+
output_format: json
|
|
19
|
+
|
|
20
|
+
input:
|
|
21
|
+
type: object
|
|
22
|
+
properties:
|
|
23
|
+
articles:
|
|
24
|
+
type: array
|
|
25
|
+
description: Articles to enrich
|
|
26
|
+
|
|
27
|
+
output:
|
|
28
|
+
type: object
|
|
29
|
+
properties:
|
|
30
|
+
enriched_articles:
|
|
31
|
+
type: array
|
|
32
|
+
|
|
33
|
+
requires:
|
|
34
|
+
env:
|
|
35
|
+
- OPENAI_API_KEY
|
|
36
|
+
optional_env:
|
|
37
|
+
- TAVILY_API_KEY
|
|
38
|
+
|
|
39
|
+
workflow:
|
|
40
|
+
agents:
|
|
41
|
+
- name: enricher
|
|
42
|
+
role: Context Analyst
|
|
43
|
+
goal: Add rich context to news articles
|
|
44
|
+
tools:
|
|
45
|
+
- add_background
|
|
46
|
+
- find_prior_art
|
|
47
|
+
- analyze_stakeholders
|
|
48
|
+
- detect_hype
|