Skip to content

feat(playground): add playground parameter settings panel#6044

Merged
t0ng7u merged 2 commits into
mainfrom
feat/playground-parameter-panel
Jul 10, 2026
Merged

feat(playground): add playground parameter settings panel#6044
t0ng7u merged 2 commits into
mainfrom
feat/playground-parameter-panel

Conversation

@QuentinHsu

@QuentinHsu QuentinHsu commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

⚠️ 提交说明 / PR Notice

Important

  • 请提供人工撰写的简洁摘要,避免直接粘贴未经整理的 AI 输出。

📝 变更描述 / Description

(简述:做了什么?为什么这样改能生效?请基于你对代码逻辑的理解来写,避免粘贴未经整理的内容)

概述

  • 为 default 操练场补齐可配置参数入口,并优化模型/分组选择器在长列表场景下的交互。

改动说明

  • 新增参数设置面板,支持 temperature、top_p、frequency_penalty、presence_penalty、max_tokens 和 seed。
  • 参数面板复用现有配置状态与持久化逻辑,只有启用的参数会写入请求。
  • 桌面端参数面板限制视口高度,内容过多时内部滚动;移动端使用底部面板。
  • 模型/分组选择器限制最高显示高度,让左右列表高度一致并分别滚动。
  • 打开模型/分组选择器时自动滚动到当前选中项,并增强选中模型的视觉区分。
  • 补齐参数面板相关多语言文案。

使用方式

  • 在操练场输入框工具栏点击参数按钮,打开参数设置面板。
  • 打开单个参数开关后调整对应值,发送请求时仅携带已启用参数。

🚀 变更类型 / Type of change

  • 🐛 Bug 修复 (Bug fix) - 请关联对应 Issue,避免将设计取舍、理解偏差或预期不一致直接归类为 bug
  • ✨ 新功能 (New feature) - 重大特性建议先通过 Issue 沟通
  • ⚡ 性能优化 / 重构 (Refactor)
  • 📝 文档更新 (Documentation)

🔗 关联任务 / Related Issue

  • Closes # (如有)

✅ 提交前检查项 / Checklist

  • 人工确认: 我已亲自整理并撰写此描述,没有直接粘贴未经处理的 AI 输出。
  • 非重复提交: 我已搜索现有的 IssuesPRs,确认不是重复提交。
  • Bug fix 说明: 若此 PR 标记为 Bug fix,我已提交或关联对应 Issue,且不会将设计取舍、预期不一致或理解偏差直接归类为 bug。
  • 变更理解: 我已理解这些更改的工作原理及可能影响。
  • 范围聚焦: 本 PR 未包含任何与当前任务无关的代码改动。
  • 本地验证: 已在本地运行并通过测试或手动验证,维护者可以据此复核结果。
  • 安全合规: 代码中无敏感凭据,且符合项目代码规范。

📸 运行证明 / Proof of Work

(请在此粘贴截图、关键日志或测试报告,以证明变更生效)
CleanShot 2026-07-09 at 22 41 12
CleanShot 2026-07-09 at 22 41 39

Summary by CodeRabbit

  • New Features

    • Added a new parameter settings panel in the Playground with toggles and controls for generation options like temperature, top-p, max tokens, seed, and penalties.
    • Playground inputs now support enabling/disabling parameters and syncing those settings across the interface.
    • Improved model selector behavior so the currently selected group/model is brought into view automatically.
  • Bug Fixes

    • Updated scrolling behavior in the model selector for smoother, more reliable navigation.
    • Added missing translations for the new parameter-related labels and descriptions across multiple languages.

- constrain the desktop selector panel so long group and model lists scroll within a shared height.
- make the selected model stand out with stronger row and label styling.
- scroll both lists to the active selections after the popover opens.
- expose playground controls for sampling, penalty, token, and seed parameters.
- reuse the existing persisted config and parameter-enabled state so requests only send enabled values.
- add localized parameter copy and keep the panel scrollable on short screens.
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Adds a scroll-into-view helper and shared layout classes for the model group selector, plus a new Playground parameter panel (temperature, top_p, penalties, max_tokens, seed) wired through playground input components and state, with localized labels/descriptions added across all supported locale files and static keys.

