## MODIFIED Requirements ### Requirement: Chat endpoint proxies to Responses API The API backend SHALL expose `POST /api/chat` that accepts a list of messages and processes them using a Semantic Kernel chat completion service. The kernel is configured with an OpenAI connector pointed at the existing CLIProxyAPI proxy. #### Scenario: Successful chat request - **WHEN** the client sends a POST to `/api/chat` with a message list - **THEN** the API processes the messages through the Semantic Kernel and returns the response ### Requirement: Streaming response delivery The API backend SHALL stream the Semantic Kernel's chat completion response back to the WASM client as `text/event-stream`, forwarding text content so the client can render tokens incrementally. The SSE event format MUST remain `data: {"text":"..."}\n\n` for text deltas and `data: [DONE]\n\n` for completion. #### Scenario: Tokens stream to client - **WHEN** the Semantic Kernel emits streaming chat message content - **THEN** the backend forwards each content chunk as an SSE event to the client containing the text fragment #### Scenario: Stream completes - **WHEN** the Semantic Kernel streaming response completes - **THEN** the backend signals stream completion to the client with `data: [DONE]\n\n` ### Requirement: Configurable proxy target The CLIProxyAPI base URL and model name SHALL be configurable via `appsettings.json` in the API project, not hardcoded. These values are used to configure the Semantic Kernel OpenAI connector. #### Scenario: Configuration read at startup - **WHEN** the API starts - **THEN** it reads `ResponsesApi:BaseUrl` and `ResponsesApi:Model` from configuration to configure the Semantic Kernel ### Requirement: Error propagation If the LLM service returns an error or is unreachable, the API backend SHALL return an error SSE event and the client SHALL display the error to the user. #### Scenario: LLM service unreachable - **WHEN** the CLIProxyAPI proxy is not running - **THEN** the client displays an error message instead of an assistant response