Skip to content

Commit

Permalink
Merge pull request #105 from Grt1228/1.0.11
Browse files Browse the repository at this point in the history
1.0.11 支持tokens、增加新的余额查询、Embeddings支持数组传入, BUG修复
  • Loading branch information
Grt1228 authored Apr 9, 2023
2 parents 50765f9 + e7354a4 commit cef6784
Show file tree
Hide file tree
Showing 16 changed files with 327 additions and 28 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ WebSocket参考:[OpenAIWebSocketEventSourceListener](https://github.com/Grt122
<img src="https://user-images.githubusercontent.com/27008803/225246389-7b452214-f3fe-4a70-bd3e-832a0ed34288.jpg" width="210" height="300" alt="二维码" /> | <img src="https://g-photo.oss-cn-shanghai.aliyuncs.com/hd15.jpg" width="210" height="210" alt="二维码" /> | <img src="https://user-images.githubusercontent.com/27008803/225246581-15e90f78-5438-4637-8e7d-14c68ca13b59.jpg" width="210" height="300" alt="二维码" />
---
## 更新日志
- [x] 1.0.11 增加新的余额查询接口参考:[OpenAiClientTest](https://github.com/Grt1228/chatgpt-java/blob/main/src/test/java/com/unfbx/chatgpt/OpenAiClientTest.java)[OpenAiStreamClientTest](https://github.com/Grt1228/chatgpt-java/blob/main/src/test/java/com/unfbx/chatgpt/OpenAiStreamClientTest.java) ,修复tokens计算慢的问题,
- [x] 1.0.10 支持tokens计算:[TikTokensTest](https://github.com/Grt1228/chatgpt-java/blob/main/src/test/java/com/unfbx/chatgpt/TikTokensTest.java) ,更多详细的资料参考文档:[Tokens_README.md](https://github.com/Grt1228/chatgpt-java/blob/main/Tokens_README.md)
- [x] 1.0.9 支持自定义key使用策略参考:[OpenAiClientTest](https://github.com/Grt1228/chatgpt-java/blob/main/src/test/java/com/unfbx/chatgpt/OpenAiClientTest.java)[OpenAiStreamClientTest](https://github.com/Grt1228/chatgpt-java/blob/main/src/test/java/com/unfbx/chatgpt/OpenAiStreamClientTest.java) ,弃用ChatGPTClient,优化Moderation接口
- [x] 1.0.8 修改OpenAiClient和OpenAiStreamClient的自定义相关实现,超时设置,代理设置,自定义拦截器设置改为通过自定义OkHttpClient实现,将OkHttpClient交由用户自定义控制更加合理,可以实现更多的参数自定义。支持多Api Keys配置。
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>com.unfbx</groupId>
<artifactId>chatgpt-java</artifactId>
<version>1.0.10</version>
<version>1.0.11</version>
<name>chatgpt-java</name>
<description>OpenAI Java SDK, OpenAI Api for Java. ChatGPT Java SDK .</description>
<url>https://www.unfbx.com</url>
Expand Down
26 changes: 25 additions & 1 deletion src/main/java/com/unfbx/chatgpt/OpenAiApi.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.unfbx.chatgpt;

import com.unfbx.chatgpt.entity.billing.BillingUsage;
import com.unfbx.chatgpt.entity.billing.CreditGrantsResponse;
import com.unfbx.chatgpt.entity.billing.Subscription;
import com.unfbx.chatgpt.entity.chat.ChatCompletion;
import com.unfbx.chatgpt.entity.chat.ChatCompletionResponse;
import com.unfbx.chatgpt.entity.common.OpenAiResponse;
Expand Down Expand Up @@ -31,6 +33,7 @@
import okhttp3.ResponseBody;
import retrofit2.http.*;

import java.time.LocalDate;
import java.util.Map;

/**
Expand Down Expand Up @@ -117,7 +120,7 @@ Single<ImageResponse> variationsImages(@Part() MultipartBody.Part image,
);

/**
* Creates an embedding vector representing the input text.
* 文本向量计算
*
* @param embedding
* @return Single EmbeddingResponse
Expand Down Expand Up @@ -297,9 +300,30 @@ Single<WhisperResponse> speechToTextTranslations(@Part MultipartBody.Part file,

/**
* 余额查询
* 官方禁止访问此接口
*
* @return 余额结果
*/
@GET("dashboard/billing/credit_grants")
@Deprecated
Single<CreditGrantsResponse> creditGrants();

/**
* 账户信息查询:里面包含总金额(美元)等信息
*
* @return
*/
@GET("v1/dashboard/billing/subscription")
Single<Subscription> subscription();

/**
* 账户调用接口消耗金额信息查询
* totalUsage = 账户总使用金额(美分)
*
* @return
* @param starDate
* @param endDate
*/
@GET("v1/dashboard/billing/usage")
Single<BillingUsage> billingUsage(@Query("start_date") LocalDate starDate, @Query("end_date") LocalDate endDate);
}
43 changes: 41 additions & 2 deletions src/main/java/com/unfbx/chatgpt/OpenAiClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import cn.hutool.core.util.StrUtil;

import com.unfbx.chatgpt.constant.OpenAIConst;
import com.unfbx.chatgpt.entity.billing.BillingUsage;
import com.unfbx.chatgpt.entity.billing.CreditGrantsResponse;
import com.unfbx.chatgpt.entity.billing.Subscription;
import com.unfbx.chatgpt.entity.chat.ChatCompletion;
import com.unfbx.chatgpt.entity.chat.ChatCompletionResponse;
import com.unfbx.chatgpt.entity.chat.Message;
Expand Down Expand Up @@ -45,6 +47,7 @@
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.jackson.JacksonConverterFactory;

import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.TimeUnit;

Expand Down Expand Up @@ -379,12 +382,25 @@ private void checkImageSize(java.io.File image) {
}

/**
* Creates an embedding vector representing the input text.
* 向量计算:单文本
*
* @param input
* @return EmbeddingResponse
*/
public EmbeddingResponse embeddings(String input) {
List<String> inputs = new ArrayList<>(1);
inputs.add(input);
Embedding embedding = Embedding.builder().input(inputs).build();
return this.embeddings(embedding);
}

/**
* 向量计算:集合文本
*
* @param input
* @return EmbeddingResponse
*/
public EmbeddingResponse embeddings(List<String> input) {
Embedding embedding = Embedding.builder().input(input).build();
return this.embeddings(embedding);
}
Expand Down Expand Up @@ -699,7 +715,8 @@ private void checkSpeechFileSize(java.io.File file) {
/**
* ## 官方已经禁止使用此api
* OpenAi账户余额查询
*
* @see #subscription()
* @see #billingUsage(LocalDate, LocalDate)
* @return
*/
@Deprecated
Expand All @@ -708,6 +725,28 @@ public CreditGrantsResponse creditGrants() {
return creditGrants.blockingGet();
}

/**
* 账户信息查询:里面包含总金额等信息
*
* @return
*/
public Subscription subscription() {
Single<Subscription> subscription = this.openAiApi.subscription();
return subscription.blockingGet();
}

/**
* 账户调用接口消耗金额信息查询
* 最多查询100天
* @param starDate 开始时间
* @param endDate 结束时间
* @return
*/
public BillingUsage billingUsage(@NotNull LocalDate starDate, @NotNull LocalDate endDate) {
Single<BillingUsage> billingUsage = this.openAiApi.billingUsage(starDate, endDate);
return billingUsage.blockingGet();
}


public static final class Builder {
/**
Expand Down
39 changes: 39 additions & 0 deletions src/main/java/com/unfbx/chatgpt/OpenAiStreamClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.unfbx.chatgpt.constant.OpenAIConst;
import com.unfbx.chatgpt.entity.billing.BillingUsage;
import com.unfbx.chatgpt.entity.billing.CreditGrantsResponse;
import com.unfbx.chatgpt.entity.billing.Subscription;
import com.unfbx.chatgpt.entity.chat.ChatCompletion;
import com.unfbx.chatgpt.entity.chat.Message;
import com.unfbx.chatgpt.entity.common.OpenAiResponse;
Expand All @@ -18,6 +20,7 @@
import com.unfbx.chatgpt.function.KeyStrategyFunction;
import com.unfbx.chatgpt.interceptor.HeaderAuthorizationInterceptor;
import com.unfbx.chatgpt.sse.ConsoleEventSourceListener;
import io.reactivex.Single;
import lombok.Getter;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -26,7 +29,11 @@
import okhttp3.sse.EventSourceListener;
import okhttp3.sse.EventSources;
import org.jetbrains.annotations.NotNull;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.jackson.JacksonConverterFactory;

import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -62,6 +69,9 @@ public class OpenAiStreamClient {
@Getter
private KeyStrategyFunction<List<String>, String> keyStrategy;

@Getter
private OpenAiApi openAiApi;

/**
* 构造实例对象
*
Expand Down Expand Up @@ -93,6 +103,13 @@ private OpenAiStreamClient(Builder builder) {
.build();
}
okHttpClient = builder.okHttpClient;

this.openAiApi = new Retrofit.Builder()
.baseUrl(apiHost)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(JacksonConverterFactory.create())
.build().create(OpenAiApi.class);
}

/**
Expand Down Expand Up @@ -251,6 +268,28 @@ public CreditGrantsResponse creditGrants() {
return completionResponse;
}

/**
* 账户信息查询:里面包含总金额等信息
*
* @return
*/
public Subscription subscription() {
Single<Subscription> subscription = this.openAiApi.subscription();
return subscription.blockingGet();
}

/**
* 账户调用接口消耗金额信息查询
* 最多查询100天
* @param starDate 开始时间
* @param endDate 结束时间
* @return
*/
public BillingUsage billingUsage(@NotNull LocalDate starDate, @NotNull LocalDate endDate) {
Single<BillingUsage> billingUsage = this.openAiApi.billingUsage(starDate, endDate);
return billingUsage.blockingGet();
}

/**
* 构造
*
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/com/unfbx/chatgpt/entity/billing/BillingUsage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.unfbx.chatgpt.entity.billing;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
* 描述:金额消耗信息
*
* @author https:www.unfbx.com
* @since 2023-04-08
*/
@Data
public class BillingUsage {

@JsonProperty("object")
private String object;
/**
* 账号金额消耗明细
*/
@JsonProperty("daily_costs")
private List<DailyCost> dailyCosts;
/**
* 总使用金额:美分
*/
@JsonProperty("total_usage")
private BigDecimal totalUsage;

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

/**
Expand All @@ -12,7 +13,7 @@
* @since 2023-03-18
*/
@Data
public class CreditGrantsResponse {
public class CreditGrantsResponse implements Serializable {
private String object;
/**
* 总金额:美元
Expand Down
26 changes: 26 additions & 0 deletions src/main/java/com/unfbx/chatgpt/entity/billing/DailyCost.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.unfbx.chatgpt.entity.billing;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

/**
* 描述:金额消耗列表
*
* @author https:www.unfbx.com
* @since 2023-04-08
*/
@Data
public class DailyCost {
/**
* 时间戳
*/
@JsonProperty("timestamp")
private long timestamp;
/**
* 模型消耗金额详情
*/
@JsonProperty("line_items")
private List<LineItem> lineItems;
}
23 changes: 23 additions & 0 deletions src/main/java/com/unfbx/chatgpt/entity/billing/LineItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.unfbx.chatgpt.entity.billing;

import lombok.Data;

import java.math.BigDecimal;

/**
* 描述:金额消耗列表
*
* @author https:www.unfbx.com
* @since 2023-04-08
*/
@Data
public class LineItem {
/**
* 模型名称
*/
private String name;
/**
* 消耗金额
*/
private BigDecimal cost;
}
15 changes: 15 additions & 0 deletions src/main/java/com/unfbx/chatgpt/entity/billing/Plan.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.unfbx.chatgpt.entity.billing;

import lombok.Data;

/**
* 描述:
*
* @author https:www.unfbx.com
* @since 2023-04-08
*/
@Data
public class Plan {
private String title;
private String id;
}
Loading

0 comments on commit cef6784

Please sign in to comment.