- .example-chip-btn button -> button.example-chip-btn (class is on button itself)
- .example-chips-row .block for flex:1 wrapper layout
- Remove size='sm' which forced height:26px via Gradio sm class
- Add height:auto !important to allow min-height:80px to take effect
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- .input-row: align-items center, gap 8px
- .pill-send-btn: align-self center on wrapper (not button)
- remove flex-end and margin-bottom that caused top misalignment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wrap thinking_box/chatbot/source_box in gr.Column(visible=False).
Show on first message send, hide again on reset/user switch.
All respond yields updated to include 9th chat_column output.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gr.HTML inline onclick cannot update Gradio 6 Svelte component state.
Replace _example_chips_html() with gr.Button per chip wired to msg_box
via Gradio event system. CSS updated from .example-chip to .example-chip-btn.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Analyzed design mockup (Gemini-style) vs current UI and documented:
- D4-1: left sidebar layout replacing top tabs
- D4-2: welcome view with personalized greeting + glow gradient
- D4-3: pill-shaped input with center/bottom position transition
- D4-4: example question chip cards (gr.HTML replacing gr.Examples)
- D4-5: control panel iconification with popup panel
- D4-6: conversation history in sidebar via localStorage
Includes comparison table, implementation difficulty ratings, and checklist.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- app.py: image_input gr.Image component, respond() accepts image_path,
all yields updated to 7 outputs
- api_client.py: chat(image_path=None), base64-encodes image for API
- services/chat.py: chat(image_path=None) passes through to api_client
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add source_box gr.HTML component below chatbot
- Add _sources_html() helper rendering <details> expand/collapse
- Handle __sources token in respond(): update source_box independently of thinking_box
- Reset both thinking_box and source_box on each new message
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
During streaming: _live_html (plain div) shows only the current line —
no DOM reset, no closing issue. __thinking shows last non-empty line,
__meta shows the full trimmed message.
On completion: _thinking_html (<details>) shows all accumulated content
collapsed, expands on click.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
__status tokens show immediately in the thinking box but do not
accumulate in thinking_acc. When real content (__meta/__thinking)
arrives it overwrites the status message naturally.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gr.Markdown visible toggling is unreliable in Gradio streaming generators.
Switched to gr.HTML with inline styles — empty string hides the element,
HTML string shows the styled box. No visibility state needed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Both __meta (LangGraph/search progress) and __thinking (LLM reasoning)
tokens now stream into the thinking box instead of the chatbot.
Chatbot shows only the final answer. Thinking box shows the full
analysis pipeline: [LangGraph → ...], 문서 검색 중, thinking content.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Show thinking progress in a separate animated box above chatbot
(🤔 사고 중... while streaming, 💭 사고 완료 when answer starts)
- Fix ValueError: add missing 5th yield value (thinking_box) to all
respond() yield statements
- Fix [Reset] and other sync handlers: replace asyncio.get_event_loop()
.run_until_complete() with asyncio.run() for AnyIO thread compatibility
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Introduced "thinking box" UI to display intermediate thought processes.
- Added CSS styling for the thinking box with scrollable and formatted design.
- Updated response handling to show thinking progress and completion dynamically.
- Enhanced Gradio outputs to include the new thinking box component.
Filter __meta dict tokens from TTS accumulator so progress messages
([LangGraph], thinking blocks, source references) are displayed in chat
but not read aloud. Answer tokens continue to accumulate in tts_text.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>