mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-06 12:37:37 +00:00
config(git,claude,ssh): templated gitconfig; claude settings/commands/hooks/skills; ssh config
gitconfig: name/email from chezmoi data, gh credential helper by PATH lookup (portable to darwin). claude: no credentials, history, projects, sessions, or plugin caches. ssh config as private_ (0600). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3c691e8dc5
commit
20891f3910
476 files changed
+59086
-7
No files matched your search
@@ -0,0 +1,112 @@
|
||||
# Workers AI API Reference
|
||||
|
||||
## Core Method
|
||||
|
||||
```typescript
|
||||
const response = await env.AI.run(model, input);
|
||||
```
|
||||
|
||||
## Text Generation
|
||||
|
||||
```typescript
|
||||
const result = await env.AI.run('@cf/meta/llama-3.1-8b-instruct', {
|
||||
messages: [
|
||||
{ role: 'system', content: 'You are helpful' },
|
||||
{ role: 'user', content: 'Hello' }
|
||||
],
|
||||
temperature: 0.7, // 0-1
|
||||
max_tokens: 100
|
||||
});
|
||||
console.log(result.response);
|
||||
```
|
||||
|
||||
**Streaming:**
|
||||
```typescript
|
||||
const stream = await env.AI.run(model, { messages, stream: true });
|
||||
return new Response(stream, { headers: { 'Content-Type': 'text/event-stream' } });
|
||||
```
|
||||
|
||||
## Embeddings
|
||||
|
||||
```typescript
|
||||
const result = await env.AI.run('@cf/baai/bge-base-en-v1.5', {
|
||||
text: ['Query', 'Doc 1', 'Doc 2'] // Batch for efficiency
|
||||
});
|
||||
const [queryEmbed, doc1Embed, doc2Embed] = result.data; // 768-dim vectors
|
||||
```
|
||||
|
||||
## Function Calling
|
||||
|
||||
```typescript
|
||||
const tools = [{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'getWeather',
|
||||
description: 'Get weather for location',
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: { location: { type: 'string' } },
|
||||
required: ['location']
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
const response = await env.AI.run(model, { messages, tools });
|
||||
if (response.tool_calls) {
|
||||
const args = JSON.parse(response.tool_calls[0].function.arguments);
|
||||
// Execute function, send result back
|
||||
}
|
||||
```
|
||||
|
||||
## Image Generation
|
||||
|
||||
```typescript
|
||||
const image = await env.AI.run('@cf/stabilityai/stable-diffusion-xl-base-1.0', {
|
||||
prompt: 'Mountain sunset',
|
||||
num_steps: 20, // 1-20
|
||||
guidance: 7.5 // 1-20
|
||||
});
|
||||
return new Response(image, { headers: { 'Content-Type': 'image/png' } });
|
||||
```
|
||||
|
||||
## Speech Recognition
|
||||
|
||||
```typescript
|
||||
const audioArray = Array.from(new Uint8Array(await request.arrayBuffer()));
|
||||
const result = await env.AI.run('@cf/openai/whisper', { audio: audioArray });
|
||||
console.log(result.text);
|
||||
```
|
||||
|
||||
## Translation
|
||||
|
||||
```typescript
|
||||
const result = await env.AI.run('@cf/meta/m2m100-1.2b', {
|
||||
text: 'Hello',
|
||||
source_lang: 'en',
|
||||
target_lang: 'es'
|
||||
});
|
||||
console.log(result.translated_text);
|
||||
```
|
||||
|
||||
## REST API
|
||||
|
||||
```bash
|
||||
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/meta/llama-3.1-8b-instruct \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-d '{"messages":[{"role":"user","content":"Hello"}]}'
|
||||
```
|
||||
|
||||
## Error Codes
|
||||
|
||||
| Code | Meaning | Fix |
|
||||
|------|---------|-----|
|
||||
| 7502 | Model not found | Check spelling |
|
||||
| 7504 | Validation failed | Verify input schema |
|
||||
| 7505 | Rate limited | Reduce rate or upgrade |
|
||||
| 7506 | Context exceeded | Reduce input size |
|
||||
|
||||
## Performance Tips
|
||||
|
||||
1. **Batch embeddings** - single request for multiple texts
|
||||
2. **Stream long responses** - reduce perceived latency
|
||||
3. **Accept cold starts** - first request ~1-3s, subsequent ~100-500ms
|
||||
Reference in new issue
Block a user