ruflo 3.5.2 → 3.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rvf.manifest.json +295 -0
- package/package.json +16 -2
- package/src/chat-ui/Dockerfile +25 -0
- package/src/chat-ui/patch-mcp-url-safety.sh +28 -0
- package/src/chat-ui/static/chatui/icon-144x144.png +0 -0
- package/src/chat-ui/static/chatui/omni-welcome.gif +0 -0
- package/src/config/config.example.json +76 -0
- package/src/mcp-bridge/Dockerfile +45 -0
- package/src/mcp-bridge/index.js +1668 -0
- package/src/mcp-bridge/mcp-stdio-kernel.js +159 -0
- package/src/mcp-bridge/package.json +17 -0
- package/src/mcp-bridge/test-harness.js +470 -0
- package/src/nginx/Dockerfile +10 -0
- package/src/nginx/nginx.conf +67 -0
- package/src/nginx/static/favicon-dark.svg +4 -0
- package/src/nginx/static/favicon.svg +4 -0
- package/src/nginx/static/icon.svg +5 -0
- package/src/nginx/static/logo.svg +9 -0
- package/src/nginx/static/manifest.json +22 -0
- package/src/nginx/static/welcome.js +184 -0
- package/src/ruvocal/.claude/skills/add-model-descriptions/SKILL.md +73 -0
- package/src/ruvocal/.devcontainer/Dockerfile +9 -0
- package/src/ruvocal/.devcontainer/devcontainer.json +36 -0
- package/src/ruvocal/.dockerignore +13 -0
- package/src/ruvocal/.env +194 -0
- package/src/ruvocal/.env.ci +1 -0
- package/src/ruvocal/.eslintignore +13 -0
- package/src/ruvocal/.eslintrc.cjs +45 -0
- package/src/ruvocal/.github/ISSUE_TEMPLATE/bug-report--chat-ui-.md +43 -0
- package/src/ruvocal/.github/ISSUE_TEMPLATE/config-support.md +9 -0
- package/src/ruvocal/.github/ISSUE_TEMPLATE/feature-request--chat-ui-.md +17 -0
- package/src/ruvocal/.github/ISSUE_TEMPLATE/huggingchat.md +11 -0
- package/src/ruvocal/.github/release.yml +16 -0
- package/src/ruvocal/.github/workflows/build-docs.yml +18 -0
- package/src/ruvocal/.github/workflows/build-image.yml +142 -0
- package/src/ruvocal/.github/workflows/build-pr-docs.yml +20 -0
- package/src/ruvocal/.github/workflows/deploy-dev.yml +63 -0
- package/src/ruvocal/.github/workflows/deploy-prod.yml +78 -0
- package/src/ruvocal/.github/workflows/lint-and-test.yml +84 -0
- package/src/ruvocal/.github/workflows/slugify.yaml +72 -0
- package/src/ruvocal/.github/workflows/trufflehog.yml +17 -0
- package/src/ruvocal/.github/workflows/upload-pr-documentation.yml +16 -0
- package/src/ruvocal/.husky/lint-stage-config.js +4 -0
- package/src/ruvocal/.husky/pre-commit +2 -0
- package/src/ruvocal/.prettierignore +14 -0
- package/src/ruvocal/.prettierrc +7 -0
- package/src/ruvocal/.vscode/launch.json +11 -0
- package/src/ruvocal/.vscode/settings.json +14 -0
- package/src/ruvocal/CLAUDE.md +126 -0
- package/src/ruvocal/Dockerfile +93 -0
- package/src/ruvocal/LICENSE +203 -0
- package/src/ruvocal/PRIVACY.md +41 -0
- package/src/ruvocal/README.md +190 -0
- package/src/ruvocal/chart/Chart.yaml +5 -0
- package/src/ruvocal/chart/env/dev.yaml +260 -0
- package/src/ruvocal/chart/env/prod.yaml +273 -0
- package/src/ruvocal/chart/templates/_helpers.tpl +22 -0
- package/src/ruvocal/chart/templates/config.yaml +10 -0
- package/src/ruvocal/chart/templates/deployment.yaml +81 -0
- package/src/ruvocal/chart/templates/hpa.yaml +45 -0
- package/src/ruvocal/chart/templates/infisical.yaml +24 -0
- package/src/ruvocal/chart/templates/ingress-internal.yaml +32 -0
- package/src/ruvocal/chart/templates/ingress.yaml +32 -0
- package/src/ruvocal/chart/templates/network-policy.yaml +36 -0
- package/src/ruvocal/chart/templates/service-account.yaml +13 -0
- package/src/ruvocal/chart/templates/service-monitor.yaml +17 -0
- package/src/ruvocal/chart/templates/service.yaml +21 -0
- package/src/ruvocal/chart/values.yaml +73 -0
- package/src/ruvocal/docker-compose.yml +21 -0
- package/src/ruvocal/docs/adr/ADR-029-HUGGINGFACE-CHAT-UI-CLOUD-RUN.md +1236 -0
- package/src/ruvocal/docs/adr/ADR-033-RUVECTOR-RUFLO-MCP-INTEGRATION.md +111 -0
- package/src/ruvocal/docs/adr/ADR-034-OPTIONAL-MCP-BACKENDS.md +117 -0
- package/src/ruvocal/docs/adr/ADR-035-MCP-TOOL-GROUPS.md +186 -0
- package/src/ruvocal/docs/adr/ADR-037-AUTOPILOT-CHAT-MODE.md +1500 -0
- package/src/ruvocal/docs/adr/ADR-038-RUVOCAL-FORK.md +286 -0
- package/src/ruvocal/docs/source/_toctree.yml +30 -0
- package/src/ruvocal/docs/source/configuration/common-issues.md +38 -0
- package/src/ruvocal/docs/source/configuration/llm-router.md +105 -0
- package/src/ruvocal/docs/source/configuration/mcp-tools.md +84 -0
- package/src/ruvocal/docs/source/configuration/metrics.md +9 -0
- package/src/ruvocal/docs/source/configuration/open-id.md +57 -0
- package/src/ruvocal/docs/source/configuration/overview.md +89 -0
- package/src/ruvocal/docs/source/configuration/theming.md +20 -0
- package/src/ruvocal/docs/source/developing/architecture.md +48 -0
- package/src/ruvocal/docs/source/index.md +53 -0
- package/src/ruvocal/docs/source/installation/docker.md +43 -0
- package/src/ruvocal/docs/source/installation/helm.md +43 -0
- package/src/ruvocal/docs/source/installation/local.md +62 -0
- package/src/ruvocal/entrypoint.sh +19 -0
- package/src/ruvocal/mcp-bridge/.claude-flow/agents/store.json +27 -0
- package/src/ruvocal/mcp-bridge/.claude-flow/daemon-state.json +130 -0
- package/src/ruvocal/mcp-bridge/.claude-flow/daemon.log +0 -0
- package/src/ruvocal/mcp-bridge/.claude-flow/daemon.pid +1 -0
- package/src/ruvocal/mcp-bridge/.claude-flow/tasks/store.json +21 -0
- package/src/ruvocal/mcp-bridge/.swarm/hnsw.index +0 -0
- package/src/ruvocal/mcp-bridge/.swarm/hnsw.metadata.json +1 -0
- package/src/ruvocal/mcp-bridge/.swarm/memory.db +0 -0
- package/src/ruvocal/mcp-bridge/.swarm/model-router-state.json +14 -0
- package/src/ruvocal/mcp-bridge/.swarm/schema.sql +305 -0
- package/src/ruvocal/mcp-bridge/Dockerfile +45 -0
- package/src/ruvocal/mcp-bridge/cloudbuild.yaml +49 -0
- package/src/ruvocal/mcp-bridge/index.js +1864 -0
- package/src/ruvocal/mcp-bridge/mcp-stdio-kernel.js +159 -0
- package/src/ruvocal/mcp-bridge/package-lock.json +762 -0
- package/src/ruvocal/mcp-bridge/package.json +17 -0
- package/src/ruvocal/mcp-bridge/test-harness.js +470 -0
- package/src/ruvocal/models/add-your-models-here.txt +1 -0
- package/src/ruvocal/package-lock.json +11741 -0
- package/src/ruvocal/package.json +121 -0
- package/src/ruvocal/postcss.config.js +6 -0
- package/src/ruvocal/rvf.manifest.json +204 -0
- package/src/ruvocal/scripts/config.ts +64 -0
- package/src/ruvocal/scripts/generate-welcome.mjs +181 -0
- package/src/ruvocal/scripts/populate.ts +288 -0
- package/src/ruvocal/scripts/samples.txt +194 -0
- package/src/ruvocal/scripts/setups/vitest-setup-client.ts +0 -0
- package/src/ruvocal/scripts/setups/vitest-setup-server.ts +44 -0
- package/src/ruvocal/scripts/updateLocalEnv.ts +48 -0
- package/src/ruvocal/src/ambient.d.ts +7 -0
- package/src/ruvocal/src/app.d.ts +29 -0
- package/src/ruvocal/src/app.html +53 -0
- package/src/ruvocal/src/hooks.server.ts +32 -0
- package/src/ruvocal/src/hooks.ts +6 -0
- package/src/ruvocal/src/lib/APIClient.ts +148 -0
- package/src/ruvocal/src/lib/actions/clickOutside.ts +18 -0
- package/src/ruvocal/src/lib/actions/snapScrollToBottom.ts +346 -0
- package/src/ruvocal/src/lib/buildPrompt.ts +33 -0
- package/src/ruvocal/src/lib/components/AnnouncementBanner.svelte +20 -0
- package/src/ruvocal/src/lib/components/BackgroundGenerationPoller.svelte +168 -0
- package/src/ruvocal/src/lib/components/CodeBlock.svelte +73 -0
- package/src/ruvocal/src/lib/components/CopyToClipBoardBtn.svelte +92 -0
- package/src/ruvocal/src/lib/components/DeleteConversationModal.svelte +75 -0
- package/src/ruvocal/src/lib/components/EditConversationModal.svelte +100 -0
- package/src/ruvocal/src/lib/components/ExpandNavigation.svelte +22 -0
- package/src/ruvocal/src/lib/components/HoverTooltip.svelte +44 -0
- package/src/ruvocal/src/lib/components/HtmlPreviewModal.svelte +143 -0
- package/src/ruvocal/src/lib/components/InfiniteScroll.svelte +50 -0
- package/src/ruvocal/src/lib/components/MobileNav.svelte +300 -0
- package/src/ruvocal/src/lib/components/Modal.svelte +115 -0
- package/src/ruvocal/src/lib/components/ModelCardMetadata.svelte +71 -0
- package/src/ruvocal/src/lib/components/NavConversationItem.svelte +151 -0
- package/src/ruvocal/src/lib/components/NavMenu.svelte +295 -0
- package/src/ruvocal/src/lib/components/Pagination.svelte +97 -0
- package/src/ruvocal/src/lib/components/PaginationArrow.svelte +27 -0
- package/src/ruvocal/src/lib/components/Portal.svelte +24 -0
- package/src/ruvocal/src/lib/components/RetryBtn.svelte +18 -0
- package/src/ruvocal/src/lib/components/RuFloUniverse.svelte +185 -0
- package/src/ruvocal/src/lib/components/ScrollToBottomBtn.svelte +47 -0
- package/src/ruvocal/src/lib/components/ScrollToPreviousBtn.svelte +77 -0
- package/src/ruvocal/src/lib/components/ShareConversationModal.svelte +182 -0
- package/src/ruvocal/src/lib/components/StopGeneratingBtn.svelte +69 -0
- package/src/ruvocal/src/lib/components/SubscribeModal.svelte +87 -0
- package/src/ruvocal/src/lib/components/Switch.svelte +36 -0
- package/src/ruvocal/src/lib/components/SystemPromptModal.svelte +44 -0
- package/src/ruvocal/src/lib/components/Toast.svelte +27 -0
- package/src/ruvocal/src/lib/components/Tooltip.svelte +30 -0
- package/src/ruvocal/src/lib/components/WelcomeModal.svelte +46 -0
- package/src/ruvocal/src/lib/components/chat/Alternatives.svelte +77 -0
- package/src/ruvocal/src/lib/components/chat/BlockWrapper.svelte +72 -0
- package/src/ruvocal/src/lib/components/chat/ChatInput.svelte +490 -0
- package/src/ruvocal/src/lib/components/chat/ChatIntroduction.svelte +123 -0
- package/src/ruvocal/src/lib/components/chat/ChatMessage.svelte +548 -0
- package/src/ruvocal/src/lib/components/chat/ChatWindow.svelte +939 -0
- package/src/ruvocal/src/lib/components/chat/FileDropzone.svelte +92 -0
- package/src/ruvocal/src/lib/components/chat/ImageLightbox.svelte +66 -0
- package/src/ruvocal/src/lib/components/chat/MarkdownBlock.svelte +23 -0
- package/src/ruvocal/src/lib/components/chat/MarkdownRenderer.svelte +69 -0
- package/src/ruvocal/src/lib/components/chat/MarkdownRenderer.svelte.test.ts +58 -0
- package/src/ruvocal/src/lib/components/chat/MessageAvatar.svelte +103 -0
- package/src/ruvocal/src/lib/components/chat/ModelSwitch.svelte +64 -0
- package/src/ruvocal/src/lib/components/chat/OpenReasoningResults.svelte +81 -0
- package/src/ruvocal/src/lib/components/chat/TaskGroup.svelte +88 -0
- package/src/ruvocal/src/lib/components/chat/ToolUpdate.svelte +273 -0
- package/src/ruvocal/src/lib/components/chat/UploadedFile.svelte +253 -0
- package/src/ruvocal/src/lib/components/chat/UrlFetchModal.svelte +203 -0
- package/src/ruvocal/src/lib/components/chat/VoiceRecorder.svelte +214 -0
- package/src/ruvocal/src/lib/components/icons/IconBurger.svelte +20 -0
- package/src/ruvocal/src/lib/components/icons/IconCheap.svelte +20 -0
- package/src/ruvocal/src/lib/components/icons/IconChevron.svelte +24 -0
- package/src/ruvocal/src/lib/components/icons/IconDazzled.svelte +40 -0
- package/src/ruvocal/src/lib/components/icons/IconFast.svelte +20 -0
- package/src/ruvocal/src/lib/components/icons/IconLoading.svelte +22 -0
- package/src/ruvocal/src/lib/components/icons/IconMCP.svelte +28 -0
- package/src/ruvocal/src/lib/components/icons/IconMoon.svelte +21 -0
- package/src/ruvocal/src/lib/components/icons/IconNew.svelte +20 -0
- package/src/ruvocal/src/lib/components/icons/IconOmni.svelte +90 -0
- package/src/ruvocal/src/lib/components/icons/IconPaperclip.svelte +24 -0
- package/src/ruvocal/src/lib/components/icons/IconPro.svelte +37 -0
- package/src/ruvocal/src/lib/components/icons/IconShare.svelte +21 -0
- package/src/ruvocal/src/lib/components/icons/IconSun.svelte +93 -0
- package/src/ruvocal/src/lib/components/icons/Logo.svelte +68 -0
- package/src/ruvocal/src/lib/components/icons/LogoHuggingFaceBorderless.svelte +54 -0
- package/src/ruvocal/src/lib/components/mcp/AddServerForm.svelte +250 -0
- package/src/ruvocal/src/lib/components/mcp/MCPServerManager.svelte +185 -0
- package/src/ruvocal/src/lib/components/mcp/ServerCard.svelte +203 -0
- package/src/ruvocal/src/lib/components/players/AudioPlayer.svelte +82 -0
- package/src/ruvocal/src/lib/components/voice/AudioWaveform.svelte +96 -0
- package/src/ruvocal/src/lib/constants/mcpExamples.ts +135 -0
- package/src/ruvocal/src/lib/constants/mime.ts +11 -0
- package/src/ruvocal/src/lib/constants/pagination.ts +1 -0
- package/src/ruvocal/src/lib/constants/publicSepToken.ts +1 -0
- package/src/ruvocal/src/lib/constants/routerExamples.ts +209 -0
- package/src/ruvocal/src/lib/createShareLink.ts +27 -0
- package/src/ruvocal/src/lib/jobs/refresh-conversation-stats.ts +297 -0
- package/src/ruvocal/src/lib/migrations/lock.ts +56 -0
- package/src/ruvocal/src/lib/migrations/migrations.spec.ts +74 -0
- package/src/ruvocal/src/lib/migrations/migrations.ts +109 -0
- package/src/ruvocal/src/lib/migrations/routines/01-update-search-assistants.ts +50 -0
- package/src/ruvocal/src/lib/migrations/routines/02-update-assistants-models.ts +48 -0
- package/src/ruvocal/src/lib/migrations/routines/04-update-message-updates.ts +151 -0
- package/src/ruvocal/src/lib/migrations/routines/05-update-message-files.ts +56 -0
- package/src/ruvocal/src/lib/migrations/routines/06-trim-message-updates.ts +56 -0
- package/src/ruvocal/src/lib/migrations/routines/08-update-featured-to-review.ts +32 -0
- package/src/ruvocal/src/lib/migrations/routines/09-delete-empty-conversations.spec.ts +214 -0
- package/src/ruvocal/src/lib/migrations/routines/09-delete-empty-conversations.ts +88 -0
- package/src/ruvocal/src/lib/migrations/routines/10-update-reports-assistantid.ts +29 -0
- package/src/ruvocal/src/lib/migrations/routines/index.ts +15 -0
- package/src/ruvocal/src/lib/server/__tests__/conversation-stop-generating.spec.ts +103 -0
- package/src/ruvocal/src/lib/server/abortRegistry.ts +57 -0
- package/src/ruvocal/src/lib/server/abortedGenerations.ts +43 -0
- package/src/ruvocal/src/lib/server/adminToken.ts +62 -0
- package/src/ruvocal/src/lib/server/api/__tests__/conversations-id.spec.ts +296 -0
- package/src/ruvocal/src/lib/server/api/__tests__/conversations-message.spec.ts +216 -0
- package/src/ruvocal/src/lib/server/api/__tests__/conversations.spec.ts +235 -0
- package/src/ruvocal/src/lib/server/api/__tests__/misc.spec.ts +72 -0
- package/src/ruvocal/src/lib/server/api/__tests__/testHelpers.ts +86 -0
- package/src/ruvocal/src/lib/server/api/__tests__/user-reports.spec.ts +78 -0
- package/src/ruvocal/src/lib/server/api/__tests__/user.spec.ts +239 -0
- package/src/ruvocal/src/lib/server/api/types.ts +37 -0
- package/src/ruvocal/src/lib/server/api/utils/requireAuth.ts +22 -0
- package/src/ruvocal/src/lib/server/api/utils/resolveConversation.ts +69 -0
- package/src/ruvocal/src/lib/server/api/utils/resolveModel.ts +27 -0
- package/src/ruvocal/src/lib/server/api/utils/superjsonResponse.ts +15 -0
- package/src/ruvocal/src/lib/server/apiToken.ts +11 -0
- package/src/ruvocal/src/lib/server/auth.ts +554 -0
- package/src/ruvocal/src/lib/server/config.ts +187 -0
- package/src/ruvocal/src/lib/server/conversation.ts +83 -0
- package/src/ruvocal/src/lib/server/database/__tests__/rvf.spec.ts +709 -0
- package/src/ruvocal/src/lib/server/database/postgres.ts +700 -0
- package/src/ruvocal/src/lib/server/database/rvf.ts +1078 -0
- package/src/ruvocal/src/lib/server/database.ts +145 -0
- package/src/ruvocal/src/lib/server/endpoints/document.ts +68 -0
- package/src/ruvocal/src/lib/server/endpoints/endpoints.ts +43 -0
- package/src/ruvocal/src/lib/server/endpoints/images.ts +211 -0
- package/src/ruvocal/src/lib/server/endpoints/openai/endpointOai.ts +266 -0
- package/src/ruvocal/src/lib/server/endpoints/openai/openAIChatToTextGenerationStream.ts +212 -0
- package/src/ruvocal/src/lib/server/endpoints/openai/openAICompletionToTextGenerationStream.ts +32 -0
- package/src/ruvocal/src/lib/server/endpoints/preprocessMessages.ts +61 -0
- package/src/ruvocal/src/lib/server/exitHandler.ts +59 -0
- package/src/ruvocal/src/lib/server/files/downloadFile.ts +34 -0
- package/src/ruvocal/src/lib/server/files/uploadFile.ts +29 -0
- package/src/ruvocal/src/lib/server/findRepoRoot.ts +13 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-Black.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-Bold.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-ExtraBold.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-ExtraLight.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-Light.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-Medium.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-Regular.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-SemiBold.ttf +0 -0
- package/src/ruvocal/src/lib/server/fonts/Inter-Thin.ttf +0 -0
- package/src/ruvocal/src/lib/server/generateFromDefaultEndpoint.ts +46 -0
- package/src/ruvocal/src/lib/server/hooks/error.ts +37 -0
- package/src/ruvocal/src/lib/server/hooks/fetch.ts +22 -0
- package/src/ruvocal/src/lib/server/hooks/handle.ts +250 -0
- package/src/ruvocal/src/lib/server/hooks/init.ts +51 -0
- package/src/ruvocal/src/lib/server/isURLLocal.spec.ts +31 -0
- package/src/ruvocal/src/lib/server/isURLLocal.ts +74 -0
- package/src/ruvocal/src/lib/server/logger.ts +42 -0
- package/src/ruvocal/src/lib/server/mcp/clientPool.ts +70 -0
- package/src/ruvocal/src/lib/server/mcp/hf.ts +32 -0
- package/src/ruvocal/src/lib/server/mcp/httpClient.ts +122 -0
- package/src/ruvocal/src/lib/server/mcp/registry.ts +76 -0
- package/src/ruvocal/src/lib/server/mcp/tools.ts +196 -0
- package/src/ruvocal/src/lib/server/metrics.ts +255 -0
- package/src/ruvocal/src/lib/server/models.ts +518 -0
- package/src/ruvocal/src/lib/server/requestContext.ts +55 -0
- package/src/ruvocal/src/lib/server/router/arch.ts +230 -0
- package/src/ruvocal/src/lib/server/router/endpoint.ts +316 -0
- package/src/ruvocal/src/lib/server/router/multimodal.ts +28 -0
- package/src/ruvocal/src/lib/server/router/policy.ts +49 -0
- package/src/ruvocal/src/lib/server/router/toolsRoute.ts +51 -0
- package/src/ruvocal/src/lib/server/router/types.ts +21 -0
- package/src/ruvocal/src/lib/server/sendSlack.ts +23 -0
- package/src/ruvocal/src/lib/server/textGeneration/generate.ts +258 -0
- package/src/ruvocal/src/lib/server/textGeneration/index.ts +95 -0
- package/src/ruvocal/src/lib/server/textGeneration/mcp/fileRefs.ts +155 -0
- package/src/ruvocal/src/lib/server/textGeneration/mcp/routerResolution.ts +108 -0
- package/src/ruvocal/src/lib/server/textGeneration/mcp/runMcpFlow.ts +822 -0
- package/src/ruvocal/src/lib/server/textGeneration/mcp/toolInvocation.ts +349 -0
- package/src/ruvocal/src/lib/server/textGeneration/reasoning.ts +23 -0
- package/src/ruvocal/src/lib/server/textGeneration/title.ts +83 -0
- package/src/ruvocal/src/lib/server/textGeneration/types.ts +26 -0
- package/src/ruvocal/src/lib/server/textGeneration/utils/prepareFiles.ts +88 -0
- package/src/ruvocal/src/lib/server/textGeneration/utils/routing.ts +21 -0
- package/src/ruvocal/src/lib/server/textGeneration/utils/toolPrompt.ts +49 -0
- package/src/ruvocal/src/lib/server/urlSafety.ts +72 -0
- package/src/ruvocal/src/lib/server/usageLimits.ts +30 -0
- package/src/ruvocal/src/lib/stores/autopilotStore.svelte.ts +175 -0
- package/src/ruvocal/src/lib/stores/backgroundGenerations.svelte.ts +32 -0
- package/src/ruvocal/src/lib/stores/backgroundGenerations.ts +1 -0
- package/src/ruvocal/src/lib/stores/errors.ts +9 -0
- package/src/ruvocal/src/lib/stores/isAborted.ts +3 -0
- package/src/ruvocal/src/lib/stores/isPro.ts +4 -0
- package/src/ruvocal/src/lib/stores/loading.ts +3 -0
- package/src/ruvocal/src/lib/stores/mcpServers.ts +345 -0
- package/src/ruvocal/src/lib/stores/pendingChatInput.ts +3 -0
- package/src/ruvocal/src/lib/stores/pendingMessage.ts +9 -0
- package/src/ruvocal/src/lib/stores/settings.ts +182 -0
- package/src/ruvocal/src/lib/stores/shareModal.ts +13 -0
- package/src/ruvocal/src/lib/stores/titleUpdate.ts +8 -0
- package/src/ruvocal/src/lib/switchTheme.ts +124 -0
- package/src/ruvocal/src/lib/types/AbortedGeneration.ts +8 -0
- package/src/ruvocal/src/lib/types/Assistant.ts +31 -0
- package/src/ruvocal/src/lib/types/AssistantStats.ts +11 -0
- package/src/ruvocal/src/lib/types/ConfigKey.ts +4 -0
- package/src/ruvocal/src/lib/types/ConvSidebar.ts +9 -0
- package/src/ruvocal/src/lib/types/Conversation.ts +27 -0
- package/src/ruvocal/src/lib/types/ConversationStats.ts +13 -0
- package/src/ruvocal/src/lib/types/Message.ts +41 -0
- package/src/ruvocal/src/lib/types/MessageEvent.ts +10 -0
- package/src/ruvocal/src/lib/types/MessageUpdate.ts +139 -0
- package/src/ruvocal/src/lib/types/MigrationResult.ts +7 -0
- package/src/ruvocal/src/lib/types/Model.ts +23 -0
- package/src/ruvocal/src/lib/types/Report.ts +12 -0
- package/src/ruvocal/src/lib/types/Review.ts +6 -0
- package/src/ruvocal/src/lib/types/Semaphore.ts +19 -0
- package/src/ruvocal/src/lib/types/Session.ts +22 -0
- package/src/ruvocal/src/lib/types/Settings.ts +86 -0
- package/src/ruvocal/src/lib/types/SharedConversation.ts +9 -0
- package/src/ruvocal/src/lib/types/Template.ts +6 -0
- package/src/ruvocal/src/lib/types/Timestamps.ts +4 -0
- package/src/ruvocal/src/lib/types/TokenCache.ts +6 -0
- package/src/ruvocal/src/lib/types/Tool.ts +74 -0
- package/src/ruvocal/src/lib/types/UrlDependency.ts +5 -0
- package/src/ruvocal/src/lib/types/User.ts +14 -0
- package/src/ruvocal/src/lib/utils/PublicConfig.svelte.ts +75 -0
- package/src/ruvocal/src/lib/utils/auth.ts +17 -0
- package/src/ruvocal/src/lib/utils/chunk.ts +33 -0
- package/src/ruvocal/src/lib/utils/cookiesAreEnabled.ts +13 -0
- package/src/ruvocal/src/lib/utils/debounce.ts +17 -0
- package/src/ruvocal/src/lib/utils/deepestChild.ts +6 -0
- package/src/ruvocal/src/lib/utils/favicon.ts +21 -0
- package/src/ruvocal/src/lib/utils/fetchJSON.ts +23 -0
- package/src/ruvocal/src/lib/utils/file2base64.ts +14 -0
- package/src/ruvocal/src/lib/utils/formatUserCount.ts +37 -0
- package/src/ruvocal/src/lib/utils/generationState.spec.ts +75 -0
- package/src/ruvocal/src/lib/utils/generationState.ts +26 -0
- package/src/ruvocal/src/lib/utils/getHref.ts +41 -0
- package/src/ruvocal/src/lib/utils/getReturnFromGenerator.ts +7 -0
- package/src/ruvocal/src/lib/utils/haptics.ts +64 -0
- package/src/ruvocal/src/lib/utils/hashConv.ts +12 -0
- package/src/ruvocal/src/lib/utils/hf.ts +17 -0
- package/src/ruvocal/src/lib/utils/isDesktop.ts +7 -0
- package/src/ruvocal/src/lib/utils/isUrl.ts +8 -0
- package/src/ruvocal/src/lib/utils/isVirtualKeyboard.ts +16 -0
- package/src/ruvocal/src/lib/utils/loadAttachmentsFromUrls.ts +115 -0
- package/src/ruvocal/src/lib/utils/marked.spec.ts +96 -0
- package/src/ruvocal/src/lib/utils/marked.ts +531 -0
- package/src/ruvocal/src/lib/utils/mcpValidation.ts +147 -0
- package/src/ruvocal/src/lib/utils/mergeAsyncGenerators.ts +38 -0
- package/src/ruvocal/src/lib/utils/messageUpdates.spec.ts +262 -0
- package/src/ruvocal/src/lib/utils/messageUpdates.ts +324 -0
- package/src/ruvocal/src/lib/utils/mime.ts +56 -0
- package/src/ruvocal/src/lib/utils/models.ts +14 -0
- package/src/ruvocal/src/lib/utils/parseBlocks.ts +120 -0
- package/src/ruvocal/src/lib/utils/parseIncompleteMarkdown.ts +644 -0
- package/src/ruvocal/src/lib/utils/parseStringToList.ts +10 -0
- package/src/ruvocal/src/lib/utils/randomUuid.ts +14 -0
- package/src/ruvocal/src/lib/utils/searchTokens.ts +33 -0
- package/src/ruvocal/src/lib/utils/sha256.ts +7 -0
- package/src/ruvocal/src/lib/utils/stringifyError.ts +12 -0
- package/src/ruvocal/src/lib/utils/sum.ts +3 -0
- package/src/ruvocal/src/lib/utils/template.spec.ts +59 -0
- package/src/ruvocal/src/lib/utils/template.ts +53 -0
- package/src/ruvocal/src/lib/utils/timeout.ts +9 -0
- package/src/ruvocal/src/lib/utils/toolProgress.spec.ts +46 -0
- package/src/ruvocal/src/lib/utils/toolProgress.ts +11 -0
- package/src/ruvocal/src/lib/utils/tree/addChildren.spec.ts +102 -0
- package/src/ruvocal/src/lib/utils/tree/addChildren.ts +48 -0
- package/src/ruvocal/src/lib/utils/tree/addSibling.spec.ts +81 -0
- package/src/ruvocal/src/lib/utils/tree/addSibling.ts +41 -0
- package/src/ruvocal/src/lib/utils/tree/buildSubtree.spec.ts +110 -0
- package/src/ruvocal/src/lib/utils/tree/buildSubtree.ts +24 -0
- package/src/ruvocal/src/lib/utils/tree/convertLegacyConversation.spec.ts +31 -0
- package/src/ruvocal/src/lib/utils/tree/convertLegacyConversation.ts +36 -0
- package/src/ruvocal/src/lib/utils/tree/isMessageId.spec.ts +15 -0
- package/src/ruvocal/src/lib/utils/tree/isMessageId.ts +5 -0
- package/src/ruvocal/src/lib/utils/tree/tree.d.ts +14 -0
- package/src/ruvocal/src/lib/utils/tree/treeHelpers.spec.ts +167 -0
- package/src/ruvocal/src/lib/utils/updates.ts +39 -0
- package/src/ruvocal/src/lib/utils/urlParams.ts +13 -0
- package/src/ruvocal/src/lib/workers/autopilotWorker.ts +221 -0
- package/src/ruvocal/src/lib/workers/detailFetchWorker.ts +100 -0
- package/src/ruvocal/src/lib/workers/markdownWorker.ts +61 -0
- package/src/ruvocal/src/routes/+error.svelte +20 -0
- package/src/ruvocal/src/routes/+layout.svelte +324 -0
- package/src/ruvocal/src/routes/+layout.ts +91 -0
- package/src/ruvocal/src/routes/+page.svelte +168 -0
- package/src/ruvocal/src/routes/.well-known/oauth-cimd/+server.ts +37 -0
- package/src/ruvocal/src/routes/__debug/openai/+server.ts +21 -0
- package/src/ruvocal/src/routes/admin/export/+server.ts +159 -0
- package/src/ruvocal/src/routes/admin/stats/compute/+server.ts +16 -0
- package/src/ruvocal/src/routes/api/conversation/[id]/+server.ts +40 -0
- package/src/ruvocal/src/routes/api/conversation/[id]/message/[messageId]/+server.ts +42 -0
- package/src/ruvocal/src/routes/api/conversations/+server.ts +48 -0
- package/src/ruvocal/src/routes/api/fetch-url/+server.ts +147 -0
- package/src/ruvocal/src/routes/api/mcp/health/+server.ts +292 -0
- package/src/ruvocal/src/routes/api/mcp/servers/+server.ts +32 -0
- package/src/ruvocal/src/routes/api/models/+server.ts +25 -0
- package/src/ruvocal/src/routes/api/transcribe/+server.ts +104 -0
- package/src/ruvocal/src/routes/api/user/+server.ts +15 -0
- package/src/ruvocal/src/routes/api/user/validate-token/+server.ts +20 -0
- package/src/ruvocal/src/routes/api/v2/conversations/+server.ts +48 -0
- package/src/ruvocal/src/routes/api/v2/conversations/[id]/+server.ts +94 -0
- package/src/ruvocal/src/routes/api/v2/conversations/[id]/message/[messageId]/+server.ts +43 -0
- package/src/ruvocal/src/routes/api/v2/conversations/import-share/+server.ts +23 -0
- package/src/ruvocal/src/routes/api/v2/debug/config/+server.ts +16 -0
- package/src/ruvocal/src/routes/api/v2/debug/refresh/+server.ts +30 -0
- package/src/ruvocal/src/routes/api/v2/export/+server.ts +196 -0
- package/src/ruvocal/src/routes/api/v2/feature-flags/+server.ts +14 -0
- package/src/ruvocal/src/routes/api/v2/models/+server.ts +38 -0
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/+server.ts +8 -0
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/[model]/+server.ts +8 -0
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/[model]/subscribe/+server.ts +28 -0
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/subscribe/+server.ts +28 -0
- package/src/ruvocal/src/routes/api/v2/models/old/+server.ts +7 -0
- package/src/ruvocal/src/routes/api/v2/models/refresh/+server.ts +33 -0
- package/src/ruvocal/src/routes/api/v2/public-config/+server.ts +7 -0
- package/src/ruvocal/src/routes/api/v2/user/+server.ts +17 -0
- package/src/ruvocal/src/routes/api/v2/user/billing-orgs/+server.ts +73 -0
- package/src/ruvocal/src/routes/api/v2/user/reports/+server.ts +17 -0
- package/src/ruvocal/src/routes/api/v2/user/settings/+server.ts +103 -0
- package/src/ruvocal/src/routes/conversation/+server.ts +115 -0
- package/src/ruvocal/src/routes/conversation/[id]/+page.svelte +582 -0
- package/src/ruvocal/src/routes/conversation/[id]/+page.ts +60 -0
- package/src/ruvocal/src/routes/conversation/[id]/+server.ts +736 -0
- package/src/ruvocal/src/routes/conversation/[id]/message/[messageId]/prompt/+server.ts +66 -0
- package/src/ruvocal/src/routes/conversation/[id]/output/[sha256]/+server.ts +58 -0
- package/src/ruvocal/src/routes/conversation/[id]/share/+server.ts +69 -0
- package/src/ruvocal/src/routes/conversation/[id]/stop-generating/+server.ts +35 -0
- package/src/ruvocal/src/routes/healthcheck/+server.ts +3 -0
- package/src/ruvocal/src/routes/login/+server.ts +5 -0
- package/src/ruvocal/src/routes/login/callback/+server.ts +103 -0
- package/src/ruvocal/src/routes/login/callback/updateUser.spec.ts +157 -0
- package/src/ruvocal/src/routes/login/callback/updateUser.ts +215 -0
- package/src/ruvocal/src/routes/logout/+server.ts +18 -0
- package/src/ruvocal/src/routes/metrics/+server.ts +18 -0
- package/src/ruvocal/src/routes/models/+page.svelte +233 -0
- package/src/ruvocal/src/routes/models/[...model]/+page.svelte +161 -0
- package/src/ruvocal/src/routes/models/[...model]/+page.ts +14 -0
- package/src/ruvocal/src/routes/models/[...model]/thumbnail.png/+server.ts +64 -0
- package/src/ruvocal/src/routes/models/[...model]/thumbnail.png/ModelThumbnail.svelte +28 -0
- package/src/ruvocal/src/routes/privacy/+page.svelte +11 -0
- package/src/ruvocal/src/routes/r/[id]/+page.ts +34 -0
- package/src/ruvocal/src/routes/settings/(nav)/+layout.svelte +282 -0
- package/src/ruvocal/src/routes/settings/(nav)/+layout.ts +1 -0
- package/src/ruvocal/src/routes/settings/(nav)/+page.svelte +0 -0
- package/src/ruvocal/src/routes/settings/(nav)/+server.ts +53 -0
- package/src/ruvocal/src/routes/settings/(nav)/[...model]/+page.svelte +464 -0
- package/src/ruvocal/src/routes/settings/(nav)/[...model]/+page.ts +14 -0
- package/src/ruvocal/src/routes/settings/(nav)/application/+page.svelte +362 -0
- package/src/ruvocal/src/routes/settings/+layout.svelte +40 -0
- package/src/ruvocal/src/styles/highlight-js.css +195 -0
- package/src/ruvocal/src/styles/main.css +144 -0
- package/src/ruvocal/static/chatui/apple-touch-icon.png +0 -0
- package/src/ruvocal/static/chatui/favicon-dark.svg +3 -0
- package/src/ruvocal/static/chatui/favicon-dev.svg +3 -0
- package/src/ruvocal/static/chatui/favicon.ico +0 -0
- package/src/ruvocal/static/chatui/favicon.svg +3 -0
- package/src/ruvocal/static/chatui/icon-128x128.png +0 -0
- package/src/ruvocal/static/chatui/icon-144x144.png +0 -0
- package/src/ruvocal/static/chatui/icon-192x192.png +0 -0
- package/src/ruvocal/static/chatui/icon-256x256.png +0 -0
- package/src/ruvocal/static/chatui/icon-36x36.png +0 -0
- package/src/ruvocal/static/chatui/icon-48x48.png +0 -0
- package/src/ruvocal/static/chatui/icon-512x512.png +0 -0
- package/src/ruvocal/static/chatui/icon-72x72.png +0 -0
- package/src/ruvocal/static/chatui/icon-96x96.png +0 -0
- package/src/ruvocal/static/chatui/icon.svg +3 -0
- package/src/ruvocal/static/chatui/logo.svg +7 -0
- package/src/ruvocal/static/chatui/manifest.json +54 -0
- package/src/ruvocal/static/chatui/omni-welcome.gif +0 -0
- package/src/ruvocal/static/chatui/omni-welcome.png +0 -0
- package/src/ruvocal/static/chatui/welcome.js +184 -0
- package/src/ruvocal/static/chatui/welcome.svg +1 -0
- package/src/ruvocal/static/huggingchat/apple-touch-icon.png +0 -0
- package/src/ruvocal/static/huggingchat/assistants-thumbnail.png +0 -0
- package/src/ruvocal/static/huggingchat/castle-example.jpg +0 -0
- package/src/ruvocal/static/huggingchat/favicon-dark.svg +4 -0
- package/src/ruvocal/static/huggingchat/favicon-dev.svg +4 -0
- package/src/ruvocal/static/huggingchat/favicon.ico +0 -0
- package/src/ruvocal/static/huggingchat/favicon.svg +4 -0
- package/src/ruvocal/static/huggingchat/fulltext-logo.svg +2 -0
- package/src/ruvocal/static/huggingchat/icon-128x128.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-144x144.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-192x192.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-256x256.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-36x36.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-48x48.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-512x512.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-72x72.png +0 -0
- package/src/ruvocal/static/huggingchat/icon-96x96.png +0 -0
- package/src/ruvocal/static/huggingchat/icon.svg +4 -0
- package/src/ruvocal/static/huggingchat/logo.svg +4 -0
- package/src/ruvocal/static/huggingchat/manifest.json +54 -0
- package/src/ruvocal/static/huggingchat/omni-welcome.gif +0 -0
- package/src/ruvocal/static/huggingchat/routes.chat.json +226 -0
- package/src/ruvocal/static/huggingchat/thumbnail.png +0 -0
- package/src/ruvocal/static/huggingchat/tools-thumbnail.png +0 -0
- package/src/ruvocal/static/robots.txt +10 -0
- package/src/ruvocal/stub/@reflink/reflink/index.js +0 -0
- package/src/ruvocal/stub/@reflink/reflink/package.json +5 -0
- package/src/ruvocal/svelte.config.js +53 -0
- package/src/ruvocal/tailwind.config.cjs +30 -0
- package/src/ruvocal/tsconfig.json +19 -0
- package/src/ruvocal/vite.config.ts +87 -0
- package/src/scripts/deploy.sh +116 -0
- package/src/scripts/generate-config.js +245 -0
- package/src/scripts/generate-welcome.js +187 -0
- package/src/scripts/package-rvf.sh +116 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
worker_processes auto;
|
|
2
|
+
|
|
3
|
+
events {
|
|
4
|
+
worker_connections 1024;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
http {
|
|
8
|
+
include /etc/nginx/mime.types;
|
|
9
|
+
default_type application/octet-stream;
|
|
10
|
+
|
|
11
|
+
sendfile on;
|
|
12
|
+
keepalive_timeout 65;
|
|
13
|
+
gzip off; # required for sub_filter to work
|
|
14
|
+
|
|
15
|
+
server {
|
|
16
|
+
listen 3000;
|
|
17
|
+
server_name _;
|
|
18
|
+
|
|
19
|
+
# --- CORS headers on all responses ---
|
|
20
|
+
add_header Access-Control-Allow-Origin "*" always;
|
|
21
|
+
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
|
|
22
|
+
add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;
|
|
23
|
+
|
|
24
|
+
# Preflight
|
|
25
|
+
if ($request_method = OPTIONS) {
|
|
26
|
+
return 204;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
# --- RuFlo brand assets (logo, favicons, manifest) ---
|
|
30
|
+
location /chatui/ {
|
|
31
|
+
alias /etc/nginx/static/;
|
|
32
|
+
expires 1h;
|
|
33
|
+
add_header Cache-Control "public";
|
|
34
|
+
add_header Access-Control-Allow-Origin "*" always;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# --- RuFlo static JS/CSS ---
|
|
38
|
+
location /ruflo/ {
|
|
39
|
+
alias /etc/nginx/static/;
|
|
40
|
+
expires 1h;
|
|
41
|
+
add_header Cache-Control "public";
|
|
42
|
+
add_header Access-Control-Allow-Origin "*" always;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# --- Proxy to Chat UI with script injection + URL rewriting ---
|
|
46
|
+
location / {
|
|
47
|
+
proxy_pass http://chat-ui:3000;
|
|
48
|
+
proxy_http_version 1.1;
|
|
49
|
+
proxy_set_header Host $host;
|
|
50
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
51
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
52
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
53
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
54
|
+
proxy_set_header Connection "upgrade";
|
|
55
|
+
|
|
56
|
+
# Disable gzip from upstream so sub_filter works
|
|
57
|
+
proxy_set_header Accept-Encoding "";
|
|
58
|
+
|
|
59
|
+
# Rewrite absolute PUBLIC_ORIGIN URLs to relative paths
|
|
60
|
+
# (fixes CORS when accessed via codespace port-forward)
|
|
61
|
+
sub_filter 'http://localhost:3000' '';
|
|
62
|
+
sub_filter '</head>' '<script src="/ruflo/welcome.js" defer></script></head>';
|
|
63
|
+
sub_filter_once off;
|
|
64
|
+
sub_filter_types text/html application/json;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
|
|
2
|
+
<rect width="64" height="64" rx="12" fill="#0a0a1a"/>
|
|
3
|
+
<path d="M32 8L56 22v20L32 56 8 42V22z" stroke="#00d4ff" stroke-width="2.5" fill="none"/>
|
|
4
|
+
<circle cx="32" cy="32" r="8" fill="#7c3aed"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 48" fill="none">
|
|
2
|
+
<!-- Hexagon icon -->
|
|
3
|
+
<path d="M20 4L36 13v18L20 40 4 31V13z" stroke="#00d4ff" stroke-width="2" fill="none"/>
|
|
4
|
+
<circle cx="20" cy="22" r="4" fill="#7c3aed"/>
|
|
5
|
+
<!-- "Ru" in cyan -->
|
|
6
|
+
<text x="48" y="34" font-family="system-ui, -apple-system, sans-serif" font-weight="700" font-size="28" fill="#00d4ff">Ru</text>
|
|
7
|
+
<!-- "Flo" in violet -->
|
|
8
|
+
<text x="88" y="34" font-family="system-ui, -apple-system, sans-serif" font-weight="700" font-size="28" fill="#7c3aed">Flo</text>
|
|
9
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "RuFlo",
|
|
3
|
+
"short_name": "RuFlo",
|
|
4
|
+
"description": "Enterprise AI Agent Orchestration Platform",
|
|
5
|
+
"start_url": "/",
|
|
6
|
+
"display": "standalone",
|
|
7
|
+
"theme_color": "#00d4ff",
|
|
8
|
+
"background_color": "#0a0a1a",
|
|
9
|
+
"icons": [
|
|
10
|
+
{
|
|
11
|
+
"src": "/chatui/icon.svg",
|
|
12
|
+
"sizes": "any",
|
|
13
|
+
"type": "image/svg+xml"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"src": "/chatui/favicon-dark.svg",
|
|
17
|
+
"sizes": "any",
|
|
18
|
+
"type": "image/svg+xml",
|
|
19
|
+
"purpose": "monochrome"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
(function () {
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
const THREE_CDN = "https://cdn.jsdelivr.net/npm/three@0.169.0/build/three.module.js";
|
|
5
|
+
const BG_COLOR = 0x0a0a1a;
|
|
6
|
+
const CYAN = 0x00d4ff;
|
|
7
|
+
const VIOLET = 0x7c3aed;
|
|
8
|
+
const AMBER = 0xf59e0b;
|
|
9
|
+
const PARTICLE_COUNT = 200;
|
|
10
|
+
|
|
11
|
+
let scene, camera, renderer, frameId;
|
|
12
|
+
let icosahedron, octahedron, torus, particles;
|
|
13
|
+
let textSprite;
|
|
14
|
+
|
|
15
|
+
function createTextTexture(text, w, h) {
|
|
16
|
+
const canvas = document.createElement("canvas");
|
|
17
|
+
canvas.width = w;
|
|
18
|
+
canvas.height = h;
|
|
19
|
+
const ctx = canvas.getContext("2d");
|
|
20
|
+
const grad = ctx.createLinearGradient(0, 0, w, 0);
|
|
21
|
+
grad.addColorStop(0, "#00d4ff");
|
|
22
|
+
grad.addColorStop(1, "#7c3aed");
|
|
23
|
+
ctx.fillStyle = grad;
|
|
24
|
+
ctx.font = "bold 72px system-ui, -apple-system, sans-serif";
|
|
25
|
+
ctx.textAlign = "center";
|
|
26
|
+
ctx.textBaseline = "middle";
|
|
27
|
+
ctx.fillText(text, w / 2, h / 2);
|
|
28
|
+
return canvas;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async function initScene(container) {
|
|
32
|
+
const THREE = await import(THREE_CDN);
|
|
33
|
+
|
|
34
|
+
const rect = container.getBoundingClientRect();
|
|
35
|
+
const width = rect.width || 400;
|
|
36
|
+
const height = rect.height || 300;
|
|
37
|
+
|
|
38
|
+
scene = new THREE.Scene();
|
|
39
|
+
scene.background = new THREE.Color(BG_COLOR);
|
|
40
|
+
|
|
41
|
+
camera = new THREE.PerspectiveCamera(50, width / height, 0.1, 100);
|
|
42
|
+
camera.position.z = 5;
|
|
43
|
+
|
|
44
|
+
renderer = new THREE.WebGLRenderer({ antialias: true, alpha: false });
|
|
45
|
+
renderer.setSize(width, height);
|
|
46
|
+
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
|
47
|
+
|
|
48
|
+
const canvas = renderer.domElement;
|
|
49
|
+
canvas.style.width = "100%";
|
|
50
|
+
canvas.style.height = "100%";
|
|
51
|
+
canvas.style.display = "block";
|
|
52
|
+
canvas.style.borderRadius = "12px";
|
|
53
|
+
container.appendChild(canvas);
|
|
54
|
+
|
|
55
|
+
// Wireframe icosahedron (cyan, slow rotation)
|
|
56
|
+
const icoGeo = new THREE.IcosahedronGeometry(1.4, 1);
|
|
57
|
+
const icoMat = new THREE.MeshBasicMaterial({ color: CYAN, wireframe: true, transparent: true, opacity: 0.6 });
|
|
58
|
+
icosahedron = new THREE.Mesh(icoGeo, icoMat);
|
|
59
|
+
scene.add(icosahedron);
|
|
60
|
+
|
|
61
|
+
// Wireframe octahedron (violet, counter-rotation)
|
|
62
|
+
const octGeo = new THREE.OctahedronGeometry(1.0, 0);
|
|
63
|
+
const octMat = new THREE.MeshBasicMaterial({ color: VIOLET, wireframe: true, transparent: true, opacity: 0.7 });
|
|
64
|
+
octahedron = new THREE.Mesh(octGeo, octMat);
|
|
65
|
+
scene.add(octahedron);
|
|
66
|
+
|
|
67
|
+
// Pulse torus ring (cyan, breathing)
|
|
68
|
+
const torGeo = new THREE.TorusGeometry(2.0, 0.02, 8, 64);
|
|
69
|
+
const torMat = new THREE.MeshBasicMaterial({ color: CYAN, transparent: true, opacity: 0.4 });
|
|
70
|
+
torus = new THREE.Mesh(torGeo, torMat);
|
|
71
|
+
torus.rotation.x = Math.PI / 2;
|
|
72
|
+
scene.add(torus);
|
|
73
|
+
|
|
74
|
+
// Particle field (~200 amber dots in a sphere)
|
|
75
|
+
const pGeo = new THREE.BufferGeometry();
|
|
76
|
+
const positions = new Float32Array(PARTICLE_COUNT * 3);
|
|
77
|
+
for (let i = 0; i < PARTICLE_COUNT; i++) {
|
|
78
|
+
const r = 1.2 + Math.random() * 1.0;
|
|
79
|
+
const theta = Math.random() * Math.PI * 2;
|
|
80
|
+
const phi = Math.acos(2 * Math.random() - 1);
|
|
81
|
+
positions[i * 3] = r * Math.sin(phi) * Math.cos(theta);
|
|
82
|
+
positions[i * 3 + 1] = r * Math.sin(phi) * Math.sin(theta);
|
|
83
|
+
positions[i * 3 + 2] = r * Math.cos(phi);
|
|
84
|
+
}
|
|
85
|
+
pGeo.setAttribute("position", new THREE.BufferAttribute(positions, 3));
|
|
86
|
+
const pMat = new THREE.PointsMaterial({ color: AMBER, size: 0.04, sizeAttenuation: true });
|
|
87
|
+
particles = new THREE.Points(pGeo, pMat);
|
|
88
|
+
scene.add(particles);
|
|
89
|
+
|
|
90
|
+
// "RuFlo" text sprite
|
|
91
|
+
const textCanvas = createTextTexture("RuFlo", 512, 128);
|
|
92
|
+
const tex = new THREE.CanvasTexture(textCanvas);
|
|
93
|
+
const spriteMat = new THREE.SpriteMaterial({ map: tex, transparent: true, opacity: 0.9 });
|
|
94
|
+
textSprite = new THREE.Sprite(spriteMat);
|
|
95
|
+
textSprite.scale.set(2.5, 0.625, 1);
|
|
96
|
+
textSprite.position.y = -2.2;
|
|
97
|
+
scene.add(textSprite);
|
|
98
|
+
|
|
99
|
+
// Responsive resize
|
|
100
|
+
const ro = new ResizeObserver(function () {
|
|
101
|
+
const r2 = container.getBoundingClientRect();
|
|
102
|
+
const w = r2.width || 400;
|
|
103
|
+
const h = r2.height || 300;
|
|
104
|
+
camera.aspect = w / h;
|
|
105
|
+
camera.updateProjectionMatrix();
|
|
106
|
+
renderer.setSize(w, h);
|
|
107
|
+
});
|
|
108
|
+
ro.observe(container);
|
|
109
|
+
|
|
110
|
+
// Animate
|
|
111
|
+
function animate() {
|
|
112
|
+
frameId = requestAnimationFrame(animate);
|
|
113
|
+
const t = performance.now() * 0.001;
|
|
114
|
+
|
|
115
|
+
icosahedron.rotation.y = t * 0.3;
|
|
116
|
+
icosahedron.rotation.x = t * 0.15;
|
|
117
|
+
|
|
118
|
+
octahedron.rotation.y = -t * 0.4;
|
|
119
|
+
octahedron.rotation.z = t * 0.2;
|
|
120
|
+
|
|
121
|
+
// Breathing torus
|
|
122
|
+
const s = 1 + 0.15 * Math.sin(t * 1.5);
|
|
123
|
+
torus.scale.set(s, s, s);
|
|
124
|
+
|
|
125
|
+
// Slow particle rotation
|
|
126
|
+
particles.rotation.y = t * 0.05;
|
|
127
|
+
particles.rotation.x = t * 0.02;
|
|
128
|
+
|
|
129
|
+
renderer.render(scene, camera);
|
|
130
|
+
}
|
|
131
|
+
animate();
|
|
132
|
+
|
|
133
|
+
return { ro: ro };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function cleanup(refs) {
|
|
137
|
+
if (frameId) cancelAnimationFrame(frameId);
|
|
138
|
+
if (refs && refs.ro) refs.ro.disconnect();
|
|
139
|
+
if (renderer) {
|
|
140
|
+
renderer.dispose();
|
|
141
|
+
renderer.forceContextLoss();
|
|
142
|
+
}
|
|
143
|
+
scene = camera = renderer = frameId = null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Watch for the welcome modal's image and replace it
|
|
147
|
+
let refs = null;
|
|
148
|
+
const observer = new MutationObserver(function (mutations) {
|
|
149
|
+
for (const m of mutations) {
|
|
150
|
+
for (const node of m.addedNodes) {
|
|
151
|
+
if (!(node instanceof HTMLElement)) continue;
|
|
152
|
+
const img = node.querySelector
|
|
153
|
+
? node.querySelector('img[src*="omni-welcome"], img[src*="huggingchat"]')
|
|
154
|
+
: null;
|
|
155
|
+
if (img) {
|
|
156
|
+
const container = document.createElement("div");
|
|
157
|
+
container.style.width = "100%";
|
|
158
|
+
container.style.height = "320px";
|
|
159
|
+
container.style.position = "relative";
|
|
160
|
+
container.style.overflow = "hidden";
|
|
161
|
+
container.style.borderRadius = "12px";
|
|
162
|
+
img.parentNode.replaceChild(container, img);
|
|
163
|
+
initScene(container).then(function (r) { refs = r; });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Detect modal removal → cleanup
|
|
167
|
+
for (const node of m.removedNodes) {
|
|
168
|
+
if (!(node instanceof HTMLElement)) continue;
|
|
169
|
+
if (node.querySelector && node.querySelector("canvas")) {
|
|
170
|
+
cleanup(refs);
|
|
171
|
+
refs = null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
if (document.body) {
|
|
178
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
179
|
+
} else {
|
|
180
|
+
document.addEventListener("DOMContentLoaded", function () {
|
|
181
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
})();
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: add-model-descriptions
|
|
3
|
+
description: Add descriptions for new models from the HuggingFace router to chat-ui configuration. Use when new models are released on the router and need descriptions added to prod.yaml and dev.yaml. Triggers on requests like "add new model descriptions", "update models from router", "sync models", or when explicitly invoking /add-model-descriptions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Add Model Descriptions
|
|
7
|
+
|
|
8
|
+
Add descriptions for new models available in the HuggingFace router to chat-ui's prod.yaml and dev.yaml.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. **Fetch models from router**
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
WebFetch https://router.huggingface.co/v1/models
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Extract all model IDs from the response.
|
|
19
|
+
|
|
20
|
+
2. **Read current configuration**
|
|
21
|
+
|
|
22
|
+
- Read `chart/env/prod.yaml`
|
|
23
|
+
- Extract model IDs from the `MODELS` JSON array in `envVars`
|
|
24
|
+
|
|
25
|
+
3. **Identify missing models**
|
|
26
|
+
Compare router models with prod.yaml. Missing = in router but not in prod.yaml.
|
|
27
|
+
|
|
28
|
+
4. **Research each missing model**
|
|
29
|
+
For each missing model, search the web for its specifications:
|
|
30
|
+
|
|
31
|
+
- Model architecture (dense, MoE, parameters)
|
|
32
|
+
- Key capabilities (coding, reasoning, vision, multilingual, etc.)
|
|
33
|
+
- Target use cases
|
|
34
|
+
|
|
35
|
+
5. **Write descriptions**
|
|
36
|
+
Match existing style:
|
|
37
|
+
|
|
38
|
+
- 8-12 words
|
|
39
|
+
- Sentence fragments (no period needed)
|
|
40
|
+
- No articles ("a", "the") unless necessary
|
|
41
|
+
- Focus on: architecture, specialization, key capability
|
|
42
|
+
|
|
43
|
+
Examples:
|
|
44
|
+
|
|
45
|
+
- `"Flagship GLM MoE for coding, reasoning, and agentic tool use."`
|
|
46
|
+
- `"MoE agent model with multilingual coding and fast outputs."`
|
|
47
|
+
- `"Vision-language Qwen for documents, GUI agents, and visual reasoning."`
|
|
48
|
+
- `"Mobile agent for multilingual Android device automation."`
|
|
49
|
+
|
|
50
|
+
6. **Update both files**
|
|
51
|
+
Add new models at the TOP of the MODELS array in:
|
|
52
|
+
|
|
53
|
+
- `chart/env/prod.yaml`
|
|
54
|
+
- `chart/env/dev.yaml`
|
|
55
|
+
|
|
56
|
+
Format:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{ "id": "org/model-name", "description": "Description here." }
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
7. **Commit changes**
|
|
63
|
+
```
|
|
64
|
+
git add chart/env/prod.yaml chart/env/dev.yaml
|
|
65
|
+
git commit -m "feat: add descriptions for N new models from router"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Notes
|
|
69
|
+
|
|
70
|
+
- FP8 variants: describe as "FP8 [base model] for efficient inference with [key capability]"
|
|
71
|
+
- Vision models: mention "vision-language" and key visual tasks
|
|
72
|
+
- Agent models: mention "agent" and automation capabilities
|
|
73
|
+
- Regional models: mention language focus (e.g., "European multilingual", "Southeast Asian")
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
FROM mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm
|
|
2
|
+
|
|
3
|
+
# Install MongoDB tools (mongosh, mongorestore, mongodump) directly from MongoDB repository
|
|
4
|
+
RUN curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg && \
|
|
5
|
+
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | tee /etc/apt/sources.list.d/mongodb-org-8.0.list && \
|
|
6
|
+
apt-get update && \
|
|
7
|
+
apt-get install -y mongodb-mongosh mongodb-database-tools vim && \
|
|
8
|
+
apt-get autoremove -y && \
|
|
9
|
+
rm -rf /var/lib/apt/lists/*
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
|
2
|
+
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
|
|
3
|
+
{
|
|
4
|
+
"name": "Node.js & TypeScript",
|
|
5
|
+
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
|
6
|
+
"build": {
|
|
7
|
+
"dockerfile": "Dockerfile"
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
"customizations": {
|
|
11
|
+
"vscode": {
|
|
12
|
+
"extensions": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint", "svelte.svelte-vscode"]
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
"features": {
|
|
17
|
+
// Install docker in container
|
|
18
|
+
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
|
19
|
+
// Use proprietary docker engine. I get a timeout error when using the default moby engine and loading
|
|
20
|
+
// microsoft's PGP keys
|
|
21
|
+
"moby": false
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
|
26
|
+
// "forwardPorts": [],
|
|
27
|
+
|
|
28
|
+
// Use 'postCreateCommand' to run commands after the container is created.
|
|
29
|
+
// "postCreateCommand": "yarn install",
|
|
30
|
+
|
|
31
|
+
// Configure tool-specific properties.
|
|
32
|
+
// "customizations": {},
|
|
33
|
+
|
|
34
|
+
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
|
35
|
+
// "remoteUser": "root"
|
|
36
|
+
}
|
package/src/ruvocal/.env
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Use .env.local to change these variables
|
|
2
|
+
# DO NOT EDIT THIS FILE WITH SENSITIVE DATA
|
|
3
|
+
|
|
4
|
+
### Models ###
|
|
5
|
+
# Models are sourced exclusively from an OpenAI-compatible base URL.
|
|
6
|
+
# Example: https://router.huggingface.co/v1
|
|
7
|
+
OPENAI_BASE_URL=https://router.huggingface.co/v1
|
|
8
|
+
|
|
9
|
+
# Canonical auth token for any OpenAI-compatible provider
|
|
10
|
+
OPENAI_API_KEY=#your provider API key (works for HF router, OpenAI, LM Studio, etc.).
|
|
11
|
+
# When set to true, user token will be used for inference calls
|
|
12
|
+
USE_USER_TOKEN=false
|
|
13
|
+
# Automatically redirect to oauth login page if user is not logged in, when set to "true"
|
|
14
|
+
AUTOMATIC_LOGIN=false
|
|
15
|
+
|
|
16
|
+
### PostgreSQL (RuVector) ###
|
|
17
|
+
DATABASE_URL=#postgresql://ruvocal:password@localhost:5432/ruvocal
|
|
18
|
+
# Legacy MongoDB vars (unused — kept for reference)
|
|
19
|
+
# MONGODB_URL=
|
|
20
|
+
# MONGODB_DB_NAME=chat-ui
|
|
21
|
+
# MONGODB_DIRECT_CONNECTION=false
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## Public app configuration ##
|
|
25
|
+
PUBLIC_APP_NAME=ChatUI # name used as title throughout the app
|
|
26
|
+
PUBLIC_APP_ASSETS=chatui # used to find logos & favicons in static/$PUBLIC_APP_ASSETS
|
|
27
|
+
PUBLIC_APP_DESCRIPTION="Making the community's best AI chat models available to everyone."# description used throughout the app
|
|
28
|
+
PUBLIC_ORIGIN=
|
|
29
|
+
PUBLIC_SHARE_PREFIX=
|
|
30
|
+
PUBLIC_GOOGLE_ANALYTICS_ID=
|
|
31
|
+
PUBLIC_PLAUSIBLE_SCRIPT_URL=
|
|
32
|
+
PUBLIC_APPLE_APP_ID=
|
|
33
|
+
|
|
34
|
+
COUPLE_SESSION_WITH_COOKIE_NAME=
|
|
35
|
+
# when OPEN_ID is configured, users are required to login after the welcome modal
|
|
36
|
+
OPENID_CLIENT_ID="" # You can set to "__CIMD__" for automatic oauth app creation when deployed, see https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/
|
|
37
|
+
OPENID_CLIENT_SECRET=
|
|
38
|
+
OPENID_SCOPES="openid profile inference-api read-mcp read-billing"
|
|
39
|
+
USE_USER_TOKEN=
|
|
40
|
+
AUTOMATIC_LOGIN=# if true authentication is required on all routes
|
|
41
|
+
|
|
42
|
+
### Local Storage ###
|
|
43
|
+
MONGO_STORAGE_PATH= # where is the db folder stored
|
|
44
|
+
|
|
45
|
+
## Models overrides
|
|
46
|
+
MODELS=
|
|
47
|
+
|
|
48
|
+
## Task model
|
|
49
|
+
# Optional: set to the model id/name from the `${OPENAI_BASE_URL}/models` list
|
|
50
|
+
# to use for internal tasks (title summarization, etc). If not set, the current model will be used
|
|
51
|
+
TASK_MODEL=
|
|
52
|
+
|
|
53
|
+
# Arch router (OpenAI-compatible) endpoint base URL used for route selection
|
|
54
|
+
# Example: https://api.openai.com/v1 or your hosted Arch endpoint
|
|
55
|
+
LLM_ROUTER_ARCH_BASE_URL=
|
|
56
|
+
|
|
57
|
+
## LLM Router Configuration
|
|
58
|
+
# Path to routes policy (JSON array). Required when the router is enabled; must point to a valid JSON file.
|
|
59
|
+
LLM_ROUTER_ROUTES_PATH=
|
|
60
|
+
|
|
61
|
+
# Model used at the Arch router endpoint for selection
|
|
62
|
+
LLM_ROUTER_ARCH_MODEL=
|
|
63
|
+
|
|
64
|
+
# Fallback behavior
|
|
65
|
+
# Route to map "other" to (must exist in routes file)
|
|
66
|
+
LLM_ROUTER_OTHER_ROUTE=casual_conversation
|
|
67
|
+
# Model to call if the Arch selection fails entirely
|
|
68
|
+
LLM_ROUTER_FALLBACK_MODEL=
|
|
69
|
+
# Arch selection timeout in milliseconds (default 10000)
|
|
70
|
+
LLM_ROUTER_ARCH_TIMEOUT_MS=10000
|
|
71
|
+
# Maximum length (in characters) for assistant messages sent to router for route selection (default 500)
|
|
72
|
+
LLM_ROUTER_MAX_ASSISTANT_LENGTH=500
|
|
73
|
+
# Maximum length (in characters) for previous user messages sent to router (latest user message not trimmed, default 400)
|
|
74
|
+
LLM_ROUTER_MAX_PREV_USER_LENGTH=400
|
|
75
|
+
|
|
76
|
+
# Enable router multimodal handling (set to true to allow image inputs via router)
|
|
77
|
+
LLM_ROUTER_ENABLE_MULTIMODAL=
|
|
78
|
+
# Required when LLM_ROUTER_ENABLE_MULTIMODAL=true: id or name of the multimodal model to use for image requests
|
|
79
|
+
LLM_ROUTER_MULTIMODAL_MODEL=
|
|
80
|
+
|
|
81
|
+
# Enable router tool support (set to true to allow tool calling via router)
|
|
82
|
+
LLM_ROUTER_ENABLE_TOOLS=
|
|
83
|
+
# Required when tools are active: id or name of the model to use for MCP tool calls.
|
|
84
|
+
LLM_ROUTER_TOOLS_MODEL=
|
|
85
|
+
|
|
86
|
+
# Router UI overrides (client-visible)
|
|
87
|
+
# Public display name for the router entry in the model list. Defaults to "Omni".
|
|
88
|
+
PUBLIC_LLM_ROUTER_DISPLAY_NAME=Omni
|
|
89
|
+
# Optional: public logo URL for the router entry. If unset, the UI shows a Carbon icon.
|
|
90
|
+
PUBLIC_LLM_ROUTER_LOGO_URL=
|
|
91
|
+
# Public alias id used for the virtual router model (Omni). Defaults to "omni".
|
|
92
|
+
PUBLIC_LLM_ROUTER_ALIAS_ID=omni
|
|
93
|
+
|
|
94
|
+
### Transcription ###
|
|
95
|
+
# Voice-to-text transcription using Whisper models
|
|
96
|
+
# If set, enables the microphone button in the chat input
|
|
97
|
+
# Example: openai/whisper-large-v3-turbo
|
|
98
|
+
TRANSCRIPTION_MODEL=
|
|
99
|
+
# Optional: Base URL for transcription API (defaults to HF inference)
|
|
100
|
+
# Default: https://router.huggingface.co/hf-inference/models
|
|
101
|
+
TRANSCRIPTION_BASE_URL=
|
|
102
|
+
|
|
103
|
+
### Authentication ###
|
|
104
|
+
# Parameters to enable open id login
|
|
105
|
+
OPENID_CONFIG=
|
|
106
|
+
# if it's defined, only these emails will be allowed to use login
|
|
107
|
+
ALLOWED_USER_EMAILS=[]
|
|
108
|
+
# If it's defined, users with emails matching these domains will also be allowed to use login
|
|
109
|
+
ALLOWED_USER_DOMAINS=[]
|
|
110
|
+
# valid alternative redirect URLs for OAuth, used for HuggingChat apps
|
|
111
|
+
ALTERNATIVE_REDIRECT_URLS=[]
|
|
112
|
+
### Cookies
|
|
113
|
+
# name of the cookie used to store the session
|
|
114
|
+
COOKIE_NAME=hf-chat
|
|
115
|
+
# If the value of this cookie changes, the session is destroyed. Useful if chat-ui is deployed on a subpath
|
|
116
|
+
# of your domain, and you want chat ui sessions to reset if the user's auth changes
|
|
117
|
+
COUPLE_SESSION_WITH_COOKIE_NAME=
|
|
118
|
+
# specify secure behaviour for cookies
|
|
119
|
+
COOKIE_SAMESITE=# can be "lax", "strict", "none" or left empty
|
|
120
|
+
COOKIE_SECURE=# set to true to only allow cookies over https
|
|
121
|
+
TRUSTED_EMAIL_HEADER=# header to use to get the user email, only use if you know what you are doing
|
|
122
|
+
|
|
123
|
+
### Admin stuff ###
|
|
124
|
+
ADMIN_CLI_LOGIN=true # set to false to disable the CLI login
|
|
125
|
+
ADMIN_TOKEN=#We recommend leaving this empty, you can get the token from the terminal.
|
|
126
|
+
|
|
127
|
+
### Feature Flags ###
|
|
128
|
+
LLM_SUMMARIZATION=true # generate conversation titles with LLMs
|
|
129
|
+
|
|
130
|
+
ALLOW_IFRAME=true # Allow the app to be embedded in an iframe
|
|
131
|
+
|
|
132
|
+
# Base servers list (JSON array). Example: MCP_SERVERS=[{"name": "Web Search (Exa)", "url": "https://mcp.exa.ai/mcp"}, {"name": "Hugging Face", "url": "https://hf.co/mcp"}]
|
|
133
|
+
MCP_SERVERS=
|
|
134
|
+
# When true, forward the logged-in user's Hugging Face access token
|
|
135
|
+
MCP_FORWARD_HF_USER_TOKEN=
|
|
136
|
+
# Exa API key (injected at runtime into mcp.exa.ai URLs as ?exaApiKey=)
|
|
137
|
+
EXA_API_KEY=
|
|
138
|
+
# Timeout in milliseconds for MCP tool calls (default: 120000 = 2 minutes)
|
|
139
|
+
MCP_TOOL_TIMEOUT_MS=
|
|
140
|
+
ENABLE_DATA_EXPORT=true
|
|
141
|
+
|
|
142
|
+
### Rate limits ###
|
|
143
|
+
# See `src/lib/server/usageLimits.ts`
|
|
144
|
+
# {
|
|
145
|
+
# conversations: number, # how many conversations
|
|
146
|
+
# messages: number, # how many messages in a conversation
|
|
147
|
+
# assistants: number, # how many assistants
|
|
148
|
+
# messageLength: number, # how long can a message be before we cut it off
|
|
149
|
+
# messagesPerMinute: number, # how many messages per minute
|
|
150
|
+
# tools: number # how many tools
|
|
151
|
+
# }
|
|
152
|
+
USAGE_LIMITS={}
|
|
153
|
+
|
|
154
|
+
### HuggingFace specific ###
|
|
155
|
+
## Feature flag & admin settings
|
|
156
|
+
# Used for setting early access & admin flags to users
|
|
157
|
+
HF_ORG_ADMIN=
|
|
158
|
+
HF_ORG_EARLY_ACCESS=
|
|
159
|
+
WEBHOOK_URL_REPORT_ASSISTANT=#provide slack webhook url to get notified for reports/feature requests
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
### Metrics ###
|
|
163
|
+
METRICS_ENABLED=false
|
|
164
|
+
METRICS_PORT=5565
|
|
165
|
+
LOG_LEVEL=info
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
### Parquet export ###
|
|
169
|
+
# Not in use anymore but useful to export conversations to a parquet file as a HuggingFace dataset
|
|
170
|
+
PARQUET_EXPORT_DATASET=
|
|
171
|
+
PARQUET_EXPORT_HF_TOKEN=
|
|
172
|
+
ADMIN_API_SECRET=# secret to admin API calls, like computing usage stats or exporting parquet data
|
|
173
|
+
|
|
174
|
+
### Config ###
|
|
175
|
+
ENABLE_CONFIG_MANAGER=true
|
|
176
|
+
|
|
177
|
+
### Docker build variables ###
|
|
178
|
+
# These values cannot be updated at runtime
|
|
179
|
+
# They need to be passed when building the docker image
|
|
180
|
+
# See https://github.com/huggingface/chat-ui/main/.github/workflows/deploy-prod.yml#L44-L47
|
|
181
|
+
APP_BASE="" # base path of the app, e.g. /chat, left blank as default
|
|
182
|
+
### Body size limit for SvelteKit https://svelte.dev/docs/kit/adapter-node#Environment-variables-BODY_SIZE_LIMIT
|
|
183
|
+
BODY_SIZE_LIMIT=15728640
|
|
184
|
+
PUBLIC_COMMIT_SHA=
|
|
185
|
+
|
|
186
|
+
### LEGACY parameters
|
|
187
|
+
ALLOW_INSECURE_COOKIES=false # LEGACY! Use COOKIE_SECURE and COOKIE_SAMESITE instead
|
|
188
|
+
PARQUET_EXPORT_SECRET=#DEPRECATED, use ADMIN_API_SECRET instead
|
|
189
|
+
RATE_LIMIT= # /!\ DEPRECATED definition of messages per minute. Use USAGE_LIMITS.messagesPerMinute instead
|
|
190
|
+
OPENID_NAME_CLAIM="name" # Change to "username" for some providers that do not provide name
|
|
191
|
+
OPENID_PROVIDER_URL=https://huggingface.co # for Google, use https://accounts.google.com
|
|
192
|
+
OPENID_TOLERANCE=
|
|
193
|
+
OPENID_RESOURCE=
|
|
194
|
+
EXPOSE_API=# deprecated, API is now always exposed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MONGODB_URL=mongodb://localhost:27017/
|