Changes

Model Group Selector Scroll Behavior

Layer / File(s) Summary
Layout classes and scroll helper
web/default/src/components/model-group-selector-layout.ts
New module exports modelGroupSelectorLayoutClasses styling constants and scrollSelectedOptionIntoView, which centers a selected option in its scroll container or falls back to native scrollIntoView.
Selector wiring and rendering
web/default/src/components/model-group-selector.tsx
Adds refs and a useEffect that schedules animation frames to auto-scroll the selected group/model into view on open, and applies the new shared layout classes across group/model list rendering and the desktop popover panel.

Playground Parameter Panel Feature

Layer / File(s) Summary
Parameter contracts and normalization
web/default/src/features/playground/lib/parameters/playground-parameters.ts, web/default/src/features/playground/lib/index.ts
Defines PlaygroundParameterControl/PlaygroundParameterKey types, PLAYGROUND_PARAMETER_CONTROLS (temperature, top_p, penalties, max_tokens, seed), a scroll class constant, and normalizeParameterNumberValue/getParameterControlValueText helpers; re-exported from the lib barrel.
Parameter panel UI
web/default/src/features/playground/components/input/playground-parameter-panel.tsx
New PlaygroundParameterPanel component renders toggleable slider/input controls with mobile Sheet and desktop Popover layouts, an active-count badge, and value updates via onConfigChange.
Wiring into input tools/state
web/default/src/features/playground/components/input/playground-input-tools.tsx, .../playground-input.tsx, web/default/src/features/playground/index.tsx
Expands props to carry config/parameterEnabled and change callbacks, inserts PlaygroundParameterPanel into PlaygroundInputTools, and connects updateParameterEnabled state through PlaygroundPlaygroundInput.
Localized strings
web/default/src/i18n/locales/*.json, web/default/src/i18n/static-keys.ts
Adds translation entries for parameter labels/descriptions/panel copy across en, fr, ja, ru, vi, zh, zh-TW locales and matching static-key definitions.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

  • QuantumNous/new-api#5217: Both PRs modify playground-input-tools.tsx and playground-input.tsx, changing the PlaygroundInputTools props/UI structure that this PR builds on.

Suggested reviewers: Calcium-Ion, creamlike1024

Poem

A rabbit hops through sliders bright,
Temperature, seed, and top-p just right,
The model list glides smooth into view,
Scrolled and centered, nothing askew.
Fifteen tongues now say "Max Tokens" too —
Thump thump, this PR is through! 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding a playground parameter settings panel.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/playground-parameter-panel

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (4)
web/default/src/components/model-group-selector.tsx (2)

1-834: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

File exceeds the ~200-line guideline threshold.

The component (830+ lines) has grown well past the recommended size. Consider extracting renderGroupList, renderModelList, and the scroll-into-view effect/refs into dedicated subcomponents or a custom hook (e.g., useModelGroupScrollIntoView). As per path instructions, "Keep files reasonably small; when a single file grows beyond about 200 lines, consider extracting subcomponents or custom hooks."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/default/src/components/model-group-selector.tsx` around lines 1 - 834,
The file is far over the recommended size, so split the large selectors into
smaller pieces. Extract the shared trigger UI and the list-rendering logic from
ModelSelector, GroupSelector, and ModelGroupSelector into dedicated
subcomponents, and move the open-state scrolling/refs logic into a custom hook
such as useModelGroupScrollIntoView. Keep the existing symbols like
ModelGroupSelector, renderGroupList, renderModelList, and
scrollSelectedOptionIntoView as the main entry points while relocating
implementation details into separate files or helpers.

Source: Path instructions


744-777: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract isSelected to avoid repeating the comparison.

selectedModel === model.value is recomputed four times per row (className, ref, text className, Check icon). renderGroupList already extracts isSelected for the same pattern — apply the same here for consistency and readability.

♻️ Proposed refactor
             {filteredModels.map((model) => (
+              (() => {
+                const isSelected = selectedModel === model.value
+                return (
               <CommandItem
                 className={cn(
                   modelGroupSelectorLayoutClasses.modelItem,
-                  selectedModel === model.value
+                  isSelected
                     ? modelGroupSelectorLayoutClasses.selectedModelItem
                     : modelGroupSelectorLayoutClasses.unselectedModelItem
                 )}
                 key={model.value}
                 onSelect={handleModelChange}
-                ref={
-                  selectedModel === model.value
-                    ? selectedModelOptionRef
-                    : undefined
-                }
+                ref={isSelected ? selectedModelOptionRef : undefined}
                 value={model.value}
               >
                 <span
                   className={cn(
                     'min-w-0 truncate',
-                    selectedModel === model.value
+                    isSelected
                       ? modelGroupSelectorLayoutClasses.selectedModelText
                       : modelGroupSelectorLayoutClasses.unselectedModelText
                   )}
                 >
                   {model.label}
                 </span>
                 <Check
                   className={cn(
                     'size-3.5 shrink-0',
-                    selectedModel === model.value ? 'opacity-100' : 'opacity-0'
+                    isSelected ? 'opacity-100' : 'opacity-0'
                   )}
                 />
               </CommandItem>
+                )
+              })()
             ))}

(Alternatively, extract a small ModelListItem component that takes isSelected as a prop for a cleaner structure.)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/default/src/components/model-group-selector.tsx` around lines 744 - 777,
In the filteredModels mapping inside model-group-selector.tsx, the selectedModel
=== model.value check is duplicated multiple times per row, making the JSX noisy
and inconsistent with renderGroupList. Extract a local isSelected boolean before
returning each CommandItem, then reuse it for className, ref, the span text
class, and the Check opacity logic; alternatively, move the row into a small
ModelListItem component that receives isSelected. Use the existing
filteredModels map and CommandItem rendering as the place to apply the refactor.
web/default/src/features/playground/components/input/playground-parameter-panel.tsx (1)

201-217: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Hide the count badge when no parameters are enabled.

The badge always renders, showing "0" when activeCount is 0. Consider only rendering it when activeCount > 0 to avoid a misleading persistent indicator.

🎨 Proposed fix
       <SlidersHorizontalIcon size={16} />
-      <span className='bg-primary text-primary-foreground absolute -top-1 -right-1 flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-1 text-[9px] leading-none font-semibold'>
-        {activeCount}
-      </span>
+      {activeCount > 0 && (
+        <span className='bg-primary text-primary-foreground absolute -top-1 -right-1 flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-1 text-[9px] leading-none font-semibold'>
+          {activeCount}
+        </span>
+      )}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@web/default/src/features/playground/components/input/playground-parameter-panel.tsx`
around lines 201 - 217, The parameter count badge in the playground parameter
panel should not render when no controls are enabled. Update the trigger UI in
playground-parameter-panel.tsx around the PromptInputButton/activeCount logic so
the badge is conditionally shown only when activeCount is greater than zero,
while leaving the existing count calculation and button behavior unchanged.
web/default/src/features/playground/lib/parameters/playground-parameters.ts (1)

19-22: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Narrow ParameterValue to the actual parameter keys.

ParameterValue = PlaygroundConfig[keyof PlaygroundConfig] pulls in model/group (string) and stream (boolean) even though getParameterControlValueText only ever receives values for the six numeric/nullable parameter keys. Narrowing this to PlaygroundConfig[PlaygroundParameterKey] would give a tighter, more accurate type without any behavior change.

♻️ Proposed refactor
-type ParameterValue = PlaygroundConfig[keyof PlaygroundConfig]
-
 export type PlaygroundParameterKey = keyof ParameterEnabled
+
+type ParameterValue = PlaygroundConfig[PlaygroundParameterKey]

Also applies to: 120-129

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/default/src/features/playground/lib/parameters/playground-parameters.ts`
around lines 19 - 22, Narrow the `ParameterValue` alias in
`playground-parameters.ts` so it only covers the actual numeric/nullable
parameter keys used by `getParameterControlValueText`, instead of
`PlaygroundConfig[keyof PlaygroundConfig]` which also includes `model`, `group`,
and `stream`. Update the type to use `PlaygroundConfig[PlaygroundParameterKey]`
(or an equivalent key-restricted union) and keep the existing behavior unchanged
while tightening the types around `getParameterControlValueText` and related
parameter helpers.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/default/src/components/model-group-selector.tsx`:
- Around line 621-642: The mobile auto-scroll in the useEffect around
scrollSelectedOptionIntoView is targeting the wrong container, so the selected
group cannot actually scroll into view on mobile. Update the open-state scroll
logic in model-group-selector.tsx to avoid passing groupScrollContainerRef when
the group list is not the scrollable ancestor, and let the
selectedGroupOptionRef use native scrollIntoView behavior on mobile like
selectedModelOptionRef. Keep the desktop path using the group scroll container,
and make sure the layout condition in
modelGroupSelectorLayoutClasses.groupScroll matches the ref usage.

In `@web/default/src/i18n/locales/zh-TW.json`:
- Line 1507: The zh-TW locale entry for the referral-rewards message regressed
to the English source text; replace the value in zh-TW.json with the proper
Traditional Chinese translation for the string used by this referral rewards
copy so zh-TW users no longer see English. Keep the key unchanged and update
only the translated value for this locale entry.

---

Nitpick comments:
In `@web/default/src/components/model-group-selector.tsx`:
- Around line 1-834: The file is far over the recommended size, so split the
large selectors into smaller pieces. Extract the shared trigger UI and the
list-rendering logic from ModelSelector, GroupSelector, and ModelGroupSelector
into dedicated subcomponents, and move the open-state scrolling/refs logic into
a custom hook such as useModelGroupScrollIntoView. Keep the existing symbols
like ModelGroupSelector, renderGroupList, renderModelList, and
scrollSelectedOptionIntoView as the main entry points while relocating
implementation details into separate files or helpers.
- Around line 744-777: In the filteredModels mapping inside
model-group-selector.tsx, the selectedModel === model.value check is duplicated
multiple times per row, making the JSX noisy and inconsistent with
renderGroupList. Extract a local isSelected boolean before returning each
CommandItem, then reuse it for className, ref, the span text class, and the
Check opacity logic; alternatively, move the row into a small ModelListItem
component that receives isSelected. Use the existing filteredModels map and
CommandItem rendering as the place to apply the refactor.

In
`@web/default/src/features/playground/components/input/playground-parameter-panel.tsx`:
- Around line 201-217: The parameter count badge in the playground parameter
panel should not render when no controls are enabled. Update the trigger UI in
playground-parameter-panel.tsx around the PromptInputButton/activeCount logic so
the badge is conditionally shown only when activeCount is greater than zero,
while leaving the existing count calculation and button behavior unchanged.

In `@web/default/src/features/playground/lib/parameters/playground-parameters.ts`:
- Around line 19-22: Narrow the `ParameterValue` alias in
`playground-parameters.ts` so it only covers the actual numeric/nullable
parameter keys used by `getParameterControlValueText`, instead of
`PlaygroundConfig[keyof PlaygroundConfig]` which also includes `model`, `group`,
and `stream`. Update the type to use `PlaygroundConfig[PlaygroundParameterKey]`
(or an equivalent key-restricted union) and keep the existing behavior unchanged
while tightening the types around `getParameterControlValueText` and related
parameter helpers.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f5326b8b-aa9e-4dff-bfbd-9abf8f066a86

📥 Commits

Reviewing files that changed from the base of the PR and between 246d62a and 928b475.

📒 Files selected for processing (16)
  • web/default/src/components/model-group-selector-layout.ts
  • web/default/src/components/model-group-selector.tsx
  • web/default/src/features/playground/components/input/playground-input-tools.tsx
  • web/default/src/features/playground/components/input/playground-input.tsx
  • web/default/src/features/playground/components/input/playground-parameter-panel.tsx
  • web/default/src/features/playground/index.tsx
  • web/default/src/features/playground/lib/index.ts
  • web/default/src/features/playground/lib/parameters/playground-parameters.ts
  • web/default/src/i18n/locales/en.json
  • web/default/src/i18n/locales/fr.json
  • web/default/src/i18n/locales/ja.json
  • web/default/src/i18n/locales/ru.json
  • web/default/src/i18n/locales/vi.json
  • web/default/src/i18n/locales/zh-TW.json
  • web/default/src/i18n/locales/zh.json
  • web/default/src/i18n/static-keys.ts

Comment on lines +621 to +642
useEffect(() => {
if (!open) {
return
}

let secondFrameId = 0
const firstFrameId = window.requestAnimationFrame(() => {
secondFrameId = window.requestAnimationFrame(() => {
scrollSelectedOptionIntoView(
selectedGroupOptionRef.current,
groupScrollContainerRef.current
)
scrollSelectedOptionIntoView(selectedModelOptionRef.current)
})
})

return () => {
window.cancelAnimationFrame(firstFrameId)
window.cancelAnimationFrame(secondFrameId)
}
}, [open, selectedGroup, selectedModel])

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Mobile group auto-scroll is a no-op.

groupScrollContainerRef is attached unconditionally, but the container only gets overflow-y-auto/scrollable layout (modelGroupSelectorLayoutClasses.groupScroll) when !isMobile (Line 669-684). On mobile the group list has no overflow set, so scrollTop/scrollTo assignments in scrollSelectedOptionIntoView are effectively no-ops — the selected group is never actually scrolled into view, contradicting the PR's "auto-scrolling to the current selection when opened" goal for mobile. The real scroll container on mobile is the Drawer's own wrapper (overflow-y-auto, further down in the render tree), so this ref/container mismatch silently breaks the intended UX on mobile.

🔧 Proposed fix
         scrollSelectedOptionIntoView(
           selectedGroupOptionRef.current,
-          groupScrollContainerRef.current
+          isMobile ? undefined : groupScrollContainerRef.current
         )

This makes the mobile path fall back to native scrollIntoView, which will correctly locate the Drawer's scrollable ancestor (as already happens for selectedModelOptionRef).

Also applies to: 669-684

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/default/src/components/model-group-selector.tsx` around lines 621 - 642,
The mobile auto-scroll in the useEffect around scrollSelectedOptionIntoView is
targeting the wrong container, so the selected group cannot actually scroll into
view on mobile. Update the open-state scroll logic in model-group-selector.tsx
to avoid passing groupScrollContainerRef when the group list is not the
scrollable ancestor, and let the selectedGroupOptionRef use native
scrollIntoView behavior on mobile like selectedModelOptionRef. Keep the desktop
path using the group scroll container, and make sure the layout condition in
modelGroupSelectorLayoutClasses.groupScroll matches the ref usage.

"Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.": "每個檔位最多支援 2 個條件;最後一個檔位是不帶條件的兜底檔。建議使用完整輸入長度作為檔位條件,避免緩存命中減少收費輸入 token 後誤判檔位。",
"Each tier supports up to 2 conditions. The last tier without conditions is the fallback.": "每個階梯最多支援 2 個條件。最後一個無條件階梯作為兜底。",
"Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.": "當您的推薦人儲值時即可獲得獎勵。隨時將累計獎勵轉移到您的餘額。",
"Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.": "Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Untranslated string regressed to English.

The zh-TW value for this referral-rewards message is now identical to the English source text instead of a Traditional Chinese translation, so zh-TW users will see English here.

🌐 Proposed fix
-    "Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.": "Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.",
+    "Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.": "當用戶透過您的推薦連結加入時獲得獎勵。可隨時將累積獎勵轉入您的餘額。",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.": "Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.",
"Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.": "當用戶透過您的推薦連結加入時獲得獎勵。可隨時將累積獎勵轉入您的餘額。",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/default/src/i18n/locales/zh-TW.json` at line 1507, The zh-TW locale entry
for the referral-rewards message regressed to the English source text; replace
the value in zh-TW.json with the proper Traditional Chinese translation for the
string used by this referral rewards copy so zh-TW users no longer see English.
Keep the key unchanged and update only the translated value for this locale
entry.

@t0ng7u t0ng7u merged commit 4823417 into main Jul 10, 2026
2 checks passed
lansine pushed a commit to evin-pubb/new-api-fork that referenced this pull request Jul 14, 2026
…s#6044)

Merge pull request QuantumNous#6044 from QuantumNous/feat/playground-parameter-panel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants