hive-skills 0.1.0

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 (238) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +235 -0
  3. package/assets/LICENSE +32 -0
  4. package/assets/THIRD_PARTY_NOTICES.md +72 -0
  5. package/assets/manifest.json +1290 -0
  6. package/assets/skills/authored/code-review/composable/BUNDLE.md +192 -0
  7. package/assets/skills/authored/code-review/composable/INDEX.md +13 -0
  8. package/assets/skills/authored/code-review/composable/VERSION +1 -0
  9. package/assets/skills/authored/code-review/composable/mini/01-review-method.md +34 -0
  10. package/assets/skills/authored/code-review/composable/mini/02-security-review.md +20 -0
  11. package/assets/skills/authored/code-review/composable/mini/03-correctness-bugs.md +19 -0
  12. package/assets/skills/authored/code-review/composable/mini/04-concurrency.md +16 -0
  13. package/assets/skills/authored/code-review/composable/mini/05-error-handling.md +12 -0
  14. package/assets/skills/authored/code-review/composable/mini/06-performance.md +11 -0
  15. package/assets/skills/authored/code-review/composable/mini/07-api-design.md +20 -0
  16. package/assets/skills/authored/code-review/composable/mini/08-missing-tests.md +25 -0
  17. package/assets/skills/authored/code-review/composable/mini/09-refactoring-and-communication.md +32 -0
  18. package/assets/skills/authored/data-analysis/composable/BUNDLE.md +186 -0
  19. package/assets/skills/authored/data-analysis/composable/INDEX.md +13 -0
  20. package/assets/skills/authored/data-analysis/composable/VERSION +1 -0
  21. package/assets/skills/authored/data-analysis/composable/mini/01-data-quality-profiling.md +26 -0
  22. package/assets/skills/authored/data-analysis/composable/mini/02-aggregation-pitfalls.md +21 -0
  23. package/assets/skills/authored/data-analysis/composable/mini/03-time-series.md +19 -0
  24. package/assets/skills/authored/data-analysis/composable/mini/04-segmentation.md +23 -0
  25. package/assets/skills/authored/data-analysis/composable/mini/05-discount-pricing.md +17 -0
  26. package/assets/skills/authored/data-analysis/composable/mini/06-insight-generation.md +25 -0
  27. package/assets/skills/authored/data-analysis/composable/mini/07-executive-writing.md +26 -0
  28. package/assets/skills/authored/data-analysis/composable/mini/08-recommendations.md +20 -0
  29. package/assets/skills/authored/data-analysis/composable/mini/09-reproducibility-assumptions.md +20 -0
  30. package/assets/skills/authored/financial-analysis/composable/BUNDLE.md +1293 -0
  31. package/assets/skills/authored/financial-analysis/composable/INDEX.md +17 -0
  32. package/assets/skills/authored/financial-analysis/composable/VERSION +1 -0
  33. package/assets/skills/authored/financial-analysis/composable/mini/00-core.md +69 -0
  34. package/assets/skills/authored/financial-analysis/composable/mini/01-profitability-efficiency-ratios.md +173 -0
  35. package/assets/skills/authored/financial-analysis/composable/mini/02-liquidity-leverage-ratios.md +120 -0
  36. package/assets/skills/authored/financial-analysis/composable/mini/03-valuation-ratios-interpretation.md +107 -0
  37. package/assets/skills/authored/financial-analysis/composable/mini/04-dcf-projection-wacc.md +122 -0
  38. package/assets/skills/authored/financial-analysis/composable/mini/05-dcf-terminal-value-sensitivity.md +75 -0
  39. package/assets/skills/authored/financial-analysis/composable/mini/06-comparables-precedents.md +78 -0
  40. package/assets/skills/authored/financial-analysis/composable/mini/07-budget-variance-analysis.md +47 -0
  41. package/assets/skills/authored/financial-analysis/composable/mini/08-driver-based-forecasting-scenarios.md +111 -0
  42. package/assets/skills/authored/financial-analysis/composable/mini/09-rolling-forecasts-accuracy.md +114 -0
  43. package/assets/skills/authored/financial-analysis/composable/mini/10-reporting-exec-summary.md +58 -0
  44. package/assets/skills/authored/financial-analysis/composable/mini/11-industry-adaptations.md +130 -0
  45. package/assets/skills/authored/financial-analysis/composable/mini/12-toolkit-scripts-io.md +102 -0
  46. package/assets/skills/authored/python-api/composable/BUNDLE.md +389 -0
  47. package/assets/skills/authored/python-api/composable/INDEX.md +13 -0
  48. package/assets/skills/authored/python-api/composable/VERSION +1 -0
  49. package/assets/skills/authored/python-api/composable/mini/01-project-structure.md +44 -0
  50. package/assets/skills/authored/python-api/composable/mini/02-routing-and-app.md +38 -0
  51. package/assets/skills/authored/python-api/composable/mini/03-pydantic-models.md +45 -0
  52. package/assets/skills/authored/python-api/composable/mini/04-validation-and-errors.md +59 -0
  53. package/assets/skills/authored/python-api/composable/mini/05-dependencies-and-auth.md +60 -0
  54. package/assets/skills/authored/python-api/composable/mini/06-pagination-filtering.md +44 -0
  55. package/assets/skills/authored/python-api/composable/mini/07-async-performance.md +30 -0
  56. package/assets/skills/authored/python-api/composable/mini/08-testing.md +45 -0
  57. package/assets/skills/authored/python-api/composable/mini/09-middleware-observability.md +29 -0
  58. package/assets/skills/authored/tech-writing/composable/BUNDLE.md +220 -0
  59. package/assets/skills/authored/tech-writing/composable/INDEX.md +12 -0
  60. package/assets/skills/authored/tech-writing/composable/VERSION +1 -0
  61. package/assets/skills/authored/tech-writing/composable/mini/01-audience-analysis.md +26 -0
  62. package/assets/skills/authored/tech-writing/composable/mini/02-document-types.md +27 -0
  63. package/assets/skills/authored/tech-writing/composable/mini/03-readme-quickstart-changelog.md +22 -0
  64. package/assets/skills/authored/tech-writing/composable/mini/04-information-architecture.md +21 -0
  65. package/assets/skills/authored/tech-writing/composable/mini/05-style-clarity.md +29 -0
  66. package/assets/skills/authored/tech-writing/composable/mini/06-breaking-changes-migrations.md +33 -0
  67. package/assets/skills/authored/tech-writing/composable/mini/07-troubleshooting-security.md +30 -0
  68. package/assets/skills/authored/tech-writing/composable/mini/08-faq-voice-tone.md +32 -0
  69. package/assets/skills/converted/claude-api/composable/BUNDLE.md +14996 -0
  70. package/assets/skills/converted/claude-api/composable/INDEX.md +98 -0
  71. package/assets/skills/converted/claude-api/composable/VERSION +1 -0
  72. package/assets/skills/converted/claude-api/composable/mini/00-core.md +235 -0
  73. package/assets/skills/converted/claude-api/composable/mini/01-model-api-quick-reference.md +258 -0
  74. package/assets/skills/converted/claude-api/composable/mini/02-common-pitfalls.md +42 -0
  75. package/assets/skills/converted/claude-api/composable/mini/10-models.md +135 -0
  76. package/assets/skills/converted/claude-api/composable/mini/11-platform-availability.md +96 -0
  77. package/assets/skills/converted/claude-api/composable/mini/12-claude-platform-on-aws.md +59 -0
  78. package/assets/skills/converted/claude-api/composable/mini/13-live-sources.md +143 -0
  79. package/assets/skills/converted/claude-api/composable/mini/14-error-codes.md +256 -0
  80. package/assets/skills/converted/claude-api/composable/mini/15-prompt-caching.md +223 -0
  81. package/assets/skills/converted/claude-api/composable/mini/16-token-counting.md +56 -0
  82. package/assets/skills/converted/claude-api/composable/mini/17-tool-use-concepts.md +444 -0
  83. package/assets/skills/converted/claude-api/composable/mini/18-agent-design.md +101 -0
  84. package/assets/skills/converted/claude-api/composable/mini/19-anthropic-cli.md +246 -0
  85. package/assets/skills/converted/claude-api/composable/mini/20-model-migration.md +1301 -0
  86. package/assets/skills/converted/claude-api/composable/mini/30-managed-agents-overview.md +71 -0
  87. package/assets/skills/converted/claude-api/composable/mini/31-managed-agents-core.md +278 -0
  88. package/assets/skills/converted/claude-api/composable/mini/32-managed-agents-environments.md +219 -0
  89. package/assets/skills/converted/claude-api/composable/mini/33-managed-agents-tools.md +366 -0
  90. package/assets/skills/converted/claude-api/composable/mini/34-managed-agents-events.md +252 -0
  91. package/assets/skills/converted/claude-api/composable/mini/35-managed-agents-outcomes.md +106 -0
  92. package/assets/skills/converted/claude-api/composable/mini/36-managed-agents-multiagent.md +101 -0
  93. package/assets/skills/converted/claude-api/composable/mini/37-managed-agents-webhooks.md +123 -0
  94. package/assets/skills/converted/claude-api/composable/mini/38-managed-agents-memory.md +197 -0
  95. package/assets/skills/converted/claude-api/composable/mini/39-managed-agents-scheduled-deployments.md +146 -0
  96. package/assets/skills/converted/claude-api/composable/mini/40-managed-agents-client-patterns.md +211 -0
  97. package/assets/skills/converted/claude-api/composable/mini/41-managed-agents-onboarding.md +82 -0
  98. package/assets/skills/converted/claude-api/composable/mini/42-managed-agents-api-reference.md +441 -0
  99. package/assets/skills/converted/claude-api/composable/mini/43-managed-agents-self-hosted-sandboxes.md +174 -0
  100. package/assets/skills/converted/claude-api/composable/mini/50-python-readme.md +564 -0
  101. package/assets/skills/converted/claude-api/composable/mini/51-python-tool-use.md +590 -0
  102. package/assets/skills/converted/claude-api/composable/mini/52-python-streaming-batches-files.md +549 -0
  103. package/assets/skills/converted/claude-api/composable/mini/53-python-managed-agents.md +335 -0
  104. package/assets/skills/converted/claude-api/composable/mini/55-typescript-readme.md +404 -0
  105. package/assets/skills/converted/claude-api/composable/mini/56-typescript-tool-use.md +548 -0
  106. package/assets/skills/converted/claude-api/composable/mini/57-typescript-streaming-batches-files.md +384 -0
  107. package/assets/skills/converted/claude-api/composable/mini/58-typescript-managed-agents.md +358 -0
  108. package/assets/skills/converted/claude-api/composable/mini/60-csharp-readme.md +361 -0
  109. package/assets/skills/converted/claude-api/composable/mini/61-csharp-tool-use.md +163 -0
  110. package/assets/skills/converted/claude-api/composable/mini/62-csharp-streaming-batches-files.md +64 -0
  111. package/assets/skills/converted/claude-api/composable/mini/65-go-readme.md +185 -0
  112. package/assets/skills/converted/claude-api/composable/mini/66-go-tool-use.md +219 -0
  113. package/assets/skills/converted/claude-api/composable/mini/67-go-streaming-files.md +63 -0
  114. package/assets/skills/converted/claude-api/composable/mini/68-go-managed-agents.md +564 -0
  115. package/assets/skills/converted/claude-api/composable/mini/70-java-readme.md +237 -0
  116. package/assets/skills/converted/claude-api/composable/mini/71-java-tool-use.md +227 -0
  117. package/assets/skills/converted/claude-api/composable/mini/72-java-streaming-files.md +49 -0
  118. package/assets/skills/converted/claude-api/composable/mini/73-java-managed-agents.md +443 -0
  119. package/assets/skills/converted/claude-api/composable/mini/75-php-readme.md +173 -0
  120. package/assets/skills/converted/claude-api/composable/mini/76-php-tool-use.md +252 -0
  121. package/assets/skills/converted/claude-api/composable/mini/77-php-streaming-batches-files.md +53 -0
  122. package/assets/skills/converted/claude-api/composable/mini/78-php-managed-agents.md +443 -0
  123. package/assets/skills/converted/claude-api/composable/mini/80-ruby-readme.md +133 -0
  124. package/assets/skills/converted/claude-api/composable/mini/81-ruby-tool-use-streaming.md +56 -0
  125. package/assets/skills/converted/claude-api/composable/mini/82-ruby-managed-agents.md +394 -0
  126. package/assets/skills/converted/claude-api/composable/mini/85-curl-examples.md +255 -0
  127. package/assets/skills/converted/claude-api/composable/mini/86-curl-managed-agents.md +340 -0
  128. package/assets/skills/converted/claude-api/composable/presets/csharp.md +1151 -0
  129. package/assets/skills/converted/claude-api/composable/presets/curl.md +1154 -0
  130. package/assets/skills/converted/claude-api/composable/presets/go.md +1598 -0
  131. package/assets/skills/converted/claude-api/composable/presets/java.md +1523 -0
  132. package/assets/skills/converted/claude-api/composable/presets/php.md +1488 -0
  133. package/assets/skills/converted/claude-api/composable/presets/python.md +2605 -0
  134. package/assets/skills/converted/claude-api/composable/presets/ruby.md +1146 -0
  135. package/assets/skills/converted/claude-api/composable/presets/shared.md +6478 -0
  136. package/assets/skills/converted/claude-api/composable/presets/typescript.md +2261 -0
  137. package/assets/skills/converted/docx/composable/BUNDLE.md +617 -0
  138. package/assets/skills/converted/docx/composable/INDEX.md +12 -0
  139. package/assets/skills/converted/docx/composable/VERSION +1 -0
  140. package/assets/skills/converted/docx/composable/mini/00-core.md +26 -0
  141. package/assets/skills/converted/docx/composable/mini/01-reading-converting.md +36 -0
  142. package/assets/skills/converted/docx/composable/mini/02-creating-setup-layout.md +85 -0
  143. package/assets/skills/converted/docx/composable/mini/03-creating-elements.md +257 -0
  144. package/assets/skills/converted/docx/composable/mini/04-editing-existing.md +57 -0
  145. package/assets/skills/converted/docx/composable/mini/05-xml-reference.md +128 -0
  146. package/assets/skills/converted/internal-comms/composable/BUNDLE.md +220 -0
  147. package/assets/skills/converted/internal-comms/composable/INDEX.md +11 -0
  148. package/assets/skills/converted/internal-comms/composable/VERSION +1 -0
  149. package/assets/skills/converted/internal-comms/composable/mini/00-core.md +30 -0
  150. package/assets/skills/converted/internal-comms/composable/mini/01-3p-updates.md +49 -0
  151. package/assets/skills/converted/internal-comms/composable/mini/02-company-newsletter.md +67 -0
  152. package/assets/skills/converted/internal-comms/composable/mini/03-faq-answers.md +32 -0
  153. package/assets/skills/converted/internal-comms/composable/mini/04-general-comms.md +18 -0
  154. package/assets/skills/converted/mcp-builder/composable/BUNDLE.md +2460 -0
  155. package/assets/skills/converted/mcp-builder/composable/INDEX.md +23 -0
  156. package/assets/skills/converted/mcp-builder/composable/VERSION +1 -0
  157. package/assets/skills/converted/mcp-builder/composable/mini/00-core.md +43 -0
  158. package/assets/skills/converted/mcp-builder/composable/mini/01-workflow-research-planning.md +54 -0
  159. package/assets/skills/converted/mcp-builder/composable/mini/02-implementation-process.md +78 -0
  160. package/assets/skills/converted/mcp-builder/composable/mini/03-naming-conventions.md +33 -0
  161. package/assets/skills/converted/mcp-builder/composable/mini/04-response-formats.md +21 -0
  162. package/assets/skills/converted/mcp-builder/composable/mini/05-pagination.md +24 -0
  163. package/assets/skills/converted/mcp-builder/composable/mini/06-transport.md +47 -0
  164. package/assets/skills/converted/mcp-builder/composable/mini/07-annotations.md +20 -0
  165. package/assets/skills/converted/mcp-builder/composable/mini/08-security.md +35 -0
  166. package/assets/skills/converted/mcp-builder/composable/mini/09-error-handling.md +32 -0
  167. package/assets/skills/converted/mcp-builder/composable/mini/10-testing-and-documentation.md +21 -0
  168. package/assets/skills/converted/mcp-builder/composable/mini/11-python-implementation.md +432 -0
  169. package/assets/skills/converted/mcp-builder/composable/mini/12-python-advanced-and-checklist.md +233 -0
  170. package/assets/skills/converted/mcp-builder/composable/mini/13-node-implementation.md +717 -0
  171. package/assets/skills/converted/mcp-builder/composable/mini/14-node-advanced-and-checklist.md +200 -0
  172. package/assets/skills/converted/mcp-builder/composable/mini/15-evaluation-design.md +200 -0
  173. package/assets/skills/converted/mcp-builder/composable/mini/16-evaluation-running.md +198 -0
  174. package/assets/skills/converted/mcp-builder/composable/presets/node-server.md +1381 -0
  175. package/assets/skills/converted/mcp-builder/composable/presets/python-server.md +1129 -0
  176. package/assets/skills/converted/pdf/composable/BUNDLE.md +1284 -0
  177. package/assets/skills/converted/pdf/composable/INDEX.md +14 -0
  178. package/assets/skills/converted/pdf/composable/VERSION +1 -0
  179. package/assets/skills/converted/pdf/composable/mini/00-core.md +46 -0
  180. package/assets/skills/converted/pdf/composable/mini/01-creation.md +176 -0
  181. package/assets/skills/converted/pdf/composable/mini/02-extraction.md +178 -0
  182. package/assets/skills/converted/pdf/composable/mini/03-merge-split-manipulate.md +240 -0
  183. package/assets/skills/converted/pdf/composable/mini/04-images-ocr.md +168 -0
  184. package/assets/skills/converted/pdf/composable/mini/05-encryption.md +51 -0
  185. package/assets/skills/converted/pdf/composable/mini/06-forms.md +300 -0
  186. package/assets/skills/converted/pdf/composable/mini/07-libraries-reference.md +89 -0
  187. package/assets/skills/converted/pptx/composable/BUNDLE.md +911 -0
  188. package/assets/skills/converted/pptx/composable/INDEX.md +12 -0
  189. package/assets/skills/converted/pptx/composable/VERSION +1 -0
  190. package/assets/skills/converted/pptx/composable/mini/00-core.md +37 -0
  191. package/assets/skills/converted/pptx/composable/mini/01-reading.md +37 -0
  192. package/assets/skills/converted/pptx/composable/mini/02-creating-from-scratch.md +422 -0
  193. package/assets/skills/converted/pptx/composable/mini/03-editing-templates.md +207 -0
  194. package/assets/skills/converted/pptx/composable/mini/04-design.md +89 -0
  195. package/assets/skills/converted/pptx/composable/mini/05-qa-and-rendering.md +91 -0
  196. package/assets/skills/converted/pptx/composable/presets/creating.md +659 -0
  197. package/assets/skills/converted/pptx/composable/presets/editing.md +485 -0
  198. package/assets/skills/converted/skill-creator/composable/BUNDLE.md +1681 -0
  199. package/assets/skills/converted/skill-creator/composable/INDEX.md +21 -0
  200. package/assets/skills/converted/skill-creator/composable/VERSION +1 -0
  201. package/assets/skills/converted/skill-creator/composable/mini/00-core.md +59 -0
  202. package/assets/skills/converted/skill-creator/composable/mini/01-creating-a-skill.md +27 -0
  203. package/assets/skills/converted/skill-creator/composable/mini/02-skill-writing-guide.md +71 -0
  204. package/assets/skills/converted/skill-creator/composable/mini/03-test-cases.md +21 -0
  205. package/assets/skills/converted/skill-creator/composable/mini/04-running-and-evaluating.md +128 -0
  206. package/assets/skills/converted/skill-creator/composable/mini/05-improving-the-skill.md +30 -0
  207. package/assets/skills/converted/skill-creator/composable/mini/06-blind-comparison.md +5 -0
  208. package/assets/skills/converted/skill-creator/composable/mini/07-description-optimization.md +74 -0
  209. package/assets/skills/converted/skill-creator/composable/mini/08-packaging.md +11 -0
  210. package/assets/skills/converted/skill-creator/composable/mini/09-environment-specific.md +38 -0
  211. package/assets/skills/converted/skill-creator/composable/mini/10-scripts-and-references.md +34 -0
  212. package/assets/skills/converted/skill-creator/composable/mini/11-json-schemas.md +414 -0
  213. package/assets/skills/converted/skill-creator/composable/mini/12-agent-grader.md +225 -0
  214. package/assets/skills/converted/skill-creator/composable/mini/13-agent-comparator.md +204 -0
  215. package/assets/skills/converted/skill-creator/composable/mini/14-agent-analyzer.md +276 -0
  216. package/assets/skills/converted/skill-creator/composable/presets/authoring.md +198 -0
  217. package/assets/skills/converted/skill-creator/composable/presets/evaluating.md +1334 -0
  218. package/assets/skills/converted/skill-creator/composable/presets/optimizing.md +160 -0
  219. package/assets/skills/converted/skill-creator/composable/presets.json +5 -0
  220. package/assets/skills/meta/ccs-skill-creator/composable/BUNDLE.md +465 -0
  221. package/assets/skills/meta/ccs-skill-creator/composable/INDEX.md +8 -0
  222. package/assets/skills/meta/ccs-skill-creator/composable/VERSION +1 -0
  223. package/assets/skills/meta/ccs-skill-creator/composable/mini/00-core.md +46 -0
  224. package/assets/skills/meta/ccs-skill-creator/composable/mini/01-create-new-skill.md +167 -0
  225. package/assets/skills/meta/ccs-skill-creator/composable/mini/02-convert-existing-skill.md +120 -0
  226. package/assets/skills/meta/ccs-skill-creator/composable/mini/03-review-and-maintain.md +112 -0
  227. package/assets/skills/sources/anthropic/PROVENANCE.md +3 -0
  228. package/assets/skills/sources/anthropic/claude-api/LICENSE.txt +202 -0
  229. package/assets/skills/sources/anthropic/docx/LICENSE.txt +30 -0
  230. package/assets/skills/sources/anthropic/internal-comms/LICENSE.txt +202 -0
  231. package/assets/skills/sources/anthropic/mcp-builder/LICENSE.txt +202 -0
  232. package/assets/skills/sources/anthropic/pdf/LICENSE.txt +30 -0
  233. package/assets/skills/sources/anthropic/pptx/LICENSE.txt +30 -0
  234. package/assets/skills/sources/anthropic/skill-creator/LICENSE.txt +202 -0
  235. package/assets/skills/sources/financial-analyst/PROVENANCE.md +1 -0
  236. package/assets/tools/hive.py +728 -0
  237. package/dist/cli.js +7494 -0
  238. package/package.json +40 -0
