## ADDED Requirements ### Requirement: System prompt editor tab The chat page SHALL include a "System Prompt" tab with a multi-line text area where the user can enter a system prompt. The system prompt value SHALL persist across tab switches within the same session. #### Scenario: User enters a system prompt - **WHEN** the user navigates to the System Prompt tab and types text - **THEN** the text is stored in the component state and included in the next chat request #### Scenario: System prompt survives tab switch - **WHEN** the user enters a system prompt, switches to the Chat tab, then switches back - **THEN** the system prompt text is unchanged ### Requirement: Model settings tab The chat page SHALL include a "Model Settings" tab with controls for Temperature, TopP, and MaxTokens. Each control SHALL display its current value and allow adjustment within valid ranges. #### Scenario: Temperature control - **WHEN** the user adjusts the Temperature control - **THEN** the value is constrained to 0.0–2.0 and included in the next chat request's settings #### Scenario: TopP control - **WHEN** the user adjusts the TopP control - **THEN** the value is constrained to 0.0–1.0 and included in the next chat request's settings #### Scenario: MaxTokens control - **WHEN** the user sets the MaxTokens value - **THEN** the value is constrained to 1–4096 and included in the next chat request's settings #### Scenario: Default values - **WHEN** the user has not changed any model settings - **THEN** the controls show default values (Temperature: 1.0, TopP: 1.0, MaxTokens: empty/unset) and no overrides are sent to the API ### Requirement: Tabbed page layout The chat page SHALL use MudTabs with three tab panels: "Chat" (the existing conversation UI), "System Prompt" (the prompt editor), and "Model Settings" (the parameter controls). #### Scenario: Chat tab is default - **WHEN** the page loads - **THEN** the Chat tab is active and the conversation UI is displayed #### Scenario: Tab switching - **WHEN** the user clicks a different tab - **THEN** the corresponding panel is displayed and the previous panel is hidden but retains its state