Skip to content

Commit 304f79f

Browse files
authored
Merge pull request #1 from mardillu/develop
Added support for audios and images
2 parents 1882bb2 + 0a50468 commit 304f79f

File tree

7 files changed

+121
-106
lines changed

7 files changed

+121
-106
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
push:
55
branches:
66
- 'master'
7+
- 'develop'
78

89
jobs:
910
build:

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# OpenAPI Client for Android
1+
# OpenAI Client for Android
22
A light weight OpenAI's API client for Android. This tool is specifically designed for Android developers to interact with OpenAI's API in a lightweight and efficient manner. With this client, Android developers will be able to access OpenAI's services seamlessly, without having to worry about heavy resource consumption or slow performance. This tool promises to be an invaluable asset for Android developers and users who require quick and easy access to OpenAI's API.
33

44
[![Jitpack](https://jitpack.io/v/mardillu/OpenAI-Client-Android.svg)](https://jitpack.io/#mardillu/OpenAI-Client-Android)
@@ -7,7 +7,7 @@ A light weight OpenAI's API client for Android. This tool is specifically design
77

88

99
## Disclaimer
10-
OpenAPI Client for Android is an open-sourced software licensed under the [MIT license](https://github.com/mardillu/OpenAI-Client-Android/blob/master/LICENSE). **This is an unofficial library, it is not affiliated with nor endorsed by OpenAI**. Contributions are welcome.
10+
OpenAI Client for Android is an open-sourced software licensed under the [MIT license](https://github.com/mardillu/OpenAI-Client-Android/blob/master/LICENSE). **This is an unofficial library, it is not affiliated with nor endorsed by OpenAI**. Contributions are welcome.
1111

1212
## Setup
1313
1. Add this to your Project level `build.gradle` at the end of repositories:
@@ -50,16 +50,19 @@ client.getTextCompletion("Hello chat gpt! what is the meaning of life?") { resul
5050
- [x] Completions
5151
- [x] Chat
5252
- [x] Edits
53-
- [x] Image Generate
53+
- [x] Images
54+
- Create
55+
- Edit
56+
- Variations
5457
- [x] Embeddings
5558
- [x] Moderations
5659
- [x] Models
60+
- [x] Audio
61+
- Transcribe
62+
- Translate
5763

5864
## Upcoming APIs
59-
- [ ] Audio
6065
- [ ] Fine-tunes
61-
- [ ] Image Edit
62-
- [ ] Image variatation
6366
- [ ] Files
6467

6568
## License

app/src/main/assets/img.png

-1.03 MB
Loading

app/src/main/java/com/mardillu/openai/test/MainActivity.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class MainActivity : AppCompatActivity() {
6464
}
6565
}
6666

67-
chatGptService.createImageEdit(imageFromAssets("img.png"), "A cute cat sitting on a white table") { result, error ->
67+
chatGptService.createImageEdit(imageFromAssets("img.png"), "A cute cat sitting on a white table", imageFromAssets("img.png")) { result, error ->
6868
if (error != null) {
6969
// Handle error
7070
} else if (result != null) {
@@ -99,7 +99,8 @@ class MainActivity : AppCompatActivity() {
9999

100100
private fun imageFromAssets(name: String): File {
101101
val inputStream = applicationContext.assets.open(name)
102-
val file = File.createTempFile("","")
102+
val suf = if (name.contains("m4a")) "suf.m4a" else "suf"
103+
val file = File.createTempFile("pre",suf)
103104
file.outputStream().use { outputStream ->
104105
inputStream.copyTo(outputStream)
105106
}

app/src/main/res/layout/activity_main.xml

Lines changed: 101 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -8,104 +8,115 @@
88
android:orientation="vertical"
99
tools:context=".MainActivity">
1010

11-
<TextView
12-
android:id="@+id/result1"
13-
android:layout_width="wrap_content"
14-
android:layout_height="wrap_content"
15-
android:text="Hello World!"
16-
app:layout_constraintBottom_toBottomOf="parent"
17-
app:layout_constraintEnd_toEndOf="parent"
18-
app:layout_constraintStart_toStartOf="parent"
19-
app:layout_constraintTop_toTopOf="parent" />
11+
<ScrollView
12+
android:layout_width="match_parent"
13+
android:layout_height="match_parent">
14+
<LinearLayout
15+
android:layout_width="match_parent"
16+
android:layout_height="wrap_content"
17+
android:orientation="vertical">
18+
<TextView
19+
android:id="@+id/result1"
20+
android:layout_width="wrap_content"
21+
android:layout_height="wrap_content"
22+
android:text="Hello World!"
23+
app:layout_constraintBottom_toBottomOf="parent"
24+
app:layout_constraintEnd_toEndOf="parent"
25+
app:layout_constraintStart_toStartOf="parent"
26+
app:layout_constraintTop_toTopOf="parent" />
2027

21-
<TextView
22-
android:id="@+id/result2"
23-
android:layout_width="wrap_content"
24-
android:layout_height="wrap_content"
25-
android:text="Hello World!"
26-
app:layout_constraintBottom_toBottomOf="parent"
27-
app:layout_constraintEnd_toEndOf="parent"
28-
app:layout_constraintStart_toStartOf="parent"
29-
app:layout_constraintTop_toTopOf="parent" />
28+
<TextView
29+
android:id="@+id/result2"
30+
android:layout_width="wrap_content"
31+
android:layout_height="wrap_content"
32+
android:text="Hello World!"
33+
app:layout_constraintBottom_toBottomOf="parent"
34+
app:layout_constraintEnd_toEndOf="parent"
35+
app:layout_constraintStart_toStartOf="parent"
36+
app:layout_constraintTop_toTopOf="parent" />
3037

31-
<TextView
32-
android:id="@+id/result3"
33-
android:layout_width="wrap_content"
34-
android:layout_height="wrap_content"
35-
android:text="Hello World!"
36-
app:layout_constraintBottom_toBottomOf="parent"
37-
app:layout_constraintEnd_toEndOf="parent"
38-
app:layout_constraintStart_toStartOf="parent"
39-
app:layout_constraintTop_toTopOf="parent" />
38+
<TextView
39+
android:id="@+id/result3"
40+
android:layout_width="wrap_content"
41+
android:layout_height="wrap_content"
42+
android:text="Hello World!"
43+
app:layout_constraintBottom_toBottomOf="parent"
44+
app:layout_constraintEnd_toEndOf="parent"
45+
app:layout_constraintStart_toStartOf="parent"
46+
app:layout_constraintTop_toTopOf="parent" />
4047

41-
<TextView
42-
android:id="@+id/result4"
43-
android:layout_width="wrap_content"
44-
android:layout_height="wrap_content"
45-
android:text="Hello World!"
46-
app:layout_constraintBottom_toBottomOf="parent"
47-
app:layout_constraintEnd_toEndOf="parent"
48-
app:layout_constraintStart_toStartOf="parent"
49-
app:layout_constraintTop_toTopOf="parent" />
48+
<TextView
49+
android:id="@+id/result4"
50+
android:layout_width="wrap_content"
51+
android:layout_height="wrap_content"
52+
android:text="Hello World!"
53+
app:layout_constraintBottom_toBottomOf="parent"
54+
app:layout_constraintEnd_toEndOf="parent"
55+
app:layout_constraintStart_toStartOf="parent"
56+
app:layout_constraintTop_toTopOf="parent" />
5057

51-
<TextView
52-
android:id="@+id/result5"
53-
android:layout_width="wrap_content"
54-
android:layout_height="wrap_content"
55-
android:text="Hello World!"
56-
app:layout_constraintBottom_toBottomOf="parent"
57-
app:layout_constraintEnd_toEndOf="parent"
58-
app:layout_constraintStart_toStartOf="parent"
59-
app:layout_constraintTop_toTopOf="parent" />
58+
<TextView
59+
android:id="@+id/result5"
60+
android:layout_width="wrap_content"
61+
android:layout_height="wrap_content"
62+
android:text="Hello World!"
63+
app:layout_constraintBottom_toBottomOf="parent"
64+
app:layout_constraintEnd_toEndOf="parent"
65+
app:layout_constraintStart_toStartOf="parent"
66+
app:layout_constraintTop_toTopOf="parent" />
6067

61-
<TextView
62-
android:id="@+id/result6"
63-
android:layout_width="wrap_content"
64-
android:layout_height="wrap_content"
65-
android:text="Hello World!"
66-
app:layout_constraintBottom_toBottomOf="parent"
67-
app:layout_constraintEnd_toEndOf="parent"
68-
app:layout_constraintStart_toStartOf="parent"
69-
app:layout_constraintTop_toTopOf="parent" />
68+
<TextView
69+
android:id="@+id/result6"
70+
android:layout_width="wrap_content"
71+
android:layout_height="wrap_content"
72+
android:text="Hello World!"
73+
app:layout_constraintBottom_toBottomOf="parent"
74+
app:layout_constraintEnd_toEndOf="parent"
75+
app:layout_constraintStart_toStartOf="parent"
76+
app:layout_constraintTop_toTopOf="parent" />
7077

71-
<TextView
72-
android:id="@+id/result7"
73-
android:layout_width="wrap_content"
74-
android:layout_height="wrap_content"
75-
android:text="Hello World!"
76-
app:layout_constraintBottom_toBottomOf="parent"
77-
app:layout_constraintEnd_toEndOf="parent"
78-
app:layout_constraintStart_toStartOf="parent"
79-
app:layout_constraintTop_toTopOf="parent" />
78+
<TextView
79+
android:id="@+id/result7"
80+
android:layout_width="wrap_content"
81+
android:layout_height="wrap_content"
82+
android:text="Hello World!"
83+
app:layout_constraintBottom_toBottomOf="parent"
84+
app:layout_constraintEnd_toEndOf="parent"
85+
app:layout_constraintStart_toStartOf="parent"
86+
app:layout_constraintTop_toTopOf="parent" />
8087

81-
<TextView
82-
android:id="@+id/result8"
83-
android:layout_width="wrap_content"
84-
android:layout_height="wrap_content"
85-
android:text="Hello World!"
86-
app:layout_constraintBottom_toBottomOf="parent"
87-
app:layout_constraintEnd_toEndOf="parent"
88-
app:layout_constraintStart_toStartOf="parent"
89-
app:layout_constraintTop_toTopOf="parent" />
88+
<TextView
89+
android:id="@+id/result8"
90+
android:layout_width="wrap_content"
91+
android:layout_height="wrap_content"
92+
android:text="Hello World!"
93+
app:layout_constraintBottom_toBottomOf="parent"
94+
app:layout_constraintEnd_toEndOf="parent"
95+
app:layout_constraintStart_toStartOf="parent"
96+
app:layout_constraintTop_toTopOf="parent" />
97+
98+
<TextView
99+
android:id="@+id/result9"
100+
android:layout_width="wrap_content"
101+
android:layout_height="wrap_content"
102+
android:text="Hello World!"
103+
app:layout_constraintBottom_toBottomOf="parent"
104+
app:layout_constraintEnd_toEndOf="parent"
105+
app:layout_constraintStart_toStartOf="parent"
106+
app:layout_constraintTop_toTopOf="parent" />
107+
108+
<TextView
109+
android:id="@+id/result10"
110+
android:layout_width="wrap_content"
111+
android:layout_height="wrap_content"
112+
android:text="Hello World!"
113+
app:layout_constraintBottom_toBottomOf="parent"
114+
app:layout_constraintEnd_toEndOf="parent"
115+
app:layout_constraintStart_toStartOf="parent"
116+
app:layout_constraintTop_toTopOf="parent" />
117+
</LinearLayout>
118+
</ScrollView>
90119

91-
<TextView
92-
android:id="@+id/result9"
93-
android:layout_width="wrap_content"
94-
android:layout_height="wrap_content"
95-
android:text="Hello World!"
96-
app:layout_constraintBottom_toBottomOf="parent"
97-
app:layout_constraintEnd_toEndOf="parent"
98-
app:layout_constraintStart_toStartOf="parent"
99-
app:layout_constraintTop_toTopOf="parent" />
100120

101-
<TextView
102-
android:id="@+id/result10"
103-
android:layout_width="wrap_content"
104-
android:layout_height="wrap_content"
105-
android:text="Hello World!"
106-
app:layout_constraintBottom_toBottomOf="parent"
107-
app:layout_constraintEnd_toEndOf="parent"
108-
app:layout_constraintStart_toStartOf="parent"
109-
app:layout_constraintTop_toTopOf="parent" />
110121

111122
</LinearLayout>

openai/src/main/java/com/mardillu/openai/network/OpenApiClient.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@ package com.mardillu.openai.network
22

33
import com.mardillu.openai.BuildConfig
44
import com.mardillu.openai.OpenAiInitializer
5-
import com.mardillu.openai.model.*
5+
import com.mardillu.openai.model.Message
6+
import com.mardillu.openai.model.TextCompletionRequest
67
import com.mardillu.openai.model.requests.*
78
import com.mardillu.openai.model.response.*
89
import okhttp3.MediaType.Companion.toMediaTypeOrNull
910
import okhttp3.MultipartBody
1011
import okhttp3.OkHttpClient
11-
import okhttp3.RequestBody
1212
import okhttp3.RequestBody.Companion.asRequestBody
1313
import okhttp3.RequestBody.Companion.toRequestBody
1414
import okhttp3.logging.HttpLoggingInterceptor
1515
import retrofit2.*
1616
import retrofit2.converter.gson.GsonConverterFactory
17-
import retrofit2.http.Part
1817
import java.io.File
1918
import java.util.concurrent.TimeUnit
2019

@@ -256,7 +255,7 @@ class OpenApiClient {
256255
instruction: String,
257256
completionHandler: (TextCompletionResponse?, Throwable?) -> Unit
258257
) {
259-
getEditCompletionAltInternal("$input. $instruction", ) { response, t ->
258+
getEditCompletionAltInternal("$input. $instruction" ) { response, t ->
260259
if (response == null) {
261260
completionHandler(null, t)
262261
} else {
@@ -521,7 +520,7 @@ class OpenApiClient {
521520
* @param file The audio file to transcribe, in one of these formats: mp3, mp4, mpeg, mpga, m4a, wav, or webm.
522521
* @param model ID of the model to use. Only whisper-1 is currently available.
523522
* @param completionHandler Function2<GetModelsResponse?, Throwable?, Unit> callback handler
524-
* @see <a href="https://platform.openai.com/docs/api-reference/images/create-variation">OpenAI API Reference for Image Variations</a>
523+
* @see <a href="https://platform.openai.com/docs/api-reference/audio/create">OpenAI API Reference for Audio transcription</a>
525524
*/
526525
fun createTranscription(
527526
file: File,
@@ -555,12 +554,12 @@ class OpenApiClient {
555554
}
556555

557556
/**
558-
* Transcribes audio into the input language.
557+
* Translates audio into English.
559558
*
560559
* @param file The audio file to transcribe, in one of these formats: mp3, mp4, mpeg, mpga, m4a, wav, or webm.
561560
* @param model ID of the model to use. Only whisper-1 is currently available.
562561
* @param completionHandler Function2<GetModelsResponse?, Throwable?, Unit> callback handler
563-
* @see <a href="https://platform.openai.com/docs/api-reference/images/create-variation">OpenAI API Reference for Image Variations</a>
562+
* @see <a href="https://platform.openai.com/docs/api-reference/audio/create">OpenAI API Reference for Audio translation</a>
564563
*/
565564
fun createTranslation(
566565
file: File,

0 commit comments

Comments
 (0)