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.
Files changed (270) hide show
  1. agent_recipes/__init__.py +27 -0
  2. agent_recipes/recipe_runtime/__init__.py +28 -0
  3. agent_recipes/recipe_runtime/core.py +385 -0
  4. agent_recipes/templates/ai-ab-hook-tester/recipe.yaml +45 -0
  5. agent_recipes/templates/ai-ab-hook-tester/tools.py +169 -0
  6. agent_recipes/templates/ai-angle-generator/recipe.yaml +49 -0
  7. agent_recipes/templates/ai-angle-generator/tools.py +182 -0
  8. agent_recipes/templates/ai-api-doc-generator/README.md +59 -0
  9. agent_recipes/templates/ai-api-doc-generator/TEMPLATE.yaml +29 -0
  10. agent_recipes/templates/ai-api-tester/README.md +60 -0
  11. agent_recipes/templates/ai-api-tester/TEMPLATE.yaml +29 -0
  12. agent_recipes/templates/ai-audio-enhancer/README.md +59 -0
  13. agent_recipes/templates/ai-audio-enhancer/TEMPLATE.yaml +28 -0
  14. agent_recipes/templates/ai-audio-normalizer/README.md +13 -0
  15. agent_recipes/templates/ai-audio-normalizer/TEMPLATE.yaml +44 -0
  16. agent_recipes/templates/ai-audio-splitter/README.md +14 -0
  17. agent_recipes/templates/ai-audio-splitter/TEMPLATE.yaml +47 -0
  18. agent_recipes/templates/ai-background-music-generator/README.md +59 -0
  19. agent_recipes/templates/ai-background-music-generator/TEMPLATE.yaml +28 -0
  20. agent_recipes/templates/ai-background-remover/README.md +60 -0
  21. agent_recipes/templates/ai-background-remover/TEMPLATE.yaml +27 -0
  22. agent_recipes/templates/ai-barcode-scanner/README.md +60 -0
  23. agent_recipes/templates/ai-barcode-scanner/TEMPLATE.yaml +26 -0
  24. agent_recipes/templates/ai-blog-generator/README.md +59 -0
  25. agent_recipes/templates/ai-blog-generator/TEMPLATE.yaml +28 -0
  26. agent_recipes/templates/ai-brief-generator/recipe.yaml +52 -0
  27. agent_recipes/templates/ai-brief-generator/tools.py +231 -0
  28. agent_recipes/templates/ai-broll-builder/recipe.yaml +47 -0
  29. agent_recipes/templates/ai-broll-builder/tools.py +204 -0
  30. agent_recipes/templates/ai-calendar-scheduler/README.md +60 -0
  31. agent_recipes/templates/ai-calendar-scheduler/TEMPLATE.yaml +29 -0
  32. agent_recipes/templates/ai-changelog-generator/README.md +14 -0
  33. agent_recipes/templates/ai-changelog-generator/TEMPLATE.yaml +46 -0
  34. agent_recipes/templates/ai-chart-generator/README.md +61 -0
  35. agent_recipes/templates/ai-chart-generator/TEMPLATE.yaml +32 -0
  36. agent_recipes/templates/ai-code-documenter/README.md +12 -0
  37. agent_recipes/templates/ai-code-documenter/TEMPLATE.yaml +37 -0
  38. agent_recipes/templates/ai-code-refactorer/README.md +59 -0
  39. agent_recipes/templates/ai-code-refactorer/TEMPLATE.yaml +28 -0
  40. agent_recipes/templates/ai-code-reviewer/README.md +59 -0
  41. agent_recipes/templates/ai-code-reviewer/TEMPLATE.yaml +31 -0
  42. agent_recipes/templates/ai-color-palette-extractor/README.md +60 -0
  43. agent_recipes/templates/ai-color-palette-extractor/TEMPLATE.yaml +27 -0
  44. agent_recipes/templates/ai-comment-miner/recipe.yaml +40 -0
  45. agent_recipes/templates/ai-comment-miner/tools.py +141 -0
  46. agent_recipes/templates/ai-commit-message-generator/README.md +59 -0
  47. agent_recipes/templates/ai-commit-message-generator/TEMPLATE.yaml +31 -0
  48. agent_recipes/templates/ai-content-calendar/recipe.yaml +43 -0
  49. agent_recipes/templates/ai-content-calendar/tools.py +170 -0
  50. agent_recipes/templates/ai-context-enricher/recipe.yaml +48 -0
  51. agent_recipes/templates/ai-context-enricher/tools.py +258 -0
  52. agent_recipes/templates/ai-contract-analyzer/README.md +60 -0
  53. agent_recipes/templates/ai-contract-analyzer/TEMPLATE.yaml +34 -0
  54. agent_recipes/templates/ai-csv-cleaner/README.md +13 -0
  55. agent_recipes/templates/ai-csv-cleaner/TEMPLATE.yaml +45 -0
  56. agent_recipes/templates/ai-cta-generator/recipe.yaml +54 -0
  57. agent_recipes/templates/ai-cta-generator/tools.py +174 -0
  58. agent_recipes/templates/ai-daily-news-show/recipe.yaml +103 -0
  59. agent_recipes/templates/ai-daily-news-show/tools.py +308 -0
  60. agent_recipes/templates/ai-data-anonymizer/README.md +60 -0
  61. agent_recipes/templates/ai-data-anonymizer/TEMPLATE.yaml +31 -0
  62. agent_recipes/templates/ai-data-profiler/README.md +14 -0
  63. agent_recipes/templates/ai-data-profiler/TEMPLATE.yaml +42 -0
  64. agent_recipes/templates/ai-dependency-auditor/README.md +12 -0
  65. agent_recipes/templates/ai-dependency-auditor/TEMPLATE.yaml +37 -0
  66. agent_recipes/templates/ai-doc-translator/README.md +12 -0
  67. agent_recipes/templates/ai-doc-translator/TEMPLATE.yaml +41 -0
  68. agent_recipes/templates/ai-duplicate-finder/README.md +59 -0
  69. agent_recipes/templates/ai-duplicate-finder/TEMPLATE.yaml +28 -0
  70. agent_recipes/templates/ai-ebook-converter/README.md +60 -0
  71. agent_recipes/templates/ai-ebook-converter/TEMPLATE.yaml +27 -0
  72. agent_recipes/templates/ai-email-parser/README.md +59 -0
  73. agent_recipes/templates/ai-email-parser/TEMPLATE.yaml +29 -0
  74. agent_recipes/templates/ai-etl-pipeline/README.md +60 -0
  75. agent_recipes/templates/ai-etl-pipeline/TEMPLATE.yaml +30 -0
  76. agent_recipes/templates/ai-excel-formula-generator/README.md +59 -0
  77. agent_recipes/templates/ai-excel-formula-generator/TEMPLATE.yaml +28 -0
  78. agent_recipes/templates/ai-face-blur/README.md +60 -0
  79. agent_recipes/templates/ai-face-blur/TEMPLATE.yaml +28 -0
  80. agent_recipes/templates/ai-fact-checker/recipe.yaml +52 -0
  81. agent_recipes/templates/ai-fact-checker/tools.py +279 -0
  82. agent_recipes/templates/ai-faq-generator/README.md +59 -0
  83. agent_recipes/templates/ai-faq-generator/TEMPLATE.yaml +28 -0
  84. agent_recipes/templates/ai-file-organizer/README.md +59 -0
  85. agent_recipes/templates/ai-file-organizer/TEMPLATE.yaml +29 -0
  86. agent_recipes/templates/ai-folder-packager/README.md +15 -0
  87. agent_recipes/templates/ai-folder-packager/TEMPLATE.yaml +48 -0
  88. agent_recipes/templates/ai-form-filler/README.md +60 -0
  89. agent_recipes/templates/ai-form-filler/TEMPLATE.yaml +30 -0
  90. agent_recipes/templates/ai-hashtag-optimizer/recipe.yaml +45 -0
  91. agent_recipes/templates/ai-hashtag-optimizer/tools.py +134 -0
  92. agent_recipes/templates/ai-hook-generator/recipe.yaml +50 -0
  93. agent_recipes/templates/ai-hook-generator/tools.py +177 -0
  94. agent_recipes/templates/ai-image-captioner/README.md +59 -0
  95. agent_recipes/templates/ai-image-captioner/TEMPLATE.yaml +28 -0
  96. agent_recipes/templates/ai-image-cataloger/README.md +13 -0
  97. agent_recipes/templates/ai-image-cataloger/TEMPLATE.yaml +39 -0
  98. agent_recipes/templates/ai-image-optimizer/README.md +13 -0
  99. agent_recipes/templates/ai-image-optimizer/TEMPLATE.yaml +43 -0
  100. agent_recipes/templates/ai-image-resizer/README.md +12 -0
  101. agent_recipes/templates/ai-image-resizer/TEMPLATE.yaml +39 -0
  102. agent_recipes/templates/ai-image-tagger/README.md +59 -0
  103. agent_recipes/templates/ai-image-tagger/TEMPLATE.yaml +28 -0
  104. agent_recipes/templates/ai-image-upscaler/README.md +60 -0
  105. agent_recipes/templates/ai-image-upscaler/TEMPLATE.yaml +27 -0
  106. agent_recipes/templates/ai-invoice-processor/README.md +60 -0
  107. agent_recipes/templates/ai-invoice-processor/TEMPLATE.yaml +34 -0
  108. agent_recipes/templates/ai-json-to-csv/README.md +12 -0
  109. agent_recipes/templates/ai-json-to-csv/TEMPLATE.yaml +36 -0
  110. agent_recipes/templates/ai-log-analyzer/README.md +59 -0
  111. agent_recipes/templates/ai-log-analyzer/TEMPLATE.yaml +28 -0
  112. agent_recipes/templates/ai-markdown-to-pdf/README.md +12 -0
  113. agent_recipes/templates/ai-markdown-to-pdf/TEMPLATE.yaml +40 -0
  114. agent_recipes/templates/ai-meeting-summarizer/README.md +59 -0
  115. agent_recipes/templates/ai-meeting-summarizer/TEMPLATE.yaml +32 -0
  116. agent_recipes/templates/ai-meta-tag-generator/README.md +59 -0
  117. agent_recipes/templates/ai-meta-tag-generator/TEMPLATE.yaml +28 -0
  118. agent_recipes/templates/ai-news-capture-pack/recipe.yaml +42 -0
  119. agent_recipes/templates/ai-news-capture-pack/tools.py +150 -0
  120. agent_recipes/templates/ai-news-crawler/recipe.yaml +99 -0
  121. agent_recipes/templates/ai-news-crawler/tools.py +417 -0
  122. agent_recipes/templates/ai-news-deduper/recipe.yaml +47 -0
  123. agent_recipes/templates/ai-news-deduper/tools.py +235 -0
  124. agent_recipes/templates/ai-newsletter-generator/README.md +59 -0
  125. agent_recipes/templates/ai-newsletter-generator/TEMPLATE.yaml +28 -0
  126. agent_recipes/templates/ai-note-summarizer/README.md +59 -0
  127. agent_recipes/templates/ai-note-summarizer/TEMPLATE.yaml +28 -0
  128. agent_recipes/templates/ai-pdf-summarizer/README.md +12 -0
  129. agent_recipes/templates/ai-pdf-summarizer/TEMPLATE.yaml +40 -0
  130. agent_recipes/templates/ai-pdf-to-markdown/README.md +19 -0
  131. agent_recipes/templates/ai-pdf-to-markdown/TEMPLATE.yaml +63 -0
  132. agent_recipes/templates/ai-performance-analyzer/recipe.yaml +45 -0
  133. agent_recipes/templates/ai-performance-analyzer/tools.py +159 -0
  134. agent_recipes/templates/ai-podcast-cleaner/README.md +117 -0
  135. agent_recipes/templates/ai-podcast-cleaner/TEMPLATE.yaml +117 -0
  136. agent_recipes/templates/ai-podcast-cleaner/agents.yaml +59 -0
  137. agent_recipes/templates/ai-podcast-cleaner/workflow.yaml +77 -0
  138. agent_recipes/templates/ai-podcast-transcriber/README.md +59 -0
  139. agent_recipes/templates/ai-podcast-transcriber/TEMPLATE.yaml +32 -0
  140. agent_recipes/templates/ai-post-copy-generator/recipe.yaml +41 -0
  141. agent_recipes/templates/ai-post-copy-generator/tools.py +105 -0
  142. agent_recipes/templates/ai-product-description-generator/README.md +59 -0
  143. agent_recipes/templates/ai-product-description-generator/TEMPLATE.yaml +28 -0
  144. agent_recipes/templates/ai-publisher-pack/recipe.yaml +44 -0
  145. agent_recipes/templates/ai-publisher-pack/tools.py +252 -0
  146. agent_recipes/templates/ai-qr-code-generator/README.md +60 -0
  147. agent_recipes/templates/ai-qr-code-generator/TEMPLATE.yaml +26 -0
  148. agent_recipes/templates/ai-regex-generator/README.md +59 -0
  149. agent_recipes/templates/ai-regex-generator/TEMPLATE.yaml +28 -0
  150. agent_recipes/templates/ai-repo-readme/README.md +13 -0
  151. agent_recipes/templates/ai-repo-readme/TEMPLATE.yaml +42 -0
  152. agent_recipes/templates/ai-report-generator/README.md +61 -0
  153. agent_recipes/templates/ai-report-generator/TEMPLATE.yaml +32 -0
  154. agent_recipes/templates/ai-resume-parser/README.md +60 -0
  155. agent_recipes/templates/ai-resume-parser/TEMPLATE.yaml +33 -0
  156. agent_recipes/templates/ai-rss-aggregator/README.md +60 -0
  157. agent_recipes/templates/ai-rss-aggregator/TEMPLATE.yaml +30 -0
  158. agent_recipes/templates/ai-schema-generator/README.md +12 -0
  159. agent_recipes/templates/ai-schema-generator/TEMPLATE.yaml +34 -0
  160. agent_recipes/templates/ai-screen-recorder/recipe.yaml +43 -0
  161. agent_recipes/templates/ai-screen-recorder/tools.py +184 -0
  162. agent_recipes/templates/ai-screenshot-capture/recipe.yaml +45 -0
  163. agent_recipes/templates/ai-screenshot-capture/tools.py +231 -0
  164. agent_recipes/templates/ai-screenshot-ocr/README.md +12 -0
  165. agent_recipes/templates/ai-screenshot-ocr/TEMPLATE.yaml +37 -0
  166. agent_recipes/templates/ai-script-writer/recipe.yaml +58 -0
  167. agent_recipes/templates/ai-script-writer/tools.py +297 -0
  168. agent_recipes/templates/ai-sentiment-analyzer/README.md +59 -0
  169. agent_recipes/templates/ai-sentiment-analyzer/TEMPLATE.yaml +28 -0
  170. agent_recipes/templates/ai-seo-optimizer/README.md +59 -0
  171. agent_recipes/templates/ai-seo-optimizer/TEMPLATE.yaml +28 -0
  172. agent_recipes/templates/ai-signal-ranker/recipe.yaml +54 -0
  173. agent_recipes/templates/ai-signal-ranker/tools.py +256 -0
  174. agent_recipes/templates/ai-sitemap-generator/README.md +59 -0
  175. agent_recipes/templates/ai-sitemap-generator/TEMPLATE.yaml +26 -0
  176. agent_recipes/templates/ai-sitemap-scraper/README.md +13 -0
  177. agent_recipes/templates/ai-sitemap-scraper/TEMPLATE.yaml +41 -0
  178. agent_recipes/templates/ai-slide-generator/README.md +60 -0
  179. agent_recipes/templates/ai-slide-generator/TEMPLATE.yaml +29 -0
  180. agent_recipes/templates/ai-slide-to-notes/README.md +12 -0
  181. agent_recipes/templates/ai-slide-to-notes/TEMPLATE.yaml +37 -0
  182. agent_recipes/templates/ai-social-media-generator/README.md +59 -0
  183. agent_recipes/templates/ai-social-media-generator/TEMPLATE.yaml +28 -0
  184. agent_recipes/templates/ai-sql-generator/README.md +59 -0
  185. agent_recipes/templates/ai-sql-generator/TEMPLATE.yaml +28 -0
  186. agent_recipes/templates/ai-subtitle-generator/README.md +59 -0
  187. agent_recipes/templates/ai-subtitle-generator/TEMPLATE.yaml +31 -0
  188. agent_recipes/templates/ai-test-generator/README.md +59 -0
  189. agent_recipes/templates/ai-test-generator/TEMPLATE.yaml +28 -0
  190. agent_recipes/templates/ai-translation-batch/README.md +59 -0
  191. agent_recipes/templates/ai-translation-batch/TEMPLATE.yaml +28 -0
  192. agent_recipes/templates/ai-url-to-markdown/README.md +14 -0
  193. agent_recipes/templates/ai-url-to-markdown/TEMPLATE.yaml +44 -0
  194. agent_recipes/templates/ai-video-chapter-generator/README.md +59 -0
  195. agent_recipes/templates/ai-video-chapter-generator/TEMPLATE.yaml +32 -0
  196. agent_recipes/templates/ai-video-compressor/README.md +59 -0
  197. agent_recipes/templates/ai-video-compressor/TEMPLATE.yaml +28 -0
  198. agent_recipes/templates/ai-video-editor/README.md +254 -0
  199. agent_recipes/templates/ai-video-editor/TEMPLATE.yaml +139 -0
  200. agent_recipes/templates/ai-video-editor/agents.yaml +36 -0
  201. agent_recipes/templates/ai-video-editor/requirements.txt +8 -0
  202. agent_recipes/templates/ai-video-editor/scripts/run.sh +10 -0
  203. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__init__.py +45 -0
  204. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__main__.py +8 -0
  205. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/__init__.cpython-312.pyc +0 -0
  206. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/cli.cpython-312.pyc +0 -0
  207. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/config.cpython-312.pyc +0 -0
  208. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/ffmpeg_probe.cpython-312.pyc +0 -0
  209. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/heuristics.cpython-312.pyc +0 -0
  210. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/llm_plan.cpython-312.pyc +0 -0
  211. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/models.cpython-312.pyc +0 -0
  212. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/pipeline.cpython-312.pyc +0 -0
  213. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/render.cpython-312.pyc +0 -0
  214. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/timeline.cpython-312.pyc +0 -0
  215. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/transcribe.cpython-312.pyc +0 -0
  216. agent_recipes/templates/ai-video-editor/src/ai_video_editor/__pycache__/utils.cpython-312.pyc +0 -0
  217. agent_recipes/templates/ai-video-editor/src/ai_video_editor/cli.py +343 -0
  218. agent_recipes/templates/ai-video-editor/src/ai_video_editor/config.py +102 -0
  219. agent_recipes/templates/ai-video-editor/src/ai_video_editor/ffmpeg_probe.py +92 -0
  220. agent_recipes/templates/ai-video-editor/src/ai_video_editor/heuristics.py +119 -0
  221. agent_recipes/templates/ai-video-editor/src/ai_video_editor/llm_plan.py +277 -0
  222. agent_recipes/templates/ai-video-editor/src/ai_video_editor/models.py +343 -0
  223. agent_recipes/templates/ai-video-editor/src/ai_video_editor/pipeline.py +287 -0
  224. agent_recipes/templates/ai-video-editor/src/ai_video_editor/render.py +274 -0
  225. agent_recipes/templates/ai-video-editor/src/ai_video_editor/timeline.py +278 -0
  226. agent_recipes/templates/ai-video-editor/src/ai_video_editor/transcribe.py +233 -0
  227. agent_recipes/templates/ai-video-editor/src/ai_video_editor/utils.py +222 -0
  228. agent_recipes/templates/ai-video-editor/src/input.mov +0 -0
  229. agent_recipes/templates/ai-video-editor/src/out.mp4 +0 -0
  230. agent_recipes/templates/ai-video-editor/tests/test_heuristics.py +130 -0
  231. agent_recipes/templates/ai-video-editor/tests/test_models.py +152 -0
  232. agent_recipes/templates/ai-video-editor/tests/test_timeline.py +105 -0
  233. agent_recipes/templates/ai-video-editor/workflow.yaml +51 -0
  234. agent_recipes/templates/ai-video-highlight-extractor/README.md +60 -0
  235. agent_recipes/templates/ai-video-highlight-extractor/TEMPLATE.yaml +33 -0
  236. agent_recipes/templates/ai-video-merger/recipe.yaml +40 -0
  237. agent_recipes/templates/ai-video-merger/tools.py +172 -0
  238. agent_recipes/templates/ai-video-thumbnails/README.md +16 -0
  239. agent_recipes/templates/ai-video-thumbnails/TEMPLATE.yaml +53 -0
  240. agent_recipes/templates/ai-video-to-gif/README.md +14 -0
  241. agent_recipes/templates/ai-video-to-gif/TEMPLATE.yaml +64 -0
  242. agent_recipes/templates/ai-voice-cloner/README.md +59 -0
  243. agent_recipes/templates/ai-voice-cloner/TEMPLATE.yaml +31 -0
  244. agent_recipes/templates/ai-voiceover-generator/recipe.yaml +41 -0
  245. agent_recipes/templates/ai-voiceover-generator/tools.py +194 -0
  246. agent_recipes/templates/ai-watermark-adder/README.md +59 -0
  247. agent_recipes/templates/ai-watermark-adder/TEMPLATE.yaml +26 -0
  248. agent_recipes/templates/ai-watermark-remover/README.md +60 -0
  249. agent_recipes/templates/ai-watermark-remover/TEMPLATE.yaml +32 -0
  250. agent_recipes/templates/data-transformer/README.md +75 -0
  251. agent_recipes/templates/data-transformer/TEMPLATE.yaml +63 -0
  252. agent_recipes/templates/data-transformer/agents.yaml +70 -0
  253. agent_recipes/templates/data-transformer/workflow.yaml +92 -0
  254. agent_recipes/templates/shorts-generator/README.md +61 -0
  255. agent_recipes/templates/shorts-generator/TEMPLATE.yaml +65 -0
  256. agent_recipes/templates/shorts-generator/agents.yaml +66 -0
  257. agent_recipes/templates/shorts-generator/workflow.yaml +86 -0
  258. agent_recipes/templates/transcript-generator/README.md +103 -0
  259. agent_recipes/templates/transcript-generator/TEMPLATE.yaml +57 -0
  260. agent_recipes/templates/transcript-generator/agents.yaml +62 -0
  261. agent_recipes/templates/transcript-generator/workflow.yaml +82 -0
  262. agent_recipes/templates/video-editor/README.md +70 -0
  263. agent_recipes/templates/video-editor/TEMPLATE.yaml +55 -0
  264. agent_recipes/templates/video-editor/agents.yaml +68 -0
  265. agent_recipes/templates/video-editor/workflow.yaml +92 -0
  266. agent_recipes-0.0.5.dist-info/METADATA +145 -0
  267. agent_recipes-0.0.5.dist-info/RECORD +269 -0
  268. agent_recipes-0.0.5.dist-info/WHEEL +5 -0
  269. agent_recipes-0.0.5.dist-info/top_level.txt +1 -0
  270. /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,47 @@
