Download controller/billing.go from Jack698/velo: direct link, hf CLI and curl.
- Browser
- Download file 2.73 kB
-
https://huggingface.co/spaces/Jack698/velo/resolve/main/controller/billing.go
- Command line
-
hf download hf://spaces/Jack698/velo/controller/billing.go
-
curl -L -o billing.go https://huggingface.co/spaces/Jack698/velo/resolve/main/controller/billing.go
2.73 kB
| // Copyright (c) 2025 Tethys Plex | |
| // | |
| // This file is part of Veloera. | |
| // | |
| // This program is free software: you can redistribute it and/or modify | |
| // it under the terms of the GNU General Public License as published by | |
| // the Free Software Foundation, either version 3 of the License, or | |
| // (at your option) any later version. | |
| // | |
| // This program is distributed in the hope that it will be useful, | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| // GNU General Public License for more details. | |
| // | |
| // You should have received a copy of the GNU General Public License | |
| // along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| package controller | |
| import ( | |
| "github.com/gin-gonic/gin" | |
| "veloera/common" | |
| "veloera/dto" | |
| "veloera/model" | |
| ) | |
| func GetSubscription(c *gin.Context) { | |
| var remainQuota int | |
| var usedQuota int | |
| var err error | |
| var token *model.Token | |
| var expiredTime int64 | |
| if common.DisplayTokenStatEnabled { | |
| tokenId := c.GetInt("token_id") | |
| token, err = model.GetTokenById(tokenId) | |
| expiredTime = token.ExpiredTime | |
| remainQuota = token.RemainQuota | |
| usedQuota = token.UsedQuota | |
| } else { | |
| userId := c.GetInt("id") | |
| remainQuota, err = model.GetUserQuota(userId, false) | |
| usedQuota, err = model.GetUserUsedQuota(userId) | |
| } | |
| if expiredTime <= 0 { | |
| expiredTime = 0 | |
| } | |
| if err != nil { | |
| openAIError := dto.OpenAIError{ | |
| Message: err.Error(), | |
| Type: "upstream_error", | |
| } | |
| c.JSON(200, gin.H{ | |
| "error": openAIError, | |
| }) | |
| return | |
| } | |
| quota := remainQuota + usedQuota | |
| amount := float64(quota) | |
| if common.DisplayInCurrencyEnabled { | |
| amount /= common.QuotaPerUnit | |
| } | |
| if token != nil && token.UnlimitedQuota { | |
| amount = 100000000 | |
| } | |
| subscription := OpenAISubscriptionResponse{ | |
| Object: "billing_subscription", | |
| HasPaymentMethod: true, | |
| SoftLimitUSD: amount, | |
| HardLimitUSD: amount, | |
| SystemHardLimitUSD: amount, | |
| AccessUntil: expiredTime, | |
| } | |
| c.JSON(200, subscription) | |
| return | |
| } | |
| func GetUsage(c *gin.Context) { | |
| var quota int | |
| var err error | |
| var token *model.Token | |
| if common.DisplayTokenStatEnabled { | |
| tokenId := c.GetInt("token_id") | |
| token, err = model.GetTokenById(tokenId) | |
| quota = token.UsedQuota | |
| } else { | |
| userId := c.GetInt("id") | |
| quota, err = model.GetUserUsedQuota(userId) | |
| } | |
| if err != nil { | |
| openAIError := dto.OpenAIError{ | |
| Message: err.Error(), | |
| Type: "veloera_error", | |
| } | |
| c.JSON(200, gin.H{ | |
| "error": openAIError, | |
| }) | |
| return | |
| } | |
| amount := float64(quota) | |
| if common.DisplayInCurrencyEnabled { | |
| amount /= common.QuotaPerUnit | |
| } | |
| usage := OpenAIUsageResponse{ | |
| Object: "list", | |
| TotalUsage: amount * 100, | |
| } | |
| c.JSON(200, usage) | |
| return | |
| } | |