패키지, 저장소 및 앱 카테고리 검색

패키지 상세v8.0.0

dart_openai

OpenAI API용 Dart SDK(GPT-3 및 DALL-E), OpenAI의 최첨단 AI 모델의 능력을 Dart 애플리케이션에 쉽게 통합할 수 있습니다.

AndroidiOSmacOSWindowsLinux
30일 다운로드
1.8만
좋아요
576
Pub 점수
160

패키지 설치

flutter pub add dart_openai

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

dart_openai 패키지는 GPT-3 및 DALL-E를 포함한 OpenAI의 고급 AI 모델을 Dart 애플리케이션에 통합하기 위한 Dart SDK를 제공합니다. OpenAI의 API와 원활하게 통신할 수 있게 해주며, 개발자가 텍스트 생성, 이미지 생성, 대화형 AI 기능 구현이 가능하게 합니다. 이 패키지는 Android, iOS, macOS, Windows, Linux 등 여러 플랫폼을 지원하여 크로스플랫폼 앱 개발에 이상적입니다. 간단한 API 접근과 명확한 문서를 통해 Flutter 및 기타 Dart 기반 프로젝트에 생성형 AI 기능을 쉽게 통합할 수 있습니다.

사용 사례

  • GPT-3를 사용한 텍스트 생성
  • DALL-E를 사용한 이미지 생성
  • 인공지능 기반 챗봇 구축
  • 모바일 및 데스크톱 앱에 AI 통합하기
  • 콘텐츠 자동화 도구 만들기

주요 기능

  • GPT-3 및 DALL-E API 지원
  • 크로스 플랫폼 호환성
  • 간단하고 직관적인 Dart 인터페이스
  • 실시간 API 상호작용
  • 포괄적인 오류 처리

적합한 대상

  • Flutter 개발자
  • AI 애플리케이션 제작자
  • 풀스택 개발자
  • AI 기능을 구축하는 스타트업
  • 교육 또는 프로토타이핑 프로젝트

고려 사항

  • OpenAI API 키가 필요합니다
  • 구독에 따라 레이트 제한이 적용됩니다
  • 네트워크 연결 필요
  • API 응답의 잠재적 지연
  • 무료 레벨을 초과한 사용과 관련된 비용

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

dart_openai

Pub Version Pub Likes Pub Points Tests License

Unofficial Dart/Flutter SDK for the OpenAI API. Typed clients for every major API surface: Responses, Chat Completions, Realtime, Videos, Batch, Fine-tuning, Vector Stores, Evals, Administration and more. Compiles and runs on every platform: Android, iOS, macOS, Linux, Windows, web, and server-side Dart.

Maintained by Anas Fikhi (@anasfik).

Installation

dependencies:
  dart_openai: ^8.0.0
dart pub get

Quickstart

import 'package:dart_openai/dart_openai.dart';

Future<void> main() async {
  final client = OpenAIClient(apiKey: Platform.environment['OPENAI_API_KEY']!);

  final completion = await client.chat.create(
    model: 'gpt-4o',
    messages: [
      const OpenAIChatCompletionChoiceMessageModel(
        role: OpenAIChatMessageRole.user,
        content: 'Say hello in five words.',
      ),
    ],
  );

  print(completion.choices.first.message.content);
}

Prefer the global facade? It still works:

OpenAI.apiKey = 'sk-...';
await OpenAI.instance.chat.create(model: 'gpt-4o', messages: [...]);

Multiple clients and compatible providers

Every OpenAIClient owns its configuration. Run several accounts, Azure resources, or OpenAI-compatible providers side by side without global state:

final production = OpenAIClient(apiKey: 'sk-prod');

final deepseek = OpenAIClient(
  apiKey: 'ds-...',
  baseUrl: 'https://api.deepseek.com',
);

final localLlama = OpenAIClient(
  apiKey: 'not-needed',
  baseUrl: 'http://localhost:1234/v1',
);

Works with any provider that implements the OpenAI wire format: DeepSeek, LM Studio, Ollama, Groq, Together, Azure OpenAI gateways, and others.

Streaming

One SSE engine backs every streaming endpoint. It closes on [DONE], never duplicates events, and surfaces errors as exceptions instead of swallowing them.

Responses API events:

final events = client.responses.createStream(
  model: 'gpt-4o',
  input: 'Write a haiku about databases.',
);

await for (final event in events) {
  if (event['type'] == 'response.output_text.delta') {
    stdout.write(event['delta']);
  }
}

Chat Completions deltas:

final chunks = client.chat.createStream(model: 'gpt-4o', messages: messages);

await for (final chunk in chunks) {
  stdout.write(chunk.choices.first.delta?.content);
}

Images emit partial results as they render (createStream), and stored completions support retrieval and listing.

API coverage

