From 622cbbf32549aba497de6ebe94628f94c206f295 Mon Sep 17 00:00:00 2001 From: guorutao <285012> Date: Mon, 10 Apr 2023 00:16:46 +0800 Subject: [PATCH] =?UTF-8?q?feature:1.0.11=20=E6=94=AF=E6=8C=81tokens?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0=E6=96=B0=E7=9A=84=E4=BD=99=E9=A2=9D?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E3=80=81BUG=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/unfbx/chatgpt/OpenAiApi.java | 24 +++++++++ .../java/com/unfbx/chatgpt/OpenAiClient.java | 28 +++++++++- .../com/unfbx/chatgpt/OpenAiStreamClient.java | 39 ++++++++++++++ .../chatgpt/entity/billing/BillingUsage.java | 31 +++++++++++ .../entity/billing/CreditGrantsResponse.java | 3 +- .../chatgpt/entity/billing/DailyCost.java | 26 ++++++++++ .../chatgpt/entity/billing/LineItem.java | 23 ++++++++ .../unfbx/chatgpt/entity/billing/Plan.java | 15 ++++++ .../chatgpt/entity/billing/Subscription.java | 52 +++++++++++++++++++ 9 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/unfbx/chatgpt/entity/billing/BillingUsage.java create mode 100644 src/main/java/com/unfbx/chatgpt/entity/billing/DailyCost.java create mode 100644 src/main/java/com/unfbx/chatgpt/entity/billing/LineItem.java create mode 100644 src/main/java/com/unfbx/chatgpt/entity/billing/Plan.java create mode 100644 src/main/java/com/unfbx/chatgpt/entity/billing/Subscription.java diff --git a/src/main/java/com/unfbx/chatgpt/OpenAiApi.java b/src/main/java/com/unfbx/chatgpt/OpenAiApi.java index 3e1120e..7b1d6b5 100644 --- a/src/main/java/com/unfbx/chatgpt/OpenAiApi.java +++ b/src/main/java/com/unfbx/chatgpt/OpenAiApi.java @@ -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; @@ -31,6 +33,7 @@ import okhttp3.ResponseBody; import retrofit2.http.*; +import java.time.LocalDate; import java.util.Map; /** @@ -297,9 +300,30 @@ Single speechToTextTranslations(@Part MultipartBody.Part file, /** * 余额查询 + * 官方禁止访问此接口 * * @return 余额结果 */ @GET("dashboard/billing/credit_grants") + @Deprecated Single creditGrants(); + + /** + * 账户信息查询:里面包含总金额(美元)等信息 + * + * @return + */ + @GET("v1/dashboard/billing/subscription") + Single subscription(); + + /** + * 账户调用接口消耗金额信息查询 + * totalUsage = 账户总使用金额(美分) + * + * @return + * @param starDate + * @param endDate + */ + @GET("v1/dashboard/billing/usage") + Single billingUsage(@Query("start_date") LocalDate starDate, @Query("end_date") LocalDate endDate); } diff --git a/src/main/java/com/unfbx/chatgpt/OpenAiClient.java b/src/main/java/com/unfbx/chatgpt/OpenAiClient.java index 05f345d..a53fd98 100644 --- a/src/main/java/com/unfbx/chatgpt/OpenAiClient.java +++ b/src/main/java/com/unfbx/chatgpt/OpenAiClient.java @@ -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; @@ -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; @@ -699,7 +702,8 @@ private void checkSpeechFileSize(java.io.File file) { /** * ## 官方已经禁止使用此api * OpenAi账户余额查询 - * + * @see #subscription() + * @see #billingUsage(LocalDate, LocalDate) * @return */ @Deprecated @@ -708,6 +712,28 @@ public CreditGrantsResponse creditGrants() { return creditGrants.blockingGet(); } + /** + * 账户信息查询:里面包含总金额等信息 + * + * @return + */ + public Subscription subscription() { + Single subscription = this.openAiApi.subscription(); + return subscription.blockingGet(); + } + + /** + * 账户调用接口消耗金额信息查询 + * 最多查询100天 + * @param starDate 开始时间 + * @param endDate 结束时间 + * @return + */ + public BillingUsage billingUsage(@NotNull LocalDate starDate, @NotNull LocalDate endDate) { + Single billingUsage = this.openAiApi.billingUsage(starDate, endDate); + return billingUsage.blockingGet(); + } + public static final class Builder { /** diff --git a/src/main/java/com/unfbx/chatgpt/OpenAiStreamClient.java b/src/main/java/com/unfbx/chatgpt/OpenAiStreamClient.java index 1a9623a..1956caa 100644 --- a/src/main/java/com/unfbx/chatgpt/OpenAiStreamClient.java +++ b/src/main/java/com/unfbx/chatgpt/OpenAiStreamClient.java @@ -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; @@ -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; @@ -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; @@ -62,6 +69,9 @@ public class OpenAiStreamClient { @Getter private KeyStrategyFunction, String> keyStrategy; + @Getter + private OpenAiApi openAiApi; + /** * 构造实例对象 * @@ -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); } /** @@ -251,6 +268,28 @@ public CreditGrantsResponse creditGrants() { return completionResponse; } + /** + * 账户信息查询:里面包含总金额等信息 + * + * @return + */ + public Subscription subscription() { + Single subscription = this.openAiApi.subscription(); + return subscription.blockingGet(); + } + + /** + * 账户调用接口消耗金额信息查询 + * 最多查询100天 + * @param starDate 开始时间 + * @param endDate 结束时间 + * @return + */ + public BillingUsage billingUsage(@NotNull LocalDate starDate, @NotNull LocalDate endDate) { + Single billingUsage = this.openAiApi.billingUsage(starDate, endDate); + return billingUsage.blockingGet(); + } + /** * 构造 * diff --git a/src/main/java/com/unfbx/chatgpt/entity/billing/BillingUsage.java b/src/main/java/com/unfbx/chatgpt/entity/billing/BillingUsage.java new file mode 100644 index 0000000..52be352 --- /dev/null +++ b/src/main/java/com/unfbx/chatgpt/entity/billing/BillingUsage.java @@ -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 dailyCosts; + /** + * 总使用金额:美分 + */ + @JsonProperty("total_usage") + private BigDecimal totalUsage; + +} diff --git a/src/main/java/com/unfbx/chatgpt/entity/billing/CreditGrantsResponse.java b/src/main/java/com/unfbx/chatgpt/entity/billing/CreditGrantsResponse.java index a17b6be..4c004c8 100644 --- a/src/main/java/com/unfbx/chatgpt/entity/billing/CreditGrantsResponse.java +++ b/src/main/java/com/unfbx/chatgpt/entity/billing/CreditGrantsResponse.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import java.io.Serializable; import java.math.BigDecimal; /** @@ -12,7 +13,7 @@ * @since 2023-03-18 */ @Data -public class CreditGrantsResponse { +public class CreditGrantsResponse implements Serializable { private String object; /** * 总金额:美元 diff --git a/src/main/java/com/unfbx/chatgpt/entity/billing/DailyCost.java b/src/main/java/com/unfbx/chatgpt/entity/billing/DailyCost.java new file mode 100644 index 0000000..1c28dd5 --- /dev/null +++ b/src/main/java/com/unfbx/chatgpt/entity/billing/DailyCost.java @@ -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 lineItems; +} diff --git a/src/main/java/com/unfbx/chatgpt/entity/billing/LineItem.java b/src/main/java/com/unfbx/chatgpt/entity/billing/LineItem.java new file mode 100644 index 0000000..7f78ea6 --- /dev/null +++ b/src/main/java/com/unfbx/chatgpt/entity/billing/LineItem.java @@ -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; +} diff --git a/src/main/java/com/unfbx/chatgpt/entity/billing/Plan.java b/src/main/java/com/unfbx/chatgpt/entity/billing/Plan.java new file mode 100644 index 0000000..45d3ee8 --- /dev/null +++ b/src/main/java/com/unfbx/chatgpt/entity/billing/Plan.java @@ -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; +} diff --git a/src/main/java/com/unfbx/chatgpt/entity/billing/Subscription.java b/src/main/java/com/unfbx/chatgpt/entity/billing/Subscription.java new file mode 100644 index 0000000..76d4bdd --- /dev/null +++ b/src/main/java/com/unfbx/chatgpt/entity/billing/Subscription.java @@ -0,0 +1,52 @@ +package com.unfbx.chatgpt.entity.billing; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 描述:账户信息 + * + * @author https:www.unfbx.com + * @since 2023-04-08 + */ +@Data +public class Subscription { + @JsonProperty("object") + private String object; + @JsonProperty("has_payment_method") + private boolean hasPaymentMethod; + @JsonProperty("canceled") + private boolean canceled; + @JsonProperty("canceled_at") + private Object canceledAt; + @JsonProperty("delinquent") + private Object delinquent; + @JsonProperty("access_until") + private long accessUntil; + @JsonProperty("soft_limit") + private long softLimit; + @JsonProperty("hard_limit") + private long hardLimit; + @JsonProperty("system_hard_limit") + private long systemHardLimit; + @JsonProperty("soft_limit_usd") + private double softLimitUsd; + @JsonProperty("hard_limit_usd") + private double hardLimitUsd; + @JsonProperty("system_hard_limit_usd") + private double systemHardLimitUsd; + @JsonProperty("plan") + private Plan plan; + @JsonProperty("account_name") + private String accountName; + @JsonProperty("po_number") + private Object poNumber; + @JsonProperty("billing_email") + private Object billingEmail; + @JsonProperty("tax_ids") + private Object taxIds; + @JsonProperty("billing_address") + private Object billingAddress; + @JsonProperty("business_address") + private Object businessAddress; +}