Lemonade Experiences: model updates, UI fixes, and tool-use support#1559
Lemonade Experiences: model updates, UI fixes, and tool-use support#1559ramkrishna2910 wants to merge 13 commits intomainfrom
Conversation
Resolve CMakeLists.txt conflict: keep experience_tools.cpp from branch and unconditional websocket sources from main. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Allow experience models (empty checkpoint) through frontend normalization - Show summed component sizes instead of "N/A" for experience models - Update Ultra to use Qwen3.5-35B + Flux-2-Klein-9B-GGUF (gen + edit) - Add getExperienceImageModel() to resolve image component for edit support - Only show Edit mode in image panel when the experience's image model supports it - Render tool-generated images in experience panel with full image styling - Update CLAUDE.md experience model table Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Change edit_image requires_labels from ["image"] to ["edit"] so only experiences with an edit-capable image model (Ultra) offer the tool - Only auto-convert generate_image to edit_image when model supports edit - Pass modelsData to executeLemonadeTool for label checking Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
@claude review |
|
Claude finished @ramkrishna2910's task in 2m 36s —— View job PR Review: Lemonade Experiences — model updates, UI fixes, and tool-use support
Security Issues (must fix before merge)CodeQL is correct — there are real XSS/URL-redirect risks in the three flagged lines. 1.
|
- Sanitize image URLs: only render data:image/ URLs to prevent XSS - Allowlist audio MIME types to prevent injection via crafted MIME strings - Export NON_LLM_LABELS from experienceModels.ts, import in lemonadeTools.ts - Add ToolDefinitionEntry type to replace as-any casts - Remove console.log from experience agentic loop - Log warning on tool argument parse failures instead of silently swallowing - Add fallback message when MAX_ITERATIONS reached with no artifacts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove experience_tools.cpp/.h (is_experience_model, get_experience_llm_model, has_label) — compiled but never called from any C++ code - Remove Router::audio_speech_to_base64() — declared and defined but never invoked - Add "Thinking..." indicator in experience agentic loop so the assistant bubble is not blank while waiting for the LLM response Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| ### 1. Find your models | ||
|
|
||
| ```bash | ||
| curl http://localhost:8000/v1/models |
There was a problem hiding this comment.
| curl http://localhost:8000/v1/models | |
| curl http://localhost:13305/v1/models |
There was a problem hiding this comment.
Lots of references to old port below as well
|
|
||
| ### 3. Run your agentic loop | ||
|
|
||
| ```python |
There was a problem hiding this comment.
Should this be a python file so that people can try it?
| @@ -1316,9 +1316,9 @@ | |||
There was a problem hiding this comment.
Is there any point in having a Medium mode considering it has basically the same RAM requirement as the Ultra mode? Suggest just removing it.
| @@ -0,0 +1,177 @@ | |||
| # Lemonade Tools | |||
There was a problem hiding this comment.
When I'm first getting started, it says "Size N/A" and doesn't tell me what the download button will actually do.
Then when I click download, it says its downloading "Lemonade Ultra", but the file is actually a flux.gguf.
Can you refine the onboarding experience so that people understand they are signing up for many-gigabyte downloads and can track them appropriately?
Also it would be nice if it was clear they were downloading the models, not downloading "Lemonade Ultra" (since people might think we made our own model).
There was a problem hiding this comment.
It also showed in the UI that the download was complete, even though only Flux had downloaded and I still needed Kokoro. Iterating over each model and pulling it if needed should solve this.
Maybe it was an architectural mistake to put the experiences into server_models.json? For example they also show up in the models endpoint in AnythingLLM.
There was a problem hiding this comment.
I also had to download Ultra, then restart lemond to get Ultra to show up as available.
| @@ -0,0 +1,177 @@ | |||
| # Lemonade Tools | |||
|
|
|||
| # Lemonade Tools | ||
|
|
||
| Lemonade exposes multimodal capabilities through standard OpenAI-compatible endpoints. You can use these as tools in any LLM agentic loop — pass the tool definitions to your LLM, execute the tool calls against Lemonade's endpoints, and feed the results back. | ||
|
|
There was a problem hiding this comment.
Hmm its not generating speech either, and wont admit that it has any tools available.
- Restore CLAUDE.md to @AGENTS.md reference (was overwritten with full content) - Remove .claude/settings.local.json from tracking (already in .gitignore) - Remove Medium tier (same RAM as Ultra, no differentiation) - Rename "Lemonade Ultra" to "Ultra Bundle", "Lemonade Lite" to "Lite Bundle" - Rename "Experiences" category to "Meta-Engine" in model tab Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts: # src/app/src/renderer/components/panels/LLMChatPanel.tsx # src/app/src/renderer/index.html
When an experience bundle is selected, the app now stays in the normal LLM chat layout instead of switching to a separate "experience panel". The tool-use agentic loop (image gen/edit, TTS, transcription, vision) is preserved — only the UI differences (topbar, empty state, mode transitions, combined image+audio upload, dedicated mic button, hidden model selector) are removed. Audio input will be added to the main panel in a follow-up PR. - Remove isExperienceLayoutActive, modeTransitionClass, mic-dictation state - Remove handleExperienceFileUpload, toggleMicDictation, stopMicDictation - Remove experience topbar + experience-empty-message JSX - Remove experience-specific leftControls/rightControls branches - Always render chat header and ModelSelector - Drop onUnloadExperience prop and handleUnloadExperienceModel callback - Drop experienceModeChanged event (dispatch + listener in App.tsx) - Drop chat-window-experience and chat-window-experience-mode CSS classes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>


Summary
Test plan
python test/server_endpoints.pyagainst the built server🤖 Generated with Claude Code