API Accessor
Responses (incl. streaming, compact) client.responses
Chat Completions (tools, vision, reasoning params, stored completions) client.chat
Conversations client.conversations
Audio (speech, transcription, translation, voices, consents) client.audio
Images (generation, edit, variation, streaming partials) client.image
Embeddings client.embedding
Files (incl. byte uploads) client.file
Uploads (multipart sessions) client.uploads
Batch client.batch
Vector Stores (+ files, + file batches) client.vectorStores
Containers (+ files) client.container
Models / Moderation client.model / client.moderation
Evals client.evals
Graders (incl. run and validate) client.graders
Fine-tuning jobs (current API) client.fineTuning
Videos (generate, remix, download) client.videos
Realtime sessions and client secrets client.realtime
Skills client.skills
Content provenance checks client.provenance
Administration (projects, users, invites, audit logs, costs, rate limits, API keys) client.organization
Completions and Edits (legacy) client.completion / client.edit

Not planned: Assistants v1 and Threads (superseded by the Responses API), ChatKit.

Resilience

Requests retry automatically on transient failures (connection errors, HTTP 408/429/5xx). GET requests always retry; POST retries only on rate limits and server errors. Backoff is exponential with jitter and the server's Retry-After header takes precedence.

// Default policy: 2 total attempts.
final client = OpenAIClient(apiKey: 'sk-...');

// Custom:
final aggressive = OpenAIClient(
  apiKey: 'sk-...',
  retryPolicy: const OpenAIRetryPolicy(maxAttempts: 4),
);

Streaming has an idle watchdog: a connection that stops delivering bytes fails with StreamTimedOutException after the request timeout instead of hanging forever. After any call, quota is observable:

await client.model.list();
print(OpenAIResponseMeta.lastRateLimit?.remainingRequests);

Azure OpenAI

final azure = OpenAIClient(
  apiKey: '<azure-key>',
  azure: const OpenAIAzure(
    resource: 'my-resource',
    apiVersion: '2024-10-21',
    deployments: {'gpt-4o': 'gpt4o-prod'},
  ),
);

// model is rewritten to your deployment automatically:
await azure.chat.create(model: 'gpt-4o', messages: messages);

Files on every platform

Upload APIs take a platform-neutral file type — no dart:io, so the same code runs on web:

// From disk (native):
final file = await loadOpenAIFile('training.jsonl');
await client.file.upload(file: file, purpose: 'fine-tune');

// From memory (anywhere, including web):
await client.file.uploadBytes(
  bytes: utf8.encode(jsonl),
  fileName: 'training.jsonl',
  purpose: 'fine-tune',
);

Error handling

All failures throw typed exceptions you can catch precisely:

try {
  await client.chat.create(model: 'gpt-4o', messages: messages);
} on RequestFailedException catch (e) {
  // Non-2xx from the API: e.message, e.statusCode
} on MissingApiKeyException catch (e) {
  // No key configured for this client
} on OpenAIUnexpectedException catch (e) {
  // Malformed response that is not an API error payload
}

Error payloads are normalized across providers. Whether a provider returns {"error": {"message": ...}}, a bare string error, or an HTML error page, you get a RequestFailedException with the body preserved.

Configuration

Per-client options: apiKey, organization, baseUrl, version, requestsTimeOut, extraHeaders.

Global facade equivalents: OpenAI.apiKey, OpenAI.organization, OpenAI.baseUrl, OpenAI.requestsTimeOut, plus OpenAI.showLogs and OpenAI.showResponsesLogs for request debugging.

Reasoning models (o-series, GPT-5 family): pass reasoningEffort: 'low' and use maxTokens, which maps to max_completion_tokens. Incompatible sampling parameters are rejected by the API; use extraParams to pass anything not yet modeled.

Migrating from 6.x / 7.x

Nothing breaks if you used the global facade. To adopt per-client instances, replace global configuration with construction:

// Before (still supported)
OpenAI.apiKey = 'sk-...';
await OpenAI.instance.chat.create(...);

// After
final client = OpenAIClient(apiKey: 'sk-...');
await client.chat.create(...);

8.0.0 replaces dart:io File parameters with the platform-neutral OpenAIFile type (await loadOpenAIFile(path) on native, OpenAIFile(bytes:, fileName:) anywhere), and audio.createSpeech now returns bytes.

Full list of changes: CHANGELOG.md.

Testing

The suite runs entirely against mocked HTTP — request shapes, SSE decoding, malformed-payload fuzzing, retry behavior. No API keys required:

dart test

Live integration tests run only when OPEN_AI_API_KEY is present in the environment.

Contributing

Bug reports and feature requests go through GitHub Issues. Pull requests welcome: keep diffs focused, add or update tests for changed behavior, and follow the existing module layout (lib/src/instance/<module>/ with models under lib/src/core/models/<module>/). Commit messages use Conventional Commits.

License

MIT. See LICENSE.

Support

카테고리

의존성

의존성 목록 5 개

소스 저장소

이 패키지를 사용하는 프로젝트