redevrx / chat_gpt_sdk

Flutter ChatGPT
https://pub.dev/packages/chat_gpt_sdk
MIT License
308 stars 157 forks source link
android dart flutter gpt-3 gpt-4 ios openai

ChatGPT Application with flutter

ChatGPT is a chat-bot launched by OpenAI in November 2022. It is built on top of OpenAI's GPT-3.5 family of large language models, and is fine-tuned with both supervised and reinforcement learning techniques.

Unofficial

"community-maintained” library.

OpenAI Powerful Library Support GPT-4


GitHub commit activity GitHub contributors GitHub Repo stars GitHub Workflow Status GitHub Pub Points Pub Popularity Pub Likes Pub Version Code Coverage


Features

Install Package

chat_gpt_sdk: 3.0.8

Create OpenAI Instance

final openAI = OpenAI.instance.build(token: token,baseOption: HttpSetup(receiveTimeout: const Duration(seconds: 5)),enableLog: true);

Change Access Token

openAI.setToken('new-access-token');
///get token
openAI.token;

Complete Text

  void _translateEngToThai() async{
  final request = CompleteText(
          prompt: translateEngToThai(word: _txtWord.text.toString()),
          maxToken: 200,
          model: TextDavinci3Model());

  final response = await openAI.onCompletion(request: request);

  ///cancel request
  openAI.cancelAIGenerate();
  print(response);
}

_translateFuture = openAI.onCompletion(request: request);

///ui code FutureBuilder<CTResponse?>( future: _translateFuture, builder: (context, snapshot) { final data = snapshot.data; if(snapshot.connectionState == ConnectionState.done) return something if(snapshot.connectionState == ConnectionState.waiting) return something return something })


- ### GPT 3 with SSE
```dart
 void completeWithSSE() {
  final request = CompleteText(
          prompt: "Hello world", maxTokens: 200, model: TextDavinci3Model());
  openAI.onCompletionSSE(request: request).listen((it) {
    debugPrint(it.choices.last.text);
  });
}

Chat Complete (GPT-4 and GPT-3.5)

  void chatComplete() async {
    final request = ChatCompleteText(messages: [
      Map.of({"role": "user", "content": 'Hello!'})
    ], maxToken: 200, model: Gpt41106PreviewChatModel());

    final response = await openAI.onChatCompletion(request: request);
    for (var element in response!.choices) {
      print("data -> ${element.message?.content}");
    }
  }
  void gptFunctionCalling() async {
    final request = ChatCompleteText(
      messages: [
        Messages(
                role: Role.user,
                content: "What is the weather like in Boston?",
                name: "get_current_weather"),
      ],
      maxToken: 200,
      model: Gpt41106PreviewChatModel(),
      tools: [
        {
          "type": "function",
          "function": {
            "name": "get_current_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
              "type": "object",
              "properties": {
                "location": {
                  "type": "string",
                  "description": "The city and state, e.g. San Francisco, CA"
                },
                "unit": {
                  "type": "string",
                  "enum": ["celsius", "fahrenheit"]
                }
              },
              "required": ["location"]
            }
          }
        }
      ],
      toolChoice: 'auto',
    );

    ChatCTResponse? response = await openAI.onChatCompletion(request: request);
}
  void imageInput() async {
  final request = ChatCompleteText(
    messages: [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "What’s in this image?"},
          {
            "type": "image_url",
            "image_url": {"url": "image-url"}
          }
        ]
      }
    ],
    maxToken: 200,
    model: Gpt4VisionPreviewChatModel(),
  );

  ChatCTResponse? response = await openAI.onChatCompletion(request: request);
  debugPrint("$response");
}

Assistants


- ### Create Assistant File
```dart
void createAssistantFile() async {
  await openAI.assistant.createFile(assistantId: '',fileId: '',);
}

Threads

///with message void createThreads() async { final request = ThreadRequest(messages: [ { "role": "user", "content": "Hello, what is AI?", "file_ids": ["file-abc123"] }, { "role": "user", "content": "How does AI work? Explain it in simple terms." }, ]);

await openAI.threads.createThread(request: request); }


- ### Retrieve thread
```dart
 void retrieveThread()async {
  final mThread = await openAI.threads.retrieveThread(threadId: 'threadId');
}

Messages


## Error Handle

```dart
///using catchError
 openAI.onCompletion(request: request)
    .catchError((err){
      if(err is OpenAIAuthError){
        print('OpenAIAuthError error ${err.data?.error?.toMap()}');
      }
      if(err is OpenAIRateLimitError){
        print('OpenAIRateLimitError error ${err.data?.error?.toMap()}');
      }
      if(err is OpenAIServerError){
        print('OpenAIServerError error ${err.data?.error?.toMap()}');
      }
      });

///using try catch
 try {
   await openAI.onCompletion(request: request);
 } on OpenAIRateLimitError catch (err) {
   print('catch error ->${err.data?.error?.toMap()}');
 }

///with stream
 openAI
        .onCompletionSSE(request: request)
        .transform(StreamTransformer.fromHandlers(
          handleError: (error, stackTrace, sink) {
              if (error is OpenAIRateLimitError) {
              print('OpenAIRateLimitError error ->${error.data?.message}');
              }}))
        .listen((event) {
          print("success");
        });

Q&A

Q: What is human life expectancy in the United States?
A: Human life expectancy in the United States is 78 years.

Generate Image With Prompt

Edit

///CancelData CancelData? mCancel; void onCancel(CancelData cancelData) { mCancel = cancelData; }

mCancel?.cancelToken.cancel("canceled ");


- ### Stop Edit
  - image
  - prompt
```dart
openAI.edit.editImage(request,onCancel: onCancel);

///CancelData
CancelData? mCancel;
void onCancel(CancelData cancelData) {
  mCancel = cancelData;
}

mCancel?.cancelToken.cancel("canceled edit image");

///CancelData CancelData? mCancel; void onCancel(CancelData cancelData) { mCancel = cancelData; }

mCancel?.cancelToken.cancel("canceled embedding");


- Stop Audio
  - translate
  - transcript
```dart
openAI.audio.transcribes(request,onCancel: onCancel);

///CancelData
CancelData? mCancel;
void onCancel(CancelData cancelData) {
  mCancel = cancelData;
}

mCancel?.cancelToken.cancel("canceled audio transcribes");

///CancelData CancelData? mCancel; void onCancel(CancelData cancelData) { mCancel = cancelData; }

mCancel?.cancelToken.cancel("canceled uploadFile");


## File

- ### Get File
```dart
void getFile() async {
  final response = await openAI.file.get();
  print(response.data);
}

Audio

Embedding

Fine Tune

Moderations

Model&Engine

final models = await openAI.listModel();
final engines = await openAI.listEngine();

Translate App

ChatGPT Demo App

Google Play

Video Tutorials

Docs (Support Thai)

ChatGPT Part 1 ChatGPT Part 2 ChatGPT Part 2