1
+ name: ai-news-deduper
2
+ version: 1.0.0
3
+ description: Deduplicate news articles and cluster them by topic using semantic similarity
4
+ author: PraisonAI
5
+ tags:
6
+ - news
7
+ - deduplication
8
+ - clustering
9
+ - nlp
10
+
11
+ config:
12
+ similarity_threshold: 0.85
13
+ min_cluster_size: 2
14
+ clustering_method: semantic
15
+ output_format: json
16
+
17
+ input:
18
+ type: object
19
+ properties:
20
+ articles:
21
+ type: array
22
+ description: List of articles to deduplicate and cluster
23
+
24
+ output:
25
+ type: object
26
+ properties:
27
+ deduplicated_articles:
28
+ type: array
29
+ clusters:
30
+ type: array
31
+ stats:
32
+ type: object
33
+
34
+ requires:
35
+ env:
36
+ - OPENAI_API_KEY
37
+ packages:
38
+ - numpy
39
+
40
+ workflow:
41
+ agents:
42
+ - name: deduper
43
+ role: Content Deduplicator
44
+ goal: Remove duplicate articles and group similar content
45
+ tools:
46
+ - deduplicate_articles
47
+ - cluster_by_topic
@@ -0,0 +1,235 @@
1
+ """
2
+ AI News Deduper Tools
3
+
4
+ Tools for deduplicating and clustering news articles:
5
+ - Semantic similarity detection
6
+ - Topic clustering
7
+ - Duplicate removal
8
+ """
9
+
10
+ import hashlib
11
+ import logging
12
+ import os
13
+ from typing import Any, Dict, List, Optional
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+
18
+ def get_text_hash(text: str) -> str:
19
+ """Generate a hash for text content."""
20
+ return hashlib.md5(text.lower().strip().encode()).hexdigest()
21
+
22
+
23
+ def get_embedding(text: str) -> List[float]:
24
+ """Get embedding for text using OpenAI API."""
25
+ api_key = os.environ.get("OPENAI_API_KEY")
26
+ if not api_key:
27
+ raise ValueError("OPENAI_API_KEY not set")
28
+
29
+ import requests
30
+
31
+ response = requests.post(
32
+ "https://api.openai.com/v1/embeddings",
33
+ headers={
34
+ "Authorization": f"Bearer {api_key}",
35
+ "Content-Type": "application/json",
36
+ },
37
+ json={
38
+ "model": "text-embedding-3-small",
39
+ "input": text[:8000],
40
+ },
41
+ timeout=30,
42
+ )
43
+ response.raise_for_status()
44
+ return response.json()["data"][0]["embedding"]
45
+
46
+
47
+ def cosine_similarity(a: List[float], b: List[float]) -> float:
48
+ """Calculate cosine similarity between two vectors."""
49
+ import math
50
+ dot_product = sum(x * y for x, y in zip(a, b))
51
+ norm_a = math.sqrt(sum(x * x for x in a))
52
+ norm_b = math.sqrt(sum(x * x for x in b))
53
+ if norm_a == 0 or norm_b == 0:
54
+ return 0.0
55
+ return dot_product / (norm_a * norm_b)
56
+
57
+
58
+ def deduplicate_articles(
59
+ articles: List[Dict[str, Any]],
60
+ similarity_threshold: float = 0.85,
61
+ use_semantic: bool = True,
62
+ ) -> Dict[str, Any]:
63
+ """
64
+ Deduplicate articles based on title and content similarity.
65
+
66
+ Args:
67
+ articles: List of article dictionaries
68
+ similarity_threshold: Threshold for considering articles as duplicates
69
+ use_semantic: Use semantic similarity (requires API) or hash-based
70
+
71
+ Returns:
72
+ Dictionary with deduplicated articles and stats
73
+ """
74
+ if not articles:
75
+ return {"deduplicated": [], "removed": 0, "stats": {}}
76
+
77
+ seen_hashes = set()
78
+ deduplicated = []
79
+ removed_count = 0
80
+
81
+ if use_semantic:
82
+ # Get embeddings for all articles
83
+ embeddings = []
84
+ for article in articles:
85
+ text = f"{article.get('title', '')} {article.get('content', '')[:500]}"
86
+ try:
87
+ embedding = get_embedding(text)
88
+ embeddings.append(embedding)
89
+ except Exception as e:
90
+ logger.warning(f"Error getting embedding: {e}")
91
+ embeddings.append(None)
92
+
93
+ # Check for duplicates using cosine similarity
94
+ for i, article in enumerate(articles):
95
+ is_duplicate = False
96
+
97
+ if embeddings[i] is not None:
98
+ for j in range(len(deduplicated)):
99
+ if embeddings[j] is not None:
100
+ sim = cosine_similarity(embeddings[i], embeddings[j])
101
+ if sim >= similarity_threshold:
102
+ is_duplicate = True
103
+ break
104
+
105
+ if not is_duplicate:
106
+ deduplicated.append(article)
107
+ else:
108
+ removed_count += 1
109
+ else:
110
+ # Hash-based deduplication
111
+ for article in articles:
112
+ title_hash = get_text_hash(article.get("title", ""))
113
+ if title_hash not in seen_hashes:
114
+ seen_hashes.add(title_hash)
115
+ deduplicated.append(article)
116
+ else:
117
+ removed_count += 1
118
+
119
+ return {
120
+ "deduplicated": deduplicated,
121
+ "removed": removed_count,
122
+ "stats": {
123
+ "original_count": len(articles),
124
+ "final_count": len(deduplicated),
125
+ "duplicate_rate": removed_count / len(articles) if articles else 0,
126
+ }
127
+ }
128
+
129
+
130
+ def cluster_by_topic(
131
+ articles: List[Dict[str, Any]],
132
+ min_cluster_size: int = 2,
133
+ num_clusters: Optional[int] = None,
134
+ ) -> Dict[str, Any]:
135
+ """
136
+ Cluster articles by topic using semantic similarity.
137
+
138
+ Args:
139
+ articles: List of article dictionaries
140
+ min_cluster_size: Minimum articles per cluster
141
+ num_clusters: Number of clusters (auto-detected if None)
142
+
143
+ Returns:
144
+ Dictionary with clusters and unclustered articles
145
+ """
146
+ if len(articles) < 2:
147
+ return {"clusters": [], "unclustered": articles}
148
+
149
+ # Get embeddings
150
+ embeddings = []
151
+ valid_articles = []
152
+
153
+ for article in articles:
154
+ text = f"{article.get('title', '')} {article.get('content', '')[:500]}"
155
+ try:
156
+ embedding = get_embedding(text)
157
+ embeddings.append(embedding)
158
+ valid_articles.append(article)
159
+ except Exception as e:
160
+ logger.warning(f"Error getting embedding: {e}")
161
+
162
+ if len(embeddings) < 2:
163
+ return {"clusters": [], "unclustered": articles}
164
+
165
+ # Simple clustering: group articles with high similarity
166
+ clusters = []
167
+ used = set()
168
+
169
+ for i in range(len(valid_articles)):
170
+ if i in used:
171
+ continue
172
+
173
+ cluster = [valid_articles[i]]
174
+ used.add(i)
175
+
176
+ for j in range(i + 1, len(valid_articles)):
177
+ if j in used:
178
+ continue
179
+
180
+ sim = cosine_similarity(embeddings[i], embeddings[j])
181
+ if sim >= 0.7: # Cluster threshold
182
+ cluster.append(valid_articles[j])
183
+ used.add(j)
184
+
185
+ if len(cluster) >= min_cluster_size:
186
+ # Generate cluster topic from titles
187
+ titles = [a.get("title", "") for a in cluster]
188
+ clusters.append({
189
+ "topic": _extract_common_topic(titles),
190
+ "articles": cluster,
191
+ "size": len(cluster),
192
+ })
193
+
194
+ # Collect unclustered articles
195
+ unclustered = [a for i, a in enumerate(valid_articles) if i not in used]
196
+
197
+ return {
198
+ "clusters": clusters,
199
+ "unclustered": unclustered,
200
+ "stats": {
201
+ "num_clusters": len(clusters),
202
+ "clustered_articles": sum(c["size"] for c in clusters),
203
+ "unclustered_articles": len(unclustered),
204
+ }
205
+ }
206
+
207
+
208
+ def _extract_common_topic(titles: List[str]) -> str:
209
+ """Extract common topic from a list of titles."""
210
+ if not titles:
211
+ return "Unknown Topic"
212
+
213
+ # Simple approach: find common words
214
+ word_counts = {}
215
+ stop_words = {"the", "a", "an", "is", "are", "was", "were", "be", "been", "being",
216
+ "have", "has", "had", "do", "does", "did", "will", "would", "could",
217
+ "should", "may", "might", "must", "shall", "can", "to", "of", "in",
218
+ "for", "on", "with", "at", "by", "from", "as", "into", "through",
219
+ "and", "or", "but", "if", "then", "else", "when", "where", "why",
220
+ "how", "all", "each", "every", "both", "few", "more", "most", "other",
221
+ "some", "such", "no", "nor", "not", "only", "own", "same", "so",
222
+ "than", "too", "very", "just", "also", "now", "new", "first", "last"}
223
+
224
+ for title in titles:
225
+ words = title.lower().split()
226
+ for word in words:
227
+ word = word.strip(".,!?:;\"'()[]{}").lower()
228
+ if len(word) > 2 and word not in stop_words:
229
+ word_counts[word] = word_counts.get(word, 0) + 1
230
+
231
+ # Get top words
232
+ sorted_words = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)
233
+ top_words = [w[0].title() for w in sorted_words[:3]]
234
+
235
+ return " ".join(top_words) if top_words else "Mixed Topics"
@@ -0,0 +1,59 @@
1
+ # Newsletter Generator
2
+
3
+ Generate email newsletters from content
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-newsletter-generator <input>
16
+
17
+ # With output directory
18
+ praison recipes run ai-newsletter-generator <input> --output ./output/
19
+
20
+ # Dry run (check dependencies only)
21
+ praison recipes run ai-newsletter-generator <input> --dry-run
22
+
23
+ # Show recipe info
24
+ praison recipes info ai-newsletter-generator
25
+
26
+ # Check dependencies
27
+ praison recipes doctor ai-newsletter-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-newsletter-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
+ - None
52
+
53
+ ## Tags
54
+
55
+ `web`, `newsletter`, `email`
56
+
57
+ ## License
58
+
59
+ Apache-2.0
@@ -0,0 +1,28 @@
1
+ name: ai-newsletter-generator
2
+ version: "1.0.0"
3
+ description: Generate email newsletters from content
4
+ author: praison
5
+ license: Apache-2.0
6
+ tags:
7
+ - web
8
+ - newsletter
9
+ - email
10
+
11
+ requires:
12
+ tools:
13
+ - llm_tool
14
+ packages:
15
+ - openai
16
+ env:
17
+ - OPENAI_API_KEY
18
+
19
+ cli:
20
+ command: praison recipes run ai-newsletter-generator
21
+ examples:
22
+ - praison recipes run ai-newsletter-generator <input>
23
+ - praison recipes run ai-newsletter-generator <input> --output ./output/
24
+ - praison recipes run ai-newsletter-generator <input> --dry-run
25
+
26
+ safety:
27
+ dry_run_default: false
28
+ overwrites_files: true
@@ -0,0 +1,59 @@
1
+ # Note Summarizer
2
+
3
+ Summarize notes and documents
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-note-summarizer <input>
16
+
17
+ # With output directory
18
+ praison recipes run ai-note-summarizer <input> --output ./output/
19
+
20
+ # Dry run (check dependencies only)
21
+ praison recipes run ai-note-summarizer <input> --dry-run
22
+
23
+ # Show recipe info
24
+ praison recipes info ai-note-summarizer
25
+
26
+ # Check dependencies
27
+ praison recipes doctor ai-note-summarizer
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-note-summarizer")
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
+ - None
52
+
53
+ ## Tags
54
+
55
+ `productivity`, `notes`, `summary`
56
+
57
+ ## License
58
+
59
+ Apache-2.0
@@ -0,0 +1,28 @@
1
+ name: ai-note-summarizer
2
+ version: "1.0.0"
3
+ description: Summarize notes and documents
4
+ author: praison
5
+ license: Apache-2.0
6
+ tags:
7
+ - productivity
8
+ - notes
9
+ - summary
10
+
11
+ requires:
12
+ tools:
13
+ - llm_tool
14
+ packages:
15
+ - openai
16
+ env:
17
+ - OPENAI_API_KEY
18
+
19
+ cli:
20
+ command: praison recipes run ai-note-summarizer
21
+ examples:
22
+ - praison recipes run ai-note-summarizer <input>
23
+ - praison recipes run ai-note-summarizer <input> --output ./output/
24
+ - praison recipes run ai-note-summarizer <input> --dry-run
25
+
26
+ safety:
27
+ dry_run_default: false
28
+ overwrites_files: true
@@ -0,0 +1,12 @@
1
+ # AI PDF Summarizer
2
+
3
+ Summarize PDF documents with key points extraction.
4
+
5
+ ## Usage
6
+ ```bash
7
+ praison run ai-pdf-summarizer document.pdf
8
+ ```
9
+
10
+ ## Output
11
+ - `summary.md` - Document summary
12
+ - `key-points.json` - Extracted key points
@@ -0,0 +1,40 @@
1
+ name: ai-pdf-summarizer
2
+ version: "1.0.0"
3
+ description: Summarize PDF documents with key points extraction.
4
+ author: praisonai
5
+ license: Apache-2.0
6
+ tags: [pdf, summary, extraction, analysis]
7
+
8
+ requires:
9
+ tools: [shell_tool]
10
+ packages: [praisonai-tools]
11
+ env: [OPENAI_API_KEY]
12
+ external:
13
+ - name: pdftotext
14
+ check: "pdftotext -v"
15
+
16
+ config:
17
+ input:
18
+ type: string
19
+ required: true
20
+ output:
21
+ type: string
22
+
23
+ cli:
24
+ command: ai-pdf-summarizer
25
+ args:
26
+ - name: input
27
+ positional: true
28
+ required: true
29
+ - name: --output
30
+ short: -o
31
+ examples:
32
+ - "praison run ai-pdf-summarizer document.pdf"
33
+
34
+ outputs:
35
+ - name: summary.md
36
+ type: file
37
+ - name: key-points.json
38
+ type: file
39
+ - name: run.json
40
+ type: file
@@ -0,0 +1,19 @@
1
+ # AI PDF to Markdown
2
+
3
+ Convert PDF documents to clean Markdown format with extracted images.
4
+
5
+ ## Input/Output
6
+ - **Input**: PDF file
7
+ - **Output**: `document.md`, `images/`, `metadata.json`, `run.json`
8
+
9
+ ## Requirements
10
+ - poppler-utils (pdftotext, pdfimages)
11
+ - OpenAI API Key (for AI cleanup)
12
+
13
+ ## Usage
14
+ ```bash
15
+ praison run ai-pdf-to-markdown document.pdf
16
+ praison run ai-pdf-to-markdown document.pdf --output ./docs/
17
+ praison run ai-pdf-to-markdown document.pdf --ocr # For scanned PDFs
18
+ praison run ai-pdf-to-markdown document.pdf --no-images
19
+ ```
@@ -0,0 +1,63 @@
1
+ name: ai-pdf-to-markdown
2
+ version: "1.0.0"
3
+ description: |
4
+ Convert PDF documents to clean Markdown format with extracted images.
5
+ Uses AI to clean up OCR artifacts and structure content properly.
6
+
7
+ author: praisonai
8
+ license: Apache-2.0
9
+ tags: [pdf, markdown, conversion, document, ocr]
10
+
11
+ requires:
12
+ tools: [shell_tool]
13
+ packages: [praisonai-tools]
14
+ env: [OPENAI_API_KEY]
15
+ external:
16
+ - name: pdftotext
17
+ check: "pdftotext -v"
18
+ install_hint: "brew install poppler (macOS) or apt install poppler-utils (Linux)"
19
+
20
+ config:
21
+ input:
22
+ type: string
23
+ required: true
24
+ description: Input PDF file path
25
+ output:
26
+ type: string
27
+ description: Output directory
28
+ extract_images:
29
+ type: boolean
30
+ default: true
31
+ use_ocr:
32
+ type: boolean
33
+ default: false
34
+
35
+ cli:
36
+ command: ai-pdf-to-markdown
37
+ args:
38
+ - name: input
39
+ positional: true
40
+ required: true
41
+ - name: --output
42
+ short: -o
43
+ - name: --no-images
44
+ flag: true
45
+ - name: --ocr
46
+ flag: true
47
+ - name: --dry-run
48
+ flag: true
49
+ - name: --force
50
+ flag: true
51
+ examples:
52
+ - "praison run ai-pdf-to-markdown document.pdf"
53
+ - "praison run ai-pdf-to-markdown document.pdf --output ./docs/"
54
+
55
+ outputs:
56
+ - name: document.md
57
+ type: file
58
+ - name: images/
59
+ type: directory
60
+ - name: metadata.json
61
+ type: file
62
+ - name: run.json
63
+ type: file
@@ -0,0 +1,45 @@
1
+ name: ai-performance-analyzer
2
+ version: 1.0.0
3
+ description: Analyze content performance metrics from platform JSON exports
4
+ author: PraisonAI
5
+ tags:
6
+ - analytics
7
+ - performance
8
+ - metrics
9
+ - insights
10
+
11
+ config:
12
+ metrics:
13
+ - views
14
+ - engagement
15
+ - retention
16
+ - growth
17
+ comparison_period: 30
18
+
19
+ input:
20
+ type: object
21
+ properties:
22
+ metrics_json:
23
+ type: object
24
+ platform:
25
+ type: string
26
+
27
+ output:
28
+ type: object
29
+ properties:
30
+ analysis:
31
+ type: object
32
+ recommendations:
33
+ type: array
34
+
35
+ requires:
36
+ env:
37
+ - OPENAI_API_KEY
38
+
39
+ workflow:
40
+ agents:
41
+ - name: analyzer
42
+ role: Performance Analyst
43
+ tools:
44
+ - analyze_metrics
45
+ - generate_insights