An open API service indexing awesome lists of open source software.

https://github.com/faisalaffan/claudio

Anthropic SDK For Dart Ecosystem
https://github.com/faisalaffan/claudio

ai anthropic claude dart ecosystem flutter open-source package

Last synced: 24 days ago
JSON representation

Anthropic SDK For Dart Ecosystem

Awesome Lists containing this project

README

          


Claudio Banner


๐Ÿ‡ฌ๐Ÿ‡ง English ยท ๐Ÿ‡ฎ๐Ÿ‡ฉ Bahasa Indonesia

# claudio

Multi-provider AI SDK for Dart/Flutter โ€” one interface, many providers.

[![pub package](https://img.shields.io/pub/v/claudio_sdk.svg)](https://pub.dev/packages/claudio_sdk)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

## Install

```yaml
dependencies:
claudio_sdk: ^0.1.0
```

## Quick Start

```dart
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

```dart
// 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()` and `createStream()` 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

```dart
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

```dart
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

---


Claudio