feat: add RAG-Anything Studio — standalone multimodal-aware Web UI#270
Open
devinlovekoala wants to merge 15 commits into
Open
feat: add RAG-Anything Studio — standalone multimodal-aware Web UI#270devinlovekoala wants to merge 15 commits into
devinlovekoala wants to merge 15 commits into
Conversation
…ved job errors - Add ReadinessContext: globally tracks llm/embedding key status and indexed doc count - UploadPage: show gate banner with missing keys listed, disable process button when unconfigured - QueryPage: dual guard — blocks query if unconfigured OR no indexed docs, shows contextual action - Dashboard: replace static metrics with 3-step onboarding track (Config → Upload → Query), auto-advances active step based on real state; keep metrics + recent doc list below - JobPage: extract error summary from traceback (last non-File line), show collapsible traceback behind 'Show details'; log console auto-scrolls to bottom on every log update - styles.css: full rewrite with CSS custom properties, refined sidebar (sticky, footer status dot), improved typography scale, gate-banner, onboarding-track, error-summary, log-section components
Backend: - POST /api/settings/test-connection: tests LLM/Embedding/Vision using unsaved form values; falls back to saved key when form field is blank - Embedding test returns detected_dim by measuring actual vector length - LLM/Vision test sends a minimal 4-token prompt and measures latency Frontend: - SettingsPage: each provider card gets a 'Test connection' button with spinner, green latency badge on success, red Failed badge on error - Embedding card: on successful test, detected_dim is auto-applied to the Dimension field and shown as 'Auto-detected: N' alongside it - API key placeholder shows hint when key is already saved so user knows they can leave it blank during a re-test
- Backend: POST /api/settings/list-models — fetches /v1/models from any
OpenAI-compatible provider; falls back to saved API key when form key
is blank; returns ModelListResponse{ok, models[], error}
- Provider registry: 15 known platforms (SiliconFlow, 阿里云百炼, 百度千帆,
火山引擎, OpenRouter, DeepSeek, Groq, etc.) with pre-filled base URLs;
selecting a known provider auto-fills Base URL and hides the URL field
- Frontend: ProviderSection replaces free-text model input with a
two-mode ModelPickerField — text input + "Load models" button before
fetch, grouped searchable dropdown after; groups by owned_by field
matching Cherry Studio UX
- Provider select reordered into optgroups: Popular (CN), International,
Self-hosted, Other
- CSS: model-dropdown-panel, model-group, model-option, base-url-display,
model-picker-row, load-models-btn and related selectors
- pyproject.toml: add httpx>=0.25 as explicit dependency
- _test_vision: replace text-only openai_complete_if_cache call with a direct httpx multimodal POST containing a 1×1 white PNG; plain text calls are rejected by GLM-4V and most VLMs with InvalidResponseError - _is_vision_capable: pattern-match model IDs against known VL keywords (vl, vision, glm-4v, qwen-vl, llava, gpt-4o, claude-3, etc.) to tag ModelInfo.vision_capable in the /list-models response - ModelPickerField: when kind==='vision', default visionOnly filter to true and show "VL only" toggle button; VL badge shown on capable models - styles: .model-badge--vision (blue), .vision-filter-btn + .active state
…s, improved processing efficiency version
…repaired the data model
…rage mode selection
…rage mode selection
…n detection and full configuration
|
wow great idea |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR introduces RAG-Anything Studio, a standalone, local-first Web UI for RAG-Anything.
Motivation
While RAG-Anything provides strong multimodal capabilities, it currently lacks a practical interface for:
This PR provides a minimal, low-risk UI layer to improve usability and observability without modifying the core pipeline.
Scope
This PR does not redesign RAG-Anything.
It adds an optional UI layer on top of the existing system.
All code lives under
/raganything_studioand interacts with RAG-Anything only through its public APIs.What's included
raganything_studio/backend/) — FastAPI service wrappingRAGAnythingwithout modifying its internalsraganything_studio/frontend/) — React + TypeScript SPA (prebuilt and served frombackend/static/, no Node.js required)Key capabilities
Multimodal interaction
System configuration
Reliability & usability
Visualization
Design principles
/raganything_studiopip install ".[studio]")Test plan
Automated checks:
python -m pip install -e .completes in a clean virtual environmentcd raganything_studio/frontend && npm ci && npm run buildpython -m raganything_studio --host 127.0.0.1 --port 7860curl -fsS http://127.0.0.1:7860/api/healthpytest tests/studioManual checks:
http://127.0.0.1:7860and verify the Studio UI loadssucceededand the document becomesindexed