yls_agi_sdk_dart 0.1.2 copy "yls_agi_sdk_dart: ^0.1.2" to clipboard
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-sdkflutter_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.openAiProvider.geminiProvider.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.openaiChat
  • YlsDefaultModels.openaiImageOuter
  • YlsDefaultModels.openaiImageModel
  • YlsDefaultModels.geminiChat
  • YlsDefaultModels.claudeChat
  • YlsDefaultModels.geminiImage
  • YlsOptionPresets.precise()
  • YlsOptionPresets.balanced()
  • YlsOptionPresets.creative()
  • YlsOptionPresets.image()

底层 API #

如果你需要完全控制请求,也可以直接使用导出的 FRB 低层类型,例如:

  • ClientConfig
  • ChatRequest
  • ChatMessage
  • MessagePart
  • ChatGptImageRequest
  • ChatGptImageResponse
  • ChatGptReferenceImage
  • GeminiImageRequest
  • GeminiImageResponse
  • YlsAgiClient
  • chat(...)
  • chatStream(...)
  • generateChatgptImage(...)
  • generateGeminiImage(...)
0
likes
130
points
0
downloads

Documentation

API reference

Publisher

verified publisheritbug.shop

Weekly Downloads

Flutter/Dart SDK for the YLS AGI gateway, bridged from yls-agi-rust-sdk with flutter_rust_bridge.

Topics

#ai #llm #openai #claude #gemini

License

MIT (license)

Dependencies

flutter, flutter_rust_bridge, freezed_annotation, plugin_platform_interface

More

Packages that depend on yls_agi_sdk_dart

Packages that implement yls_agi_sdk_dart