


























@@ -1510,6 +1510,7 @@ describe("chat voice controls", () => {
15101510"medium",
15111511"high",
15121512]);
1513+expect(getTalkSelectOptionValues(container, "provider")).toEqual(["", "openai", "google"]);
15131514expect(container.textContent).toContain("Sensitivity");
15141515expect(container.textContent).toContain("Advanced");
15151516expect(container.textContent).toContain("Pause before send");
@@ -1555,6 +1556,110 @@ describe("chat voice controls", () => {
15551556]);
15561557});
155715581559+it("renders compatible catalog providers and limits transports to the selected provider", () => {
1560+const onRealtimeTalkOptionsChange = vi.fn();
1561+const container = renderChatView({
1562+realtimeTalkOptionsOpen: true,
1563+realtimeTalkCatalogProviders: [
1564+{
1565+id: "openai",
1566+label: "OpenAI",
1567+configured: true,
1568+transports: ["webrtc", "provider-websocket"],
1569+supportsBrowserSession: true,
1570+},
1571+{
1572+id: "plugin-realtime",
1573+label: "Plugin realtime",
1574+configured: true,
1575+transports: ["gateway-relay"],
1576+},
1577+{
1578+id: "plugin-default-relay",
1579+label: "Plugin default relay",
1580+configured: true,
1581+},
1582+{
1583+id: "plugin-websocket",
1584+label: "Unsupported plugin WebSocket",
1585+configured: true,
1586+transports: ["provider-websocket"],
1587+supportsBrowserSession: true,
1588+},
1589+{
1590+id: "relay-only",
1591+label: "No browser session",
1592+configured: true,
1593+transports: ["webrtc"],
1594+},
1595+{
1596+id: "unconfigured",
1597+label: "Unconfigured provider",
1598+configured: false,
1599+transports: ["gateway-relay"],
1600+},
1601+],
1602+realtimeTalkOptions: {
1603+provider: "openai",
1604+model: "",
1605+voice: "",
1606+transport: "webrtc",
1607+vadThreshold: "",
1608+silenceDurationMs: "",
1609+prefixPaddingMs: "",
1610+reasoningEffort: "",
1611+},
1612+ onRealtimeTalkOptionsChange,
1613+});
1614+1615+expect(getTalkSelectOptionValues(container, "provider")).toEqual([
1616+"",
1617+"openai",
1618+"plugin-realtime",
1619+"plugin-default-relay",
1620+]);
1621+expect(getTalkSelectOptionValues(container, "transport")).toEqual(["", "webrtc"]);
1622+1623+clickTalkSelectOption(container, "provider", "plugin-realtime");
1624+1625+expect(onRealtimeTalkOptionsChange).toHaveBeenCalledWith({
1626+provider: "plugin-realtime",
1627+transport: "",
1628+});
1629+});
1630+1631+it("keeps the Google provider WebSocket transport available", () => {
1632+const container = renderChatView({
1633+realtimeTalkOptionsOpen: true,
1634+realtimeTalkCatalogProviders: [
1635+{
1636+id: "google",
1637+label: "Google",
1638+configured: true,
1639+transports: ["provider-websocket", "gateway-relay"],
1640+supportsBrowserSession: true,
1641+},
1642+],
1643+realtimeTalkOptions: {
1644+provider: "google",
1645+model: "",
1646+voice: "",
1647+transport: "provider-websocket",
1648+vadThreshold: "",
1649+silenceDurationMs: "",
1650+prefixPaddingMs: "",
1651+reasoningEffort: "",
1652+},
1653+onRealtimeTalkOptionsChange: () => undefined,
1654+});
1655+1656+expect(getTalkSelectOptionValues(container, "transport")).toEqual([
1657+"",
1658+"gateway-relay",
1659+"provider-websocket",
1660+]);
1661+});
1662+15581663it("renders composer and Talk labels from the active locale", async () => {
15591664await i18n.setLocale("zh-CN");
15601665const container = renderChatView();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。