Add chat-ui-htmx module: streaming chat page on Spring AI 2.0.2 with htmx and its SSE extension (vendored), MessageChatMemoryAdvisor keyed by the HTTP session, a Stop button, and the traps measured: EventSource strips one leading space per data line, model text must be HTML-escaped, a cancelled stream left the upstream connection open in 7 of 8 runs until an OkHttp interceptor calls Call.cancel (8 of 8 closed after), and the SDK push source ignores back-pressure (limitRate changes only the demand; a bounded buffer works). The model is a stub OpenAI-compatible SSE server written for the module; no real provider was run.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b6Kg9RWSTJzyz6KP9X
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
== turn 1 (session A)
|
||||
A1: '[stub] saw 2 messages. Earlier user turns: none. You said: My name is Asha and I like tea'
|
||||
== turn 2 (session A, same cookie)
|
||||
A2: '[stub] saw 4 messages. Earlier user turns: My name is Asha and I like tea. You said: What did I just tell you?'
|
||||
cookies: ['JSESSIONID']
|
||||
== turn 1 (session B, fresh browser context, no cookie)
|
||||
B1: '[stub] saw 2 messages. Earlier user turns: none. You said: What did I just tell you?'
|
||||
== New conversation button in session A, then ask again
|
||||
A3: '[stub] saw 2 messages. Earlier user turns: none. You said: Do you remember me?'
|
||||
== model output containing markup
|
||||
rendered text: 'Here is <b>bold</b> and <img src=x onerror=alert(1)> & done'
|
||||
<b> elements created inside the answer: 0
|
||||
<img> elements created inside the answer: 0
|
||||
alert dialogs fired: 0
|
||||
== stop button
|
||||
text at click : 'w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11'
|
||||
text 1.5 s on : 'w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12'
|
||||
grew after stop: False
|
||||
Reference in New Issue
Block a user