claudio_sdk 0.1.6
claudio_sdk: ^0.1.6 copied to clipboard
Multi-provider AI SDK for Dart/Flutter with Anthropic Messages API-compatible interface. Supports Anthropic, DeepSeek, and more.
๐ฌ๐ง English ยท ๐ฎ๐ฉ Bahasa Indonesia
claudio #
Multi-provider AI SDK for Dart/Flutter โ one interface, many providers.
Install #
dependencies:
claudio_sdk: ^0.1.0
Quick Start #
import 'package:claudio_sdk/claudio_sdk.dart';
void main() async {
final client = ClaudioClient(
apiKey: 'sk-ant-your-key',
provider: Provider.anthropic,
);
final msg = await client.messages.create(
CreateMessageRequest(
model: 'claude-sonnet-4-20250514',
maxTokens: 1024,
messages: [
MessageParam(role: 'user', content: 'Hello!'),
],
),
);
print(msg.text);
client.close();
}
Providers #
// Anthropic
ClaudioClient(apiKey: 'sk-ant-...', provider: Provider.anthropic);
// DeepSeek (Anthropic-compatible API)
ClaudioClient(apiKey: 'sk-ds-...', provider: Provider.deepseek);
// Auto-detect from environment
ClaudioClient.fromEnvironment();
Features #
- Messages API โ
create()andcreateStream()with SSE - Multi-tools โ schema builder for type-safe JSON Schema
- Extended thinking โ enabled, disabled, adaptive
- Streaming โ real-time token & tool input chunks
- Error handling โ typed exception hierarchy (auth, rate limit, network, etc.)
- Retry โ exponential backoff + jitter for 429 and 5xx
Tools & Streaming #
final tool = Tool(
name: 'get_weather',
description: 'Weather by city.',
inputSchema: SchemaBuilder().object(
properties: {
'city': SchemaProperty.string(description: 'City name'),
},
required: ['city'],
).build(),
);
final stream = client.messages.createStream(
CreateMessageRequest(
model: 'claude-sonnet-4-20250514',
maxTokens: 1024,
messages: [MessageParam(role: 'user', content: 'Weather in Jakarta?')],
tools: [tool],
),
);
await for (final event in stream) {
if (event is ContentBlockDeltaEvent) {
switch (event.delta) {
case TextDelta(:final text): stdout.write(text);
case InputJsonDelta(:final partialJson): print(partialJson);
}
}
}
Error Handling #
try {
final msg = await client.messages.create(request);
} on AuthenticationException catch (e) {
print('Auth error: ${e.message}');
} on RateLimitException catch (e) {
print('Rate limited, retry after ${e.retryAfter}');
} on ApiException catch (e) {
print('Server error ${e.statusCode}: ${e.message}');
} on NetworkException catch (e) {
print('Network: ${e.message}');
}
License #
MIT