@prismer/runtime 2.0.7 → 2.0.8
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.
- package/CHANGELOG.md +201 -0
- package/built-in-skills/agent-coordination/SKILL.md +235 -0
- package/built-in-skills/agent-meta/SKILL.md +52 -0
- package/built-in-skills/assets/SKILL.md +131 -0
- package/built-in-skills/canvas-design/LICENSE.txt +202 -0
- package/built-in-skills/canvas-design/SKILL.md +156 -0
- package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/built-in-skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/built-in-skills/claim-agent-ownership/SKILL.md +254 -0
- package/built-in-skills/claude-api/LICENSE.txt +202 -0
- package/built-in-skills/claude-api/SKILL.md +324 -0
- package/built-in-skills/claude-api/csharp/claude-api.md +402 -0
- package/built-in-skills/claude-api/curl/examples.md +216 -0
- package/built-in-skills/claude-api/curl/managed-agents.md +336 -0
- package/built-in-skills/claude-api/go/claude-api.md +421 -0
- package/built-in-skills/claude-api/go/managed-agents/README.md +561 -0
- package/built-in-skills/claude-api/java/claude-api.md +432 -0
- package/built-in-skills/claude-api/java/managed-agents/README.md +442 -0
- package/built-in-skills/claude-api/php/claude-api.md +375 -0
- package/built-in-skills/claude-api/php/managed-agents/README.md +435 -0
- package/built-in-skills/claude-api/python/claude-api/README.md +420 -0
- package/built-in-skills/claude-api/python/claude-api/batches.md +185 -0
- package/built-in-skills/claude-api/python/claude-api/files-api.md +165 -0
- package/built-in-skills/claude-api/python/claude-api/streaming.md +162 -0
- package/built-in-skills/claude-api/python/claude-api/tool-use.md +590 -0
- package/built-in-skills/claude-api/python/managed-agents/README.md +332 -0
- package/built-in-skills/claude-api/ruby/claude-api.md +113 -0
- package/built-in-skills/claude-api/ruby/managed-agents/README.md +389 -0
- package/built-in-skills/claude-api/shared/agent-design.md +101 -0
- package/built-in-skills/claude-api/shared/error-codes.md +213 -0
- package/built-in-skills/claude-api/shared/live-sources.md +135 -0
- package/built-in-skills/claude-api/shared/managed-agents-api-reference.md +378 -0
- package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
- package/built-in-skills/claude-api/shared/managed-agents-core.md +238 -0
- package/built-in-skills/claude-api/shared/managed-agents-environments.md +215 -0
- package/built-in-skills/claude-api/shared/managed-agents-events.md +195 -0
- package/built-in-skills/claude-api/shared/managed-agents-memory.md +197 -0
- package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +99 -0
- package/built-in-skills/claude-api/shared/managed-agents-onboarding.md +114 -0
- package/built-in-skills/claude-api/shared/managed-agents-outcomes.md +106 -0
- package/built-in-skills/claude-api/shared/managed-agents-overview.md +68 -0
- package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +173 -0
- package/built-in-skills/claude-api/shared/managed-agents-tools.md +321 -0
- package/built-in-skills/claude-api/shared/managed-agents-webhooks.md +110 -0
- package/built-in-skills/claude-api/shared/model-migration.md +779 -0
- package/built-in-skills/claude-api/shared/models.md +121 -0
- package/built-in-skills/claude-api/shared/prompt-caching.md +171 -0
- package/built-in-skills/claude-api/shared/tool-use-concepts.md +327 -0
- package/built-in-skills/claude-api/typescript/claude-api/README.md +333 -0
- package/built-in-skills/claude-api/typescript/claude-api/batches.md +106 -0
- package/built-in-skills/claude-api/typescript/claude-api/files-api.md +98 -0
- package/built-in-skills/claude-api/typescript/claude-api/streaming.md +178 -0
- package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +527 -0
- package/built-in-skills/claude-api/typescript/managed-agents/README.md +359 -0
- package/built-in-skills/doc-coauthoring/SKILL.md +375 -0
- package/built-in-skills/frontend-design/LICENSE.txt +177 -0
- package/built-in-skills/frontend-design/SKILL.md +42 -0
- package/built-in-skills/human-approval/SKILL.md +114 -0
- package/built-in-skills/image-generate/SKILL.md +327 -0
- package/built-in-skills/ingest/SKILL.md +105 -0
- package/built-in-skills/internal-comms/LICENSE.txt +202 -0
- package/built-in-skills/internal-comms/SKILL.md +32 -0
- package/built-in-skills/internal-comms/examples/3p-updates.md +47 -0
- package/built-in-skills/internal-comms/examples/company-newsletter.md +65 -0
- package/built-in-skills/internal-comms/examples/faq-answers.md +30 -0
- package/built-in-skills/internal-comms/examples/general-comms.md +16 -0
- package/built-in-skills/liteparse/SKILL.md +156 -0
- package/built-in-skills/mcp-builder/LICENSE.txt +202 -0
- package/built-in-skills/mcp-builder/SKILL.md +236 -0
- package/built-in-skills/mcp-builder/reference/evaluation.md +602 -0
- package/built-in-skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/built-in-skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/built-in-skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/built-in-skills/mcp-builder/scripts/connections.py +151 -0
- package/built-in-skills/mcp-builder/scripts/evaluation.py +373 -0
- package/built-in-skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -0
- package/built-in-skills/memory/SKILL.md +106 -0
- package/built-in-skills/memory-curation/SKILL.md +135 -0
- package/built-in-skills/office-artifacts/SKILL.md +198 -0
- package/built-in-skills/prismer-im-collab/SKILL.md +148 -0
- package/built-in-skills/skill-authoring/SKILL.md +124 -0
- package/built-in-skills/skill-authoring/skill.json +74 -0
- package/built-in-skills/skill-creator/LICENSE.txt +202 -0
- package/built-in-skills/skill-creator/SKILL.md +485 -0
- package/built-in-skills/skill-creator/agents/analyzer.md +274 -0
- package/built-in-skills/skill-creator/agents/comparator.md +202 -0
- package/built-in-skills/skill-creator/agents/grader.md +223 -0
- package/built-in-skills/skill-creator/assets/eval_review.html +146 -0
- package/built-in-skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/built-in-skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/built-in-skills/skill-creator/references/schemas.md +430 -0
- package/built-in-skills/skill-creator/scripts/__init__.py +0 -0
- package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/built-in-skills/skill-creator/scripts/generate_report.py +326 -0
- package/built-in-skills/skill-creator/scripts/improve_description.py +247 -0
- package/built-in-skills/skill-creator/scripts/package_skill.py +136 -0
- package/built-in-skills/skill-creator/scripts/quick_validate.py +103 -0
- package/built-in-skills/skill-creator/scripts/run_eval.py +310 -0
- package/built-in-skills/skill-creator/scripts/run_loop.py +328 -0
- package/built-in-skills/skill-creator/scripts/utils.py +47 -0
- package/built-in-skills/slack-gif-creator/LICENSE.txt +202 -0
- package/built-in-skills/slack-gif-creator/SKILL.md +271 -0
- package/built-in-skills/slack-gif-creator/core/easing.py +234 -0
- package/built-in-skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/built-in-skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/built-in-skills/slack-gif-creator/core/validators.py +136 -0
- package/built-in-skills/slack-gif-creator/requirements.txt +4 -0
- package/built-in-skills/tasks/SKILL.md +398 -0
- package/built-in-skills/team/SKILL.md +76 -0
- package/built-in-skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/built-in-skills/web-artifacts-builder/SKILL.md +104 -0
- package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +334 -0
- package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/built-in-skills/webapp-testing/LICENSE.txt +202 -0
- package/built-in-skills/webapp-testing/SKILL.md +96 -0
- package/built-in-skills/webapp-testing/examples/console_logging.py +35 -0
- package/built-in-skills/webapp-testing/examples/element_discovery.py +40 -0
- package/built-in-skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/built-in-skills/webapp-testing/scripts/with_server.py +106 -0
- package/dist/cli.cjs +6195 -1631
- package/dist/cli.js +6148 -1585
- package/dist/index.cjs +6032 -1468
- package/dist/index.d.cts +813 -43
- package/dist/index.d.ts +813 -43
- package/dist/index.js +6017 -1454
- package/package.json +4 -2
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Files API — Python
|
|
2
|
+
|
|
3
|
+
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.
|
|
4
|
+
|
|
5
|
+
**Beta:** Pass `betas=["files-api-2025-04-14"]` in your API calls (the SDK sets the required header automatically).
|
|
6
|
+
|
|
7
|
+
## Key Facts
|
|
8
|
+
|
|
9
|
+
- Maximum file size: 500 MB
|
|
10
|
+
- Total storage: 100 GB per organization
|
|
11
|
+
- Files persist until deleted
|
|
12
|
+
- File operations (upload, list, delete) are free; content used in messages is billed as input tokens
|
|
13
|
+
- Not available on Amazon Bedrock or Google Vertex AI
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Upload a File
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
import anthropic
|
|
21
|
+
|
|
22
|
+
client = anthropic.Anthropic()
|
|
23
|
+
|
|
24
|
+
uploaded = client.beta.files.upload(
|
|
25
|
+
file=("report.pdf", open("report.pdf", "rb"), "application/pdf"),
|
|
26
|
+
)
|
|
27
|
+
print(f"File ID: {uploaded.id}")
|
|
28
|
+
print(f"Size: {uploaded.size_bytes} bytes")
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Use a File in Messages
|
|
34
|
+
|
|
35
|
+
### PDF / Text Document
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
response = client.beta.messages.create(
|
|
39
|
+
model="claude-opus-4-7",
|
|
40
|
+
max_tokens=16000,
|
|
41
|
+
messages=[{
|
|
42
|
+
"role": "user",
|
|
43
|
+
"content": [
|
|
44
|
+
{"type": "text", "text": "Summarize the key findings in this report."},
|
|
45
|
+
{
|
|
46
|
+
"type": "document",
|
|
47
|
+
"source": {"type": "file", "file_id": uploaded.id},
|
|
48
|
+
"title": "Q4 Report", # optional
|
|
49
|
+
"citations": {"enabled": True} # optional, enables citations
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}],
|
|
53
|
+
betas=["files-api-2025-04-14"],
|
|
54
|
+
)
|
|
55
|
+
for block in response.content:
|
|
56
|
+
if block.type == "text":
|
|
57
|
+
print(block.text)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Image
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
image_file = client.beta.files.upload(
|
|
64
|
+
file=("photo.png", open("photo.png", "rb"), "image/png"),
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
response = client.beta.messages.create(
|
|
68
|
+
model="claude-opus-4-7",
|
|
69
|
+
max_tokens=16000,
|
|
70
|
+
messages=[{
|
|
71
|
+
"role": "user",
|
|
72
|
+
"content": [
|
|
73
|
+
{"type": "text", "text": "What's in this image?"},
|
|
74
|
+
{
|
|
75
|
+
"type": "image",
|
|
76
|
+
"source": {"type": "file", "file_id": image_file.id}
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}],
|
|
80
|
+
betas=["files-api-2025-04-14"],
|
|
81
|
+
)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Manage Files
|
|
87
|
+
|
|
88
|
+
### List Files
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
files = client.beta.files.list()
|
|
92
|
+
for f in files.data:
|
|
93
|
+
print(f"{f.id}: {f.filename} ({f.size_bytes} bytes)")
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Get File Metadata
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
file_info = client.beta.files.retrieve_metadata("file_011CNha8iCJcU1wXNR6q4V8w")
|
|
100
|
+
print(f"Filename: {file_info.filename}")
|
|
101
|
+
print(f"MIME type: {file_info.mime_type}")
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Delete a File
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
client.beta.files.delete("file_011CNha8iCJcU1wXNR6q4V8w")
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Download a File
|
|
111
|
+
|
|
112
|
+
Only files created by the code execution tool or skills can be downloaded (not user-uploaded files).
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
file_content = client.beta.files.download("file_011CNha8iCJcU1wXNR6q4V8w")
|
|
116
|
+
file_content.write_to_file("output.txt")
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Full End-to-End Example
|
|
122
|
+
|
|
123
|
+
Upload a document once, ask multiple questions about it:
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
import anthropic
|
|
127
|
+
|
|
128
|
+
client = anthropic.Anthropic()
|
|
129
|
+
|
|
130
|
+
# 1. Upload once
|
|
131
|
+
uploaded = client.beta.files.upload(
|
|
132
|
+
file=("contract.pdf", open("contract.pdf", "rb"), "application/pdf"),
|
|
133
|
+
)
|
|
134
|
+
print(f"Uploaded: {uploaded.id}")
|
|
135
|
+
|
|
136
|
+
# 2. Ask multiple questions using the same file_id
|
|
137
|
+
questions = [
|
|
138
|
+
"What are the key terms and conditions?",
|
|
139
|
+
"What is the termination clause?",
|
|
140
|
+
"Summarize the payment schedule.",
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
for question in questions:
|
|
144
|
+
response = client.beta.messages.create(
|
|
145
|
+
model="claude-opus-4-7",
|
|
146
|
+
max_tokens=16000,
|
|
147
|
+
messages=[{
|
|
148
|
+
"role": "user",
|
|
149
|
+
"content": [
|
|
150
|
+
{"type": "text", "text": question},
|
|
151
|
+
{
|
|
152
|
+
"type": "document",
|
|
153
|
+
"source": {"type": "file", "file_id": uploaded.id}
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
}],
|
|
157
|
+
betas=["files-api-2025-04-14"],
|
|
158
|
+
)
|
|
159
|
+
print(f"\nQ: {question}")
|
|
160
|
+
text = next((b.text for b in response.content if b.type == "text"), "")
|
|
161
|
+
print(f"A: {text[:200]}")
|
|
162
|
+
|
|
163
|
+
# 3. Clean up when done
|
|
164
|
+
client.beta.files.delete(uploaded.id)
|
|
165
|
+
```
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Streaming — Python
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
with client.messages.stream(
|
|
7
|
+
model="claude-opus-4-7",
|
|
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-7",
|
|
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
|
+
---
|
|
28
|
+
|
|
29
|
+
## Handling Different Content Types
|
|
30
|
+
|
|
31
|
+
Claude may return text, thinking blocks, or tool use. Handle each appropriately:
|
|
32
|
+
|
|
33
|
+
> **Opus 4.7 / Opus 4.6:** Use `thinking: {type: "adaptive"}`. On older models, use `thinking: {type: "enabled", budget_tokens: N}` instead.
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
with client.messages.stream(
|
|
37
|
+
model="claude-opus-4-7",
|
|
38
|
+
max_tokens=64000,
|
|
39
|
+
thinking={"type": "adaptive"},
|
|
40
|
+
messages=[{"role": "user", "content": "Analyze this problem"}]
|
|
41
|
+
) as stream:
|
|
42
|
+
for event in stream:
|
|
43
|
+
if event.type == "content_block_start":
|
|
44
|
+
if event.content_block.type == "thinking":
|
|
45
|
+
print("\n[Thinking...]")
|
|
46
|
+
elif event.content_block.type == "text":
|
|
47
|
+
print("\n[Response:]")
|
|
48
|
+
|
|
49
|
+
elif event.type == "content_block_delta":
|
|
50
|
+
if event.delta.type == "thinking_delta":
|
|
51
|
+
print(event.delta.thinking, end="", flush=True)
|
|
52
|
+
elif event.delta.type == "text_delta":
|
|
53
|
+
print(event.delta.text, end="", flush=True)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Streaming with Tool Use
|
|
59
|
+
|
|
60
|
+
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:
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
with client.messages.stream(
|
|
64
|
+
model="claude-opus-4-7",
|
|
65
|
+
max_tokens=64000,
|
|
66
|
+
tools=tools,
|
|
67
|
+
messages=messages
|
|
68
|
+
) as stream:
|
|
69
|
+
for text in stream.text_stream:
|
|
70
|
+
print(text, end="", flush=True)
|
|
71
|
+
|
|
72
|
+
response = stream.get_final_message()
|
|
73
|
+
# Continue with tool execution if response.stop_reason == "tool_use"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Getting the Final Message
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
with client.messages.stream(
|
|
82
|
+
model="claude-opus-4-7",
|
|
83
|
+
max_tokens=64000,
|
|
84
|
+
messages=[{"role": "user", "content": "Hello"}]
|
|
85
|
+
) as stream:
|
|
86
|
+
for text in stream.text_stream:
|
|
87
|
+
print(text, end="", flush=True)
|
|
88
|
+
|
|
89
|
+
# Get full message after streaming
|
|
90
|
+
final_message = stream.get_final_message()
|
|
91
|
+
print(f"\n\nTokens used: {final_message.usage.output_tokens}")
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Streaming with Progress Updates
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
def stream_with_progress(client, **kwargs):
|
|
100
|
+
"""Stream a response with progress updates."""
|
|
101
|
+
total_tokens = 0
|
|
102
|
+
content_parts = []
|
|
103
|
+
|
|
104
|
+
with client.messages.stream(**kwargs) as stream:
|
|
105
|
+
for event in stream:
|
|
106
|
+
if event.type == "content_block_delta":
|
|
107
|
+
if event.delta.type == "text_delta":
|
|
108
|
+
text = event.delta.text
|
|
109
|
+
content_parts.append(text)
|
|
110
|
+
print(text, end="", flush=True)
|
|
111
|
+
|
|
112
|
+
elif event.type == "message_delta":
|
|
113
|
+
if event.usage and event.usage.output_tokens is not None:
|
|
114
|
+
total_tokens = event.usage.output_tokens
|
|
115
|
+
|
|
116
|
+
final_message = stream.get_final_message()
|
|
117
|
+
|
|
118
|
+
print(f"\n\n[Tokens used: {total_tokens}]")
|
|
119
|
+
return "".join(content_parts)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Error Handling in Streams
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
try:
|
|
128
|
+
with client.messages.stream(
|
|
129
|
+
model="claude-opus-4-7",
|
|
130
|
+
max_tokens=64000,
|
|
131
|
+
messages=[{"role": "user", "content": "Write a story"}]
|
|
132
|
+
) as stream:
|
|
133
|
+
for text in stream.text_stream:
|
|
134
|
+
print(text, end="", flush=True)
|
|
135
|
+
except anthropic.APIConnectionError:
|
|
136
|
+
print("\nConnection lost. Please retry.")
|
|
137
|
+
except anthropic.RateLimitError:
|
|
138
|
+
print("\nRate limited. Please wait and retry.")
|
|
139
|
+
except anthropic.APIStatusError as e:
|
|
140
|
+
print(f"\nAPI error: {e.status_code}")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Stream Event Types
|
|
146
|
+
|
|
147
|
+
| Event Type | Description | When it fires |
|
|
148
|
+
| --------------------- | --------------------------- | --------------------------------- |
|
|
149
|
+
| `message_start` | Contains message metadata | Once at the beginning |
|
|
150
|
+
| `content_block_start` | New content block beginning | When a text/tool_use block starts |
|
|
151
|
+
| `content_block_delta` | Incremental content update | For each token/chunk |
|
|
152
|
+
| `content_block_stop` | Content block complete | When a block finishes |
|
|
153
|
+
| `message_delta` | Message-level updates | Contains `stop_reason`, usage |
|
|
154
|
+
| `message_stop` | Message complete | Once at the end |
|
|
155
|
+
|
|
156
|
+
## Best Practices
|
|
157
|
+
|
|
158
|
+
1. **Always flush output** — Use `flush=True` to show tokens immediately
|
|
159
|
+
2. **Handle partial responses** — If the stream is interrupted, you may have incomplete content
|
|
160
|
+
3. **Track token usage** — The `message_delta` event contains usage information
|
|
161
|
+
4. **Use timeouts** — Set appropriate timeouts for your application
|
|
162
|
+
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
|