mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-04-19 08:07:27 +00:00
Replace the legacy boolean “DisplayInCurrencyEnabled” with an injected, type-safe
configuration `general_setting.quota_display_type`, and wire it through the
backend and frontend.
Backend
- Add `QuotaDisplayType` to `operation_setting.GeneralSetting` with injected
registration via `config.GlobalConfig.Register("general_setting", ...)`.
Helpers: `IsCurrencyDisplay()`, `IsCNYDisplay()`, `GetQuotaDisplayType()`.
- Expose `quota_display_type` in `/api/status` and keep legacy
`display_in_currency` for backward compatibility.
- Logger: update `LogQuota` and `FormatQuota` to support USD/CNY/TOKENS. When
CNY is selected, convert using `operation_setting.USDExchangeRate`.
- Controllers:
- `billing`: compute subscription/usage amounts based on the selected type
(USD: divide by `QuotaPerUnit`; CNY: USD→CNY; TOKENS: keep raw tokens).
- `topup` / `topup_stripe`: treat inputs as “amount” for USD/CNY and as
token-count for TOKENS; adjust min topup and pay money accordingly.
- `misc`: include `quota_display_type` in status payload.
- Compatibility: in `model/option.UpdateOption`, map updates to
`DisplayInCurrencyEnabled` → `general_setting.quota_display_type`
(true→USD, false→TOKENS). Keep exporting the legacy key in `OptionMap`.
Frontend
- Settings: replace the “display in currency” switch with a Select
(`general_setting.quota_display_type`) offering USD / CNY / Tokens.
Provide fallback mapping from legacy `DisplayInCurrencyEnabled`.
- Persist `quota_display_type` to localStorage (keep `display_in_currency`
for legacy components).
- Rendering helpers: base all quota/price rendering on `quota_display_type`;
use `usd_exchange_rate` for CNY symbol/values.
- Pricing page: default view currency follows site display type (USD/CNY),
while TOKENS mode still allows per-view currency toggling when needed.
Notes
- No database migrations required.
- Legacy clients remain functional via compatibility fields.
70 lines
2.3 KiB
Go
70 lines
2.3 KiB
Go
package ollama
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
type OllamaChatMessage struct {
|
|
Role string `json:"role"`
|
|
Content string `json:"content,omitempty"`
|
|
Images []string `json:"images,omitempty"`
|
|
ToolCalls []OllamaToolCall `json:"tool_calls,omitempty"`
|
|
ToolName string `json:"tool_name,omitempty"`
|
|
Thinking json.RawMessage `json:"thinking,omitempty"`
|
|
}
|
|
|
|
type OllamaToolFunction struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
Parameters interface{} `json:"parameters,omitempty"`
|
|
}
|
|
|
|
type OllamaTool struct {
|
|
Type string `json:"type"`
|
|
Function OllamaToolFunction `json:"function"`
|
|
}
|
|
|
|
type OllamaToolCall struct {
|
|
Function struct {
|
|
Name string `json:"name"`
|
|
Arguments interface{} `json:"arguments"`
|
|
} `json:"function"`
|
|
}
|
|
|
|
type OllamaChatRequest struct {
|
|
Model string `json:"model"`
|
|
Messages []OllamaChatMessage `json:"messages"`
|
|
Tools interface{} `json:"tools,omitempty"`
|
|
Format interface{} `json:"format,omitempty"`
|
|
Stream bool `json:"stream,omitempty"`
|
|
Options map[string]any `json:"options,omitempty"`
|
|
KeepAlive interface{} `json:"keep_alive,omitempty"`
|
|
Think json.RawMessage `json:"think,omitempty"`
|
|
}
|
|
|
|
type OllamaGenerateRequest struct {
|
|
Model string `json:"model"`
|
|
Prompt string `json:"prompt,omitempty"`
|
|
Suffix string `json:"suffix,omitempty"`
|
|
Images []string `json:"images,omitempty"`
|
|
Format interface{} `json:"format,omitempty"`
|
|
Stream bool `json:"stream,omitempty"`
|
|
Options map[string]any `json:"options,omitempty"`
|
|
KeepAlive interface{} `json:"keep_alive,omitempty"`
|
|
Think json.RawMessage `json:"think,omitempty"`
|
|
}
|
|
|
|
type OllamaEmbeddingRequest struct {
|
|
Model string `json:"model"`
|
|
Input interface{} `json:"input"`
|
|
Options map[string]any `json:"options,omitempty"`
|
|
Dimensions int `json:"dimensions,omitempty"`
|
|
}
|
|
|
|
type OllamaEmbeddingResponse struct {
|
|
Error string `json:"error,omitempty"`
|
|
Model string `json:"model"`
|
|
Embeddings [][]float64 `json:"embeddings"`
|
|
PromptEvalCount int `json:"prompt_eval_count,omitempty"`
|
|
}
|