openai_api 0.3.7 copy "openai_api: ^0.3.7" to clipboard
openai_api: ^0.3.7 copied to clipboard

A Dart API client for OpenAI. You can use it in Dart or Flutter applications. for more information please refer to Openai API reference.

example/main.dart

import 'dart:convert';

import 'package:openai_api/openai_api.dart';

import 'lib/env.dart';
import 'lib/tools.dart';

void main() async {
  final client = OpenaiClient(
    config: OpenaiConfig(
      apiKey: Env.apiKey,
      baseUrl: Env.baseUrl,
      httpProxy: Env.httpProxy,
    ),
  );

  // chatCompletionStsream(client);
  await runConversation(client);
  // chatCompletion(client);
  // await transcripte(client);
  // Future.delayed(Duration(seconds: 10));
  // await translate(client);

  // await testModel(client);

  // List<int> mp3 = await testSpeech(client);
  // await File("./hello.mp3").writeAsBytes(mp3);

  // final r = await testImageGenerate(client);
  // print(r);

  // print(await client.createImage(
  //   ImageRequest(
  //     prompt: "a girl on the beach",
  //     responseFormat: 'b64_json',
  //   ),
  // ));

  // print(await client.createImageEdit(
  //     ImageEditRequest(image: "assets/image.png", prompt: "打一把太阳伞")));
  client.client.close();
}

Future testSpeech(OpenaiClient client) async {
  final result = await client.createSpeech(
    SpeechRequest(
      input: "Hello, my name is John and I'm a doctor.",
      voice: Voices.alloy,
      responseFormat: AudioFormats.mp3,
    ),
  );
  return result;
}

Future testImageGenerate(OpenaiClient client) async {
  final result = await client.createImage(ImageRequest(
    prompt: "a cute yellow brown dog",
    model: Models.dallE3,
    // style: 'natural',
  ));
  return result;
}

Future<void> testModel(OpenaiClient client) async {
  final result = await client.listModels();
  print(result);

  print(await client.getModel(Models.gpt3_5Turbo));
}

Future<void> transcripte(OpenaiClient client) async {
  final result = await client.createTranscription(
    TranscriptionRequest(
      file: 'assets/ttsmaker-file-2023-3-22-14-57-0.mp3',
    ),
  );
  print(result.text);
}

Future<void> translate(OpenaiClient client) async {
  final translateResult = await client.createTraslation(
    TranslationRequest(
      file: 'assets/ttsmaker-file-2023-3-22-17-27-30.mp3',
      // file: "assets/ttsmaker-file-2023-3-22-14-2-35.mp3",
      // Wierd. this will be translated into Pinyin for Chinese if prompt not set.
      // 你好朋友,我好想你。
      // Ni Hao Peng You, Wo Hao Xiang Ni
      // prompt: "Please translate into Chinese.",
    ),
  );
  print(translateResult.text);
}

void chatCompletionStsream(OpenaiClient client) {
  client.sendChatCompletionStream(
    ChatCompletionRequest(
      model: Models.gpt4_1106VisonPreview,
      maxTokens: 2000,
      stream: true,
      messages: [
        ChatMessage.user(
          content: "show me golang code sample here",
        ),
      ],
    ),
    onSuccess: (p0) {
      print(p0);
    },
  );
}

void chatCompletion(OpenaiClient client) async {
  final result = await client.sendChatCompletion(
    ChatCompletionRequest(
      model: Models.gpt3_5Turbo_0613,
      messages: [
        ChatMessage(
            content: "What's the weather like in Boston in celsius?",
            role: ChatMessageRole.user),
        ChatMessage(
          content: jsonEncode({
            "temperature": "22",
            "unit": "celsius",
            "description": "Sunny",
          }),
          name: 'get_current_weather',
          role: ChatMessageRole.function,
        ),
      ],
      functions: [
        ChatFunction(
          name: "get_current_weather",
          description: "Get the current weather in a given location",
          parameters: ChatFunctionParameters(
            type: "object",
            properties: {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA",
              },
              "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"]
              },
            },
            required: ["location"],
          ),
        )
      ],
      functionCall: "auto",
    ),
  );
  print(result);
}

Future runConversation(OpenaiClient client) async {
  final messages = [
    ChatMessage.user(
        content:
            "What's the weather like in San Francisco, Tokyo, Shanghai and Paris?")
  ];

  final tools = [
    ChatTool(
        function: ChatFunction(
      name: "get_current_weather",
      description: "Get the current weather in a given location",
      parameters: ChatFunctionParameters(
        type: "object",
        properties: {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA",
          },
          "unit": {
            "type": "string",
            "enum": ["celsius", "fahrenheit"]
          }
        },
        required: ["location"],
      ),
    ))
  ];
  final result = await client.sendChatCompletion(ChatCompletionRequest(
    model: Models.gpt4_1106Preview,
    messages: messages,
    tools: tools,
    toolChoice: "auto",
  ));
  final msg = result.choices.first.message;
  final toolCalls = msg?.toolCalls;
  if (toolCalls != null) {
    final availableFunctions = {
      "get_current_weather": getCurrentWeatherOnline,
    };
    messages.add(msg!);
    for (final toolCall in toolCalls) {
      final functionName = toolCall.function.name;
      final toCall = availableFunctions[functionName];
      final args = json.decode(toolCall.function.arguments);
      final res = await toCall!.call(
        args["location"],
      );
      messages.add(
        ChatMessage.tool(
          content: res,
          toolCallId: toolCall.id,
          name: functionName,
        ),
      );
    }
    final response = await client.sendChatCompletion(ChatCompletionRequest(
      messages: messages,
      model: Models.gpt4_1106Preview,
    ));
    print(response.choices.first.message?.content);
  }
}
13
likes
140
points
1.61k
downloads

Publisher

verified publishermings.in

Weekly Downloads

A Dart API client for OpenAI. You can use it in Dart or Flutter applications. for more information please refer to Openai API reference.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

cancellation_token_http, envied, envied_generator, freezed_annotation, http_parser, json_annotation

More

Packages that depend on openai_api