|
|
@@ -108,6 +108,13 @@ type DeepSeekUsageResponse struct {
|
|
|
} `json:"balance_infos"`
|
|
|
}
|
|
|
|
|
|
+type OpenRouterResponse struct {
|
|
|
+ Data struct {
|
|
|
+ TotalCredits float64 `json:"total_credits"`
|
|
|
+ TotalUsage float64 `json:"total_usage"`
|
|
|
+ } `json:"data"`
|
|
|
+}
|
|
|
+
|
|
|
// GetAuthHeader get auth header
|
|
|
func GetAuthHeader(token string) http.Header {
|
|
|
h := http.Header{}
|
|
|
@@ -281,6 +288,22 @@ func updateChannelAIGC2DBalance(channel *model.Channel) (float64, error) {
|
|
|
return response.TotalAvailable, nil
|
|
|
}
|
|
|
|
|
|
+func updateChannelOpenRouterBalance(channel *model.Channel) (float64, error) {
|
|
|
+ url := "https://openrouter.ai/api/v1/credits"
|
|
|
+ body, err := GetResponseBody("GET", url, channel, GetAuthHeader(channel.Key))
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+ response := OpenRouterResponse{}
|
|
|
+ err = json.Unmarshal(body, &response)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+ balance := response.Data.TotalCredits - response.Data.TotalUsage
|
|
|
+ channel.UpdateBalance(balance)
|
|
|
+ return balance, nil
|
|
|
+}
|
|
|
+
|
|
|
func updateChannelBalance(channel *model.Channel) (float64, error) {
|
|
|
baseURL := common.ChannelBaseURLs[channel.Type]
|
|
|
if channel.GetBaseURL() == "" {
|
|
|
@@ -307,6 +330,8 @@ func updateChannelBalance(channel *model.Channel) (float64, error) {
|
|
|
return updateChannelSiliconFlowBalance(channel)
|
|
|
case common.ChannelTypeDeepSeek:
|
|
|
return updateChannelDeepSeekBalance(channel)
|
|
|
+ case common.ChannelTypeOpenRouter:
|
|
|
+ return updateChannelOpenRouterBalance(channel)
|
|
|
default:
|
|
|
return 0, errors.New("尚未实现")
|
|
|
}
|