mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-29 08:11:32 +00:00
fix(openai): move TTFT metric mode to admin settings
This commit is contained in:
@@ -5268,6 +5268,32 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- OpenAI Responses 首 token 统计 -->
|
||||
<div class="border-b border-gray-100 pb-5 dark:border-dark-700 md:col-span-2">
|
||||
<label
|
||||
for="openai-ttft-mode"
|
||||
class="text-sm font-medium text-gray-700 dark:text-gray-300"
|
||||
>
|
||||
{{ t("admin.settings.gatewayForwarding.openaiTTFTMode") }}
|
||||
</label>
|
||||
<select
|
||||
id="openai-ttft-mode"
|
||||
v-model="form.openai_ttft_mode"
|
||||
class="input mt-2 w-full"
|
||||
data-testid="openai-ttft-mode"
|
||||
>
|
||||
<option value="semantic">
|
||||
{{ t("admin.settings.gatewayForwarding.openaiTTFTModeSemantic") }}
|
||||
</option>
|
||||
<option value="visible">
|
||||
{{ t("admin.settings.gatewayForwarding.openaiTTFTModeVisible") }}
|
||||
</option>
|
||||
</select>
|
||||
<p class="mt-1.5 text-xs text-gray-500 dark:text-gray-400">
|
||||
{{ t("admin.settings.gatewayForwarding.openaiTTFTModeHint") }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Fingerprint Unification -->
|
||||
<div class="flex items-center justify-between">
|
||||
<div>
|
||||
@@ -9735,6 +9761,7 @@ const form = reactive<SettingsForm>({
|
||||
openai_advanced_scheduler_weight_previous_response: "",
|
||||
openai_advanced_scheduler_weight_session_sticky: "",
|
||||
// Gateway forwarding behavior
|
||||
openai_ttft_mode: "semantic",
|
||||
enable_fingerprint_unification: true,
|
||||
enable_metadata_passthrough: false,
|
||||
enable_cch_signing: false,
|
||||
@@ -11308,6 +11335,8 @@ async function saveSettings() {
|
||||
min_claude_code_version: form.min_claude_code_version,
|
||||
max_claude_code_version: form.max_claude_code_version,
|
||||
allow_ungrouped_key_scheduling: form.allow_ungrouped_key_scheduling,
|
||||
openai_ttft_mode:
|
||||
form.openai_ttft_mode === "visible" ? "visible" : "semantic",
|
||||
enable_fingerprint_unification: form.enable_fingerprint_unification,
|
||||
enable_metadata_passthrough: form.enable_metadata_passthrough,
|
||||
enable_cch_signing: form.enable_cch_signing,
|
||||
|
||||
@@ -464,6 +464,7 @@ const baseSettingsResponse = {
|
||||
min_claude_code_version: "",
|
||||
max_claude_code_version: "",
|
||||
allow_ungrouped_key_scheduling: false,
|
||||
openai_ttft_mode: "semantic",
|
||||
enable_fingerprint_unification: true,
|
||||
enable_metadata_passthrough: false,
|
||||
enable_cch_signing: false,
|
||||
@@ -1363,6 +1364,27 @@ describe("admin SettingsView payment visible method controls", () => {
|
||||
expect(payload.grok_cross_client_model_map_enabled).toBe(false);
|
||||
});
|
||||
|
||||
it("loads and saves the OpenAI Responses first-token metric mode", async () => {
|
||||
getSettings.mockResolvedValueOnce({
|
||||
...baseSettingsResponse,
|
||||
openai_ttft_mode: "visible",
|
||||
});
|
||||
const wrapper = mountView();
|
||||
|
||||
await flushPromises();
|
||||
await openGatewayTab(wrapper);
|
||||
|
||||
const modeSelect = wrapper.get('[data-testid="openai-ttft-mode"]');
|
||||
expect((modeSelect.element as HTMLSelectElement).value).toBe("visible");
|
||||
|
||||
await modeSelect.setValue("semantic");
|
||||
await wrapper.find("form").trigger("submit.prevent");
|
||||
await flushPromises();
|
||||
|
||||
const payload = updateSettings.mock.calls.at(-1)?.[0] as Record<string, unknown>;
|
||||
expect(payload.openai_ttft_mode).toBe("semantic");
|
||||
});
|
||||
|
||||
it("loads fail-safe-off Ollama Cloud usage refresh settings and saves an explicit opt-in", async () => {
|
||||
const wrapper = mountView();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user