fix: 查询使用量支持代理&修正使用量文案 (#1296)

* fix: 查询使用量支持代理&修正使用量文案

* fix: 修复默认错误

* chore: 移除打印

---------

Co-authored-by: ChenZhaoYu <790348264@qq.com>
main
ZuoNing 2 years ago committed by GitHub
parent 86bba7d8f3
commit 439104f195
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -8,7 +8,7 @@ import fetch from 'node-fetch'
import { sendResponse } from '../utils' import { sendResponse } from '../utils'
import { isNotEmptyString } from '../utils/is' import { isNotEmptyString } from '../utils/is'
import type { ApiModel, ChatContext, ChatGPTUnofficialProxyAPIOptions, ModelConfig } from '../types' import type { ApiModel, ChatContext, ChatGPTUnofficialProxyAPIOptions, ModelConfig } from '../types'
import type { BalanceResponse, RequestOptions } from './types' import type { RequestOptions, SetProxyOptions, UsageResponse } from './types'
const { HttpsProxyAgent } = httpsProxyAgent const { HttpsProxyAgent } = httpsProxyAgent
@ -126,9 +126,7 @@ async function chatReplyProcess(options: RequestOptions) {
} }
} }
async function fetchBalance() { async function fetchUsage() {
// 计算起始日期和结束日期
const OPENAI_API_KEY = process.env.OPENAI_API_KEY const OPENAI_API_KEY = process.env.OPENAI_API_KEY
const OPENAI_API_BASE_URL = process.env.OPENAI_API_BASE_URL const OPENAI_API_BASE_URL = process.env.OPENAI_API_BASE_URL
@ -149,14 +147,21 @@ async function fetchBalance() {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
} }
const options = {} as SetProxyOptions
setupProxy(options)
try { try {
// 获取已使用量 // 获取已使用量
const useResponse = await fetch(urlUsage, { headers }) const useResponse = await options.fetch(urlUsage, { headers })
const usageData = await useResponse.json() as BalanceResponse if (!useResponse.ok)
throw new Error('获取使用量失败')
const usageData = await useResponse.json() as UsageResponse
const usage = Math.round(usageData.total_usage) / 100 const usage = Math.round(usageData.total_usage) / 100
return Promise.resolve(usage ? `$${usage}` : '-') return Promise.resolve(usage ? `$${usage}` : '-')
} }
catch { catch (error) {
global.console.log(error)
return Promise.resolve('-') return Promise.resolve('-')
} }
} }
@ -172,7 +177,7 @@ function formatDate(): string[] {
} }
async function chatConfig() { async function chatConfig() {
const balance = await fetchBalance() const usage = await fetchUsage()
const reverseProxy = process.env.API_REVERSE_PROXY ?? '-' const reverseProxy = process.env.API_REVERSE_PROXY ?? '-'
const httpsProxy = (process.env.HTTPS_PROXY || process.env.ALL_PROXY) ?? '-' const httpsProxy = (process.env.HTTPS_PROXY || process.env.ALL_PROXY) ?? '-'
const socksProxy = (process.env.SOCKS_PROXY_HOST && process.env.SOCKS_PROXY_PORT) const socksProxy = (process.env.SOCKS_PROXY_HOST && process.env.SOCKS_PROXY_PORT)
@ -180,11 +185,11 @@ async function chatConfig() {
: '-' : '-'
return sendResponse<ModelConfig>({ return sendResponse<ModelConfig>({
type: 'Success', type: 'Success',
data: { apiModel, reverseProxy, timeoutMs, socksProxy, httpsProxy, balance }, data: { apiModel, reverseProxy, timeoutMs, socksProxy, httpsProxy, usage },
}) })
} }
function setupProxy(options: ChatGPTAPIOptions | ChatGPTUnofficialProxyAPIOptions) { function setupProxy(options: SetProxyOptions) {
if (isNotEmptyString(process.env.SOCKS_PROXY_HOST) && isNotEmptyString(process.env.SOCKS_PROXY_PORT)) { if (isNotEmptyString(process.env.SOCKS_PROXY_HOST) && isNotEmptyString(process.env.SOCKS_PROXY_PORT)) {
const agent = new SocksProxyAgent({ const agent = new SocksProxyAgent({
hostname: process.env.SOCKS_PROXY_HOST, hostname: process.env.SOCKS_PROXY_HOST,
@ -196,17 +201,20 @@ function setupProxy(options: ChatGPTAPIOptions | ChatGPTUnofficialProxyAPIOption
return fetch(url, { agent, ...options }) return fetch(url, { agent, ...options })
} }
} }
else { else if (isNotEmptyString(process.env.HTTPS_PROXY) || isNotEmptyString(process.env.ALL_PROXY)) {
if (isNotEmptyString(process.env.HTTPS_PROXY) || isNotEmptyString(process.env.ALL_PROXY)) { const httpsProxy = process.env.HTTPS_PROXY || process.env.ALL_PROXY
const httpsProxy = process.env.HTTPS_PROXY || process.env.ALL_PROXY if (httpsProxy) {
if (httpsProxy) { const agent = new HttpsProxyAgent(httpsProxy)
const agent = new HttpsProxyAgent(httpsProxy) options.fetch = (url, options) => {
options.fetch = (url, options) => { return fetch(url, { agent, ...options })
return fetch(url, { agent, ...options })
}
} }
} }
} }
else {
options.fetch = (url, options) => {
return fetch(url, { ...options })
}
}
} }
function currentModel(): ApiModel { function currentModel(): ApiModel {

@ -1,4 +1,5 @@
import type { ChatMessage } from 'chatgpt' import type { ChatMessage } from 'chatgpt'
import type fetch from 'node-fetch'
export interface RequestOptions { export interface RequestOptions {
message: string message: string
@ -9,6 +10,10 @@ export interface RequestOptions {
top_p?: number top_p?: number
} }
export interface BalanceResponse { export interface SetProxyOptions {
fetch?: typeof fetch
}
export interface UsageResponse {
total_usage: number total_usage: number
} }

@ -28,7 +28,7 @@ export interface ModelConfig {
timeoutMs?: number timeoutMs?: number
socksProxy?: string socksProxy?: string
httpsProxy?: string httpsProxy?: string
balance?: string usage?: string
} }
export type ApiModel = 'ChatGPTAPI' | 'ChatGPTUnofficialProxyAPI' | undefined export type ApiModel = 'ChatGPTAPI' | 'ChatGPTUnofficialProxyAPI' | undefined

@ -11,7 +11,7 @@ interface ConfigState {
apiModel?: string apiModel?: string
socksProxy?: string socksProxy?: string
httpsProxy?: string httpsProxy?: string
balance?: string usage?: string
} }
const authStore = useAuthStore() const authStore = useAuthStore()
@ -62,8 +62,7 @@ onMounted(() => {
</div> </div>
<p>{{ $t("setting.api") }}{{ config?.apiModel ?? '-' }}</p> <p>{{ $t("setting.api") }}{{ config?.apiModel ?? '-' }}</p>
<p v-if="isChatGPTAPI"> <p v-if="isChatGPTAPI">
{{ $t("setting.balance") }}{{ config?.balance ?? '-' }} {{ $t("setting.monthlyUsage") }}{{ config?.usage ?? '-' }}
<span class="text-xs text-neutral-400">({{ $t('setting.monthlyUsage') }})</span>
</p> </p>
<p v-if="!isChatGPTAPI"> <p v-if="!isChatGPTAPI">
{{ $t("setting.reverseProxy") }}{{ config?.reverseProxy ?? '-' }} {{ $t("setting.reverseProxy") }}{{ config?.reverseProxy ?? '-' }}

Loading…
Cancel
Save