This commit introduces a major architectural refactoring to improve quota management, centralize logging, and streamline the relay handling logic. Key changes: - **Pre-consume Quota:** Implements a new mechanism to check and reserve user quota *before* making the request to the upstream provider. This ensures more accurate quota deduction and prevents users from exceeding their limits due to concurrent requests. - **Unified Relay Handlers:** Refactors the relay logic to use generic handlers (e.g., `ChatHandler`, `ImageHandler`) instead of provider-specific implementations. This significantly reduces code duplication and simplifies adding new channels. - **Centralized Logger:** A new dedicated `logger` package is introduced, and all system logging calls are migrated to use it, moving this responsibility out of the `common` package. - **Code Reorganization:** DTOs are generalized (e.g., `dalle.go` -> `openai_image.go`) and utility code is moved to more appropriate packages (e.g., `common/http.go` -> `service/http.go`) for better code structure.
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package setting
|
|
|
|
import (
|
|
"encoding/json"
|
|
"one-api/logger"
|
|
)
|
|
|
|
var Chats = []map[string]string{
|
|
//{
|
|
// "ChatGPT Next Web 官方示例": "https://app.nextchat.dev/#/?settings={\"key\":\"{key}\",\"url\":\"{address}\"}",
|
|
//},
|
|
{
|
|
"Cherry Studio": "cherrystudio://providers/api-keys?v=1&data={cherryConfig}",
|
|
},
|
|
{
|
|
"流畅阅读": "fluentread",
|
|
},
|
|
{
|
|
"Lobe Chat 官方示例": "https://chat-preview.lobehub.com/?settings={\"keyVaults\":{\"openai\":{\"apiKey\":\"{key}\",\"baseURL\":\"{address}/v1\"}}}",
|
|
},
|
|
{
|
|
"AI as Workspace": "https://aiaw.app/set-provider?provider={\"type\":\"openai\",\"settings\":{\"apiKey\":\"{key}\",\"baseURL\":\"{address}/v1\",\"compatibility\":\"strict\"}}",
|
|
},
|
|
{
|
|
"AMA 问天": "ama://set-api-key?server={address}&key={key}",
|
|
},
|
|
{
|
|
"OpenCat": "opencat://team/join?domain={address}&token={key}",
|
|
},
|
|
}
|
|
|
|
func UpdateChatsByJsonString(jsonString string) error {
|
|
Chats = make([]map[string]string, 0)
|
|
return json.Unmarshal([]byte(jsonString), &Chats)
|
|
}
|
|
|
|
func Chats2JsonString() string {
|
|
jsonBytes, err := json.Marshal(Chats)
|
|
if err != nil {
|
|
logger.SysError("error marshalling chats: " + err.Error())
|
|
return "[]"
|
|
}
|
|
return string(jsonBytes)
|
|
}
|