@@ -0,0 +1,549 @@
1
+ # Streaming — Python
2
+
3
+ ## Quick Start
4
+
5
+ ```python
6
+ with client.messages.stream(
7
+ model="claude-opus-4-8",
8
+ max_tokens=64000,
9
+ messages=[{"role": "user", "content": "Write a story"}]
10
+ ) as stream:
11
+ for text in stream.text_stream:
12
+ print(text, end="", flush=True)
13
+ ```
14
+
15
+ ### Async
16
+
17
+ ```python
18
+ async with async_client.messages.stream(
19
+ model="claude-opus-4-8",
20
+ max_tokens=64000,
21
+ messages=[{"role": "user", "content": "Write a story"}]
22
+ ) as stream:
23
+ async for text in stream.text_stream:
24
+ print(text, end="", flush=True)
25
+ ```
26
+
27
+ ### Low-level: `stream=True`
28
+
29
+ `messages.stream()` (above) is the recommended helper — it accumulates state and exposes `text_stream` / `get_final_message()`. If you only need the raw event iterator and want lower memory use, pass `stream=True` to `messages.create()` instead:
30
+
31
+ ```python
32
+ for event in client.messages.create(
33
+ model="claude-opus-4-8",
34
+ max_tokens=64000,
35
+ messages=[{"role": "user", "content": "Write a story"}],
36
+ stream=True,
37
+ ):
38
+ print(event.type)
39
+ ```
40
+
41
+ No final-message accumulation is done for you in this form.
42
+
43
+ ---
44
+
45
+ ## Handling Different Content Types
46
+
47
+ Claude may return text, thinking blocks, or tool use. Handle each appropriately:
48
+
49
+ > **Fable 5 / Opus 4.8 / Opus 4.7 / Opus 4.6:** Use `thinking: {type: "adaptive"}`. On older models, use `thinking: {type: "enabled", budget_tokens: N}` instead.
50
+
51
+ ```python
52
+ with client.messages.stream(
53
+ model="claude-opus-4-8",
54
+ max_tokens=64000,
55
+ thinking={"type": "adaptive", "display": "summarized"}, # display opt-in: default is omitted (empty thinking text) on Fable 5 / Mythos 5 / Opus 4.8 / 4.7
56
+ messages=[{"role": "user", "content": "Analyze this problem"}]
57
+ ) as stream:
58
+ for event in stream:
59
+ if event.type == "content_block_start":
60
+ if event.content_block.type == "thinking":
61
+ print("\n[Thinking...]")
62
+ elif event.content_block.type == "text":
63
+ print("\n[Response:]")
64
+
65
+ elif event.type == "content_block_delta":
66
+ if event.delta.type == "thinking_delta":
67
+ print(event.delta.thinking, end="", flush=True)
68
+ elif event.delta.type == "text_delta":
69
+ print(event.delta.text, end="", flush=True)
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Streaming with Tool Use
75
+
76
+ The Python tool runner currently returns complete messages. Use streaming for individual API calls within a manual loop if you need per-token streaming with tools:
77
+
78
+ ```python
79
+ with client.messages.stream(
80
+ model="claude-opus-4-8",
81
+ max_tokens=64000,
82
+ tools=tools,
83
+ messages=messages
84
+ ) as stream:
85
+ for text in stream.text_stream:
86
+ print(text, end="", flush=True)
87
+
88
+ response = stream.get_final_message()
89
+ # Continue with tool execution if response.stop_reason == "tool_use"
90
+ ```
91
+
92
+ ---
93
+
94
+ ## Getting the Final Message
95
+
96
+ ```python
97
+ with client.messages.stream(
98
+ model="claude-opus-4-8",
99
+ max_tokens=64000,
100
+ messages=[{"role": "user", "content": "Hello"}]
101
+ ) as stream:
102
+ for text in stream.text_stream:
103
+ print(text, end="", flush=True)
104
+
105
+ # Get full message after streaming
106
+ final_message = stream.get_final_message()
107
+ print(f"\n\nTokens used: {final_message.usage.output_tokens}")
108
+ ```
109
+
110
+ ---
111
+
112
+ ## Streaming with Progress Updates
113
+
114
+ ```python
115
+ def stream_with_progress(client, **kwargs):
116
+ """Stream a response with progress updates."""
117
+ total_tokens = 0
118
+ content_parts = []
119
+
120
+ with client.messages.stream(**kwargs) as stream:
121
+ for event in stream:
122
+ if event.type == "content_block_delta":
123
+ if event.delta.type == "text_delta":
124
+ text = event.delta.text
125
+ content_parts.append(text)
126
+ print(text, end="", flush=True)
127
+
128
+ elif event.type == "message_delta":
129
+ if event.usage and event.usage.output_tokens is not None:
130
+ total_tokens = event.usage.output_tokens
131
+
132
+ final_message = stream.get_final_message()
133
+
134
+ print(f"\n\n[Tokens used: {total_tokens}]")
135
+ return "".join(content_parts)
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Error Handling in Streams
141
+
142
+ ```python
143
+ try:
144
+ with client.messages.stream(
145
+ model="claude-opus-4-8",
146
+ max_tokens=64000,
147
+ messages=[{"role": "user", "content": "Write a story"}]
148
+ ) as stream:
149
+ for text in stream.text_stream:
150
+ print(text, end="", flush=True)
151
+ except anthropic.APIConnectionError:
152
+ print("\nConnection lost. Please retry.")
153
+ except anthropic.RateLimitError:
154
+ print("\nRate limited. Please wait and retry.")
155
+ except anthropic.APIStatusError as e:
156
+ print(f"\nAPI error: {e.status_code}")
157
+ ```
158
+
159
+ ---
160
+
161
+ ## Stream Event Types
162
+
163
+ | Event Type | Description | When it fires |
164
+ | --------------------- | --------------------------- | --------------------------------- |
165
+ | `message_start` | Contains message metadata | Once at the beginning |
166
+ | `content_block_start` | New content block beginning | When a text/tool_use block starts |
167
+ | `content_block_delta` | Incremental content update | For each token/chunk |
168
+ | `content_block_stop` | Content block complete | When a block finishes |
169
+ | `message_delta` | Message-level updates | Contains `stop_reason`, usage |
170
+ | `message_stop` | Message complete | Once at the end |
171
+
172
+ ## Best Practices
173
+
174
+ 1. **Always flush output** — Use `flush=True` to show tokens immediately
175
+ 2. **Handle partial responses** — If the stream is interrupted, you may have incomplete content
176
+ 3. **Track token usage** — The `message_delta` event contains usage information
177
+ 4. **Use timeouts** — Set appropriate timeouts for your application
178
+ 5. **Default to streaming** — Use `.get_final_message()` to get the complete response even when streaming, giving you timeout protection without needing to handle individual events
179
+ 6. **Large `max_tokens` without streaming raises `ValueError`** — The SDK refuses non-streaming requests it estimates will exceed ~10 minutes (idle connections drop). Pass `stream=True` / use `messages.stream()`, or explicitly override `timeout`, to suppress the guard.
180
+
181
+ # Message Batches API — Python
182
+
183
+ The Batches API (`POST /v1/messages/batches`) processes Messages API requests asynchronously at 50% of standard prices.
184
+
185
+ ## Key Facts
186
+
187
+ - Up to 100,000 requests or 256 MB per batch
188
+ - Most batches complete within 1 hour; maximum 24 hours
189
+ - Results available for 29 days after creation
190
+ - 50% cost reduction on all token usage
191
+ - All Messages API features supported (vision, tools, caching, etc.)
192
+
193
+ ---
194
+
195
+ ## Create a Batch
196
+
197
+ ```python
198
+ import anthropic
199
+ from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
200
+ from anthropic.types.messages.batch_create_params import Request
201
+
202
+ client = anthropic.Anthropic()
203
+
204
+ message_batch = client.messages.batches.create(
205
+ requests=[
206
+ Request(
207
+ custom_id="request-1",
208
+ params=MessageCreateParamsNonStreaming(
209
+ model="claude-opus-4-8",
210
+ max_tokens=16000,
211
+ messages=[{"role": "user", "content": "Summarize climate change impacts"}]
212
+ )
213
+ ),
214
+ Request(
215
+ custom_id="request-2",
216
+ params=MessageCreateParamsNonStreaming(
217
+ model="claude-opus-4-8",
218
+ max_tokens=16000,
219
+ messages=[{"role": "user", "content": "Explain quantum computing basics"}]
220
+ )
221
+ ),
222
+ ]
223
+ )
224
+
225
+ print(f"Batch ID: {message_batch.id}")
226
+ print(f"Status: {message_batch.processing_status}")
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Poll for Completion
232
+
233
+ ```python
234
+ import time
235
+
236
+ while True:
237
+ batch = client.messages.batches.retrieve(message_batch.id)
238
+ if batch.processing_status == "ended":
239
+ break
240
+ print(f"Status: {batch.processing_status}, processing: {batch.request_counts.processing}")
241
+ time.sleep(60)
242
+
243
+ print("Batch complete!")
244
+ print(f"Succeeded: {batch.request_counts.succeeded}")
245
+ print(f"Errored: {batch.request_counts.errored}")
246
+ ```
247
+
248
+ ---
249
+
250
+ ## Retrieve Results
251
+
252
+ > **Note:** Examples below use `match/case` syntax, requiring Python 3.10+. For earlier versions, use `if/elif` chains instead.
253
+
254
+ ```python
255
+ for result in client.messages.batches.results(message_batch.id):
256
+ match result.result.type:
257
+ case "succeeded":
258
+ msg = result.result.message
259
+ text = next((b.text for b in msg.content if b.type == "text"), "")
260
+ print(f"[{result.custom_id}] {text[:100]}")
261
+ case "errored":
262
+ if result.result.error.type == "invalid_request":
263
+ print(f"[{result.custom_id}] Validation error - fix request and retry")
264
+ else:
265
+ print(f"[{result.custom_id}] Server error - safe to retry")
266
+ case "canceled":
267
+ print(f"[{result.custom_id}] Canceled")
268
+ case "expired":
269
+ print(f"[{result.custom_id}] Expired - resubmit")
270
+ ```
271
+
272
+ ---
273
+
274
+ ## Cancel a Batch
275
+
276
+ ```python
277
+ cancelled = client.messages.batches.cancel(message_batch.id)
278
+ print(f"Status: {cancelled.processing_status}") # "canceling"
279
+ ```
280
+
281
+ ---
282
+
283
+ ## List Batches (auto-pagination)
284
+
285
+ Iterating the return value of any `list()` call auto-paginates across all pages — do not index into `.data` if you want the full set:
286
+
287
+ ```python
288
+ for batch in client.messages.batches.list(limit=20):
289
+ print(batch.id, batch.processing_status)
290
+ ```
291
+
292
+ For manual control, use `first_page.has_next_page()` / `first_page.get_next_page()` / `first_page.next_page_info()`; `first_page.data` holds the current page's items and `first_page.last_id` is the cursor.
293
+
294
+ ---
295
+
296
+ ## Batch with Prompt Caching
297
+
298
+ ```python
299
+ shared_system = [
300
+ {"type": "text", "text": "You are a literary analyst."},
301
+ {
302
+ "type": "text",
303
+ "text": large_document_text, # Shared across all requests
304
+ "cache_control": {"type": "ephemeral"}
305
+ }
306
+ ]
307
+
308
+ message_batch = client.messages.batches.create(
309
+ requests=[
310
+ Request(
311
+ custom_id=f"analysis-{i}",
312
+ params=MessageCreateParamsNonStreaming(
313
+ model="claude-opus-4-8",
314
+ max_tokens=16000,
315
+ system=shared_system,
316
+ messages=[{"role": "user", "content": question}]
317
+ )
318
+ )
319
+ for i, question in enumerate(questions)
320
+ ]
321
+ )
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Full End-to-End Example
327
+
328
+ ```python
329
+ import anthropic
330
+ import time
331
+ from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
332
+ from anthropic.types.messages.batch_create_params import Request
333
+
334
+ client = anthropic.Anthropic()
335
+
336
+ # 1. Prepare requests
337
+ items_to_classify = [
338
+ "The product quality is excellent!",
339
+ "Terrible customer service, never again.",
340
+ "It's okay, nothing special.",
341
+ ]
342
+
343
+ requests = [
344
+ Request(
345
+ custom_id=f"classify-{i}",
346
+ params=MessageCreateParamsNonStreaming(
347
+ model="claude-haiku-4-5",
348
+ max_tokens=50,
349
+ messages=[{
350
+ "role": "user",
351
+ "content": f"Classify as positive/negative/neutral (one word): {text}"
352
+ }]
353
+ )
354
+ )
355
+ for i, text in enumerate(items_to_classify)
356
+ ]
357
+
358
+ # 2. Create batch
359
+ batch = client.messages.batches.create(requests=requests)
360
+ print(f"Created batch: {batch.id}")
361
+
362
+ # 3. Wait for completion
363
+ while True:
364
+ batch = client.messages.batches.retrieve(batch.id)
365
+ if batch.processing_status == "ended":
366
+ break
367
+ time.sleep(10)
368
+
369
+ # 4. Collect results
370
+ results = {}
371
+ for result in client.messages.batches.results(batch.id):
372
+ if result.result.type == "succeeded":
373
+ msg = result.result.message
374
+ results[result.custom_id] = next((b.text for b in msg.content if b.type == "text"), "")
375
+
376
+ for custom_id, classification in sorted(results.items()):
377
+ print(f"{custom_id}: {classification}")
378
+ ```
379
+
380
+ # Files API — Python
381
+
382
+ The Files API uploads files for use in Messages API requests. Reference files via `file_id` in content blocks, avoiding re-uploads across multiple API calls.
383
+
384
+ **Beta:** Pass `betas=["files-api-2025-04-14"]` in your API calls (the SDK sets the required header automatically).
385
+
386
+ ## Key Facts
387
+
388
+ - Maximum file size: 500 MB
389
+ - Total storage: 100 GB per organization
390
+ - Files persist until deleted
391
+ - File operations (upload, list, delete) are free; content used in messages is billed as input tokens
392
+ - Not available on Amazon Bedrock or Google Vertex AI
393
+
394
+ ---
395
+
396
+ ## Upload a File
397
+
398
+ The `file` argument accepts a `(filename, content, content_type)` tuple, a `pathlib.Path` (or any `PathLike` — read for you, async-safe with `AsyncAnthropic`), or an open binary file object.
399
+
400
+ ```python
401
+ import anthropic
402
+ from pathlib import Path
403
+
404
+ client = anthropic.Anthropic()
405
+
406
+ uploaded = client.beta.files.upload(
407
+ file=("report.pdf", open("report.pdf", "rb"), "application/pdf"),
408
+ )
409
+ # or: client.beta.files.upload(file=Path("report.pdf"))
410
+ print(f"File ID: {uploaded.id}")
411
+ print(f"Size: {uploaded.size_bytes} bytes")
412
+ ```
413
+
414
+ ---
415
+
416
+ ## Use a File in Messages
417
+
418
+ ### PDF / Text Document
419
+
420
+ ```python
421
+ response = client.beta.messages.create(
422
+ model="claude-opus-4-8",
423
+ max_tokens=16000,
424
+ messages=[{
425
+ "role": "user",
426
+ "content": [
427
+ {"type": "text", "text": "Summarize the key findings in this report."},
428
+ {
429
+ "type": "document",
430
+ "source": {"type": "file", "file_id": uploaded.id},
431
+ "title": "Q4 Report", # optional
432
+ "citations": {"enabled": True} # optional, enables citations
433
+ }
434
+ ]
435
+ }],
436
+ betas=["files-api-2025-04-14"],
437
+ )
438
+ for block in response.content:
439
+ if block.type == "text":
440
+ print(block.text)
441
+ ```
442
+
443
+ ### Image
444
+
445
+ ```python
446
+ image_file = client.beta.files.upload(
447
+ file=("photo.png", open("photo.png", "rb"), "image/png"),
448
+ )
449
+
450
+ response = client.beta.messages.create(
451
+ model="claude-opus-4-8",
452
+ max_tokens=16000,
453
+ messages=[{
454
+ "role": "user",
455
+ "content": [
456
+ {"type": "text", "text": "What's in this image?"},
457
+ {
458
+ "type": "image",
459
+ "source": {"type": "file", "file_id": image_file.id}
460
+ }
461
+ ]
462
+ }],
463
+ betas=["files-api-2025-04-14"],
464
+ )
465
+ ```
466
+
467
+ ---
468
+
469
+ ## Manage Files
470
+
471
+ ### List Files
472
+
473
+ Iterate the list result directly — the SDK auto-paginates across all pages. Only use `.data` if you want the first page only.
474
+
475
+ ```python
476
+ for f in client.beta.files.list():
477
+ print(f"{f.id}: {f.filename} ({f.size_bytes} bytes)")
478
+ ```
479
+
480
+ ### Get File Metadata
481
+
482
+ ```python
483
+ file_info = client.beta.files.retrieve_metadata("file_011CNha8iCJcU1wXNR6q4V8w")
484
+ print(f"Filename: {file_info.filename}")
485
+ print(f"MIME type: {file_info.mime_type}")
486
+ ```
487
+
488
+ ### Delete a File
489
+
490
+ ```python
491
+ client.beta.files.delete("file_011CNha8iCJcU1wXNR6q4V8w")
492
+ ```
493
+
494
+ ### Download a File
495
+
496
+ Only files created by the code execution tool or skills can be downloaded (not user-uploaded files).
497
+
498
+ ```python
499
+ file_content = client.beta.files.download("file_011CNha8iCJcU1wXNR6q4V8w")
500
+ file_content.write_to_file("output.txt")
501
+ ```
502
+
503
+ ---
504
+
505
+ ## Full End-to-End Example
506
+
507
+ Upload a document once, ask multiple questions about it:
508
+
509
+ ```python
510
+ import anthropic
511
+
512
+ client = anthropic.Anthropic()
513
+
514
+ # 1. Upload once
515
+ uploaded = client.beta.files.upload(
516
+ file=("contract.pdf", open("contract.pdf", "rb"), "application/pdf"),
517
+ )
518
+ print(f"Uploaded: {uploaded.id}")
519
+
520
+ # 2. Ask multiple questions using the same file_id
521
+ questions = [
522
+ "What are the key terms and conditions?",
523
+ "What is the termination clause?",
524
+ "Summarize the payment schedule.",
525
+ ]
526
+
527
+ for question in questions:
528
+ response = client.beta.messages.create(
529
+ model="claude-opus-4-8",
530
+ max_tokens=16000,
531
+ messages=[{
532
+ "role": "user",
533
+ "content": [
534
+ {"type": "text", "text": question},
535
+ {
536
+ "type": "document",
537
+ "source": {"type": "file", "file_id": uploaded.id}
538
+ }
539
+ ]
540
+ }],
541
+ betas=["files-api-2025-04-14"],
542
+ )
543
+ print(f"\nQ: {question}")
544
+ text = next((b.text for b in response.content if b.type == "text"), "")
545
+ print(f"A: {text[:200]}")
546
+
547
+ # 3. Clean up when done
548
+ client.beta.files.delete(uploaded.id)
549
+ ```