ChatGPT , Whisper, Embeddings and DALL-E APIs are added to the can uses.
Support this project to help more people benefit! You can contribute ⭐.
You can fulfill nearly all your API needs provided by OpenAI by using this project, which is open-source and free software, in your application.
This package communicates with the API using HTTP requests. It's a straightforward package with simple usage. If you're new to Dart/Flutter, you won't have any difficulty using it in your application!
Feel free to use this package in your application, it's always ready to work without requiring updates, anytime, anywhere, the OpenAI APIs package
Unofficial
OpenAI does not have any official Dart library.
✨ Key Features
- Methods designed for ease of use, mirroring the OpenAI documentation precisely, and enhanced with additional features to optimize usage with the Dart Programming Language.
- Authorize once, utilize it anywhere and at any time within your application.
- User-friendly for developers.
- Not all OpenAI APIs sections are included in our package. Soon, all of them will be added
- Comprehensive examples/snippets provided for nearly all implemented features within the package, located in the
/example
folder.
👑 Code Progress (65 %)
x
Authenticationx
Chat (GPT)x
Editsx
Imagesx
Embeddingsx
Audiox
Speech
💫 Testing Progress (45 %)
x
Authenticationx
Chat (GPT)x
Imagesx
Audiox
Speech
📜 Full Documentation:
For the full documentation on library check here.
🟢 Usage
Authentication
API key
The OpenAI API utilizes API keys for authentication. You can obtain your account's API key by visiting theAPI keys section of your account.
import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // you must add
// lib/main.dart
void main() {
OpenAI.apiKey = 'your-api-key';
// ..
}
If there is no apiKey
data provided, you will be prompted with a warning message to enter your apiKey
data.
If you have an apiKey
but it has expired or is invalid, you will receive an error message as the output from the OpenAI APIs
If there is no model
specified, you will be prompted with a warning message to select your preferred model.
If you have specified a model
but it is invalid or not supported, you will receive an error message indicating the issue
Setting an organization
If you want to configure an organization
when using the OpenAI API, you can use the following code snippet:
// Enter the user's organization ID
OpenAI.organization = 'org-HZ3hl5Z89fEYVUufQOCzunok';
Settings a default request timeout
This library utilizes the http
package for API requests, which comes with a default 30-second timeout. Any request exceeding this duration is canceled and throws an exception. To avoid unexpected cancellations, you can configure a custom default timeout:
// Set the default request timeout to 60 seconds (adjust as needed)
OpenAI.connectionTimeout = Duration(seconds: 60);
With this, your API calls will now wait up to 60 seconds for a response before raising an exception, allowing more breathing room for potentially slower requests
.
Key Points:
- Adjustable timeout: Set the desired response time using OpenAI.requestsTimeout.
- Duration format: Use the Duration class to specify the timeout in seconds (e.g., Duration(seconds: 45))
- Improved flexibility: Avoid unwanted cancellations for longer-running requests.
Caution:
- Be mindful of exceeding reasonable timeouts, as it can significantly impact performance and responsiveness.
- Adjust the timeout value based on your specific use case and expected response times.
Additional Notes:
- Consider implementing custom timeout logic for individual requests if needed.
- Monitor and manage performance implications of increased timeout values.
Chat (GPT)
Create chat completion
Provides a predicted completion for a chat message(s) based on the provided properties:
if your want used to old
version:
MessageData result = await openAI.chat(version: 'old', prompt: 'hello world!');
print(result.message);
and if your want used new
version:
/// This code snippet demonstrates how to use the `openAI` package to perform a chat-based conversation.
/// It creates a list of messages, where each message has a role (system or user) and content.
/// The `openAI.chat` method is then called with the list of messages to initiate the chat.
/// The result of the chat is printed, and then the response is formatted using the `FormatMessage` class.
/// The formatted response is printed as well.
List<Message> message = [
Message(role: 'system', content: 'you are my help ai'),
Message(role: 'user', content: 'I need help with my computer'),
];
MessageData result = await openAI.chat(messages: message);
print(result.message);
// if you want printing other information:
print(result.model);
The chat
method is used to interact with the OpenAI API for generating conversational responses. It takes various parameters to customize the behavior of the conversation.
Parameters
-
version
: Specifies the version of the OpenAI API to use. Defaults to 'new'. -
messages
: A list of previous messages in the conversation. Each message should be an instance of theMessage
class. -
prompt
: The initial prompt to start the conversation. -
maxTokens
: The maximum number of tokens to generate in the response. Defaults to 100. -
temperature
: Controls the randomness of the response. Higher values lead to more randomness. Defaults to 0.3. -
topP
: Controls the diversity of the response by sampling from the topP tokens. Defaults to 1.0. -
n
: Specifies the number of responses to generate. Defaults to 1. -
frequencyPenalty
: Applies a penalty to the frequency of tokens in the response. Defaults to 0. -
logitBias
: A dictionary specifying logit biases for tokens. -
logprobs
: Whether to include log probabilities in the response. -
topLogprobs
: Specifies the number of log probabilities to include in the response. -
presencePenalty
: Applies a penalty to the presence of tokens in the response. -
responseFormat
: Specifies the format of the response. Can be 'json' or 'text'. -
seed
: A seed value for generating random responses. -
stop
: Specifies conditions to stop generating tokens. -
stream
: Whether to stream responses as they are generated. -
speed
: Controls the speed of the response generation.Usage Example
import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // you must add
void main() {
// Initialize OpenAI instance
OpenAI.apiKey = 'your-api-key';
// Define previous messages
List<Message> messages = [
Message(role: 'system', content: 'Hello, how can I assist you today?')
];
OpenAI openAi = OpenAI();
// Generate response
Future<MessageData> response = openAi.chat(
messages: messages,
// for old version prompt: 'I need help with a programming problem.',
maxTokens: 150,
temperature: 0.7,
n: 1,
stream: false,
);
print(response.toString());
}
🚀 OpenAI Embeddings
The embeddings
method allows you to generate text embeddings using the OpenAI Embeddings API. Text embeddings are numerical representations of text data that capture the semantic meaning of the text.
Parameters
input
(required): The input text for which you want to generate embeddings.encodingFormat
: The encoding format of the input text. Defaults to 'float'.dimensions
: The dimensions of the input text.user
: The user ID associated with the request.maxTokens
: The maximum number of tokens to generate in the response. Defaults to 100.temperature
: Controls the randomness of the response. Higher values lead to more diverse embeddings. Defaults to 0.3.topP
: Controls the diversity of the response by sampling from the topP tokens. Defaults to 1.0.n
: Specifies the number of embeddings to generate. Defaults to 1.
Usage
import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // you must add
void main() async {
// Initialize OpenAI instance
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// Generate embeddings
OpenAIEmbeddings embeddings = await openAi.embeddings(
input: 'Text input for generating embeddings',
encodingFormat: 'float',
dimensions: 512,
user: 'user_id',
maxTokens: 100,
temperature: 0.3,
topP: 1.0,
n: 1,
);
print(embeddings);
}
Response
The response from the embeddings method is a string representing the embeddings
generated for the input text.
{
"embeddings": [
0.123,
0.456,
...
]
}
Notes
Make sure to provide your API key when initializing the `OpenAI` instance.
If the `apiKey` is not provided or is invalid, you will receive an error message as the output.
Ensure that the specified model is supported by the Embeddings application, otherwise, an error will be thrown.
🖼️ OpenAI Image Generation
The generateImage
method allows you to generate images using the OpenAI Image API. You can generate images based on prompts, edit existing images, and create variations of images.
Parameters
prompt
(required): The prompt for generating or editing the image.n
(required): The number of images to generate.size
(required): The size of the image to generate.edit
: Specifies whether to perform image editing. Defaults tofalse
.image
: The path to the image file when editing an image.mask
: The path to the mask file when editing an image.variations
: Specifies whether to generate variations of an image. Defaults tofalse
.response_format
: The desired format of the response. Defaults to "url".style
: The style of the generated image. Defaults to "vivid".
Usage
import 'package:openai_package/openai_package.dart';
void main() async {
// Initialize OpenAI instance
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// Generate image
OpenAIGenerateImage generatedImage = await openAi.generateImage(
prompt: 'Generate an image of a cat playing with a ball.',
n: 1,
size: '256x256',
edit: false,
variations: false,
response_format: 'url',
style: 'vivid',
);
print(generatedImage);
// or
print(generatedImage.url);
}
Response
The response from the generateImage
method is a string representing the generated image URL or the image data, depending on the response format specified.
{
"url": "https://generated_image_url.com/image.jpg"
}
Notes
Ensure to provide your API key when initializing the `OpenAI` instance.
If the `apiKey` is not provided or is invalid, you will receive an error message as the output.
The `edit` and `variations` parameters control the type of image generation operation to perform.
The `image and mask` parameters are required when performing image editing.
🎙️ OpenAI Audio Transcription
The transcriptions
method allows you to transcribe audio files using the OpenAI Audio API. You can transcribe audio files of various formats and languages.
Parameters
audioUrl
(required): The URL of the audio file to be transcribed.response_format
: The format of the response. Defaults to "text".language
: The language of the audio file, if applicable.prompt
: An optional prompt for the transcription.temperature
: Controls the randomness of the generated text. Defaults to 0.3.topP
: The cumulative probability for selecting the next token. Defaults to 1.0.n
: The number of completions to generate. Defaults to 1.
Usage
import 'package:openai_package/openai_package.dart';
void main() async {
// Initialize OpenAI instance
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// Transcribe audio
String transcription = await openAi.transcriptions(
audioUrl: 'https://example.com/audio.mp3',
response_format: 'text',
language: 'en',
prompt: 'Transcribe the following audio clip:',
temperature: 0.3,
topP: 1.0,
n: 1,
);
print(transcription);
}
Response
The response from the transcriptions
method is a string representing the transcribed text.
{
"transcription": "The transcribed text will be here."
}
Notes
Ensure to provide your API key when initializing the `OpenAI` instance.
If the `apiKey` is not provided or is invalid, you will receive an error message as the output.
The `audioUrl` parameter should be a direct URL to the audio file.
Supported audio file formats include MP3, MP4, MPEG, MPG, M4A, WAV, and WebM.
The `language` parameter is optional and can be used to specify the language of the audio file.
The `prompt` parameter is optional and can be used to provide additional context for the transcription.
🎤 OpenAI Text-to-Speech (TTS)
The speech
method allows you to convert text to speech using the OpenAI Text-to-Speech (TTS) API. You can customize various parameters such as the voice, speed, and output format.
Parameters
input
(required): The text to be converted to speech.voice
: The voice to use for the speech. Defaults to 'alloy'.response_format
: The format of the speech output. Defaults to 'mp3'.output
: The name of the output file where the speech will be saved. Defaults to 'speech.mp3'.speed
: The speed of speech generation. Defaults to 1.0.
Supported Models and Voices
The supported models and voices for the TTS application are as follows:
- Models: "tts-1", "tts-1-hd"
- Voices: "alloy", "echo", "fable", "onyx", "nova", "shimmer"
Usage
import 'package:openai_package/openai_package.dart';
void main() async {
// Initialize OpenAI instance
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// Convert text to speech
String result = await openAi.speech(
input: 'Hello, how are you?',
voice: 'alloy',
response_format: 'mp3',
output: 'speech.mp3',
speed: 1.0,
);
print(result); // File downloaded to speech.mp3
}
Response
The response from the speech
method is a success message indicating that the file has been downloaded.
Notes
Ensure to provide your API key when initializing the `OpenAI` instance.
If the `apiKey` is not provided or is invalid, you will receive an error message as the output.
Supported response formats for speech application include "mp3", "opus", "aac", and "flac".
The `output` parameter specifies the name of the file where the speech will be saved.
OpenAI Formatted Responses
This document provides a summary of classes representing formatted responses from OpenAI API calls.
FormatTranscriptions
A class that provides methods for formatting transcriptions.
Constructor
FormatTranscriptions({Map<String, dynamic> result})
: Constructs aFormatTranscriptions
object with the givenresult
.
Methods
generateRandomString(int length)
: Generates a random string of the specified length.writeJsonToFile(Map<String, dynamic> jsonData)
: Writes the given JSON data to a file and returns the file name.
Want to Contribute?
Your help is invaluable in improving this project for the benefit of the community. Here's how you can contribute:
- Documentation: Take a moment to document any undocumented classes, properties, or methods. Your insights can help other developers understand the project better.
- Code Refactoring: While code refactoring is primarily the responsibility of the project maintainer, your suggestions for improvements are always welcome.
- Code Review: If you spot opportunities for optimizing code or implementing better solutions, please share your insights.
- Sample Use Cases: If you've tried any use cases or examples and want to share them, feel free to contribute them to the
examples/
directory. - Stay Updated: Keep an eye out for any updates in the API, Dart, relevant packages, or Flutter that could enhance this project.
- Donations: Consider supporting the project with a donation. Your contributions help sustain and improve the project over time.
Your contributions, no matter how small, make a difference in making this project better for everyone. Thank you for your support!