yls_agi_sdk_dart 0.1.2
yls_agi_sdk_dart: ^0.1.2 copied to clipboard
Flutter/Dart SDK for the YLS AGI gateway, bridged from yls-agi-rust-sdk with flutter_rust_bridge.
yls_agi_sdk_dart #
yls_agi_sdk_dart 是基于 yls-agi-rust-sdk 和 flutter_rust_bridge 封装的 Flutter/Dart SDK。
它提供:
- 统一的 OpenAI、Gemini、Claude 聊天接口
- 流式聊天输出
- 多模态输入:文本、图片 URL、base64 图片
- OpenAI
gpt-image-2生图与参考图编辑 - Gemini 生图与参考图编辑
- 高层 provider facade 与更接近官方 SDK 的命名空间
- 需要时可直接访问底层 FRB 生成类型
安装 #
dependencies:
yls_agi_sdk_dart: ^0.1.2
初始化 #
import 'package:flutter/widgets.dart';
import 'package:yls_agi_sdk_dart/yls_agi_sdk_dart.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await YlsAgi.init();
}
创建配置 #
final config = YlsConfigFactory.ylsAgi(
apiKey: 'your-api-key',
chatgptImageApiKey: 'your-codex-key',
proxy: YlsConfigFactory.noProxy(),
);
如果你需要自定义 base URL 或认证方式,也可以改用 YlsConfigFactory.gateway(...)。
快速开始 #
final openai = YlsAgi.openai(config);
final response = await openai
.request(YlsModels.openai.gpt41)
.system('You are a concise assistant.')
.user('用一句话介绍 Rust')
.generationOptions(
temperature: 0.2,
maxTokens: 256,
)
.chat();
print(response.contentText);
官方风格 API #
responses.create(...) #
final openai = YlsAgi.openai(config);
final response = await openai.responses.create(
input: '用一句话解释 Rust 的所有权机制。',
system: '你是一个简洁的助手。',
options: YlsOptionPresets.precise(maxTokens: 128),
);
print(response.contentText);
responses.stream(...) #
final gemini = YlsAgi.gemini(config);
await for (final chunk in gemini.responses.stream(
input: '请流式输出一段简短介绍',
options: YlsOptionPresets.balanced(),
)) {
print(chunk.textDelta);
if (chunk.isDone) break;
}
chat.completions.create(...) #
final claude = YlsAgi.claude(config);
final response = await claude.chat.completions.create(
messages: [
YlsMessageBuilder.systemText('You are a concise assistant.'),
YlsMessageBuilder.userText('用一句话总结 Dart isolate。'),
],
options: YlsOptionPresets.precise(),
);
chat.completions.stream(...) #
final openai = YlsAgi.openai(config);
await for (final chunk in openai.chat.completions.stream(
messages: [
YlsMessageBuilder.userText('请流式输出一段简短的产品介绍。'),
],
)) {
print(chunk.textDelta);
}
Provider 快捷入口 #
final openai = YlsAgi.openai(config);
final gemini = YlsAgi.gemini(config);
final claude = YlsAgi.claude(config);
这些 facade 会把 provider 预先绑定好,因此不需要你每次都手动传 Provider.openAi、Provider.gemini、Provider.claude。
链式 Builder #
final request = openai
.request()
.system('You are a concise assistant.')
.user('Say hello in Chinese.')
.generationOptions(
temperature: 0.2,
maxTokens: 64,
)
.build();
final response = await openai.chat(request);
也可以直接从 builder 发请求:
final response = await openai
.request()
.system('You are a concise assistant.')
.user('Say hello in Chinese.')
.chat();
多模态输入 #
final imageMessage = YlsMessageBuilder
.userText('描述这张图片')
.addImageBase64(
mimeType: YlsMimeTypes.png,
dataBase64: imageBase64,
);
final response = await YlsAgi.gemini(config).chat.completions.create(
model: YlsModels.gemini.gemini3ProPreview,
messages: [imageMessage],
);
也可以使用 responses.create(inputParts: [...]):
final response = await YlsAgi.gemini(config).responses.create(
inputParts: [
YlsMessageBuilder.text('描述这张图片'),
YlsMessageBuilder.imageBase64(
mimeType: YlsMimeTypes.png,
dataBase64: imageBase64,
),
],
);
Gemini 生图 #
final gemini = YlsAgi.gemini(config);
final imageResponse = await gemini.images.generate(
prompt: '生成一只戴墨镜的写实橘猫。',
options: YlsOptionPresets.image(),
);
final firstImage = imageResponse.images.first;
print(firstImage.mimeType);
await firstImage.saveToFile('/tmp/cat.png');
Gemini 参考图编辑 #
final edited = await gemini.imageRequest()
.prompt('把它改成赛博朋克风格')
.referenceImage(
mimeType: YlsMimeTypes.png,
dataBase64: imageBase64,
)
.generate();
OpenAI gpt-image-2 生图 #
final openai = YlsAgi.openai(config);
final imageResponse = await openai.images.generate(
prompt: '一个打磨完整的 2D 塔防炮台,透明背景。',
);
await imageResponse.image.saveToFile('/tmp/turret.png');
高层默认使用:
- 外层模型:
YlsDefaultModels.openaiImageOuter - 图片模型:
YlsDefaultModels.openaiImageModel
如果你要手动覆盖,也可以这样写:
final imageResponse = await openai.images.generate(
model: YlsModels.openai.gpt54,
imageModel: YlsModels.openai.gptImage2,
prompt: '一个精致的奇幻药水图标,透明背景。',
);
OpenAI gpt-image-2 参考图编辑 #
final edited = await openai.imageRequest()
.prompt('把这张草图转成精致的游戏图标')
.referenceUrl('https://example.com/sketch.png')
.referenceFileId('file-123')
.generate();
也支持 base64 参考图:
final edited = await openai.imageRequest()
.prompt('把这张草图转成精致的游戏图标')
.referenceBase64(
mimeType: YlsMimeTypes.png,
dataBase64: imageBase64,
)
.generate();
默认模型与预设参数 #
高层封装内置了:
YlsDefaultModels.openaiChatYlsDefaultModels.openaiImageOuterYlsDefaultModels.openaiImageModelYlsDefaultModels.geminiChatYlsDefaultModels.claudeChatYlsDefaultModels.geminiImageYlsOptionPresets.precise()YlsOptionPresets.balanced()YlsOptionPresets.creative()YlsOptionPresets.image()
底层 API #
如果你需要完全控制请求,也可以直接使用导出的 FRB 低层类型,例如:
ClientConfigChatRequestChatMessageMessagePartChatGptImageRequestChatGptImageResponseChatGptReferenceImageGeminiImageRequestGeminiImageResponseYlsAgiClientchat(...)chatStream(...)generateChatgptImage(...)generateGeminiImage(...)