Copy disabled (too large)
Download .txt
Showing preview only (14,622K chars total). Download the full file to get everything.
Repository: weaviate/Verba
Branch: main
Commit: 6fb7c98d729b
Files: 295
Total size: 13.9 MB
Directory structure:
gitextract__w7iadsp/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── verba-feature-template.md
│ │ └── verba-issue-template.md
│ └── workflows/
│ └── docker-image.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Dockerfile
├── FRONTEND.md
├── LICENSE
├── MANIFEST.in
├── PYTHON_TUTORIAL.md
├── README.md
├── TECHNICAL.md
├── docker-compose.yml
├── frontend/
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── app/
│ │ ├── api.ts
│ │ ├── components/
│ │ │ ├── Chat/
│ │ │ │ ├── ChatConfig.tsx
│ │ │ │ ├── ChatInterface.tsx
│ │ │ │ ├── ChatMessage.tsx
│ │ │ │ ├── ChatView.tsx
│ │ │ │ └── StatusLabel.tsx
│ │ │ ├── Document/
│ │ │ │ ├── ChunkView.tsx
│ │ │ │ ├── ContentView.tsx
│ │ │ │ ├── DocumentExplorer.tsx
│ │ │ │ ├── DocumentMetaView.tsx
│ │ │ │ ├── DocumentSearch.tsx
│ │ │ │ ├── DocumentView.tsx
│ │ │ │ ├── VectorView.tsx
│ │ │ │ └── util.ts
│ │ │ ├── Ingestion/
│ │ │ │ ├── BasicSettingView.tsx
│ │ │ │ ├── ComponentView.tsx
│ │ │ │ ├── ConfigurationView.tsx
│ │ │ │ ├── FileComponent.tsx
│ │ │ │ ├── FileSelectionView.tsx
│ │ │ │ └── IngestionView.tsx
│ │ │ ├── Login/
│ │ │ │ ├── GettingStarted.tsx
│ │ │ │ └── LoginView.tsx
│ │ │ ├── Navigation/
│ │ │ │ ├── InfoComponent.tsx
│ │ │ │ ├── NavButton.tsx
│ │ │ │ ├── NavbarComponent.tsx
│ │ │ │ ├── StatusMessenger.tsx
│ │ │ │ ├── UserModal.tsx
│ │ │ │ ├── VerbaButton.tsx
│ │ │ │ └── util.ts
│ │ │ └── Settings/
│ │ │ ├── InfoView.tsx
│ │ │ ├── SettingsComponent.tsx
│ │ │ ├── SettingsView.tsx
│ │ │ └── SuggestionView.tsx
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ ├── types.ts
│ │ └── util.ts
│ ├── glsl.d.ts
│ ├── next.config.js
│ ├── package.json
│ ├── postcss.config.js
│ ├── public/
│ │ ├── alps_field_1k.hdr
│ │ ├── cloudy.hdr
│ │ ├── macbook.gltf
│ │ ├── shaders/
│ │ │ ├── includes/
│ │ │ │ └── simplexNoise4d.glsl
│ │ │ └── wobble/
│ │ │ ├── fragment.glsl
│ │ │ └── vertex.glsl
│ │ ├── verba.glb
│ │ ├── verba.gltf
│ │ └── weaviate.glb
│ ├── tailwind.config.ts
│ └── tsconfig.json
├── goldenverba/
│ ├── __init__.py
│ ├── components/
│ │ ├── __init__.py
│ │ ├── chunk.py
│ │ ├── chunking/
│ │ │ ├── CodeChunker.py
│ │ │ ├── HTMLChunker.py
│ │ │ ├── JSONChunker.py
│ │ │ ├── MarkdownChunker.py
│ │ │ ├── RecursiveChunker.py
│ │ │ ├── SemanticChunker.py
│ │ │ ├── SentenceChunker.py
│ │ │ ├── TokenChunker.py
│ │ │ ├── __init__.py
│ │ │ └── chunking_examples.py
│ │ ├── document.py
│ │ ├── embedding/
│ │ │ ├── CohereEmbedder.py
│ │ │ ├── GoogleEmbedder.py
│ │ │ ├── OllamaEmbedder.py
│ │ │ ├── OpenAIEmbedder.py
│ │ │ ├── SentenceTransformersEmbedder.py
│ │ │ ├── UpstageEmbedder.py
│ │ │ ├── VoyageAIEmbedder.py
│ │ │ ├── WeaviateEmbedder.py
│ │ │ └── __init__.py
│ │ ├── generation/
│ │ │ ├── AnthrophicGenerator.py
│ │ │ ├── CohereGenerator.py
│ │ │ ├── GeminiGenerator.py
│ │ │ ├── GroqGenerator.py
│ │ │ ├── NovitaGenerator.py
│ │ │ ├── OllamaGenerator.py
│ │ │ ├── OpenAIGenerator.py
│ │ │ ├── UpstageGenerator.py
│ │ │ └── __init__.py
│ │ ├── interfaces.py
│ │ ├── managers.py
│ │ ├── reader/
│ │ │ ├── AssemblyAIAPI.py
│ │ │ ├── BasicReader.py
│ │ │ ├── FirecrawlReader.py
│ │ │ ├── GitReader.py
│ │ │ ├── HTMLReader.py
│ │ │ ├── UnstructuredAPI.py
│ │ │ ├── UpstageDocumentParse.py
│ │ │ └── __init__.py
│ │ ├── retriever/
│ │ │ ├── WindowRetriever.py
│ │ │ └── __init__.py
│ │ ├── types.py
│ │ └── util.py
│ ├── server/
│ │ ├── __init__.py
│ │ ├── api.py
│ │ ├── cli.py
│ │ ├── frontend/
│ │ │ └── out/
│ │ │ ├── 404.html
│ │ │ ├── _next/
│ │ │ │ └── static/
│ │ │ │ ├── -4xCNh8fW_auOZGuG7OPj/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── 30i2FQTbR7Y4f-UfM6hbP/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── 4ajn2kvxlVqvDvSUh7-up/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── 5piNIBwi9EVvWEGUCt1HJ/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── 5rVRk1H0CSx_t9B72OCkV/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── CZvV6ohXKOaM2HZQjSr_e/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── EK3SdW_8_2ZVH1NNgqlNv/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── FEflRPdxwBXOroRwOpEz6/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── FcSX1HknjNhe9H0xxw_uy/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── I01L2Qf2M5E8rKySVdfwz/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── KoV36dmdEgYXG0yvTGe3m/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── MYxb6oMzMgqonOwG97TqG/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── QPYBqPy_EgcZIfNhJUgzL/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── SqhqgckvG9-Sxn3_Nq2Rt/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── VZK8jRGqcSpcMf2ZOPpII/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── Y3oNq6sdVkiLcuMaChJwW/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── _LnFD6u1WPj3rRxWv1Mp3/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── b8NLMEMd7UPwgQ6cqzdXK/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── chunks/
│ │ │ │ │ ├── 07115393-160e96bd79d1e493.js
│ │ │ │ │ ├── 07115393-8a796b5d068e3710.js
│ │ │ │ │ ├── 117-2e3ee50cbb6fc8da.js
│ │ │ │ │ ├── 12038df7-a10f1b9476e02872.js
│ │ │ │ │ ├── 12038df7-bbbca262706a9194.js
│ │ │ │ │ ├── 12038df7-bed05817827b4802.js
│ │ │ │ │ ├── 23-2fc6611658866471.js
│ │ │ │ │ ├── 23-b149ce429217dd65.js
│ │ │ │ │ ├── 39209d7c-1514aaef8caa025b.js
│ │ │ │ │ ├── 39209d7c-9eeaeffa37c8b51e.js
│ │ │ │ │ ├── 39209d7c-f601708f0876481f.js
│ │ │ │ │ ├── 39aecf79-2d831b66f40a6478.js
│ │ │ │ │ ├── 39aecf79-474a3d3c48835c08.js
│ │ │ │ │ ├── 39aecf79-8d523cb23043db9d.js
│ │ │ │ │ ├── 472688b4-2c611c3f7f6780f5.js
│ │ │ │ │ ├── 472688b4-f8d4a7fb6705064c.js
│ │ │ │ │ ├── 48507feb-c058e15125ba1e58.js
│ │ │ │ │ ├── 48507feb-cb362b7475ba2891.js
│ │ │ │ │ ├── 48507feb-fb2bbcdbd4adc32f.js
│ │ │ │ │ ├── 4f53ad1b-af82feddb1367bb5.js
│ │ │ │ │ ├── 4f53ad1b-cf02b0f93cf25527.js
│ │ │ │ │ ├── 4f53ad1b-f1821b28dab6f189.js
│ │ │ │ │ ├── 4f9d9cd8-0af0a6a5e34c4b59.js
│ │ │ │ │ ├── 4f9d9cd8-7217d0ac0bfcc7ce.js
│ │ │ │ │ ├── 514-cff62b6f7919676e.js
│ │ │ │ │ ├── 5349c568-74bb20b84335457b.js
│ │ │ │ │ ├── 5349c568-e26f968c6773abca.js
│ │ │ │ │ ├── 737dfa3e-71fd4aa07f7d84a6.js
│ │ │ │ │ ├── 789-e4deefde6e1de3c8.js
│ │ │ │ │ ├── 864-15201e63d2e174b9.js
│ │ │ │ │ ├── 8dc5345f-59beaec077e947c5.js
│ │ │ │ │ ├── 8dc5345f-9a36b2be5ef7459c.js
│ │ │ │ │ ├── 8dc5345f-dfd13b91b6647830.js
│ │ │ │ │ ├── 8e68d877-65c524a5e56473c0.js
│ │ │ │ │ ├── 8e68d877-6d32d357377fbcf8.js
│ │ │ │ │ ├── 9081a741-3f102f6aee474fd0.js
│ │ │ │ │ ├── 9081a741-52789bf6b11470c5.js
│ │ │ │ │ ├── 9081a741-560e37099622c351.js
│ │ │ │ │ ├── 9081a741-599fa98ab2a737de.js
│ │ │ │ │ ├── 9081a741-a7c6599b4221aee8.js
│ │ │ │ │ ├── 949-4b7f5a091d97fe2c.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── _not-found/
│ │ │ │ │ │ │ ├── page-26d6c07435b6028b.js
│ │ │ │ │ │ │ ├── page-aaadc9fa354a98b4.js
│ │ │ │ │ │ │ └── page-d0fe2d040a50a096.js
│ │ │ │ │ │ ├── layout-213bbf4a992a0fc8.js
│ │ │ │ │ │ ├── layout-ad434663ed5b1d3a.js
│ │ │ │ │ │ ├── page-09caddcec70c8f21.js
│ │ │ │ │ │ ├── page-107cfe4c05eff918.js
│ │ │ │ │ │ ├── page-1afb38c40393046f.js
│ │ │ │ │ │ ├── page-235aaff141d9263e.js
│ │ │ │ │ │ ├── page-25ed1cb73822cf4e.js
│ │ │ │ │ │ ├── page-317294c5dcc5eacf.js
│ │ │ │ │ │ ├── page-345642b96638188b.js
│ │ │ │ │ │ ├── page-3617b8292b21fc34.js
│ │ │ │ │ │ ├── page-45b34f73d34e8979.js
│ │ │ │ │ │ ├── page-54094d73aee6e252.js
│ │ │ │ │ │ ├── page-5e9b74ed5a1be60e.js
│ │ │ │ │ │ ├── page-61a9fa55e8011365.js
│ │ │ │ │ │ ├── page-63c3d501186e1569.js
│ │ │ │ │ │ ├── page-8184afaea67792bd.js
│ │ │ │ │ │ ├── page-a985ad06a3dcc355.js
│ │ │ │ │ │ ├── page-b8f5daf1c95250b5.js
│ │ │ │ │ │ ├── page-c506ad2929c6e6a6.js
│ │ │ │ │ │ ├── page-de101b2b6802134a.js
│ │ │ │ │ │ ├── page-e15dc604b4004fa4.js
│ │ │ │ │ │ ├── page-f09784266b0febdd.js
│ │ │ │ │ │ ├── page-f3aef3f90382cf14.js
│ │ │ │ │ │ ├── page-f7e98beb8ba64d62.js
│ │ │ │ │ │ └── page-fc144a2905205d63.js
│ │ │ │ │ ├── b536a0f1-cb79989225eaf318.js
│ │ │ │ │ ├── b536a0f1-d8ed58bb9dee20ad.js
│ │ │ │ │ ├── b536a0f1-ea1620b5a816a5f5.js
│ │ │ │ │ ├── bc9c3264-007b030a3d8b973f.js
│ │ │ │ │ ├── bc9c3264-ebee20cfb15b0079.js
│ │ │ │ │ ├── ec3863c0-06201a77cd4ecf61.js
│ │ │ │ │ ├── ec3863c0-0f36e1c42d4712ac.js
│ │ │ │ │ ├── ec3863c0-3299d7812f924fb2.js
│ │ │ │ │ ├── ec3863c0-666dbee8e5822499.js
│ │ │ │ │ ├── ec3863c0-b59cee7fa657bb4d.js
│ │ │ │ │ ├── fd9d1056-3c0a5e4377f054b9.js
│ │ │ │ │ ├── fd9d1056-5afc1fda0426cd7c.js
│ │ │ │ │ ├── fd9d1056-aa9b9ca480dc9276.js
│ │ │ │ │ ├── framework-00a8ba1a63cfdc9e.js
│ │ │ │ │ ├── main-0806fb9f50640b69.js
│ │ │ │ │ ├── main-ab370d8db521f1bb.js
│ │ │ │ │ ├── main-app-6d8fe3bc29305481.js
│ │ │ │ │ ├── main-app-8b51a742f61d77e1.js
│ │ │ │ │ ├── pages/
│ │ │ │ │ │ ├── _app-037b5d058bd9a820.js
│ │ │ │ │ │ ├── _app-15e2daefa259f0b5.js
│ │ │ │ │ │ ├── _error-28b803cb2479b966.js
│ │ │ │ │ │ └── _error-6ae619510b1539d6.js
│ │ │ │ │ ├── polyfills-42372ed130431b0a.js
│ │ │ │ │ ├── polyfills-78c92fac7aa8fdd8.js
│ │ │ │ │ ├── webpack-e6d8fc8882b3cc5a.js
│ │ │ │ │ └── webpack-f81a484e456a776b.js
│ │ │ │ ├── cpNG_krRh40F8ypWaUA1Y/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── css/
│ │ │ │ │ ├── 0ffc59f004ebeefe.css
│ │ │ │ │ ├── 2817a3d3bb800805.css
│ │ │ │ │ ├── ae5cf92d392439f8.css
│ │ │ │ │ ├── b219313ebc6bfc74.css
│ │ │ │ │ ├── b6698fd034c37467.css
│ │ │ │ │ ├── b7332ce1649563ef.css
│ │ │ │ │ ├── bbb58f872eab5c8f.css
│ │ │ │ │ ├── d919237d8b9336c0.css
│ │ │ │ │ ├── fb11073f70ca561d.css
│ │ │ │ │ └── fd8d77da4d075ee8.css
│ │ │ │ ├── gjEH1UGrJtEx0lJhUhCoG/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── ifjjNsXVlVkzB0f2yWOlr/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── loIKTVc-LZ1tLrqnZ0_At/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── pR7o7Axy7wuvopYTQQ4gp/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── ppWjoMOwBDfvgLeNC4RNs/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── sJVEctNLIfCe2KAU81egg/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ ├── tVocASfF6DGpJwQWyOdO9/
│ │ │ │ │ ├── _buildManifest.js
│ │ │ │ │ └── _ssgManifest.js
│ │ │ │ └── yPC90wje_7V701wv-Jubb/
│ │ │ │ ├── _buildManifest.js
│ │ │ │ └── _ssgManifest.js
│ │ │ ├── alps_field_1k.hdr
│ │ │ ├── cloudy.hdr
│ │ │ ├── index.html
│ │ │ ├── index.txt
│ │ │ ├── macbook.gltf
│ │ │ ├── shaders/
│ │ │ │ ├── includes/
│ │ │ │ │ └── simplexNoise4d.glsl
│ │ │ │ └── wobble/
│ │ │ │ ├── fragment.glsl
│ │ │ │ └── vertex.glsl
│ │ │ ├── verba.glb
│ │ │ ├── verba.gltf
│ │ │ └── weaviate.glb
│ │ ├── helpers.py
│ │ └── types.py
│ ├── tests/
│ │ └── document/
│ │ └── test_document.py
│ └── verba_manager.py
├── pypi_commands.sh
└── setup.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/verba-feature-template.md
================================================
---
name: Verba Feature Template
about: Request a new feature for Verba
title: ""
labels: "enhancement"
assignees: ""
---
## Description
<!-- A clear and concise description of what the new feature. -->
## Additional context
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/verba-issue-template.md
================================================
---
name: Verba Issue Template
about: Encountering errors or issues with Verba
title: ""
labels: ""
assignees: ""
---
## Description
<!-- A clear and concise description of what the issue is. Please include any error messages and logs. If possible, also include your configuration. -->
## Installation
<!-- Please specify how you installed Verba. Please always make sure to install Verba in a clean python environment and have at least 3.10.0 installed -->
- [ ] pip install goldenverba
- [ ] pip install from source
- [ ] Docker installation
If you installed via pip, please specify the version:
## Weaviate Deployment
<!-- Please specify the Weaviate deployment you are using. -->
- [ ] Local Deployment
- [ ] Docker Deployment
- [ ] Cloud Deployment
## Configuration
<!-- If you can, please specify the what components you are using. -->
Reader:
Chunker:
Embedder:
Retriever:
Generator:
## Steps to Reproduce
<!-- If this is a bug, please provide detailed steps on how to reproduce the issue. If this is a feature, please describe what you want to be added or changed. -->
## Additional context
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/workflows/docker-image.yml
================================================
name: Docker Build and Push
on:
push:
branches: ["main"]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: true
tags: semitechnologies/verba:latest
platforms: linux/amd64,linux/arm64
================================================
FILE: .gitignore
================================================
.env
.env*
__pycache__
.DS_Store
.pytest_cache
.python-version
*.egg-info
venv
venv*
dist
build
~
.local
.cache
.verba
.vscode
verba_config.json
text-generation-inference
test.py
cache.txt
.ruff_cache
*_secrets.json
ollama
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to this project will be documented in this file.
## [2.1.3] More data types
## Added
- Added `OLLAMA_MODEL` and `OLLAMA_EMBED_MODEL` environment variables (https://github.com/weaviate/Verba/pull/372)
- Hiding `Getting Started` display after showing once
- Added support for `csv` `xlsx` `xls` for the `DefaultReader`
## [2.1.2] Adding Novita!
## Added
- Added Novita Generator (https://www.novita.ai/)
- Added basic tests for Document class
## Fixed
- spaCy Language Issues (https://github.com/weaviate/Verba/issues/359#issuecomment-2612233766) (https://github.com/weaviate/Verba/issues/352)
## [2.1.1] More Bugs!
## Added
- Dynamic model name retrieval for OpenAI Generator based on OpenAI URL and API Key (https://github.com/weaviate/Verba/issues/123) (https://github.com/weaviate/Verba/issues/362)
## [2.1.0] Fixing Bugs and Adding Friends
## Added
- Added Upstage: Reader, Embedder, Generator (https://www.upstage.ai/)
- Added new deployment type: Custom
- Added new port configuration (https://github.com/weaviate/Verba/issues/308)
- Added Groq (https://github.com/weaviate/Verba/pull/278)
- AssemblyAI Reader for audio files (https://github.com/weaviate/Verba/pull/283)
- Language Detection for languages like chinese, english, french, german and dutch (https://github.com/weaviate/Verba/pull/302)
- Improve Markdown Chunking (https://github.com/weaviate/Verba/pull/323)
- Upgrade to latest Weaviate Client
- Added Ollama to Docker Compose
- Added Verba to Docker Hub
- Added default deployment to skip login screen (https://github.com/weaviate/Verba/issues/305)
## Fixed
- Catch Exception when trying to access the OpenAI API Embedding endpoint to retrieve model names
- Fixed reading empty string as environment variables (https://github.com/weaviate/Verba/pull/300)
- Fixed default Unstructed URL (https://github.com/weaviate/Verba/pull/295)
- Changed Collection names to prevent conflicts with other older Verba version generated collections
- Ensure Ollama URL is parsed correctly (https://github.com/weaviate/Verba/pull/327)
- Fixing typos (https://github.com/weaviate/Verba/pull/329)
- System Message is now a textarea in the frontend (https://github.com/weaviate/Verba/issues/334)
- Race Condition when multiple requests try to create same client (https://github.com/weaviate/Verba/issues/335)
- Fix wrong data types when querying additional chunks
- Remove legacy code (https://github.com/weaviate/Verba/issues/284)
- Change Python version range below 3.13
- Firecrawl Reader missing metadata (https://github.com/weaviate/Verba/issues/280)
## [2.0.0] Importastic
## Added
- Async Ingestion with realtime logging
- Migrated to Weaviate v4 Client
- Added new File Selection Interface
- Add Directory Upload
- Control Settings per file/url individually
- Import indivdual files or all
- Overwrite existing files
- Add multiple labels to documents
- More configuration for readers, chunkers, and embedders
- Improved Document Search UI
- Add Config Validation
- Add HTML Reader
- Add Recursive Chunker
- HTML Chunker
- Markdown Chunker
- Code Import
- Code Chunking
- Semantic Chunking
- Label Filter
- Document Filter (Add document to chat)
- Add more themes
- Reworked Admin Interface
- Added Suggestion View
- Reworked Suggestion logic
- Added VoyageAI
- Added custom metadata
- Added DocumentExplorer with
- Content View
- Chunk View
- Vector View
- Visualize vectors of chunks of one or multiple documents
- PCA
-
## [1.0.3]
## Added
- Cancel Generation Button
- Added .docx support
- Added Documentation for JSON Files
- Added GitLabReader (https://github.com/weaviate/Verba/pull/151)
- Improved HuggingFace Embedding Models thanks to @tomaarsen
- MixedBreadEmbedder
- AllMPNetEmbedder
## Fixed
- Check error logs coming from Ollama and send it to the frontend
- Check If Chunks Are NoneType
## [1.0.2]
## Added
- Readme Variable: OPENAI_BASE_URL
## Fixed
- https://github.com/weaviate/Verba/pull/173
- https://github.com/weaviate/Verba/pull/163
- https://github.com/weaviate/Verba/pull/148
## [1.0.0] - Beautiful Verba Update
### Added
- Added DaisyUI
- Optimized frontend codebase
- Fully Reworked Verba Design
- Fully Responsive, optimized for all screen sizes
- Customization Capabilities
- Added Default, Darkmode, Weaviate themes
- Full text, color, image customization
- Improve Chat Interface
- Better formatting of markdown + code
- Keep conversations saved in localBrowser storage
- Better Debugging by providing more information about current states
- Improve Document Viewer Interface
- Add Pagination
- Add Sorting
- Use Aggregation for Filtering
- Improve Status Overview
- Reworked Frontend + Optimize Code
- Sort status entries
- Improve Loading Speed by using Aggregation
- Improve Component Selection for both Ingestion and RAG
- Added new configuraiton that will be passed between frontend and backend
- Cleaned codebase, merged interfaces and managers to single files
- Added clean endpoints for better code readability
- Reworked on interfaces
- Added better console and logging for ingestion
- More Configuration
- Enable/Disable Caching and Autocomplete Suggestions
- Improved verba_config.json
- Ability to enable/disable caching + autosuggestions
- Add Google Gemini as new Embedder and Generator
- Added .CSV support (all file types available in Unstructured IO)
- More test data
- Add Ollama as Generator and Embedding Component
- Add Support for Cohere R+
- Improved WindowRetriever Context Generation
- Show RAW Context in Frontend + Save in LocalStorage
- Save Settings and Configuration in Weaviate
### Changed
- Changed to AppRouter framework
- Changed frontend project structure
- Changed backend project structure
- Removed Llama Generator Component
### Fixed
- Using Accelerator Library
## [0.4.0] - 11.04.2024
### Added
- Improved Docker Documentation
- Improved Docker Settings
- New Environment Variables for OpenAI proxies: OpenAI_BASE_URL (LiteLLM support) (https://github.com/weaviate/Verba/issues/56)
- Increased version
### Changed
- Removed spaCy from project
### Fixed
- Python not working on version 3.12, 3.11, and 3.9
- GitHub Links on README
- Fix Docker Default Vectorizer (https://github.com/weaviate/Verba/issues/50)
- Fix requirements.txt spelling error
- Minor Bug fixes
## [0.3.1] - 15.11.2023
### Added
- PDFReader powered by PyPDF2
- TokenChunker powered by tiktoken
- Ruff Linting (set as pre-commit)
- Markdown Formatting for chat messages (https://github.com/weaviate/Verba/issues/48)
### Fixed
- Added missing dependencies
- Fixed restart bug
- Fixed MiniLM Cuda to_device bug (https://github.com/weaviate/Verba/issues/41)
- Fixed Config Issues (https://github.com/weaviate/Verba/issues/51)
- Fixed Weaviate Embedded Headers for Cohere
## [0.3.0] - 12.09.2023
### Added
- Refactor modular architecture
- Add ability to import data through the frontend, CLI, and script
- Add Readers (SimpleReader, PathReader, GithubReader, PDFReader)
- Add Chunkers (WordChunker, SentenceChunker)
- Add Embedders (ADAEmbedder,SentenceTransformer, Cohere)
- Add Generators (GPT3, GPT4, LLama, Cohere)
- Status Page
- Reset functionality
- Streaming Token Generation
- Lazy Document Loading
- Add Copy and Cached Tag
- Improved Semantic Cache
- Added LLama 2 and Cohere support
- Added new OpenAI models
- Improved Documentation
- Added technical docs and contribution guidelines
### Fixed
- Error handling for data ingestion (handling chunk size)
- Schmea handling on startup
### Changed
- Removed Simple- and AdvancedEngine logic
## [0.2.3] - 05.09.2023
### Added
- OpenAI API documentation example dataset
## [0.2.2] - 31.08.2023
### Release!
- First version of Verba released! (many to come :)
### Added
- Verba favicon
### Fixed
- Add static files to package
- Weaviate Embedded not shutting down
## [0.1.0] - 29.08.2023
### Added
- Prepare Verba for first release
================================================
FILE: CONTRIBUTING.md
================================================
# Verba Contribution Guidelines
Welcome to the Verba community! We're thrilled that you're interested in contributing to the Verba project. Verba is a collaborative open-source project, and we believe that everyone has something unique to contribute. Below you'll find our guidelines which aim to make contributing to Verba a respectful and pleasant experience for everyone.
## 🌟 Community and Open Source
Open source is at the heart of Verba. We appreciate feedback, ideas, and enhancements from the community. Whether you're looking to fix a bug, add a new feature, or simply improve the documentation, your contribution is important to us.
## 📚 Before You Begin
Before contributing, please take a moment to read through the [README](https://github.com/weaviate/Verba/README.md) and the [Technical Documentation](https://github.com/weaviate/Verba/TECHNICAL.md). These documents provide a comprehensive understanding of the project and are essential reading to ensure that we're all on the same page. Please note that the technical documentation is a work in progress and will be updated as we progress.
## 🐛 Reporting Issues
If you've identified a bug or have an idea for an enhancement, please begin by creating an Issue. Here's how:
- Check the Issue tracker to ensure the bug or enhancement hasn't already been reported.
- Clearly describe the issue including steps to reproduce when it is a bug.
- Include as much relevant information as possible.
## 💡 Ideas and Feedback
We welcome all ideas and feedback. If you're not ready to open an Issue or if you're just looking for a place to discuss ideas, head over to our [GitHub Discussions](https://github.com/weaviate/Verba/discussions) or the [Weaviate Support Page](https://forum.weaviate.io/).
## 🧪 Testing
We use [pytest](https://docs.pytest.org) for testing. Please note that the tests are WIP and some are missing. We still encourage you to run the tests and add more tests as you see fit.
To run the tests, use the following command:
```bash
pytest goldenverba/tests
```
## 📝 Pull Requests
If you're ready to contribute code or documentation, please submit a Pull Request (PR) to the dev branch. Here's the process:
- Fork the repository and create your branch from `main`.
- Ensure that your code adheres to the existing code style. Use [Black](https://github.com/psf/black) for formatting Python code.
- If you're adding a new feature, consider writing unit tests and documenting the feature.
- Verify that your changes pass existing unit tests
- Make sure your code lints (mypy compatibility is optional but encouraged).
- Include a clear description of your changes in the PR.
- Link to the Issue in your PR description.
### 🔄 Pull Request Process
- PRs are reviewed on a regular basis.
- Engage in the conversation and make requested updates to your PR if needed.
- Once approved, your PR will be merged into the main branch by a maintainer.
## 🗨️ Stay Connected
We encourage you to join our community channels. Stay connected, share ideas, and get to know fellow contributors.
Thank you for being a part of Verba. Your contributions not only help improve the project but also the wider community of users and developers.
Happy contributing!
================================================
FILE: Dockerfile
================================================
FROM python:3.11
WORKDIR /Verba
COPY . /Verba
RUN pip install '.'
EXPOSE 8000
CMD ["verba", "start","--port","8000","--host","0.0.0.0"]
================================================
FILE: FRONTEND.md
================================================
# Verba - Frontend Documentation
Verba's Frontend is a [NextJS](https://nextjs.org/) application used together with [TailwindCSS](https://tailwindcss.com/) and [DaisyUI](https://daisyui.com/).
## 🚀 Setting Up the Frontend
To get your local copy of the Verba frontend up and running, please follow these simple steps:
1. Clone Repository
```git
git clone https://github.com/weaviate/Verba.git
```
1. **Node.js Requirement**:
- Confirm that Node.js version `>=21.3.0` is installed on your system. If you need to install or update Node.js, visit the official [Node.js website](https://nodejs.org/).
2. **Installation**:
- Navigate to the frontend directory: `cd frontend`
- Run `npm install` to install the dependencies required for the project.
3. **Development Server**:
- Launch the application in development mode by executing `npm run dev`.
- Open your web browser and visit `http://localhost:3000` to view the application.
## 📦 Building Static Pages for FastAPI
If you wish to serve and update the frontend through FastAPI, you need to build static pages:
1. **Build Process**:
- Execute `npm run build` to generate the static production build. The output will be directed to the FastAPI folder configured to serve the static content.
================================================
FILE: LICENSE
================================================
Copyright (c) 2020-2023, Weaviate B.V.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: MANIFEST.in
================================================
recursive-include goldenverba/server/frontend/out *
================================================
FILE: PYTHON_TUTORIAL.md
================================================
# Installing Python and Setting Up a Virtual Environment
Before you can use Verba, you'll need to ensure that `Python >=3.10.0` is installed on your system and that you can create a virtual environment for a safer and cleaner project setup.
## Installing Python
Python is required to run Verba. If you don't have Python installed, follow these steps:
### For Windows:
Download the latest Python installer from the official Python website.
Run the installer and make sure to check the box that says `Add Python to PATH` during installation.
### For macOS:
You can install Python using Homebrew, a package manager for macOS, with the following command in the terminal:
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
Then install Python:
```
brew install python
```
### For Linux:
Python usually comes pre-installed on most Linux distributions. If it's not, you can install it using your distribution's package manager. You can read more about it [here](https://opensource.com/article/20/4/install-python-linux)
## Setting Up a Virtual Environment
It's recommended to use a virtual environment to avoid conflicts with other projects or system-wide Python packages.
### Install the virtualenv package:
First, ensure you have pip installed (it comes with Python if you're using version 3.4 and above).
Install virtualenv by running:
```
pip install virtualenv
```
### Create a Virtual Environment:
Navigate to your project's directory in the terminal.
Run the following command to create a virtual environment named venv (you can name it anything you like):
```
python3 -m virtualenv venv
```
### Activate the Virtual Environment:
- On Windows, activate the virtual environment by running:
```
venv\Scripts\activate.bat
```
- On macOS and Linux, activate it with:
```
source venv/bin/activate
```
Once your virtual environment is activated, you'll see its name in the terminal prompt. Now you're ready to install Verba using the steps provided in the Quickstart sections.
> Remember to deactivate the virtual environment when you're done working with Verba by simply running deactivate in the terminal.
================================================
FILE: README.md
================================================
# Verba
## The Golden RAGtriever - Community Edition ✨
[](https://weaviate.io/)
[](https://pypi.org/project/goldenverba/) [](https://docs.docker.com/get-started/) [](https://verba.weaviate.io/)
Welcome to Verba: The Golden RAGtriever, an community-driven open-source application designed to offer an end-to-end, streamlined, and user-friendly interface for Retrieval-Augmented Generation (RAG) out of the box. In just a few easy steps, explore your datasets and extract insights with ease, either locally with Ollama and Huggingface or through LLM providers such as Anthrophic, Cohere, and OpenAI. This project is built with and for the community, please be aware that it might not be maintained with the same urgency as other Weaviate production applications. Feel free to contribute to the project and help us make Verba even better! <3
```
pip install goldenverba
```

- [Verba](#verba)
- [🎯 What Is Verba?](#what-is-verba)
- [✨ Features](#feature-lists)
- [✨ Getting Started with Verba](#getting-started-with-verba)
- [🔑 API Keys](#api-keys)
- [Weaviate](#weaviate)
- [Ollama](#ollama)
- [Unstructured](#unstructured)
- [AssemblyAI](#assemblyai)
- [OpenAI](#openai)
- [HuggingFace](#huggingface)
- [Groq](#groq)
- [Novita AI](#novitaai)
- [Quickstart: Deploy with pip](#how-to-deploy-with-pip)
- [Quickstart: Build from Source](#how-to-build-from-source)
- [Quickstart: Deploy with Docker](#how-to-install-verba-with-docker)
- [💾 Verba Walkthrough](#️verba-walkthrough)
- [💖 Open Source Contribution](#open-source-contribution)
- [🚩 Known Issues](#known-issues)
- [❔FAQ](#faq)
## What Is Verba?
Verba is a fully-customizable personal assistant utilizing [Retrieval Augmented Generation (RAG)](https://weaviate.io/rag#:~:text=RAG%20with%20Weaviate,accuracy%20of%20AI%2Dgenerated%20content.) for querying and interacting with your data, **either locally or deployed via cloud**. Resolve questions around your documents, cross-reference multiple data points or gain insights from existing knowledge bases. Verba combines state-of-the-art RAG techniques with Weaviate's context-aware database. Choose between different RAG frameworks, data types, chunking & retrieving techniques, and LLM providers based on your individual use-case.
## Open Source Spirit
**Weaviate** is proud to offer this open-source project for the community. While we strive to address issues as fast as we can, please understand that it may not be maintained with the same rigor as production software. We welcome and encourage community contributions to help keep it running smoothly. Your support in fixing open issues quickly is greatly appreciated.
### Watch our newest Verba video here:
[](https://www.youtube.com/watch?v=2VCy-YjRRhA&t=40s&ab_channel=Weaviate%E2%80%A2VectorDatabase)
## Feature Lists
| 🤖 Model Support | Implemented | Description |
| --------------------------------- | ----------- | ------------------------------------------------------- |
| Ollama (e.g. Llama3) | ✅ | Local Embedding and Generation Models powered by Ollama |
| HuggingFace (e.g. MiniLMEmbedder) | ✅ | Local Embedding Models powered by HuggingFace |
| Cohere (e.g. Command R+) | ✅ | Embedding and Generation Models by Cohere |
| Anthrophic (e.g. Claude Sonnet) | ✅ | Embedding and Generation Models by Anthrophic |
| OpenAI (e.g. GPT4) | ✅ | Embedding and Generation Models by OpenAI |
| Groq (e.g. Llama3) | ✅ | Generation Models by Groq (LPU inference) |
| Novita AI (e.g. Llama3.3) | ✅ | Generation Models by Novita AI |
| Upstage (e.g. Solar) | ✅ | Embedding and Generation Models by Upstage |
| 🤖 Embedding Support | Implemented | Description |
| -------------------- | ----------- | ---------------------------------------- |
| Weaviate | ✅ | Embedding Models powered by Weaviate |
| Ollama | ✅ | Local Embedding Models powered by Ollama |
| SentenceTransformers | ✅ | Embedding Models powered by HuggingFace |
| Cohere | ✅ | Embedding Models by Cohere |
| VoyageAI | ✅ | Embedding Models by VoyageAI |
| OpenAI | ✅ | Embedding Models by OpenAI |
| Upstage | ✅ | Embedding Models by Upstage |
| 📁 Data Support | Implemented | Description |
| -------------------------------------------------------- | ----------- | ---------------------------------------------- |
| [UnstructuredIO](https://docs.unstructured.io/welcome) | ✅ | Import Data through Unstructured |
| [Firecrawl](https://www.firecrawl.dev/) | ✅ | Scrape and Crawl URL through Firecrawl |
| [UpstageDocumentParse](https://upstage.ai/) | ✅ | Parse Documents through Upstage Document AI |
| PDF Ingestion | ✅ | Import PDF into Verba |
| GitHub & GitLab | ✅ | Import Files from Github and GitLab |
| CSV/XLSX Ingestion | ✅ | Import Table Data into Verba |
| .DOCX | ✅ | Import .docx files |
| Multi-Modal (using [AssemblyAI](https://assemblyai.com)) | ✅ | Import and Transcribe Audio through AssemblyAI |
| ✨ RAG Features | Implemented | Description |
| ----------------------- | --------------- | ------------------------------------------------------------------------- |
| Hybrid Search | ✅ | Semantic Search combined with Keyword Search |
| Autocomplete Suggestion | ✅ | Verba suggests autocompletion |
| Filtering | ✅ | Apply Filters (e.g. documents, document types etc.) before performing RAG |
| Customizable Metadata | ✅ | Free control over Metadata |
| Async Ingestion | ✅ | Ingest data asynchronously to speed up the process |
| Advanced Querying | planned ⏱️ | Task Delegation Based on LLM Evaluation |
| Reranking | planned ⏱️ | Rerank results based on context for improved results |
| RAG Evaluation | planned ⏱️ | Interface for Evaluating RAG pipelines |
| Agentic RAG | out of scope ❌ | Agentic RAG pipelines |
| Graph RAG | out of scope ❌ | Graph-based RAG pipelines |
| 🗡️ Chunking Techniques | Implemented | Description |
| ---------------------- | ----------- | ------------------------------------------------------- |
| Token | ✅ | Chunk by Token powered by [spaCy](https://spacy.io/) |
| Sentence | ✅ | Chunk by Sentence powered by [spaCy](https://spacy.io/) |
| Semantic | ✅ | Chunk and group by semantic sentence similarity |
| Recursive | ✅ | Recursively chunk data based on rules |
| HTML | ✅ | Chunk HTML files |
| Markdown | ✅ | Chunk Markdown files |
| Code | ✅ | Chunk Code files |
| JSON | ✅ | Chunk JSON files |
| 🆒 Cool Bonus | Implemented | Description |
| ------------------------ | --------------- | ------------------------------------------------------- |
| Docker Support | ✅ | Verba is deployable via Docker |
| Customizable Frontend | ✅ | Verba's frontend is fully-customizable via the frontend |
| Vector Viewer | ✅ | Visualize your data in 3D |
| Multi-User Collaboration | out of scope ❌ | Multi-User Collaboration in Verba |
| 🤝 RAG Libraries | Implemented | Description |
| ---------------- | ----------- | ---------------------------------- |
| LangChain | ✅ | Implement LangChain RAG pipelines |
| Haystack | planned ⏱️ | Implement Haystack RAG pipelines |
| LlamaIndex | planned ⏱️ | Implement LlamaIndex RAG pipelines |
> Something is missing? Feel free to create a new issue or discussion with your idea!

---
# Getting Started with Verba
You have three deployment options for Verba:
- Install via pip
```
pip install goldenverba
```
- Build from Source
```
git clone https://github.com/weaviate/Verba
pip install -e .
```
- Use Docker for Deployment
**Prerequisites**: If you're not using Docker, ensure that you have `Python >=3.10.0,<3.13.0` installed on your system.
```
git clone https://github.com/weaviate/Verba
docker compose --env-file <your-env-file> up -d --build
```
If you're unfamiliar with Python and Virtual Environments, please read the [python tutorial guidelines](./PYTHON_TUTORIAL.md).
# API Keys and Environment Variables
You can set all API keys in the Verba frontend, but to make your life easier, we can also prepare a `.env` file in which Verba will automatically look for the keys. Create a `.env` in the same directory you want to start Verba in. You can find an `.env.example` file in the [goldenverba](./goldenverba/.env.example) directory.
> Make sure to only set environment variables you intend to use, environment variables with missing or incorrect values may lead to errors.
Below is a comprehensive list of the API keys and variables you may require:
| Environment Variable | Value | Description |
| ---------------------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| WEAVIATE_URL_VERBA | URL to your hosted Weaviate Cluster | Connect to your [WCS](https://console.weaviate.cloud/) Cluster |
| WEAVIATE_API_KEY_VERBA | API Credentials to your hosted Weaviate Cluster | Connect to your [WCS](https://console.weaviate.cloud/) Cluster |
| ANTHROPIC_API_KEY | Your Anthropic API Key | Get Access to [Anthropic](https://www.anthropic.com/) Models |
| OPENAI_API_KEY | Your OpenAI Key | Get Access to [OpenAI](https://openai.com/) Models |
| OPENAI_EMBED_API_KEY | Your OpenAI Key | Use a different endpoint for embeddings |
| OPENAI_BASE_URL | URL to OpenAI instance | Models |
| OPENAI_EMBED_BASE_URL | URL to OpenAI instance | Use a different endpoint for embeddings |
| OPENAI_MODEL | The name of the model to be used when selecting OpenAI as a Generator | Default: the first model in the list returned by the endpoint |
| OPENAI_EMBED_MODEL | The name of the OpenAI embedding model to be used when selecting OpenAI as an Embedder | Default: `text-embedding-3-small` |
| OPENAI_CUSTOM_EMBED | `true` \| `false` | Allow Verba to recognize custom embedding model names (not only OpenAI ones) |
| COHERE_API_KEY | Your API Key | Get Access to [Cohere](https://cohere.com/) Models |
| GROQ_API_KEY | Your Groq API Key | Get Access to [Groq](https://groq.com/) Models |
| NOVITA_API_KEY | Your Novita API Key | Get Access to [Novita AI](https://novita.ai?utm_source=github_verba&utm_medium=github_readme&utm_campaign=github_link) Models |
| OLLAMA_URL | URL to your Ollama instance (e.g. http://localhost:11434 ) | Get Access to [Ollama](https://ollama.com/) Models |
| UNSTRUCTURED_API_KEY | Your API Key | Get Access to [Unstructured](https://docs.unstructured.io/welcome) Data Ingestion |
| UNSTRUCTURED_API_URL | URL to Unstructured Instance | Get Access to [Unstructured](https://docs.unstructured.io/welcome) Data Ingestion |
| ASSEMBLYAI_API_KEY | Your API Key | Get Access to [AssemblyAI](https://assemblyai.com) Data Ingestion |
| GITHUB_TOKEN | Your GitHub Token | Get Access to Data Ingestion via GitHub |
| GITLAB_TOKEN | Your GitLab Token | Get Access to Data Ingestion via GitLab |
| FIRECRAWL_API_KEY | Your Firecrawl API Key | Get Access to Data Ingestion via Firecrawl |
| VOYAGE_API_KEY | Your VoyageAI API Key | Get Access to Embedding Models via VoyageAI |
| EMBEDDING_SERVICE_URL | URL to your Embedding Service Instance | Get Access to Embedding Models via [Weaviate Embedding Service](https://weaviate.io/developers/wcs/embeddings) |
| EMBEDDING_SERVICE_KEY | Your Embedding Service Key | Get Access to Embedding Models via [Weaviate Embedding Service](https://weaviate.io/developers/wcs/embeddings) |
| UPSTAGE_API_KEY | Your Upstage API Key | Get Access to [Upstage](https://upstage.ai/) Models |
| UPSTAGE_BASE_URL | URL to Upstage instance | Models |
| DEFAULT_DEPLOYMENT | Local, Weaviate, Custom, Docker | Set the default deployment mode |
| SYSYEM_MESSAGE_PROMPT | Prompt text value | Default value starts with: "You are Verba, a chatbot for..." |
| OLLAMA_MODEL | Your Ollama Model | Set the default Ollama model to use |
| OLLAMA_EMBED_MODEL | Your Ollama Embedding Model | Set the default Ollama embedding model to use |

## Weaviate
Verba provides flexibility in connecting to Weaviate instances based on your needs. You have three options:
1. **Local Deployment**: Use Weaviate Embedded which runs locally on your device (except Windows, choose the Docker/Cloud Deployment)
2. **Docker Deployment**: Choose this option when you're running Verba's Dockerfile.
3. **Cloud Deployment**: Use an existing Weaviate instance hosted on WCD to run Verba
**💻 Weaviate Embedded**
Embedded Weaviate is a deployment model that runs a Weaviate instance from your application code rather than from a stand-alone Weaviate server installation. When you run Verba in `Local Deployment`, it will setup and manage Embedded Weaviate in the background. Please note that Weaviate Embedded is not supported on Windows and is in Experimental Mode which can bring unexpected errors. We recommend using the Docker Deployment or Cloud Deployment instead. You can read more about Weaviate Embedded [here](https://weaviate.io/developers/weaviate/installation/embedded).
**🌩️ Weaviate Cloud Deployment (WCD)**
If you prefer a cloud-based solution, Weaviate Cloud (WCD) offers a scalable, managed environment. Learn how to set up a cloud cluster and get the API keys by following the [Weaviate Cluster Setup Guide](https://weaviate.io/developers/wcs/guides/create-instance).
**🐳 Docker Deployment**
Another local alternative is deploying Weaviate using Docker. For more details, follow the [How to install Verba with Docker](#how-to-install-verba-with-docker) section.

**⚙️ Custom Weaviate Deployment**
If you're hosting Weaviate yourself, you can use the `Custom` deployment option in Verba. This will allow you to specify the URL, PORT, and API key of your Weaviate instance.
## Ollama
Verba supports Ollama models. Download and Install Ollama on your device (https://ollama.com/download). Make sure to install your preferred LLM using `ollama run <model>`.
Tested with `llama3`, `llama3:70b` and `mistral`. The bigger models generally perform better, but need more computational power.
> Make sure Ollama Server runs in the background and that you don't ingest documents with different ollama models since their vector dimension can vary that will lead to errors
You can verify that by running the following command
```
ollama run llama3
```
## Unstructured
Verba supports importing documents through Unstructured IO (e.g plain text, .pdf, .csv, and more). To use them you need the `UNSTRUCTURED_API_KEY` and `UNSTRUCTURED_API_URL` environment variable. You can get it from [Unstructured](https://unstructured.io/)
> UNSTRUCTURED_API_URL is set to `https://api.unstructuredapp.io/general/v0/general` by default
## AssemblyAI
Verba supports importing documents through AssemblyAI (audio files or audio from video files). To use them you need the `ASSEMBLYAI_API_KEY` environment variable. You can get it from [AssemblyAI](https://assemblyai.com)
## OpenAI
Verba supports OpenAI Models such as Ada, GPT3, and GPT4. To use them, you need to specify the `OPENAI_API_KEY` environment variable. You can get it from [OpenAI](https://openai.com/)
You can also add a `OPENAI_BASE_URL` to use proxies such as LiteLLM (https://github.com/BerriAI/litellm)
```
OPENAI_BASE_URL=YOUR-OPENAI_BASE_URL
```
### OpenAI Embeddings
To specify a different endpoint for your embeddings, set the `OPENAI_EMBED_API_KEY` and `OPENAI_EMBED_BASE_URL` environment variables.
If you are using a custom OpenAI Server for embeddings, ensure you set `OPENAI_CUSTOM_EMBED=true`. This will allow Verba to recognize custom embedding model names instead of the default OpenAI embedding model names.
## HuggingFace
If you want to use the HuggingFace Features, make sure to install the correct Verba package. It will install required packages to use the local embedding models.
Please note that on startup, Verba will automatically download and install embedding models when used.
```bash
pip install goldenverba[huggingface]
or
pip install `.[huggingface]`
```
> If you're using Docker, modify the `Dockerfile` accordingly. It's not possible to install a custom Verba installation if you pull the Docker Image from the Docker Hub, as of now, you'd need to install the Docker deployment from the source code and modify the `Dockerfile` beforehand.
## Groq
To use Groq LPUs as generation engine, you need to get an API key from [Groq](https://console.groq.com/keys).
> Although you can provide it in the graphical interface when Verba is up, it is recommended to specify it as `GROQ_API_KEY` environment variable before you launch the application.
> It will allow you to choose the generation model in an up-to-date available models list.
## Novita
To use Novita AI as generation engine, you need to get an API key from [Novita AI](https://novita.ai/settings/key-management?utm_source=github_verba&utm_medium=github_readme&utm_campaign=github_link).
# How to deploy with pip
`Python >=3.10.0`
1. (Very Important) **Initialize a new Python Environment**
```
python3 -m virtualenv venv
source venv/bin/activate
```
2. **Install Verba**
```
pip install goldenverba
```
3. **Launch Verba**
```
verba start
```
> You can specify the --port and --host via flags
4. **Access Verba**
```
Visit localhost:8000
```
5. (Optional)**Create .env file and add environment variables**
# How to build from Source
1. **Clone the Verba repos**
```
git clone https://github.com/weaviate/Verba.git
```
2. **Initialize a new Python Environment**
```
python3 -m virtualenv venv
source venv/bin/activate
```
3. **Install Verba**
```
pip install -e .
```
4. **Launch Verba**
```
verba start
```
> You can specify the --port and --host via flags
5. **Access Verba**
```
Visit localhost:8000
```
6. (Optional) **Create .env file and add environment variables**
# How to install Verba with Docker
Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. To get started with deploying Verba using Docker, follow the steps below. If you need more detailed instructions on Docker usage, check out the [Docker Curriculum](https://docker-curriculum.com/).
You can use `docker pull semitechnologies/verba` to pull the latest Verba Docker Image. Please note, that by pulling directly from Docker Hub you're only able to install the vanilla Verba version that does not include packages e.g `HuggingFace`. If you want to use Docker and `HuggingFace` please follow the steps below.
To build the image yourself, you can clone the Verba repository and run `docker build -t verba .` inside the Verba directory.
0. **Clone the Verba repos**
Ensure you have Git installed on your system. Then, open a terminal or command prompt and run the following command to clone the Verba repository:
```
git clone https://github.com/weaviate/Verba.git
```
1. **Set necessary environment variables**
Make sure to set your required environment variables in the `.env` file. You can read more about how to set them up in the [API Keys Section](#api-keys)
2. **Adjust the docker-compose file**
You can use the `docker-compose.yml` to add required environment variables under the `verba` service and can also adjust the Weaviate Docker settings to enable Authentification or change other settings of your database instance. You can read more about the Weaviate configuration in our [docker-compose documentation](https://weaviate.io/developers/weaviate/installation/docker-compose). You can also uncomment the `ollama` service to use Ollama within the same docker compose.
> Please make sure to only add environment variables that you really need.
2. **Deploy using Docker**
With Docker installed and the Verba repository cloned, navigate to the directory containing the Docker Compose file in your terminal or command prompt. Run the following command to start the Verba application in detached mode, which allows it to run in the background:
```bash
docker compose up -d
```
```bash
docker compose --env-file goldenverba/.env up -d --build
```
This command will download the necessary Docker images, create containers, and start Verba.
Remember, Docker must be installed on your system to use this method. For installation instructions and more details about Docker, visit the official Docker documentation.
4. **Access Verba**
- You can access your local Weaviate instance at `localhost:8080`
- You can access the Verba frontend at `localhost:8000`
If you want your Docker Instance to install a specific version of Verba you can edit the `Dockerfile` and change the installation line.
```
RUN pip install -e '.'
```
## Verba Walkthrough
### Select your Deployment
The first screen you'll see is the deployment screen. Here you can select between `Local`, `Docker`, `Weaviate Cloud`, or `Custom` deployment. The `Local` deployment is using Weaviate Embedded under the hood, which initializes a Weaviate instance behind the scenes. The `Docker` deployment is using a separate Weaviate instance that is running inside the same Docker network. The `Weaviate Cloud` deployment is using a Weaviate instance that is hosted on Weaviate Cloud Services (WCS). The `Custom` deployment allows you to specify your own Weaviate instance URL, PORT, and API key.
You can skip this part by setting the `DEFAULT_DEPLOYMENT` environment variable to `Local`, `Docker`, `Weaviate`, or `Custom`.
### Import Your Data
First thing you need to do is to add your data. You can do this by clicking on `Import Data` and selecting either `Add Files`, `Add Directory`, or `Add URL` tab. Here you can add all your files that you want to ingest.
You can then configure every file individually by selecting the file and clicking on `Overview` or `Configure` tab.

### Query Your Data
With Data imported, you can use the `Chat` page to ask any related questions. You will receive relevant chunks that are semantically relevant to your question and an answer generated by your choosen model. You can configure the RAG pipeline under the `Config` tab.

## Open Source Contribution
Your contributions are always welcome! Feel free to contribute ideas, feedback, or create issues and bug reports if you find any! Before contributing, please read the [Contribution Guide](./CONTRIBUTING.md). Visit our [Weaviate Community Forum](https://forum.weaviate.io/) if you need any help!
### Project Architecture
You can learn more about Verba's architecture and implementation in its [technical documentation](./TECHNICAL.md) and [frontend documentation](./FRONTEND.md). It's recommended to have a look at them before making any contributions.
## Known Issues
- **Weaviate Embeeded** currently not working on Windows yet
- Will be fixed in future versions, until then please use the Docker or WCS Deployment
## FAQ
- **Can I use pre-existing data from my Weaviate instance?**
- No, unfortunatley not. Verba requires the data to be in a specific format to work. And as of now, this is only possible by importing data through the Verba UI.
- **Is Verba Multi-Lingual?**
- This depends on your choosen Embedding and Generation Model whether they support multi-lingual data.
- **Can I use my Ollama Server with the Verba Docker?**
- Yes, you can! Make sure the URL is set to: `OLLAMA_URL=http://host.docker.internal:11434`
- If you're running on Linux, you might need to get the IP Gateway of the Ollama server: `OLLAMA_URL="http://YOUR-IP-OF-OLLAMA:11434"`
- **How to clear Weaviate Embedded Storage?**
- You'll find the stored data here: `~/.local/share/weaviate`
- **How can I specify the port?**
- You can use the port and host flag `verba start --port 9000 --host 0.0.0.0`
- **Can multiple users use Verba at the same time? How about role based access?**
- Verba is designed and optimized for single user usage only. There are no plans on supporting multiple users or role based access in the near future.
- **Does Verba offer a API endpoint to use externally?**
- No, right now Verba does not offer any useful API endpoints to interact with the application. The current FastAPI setup is optimized for the internal communication between the frontend and backend. It is not recommended to use it as a API endpoint. There are plans to add user-friendly
- **How to connect to your custom OpenAI Server?**
- Set your custom OpenAI API Key and URL in the `.env` file, this will allow Verba to start up and retrieve the models from your custom OpenAI Server. `OPENAI_BASE_URL` is set to `https://api.openai.com/v1` by default.
- You can also set a different endpoint for your embeddings by configuring the `OPENAI_EMBED_API_KEY` and `OPENAI_EMBED_BASE_URL` environment variables and setting `OPENAI_CUSTOM_EMBED=true`. For more details, see [OpenAI Embeddings](#openai-embeddings).
- **How to upload custom JSON files to Verba?**
- Right now Verba does not support custom JSON structure. Instead the whole JSON will simply be dumped into the content field of the Verba document. You can read more about the Verba JSON Structure in the Technical Documentation [here](./TECHNICAL.md).
================================================
FILE: TECHNICAL.md
================================================
# Verba - Technical Documentation
This technical documentation is intended for developers who want to understand the inner workings of Verba. Please note that this document might be uncomplete and missing some parts. If you encounter any issues or have questions, please feel free to open an issue.
## FastAPI Server
Verba is served through a FastAPI server. The server is serving the static frontend files through the specified port. If you're modifying the frontend, you will need to rebuild the static files again. The frontend is sending API calls to itself which the FastAPI server handles. The server can handle multiple client connections which are handled by the `ClientManager` class.
### ClientManager
`TODO`
For handling large upload of files, the `BatchManager` class handles batches of data of a single file to merge it into a single file once all batches have been received.
### BatchManager
`TODO`
### Websocket
`TODO`
## Automated Testing
`TODO`
## FAQ
### How to control the position of context sent to the Generator to generate a response?
Every `generator` class has a `prepare_messages` method. This method is used to format the messages that are sent to the LLM. The position of the context in the messages is important because it determines where the context is placed in the conversation.
### How to upload a JSON file to Verba?
## Verba JSON Structure
A Verba Document can be created from a JSON object. The JSON object is converted to a Verba Document object and then uploaded to the vector database. Here's the general structure of a Verba Document (you can also find the implementation in the `Document.py` file):
```python
{
"title": "string", # The title of the document
"content": "string", # The content of the document
"extension": "string", # The extension of the document (Optional)
"fileSize": "number", # The size of the document in bytes (Optional)
"labels": "array", # The labels of the document (can be empty, used for filtering)
"source": "string", # The source of the document (can be an URL, optional)
"meta": "object", # The meta data of the document used internally
"metadata": "string" # Metadata information of the document, will be used in the embedding process
}
```
## Custom JSON Structure
There is currently no support for custom JSON structure. Instead the whole JSON will simply be dumped into the content field of the Verba document.
There are plans to add support for custom JSON structure in the future.
================================================
FILE: docker-compose.yml
================================================
---
services:
verba:
build:
context: ./
dockerfile: Dockerfile
ports:
- 8000:8000
environment:
- WEAVIATE_URL_VERBA=http://weaviate:8080
- OPENAI_API_KEY=$OPENAI_API_KEY
- COHERE_API_KEY=$COHERE_API_KEY
- OLLAMA_URL=http://host.docker.internal:11434
- OLLAMA_MODEL=$OLLAMA_MODEL
- OLLAMA_EMBED_MODEL=$OLLAMA_EMBED_MODEL
- UNSTRUCTURED_API_KEY=$UNSTRUCTURED_API_KEY
- UNSTRUCTURED_API_URL=$UNSTRUCTURED_API_URL
- GITHUB_TOKEN=$GITHUB_TOKEN
volumes:
- ./data:/data/
depends_on:
weaviate:
condition: service_healthy
healthcheck:
test: wget --no-verbose --tries=3 --spider http://localhost:8000 || exit 1
interval: 5s
timeout: 10s
retries: 5
start_period: 10s
networks:
- ollama-docker
weaviate:
command:
- --host
- 0.0.0.0
- --port
- '8080'
- --scheme
- http
image: semitechnologies/weaviate:1.25.10
ports:
- 8080:8080
- 3000:8080
volumes:
- weaviate_data:/var/lib/weaviate
restart: on-failure:0
healthcheck:
test: wget --no-verbose --tries=3 --spider http://localhost:8080/v1/.well-known/ready || exit 1
interval: 5s
timeout: 10s
retries: 5
start_period: 10s
environment:
OPENAI_APIKEY: $OPENAI_API_KEY
COHERE_APIKEY: $COHERE_API_KEY
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
ENABLE_MODULES: 'e'
CLUSTER_HOSTNAME: 'node1'
networks:
- ollama-docker
# Uncomment to use Ollama within the same docker compose
# ollama:
# image: ollama/ollama:latest
# ports:
# - 7869:11434
# volumes:
# - .:/code
# - ./ollama/ollama:/root/.ollama
# container_name: ollama
# pull_policy: always
# tty: true
# restart: always
# environment:
# - OLLAMA_KEEP_ALIVE=24h
# - OLLAMA_HOST=0.0.0.0
# networks:
# - ollama-docker
volumes:
weaviate_data: {}
networks:
ollama-docker:
external: false
...
================================================
FILE: frontend/.eslintrc.json
================================================
{
"extends": "next/core-web-vitals"
}
================================================
FILE: frontend/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
================================================
FILE: frontend/app/api.ts
================================================
import {
ConnectPayload,
HealthPayload,
RAGConfig,
QueryPayload,
Credentials,
DocumentsPreviewPayload,
DocumentPayload,
ChunkScore,
ContentPayload,
ChunksPayload,
RAGConfigResponse,
AllSuggestionsPayload,
MetadataPayload,
DatacountResponse,
SuggestionsPayload,
ChunkPayload,
DocumentFilter,
VectorsPayload,
UserConfigResponse,
ThemeConfigResponse,
Theme,
UserConfig,
LabelsResponse,
Themes,
} from "./types";
const checkUrl = async (url: string): Promise<boolean> => {
try {
const response = await fetch(url);
return response.ok;
} catch (error) {
console.error(`Failed to fetch from ${url}:`, error);
return false;
}
};
export const detectHost = async (): Promise<string> => {
const localUrl = "http://localhost:8000/api/health";
const rootUrl = "/api/health";
const isLocalHealthy = await checkUrl(localUrl);
if (isLocalHealthy) {
return "http://localhost:8000";
}
const isRootHealthy = await checkUrl(rootUrl);
if (isRootHealthy) {
const root = window.location.origin;
return root;
}
throw new Error("Both health checks failed, please check the Verba Server");
};
export const fetchData = async <T>(endpoint: string): Promise<T | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}${endpoint}`, { method: "GET" });
const data = await response.json();
if (!data) {
console.warn(`Could not retrieve data from ${endpoint}`);
}
return data;
} catch (error) {
console.error(`Failed to fetch data from ${endpoint}:`, error);
return null;
}
};
// Endpoint /api/health
export const fetchHealth = (): Promise<HealthPayload | null> =>
fetchData<HealthPayload>("/api/health");
// Endpoint /api/connect
export const connectToVerba = async (
deployment: string,
url: string,
apiKey: string,
port: string
): Promise<ConnectPayload | null> => {
const host = await detectHost();
const response = await fetch(`${host}/api/connect`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
credentials: {
deployment: deployment,
url: url,
key: apiKey,
},
port: port,
}),
});
const data = await response.json();
return data;
};
// Endpoint /api/get_rag_config
export const fetchRAGConfig = async (
credentials: Credentials
): Promise<RAGConfigResponse | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_rag_config`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(credentials),
});
const data: RAGConfigResponse = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/set_rag_config
export const updateRAGConfig = async (
RAG: RAGConfig | null,
credentials: Credentials
): Promise<boolean> => {
if (!RAG) {
return false;
}
try {
const host = await detectHost();
const response = await fetch(`${host}/api/set_rag_config`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ rag_config: RAG, credentials: credentials }),
});
return response.status === 200;
} catch (error) {
console.error("Error setting config:", error);
return false;
}
};
// Endpoint /api/get_user_config
export const fetchUserConfig = async (
credentials: Credentials
): Promise<UserConfigResponse | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_user_config`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(credentials),
});
const data: UserConfigResponse = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/set_user_config
export const updateUserConfig = async (
user_config: UserConfig,
credentials: Credentials
): Promise<boolean> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/set_user_config`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
user_config: user_config,
credentials: credentials,
}),
});
return response.status === 200;
} catch (error) {
console.error("Error setting config:", error);
return false;
}
};
// Endpoint /api/get_theme_config
export const fetchThemeConfig = async (
credentials: Credentials
): Promise<ThemeConfigResponse | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_theme_config`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(credentials),
});
const data: ThemeConfigResponse = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/set_theme_config
export const updateThemeConfig = async (
themes: Themes,
theme: Theme,
credentials: Credentials
): Promise<boolean> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/set_theme_config`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
themes: themes,
theme: theme,
credentials: credentials,
}),
});
return response.status === 200;
} catch (error) {
console.error("Error setting config:", error);
return false;
}
};
// Endpoint /api/query
export const sendUserQuery = async (
query: string,
RAG: RAGConfig | null,
labels: string[],
documentFilter: DocumentFilter[],
credentials: Credentials
): Promise<QueryPayload | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/query`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: query,
RAG: RAG,
labels: labels,
documentFilter: documentFilter,
credentials: credentials,
}),
});
const data: QueryPayload = await response.json();
return data;
} catch (error) {
console.error("Error sending query", error);
return null;
}
};
// Endpoint /api/get_document
export const fetchSelectedDocument = async (
uuid: string | null,
credentials: Credentials
): Promise<DocumentPayload | null> => {
if (!uuid) {
return null;
}
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_document`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uuid: uuid,
credentials: credentials,
}),
});
const data: DocumentPayload = await response.json();
return data;
} catch (error) {
console.error("Error retrieving selected document", error);
return null;
}
};
// Endpoint /api/get_datacount
export const fetchDatacount = async (
embedding_model: string,
documentFilter: DocumentFilter[],
credentials: Credentials
): Promise<DatacountResponse | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_datacount`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
embedding_model: embedding_model,
documentFilter: documentFilter,
credentials: credentials,
}),
});
const data: DatacountResponse = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/get_labels
export const fetchLabels = async (
credentials: Credentials
): Promise<LabelsResponse | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_labels`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(credentials),
});
const data: LabelsResponse = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/get_content
export const fetchContent = async (
uuid: string | null,
page: number,
chunkScores: ChunkScore[],
credentials: Credentials
): Promise<ContentPayload | null> => {
if (!uuid) {
return null;
}
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_content`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uuid: uuid,
page: page,
chunkScores: chunkScores,
credentials: credentials,
}),
});
const data: ContentPayload = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/get_vectors
export const fetch_vectors = async (
uuid: string | null,
showAll: boolean,
credentials: Credentials
): Promise<VectorsPayload | null> => {
if (!uuid) {
return null;
}
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_vectors`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uuid: uuid,
showAll: showAll,
credentials: credentials,
}),
});
const data: VectorsPayload | null = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/get_chunks
export const fetch_chunks = async (
uuid: string | null,
page: number,
pageSize: number,
credentials: Credentials
): Promise<ChunksPayload | null> => {
if (!uuid) {
return null;
}
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_chunks`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uuid: uuid,
page: page,
pageSize: pageSize,
credentials: credentials,
}),
});
const data: ChunksPayload | null = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/get_chunk
export const fetch_chunk = async (
uuid: string | null,
embedder: string,
credentials: Credentials
): Promise<ChunkPayload | null> => {
if (!uuid) {
return null;
}
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_chunk`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uuid: uuid,
embedder: embedder,
credentials: credentials,
}),
});
const data: ChunkPayload = await response.json();
return data;
} catch (error) {
console.error("Error retrieving content", error);
return null;
}
};
// Endpoint /api/get_all_documents
export const retrieveAllDocuments = async (
query: string,
labels: string[],
page: number,
pageSize: number,
credentials: Credentials
): Promise<DocumentsPreviewPayload | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_all_documents`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: query,
labels: labels,
page: page,
pageSize: pageSize,
credentials: credentials,
}),
});
const data: DocumentsPreviewPayload = await response.json();
return data;
} catch (error) {
console.error("Error retrieving all documents", error);
return null;
}
};
// Endpoint /api/delete_document
export const deleteDocument = async (
uuid: string,
credentials: Credentials
): Promise<boolean> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/delete_document`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uuid: uuid,
credentials: credentials,
}),
});
return response.status === 200;
} catch (error) {
console.error("Error deleting document", error);
return false;
}
};
// Endpoint /api/reset
export const deleteAllDocuments = async (
resetMode: string,
credentials: Credentials
): Promise<boolean> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/reset`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
resetMode: resetMode,
credentials: credentials,
}),
});
return response.status === 200;
} catch (error) {
console.error("Error deleting all documents", error);
return false;
}
};
// Endpoint /api/get_meta
export const fetchMeta = async (
credentials: Credentials
): Promise<MetadataPayload | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_meta`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(credentials),
});
const data: MetadataPayload = await response.json();
return data;
} catch (error) {
console.error("Error retrieving selected document", error);
return null;
}
};
// Endpoint /api/get_suggestions
export const fetchSuggestions = async (
query: string,
limit: number,
credentials: Credentials
): Promise<SuggestionsPayload | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_suggestions`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: query,
limit: limit,
credentials: credentials,
}),
});
const data: SuggestionsPayload = await response.json();
return data;
} catch (error) {
console.error("Error retrieving suggestions", error);
return null;
}
};
// Endpoint /api/delete_suggestion
export const deleteSuggestion = async (
uuid: string,
credentials: Credentials
): Promise<boolean> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/delete_suggestion`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uuid: uuid,
credentials: credentials,
}),
});
return response.status === 200;
} catch (error) {
console.error("Error deleting suggestion", error);
return false;
}
};
// Endpoint /api/get_all_suggestions
export const fetchAllSuggestions = async (
page: number,
pageSize: number,
credentials: Credentials
): Promise<AllSuggestionsPayload | null> => {
try {
const host = await detectHost();
const response = await fetch(`${host}/api/get_all_suggestions`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
page: page,
pageSize: pageSize,
credentials: credentials,
}),
});
const data: AllSuggestionsPayload = await response.json();
return data;
} catch (error) {
console.error("Error retrieving all suggestions", error);
return null;
}
};
================================================
FILE: frontend/app/components/Chat/ChatConfig.tsx
================================================
"use client";
import React, { useCallback } from "react";
import { MdCancel } from "react-icons/md";
import { IoSettingsSharp } from "react-icons/io5";
import { RAGConfig, RAGComponentConfig, Credentials } from "@/app/types";
import { updateRAGConfig } from "@/app/api";
import ComponentView from "../Ingestion/ComponentView";
import VerbaButton from "../Navigation/VerbaButton";
interface ChatConfigProps {
RAGConfig: RAGConfig | null;
setRAGConfig: React.Dispatch<React.SetStateAction<RAGConfig | null>>;
onSave: () => void; // New parameter for handling save
onReset: () => void; // New parameter for handling reset
addStatusMessage: (
message: string,
type: "INFO" | "WARNING" | "SUCCESS" | "ERROR"
) => void;
credentials: Credentials;
production: "Local" | "Demo" | "Production";
}
const ChatConfig: React.FC<ChatConfigProps> = ({
RAGConfig,
setRAGConfig,
addStatusMessage,
onSave,
credentials,
onReset,
production,
}) => {
const updateConfig = (
component_n: string,
configTitle: string,
value: string | boolean | string[]
) => {
setRAGConfig((prevRAGConfig) => {
if (prevRAGConfig) {
const newRAGConfig = { ...prevRAGConfig };
if (typeof value === "string" || typeof value === "boolean") {
newRAGConfig[component_n].components[
newRAGConfig[component_n].selected
].config[configTitle].value = value;
} else {
newRAGConfig[component_n].components[
newRAGConfig[component_n].selected
].config[configTitle].values = value;
}
return newRAGConfig;
}
return prevRAGConfig;
});
};
const selectComponent = (component_n: string, selected_component: string) => {
setRAGConfig((prevRAGConfig) => {
if (prevRAGConfig) {
const newRAGConfig = { ...prevRAGConfig };
newRAGConfig[component_n].selected = selected_component;
return newRAGConfig;
}
return prevRAGConfig;
});
};
const saveComponentConfig = useCallback(
async (
component_n: string,
selected_component: string,
component_config: RAGComponentConfig
) => {
if (!RAGConfig) return;
addStatusMessage("Saving " + selected_component + " Config", "SUCCESS");
const newRAGConfig = JSON.parse(JSON.stringify(RAGConfig));
newRAGConfig[component_n].selected = selected_component;
newRAGConfig[component_n].components[selected_component] =
component_config;
const response = await updateRAGConfig(newRAGConfig, credentials);
if (response) {
setRAGConfig(newRAGConfig);
}
},
[RAGConfig, credentials]
);
if (RAGConfig) {
return (
<div className="flex flex-col justify-start rounded-2xl w-full p-4 ">
<div className="sticky flex flex-col gap-2 w-full top-0 z-20 justify-end">
{/* Add Save and Reset buttons */}
<div className="flex justify-end w-full gap-2 p-4 bg-bg-alt-verba rounded-lg">
<VerbaButton
Icon={IoSettingsSharp}
title="Save Config"
onClick={onSave}
disabled={production == "Demo"}
/>
<VerbaButton
Icon={MdCancel}
title="Reset"
onClick={onReset}
disabled={production == "Demo"}
/>
</div>
</div>
<div className="flex flex-col justify-start gap-3 rounded-2xl w-full p-6 ">
<ComponentView
RAGConfig={RAGConfig}
component_name="Embedder"
selectComponent={selectComponent}
updateConfig={updateConfig}
saveComponentConfig={saveComponentConfig}
blocked={production == "Demo"}
/>
<ComponentView
RAGConfig={RAGConfig}
component_name="Generator"
selectComponent={selectComponent}
updateConfig={updateConfig}
saveComponentConfig={saveComponentConfig}
blocked={production == "Demo"}
/>
<ComponentView
RAGConfig={RAGConfig}
component_name="Retriever"
selectComponent={selectComponent}
updateConfig={updateConfig}
saveComponentConfig={saveComponentConfig}
blocked={production == "Demo"}
/>
</div>
</div>
);
} else {
return <div></div>;
}
};
export default ChatConfig;
================================================
FILE: frontend/app/components/Chat/ChatInterface.tsx
================================================
"use client";
import React, { useState, useEffect, useRef } from "react";
import { MdCancel, MdOutlineRefresh } from "react-icons/md";
import { TbPlugConnected } from "react-icons/tb";
import { IoChatbubbleSharp } from "react-icons/io5";
import { FaHammer } from "react-icons/fa";
import { IoIosSend } from "react-icons/io";
import { BiError } from "react-icons/bi";
import { IoMdAddCircle } from "react-icons/io";
import VerbaButton from "../Navigation/VerbaButton";
import {
updateRAGConfig,
sendUserQuery,
fetchDatacount,
fetchRAGConfig,
fetchSuggestions,
fetchLabels,
} from "@/app/api";
import { getWebSocketApiHost } from "@/app/util";
import {
Credentials,
QueryPayload,
Suggestion,
DataCountPayload,
ChunkScore,
Message,
LabelsResponse,
RAGConfig,
Theme,
DocumentFilter,
} from "@/app/types";
import InfoComponent from "../Navigation/InfoComponent";
import ChatConfig from "./ChatConfig";
import ChatMessage from "./ChatMessage";
interface ChatInterfaceProps {
credentials: Credentials;
setSelectedDocument: (s: string | null) => void;
setSelectedChunkScore: (c: ChunkScore[]) => void;
currentPage: string;
RAGConfig: RAGConfig | null;
setRAGConfig: React.Dispatch<React.SetStateAction<RAGConfig | null>>;
selectedTheme: Theme;
production: "Local" | "Demo" | "Production";
addStatusMessage: (
message: string,
type: "INFO" | "WARNING" | "SUCCESS" | "ERROR"
) => void;
documentFilter: DocumentFilter[];
setDocumentFilter: React.Dispatch<React.SetStateAction<DocumentFilter[]>>;
}
const ChatInterface: React.FC<ChatInterfaceProps> = ({
production,
credentials,
setSelectedDocument,
setSelectedChunkScore,
currentPage,
RAGConfig,
selectedTheme,
setRAGConfig,
addStatusMessage,
documentFilter,
setDocumentFilter,
}) => {
const [selectedSetting, setSelectedSetting] = useState("Chat");
const isFetching = useRef<boolean>(false);
const [fetchingStatus, setFetchingStatus] = useState<
"DONE" | "CHUNKS" | "RESPONSE"
>("DONE");
const [previewText, setPreviewText] = useState("");
const [socket, setSocket] = useState<WebSocket | null>(null);
const [socketOnline, setSocketOnline] = useState(false);
const [reconnect, setReconnect] = useState(false);
const [currentSuggestions, setCurrentSuggestions] = useState<Suggestion[]>(
[]
);
const [labels, setLabels] = useState<string[]>([]);
const [filterLabels, setFilterLabels] = useState<string[]>([]);
const [selectedDocumentScore, setSelectedDocumentScore] = useState<
string | null
>(null);
const [currentDatacount, setCurrentDatacount] = useState(0);
const [userInput, setUserInput] = useState("");
const [messages, setMessages] = useState<Message[]>([]);
const [isComposing, setIsComposing] = useState(false);
const currentEmbedding = RAGConfig
? (RAGConfig["Embedder"].components[RAGConfig["Embedder"].selected].config[
"Model"
].value as string)
: "No Config found";
useState("No Embedding Model");
useEffect(() => {
setReconnect(true);
}, []);
useEffect(() => {
if (RAGConfig) {
retrieveDatacount();
} else {
setCurrentDatacount(0);
}
}, [currentEmbedding, currentPage, documentFilter]);
useEffect(() => {
setMessages((prev) => {
if (prev.length === 0) {
return [
{
type: "system",
content: selectedTheme.intro_message.text,
},
];
}
return prev;
});
}, [selectedTheme.intro_message.text]);
// Setup WebSocket and messages to /ws/generate_stream
useEffect(() => {
const socketHost = getWebSocketApiHost();
const localSocket = new WebSocket(socketHost);
localSocket.onopen = () => {
console.log("WebSocket connection opened to " + socketHost);
setSocketOnline(true);
};
localSocket.onmessage = (event) => {
let data;
if (!isFetching.current) {
setPreviewText("");
return;
}
try {
data = JSON.parse(event.data);
} catch (e) {
console.error("Received data is not valid JSON:", event.data);
return; // Exit early if data isn't valid JSON
}
const newMessageContent = data.message;
setPreviewText((prev) => prev + newMessageContent);
if (data.finish_reason === "stop") {
isFetching.current = false;
setFetchingStatus("DONE");
addStatusMessage("Finished generation", "SUCCESS");
const full_text = data.full_text;
if (data.cached) {
const distance = data.distance;
setMessages((prev) => [
...prev,
{
type: "system",
content: full_text,
cached: true,
distance: distance,
},
]);
} else {
setMessages((prev) => [
...prev,
{ type: "system", content: full_text },
]);
}
setPreviewText("");
}
};
localSocket.onerror = (error) => {
console.error("WebSocket Error:", error);
setSocketOnline(false);
isFetching.current = false;
setFetchingStatus("DONE");
setReconnect((prev) => !prev);
};
localSocket.onclose = (event) => {
if (event.wasClean) {
console.log(
`WebSocket connection closed cleanly, code=${event.code}, reason=${event.reason}`
);
} else {
console.error("WebSocket connection died");
}
setSocketOnline(false);
isFetching.current = false;
setFetchingStatus("DONE");
setReconnect((prev) => !prev);
};
setSocket(localSocket);
return () => {
if (localSocket.readyState !== WebSocket.CLOSED) {
localSocket.close();
}
};
}, [reconnect]);
useEffect(() => {
if (RAGConfig) {
retrieveDatacount();
} else {
setCurrentDatacount(0);
}
}, [RAGConfig]);
const retrieveRAGConfig = async () => {
const config = await fetchRAGConfig(credentials);
if (config) {
setRAGConfig(config.rag_config);
} else {
addStatusMessage("Failed to fetch RAG Config", "ERROR");
}
};
const sendUserMessage = async () => {
if (isFetching.current || !userInput.trim()) return;
const sendInput = userInput;
setUserInput("");
isFetching.current = true;
setCurrentSuggestions([]);
setFetchingStatus("CHUNKS");
setMessages((prev) => [...prev, { type: "user", content: sendInput }]);
try {
addStatusMessage("Sending query...", "INFO");
const data = await sendUserQuery(
sendInput,
RAGConfig,
filterLabels,
documentFilter,
credentials
);
if (!data || data.error) {
handleErrorResponse(data ? data.error : "No data received");
} else {
handleSuccessResponse(data, sendInput);
}
} catch (error) {
handleErrorResponse("Failed to fetch from API");
console.error("Failed to fetch from API:", error);
}
};
const handleErrorResponse = (errorMessage: string) => {
addStatusMessage("Query failed", "ERROR");
setMessages((prev) => [...prev, { type: "error", content: errorMessage }]);
isFetching.current = false;
setFetchingStatus("DONE");
};
const handleSuccessResponse = (data: QueryPayload, sendInput: string) => {
setMessages((prev) => [
...prev,
{ type: "retrieval", content: data.documents, context: data.context },
]);
addStatusMessage(
"Received " + Object.entries(data.documents).length + " documents",
"SUCCESS"
);
if (data.documents.length > 0) {
const firstDoc = data.documents[0];
setSelectedDocument(firstDoc.uuid);
setSelectedDocumentScore(
`${firstDoc.uuid}${firstDoc.score}${firstDoc.chunks.length}`
);
setSelectedChunkScore(firstDoc.chunks);
if (data.context) {
streamResponses(sendInput, data.context);
setFetchingStatus("RESPONSE");
}
} else {
handleErrorResponse("We couldn't find any chunks to your query");
}
};
const streamResponses = (query?: string, context?: string) => {
if (socket?.readyState === WebSocket.OPEN) {
const filteredMessages = messages
.slice(1) // Skip the first message
.filter((msg) => msg.type === "user" || msg.type === "system")
.map((msg) => ({
type: msg.type,
content: msg.content,
}));
const data = JSON.stringify({
query: query,
context: context,
conversation: filteredMessages,
rag_config: RAGConfig,
});
socket.send(data);
} else {
console.error("WebSocket is not open. ReadyState:", socket?.readyState);
}
};
const handleCompositionStart = () => {
setIsComposing(true);
};
const handleCompositionEnd = () => {
setIsComposing(false);
};
const handleKeyDown = (e: any) => {
if (e.key === "Enter" && !e.shiftKey && !isComposing) {
e.preventDefault(); // Prevent new line
sendUserMessage(); // Submit form
}
};
const retrieveDatacount = async () => {
try {
const data: DataCountPayload | null = await fetchDatacount(
currentEmbedding,
documentFilter,
credentials
);
const labels: LabelsResponse | null = await fetchLabels(credentials);
if (data) {
setCurrentDatacount(data.datacount);
}
if (labels) {
setLabels(labels.labels);
}
} catch (error) {
console.error("Failed to fetch from API:", error);
addStatusMessage("Failed to fetch datacount: " + error, "ERROR");
}
};
const reconnectToVerba = () => {
setReconnect((prevState) => !prevState);
};
const onSaveConfig = async () => {
addStatusMessage("Saved Config", "SUCCESS");
await updateRAGConfig(RAGConfig, credentials);
};
const onResetConfig = async () => {
addStatusMessage("Reset Config", "WARNING");
retrieveRAGConfig();
};
const handleSuggestions = async () => {
if (
RAGConfig &&
RAGConfig["Retriever"].components[RAGConfig["Retriever"].selected].config[
"Suggestion"
].value
) {
const suggestions = await fetchSuggestions(userInput, 3, credentials);
if (suggestions) {
setCurrentSuggestions(suggestions.suggestions);
}
}
};
return (
<div className="flex flex-col gap-2 w-full">
{/* Header */}
<div className="bg-bg-alt-verba rounded-2xl flex gap-2 p-3 items-center justify-between h-min w-full">
<div className="hidden md:flex gap-2 justify-start items-center">
<InfoComponent
tooltip_text="Use the Chat interface to interact with your data and perform Retrieval Augmented Generation (RAG). This interface allows you to ask questions, analyze sources, and generate responses based on your stored documents."
display_text={"Chat"}
/>
</div>
<div className="w-full md:w-fit flex gap-3 justify-end items-center">
<VerbaButton
title="Chat"
Icon={IoChatbubbleSharp}
onClick={() => {
setSelectedSetting("Chat");
}}
selected={selectedSetting === "Chat"}
disabled={false}
selected_color="bg-secondary-verba"
/>
{production != "Demo" && (
<VerbaButton
title="Config"
Icon={FaHammer}
onClick={() => {
setSelectedSetting("Config");
}}
selected={selectedSetting === "Config"}
disabled={false}
selected_color="bg-secondary-verba"
/>
)}
</div>
</div>
<div className="bg-bg-alt-verba rounded-2xl flex flex-col h-[50vh] md:h-full w-full overflow-y-auto overflow-x-hidden relative">
{/* New fixed tab */}
{selectedSetting == "Chat" && (
<div className="sticky flex flex-col gap-2 top-0 z-9 p-4 backdrop-blur-sm bg-opacity-30 bg-bg-alt-verba rounded-lg">
<div className="flex gap-2 justify-start items-center">
<div className="flex gap-2">
<div className="dropdown dropdown-hover">
<label tabIndex={0}>
<VerbaButton
title="Label"
className="btn-sm min-w-min"
icon_size={12}
text_class_name="text-xs"
Icon={IoMdAddCircle}
selected={false}
disabled={false}
/>
</label>
<ul
tabIndex={0}
className="dropdown-content z-[1] menu p-2 shadow bg-base-100 rounded-box w-52"
>
{labels.map((label, index) => (
<li key={"Label" + index}>
<a
onClick={() => {
if (!filterLabels.includes(label)) {
setFilterLabels([...filterLabels, label]);
}
const dropdownElement =
document.activeElement as HTMLElement;
dropdownElement.blur();
const dropdown = dropdownElement.closest(
".dropdown"
) as HTMLElement;
if (dropdown) dropdown.blur();
}}
>
{label}
</a>
</li>
))}
</ul>
</div>
</div>
{(filterLabels.length > 0 || documentFilter.length > 0) && (
<VerbaButton
onClick={() => {
setFilterLabels([]);
setDocumentFilter([]);
}}
title="Clear"
className="btn-sm max-w-min"
icon_size={12}
text_class_name="text-xs"
Icon={MdCancel}
selected={false}
disabled={false}
/>
)}
</div>
<div className="flex flex-wrap gap-2">
{filterLabels.map((label, index) => (
<VerbaButton
title={label}
key={"FilterLabel" + index}
Icon={MdCancel}
className="btn-sm min-w-min max-w-[200px]"
icon_size={12}
selected_color="bg-primary-verba"
selected={true}
text_class_name="truncate max-w-[200px]"
text_size="text-xs"
onClick={() => {
setFilterLabels(filterLabels.filter((l) => l !== label));
}}
/>
))}
{documentFilter.map((filter, index) => (
<VerbaButton
title={filter.title}
key={"DocumentFilter" + index}
Icon={MdCancel}
className="btn-sm min-w-min max-w-[200px]"
icon_size={12}
selected_color="bg-secondary-verba"
selected={true}
text_size="text-xs"
text_class_name="truncate md:max-w-[100px] lg:max-w-[150px]"
onClick={() => {
setDocumentFilter(
documentFilter.filter((f) => f.uuid !== filter.uuid)
);
}}
/>
))}
</div>
</div>
)}
<div
className={`${selectedSetting === "Chat" ? "flex flex-col gap-3 p-4" : "hidden"}`}
>
<div className="flex w-full justify-start items-center text-text-alt-verba gap-2">
{currentDatacount === 0 && <BiError size={15} />}
{currentDatacount === 0 && (
<p className="text-text-alt-verba text-sm items-center flex">{`${currentDatacount} documents embedded by ${currentEmbedding}`}</p>
)}
</div>
{messages.map((message, index) => (
<div
key={"Message_" + index}
className={`${message.type === "user" ? "text-right" : ""}`}
>
<ChatMessage
message={message}
message_index={index}
selectedTheme={selectedTheme}
selectedDocument={selectedDocumentScore}
setSelectedDocumentScore={setSelectedDocumentScore}
setSelectedDocument={setSelectedDocument}
setSelectedChunkScore={setSelectedChunkScore}
/>
</div>
))}
{previewText && (
<ChatMessage
message={{ type: "system", content: previewText, cached: false }}
message_index={-1}
selectedTheme={selectedTheme}
selectedDocument={selectedDocumentScore}
setSelectedDocumentScore={setSelectedDocumentScore}
setSelectedDocument={setSelectedDocument}
setSelectedChunkScore={setSelectedChunkScore}
/>
)}
{isFetching.current && (
<div className="flex flex-col gap-2">
<div className="flex items-center gap-3">
<span className="text-text-alt-verba loading loading-dots loading-md"></span>
<p className="text-text-alt-verba">
{fetchingStatus === "CHUNKS" && "Retrieving..."}
{fetchingStatus === "RESPONSE" && "Generating..."}
</p>
<button
onClick={() => {
setFetchingStatus("DONE");
isFetching.current = false;
}}
className="btn btn-circle btn-sm bg-bg-alt-verba hover:bg-warning-verba hover:text-text-verba text-text-alt-verba shadow-none border-none text-sm"
>
<MdCancel size={15} />
</button>
</div>
</div>
)}
</div>
{selectedSetting === "Config" && (
<ChatConfig
addStatusMessage={addStatusMessage}
production={production}
RAGConfig={RAGConfig}
credentials={credentials}
setRAGConfig={setRAGConfig}
onReset={onResetConfig}
onSave={onSaveConfig}
/>
)}
</div>
<div className="bg-bg-alt-verba rounded-2xl flex gap-2 p-6 items-center justify-end h-min w-full">
{socketOnline ? (
<div className="flex gap-2 items-center justify-end w-full relative">
<div className="relative w-full">
<textarea
className="textarea textarea-bordered w-full bg-bg-verba placeholder-text-alt-verb min-h min-h-[40px] max-h-[150px] overflow-y-auto"
placeholder={
currentDatacount > 0
? currentDatacount >= 100
? `Chatting with more than 100 documents...`
: `Chatting with ${currentDatacount} documents...`
: `No documents detected...`
}
onKeyDown={handleKeyDown}
onCompositionStart={handleCompositionStart}
onCompositionEnd={handleCompositionEnd}
value={userInput}
onChange={(e) => {
const newValue = e.target.value;
setUserInput(newValue);
if ((newValue.length - 1) % 3 === 0) {
handleSuggestions();
}
}}
/>
{currentSuggestions.length > 0 && (
<ul className="absolute flex gap-2 justify-between top-full left-0 w-full mt-2 z-10 max-h-40 overflow-y-auto">
{currentSuggestions.map((suggestion, index) => (
<li
key={index}
className="p-3 bg-button-verba hover:bg-secondary-verba text-text-alt-verba rounded-xl w-full hover:text-text-verba cursor-pointer"
onClick={() => {
setUserInput(suggestion.query);
setCurrentSuggestions([]);
}}
>
<p className="text-xs lg:text-sm">
{suggestion.query.length > 50
? suggestion.query.substring(0, 50) + "..."
: suggestion.query
.split(new RegExp(`(${userInput})`, "gi"))
.map((part, i) =>
part.toLowerCase() ===
userInput.toLowerCase() ? (
<strong key={i}>{part}</strong>
) : (
part
)
)}
</p>
</li>
))}
</ul>
)}
</div>
<div className="flex flex-col gap-1 items-center justify-center">
<VerbaButton
type="button"
Icon={IoIosSend}
onClick={() => {
sendUserMessage();
}}
disabled={false}
selected_color="bg-primary-verba"
/>
<VerbaButton
type="button"
Icon={MdOutlineRefresh}
onClick={() => {
setSelectedDocument(null);
setSelectedChunkScore([]);
setUserInput("");
setSelectedDocumentScore(null);
setCurrentSuggestions([]);
setMessages([
{
type: "system",
content: selectedTheme.intro_message.text,
},
]);
}}
disabled={false}
selected_color="bg-primary-verba"
/>
</div>
</div>
) : (
<div className="flex gap-2 items-center justify-end w-full">
<button
onClick={reconnectToVerba}
className="flex btn border-none text-text-verba bg-button-verba hover:bg-button-hover-verba gap-2 items-center"
>
<TbPlugConnected size={15} />
<p>Reconnecting...</p>
<span className="loading loading-spinner loading-xs"></span>
</button>
</div>
)}
</div>
</div>
);
};
export default ChatInterface;
================================================
FILE: frontend/app/components/Chat/ChatMessage.tsx
================================================
"use client";
import React from "react";
import { ChunkScore, Message } from "@/app/types";
import ReactMarkdown from "react-markdown";
import { FaDatabase } from "react-icons/fa";
import { BiError } from "react-icons/bi";
import { IoNewspaper } from "react-icons/io5";
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import { IoDocumentAttach } from "react-icons/io5";
import {
oneDark,
oneLight,
} from "react-syntax-highlighter/dist/cjs/styles/prism";
import VerbaButton from "../Navigation/VerbaButton";
import { Theme } from "@/app/types";
interface ChatMessageProps {
message: Message;
message_index: number;
selectedTheme: Theme;
selectedDocument: string | null;
setSelectedDocument: (s: string | null) => void;
setSelectedDocumentScore: (s: string | null) => void;
setSelectedChunkScore: (s: ChunkScore[]) => void;
}
const ChatMessage: React.FC<ChatMessageProps> = ({
message,
selectedTheme,
selectedDocument,
setSelectedDocument,
message_index,
setSelectedDocumentScore,
setSelectedChunkScore,
}) => {
const colorTable = {
user: "bg-bg-verba",
system: "bg-bg-alt-verba",
error: "bg-warning-verba",
retrieval: "bg-bg-verba",
};
if (typeof message.content === "string") {
return (
<div
className={`flex items-end gap-2 ${message.type === "user" ? "justify-end" : "justify-start"}`}
>
<div
className={`flex flex-col items-start p-5 rounded-3xl animate-press-in text-sm lg:text-base ${colorTable[message.type]}`}
>
{message.cached && (
<FaDatabase size={12} className="text-text-verba" />
)}
{message.type === "system" && (
<ReactMarkdown
className="prose md:prose-sm lg:prose-base p-3 prose-pre:bg-bg-alt-verba"
components={{
code({ node, inline, className, children, ...props }) {
const match = /language-(\w+)/.exec(className || "");
return !inline && match ? (
<SyntaxHighlighter
style={
selectedTheme.theme === "dark"
? (oneDark as any)
: (oneLight as any)
}
language={match[1]}
PreTag="div"
{...props}
>
{String(children).replace(/\n$/, "")}
</SyntaxHighlighter>
) : (
<code className={className} {...props}>
{children}
</code>
);
},
}}
>
{message.content}
</ReactMarkdown>
)}
{message.type === "user" && (
<div className="whitespace-pre-wrap">{message.content}</div>
)}
{message.type === "error" && (
<div className="whitespace-pre-wrap flex items-center gap-2 text-sm text-text-verba">
<BiError size={15} />
<p>{message.content}</p>
</div>
)}
</div>
</div>
);
} else {
return (
<div className="grid grid-cols-2 lg:grid-cols-3 gap-3 w-full items-center">
{message.content.map((document, index) => (
<button
onClick={() => {
setSelectedDocument(document.uuid);
setSelectedDocumentScore(
document.uuid + document.score + document.chunks.length
);
setSelectedChunkScore(document.chunks);
}}
key={"Retrieval" + document.title + index}
className={`flex ${selectedDocument && selectedDocument === document.uuid + document.score + document.chunks.length ? "bg-secondary-verba hover:bg-button-hover-verba" : "bg-button-verba hover:bg-secondary-verba"} rounded-3xl p-3 items-center justify-between transition-colors duration-300 ease-in-out border-none`}
>
<div className="flex items-center justify-between w-full">
<p
className="text-xs flex-grow truncate mr-2"
title={document.title}
>
{document.title}
</p>
<div className="flex gap-1 items-center text-text-verba flex-shrink-0">
<IoNewspaper size={12} />
<p className="text-sm">{document.chunks.length}</p>
</div>
</div>
</button>
))}
<VerbaButton
Icon={IoDocumentAttach}
className="btn-sm btn-square"
onClick={() =>
(
document.getElementById(
"context-modal-" + message_index
) as HTMLDialogElement
).showModal()
}
/>
<dialog id={"context-modal-" + message_index} className="modal">
<div className="modal-box">
<h3 className="font-bold text-lg">Context</h3>
<p className="py-4">{message.context}</p>
<div className="modal-action">
<form method="dialog">
<button className="btn focus:outline-none text-text-alt-verba bg-button-verba hover:bg-button-hover-verba hover:text-text-verba border-none shadow-none">
<p>Close</p>
</button>
</form>
</div>
</div>
</dialog>
</div>
);
}
};
export default ChatMessage;
================================================
FILE: frontend/app/components/Chat/ChatView.tsx
================================================
"use client";
import React, { useState } from "react";
import ChatInterface from "./ChatInterface";
import DocumentExplorer from "../Document/DocumentExplorer";
import {
Credentials,
RAGConfig,
ChunkScore,
Theme,
DocumentFilter,
} from "@/app/types";
interface ChatViewProps {
selectedTheme: Theme;
credentials: Credentials;
addStatusMessage: (
message: string,
type: "INFO" | "WARNING" | "SUCCESS" | "ERROR"
) => void;
production: "Local" | "Demo" | "Production";
currentPage: string;
RAGConfig: RAGConfig | null;
setRAGConfig: React.Dispatch<React.SetStateAction<RAGConfig | null>>;
documentFilter: DocumentFilter[];
setDocumentFilter: React.Dispatch<React.SetStateAction<DocumentFilter[]>>;
}
const ChatView: React.FC<ChatViewProps> = ({
credentials,
selectedTheme,
addStatusMessage,
production,
currentPage,
RAGConfig,
setRAGConfig,
documentFilter,
setDocumentFilter,
}) => {
const [selectedDocument, setSelectedDocument] = useState<string | null>(null);
const [selectedChunkScore, setSelectedChunkScore] = useState<ChunkScore[]>(
[]
);
return (
<div className="flex md:flex-row flex-col justify-center gap-3 h-[50vh] md:h-[80vh] ">
<div
className={`${selectedDocument ? "hidden md:flex md:w-[45vw]" : "w-full md:w-[45vw] md:flex"}`}
>
<ChatInterface
addStatusMessage={addStatusMessage}
production={production}
credentials={credentials}
selectedTheme={selectedTheme}
setSelectedDocument={setSelectedDocument}
setSelectedChunkScore={setSelectedChunkScore}
currentPage={currentPage}
RAGConfig={RAGConfig}
setRAGConfig={setRAGConfig}
documentFilter={documentFilter}
setDocumentFilter={setDocumentFilter}
/>
</div>
<div
className={`${selectedDocument ? "md:w-[55vw] w-full flex" : "hidden md:flex md:w-[55vw]"}`}
>
<DocumentExplorer
addStatusMessage={addStatusMessage}
credentials={credentials}
production={production}
documentFilter={documentFilter}
setDocumentFilter={setDocumentFilter}
setSelectedDocument={setSelectedDocument}
selectedTheme={selectedTheme}
selectedDocument={selectedDocument}
chunkScores={selectedChunkScore}
/>
</div>
</div>
);
};
export default ChatView;
================================================
FILE: frontend/app/components/Chat/StatusLabel.tsx
================================================
"use client";
import React from "react";
interface StatusLabelProps {
status: boolean;
true_text: string;
false_text: string;
}
const StatusLabel: React.FC<StatusLabelProps> = ({
status,
true_text,
false_text,
}) => {
return (
<div
className={`p-2 rounded-lg text-text-verba text-sm ${status ? "bg-secondary-verba" : "bg-bg-alt-verba text-text-alt-verba"}`}
>
<p
className={`text-xs ${status ? "text-text-verba" : "text-text-alt-verba"}`}
>
{status ? true_text : false_text}
</p>
</div>
);
};
export default StatusLabel;
================================================
FILE: frontend/app/components/Document/ChunkView.tsx
================================================
"use client";
import React, { useState, useEffect } from "react";
import { VerbaChunk, ChunksPayload, Theme } from "@/app/types";
import ReactMarkdown from "react-markdown";
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import {
oneDark,
oneLight,
} from "react-syntax-highlighter/dist/cjs/styles/prism";
import { IoNewspaper } from "react-icons/io5";
import { FaArrowAltCircleRight, FaArrowAltCircleLeft } from "react-icons/fa";
import { fetch_chunks } from "@/app/api";
import { Credentials } from "@/app/types";
import VerbaButton from "../Navigation/VerbaButton";
interface ChunkViewProps {
selectedDocument: string | null;
selectedTheme: Theme;
credentials: Credentials;
}
const ChunkView: React.FC<ChunkViewProps> = ({
selectedDocument,
credentials,
selectedTheme,
}) => {
const [isFetching, setIsFetching] = useState(false);
const [chunks, setChunks] = useState<VerbaChunk[]>([]);
const [page, setPage] = useState(1);
const [currentChunkIndex, setCurrentChunkIndex] = useState(0);
const [isPreviousDisabled, setIsPreviousDisabled] = useState(true);
useEffect(() => {
fetchChunks(page);
setIsPreviousDisabled(page === 1 && currentChunkIndex === 0);
}, [page, currentChunkIndex]);
useEffect(() => {
fetchChunks(1);
setCurrentChunkIndex(0);
setIsPreviousDisabled(page === 1 && currentChunkIndex === 0);
}, [selectedDocument]);
const pageSize = 10;
const nextChunk = async () => {
if (currentChunkIndex === chunks.length - 1) {
const hasMoreChunks = await fetchChunks(page + 1);
if (hasMoreChunks) {
setPage((prev) => prev + 1);
setCurrentChunkIndex(0);
} else {
await fetchChunks(1);
setPage(1);
setCurrentChunkIndex(0);
}
} else {
setCurrentChunkIndex((prev) => prev + 1);
}
};
const previousChunk = async () => {
if (currentChunkIndex === 0) {
if (page > 1) {
const prevPage = page - 1;
const hasChunks = await fetchChunks(prevPage);
if (hasChunks) {
setPage(prevPage);
setCurrentChunkIndex(pageSize - 1);
}
} else {
let lastPage = page;
let hasMoreChunks = true;
while (hasMoreChunks) {
hasMoreChunks = await fetchChunks(lastPage + 1);
if (hasMoreChunks) lastPage++;
}
await fetchChunks(lastPage);
setPage(lastPage);
setCurrentChunkIndex(chunks.length - 1);
}
} else {
setCurrentChunkIndex((prev) => prev - 1);
}
};
const fetchChunks = async (pageNumber: number) => {
try {
setIsFetching(true);
const data: ChunksPayload | null = await fetch_chunks(
selectedDocument,
pageNumber,
pageSize,
credentials
);
if (data) {
if (data.error !== "") {
console.error(data.error);
setIsFetching(false);
setChunks([]);
return false; // No more chunks available
} else {
setChunks(data.chunks);
setIsFetching(false);
return data.chunks.length > 0; // Return true if chunks were fetched
}
}
return false; // No more chunks available
} catch (error) {
console.error("Failed to fetch document:", error);
setIsFetching(false);
return false; // No more chunks available
}
};
if (chunks.length == 0) {
return (
<div>
{isFetching && (
<div className="flex items-center justify-center text-text-verba gap-2 h-full">
<span className="loading loading-spinner loading-sm"></span>
</div>
)}
</div>
);
}
return (
<div className="flex flex-col h-full">
{chunks.length > 0 && (
<div className="bg-bg-alt-verba flex flex-col rounded-lg overflow-hidden h-full">
{/* Content div */}
<div className="flex-grow overflow-hidden p-3">
<div className="flex justify-between mb-2">
<div className="flex gap-2">
<div className="flex gap-2 items-center p-3 bg-secondary-verba rounded-full w-fit">
<IoNewspaper size={12} />
<p className="text-xs flex text-text-verba">
Chunk {chunks[currentChunkIndex].chunk_id}
</p>
</div>
</div>
</div>
<div className="overflow-y-auto h-[calc(100%-3rem)]">
<ReactMarkdown
className="max-w-[50vw] items-center justify-center flex-wrap md:prose-base sm:prose-sm p-3 prose-pre:bg-bg-alt-verba"
components={{
code({ node, inline, className, children, ...props }) {
const match = /language-(\w+)/.exec(className || "");
return !inline && match ? (
<SyntaxHighlighter
style={
selectedTheme.theme === "dark"
? (oneDark as any)
: (oneLight as any)
}
language={match[1]}
PreTag="div"
{...props}
>
{String(children).replace(/\n$/, "")}
</SyntaxHighlighter>
) : (
<code className={className} {...props}>
{children}
</code>
);
},
}}
>
{chunks[currentChunkIndex].content}
</ReactMarkdown>
</div>
</div>
{/* Navigation div */}
{chunks.length > 1 && (
<div className="flex justify-center items-center gap-2 p-3 bg-bg-alt-verba">
<VerbaButton
title={"Previous Chunk"}
onClick={previousChunk}
className="btn-sm min-w-min max-w-[200px]"
text_class_name="text-xs"
disabled={isPreviousDisabled}
Icon={FaArrowAltCircleLeft}
/>
<VerbaButton
title={"Next Chunk"}
onClick={nextChunk}
className="btn-sm min-w-min max-w-[200px]"
text_class_name="text-xs"
Icon={FaArrowAltCircleRight}
/>
</div>
)}
</div>
)}
</div>
);
};
export default ChunkView;
================================================
FILE: frontend/app/components/Document/ContentView.tsx
================================================
"use client";
import React, { useState, useEffect, useRef } from "react";
import ReactMarkdown from "react-markdown";
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import {
oneDark,
oneLight,
} from "react-syntax-highlighter/dist/cjs/styles/prism";
import { FaArrowAltCircleLeft, FaArrowAltCircleRight } from "react-icons/fa";
import { HiSparkles } from "react-icons/hi2";
import { IoNewspaper } from "react-icons/io5";
import {
VerbaDocument,
ContentPayload,
Credentials,
ContentSnippet,
Theme,
ChunkScore,
} from "@/app/types";
import { fetchContent } from "@/app/api";
import VerbaButton from "../Navigation/VerbaButton";
interface ContentViewProps {
document: VerbaDocument | null;
selectedTheme: Theme;
selectedDocument: string;
credentials: Credentials;
chunkScores?: ChunkScore[];
}
const ContentView: React.FC<ContentViewProps> = ({
document,
selectedDocument,
selectedTheme,
credentials,
chunkScores,
}) => {
const [isFetching, setIsFetching] = useState(true);
const [page, setPage] = useState(1);
const [maxPage, setMaxPage] = useState(1);
const [content, setContent] = useState<ContentSnippet[]>([]);
const contentRef = useRef<HTMLDivElement>(null);
const nextPage = () => {
if (page == maxPage) {
setPage(1);
} else {
setPage((prev) => prev + 1);
}
};
const previousPage = () => {
if (page == 1) {
setPage(maxPage);
} else {
setPage((prev) => prev - 1);
}
};
useEffect(() => {
if (document) {
handleFetchContent();
setPage(1);
} else {
setContent([]);
setPage(1);
setMaxPage(1);
}
}, [document, chunkScores]);
useEffect(() => {
if (document) {
handleFetchContent();
} else {
setContent([]);
setPage(1);
setMaxPage(1);
}
}, [page]);
useEffect(() => {
if (chunkScores && chunkScores.length > 0) {
contentRef.current?.scrollIntoView({ behavior: "smooth" });
}
}, [content, chunkScores]);
const handleFetchContent = async () => {
try {
setIsFetching(true);
const data: ContentPayload | null = await fetchContent(
selectedDocument,
page,
chunkScores ? chunkScores : [],
credentials
);
if (data) {
if (data.error !== "") {
setContent([
{ content: data.error, chunk_id: 0, score: 0, type: "text" },
]);
setPage(1);
setMaxPage(1);
setIsFetching(false);
} else {
setContent(data.content);
setMaxPage(data.maxPage);
setIsFetching(false);
}
}
} catch (error) {
console.error("Failed to fetch content from document:", error);
setIsFetching(false);
}
};
const renderText = (contentSnippet: ContentSnippet, index: number) => {
if (contentSnippet.type === "text") {
return (
<div
key={"CONTENT_SNIPPET" + index}
className="flex p-2"
ref={!chunkScores ? contentRef : null}
>
<ReactMarkdown
className="max-w-[50vw] items-center justify-center flex-wrap prose-sm p-3 prose-pre:bg-bg-alt-verba"
components={{
code({ node, inline, className, children, ...props }) {
const match = /language-(\w+)/.exec(className || "");
return !inline && match ? (
<SyntaxHighlighter
style={
selectedTheme.theme === "dark"
? (oneDark as any)
: (oneLight as any)
}
language={match[1]}
PreTag="div"
{...props}
>
{String(children).replace(/\n$/, "")}
</SyntaxHighlighter>
) : (
<code className={className} {...props}>
{children}
</code>
);
},
}}
>
{contentSnippet.content}
</ReactMarkdown>
</div>
);
} else {
return (
<div
className="flex p-2 border-2 flex-col gap-2 border-secondary-verba shadow-lg rounded-3xl"
ref={contentRef}
>
<div className="flex justify-between">
<div className="flex gap-2">
<div className="flex gap-2 items-center p-3 bg-secondary-verba rounded-full w-fit">
<HiSparkles size={12} />
<p className="text-xs flex text-text-verba">Context Used</p>
</div>
<div className="flex gap-2 items-center p-3 bg-secondary-verba rounded-full w-fit">
<IoNewspaper size={12} />
<p className="text-xs flex text-text-verba">
Chunk {contentSnippet.chunk_id + 1}
</p>
</div>
{contentSnippet.score > 0 && (
<div className="flex gap-2 items-center p-3 bg-primary-verba rounded-full w-fit">
<HiSparkles size={12} />
<p className="text-xs flex text-text-verba">High Relevancy</p>
</div>
)}
</div>
</div>
<ReactMarkdown
className="w-full items-center justify-center flex-wrap md:prose-base sm:prose-sm p-3 prose-pre:bg-bg-alt-verba"
components={{
code({ node, inline, className, children, ...props }) {
const match = /language-(\w+)/.exec(className || "");
return !inline && match ? (
<SyntaxHighlighter
style={
selectedTheme.theme === "dark"
? (oneDark as any)
: (oneLight as any)
}
language={match[1]}
PreTag="div"
{...props}
>
{String(children).replace(/\n$/, "")}
</SyntaxHighlighter>
) : (
<code className={className} {...props}>
{children}
</code>
);
},
}}
>
{contentSnippet.content}
</ReactMarkdown>
</div>
);
}
};
if (!document) {
return <div></div>;
}
return (
<div className="flex flex-col h-full">
{document && (
<div className="bg-bg-alt-verba flex flex-col rounded-lg overflow-hidden h-full">
{/* Header */}
<div className="p-3 bg-bg-alt-verba">
<div className="flex gap-4 w-full justify-between">
<div className="flex gap-4 items-center">
{isFetching && (
<div className="flex items-center justify-center text-text-verba gap-2">
<span className="loading loading-spinner loading-sm"></span>
</div>
)}
<p
className="text-lg font-bold truncate max-w-[350px]"
title={document.title}
>
{document.title}
</p>
</div>
<div className="gap-2 flex flex-wrap">
{Object.entries(document.labels).map(([key, label]) => (
<VerbaButton
key={document.title + key + label}
title={label}
text_size="text-xs"
text_class_name="truncate max-w-[200px]"
className="btn-sm min-w-min max-w-[200px]"
/>
))}
</div>
</div>
</div>
{/* Content div */}
<div className="flex-grow overflow-hidden p-3">
<div className="overflow-y-auto h-full">
{content &&
content.map((contentSnippet, index) =>
renderText(contentSnippet, index)
)}
</div>
</div>
{/* Navigation div */}
<div className="flex justify-center items-center gap-2 p-3 bg-bg-alt-verba">
<VerbaButton
title={"Previous " + (chunkScores ? "Chunk" : "Page")}
onClick={previousPage}
className="btn-sm min-w-min max-w-[200px]"
text_class_name="text-xs"
Icon={FaArrowAltCircleLeft}
/>
<div className="flex items-center">
<p className="text-xs text-text-verba">
{chunkScores ? "Chunk " : "Page "} {page}
</p>
</div>
<VerbaButton
title={"Next " + (chunkScores ? "Chunk" : "Page")}
onClick={nextPage}
className="btn-sm min-w-min max-w-[200px]"
text_class_name="text-xs"
Icon={FaArrowAltCircleRight}
/>
</div>
</div>
)}
</div>
);
};
export default ContentView;
================================================
FILE: frontend/app/components/Document/DocumentExplorer.tsx
================================================
"use client";
import React, { useState, useEffect } from "react";
import { FaInfoCircle } from "react-icons/fa";
import VectorView from "./VectorView";
import ChunkView from "./ChunkView";
import InfoComponent from "../Navigation/InfoComponent";
import DocumentMetaView from "./DocumentMetaView";
import { MdCancel } from "react-icons/md";
import { MdContentPaste } from "react-icons/md";
import { MdContentCopy } from "react-icons/md";
import { TbVectorTriangle } from "react-icons/tb";
import ContentView from "./ContentView";
import { IoMdAddCircle } from "react-icons/io";
import { FaExternalLinkAlt } from "react-icons/fa";
import {
VerbaDocument,
DocumentPayload,
Credentials,
ChunkScore,
Theme,
DocumentFilter,
} from "@/app/types";
import VerbaButton from "../Navigation/VerbaButton";
import { fetchSelectedDocument } from "@/app/api";
interface DocumentExplorerProps {
selectedDocument: string | null;
setSelectedDocument: (c: string | null) => void;
chunkScores?: ChunkScore[];
credentials: Credentials;
selectedTheme: Theme;
production: "Local" | "Demo" | "Production";
documentFilter: DocumentFilter[];
setDocumentFilter: React.Dispatch<React.SetStateAction<DocumentFilter[]>>;
addStatusMessage: (
message: string,
type: "INFO" | "WARNING" | "SUCCESS" | "ERROR"
) => void;
}
const DocumentExplorer: React.FC<DocumentExplorerProps> = ({
credentials,
selectedDocument,
setSelectedDocument,
chunkScores,
production,
selectedTheme,
documentFilter,
setDocumentFilter,
addStatusMessage,
}) => {
const [selectedSetting, setSelectedSetting] = useState<
"Content" | "Chunks" | "Metadata" | "Config" | "Vector Space" | "Graph"
>("Content");
const [isFetching, setIsFetching] = useState(false);
const [document, setDocument] = useState<VerbaDocument | null>(null);
useEffect(() => {
if (selectedDocument) {
handleFetchSelectedDocument();
} else {
setDocument(null);
}
}, [selectedDocument]);
const handleSourceClick = (url: string) => {
// Open a new tab with the specified URL
window.open(url, "_blank", "noopener,noreferrer");
};
const handleFetchSelectedDocument = async () => {
try {
setIsFetching(true);
const data: DocumentPayload | null = await fetchSelectedDocument(
selectedDocument,
credentials
);
if (data) {
if (data.error !== "") {
console.error(data.error);
setIsFetching(false);
setDocument(null);
setSelectedDocument(null);
} else {
setDocument(data.document);
setIsFetching(false);
}
}
} catch (error) {
console.error("Failed to fetch document:", error);
setIsFetching(false);
}
};
if (!selectedDocument) {
return <div></div>;
}
return (
<div className="flex flex-col gap-2 w-full">
{/* Search Header */}
<div className="bg-bg-alt-verba rounded-2xl flex gap-2 p-3 items-center justify-end lg:justify-between h-min w-full">
<div className="hidden lg:flex gap-2 justify-start ">
<InfoComponent
tooltip_text="Inspect your all information about your document, such as chunks, metadata and more."
display_text={document ? document.title : "Loading..."}
/>
</div>
<div className="flex gap-3 justify-end">
<VerbaButton
title="Content"
Icon={MdContentPaste}
onClick={() => setSelectedSetting("Content")}
selected={selectedSetting === "Content"}
selected_color="bg-secondary-verba"
/>
<VerbaButton
title="Chunks"
Icon={MdContentCopy}
onClick={() => setSelectedSetting("Chunks")}
selected={selectedSetting === "Chunks"}
selected_color="bg-secondary-verba"
/>
<VerbaButton
title="Vector"
Icon={TbVectorTriangle}
onClick={() => setSelectedSetting("Vector Space")}
selected={selectedSetting === "Vector Space"}
selected_color="bg-secondary-verba"
/>
<VerbaButton
Icon={MdCancel}
onClick={() => {
setSelectedDocument(null);
}}
/>
</div>
</div>
{/* Document List */}
<div className="bg-bg-alt-verba rounded-2xl flex flex-col p-6 h-full w-full overflow-y-auto overflow-x-hidden">
{selectedSetting === "Content" && (
<ContentView
selectedTheme={selectedTheme}
document={document}
credentials={credentials}
selectedDocument={selectedDocument}
chunkScores={chunkScores}
/>
)}
{selectedSetting === "Chunks" && (
<ChunkView
selectedTheme={selectedTheme}
credentials={credentials}
selectedDocument={selectedDocument}
/>
)}
{selectedSetting === "Vector Space" && (
<VectorView
credentials={credentials}
selectedDocument={selectedDocument}
chunkScores={chunkScores}
production={production}
/>
)}
{selectedSetting === "Metadata" && (
<DocumentMetaView
credentials={credentials}
selectedDocument={selectedDocument}
/>
)}
</div>
{/* Import Footer */}
<div className="bg-bg-alt-verba rounded-2xl flex gap-2 p-3 items-center justify-between h-min w-full">
<div className="flex gap-3">
{documentFilter.some(
(filter) => filter.uuid === selectedDocument
) && (
<VerbaButton
title="Delete from Chat"
Icon={MdCancel}
selected={true}
selected_color="bg-warning-verba"
onClick={() => {
setDocumentFilter(
documentFilter.filter((f) => f.uuid !== selectedDocument)
);
addStatusMessage("Removed document from Chat", "INFO");
}}
/>
)}
{!documentFilter.some((filter) => filter.uuid === selectedDocument) &&
document && (
<VerbaButton
title="Add to Chat"
Icon={IoMdAddCircle}
onClick={() => {
setDocumentFilter([
...documentFilter,
{ uuid: selectedDocument, title: document.title },
]);
addStatusMessage("Added document to Chat", "SUCCESS");
}}
/>
)}
</div>
<div className="flex gap-3">
{selectedDocument && document && document.source && (
<VerbaButton
title="Go To Source"
Icon={FaExternalLinkAlt}
onClick={() => {
handleSourceClick(document.source);
}}
/>
)}
<VerbaButton
title="Document Info"
Icon={FaInfoCircle}
onClick={() => setSelectedSetting("Metadata")}
selected={selectedSetting === "Metadata"}
selected_color="bg-secondary-verba"
/>
</div>
</div>
</div>
);
};
export default DocumentExplorer;
================================================
FILE: frontend/app/components/Document/DocumentMetaView.tsx
================================================
"use client";
import React, { useState, useEffect } from "react";
import { VerbaDocument, Credentials } from "@/app/types";
import { fetchSelectedDocument } from "@/app/api";
interface DocumentMetaViewProps {
selectedDocument: string;
credentials: Credentials;
}
const DocumentMetaView: React.FC<DocumentMetaViewProps> = ({
selectedDocument,
credentials,
}) => {
const [isFetching, setIsFetching] = useState(true);
const [document, setDocument] = useState<VerbaDocument | null>(null);
useEffect(() => {
handleFetchDocument();
}, [selectedDocument]);
const handleFetchDocument = async () => {
try {
setIsFetching(true);
const data = await fetchSelectedDocument(selectedDocument, credentials);
if (data) {
if (data.error !== "") {
setDocument(null);
setIsFetching(false);
} else {
setDocument(data.document);
setIsFetching(false);
}
}
} catch (error) {
console.error("Failed to fetch document:", error);
setIsFetching(false);
}
};
return (
<div className="flex flex-col h-full">
{isFetching ? (
<div className="flex items-center justify-center h-full">
<span className="loading loading-spinner loading-md text-text-verba bg-text-alt-verba"></span>
</div>
) : (
document && (
<div className="bg-bg-alt-verba flex flex-col rounded-lg overflow-hidden h-full">
<div className="p-4 flex flex-col gap-2 items-start justify-start">
<p className="font-bold flex text-xs text-start text-text-alt-verba">
Title
</p>
<p
className="text-text-verba truncate max-w-full"
title={document.title}
>
{document.title}
</p>
</div>
<div className="p-4 flex flex-col gap-2 items-start justify-start">
<p className="font-bold flex text-xs text-start text-text-alt-verba">
Metadata
</p>
<p className="text-text-verba max-w-full">{document.metadata}</p>
</div>
<div className="p-4 flex flex-col gap-2 items-start justify-start">
<p className="font-bold flex text-xs text-start text-text-alt-verba">
Extension
</p>
<p className="text-text-verba max-w-full">{document.extension}</p>
</div>
<div className="p-4 flex flex-col gap-2 items-start justify-start">
<p className="font-bold flex text-xs text-start text-text-alt-verba">
File Size
</p>
<p className="text-text-verba max-w-full">{document.fileSize}</p>
</div>
<div className="p-4 flex flex-col gap-2 items-start justify-start">
<p className="font-bold flex text-xs text-start text-text-alt-verba">
Source
</p>
<button
className="text-text-verba truncate max-w-full"
onClick={() => window.open(document.source, "_blank")}
title={document.source}
>
{document.source}
</button>
</div>
<div className="p-4 flex flex-col gap-2 items-start justify-start">
<p className="font-bold flex text-xs text-start text-text-alt-verba">
Labels
</p>
<p className="text-text-verba max-w-full">{document.labels}</p>
</div>
</div>
)
)}
</div>
);
};
export default DocumentMetaView;
================================================
FILE: frontend/app/components/Document/DocumentSearch.tsx
================================================
"use client";
import React, { useState, useEffect } from "react";
import {
DocumentPreview,
Credentials,
DocumentsPreviewPayload,
} from "@/app/types";
import { retrieveAllDocuments, deleteDocument } from "@/app/api";
import { FaSearch, FaTrash } from "react-icons/fa";
import { MdOutlineRefresh, MdCancel } from "react-icons/md";
import { FaArrowAltCircleLeft, FaArrowAltCircleRight } from "react-icons/fa";
import InfoComponent from "../Navigation/InfoComponent";
import UserModalComponent from "../Navigation/UserModal";
import VerbaButton from "../Navigation/VerbaButton";
import { IoMdAddCircle } from "react-icons/io";
interface DocumentSearchComponentProps {
selectedDocument: string | null;
credentials: Credentials;
setSelectedDocument: (c: string | null) => void;
production: "Local" | "Demo" | "Production";
addStatusMessage: (
message: string,
type: "INFO" | "WARNING" | "SUCCESS" | "ERROR"
) => void;
}
const DocumentSearch: React.FC<DocumentSearchComponentProps> = ({
selectedDocument,
setSelectedDocument,
production,
addStatusMessage,
credentials,
}) => {
const [userInput, setUserInput] = useState("");
const [page, setPage] = useState(1);
const [documents, setDocuments] = useState<DocumentPreview[] | null>([]);
const [totalDocuments, setTotalDocuments] = useState(0);
const pageSize = 50;
const [labels, setLabels] = useState<string[]>([]);
const [selectedLabels, setSelectedLabels] = useState<string[]>([]);
const [triggerSearch, setTriggerSearch] = useState(false);
const [isFetching, setIsFetching] = useState(false);
const nextPage = () => {
if (!documents) {
return;
}
if (page * pageSize < totalDocuments) {
setPage((prev) => prev + 1);
} else {
setPage(1);
}
};
const previousPage = () => {
if (!documents) {
return;
}
if (page == 1) {
setPage(Math.ceil(totalDocuments / pageSize));
} else {
setPage((prev) => prev - 1);
}
};
const fetchAllDocuments = async (_userInput?: string) => {
try {
setIsFetching(true);
const data: DocumentsPreviewPayload | null = await retrieveAllDocuments(
_userInput ? _userInput : "",
selectedLabels,
page,
pageSize,
credentials
);
if (data) {
if (data.error !== "") {
console.error(data.error);
setIsFetching(false);
setDocuments(null);
setTotalDocuments(0);
} else {
setDocuments(data.documents);
setLabels(data.labels);
setIsFetching(false);
setTotalDocuments(data.totalDocuments);
}
}
} catch (error) {
console.error("Failed to fetch document:", error);
setIsFetching(false);
}
};
useEffect(() => {
setTriggerSearch(true);
}, []);
useEffect(() => {
fetchAllDocuments(userInput);
}, [page, triggerSearch, selectedLabels]);
const handleSearch = () => {
fetchAllDocuments(userInput);
};
const clearSearch = () => {
setUserInput("");
setSelectedLabels([]);
fetchAllDocuments("");
};
const handleKeyDown = (e: any) => {
if (e.key === "Enter" && !e.shiftKey) {
e.preventDefault(); // Prevent new line
handleSearch(); // Submit form
}
};
const handleDeleteDocument = async (d: string) => {
if (production == "Demo") {
return;
}
const response = await deleteDocument(d, credentials);
addStatusMessage("Deleted document", "WARNING");
if (response) {
if (d == selectedDocument) {
setSelectedDocument(null);
}
fetchAllDocuments(userInput);
}
};
const addLabel = (l: string) => {
setSelectedLabels((prev) => [...prev, l]);
};
const removeLabel = (l: string) => {
setSelectedLabels((prev) => prev.filter((label) => label !== l));
};
const openDeleteModal = (id: string) => {
const modal = document.getElementById(id);
if (modal instanceof HTMLDialogElement) {
modal.showModal();
}
};
return (
<div className="flex flex-col gap-2 w-full">
{/* Search Header */}
<div className="bg-bg-alt-verba rounded-2xl flex gap-2 p-3 items-center justify-between h-min w-full">
<div className="hidden lg:flex gap-2 justify-start w-[8vw]">
<InfoComponent
tooltip_text="Search and inspect different documents imported into Verba"
display_text="Search"
/>
</div>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
onKeyDown={handleKeyDown}
placeholder={`Search for documents (${totalDocuments})`}
value={userInput}
onChange={(e) => {
setUserInput(e.target.value);
}}
/>
</label>
<VerbaButton onClick={handleSearch} Icon={FaSearch} />
<VerbaButton
onClick={clearSearch}
icon_size={20}
Icon={MdOutlineRefresh}
/>
</div>
{/* Document List */}
<div className="bg-bg-alt-verba rounded-2xl flex flex-col p-6 gap-3 items-center h-full w-full overflow-auto">
<div className="flex flex-col w-full justify-start gap-2">
<div className="dropdown dropdown-hover">
<label tabIndex={0}>
<VerbaButton
title="Label"
className="btn-sm min-w-min"
icon_size={12}
text_class_name="text-xs"
Icon={IoMdAddCircle}
selected={false}
disabled={false}
/>
</label>
<ul
tabIndex={0}
className="dropdown-content z-[1] menu p-2 shadow bg-base-100 rounded-box w-52"
>
{labels.map((label, index) => (
<li key={"Label" + index}>
<a
onClick={() => {
if (!selectedLabels.includes(label)) {
setSelectedLabels([...selectedLabels, label]);
}
const dropdownElement =
document.activeElement as HTMLElement;
dropdownElement.blur();
const dropdown = dropdownElement.closest(
".dropdown"
) as HTMLElement;
if (dropdown) dropdown.blur();
}}
>
{label}
</a>
</li>
))}
</ul>
</div>
<div className="flex flex-wrap gap-2">
{selectedLabels.map((label, index) => (
<VerbaButton
title={label}
key={"FilterDocumentLabel" + index}
Icon={MdCancel}
className="btn-sm min-w-min max-w-[200px]"
icon_size={12}
selected_color="bg-primary-verba"
selected={true}
text_class_name="truncate max-w-[200px]"
text_size="text-xs"
onClick={() => {
removeLabel(label);
}}
/>
))}
</div>
</div>
{isFetching && (
<div className="flex items-center justify-center gap-2">
<span className="loading loading-spinner loading-sm text-text-alt-verba"></span>
</div>
)}
<div className="flex flex-col w-full">
{documents &&
documents.map((document, index) => (
<div
key={"Document" + index + document.title}
className="flex justify-between items-center gap-2 rounded-2xl p-1 w-full"
>
<div className="flex justify-between items-center w-full gap-2">
<VerbaButton
title={document.title}
selected={selectedDocument == document.uuid}
selected_color="bg-secondary-verba"
key={document.title + index}
className="flex-grow"
text_class_name="truncate max-w-[150px] lg:max-w-[350px]"
onClick={() => setSelectedDocument(document.uuid)}
/>
{production !== "Demo" && (
<VerbaButton
Icon={FaTrash}
selected={selectedDocument == document.uuid}
selected_color="bg-warning-verba"
className="max-w-min"
key={document.title + index + "delete"}
onClick={() => {
openDeleteModal("remove_document" + document.uuid);
}}
/>
)}
</div>
<UserModalComponent
modal_id={"remove_document" + document.uuid}
title={"Remove Document"}
text={"Do you want to remove " + document.title + "?"}
triggerString="Delete"
triggerValue={document.uuid}
triggerAccept={handleDeleteDocument}
/>
</div>
))}{" "}
</div>
</div>
<div className="bg-bg-alt-verba rounded-2xl flex gap-2 p-4 items-center justify-center h-min w-full">
<div className="join justify-center items-center text-text-verba">
<div className="flex justify-center items-center gap-2 bg-bg-alt-verba">
<VerbaButton
title={"Previous Page"}
onClick={previousPage}
className="btn-sm min-w-min max-w-[200px]"
text_class_name="text-xs"
Icon={FaArrowAltCircleLeft}
/>
<div className="flex items-center">
<p className="text-xs text-text-verba">Page {page}</p>
</div>
<VerbaButton
title={"Next Page"}
onClick={nextPage}
className="btn-sm min-w-min max-w-[200px]"
text_class_name="text-xs"
Icon={FaArrowAltCircleRight}
/>
</div>
</div>
</div>
</div>
);
};
export default DocumentSearch;
================================================
FILE: frontend/app/components/Document/DocumentView.tsx
================================================
"use client";
import React, { useState } from "react";
import DocumentSearch from "./DocumentSearch";
import DocumentExplorer from "./DocumentExplorer";
import { Credentials, Theme, DocumentFilter } from "@/app/types";
interface DocumentViewProps {
selectedTheme: Theme;
production: "Local" | "Demo" | "Production";
credentials: Credentials;
documentFilter: DocumentFilter[];
setDocumentFilter: React.Dispatch<React.SetStateAction<DocumentFilter[]>>;
addStatusMessage: (
message: string,
type: "INFO" | "WARNING" | "SUCCESS" | "ERROR"
) => void;
}
const DocumentView: React.FC<DocumentViewProps> = ({
selectedTheme,
production,
credentials,
documentFilter,
setDocumentFilter,
addStatusMessage,
}) => {
const [selectedDocument, setSelectedDocument] = useState<string | null>(null);
return (
<div className="flex justify-center gap-3 h-[80vh] ">
<div
className={`${selectedDocument ? "hidden md:flex md:w-[45vw]" : "w-full md:w-[45vw] md:flex"}`}
>
<DocumentSearch
production={production}
addStatusMessage={addStatusMessage}
setSelectedDocument={setSelectedDocument}
credentials={credentials}
selectedDocument={selectedDocument}
/>
</div>
<div
className={`${selectedDocument ? "md:w-[55vw] w-full flex" : "hidden md:flex md:w-[55vw]"}`}
>
<DocumentExplorer
production={production}
credentials={credentials}
addStatusMessage={addStatusMessage}
setSelectedDocument={setSelectedDocument}
selectedTheme={selectedTheme}
selectedDocument={selectedDocument}
documentFilter={documentFilter}
setDocumentFilter={setDocumentFilter}
/>
</div>
</div>
);
};
export default DocumentView;
================================================
FILE: frontend/app/components/Document/VectorView.tsx
================================================
import React, {
useState,
useRef,
useEffect,
useMemo,
useCallback,
} from "react";
import { Canvas, useFrame } from "@react-three/fiber";
import { extend } from "@react-three/fiber";
import { OrbitControls, Float, PerspectiveCamera } from "@react-three/drei";
import * as THREE from "three";
import { MdCancel } from "react-icons/md";
import { GoTriangleDown } from "react-icons/go";
import { vectorToColor } from "./util";
import { fetch_chunk, fetch_vectors } from "@/app/api";
import {
VectorsPayload,
VectorGroup,
ChunkPayload,
VerbaChunk,
VerbaVector,
Credentials,
ChunkScore,
} from "@/app/types";
import { colors } from "./util";
extend({ OrbitControls: OrbitControls });
const Sphere: React.FC<{
vector: VerbaVector;
color: string;
setHoverTitle: React.MutableRefObject<(t: string | null) => void>;
documentTitle: string;
multiplication: number;
dynamicColor: boolean;
chunk_id: string;
chunk_uuid: string;
setSelectedChunk: (c: string) => void;
selectedChunk: string | null;
minX: number;
maxX: number;
minY: number;
maxY: number;
minZ: number;
maxZ: number;
chunkScores?: ChunkScore[];
}> = ({
vector,
color,
setHoverTitle,
documentTitle,
multiplication,
dynamicColor,
chunk_id,
chunk_uuid,
setSelectedChunk,
selectedChunk,
minX,
maxX,
minY,
maxY,
minZ,
maxZ,
chunkScores,
}) => {
const ref = useRef<THREE.Mesh>(null!);
const hoverRef = useRef(false);
const isHighlighted = useMemo(
() => chunkScores?.some((score) => score.uuid === chunk_uuid),
[chunkScores, chunk_uuid]
);
const sphereColor = useMemo(() => {
if (isHighlighted) return new THREE.Color("yellow");
if (selectedChunk === chunk_uuid) return new THREE.Color("green");
return dynamicColor
? vectorToColor(vector, minX, maxX, minY, maxY, minZ, maxZ)
: new THREE.Color(color);
}, [
isHighlighted,
selectedChunk,
chunk_uuid,
dynamicColor,
color,
vector,
minX,
maxX,
minY,
maxY,
minZ,
maxZ,
]);
const sphereRadius = isHighlighted
? 3
: selectedChunk === chunk_uuid
? 1.5
: 1;
const sphereOpacity = isHighlighted ? 1 : hoverRef.current ? 1 : 0.5;
const handlePointerEnter = useCallback(() => {
hoverRef.current = true;
setHoverTitle.current(`${documentTitle} | ${chunk_id}`);
}, [documentTitle, chunk_id, setHoverTitle]);
const handlePointerLeave = useCallback(() => {
hoverRef.current = false;
setHoverTitle.current(null);
}, [setHoverTitle]);
const handleClick = useCallback(() => {
setSelectedChunk(chunk_uuid);
}, [chunk_uuid, setSelectedChunk]);
useFrame(() => {
if (ref.current) {
ref.current.position.lerp(
new THREE.Vector3(
vector.x * multiplication,
vector.y * multiplication,
vector.z * multiplication
),
0.02
);
// Update material color based on hover state
const material = ref.current.material as THREE.MeshBasicMaterial;
material.color.set(hoverRef.current ? "blue" : sphereColor);
material.opacity = hoverRef.current ? 1 : sphereOpacity;
material.transparent = !hoverRef.current;
}
});
return (
<Float rotationIntensity={0.2}>
<mesh
ref={ref}
position={[0, 0, 0]}
onPointerEnter={handlePointerEnter}
onPointerLeave={handlePointerLeave}
onClick={handleClick}
>
<sphereGeometry args={[sphereRadius, 32, 32]} />
<meshBasicMaterial
color={sphereColor}
opacity={sphereOpacity}
transparent={true}
/>
</mesh>
</Float>
);
};
interface VectorViewProps {
credentials: Credentials;
selectedDocument: string | null;
chunkScores?: ChunkScore[];
production: "Local" | "Demo" | "Production";
}
const VectorView: React.FC<VectorViewProps> = ({
credentials,
selectedDocument,
production,
chunkScores,
}) => {
const refs = useRef<(THREE.Mesh | null)[]>([]);
const [isFetching, setIsFetching] = useState(false);
const [vectors, setVectors] = useState<VectorGroup[]>([]);
const [embedder, setEmbedder] = useState("");
const [showAll, setShowAll] = useState(false);
const [dynamicColor, setDymanicColor] = useState(true);
const [hoverTitleState, setHoverTitleState] = useState<string | null>(null);
const hoverTitleRef = useRef<(t: string | null) => void>((t) =>
setHoverTitleState(t)
);
const [viewMultiplication, setViewMultiplication] = useState(200);
const [currentDimensions, setCurrentDimensions] = useState(0);
const [selectedChunk, setSelectedChunk] = useState<null | string>(null);
const [chunk, setChunk] = useState<VerbaChunk | null>(null);
const [minX, setMinX] = useState(-1);
const [maxX, setMaxX] = useState(1);
const [minY, setMinY] = useState(-1);
const [maxY, setMaxY] = useState(1);
const [minZ, setMinZ] = useState(-1);
const [maxZ, setMaxZ] = useState(1);
useEffect(() => {
if (selectedDocument) {
fetchVectors();
} else {
setVectors([]);
}
}, [showAll, selectedDocument]);
useEffect(() => {
if (selectedChunk) {
fetchChunk();
} else {
setChunk(null);
}
}, [selectedChunk]);
function calculateMinMax(values: number[]): { min: number; max: number } {
const min = Math.min(...values);
const max = Math.max(...values);
return { min, max };
}
const getVectorCount = () => {
let vector_count = 0;
for (const vector_group of vectors) {
vector_count += vector_group.chunks.length;
}
return vector_count;
};
const fetchChunk = async () => {
try {
const data: ChunkPayload | null = await fetch_chunk(
selectedChunk,
embedder,
credentials
);
if (data) {
if (data.error !== "") {
console.error(data.error);
setChunk(null);
} else {
setChunk(data.chunk);
}
}
} catch (error) {
console.error("Failed to fetch document:", error);
setIsFetching(false);
}
};
const fetchVectors = async () => {
try {
setIsFetching(true);
const data: VectorsPayload | null = await fetch_vectors(
selectedDocument,
showAll,
credentials
);
if (data) {
if (data.error !== "") {
console.error(data.error);
setIsFetching(false);
setVectors([]);
setCurrentDimensions(0);
setEmbedder("None");
} else {
setVectors(data.vector_groups.groups);
setEmbedder(data.vector_groups.embedder);
setCurrentDimensions(data.vector_groups.dimensions);
setIsFetching(false);
if (!showAll) {
const xValues = data.vector_groups.groups[0].chunks.map(
(v) => v.vector.x
);
const yValues = data.vector_groups.groups[0].chunks.map(
(v) => v.vector.y
);
const zValues = data.vector_groups.groups[0].chunks.map(
(v) => v.vector.z
);
const { min: _minX, max: _maxX } = calculateMinMax(xValues);
setMinX(_minX);
setMaxX(_maxX);
const { min: _minY, max: _maxY } = calculateMinMax(yValues);
setMinY(_minY);
setMaxY(_maxY);
const { min: _minZ, max: _maxZ } = calculateMinMax(zValues);
setMinZ(_minZ);
setMaxZ(_maxZ);
}
}
}
} catch (error) {
console.error("Failed to fetch document:", error);
setIsFetching(false);
}
};
function selectColor(index: number): string {
if (index >= colors.length) {
const randomIndex = Math.floor(Math.random() * colors.length);
return colors[randomIndex];
} else {
return colors[index];
}
}
return (
<div className="flex flex-col gap-2 h-full w-full">
<div className="flex justify-end w-full gap-2 items-center">
<div className="flex w-full items-start justify-between">
{/* Left */}
<div className="flex flex-col gap-2">
<div className="flex gap-2 items-center">
{isFetching && (
<div className="flex items-center justify-center text-text-alt-verba gap-2 h-full">
<span className="loading loading-spinner loading-xs lg:loading-sm"></span>
</div>
)}
<p className="text-text-alt-verba text-xs lg:text-sm font-bold">
Embedding Model:
</p>
<p className="text-text-alt-verba text-xs lg:text-sm">
{embedder}
</p>
</div>
<div className="flex gap-1 items-center">
<p className="text-text-alt-verba text-xs lg:text-sm font-bold">
Hover:
</p>
<p
className="text-xs lg:text-sm text-text-alt-verba truncate max-w-[100px] lg:max-w-[300px]"
title={hoverTitleState ?? ""}
>
{hoverTitleState ?? ""}
</p>
</div>
<div className="flex gap-1 items-center">
<p className="text-text-alt-verba text-xs lg:text-sm font-bold">
Vectors:
</p>
<p className="text-xs lg:text-sm text-text-alt-verba">
{vectors.length} x {getVectorCount()} x {currentDimensions}
</p>
</div>
</div>
<div className="flex gap-10 items-center justify-between min-w-[20vw]">
<div className="flex flex-col gap-2 w-full">
{production != "Demo" && (
<div className="flex gap-2 items-center justify-between">
<p className="text-xs text-text-alt-verba">
Show All Documents
</p>
<input
type="checkbox"
className="toggle"
checked={showAll}
onChange={(e) => {
setShowAll(e.target.checked);
}}
/>
</div>
)}
<div className="flex gap-2 items-center justify-between">
<p className="text-xs text-text-alt-verba">Dynamic Coloring</p>
<input
type="checkbox"
className="toggle"
checked={dynamicColor}
onChange={(e) => {
setDymanicColor(e.target.checked);
}}
/>
</div>
</div>
<div className="flex flex-col gap-2 w-full">
{/* Dropdown */}
<div className="dropdown dropdown-bottom flex w-full justify-start items-center">
<button
tabIndex={0}
role="button"
disabled={true}
className="btn btn-sm bg-button-verba hover:bg-button-hover-verba text-text-verba w-full flex justify-start border-none"
>
<GoTriangleDown size={15} />
<p>PCA</p>
</button>
<ul
tabIndex={0}
className="dropdown-content menu bg-base-100 rounded-box z-[1] w-full p-2 shadow"
></ul>
</div>
{/* Zoom */}
<div className="flex items-center gap-2 w-full">
<p className="text-text-alt-verba text-sm">Zoom</p>
<input
onChange={(e) => {
setViewMultiplication(Number(e.target.value));
}}
type="range"
min={0}
max="1000"
value={viewMultiplication}
className="range range-xs grow w-full"
/>
</div>
</div>
{chunk && (
<button
onClick={() => {
setChunk(null);
setSelectedChunk(null);
}}
className="flex btn btn-square border-none text-text-verba bg-button-verba hover:bg-warning-verba gap-2"
>
<MdCancel size={15} />
</button>
)}
</div>
</div>
</div>
<div className="flex gap-5 h-[45vh] w-full">
<div
className={`flex flex-grow transition-all duration-300 ease-in-out ${
selectedChunk ? "w-2/3" : "w-full"
} h-full`}
>
<Canvas>
<ambientLight intensity={1} />
<OrbitControls></OrbitControls>
<PerspectiveCamera makeDefault position={[0, 0, 0 + 150]} />
<axesHelper args={[50]} />
{vectors.map((vector_group, index) =>
vector_group.chunks.map((chunk, v_index) => (
<Sphere
dynamicColor={dynamicColor}
multiplication={viewMultiplication}
key={"Sphere_" + v_index + vector_group.name}
vector={chunk.vector}
color={selectColor(index)}
setHoverTitle={hoverTitleRef}
documentTitle={vector_group.name}
chunk_id={chunk.chunk_id}
setSelectedChunk={setSelectedChunk}
selectedChunk={selectedChunk}
chunk_uuid={chunk.uuid}
minX={minX}
minY={minY}
minZ={minZ}
maxX={maxX}
maxY={maxY}
maxZ={maxZ}
chunkScores={chunkScores}
/>
))
)}
</Canvas>
</div>
<div
className={`flex flex-grow transition-all duration-300 ease-in-out ${
selectedChunk ? "w-1/3 opacity-100" : "w-0 opacity-0"
} overflow-auto`}
>
{chunk && (
<div className="flex flex-col p-3 gap-2 w-full">
<p className="text-text-alt-verba fond-bold">
Chunk {chunk.chunk_id}
</p>
<p className="text-text-alt-verba text-sm">{chunk.content}</p>
</div>
)}
</div>
</div>
</div>
);
};
export default VectorView;
================================================
FILE: frontend/app/components/Document/util.ts
================================================
import { FormattedDocument } from "@/app/types";
import { VerbaVector } from "@/app/types";
import * as THREE from "three";
export function splitDocument(
fullText: string,
searchSubstring: string | null
): FormattedDocument {
if (searchSubstring === null || searchSubstring === "") {
const beginning = fullText;
const substring = "";
const ending = "";
return { beginning, substring, ending };
}
const startIndex = fullText.indexOf(searchSubstring);
if (startIndex === -1) {
// Substring not found, handle as appropriate, maybe return null or the full text as beginning
return { beginning: fullText, substring: "", ending: "" };
}
const endIndex = startIndex + searchSubstring.length;
const beginning = fullText.substring(0, startIndex);
const substring = fullText.substring(startIndex, endIndex);
const ending = fullText.substring(endIndex);
return { beginning, substring, ending };
}
export const colors = [
"green", // High contrast start
"blue", // High contrast with red
"red", // High contrast with green
"yellow", // High contrast with blue
"purple", // High contrast with yellow
"cyan", // High contrast with purple
"orange", // High contrast with cyan
"limegreen", // High contrast with orange
"pink", // High contrast with limegreen
"teal", // High contrast with pink
"violet", // High contrast with teal
"forestgreen", // High contrast with violet
"gold", // High contrast with forestgreen
"navy", // High contrast with gold
"magenta", // High contrast with navy
"mediumspringgreen", // High contrast with magenta
"darkorange", // High contrast with mediumspringgreen
"deepskyblue", // High contrast with darkorange
"crimson", // High contrast with deepskyblue
"lightseagreen", // High contrast with crimson
"royalblue", // High contrast with lightseagreen
"chartreuse", // High contrast with royalblue
"mediumorchid", // High contrast with chartreuse
"aqua", // High contrast with mediumorchid
"orangered", // High contrast with aqua
"mediumaquamarine", // High contrast with orangered
"plum", // High contrast with mediumaquamarine
"lime", // High contrast with plum
"dodgerblue", // High contrast with lime
"lightcoral", // High contrast with dodgerblue
"mediumslateblue", // High contrast with lightcoral
"lightgreen", // High contrast with mediumslateblue
"darkred", // High contrast with lightgreen
"springgreen", // High contrast with darkred
"lightpink", // High contrast with springgreen
"indigo", // High contrast with lightpink
"lightyellow", // High contrast with indigo
"mediumvioletred", // High contrast with lightyellow
"seagreen", // High contrast with mediumvioletred
"fuchsia", // High contrast with seagreen
"darkseagreen", // High contrast with fuchsia
"thistle", // High contrast with darkseagreen
"orange", // High contrast with thistle
"powderblue", // High contrast with orange
"yellowgreen", // High contrast with powderblue
"cornflowerblue", // High contrast with yellowgreen
"darkmagenta", // High contrast with cornflowerblue
"darkblue", // High contrast with darkmagenta
"gold", // High contrast with darkblue
"mediumblue", // High contrast with gold
"rosybrown", // High contrast with mediumblue
"darkgreen", // High contrast with rosybrown
"lightskyblue", // High contrast with darkgreen
"mediumseagreen", // High contrast with lightskyblue
"firebrick", // High contrast with mediumseagreen
"lavender", // High contrast with firebrick
"darkcyan", // High contrast with lavender
"khaki", // High contrast with darkcyan
"mediumturquoise", // High contrast with khaki
"saddlebrown", // High contrast with mediumturquoise
"lightblue", // High contrast with saddlebrown
"olive", // High contrast with lightblue
"mintcream", // High contrast with olive
"turquoise", // High contrast with mintcream
"rebeccapurple", // High contrast with turquoise
"lightgoldenrodyellow", // High contrast with rebeccapurple
];
export function normalize(value: number, min: number, max: number): number {
if (max === min) return 0; // Avoid division by zero
return (value - min) / (max - min);
}
export function vectorToColor(
vector: VerbaVector,
minX: number,
maxX: number,
minY: number,
maxY: number,
minZ: number,
maxZ: number
): THREE.Color {
// Normalize vector components to be within the range of 0 to 1 based on min and max
const normalizedX = normalize(vector.x, minX, maxX);
const normalizedY = normalize(vector.y, minY, maxY);
const normalizedZ = normalize(vector.z, minZ, maxZ);
// Scale normalized values to 0-255
const r = Math.floor(normalizedZ * 255); // Red from Z axis
const g = Math.floor(normalizedX * 255); // Green from X axis
const b = Math.floor(normalizedY * 255); // Blue from Y axis
return new THREE.Color(`rgb(${g},${b},${r})`);
}
================================================
FILE: frontend/app/components/Ingestion/BasicSettingView.tsx
================================================
"use client";
import React, { useState, useEffect, useCallback } from "react";
import {
FileData,
FileMap,
statusTextMap,
statusColorMap,
RAGComponentConfig,
} from "@/app/types";
import VerbaButton from "../Navigation/VerbaButton";
import { MdCancel } from "react-icons/md";
import { IoAddCircleSharp } from "react-icons/io5";
import { CgDebug } from "react-icons/cg";
import ComponentView from "./ComponentView";
import { MdError } from "react-icons/md";
import { FaCheckCircle } from "react-icons/fa";
interface BasicSettingViewProps {
selectedFileData: string | null;
fileMap: FileMap;
setFileMap: React.Dispatch<React.SetStateAction<FileMap>>;
blocked: boolean | undefined;
selectComponent: (component_n: string, selected_component: string) => void;
updateConfig: (
component_n: string,
configTitle: string,
value: string | boolean | string[]
) => void;
saveComponentConfig: (
component_n: string,
selected_component: string,
component_config: RAGComponentConfig
) => void;
addStatusMessage: (
message: string,
type: "INFO" | "WARNING" | "SUCCESS" | "ERROR"
) => void;
}
const BasicSettingView: React.FC<BasicSettingViewProps> = ({
selectedFileData,
fileMap,
selectComponent,
updateConfig,
saveComponentConfig,
setFileMap,
blocked,
addStatusMessage,
}) => {
const [filename, setFilename] = useState("");
const [source, setSource] = useState("");
const [metadata, setMetadata] = useState("");
const [label, setLabel] = useState("");
useEffect(() => {
if (selectedFileData) {
setFilename(fileMap[selectedFileData].filename);
setSource(fileMap[selectedFileData].source);
setMetadata(fileMap[selectedFileData].metadata);
}
}, [fileMap, selectedFileData]);
const updateFileMap = useCallback(
(key: "filename" | "source" | "metadata", value: string) => {
if (selectedFileData) {
const newFileData: FileData = JSON.parse(
JSON.stringify(fileMap[selectedFileData])
);
newFileData[key] = value;
const newFileMap: FileMap = { ...fileMap };
newFileMap[selectedFileData] = newFileData;
setFileMap(newFileMap);
}
},
[selectedFileData, fileMap, setFileMap]
);
const handleFilenameChange = useCallback(
(e: React.ChangeEvent<HTMLInputElement>) => {
const newFilename = e.target.value;
setFilename(newFilename);
updateFileMap("filename", newFilename);
},
[updateFileMap]
);
const handleSourceChange = useCallback(
(e: React.ChangeEvent<HTMLInputElement>) => {
const newSource = e.target.value;
setSource(newSource);
updateFileMap("source", newSource);
},
[updateFileMap]
);
const handleMetadataChange = useCallback(
(e: React.ChangeEvent<HTMLTextAreaElement>) => {
const newMetadata = e.target.value;
setMetadata(newMetadata);
updateFileMap("metadata", newMetadata);
},
[updateFileMap]
);
const openDebugModal = () => {
const modal = document.getElementById("File_Debug_Modal");
if (modal instanceof HTMLDialogElement) {
modal.showModal();
}
};
const formatByteSize = (bytes: number): string => {
const sizes = ["B", "KB", "MB", "GB", "TB"];
if (bytes === 0) return "0 B";
const i = Math.floor(Math.log(bytes) / Math.log(1024));
const size = bytes / Math.pow(1024, i);
return `${size.toFixed(2)} ${sizes[i]}`;
};
const setOverwrite = (o: boolean) => {
if (selectedFileData) {
const newFileData: FileData = JSON.parse(
JSON.stringify(fileMap[selectedFileData])
);
newFileData.overwrite = o;
const newFileMap: FileMap = { ...fileMap };
newFileMap[selectedFileData] = newFileData;
setFileMap(newFileMap);
}
};
const addLabel = (l: string) => {
if (
selectedFileData &&
!fileMap[selectedFileData].labels.includes(l) &&
l.length > 0
) {
const newFileData: FileData = JSON.parse(
JSON.stringify(fileMap[selectedFileData])
);
newFileData.labels.push(l);
const newFileMap: FileMap = { ...fileMap };
newFileMap[selectedFileData] = newFileData;
setFileMap(newFileMap);
setLabel("");
}
};
const removeLabel = (l: string) => {
if (
selectedFileData &&
fileMap[selectedFileData].labels.includes(l) &&
l.length > 0
) {
const newFileData: FileData = JSON.parse(
JSON.stringify(fileMap[selectedFileData])
);
newFileData.labels = newFileData.labels.filter((item) => item !== l);
const newFileMap: FileMap = { ...fileMap };
newFileMap[selectedFileData] = newFileData;
setFileMap(newFileMap);
setLabel("");
}
};
function renderLabelBoxes(fileData: FileData) {
return Object.entries(fileData.labels).map(([key, label]) => (
<div key={fileData.fileID + key + label}>
<VerbaButton
title={label}
className="btn-sm"
text_class_name="text-xs"
onClick={() => {
removeLabel(label);
}}
Icon={MdCancel}
/>
</div>
));
}
if (selectedFileData) {
return (
<div className="flex flex-col justify-start gap-3 rounded-2xl p-1 w-full ">
{selectedFileData && fileMap[selectedFileData].status != "READY" && (
<div className="divider text-text-alt-verba">Import Status</div>
)}
<div className="flex flex-col gap-3 text-text-verba">
{selectedFileData &&
Object.entries(fileMap[selectedFileData].status_report).map(
([status, statusReport]) => (
<div className="flex" key={"Status" + status}>
<p className="flex min-w-[8vw] gap-2 items-center text-text-verba">
{statusReport.status === "DONE" && (
<FaCheckCircle size={15} />
)}
{statusReport.status === "ERROR" && <MdError size={15} />}
{statusTextMap[statusReport.status]}
</p>
<label
className={`input flex items-center gap-2 w-full ${statusColorMap[statusReport.status]} bg-bg-verba`}
>
<input
type="text"
className="grow w-full"
value={
statusReport.took != 0
? statusReport.message +
" (" +
statusReport.took +
"s)"
: statusReport.message
}
disabled={true}
/>
</label>
</div>
)
)}
</div>
<ComponentView
RAGConfig={fileMap[selectedFileData].rag_config}
component_name="Reader"
selectComponent={selectComponent}
updateConfig={updateConfig}
skip_component={true}
saveComponentConfig={saveComponentConfig}
blocked={fileMap[selectedFileData].block}
/>
<div className="divider text-text-alt-verba">File Settings</div>
{/* Filename */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Title</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={filename}
onChange={handleFilenameChange}
disabled={blocked}
/>
</label>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
Add a Title to the document. If you are adding a URL, all URL will
have a have their corresponding URL as filename.
</p>
</div>
{/* Source */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Source Link</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={source}
onChange={handleSourceChange}
disabled={blocked}
/>
</label>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
Add a link to reference the original source of the document. You can
access it through the Document Explorer via the View Source button
</p>
</div>
{/* Labels */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Labels</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={label}
onChange={(e) => {
setLabel(e.target.value);
}}
onKeyDown={(e) => {
if (e.key === "Enter") {
e.preventDefault();
addLabel(label);
}
}}
disabled={blocked}
title={label}
/>
</label>
<VerbaButton
title="Add"
Icon={IoAddCircleSharp}
onClick={() => {
addLabel(label);
}}
disabled={blocked}
/>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
Add or remove labels for Document Filtering
</p>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<div className="flex flex-wrap gap-2">
{renderLabelBoxes(fileMap[selectedFileData])}
</div>
</div>
{/* Overwrite */}
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]">Overwrite</p>
<input
type="checkbox"
className="checkbox checkbox-md"
onChange={(e) =>
setOverwrite((e.target as HTMLInputElement).checked)
}
checked={
selectedFileData ? fileMap[selectedFileData].overwrite : false
}
disabled={blocked}
/>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
Overwrite existing documents with the same name.
</p>
</div>
<div className="divider text-text-alt-verba">Metadata</div>
{/* Metadata */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Metadata</p>
<textarea
className="grow w-full textarea flex items-center gap-2 max-h-64 bg-bg-verba"
value={metadata}
onChange={handleMetadataChange}
disabled={blocked}
/>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
Add metadata to the document to improve retrieval and generation.
Metadata will added to the context sent to the embedding and
generation, to influcence the results.
</p>
</div>
<div className="divider text-text-alt-verba">File Information</div>
{/* Extension */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Extension</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={fileMap[selectedFileData].extension}
disabled={true}
/>
</label>
</div>
{/* File Size */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">File Size</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={formatByteSize(fileMap[selectedFileData].file_size)}
disabled={true}
/>
</label>
</div>
<div className="divider text-text-alt-verba">Ingestion Pipeline</div>
{/* Reader */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Reader</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={fileMap[selectedFileData].rag_config["Reader"].selected}
disabled={true}
/>
</label>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
{selectedFileData &&
fileMap[selectedFileData].rag_config["Reader"].components[
fileMap[selectedFileData].rag_config["Reader"].selected
].description}
</p>
</div>
{/* Chunker */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Chunker</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={fileMap[selectedFileData].rag_config["Chunker"].selected}
disabled={true}
/>
</label>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
{selectedFileData &&
fileMap[selectedFileData].rag_config["Chunker"].components[
fileMap[selectedFileData].rag_config["Chunker"].selected
].description}
</p>
</div>
{/* Embedder */}
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Embedder</p>
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
value={fileMap[selectedFileData].rag_config["Embedder"].selected}
disabled={true}
/>
</label>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="text-sm text-text-alt-verba text-start">
{selectedFileData &&
fileMap[selectedFileData].rag_config["Embedder"].components[
fileMap[selectedFileData].rag_config["Embedder"].selected
].description}
</p>
</div>
<div className="divider"></div>
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw]">Debug</p>
<VerbaButton
Icon={CgDebug}
onClick={openDebugModal}
className="max-w-min"
/>
</div>
<dialog id={"File_Debug_Modal"} className="modal">
<div className="modal-box min-w-fit">
<h3 className="font-bold text-lg">Debugging File Configuration</h3>
<pre className="whitespace-pre-wrap text-xs">
{selectedFileData
? (() => {
// Create a shallow copy of the object
const objCopy = { ...fileMap[selectedFileData] };
// Delete the `content` property
objCopy.content = "File Content";
// Convert to a pretty-printed JSON string
return JSON.stringify(objCopy, null, 2);
})()
: ""}
</pre>
<div className="modal-action">
<form method="dialog">
<button className="btn text-text-verba bg-warning-verba border-none hover:bg-button-hover-verba ml-2">
Close
</button>
</form>
</div>
</div>
</dialog>
</div>
);
} else {
return <div></div>;
}
};
export default BasicSettingView;
================================================
FILE: frontend/app/components/Ingestion/ComponentView.tsx
================================================
"use client";
import React, { useState, useEffect } from "react";
import { FaTrash } from "react-icons/fa";
import { GoTriangleDown } from "react-icons/go";
import { IoAddCircleSharp } from "react-icons/io5";
import { RAGConfig, RAGComponentConfig } from "@/app/types";
import { closeOnClick } from "@/app/util";
import VerbaButton from "../Navigation/VerbaButton";
export const MultiInput: React.FC<{
component_name: string;
values: string[];
blocked: boolean | undefined;
config_title: string;
updateConfig: (
component_n: string,
configTitle: string,
value: string | boolean | string[]
) => void;
}> = ({ values, config_title, updateConfig, component_name, blocked }) => {
const [currentInput, setCurrentInput] = useState("");
const [currentValues, setCurrentValues] = useState(values);
useEffect(() => {
updateConfig(component_name, config_title, currentValues);
}, [currentValues]);
const addValue = (v: string) => {
if (!currentValues.includes(v)) {
setCurrentValues((prev) => [...prev, v]);
setCurrentInput("");
}
};
const removeValue = (v: string) => {
if (currentValues.includes(v)) {
setCurrentValues((prev) => prev.filter((label) => label !== v));
}
};
return (
<div className="flex flex-col w-full gap-2">
<div className="flex gap-2 justify-between">
<label className="input flex items-center gap-2 w-full bg-bg-verba">
<input
type="text"
className="grow w-full"
disabled={blocked}
value={currentInput}
onChange={(e) => {
setCurrentInput(e.target.value);
}}
onKeyDown={(e) => {
if (e.key === "Enter") {
e.preventDefault();
addValue(currentInput);
}
}}
/>
</label>
<button
onClick={() => {
addValue(currentInput);
}}
disabled={blocked}
className="btn flex gap-2 bg-button-verba border-none hover:bg-secondary-verba text-text-verba"
>
<IoAddCircleSharp size={15} />
<p>Add</p>
</button>
</div>
<div className="grid grid-cols-3 gap-2">
{values.map((value, index) => (
<div
key={value + index}
className="flex bg-bg-verba w-full p-2 text-center text-sm text-text-verba justify-between items-center rounded-xl"
>
<div className="flex w-full justify-center items-center overflow-hidden">
<p className="truncate" title={value}>
{value}
</p>
</div>
<button
disabled={blocked}
onClick={() => {
removeValue(value);
}}
className="btn btn-sm btn-square bg-button-verba border-none hover:bg-warning-verba text-text-verba ml-2"
>
<FaTrash size={12} />
</button>
</div>
))}
</div>
</div>
);
};
interface ComponentViewProps {
RAGConfig: RAGConfig;
blocked: boolean | undefined;
component_name: "Chunker" | "Embedder" | "Reader" | "Generator" | "Retriever";
selectComponent: (component_n: string, selected_component: string) => void;
skip_component?: boolean;
updateConfig: (
component_n: string,
configTitle: string,
value: string | boolean | string[]
) => void;
saveComponentConfig: (
component_n: string,
selected_component: string,
config: RAGComponentConfig
) => void;
}
const ComponentView: React.FC<ComponentViewProps> = ({
RAGConfig,
component_name,
selectComponent,
updateConfig,
saveComponentConfig,
blocked,
skip_component,
}) => {
function renderComponents(rag_config: RAGConfig) {
return Object.entries(rag_config[component_name].components)
.filter(([key, component]) => component.available)
.map(([key, component]) => (
<li
key={"ComponentDropdown_" + component.name}
onClick={() => {
if (!blocked) {
selectComponent(component_name, component.name);
closeOnClick();
}
}}
>
<a>{component.name}</a>
</li>
));
}
function renderConfigOptions(rag_config: RAGConfig, configKey: string) {
return rag_config[component_name].components[
rag_config[component_name].selected
].config[configKey].values.map((configValue) => (
<li
key={"ConfigValue" + configValue}
className="text-sm"
onClick={() => {
if (!blocked) {
updateConfig(component_name, configKey, configValue);
closeOnClick();
}
}}
>
<a>{configValue}</a>
</li>
));
}
if (
Object.entries(
RAGConfig[component_name].components[RAGConfig[component_name].selected]
.config
).length == 0 &&
skip_component
) {
return <></>;
}
return (
<div className="flex flex-col justify-start gap-3 rounded-2xl p-1 w-full ">
<div className="flex items-center justify-between">
<div className="divider text-text-alt-verba flex-grow text-xs lg:text-sm">
<p>{RAGConfig[component_name].selected} Settings</p>
<VerbaButton
title="Save"
onClick={() => {
saveComponentConfig(
component_name,
RAGConfig[component_name].selected,
RAGConfig[component_name].components[
RAGConfig[component_name].selected
]
);
}}
/>
</div>
</div>
{/* Component */}
{!skip_component && (
<div className="flex flex-col gap-2">
<div className="flex gap-2 justify-between items-center text-text-verba">
<p className="flex min-w-[8vw] lg:text-base text-sm">
{component_name}
</p>
<div className="dropdown dropdown-bottom flex justify-start items-center w-full">
<button
tabIndex={0}
role="button"
disabled={blocked}
className="btn bg-button-verba hover:bg-button-hover-verba text-text-verba w-full flex justify-start border-none"
>
<GoTriangleDown size={15} />
<p>{RAGConfig[component_name].selected}</p>
</button>
<ul
tabIndex={0}
className="dropdown-content menu bg-base-100 rounded-box z-[1] w-full p-2 shadow"
>
{renderComponents(RAGConfig)}
</ul>
</div>
</div>
<div className="flex gap-2 items-center text-text-verba">
<p className="flex min-w-[8vw]"></p>
<p className="lg:text-sm text-xs text-text-alt-verba text-start">
{
RAGConfig[component_name].components[
RAGConfig[component_name].selected
].description
}
</p>
</div>
</div>
)}
{Object.entries(
RAGConfig[component_name].components[RAGConfig[component_name].selected]
.config
).map(([configTitle, config]) => (
<div key={"Configuration" + configTitle + component_name}>
<div className="flex gap-3 justify-between items-center text-text-verba lg:text-base text-sm">
<p className="flex min-w-[8vw]">{configTitle}</p>
{/* Dropdown */}
{config.type === "dropdown" && (
<div className="dropdown dropdown-bottom flex justify-start items-center w-full">
<button
tabIndex={0}
role="button"
disabled={blocked}
className="btn bg-button-verba hover:bg-button-hover-verba text-text-verba w-full flex justify-start border-none"
>
<GoTriangleDown size={15} />
<p>{config.value}</p>
</button>
<ul
tabIndex={0}
className="dropdown-content menu bg-base-100 max-h-[20vh] overflow-auto rounded-box z-[1] w-full p-2 shadow"
>
{renderConfigOptions(RAGConfig, configTitle)}
</ul>
</div>
)}
{/* Text Input */}
{typeof config.value != "boolean" &&
["text", "number", "password"].includes(config.type) && (
<label className="input flex text-sm items-center gap-2 w-full bg-bg-verba">
<input
type={config.type}
className="grow w-full"
value={config.value}
onChange={(e) => {
if (!blocked) {
updateConfig(
component_name,
configTitle,
e.target.value
);
}
}}
/>
</label>
)}
{/* Text Area */}
{typeof config.value != "boolean" &&
["textarea"].includes(config.type) && (
<textarea
className="grow w-full text-sm min-h-[152px] bg-bg-verba rounded-lg p-2"
value={config.value}
onChange={(e) => {
if (!blocked) {
updateConfig(component_name, configTitle, e.target.value);
}
}}
/>
)}
{/* Multi Input */}
{typeof config.value != "boolean" && config.type == "multi" && (
<MultiInput
component_name={component_name}
values={config.values}
config_title={configTitle}
updateConfig={updateConfig}
blocked={blocked}
/>
)}
{/* Checkbox Input */}
{config.type == "bool" && (
<div className="flex gap-5 justify-start items-center w-full my-4">
<p className="lg:text-sm text-xs text-text-alt-verba text-start w-[250px]">
{config.description}
</p>
<input
type="checkbox"
className="checkbox checkbox-md"
onChange={(e) => {
if (!blocked) {
updateConfig(
component_name,
configTitle,
(e.target as HTMLInputElement).checked
);
}
}}
checked={
typeof config.value === "boolean" ? config.value : false
}
/>
</div>
)}
</div>
{/* Description */}
{config.type != "bool" && (
<div className="flex gap-2 items-center text-text-verba mt-3">
<p className="flex min-w-[8vw]"></p>
<p className="text-xs text-text-alt-verba text-start">
{config.description}
</p>
</div>
)}
</div>
))}
</div>
);
};
export default ComponentView;
================================================
FILE: frontend/app/components/Ingestion/ConfigurationView.tsx
================================================
"use client";
import React, { useState, useCallback } from "react";
import InfoComponent from "../Navigation/InfoComponent";
import { MdCancel } from "react-icons/md";
import { IoSettingsSharp } from "react-icons/io5";
import { VscSaveAll } from "react-icons/vsc";
import { FaHammer } from "react-i
gitextract__w7iadsp/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── verba-feature-template.md │ │ └── verba-issue-template.md │ └── workflows/ │ └── docker-image.yml ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── FRONTEND.md ├── LICENSE ├── MANIFEST.in ├── PYTHON_TUTORIAL.md ├── README.md ├── TECHNICAL.md ├── docker-compose.yml ├── frontend/ │ ├── .eslintrc.json │ ├── .gitignore │ ├── app/ │ │ ├── api.ts │ │ ├── components/ │ │ │ ├── Chat/ │ │ │ │ ├── ChatConfig.tsx │ │ │ │ ├── ChatInterface.tsx │ │ │ │ ├── ChatMessage.tsx │ │ │ │ ├── ChatView.tsx │ │ │ │ └── StatusLabel.tsx │ │ │ ├── Document/ │ │ │ │ ├── ChunkView.tsx │ │ │ │ ├── ContentView.tsx │ │ │ │ ├── DocumentExplorer.tsx │ │ │ │ ├── DocumentMetaView.tsx │ │ │ │ ├── DocumentSearch.tsx │ │ │ │ ├── DocumentView.tsx │ │ │ │ ├── VectorView.tsx │ │ │ │ └── util.ts │ │ │ ├── Ingestion/ │ │ │ │ ├── BasicSettingView.tsx │ │ │ │ ├── ComponentView.tsx │ │ │ │ ├── ConfigurationView.tsx │ │ │ │ ├── FileComponent.tsx │ │ │ │ ├── FileSelectionView.tsx │ │ │ │ └── IngestionView.tsx │ │ │ ├── Login/ │ │ │ │ ├── GettingStarted.tsx │ │ │ │ └── LoginView.tsx │ │ │ ├── Navigation/ │ │ │ │ ├── InfoComponent.tsx │ │ │ │ ├── NavButton.tsx │ │ │ │ ├── NavbarComponent.tsx │ │ │ │ ├── StatusMessenger.tsx │ │ │ │ ├── UserModal.tsx │ │ │ │ ├── VerbaButton.tsx │ │ │ │ └── util.ts │ │ │ └── Settings/ │ │ │ ├── InfoView.tsx │ │ │ ├── SettingsComponent.tsx │ │ │ ├── SettingsView.tsx │ │ │ └── SuggestionView.tsx │ │ ├── globals.css │ │ ├── layout.tsx │ │ ├── page.tsx │ │ ├── types.ts │ │ └── util.ts │ ├── glsl.d.ts │ ├── next.config.js │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ ├── alps_field_1k.hdr │ │ ├── cloudy.hdr │ │ ├── macbook.gltf │ │ ├── shaders/ │ │ │ ├── includes/ │ │ │ │ └── simplexNoise4d.glsl │ │ │ └── wobble/ │ │ │ ├── fragment.glsl │ │ │ └── vertex.glsl │ │ ├── verba.glb │ │ ├── verba.gltf │ │ └── weaviate.glb │ ├── tailwind.config.ts │ └── tsconfig.json ├── goldenverba/ │ ├── __init__.py │ ├── components/ │ │ ├── __init__.py │ │ ├── chunk.py │ │ ├── chunking/ │ │ │ ├── CodeChunker.py │ │ │ ├── HTMLChunker.py │ │ │ ├── JSONChunker.py │ │ │ ├── MarkdownChunker.py │ │ │ ├── RecursiveChunker.py │ │ │ ├── SemanticChunker.py │ │ │ ├── SentenceChunker.py │ │ │ ├── TokenChunker.py │ │ │ ├── __init__.py │ │ │ └── chunking_examples.py │ │ ├── document.py │ │ ├── embedding/ │ │ │ ├── CohereEmbedder.py │ │ │ ├── GoogleEmbedder.py │ │ │ ├── OllamaEmbedder.py │ │ │ ├── OpenAIEmbedder.py │ │ │ ├── SentenceTransformersEmbedder.py │ │ │ ├── UpstageEmbedder.py │ │ │ ├── VoyageAIEmbedder.py │ │ │ ├── WeaviateEmbedder.py │ │ │ └── __init__.py │ │ ├── generation/ │ │ │ ├── AnthrophicGenerator.py │ │ │ ├── CohereGenerator.py │ │ │ ├── GeminiGenerator.py │ │ │ ├── GroqGenerator.py │ │ │ ├── NovitaGenerator.py │ │ │ ├── OllamaGenerator.py │ │ │ ├── OpenAIGenerator.py │ │ │ ├── UpstageGenerator.py │ │ │ └── __init__.py │ │ ├── interfaces.py │ │ ├── managers.py │ │ ├── reader/ │ │ │ ├── AssemblyAIAPI.py │ │ │ ├── BasicReader.py │ │ │ ├── FirecrawlReader.py │ │ │ ├── GitReader.py │ │ │ ├── HTMLReader.py │ │ │ ├── UnstructuredAPI.py │ │ │ ├── UpstageDocumentParse.py │ │ │ └── __init__.py │ │ ├── retriever/ │ │ │ ├── WindowRetriever.py │ │ │ └── __init__.py │ │ ├── types.py │ │ └── util.py │ ├── server/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── cli.py │ │ ├── frontend/ │ │ │ └── out/ │ │ │ ├── 404.html │ │ │ ├── _next/ │ │ │ │ └── static/ │ │ │ │ ├── -4xCNh8fW_auOZGuG7OPj/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── 30i2FQTbR7Y4f-UfM6hbP/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── 4ajn2kvxlVqvDvSUh7-up/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── 5piNIBwi9EVvWEGUCt1HJ/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── 5rVRk1H0CSx_t9B72OCkV/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── CZvV6ohXKOaM2HZQjSr_e/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── EK3SdW_8_2ZVH1NNgqlNv/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── FEflRPdxwBXOroRwOpEz6/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── FcSX1HknjNhe9H0xxw_uy/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── I01L2Qf2M5E8rKySVdfwz/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── KoV36dmdEgYXG0yvTGe3m/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── MYxb6oMzMgqonOwG97TqG/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── QPYBqPy_EgcZIfNhJUgzL/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── SqhqgckvG9-Sxn3_Nq2Rt/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── VZK8jRGqcSpcMf2ZOPpII/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── Y3oNq6sdVkiLcuMaChJwW/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── _LnFD6u1WPj3rRxWv1Mp3/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── b8NLMEMd7UPwgQ6cqzdXK/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── chunks/ │ │ │ │ │ ├── 07115393-160e96bd79d1e493.js │ │ │ │ │ ├── 07115393-8a796b5d068e3710.js │ │ │ │ │ ├── 117-2e3ee50cbb6fc8da.js │ │ │ │ │ ├── 12038df7-a10f1b9476e02872.js │ │ │ │ │ ├── 12038df7-bbbca262706a9194.js │ │ │ │ │ ├── 12038df7-bed05817827b4802.js │ │ │ │ │ ├── 23-2fc6611658866471.js │ │ │ │ │ ├── 23-b149ce429217dd65.js │ │ │ │ │ ├── 39209d7c-1514aaef8caa025b.js │ │ │ │ │ ├── 39209d7c-9eeaeffa37c8b51e.js │ │ │ │ │ ├── 39209d7c-f601708f0876481f.js │ │ │ │ │ ├── 39aecf79-2d831b66f40a6478.js │ │ │ │ │ ├── 39aecf79-474a3d3c48835c08.js │ │ │ │ │ ├── 39aecf79-8d523cb23043db9d.js │ │ │ │ │ ├── 472688b4-2c611c3f7f6780f5.js │ │ │ │ │ ├── 472688b4-f8d4a7fb6705064c.js │ │ │ │ │ ├── 48507feb-c058e15125ba1e58.js │ │ │ │ │ ├── 48507feb-cb362b7475ba2891.js │ │ │ │ │ ├── 48507feb-fb2bbcdbd4adc32f.js │ │ │ │ │ ├── 4f53ad1b-af82feddb1367bb5.js │ │ │ │ │ ├── 4f53ad1b-cf02b0f93cf25527.js │ │ │ │ │ ├── 4f53ad1b-f1821b28dab6f189.js │ │ │ │ │ ├── 4f9d9cd8-0af0a6a5e34c4b59.js │ │ │ │ │ ├── 4f9d9cd8-7217d0ac0bfcc7ce.js │ │ │ │ │ ├── 514-cff62b6f7919676e.js │ │ │ │ │ ├── 5349c568-74bb20b84335457b.js │ │ │ │ │ ├── 5349c568-e26f968c6773abca.js │ │ │ │ │ ├── 737dfa3e-71fd4aa07f7d84a6.js │ │ │ │ │ ├── 789-e4deefde6e1de3c8.js │ │ │ │ │ ├── 864-15201e63d2e174b9.js │ │ │ │ │ ├── 8dc5345f-59beaec077e947c5.js │ │ │ │ │ ├── 8dc5345f-9a36b2be5ef7459c.js │ │ │ │ │ ├── 8dc5345f-dfd13b91b6647830.js │ │ │ │ │ ├── 8e68d877-65c524a5e56473c0.js │ │ │ │ │ ├── 8e68d877-6d32d357377fbcf8.js │ │ │ │ │ ├── 9081a741-3f102f6aee474fd0.js │ │ │ │ │ ├── 9081a741-52789bf6b11470c5.js │ │ │ │ │ ├── 9081a741-560e37099622c351.js │ │ │ │ │ ├── 9081a741-599fa98ab2a737de.js │ │ │ │ │ ├── 9081a741-a7c6599b4221aee8.js │ │ │ │ │ ├── 949-4b7f5a091d97fe2c.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _not-found/ │ │ │ │ │ │ │ ├── page-26d6c07435b6028b.js │ │ │ │ │ │ │ ├── page-aaadc9fa354a98b4.js │ │ │ │ │ │ │ └── page-d0fe2d040a50a096.js │ │ │ │ │ │ ├── layout-213bbf4a992a0fc8.js │ │ │ │ │ │ ├── layout-ad434663ed5b1d3a.js │ │ │ │ │ │ ├── page-09caddcec70c8f21.js │ │ │ │ │ │ ├── page-107cfe4c05eff918.js │ │ │ │ │ │ ├── page-1afb38c40393046f.js │ │ │ │ │ │ ├── page-235aaff141d9263e.js │ │ │ │ │ │ ├── page-25ed1cb73822cf4e.js │ │ │ │ │ │ ├── page-317294c5dcc5eacf.js │ │ │ │ │ │ ├── page-345642b96638188b.js │ │ │ │ │ │ ├── page-3617b8292b21fc34.js │ │ │ │ │ │ ├── page-45b34f73d34e8979.js │ │ │ │ │ │ ├── page-54094d73aee6e252.js │ │ │ │ │ │ ├── page-5e9b74ed5a1be60e.js │ │ │ │ │ │ ├── page-61a9fa55e8011365.js │ │ │ │ │ │ ├── page-63c3d501186e1569.js │ │ │ │ │ │ ├── page-8184afaea67792bd.js │ │ │ │ │ │ ├── page-a985ad06a3dcc355.js │ │ │ │ │ │ ├── page-b8f5daf1c95250b5.js │ │ │ │ │ │ ├── page-c506ad2929c6e6a6.js │ │ │ │ │ │ ├── page-de101b2b6802134a.js │ │ │ │ │ │ ├── page-e15dc604b4004fa4.js │ │ │ │ │ │ ├── page-f09784266b0febdd.js │ │ │ │ │ │ ├── page-f3aef3f90382cf14.js │ │ │ │ │ │ ├── page-f7e98beb8ba64d62.js │ │ │ │ │ │ └── page-fc144a2905205d63.js │ │ │ │ │ ├── b536a0f1-cb79989225eaf318.js │ │ │ │ │ ├── b536a0f1-d8ed58bb9dee20ad.js │ │ │ │ │ ├── b536a0f1-ea1620b5a816a5f5.js │ │ │ │ │ ├── bc9c3264-007b030a3d8b973f.js │ │ │ │ │ ├── bc9c3264-ebee20cfb15b0079.js │ │ │ │ │ ├── ec3863c0-06201a77cd4ecf61.js │ │ │ │ │ ├── ec3863c0-0f36e1c42d4712ac.js │ │ │ │ │ ├── ec3863c0-3299d7812f924fb2.js │ │ │ │ │ ├── ec3863c0-666dbee8e5822499.js │ │ │ │ │ ├── ec3863c0-b59cee7fa657bb4d.js │ │ │ │ │ ├── fd9d1056-3c0a5e4377f054b9.js │ │ │ │ │ ├── fd9d1056-5afc1fda0426cd7c.js │ │ │ │ │ ├── fd9d1056-aa9b9ca480dc9276.js │ │ │ │ │ ├── framework-00a8ba1a63cfdc9e.js │ │ │ │ │ ├── main-0806fb9f50640b69.js │ │ │ │ │ ├── main-ab370d8db521f1bb.js │ │ │ │ │ ├── main-app-6d8fe3bc29305481.js │ │ │ │ │ ├── main-app-8b51a742f61d77e1.js │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── _app-037b5d058bd9a820.js │ │ │ │ │ │ ├── _app-15e2daefa259f0b5.js │ │ │ │ │ │ ├── _error-28b803cb2479b966.js │ │ │ │ │ │ └── _error-6ae619510b1539d6.js │ │ │ │ │ ├── polyfills-42372ed130431b0a.js │ │ │ │ │ ├── polyfills-78c92fac7aa8fdd8.js │ │ │ │ │ ├── webpack-e6d8fc8882b3cc5a.js │ │ │ │ │ └── webpack-f81a484e456a776b.js │ │ │ │ ├── cpNG_krRh40F8ypWaUA1Y/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── css/ │ │ │ │ │ ├── 0ffc59f004ebeefe.css │ │ │ │ │ ├── 2817a3d3bb800805.css │ │ │ │ │ ├── ae5cf92d392439f8.css │ │ │ │ │ ├── b219313ebc6bfc74.css │ │ │ │ │ ├── b6698fd034c37467.css │ │ │ │ │ ├── b7332ce1649563ef.css │ │ │ │ │ ├── bbb58f872eab5c8f.css │ │ │ │ │ ├── d919237d8b9336c0.css │ │ │ │ │ ├── fb11073f70ca561d.css │ │ │ │ │ └── fd8d77da4d075ee8.css │ │ │ │ ├── gjEH1UGrJtEx0lJhUhCoG/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── ifjjNsXVlVkzB0f2yWOlr/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── loIKTVc-LZ1tLrqnZ0_At/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── pR7o7Axy7wuvopYTQQ4gp/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── ppWjoMOwBDfvgLeNC4RNs/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── sJVEctNLIfCe2KAU81egg/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ ├── tVocASfF6DGpJwQWyOdO9/ │ │ │ │ │ ├── _buildManifest.js │ │ │ │ │ └── _ssgManifest.js │ │ │ │ └── yPC90wje_7V701wv-Jubb/ │ │ │ │ ├── _buildManifest.js │ │ │ │ └── _ssgManifest.js │ │ │ ├── alps_field_1k.hdr │ │ │ ├── cloudy.hdr │ │ │ ├── index.html │ │ │ ├── index.txt │ │ │ ├── macbook.gltf │ │ │ ├── shaders/ │ │ │ │ ├── includes/ │ │ │ │ │ └── simplexNoise4d.glsl │ │ │ │ └── wobble/ │ │ │ │ ├── fragment.glsl │ │ │ │ └── vertex.glsl │ │ │ ├── verba.glb │ │ │ ├── verba.gltf │ │ │ └── weaviate.glb │ │ ├── helpers.py │ │ └── types.py │ ├── tests/ │ │ └── document/ │ │ └── test_document.py │ └── verba_manager.py ├── pypi_commands.sh └── setup.py
Showing preview only (2,773K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (16278 symbols across 169 files)
FILE: frontend/app/components/Chat/ChatConfig.tsx
type ChatConfigProps (line 12) | interface ChatConfigProps {
FILE: frontend/app/components/Chat/ChatInterface.tsx
type ChatInterfaceProps (line 39) | interface ChatInterfaceProps {
FILE: frontend/app/components/Chat/ChatMessage.tsx
type ChatMessageProps (line 20) | interface ChatMessageProps {
method code (line 61) | code({ node, inline, className, children, ...props }) {
FILE: frontend/app/components/Chat/ChatView.tsx
type ChatViewProps (line 16) | interface ChatViewProps {
FILE: frontend/app/components/Chat/StatusLabel.tsx
type StatusLabelProps (line 5) | interface StatusLabelProps {
FILE: frontend/app/components/Document/ChunkView.tsx
type ChunkViewProps (line 19) | interface ChunkViewProps {
method code (line 153) | code({ node, inline, className, children, ...props }) {
FILE: frontend/app/components/Document/ContentView.tsx
type ContentViewProps (line 25) | interface ContentViewProps {
method code (line 132) | code({ node, inline, className, children, ...props }) {
method code (line 188) | code({ node, inline, className, children, ...props }) {
FILE: frontend/app/components/Document/DocumentExplorer.tsx
type DocumentExplorerProps (line 30) | interface DocumentExplorerProps {
FILE: frontend/app/components/Document/DocumentMetaView.tsx
type DocumentMetaViewProps (line 7) | interface DocumentMetaViewProps {
FILE: frontend/app/components/Document/DocumentSearch.tsx
type DocumentSearchComponentProps (line 17) | interface DocumentSearchComponentProps {
FILE: frontend/app/components/Document/DocumentView.tsx
type DocumentViewProps (line 8) | interface DocumentViewProps {
FILE: frontend/app/components/Document/VectorView.tsx
type VectorViewProps (line 159) | interface VectorViewProps {
function calculateMinMax (line 213) | function calculateMinMax(values: number[]): { min: number; max: number } {
function selectColor (line 303) | function selectColor(index: number): string {
FILE: frontend/app/components/Document/util.ts
function splitDocument (line 5) | function splitDocument(
function normalize (line 101) | function normalize(value: number, min: number, max: number): number {
function vectorToColor (line 106) | function vectorToColor(
FILE: frontend/app/components/Ingestion/BasicSettingView.tsx
type BasicSettingViewProps (line 21) | interface BasicSettingViewProps {
function renderLabelBoxes (line 170) | function renderLabelBoxes(fileData: FileData) {
FILE: frontend/app/components/Ingestion/ComponentView.tsx
type ComponentViewProps (line 103) | interface ComponentViewProps {
function renderComponents (line 130) | function renderComponents(rag_config: RAGConfig) {
function renderConfigOptions (line 147) | function renderConfigOptions(rag_config: RAGConfig, configKey: string) {
FILE: frontend/app/components/Ingestion/ConfigurationView.tsx
type ConfigurationViewProps (line 24) | interface ConfigurationViewProps {
FILE: frontend/app/components/Ingestion/FileComponent.tsx
type FileComponentProps (line 13) | interface FileComponentProps {
FILE: frontend/app/components/Ingestion/FileSelectionView.tsx
type FileSelectionViewProps (line 22) | interface FileSelectionViewProps {
function arrayBufferToBase64 (line 183) | function arrayBufferToBase64(buffer: ArrayBuffer): string {
function readFileContent (line 193) | function readFileContent(file: File): Promise<string> {
FILE: frontend/app/components/Ingestion/IngestionView.tsx
type IngestionViewProps (line 16) | interface IngestionViewProps {
FILE: frontend/app/components/Login/GettingStarted.tsx
type GettingStartedComponentProps (line 10) | interface GettingStartedComponentProps {
FILE: frontend/app/components/Login/LoginView.tsx
type LoginViewProps (line 129) | interface LoginViewProps {
FILE: frontend/app/components/Navigation/InfoComponent.tsx
type InfoComponentProps (line 7) | interface InfoComponentProps {
FILE: frontend/app/components/Navigation/NavButton.tsx
type NavbarButtonProps (line 7) | interface NavbarButtonProps {
FILE: frontend/app/components/Navigation/NavbarComponent.tsx
type NavbarProps (line 19) | interface NavbarProps {
FILE: frontend/app/components/Navigation/StatusMessenger.tsx
type StatusMessengerProps (line 12) | interface StatusMessengerProps {
FILE: frontend/app/components/Navigation/UserModal.tsx
type UserModalComponentProps (line 5) | interface UserModalComponentProps {
FILE: frontend/app/components/Navigation/VerbaButton.tsx
type VerbaButtonProps (line 6) | interface VerbaButtonProps {
FILE: frontend/app/components/Navigation/util.ts
function getGitHubStars (line 1) | async function getGitHubStars(): Promise<any> {
FILE: frontend/app/components/Settings/InfoView.tsx
type InfoViewProps (line 12) | interface InfoViewProps {
FILE: frontend/app/components/Settings/SettingsComponent.tsx
type SettingsComponentProps (line 29) | interface SettingsComponentProps {
function isTextFieldSetting (line 111) | function isTextFieldSetting(setting: any): setting is TextFieldSetting {
function isImageFieldSetting (line 115) | function isImageFieldSetting(setting: any): setting is ImageFieldSetting {
function isCheckboxSetting (line 119) | function isCheckboxSetting(setting: any): setting is CheckboxSetting {
function isColorSetting (line 123) | function isColorSetting(setting: any): setting is ColorSetting {
function isSelectSetting (line 127) | function isSelectSetting(setting: any): setting is SelectSetting {
function isNumberFieldSetting (line 131) | function isNumberFieldSetting(setting: any): setting is NumberFieldSetti...
FILE: frontend/app/components/Settings/SettingsView.tsx
type SettingsViewProps (line 21) | interface SettingsViewProps {
FILE: frontend/app/components/Settings/SuggestionView.tsx
type SuggestionViewProps (line 14) | interface SuggestionViewProps {
FILE: frontend/app/layout.tsx
function RootLayout (line 9) | function RootLayout({
FILE: frontend/app/page.tsx
function Home (line 34) | function Home() {
FILE: frontend/app/types.ts
type Credentials (line 1) | type Credentials = {
type DocumentFilter (line 8) | type DocumentFilter = {
type UserConfig (line 13) | type UserConfig = {
type ConnectPayload (line 17) | type ConnectPayload = {
type StatusMessage (line 26) | type StatusMessage = {
type Suggestion (line 32) | type Suggestion = {
type SuggestionsPayload (line 38) | type SuggestionsPayload = {
type AllSuggestionsPayload (line 42) | type AllSuggestionsPayload = {
type StatusPayload (line 47) | type StatusPayload = {
type HealthPayload (line 55) | type HealthPayload = {
type QueryPayload (line 66) | type QueryPayload = {
type DocumentScore (line 72) | type DocumentScore = {
type ChunkScore (line 79) | type ChunkScore = {
type Status (line 86) | type Status = {
type SchemaStatus (line 90) | type SchemaStatus = {
type RAGConfigResponse (line 94) | type RAGConfigResponse = {
type UserConfigResponse (line 99) | type UserConfigResponse = {
type ThemeConfigResponse (line 104) | type ThemeConfigResponse = {
type DatacountResponse (line 110) | type DatacountResponse = {
type LabelsResponse (line 113) | type LabelsResponse = {
type ImportResponse (line 117) | type ImportResponse = {
type ConsoleMessage (line 121) | type ConsoleMessage = {
type RAGConfig (line 126) | type RAGConfig = {
type RAGComponentClass (line 130) | type RAGComponentClass = {
type RAGComponent (line 135) | type RAGComponent = {
type RAGComponentConfig (line 139) | type RAGComponentConfig = {
type ConfigSetting (line 150) | type ConfigSetting = {
type RAGSetting (line 157) | type RAGSetting = {
type FileData (line 161) | type FileData = {
type StatusReportMap (line 190) | type StatusReportMap = {
type StatusReport (line 194) | type StatusReport = {
type CreateNewDocument (line 213) | type CreateNewDocument = {
type FileMap (line 249) | type FileMap = {
type MetaData (line 253) | type MetaData = {
type DocumentChunk (line 259) | type DocumentChunk = {
type DocumentPayload (line 268) | type DocumentPayload = {
type NodeInfo (line 273) | type NodeInfo = {
type NodePayload (line 280) | type NodePayload = {
type CollectionInfo (line 287) | type CollectionInfo = {
type CollectionPayload (line 292) | type CollectionPayload = {
type MetadataPayload (line 297) | type MetadataPayload = {
type ChunksPayload (line 303) | type ChunksPayload = {
type ChunkPayload (line 308) | type ChunkPayload = {
type ContentPayload (line 313) | type ContentPayload = {
type ContentSnippet (line 319) | type ContentSnippet = {
type VectorsPayload (line 326) | type VectorsPayload = {
type VerbaDocument (line 335) | type VerbaDocument = {
type VerbaChunk (line 345) | type VerbaChunk = {
type DocumentsPreviewPayload (line 355) | type DocumentsPreviewPayload = {
type DocumentPreview (line 362) | type DocumentPreview = {
type FormattedDocument (line 368) | type FormattedDocument = {
type VectorGroup (line 374) | type VectorGroup = {
type VectorChunk (line 379) | type VectorChunk = {
type VerbaVector (line 385) | type VerbaVector = {
type DataCountPayload (line 391) | type DataCountPayload = {
type Segment (line 395) | type Segment =
type Message (line 399) | interface Message {
type TextFieldSetting (line 409) | interface TextFieldSetting {
type NumberFieldSetting (line 415) | interface NumberFieldSetting {
type ImageFieldSetting (line 421) | interface ImageFieldSetting {
type CheckboxSetting (line 427) | interface CheckboxSetting {
type ColorSetting (line 433) | interface ColorSetting {
type SelectSetting (line 439) | interface SelectSetting {
type Theme (line 462) | interface Theme {
type Themes (line 649) | interface Themes {
FILE: frontend/app/util.ts
type FontKey (line 9) | type FontKey = "Inter" | "Plus_Jakarta_Sans" | "Open_Sans" | "PT_Mono";
function deepCopyRAGConfig (line 35) | function deepCopyRAGConfig(config: RAGConfig): RAGConfig {
function arrayBufferToBase64 (line 46) | function arrayBufferToBase64(buffer: ArrayBuffer): string {
FILE: frontend/next.config.js
method redirects (line 11) | async redirects() {
FILE: goldenverba/components/chunk.py
class Chunk (line 4) | class Chunk:
method __init__ (line 5) | def __init__(
method to_json (line 24) | def to_json(self) -> dict:
method from_json (line 39) | def from_json(cls, data: dict):
FILE: goldenverba/components/chunking/CodeChunker.py
class CodeChunker (line 16) | class CodeChunker(Chunker):
method __init__ (line 21) | def __init__(self):
method chunk (line 47) | async def chunk(
FILE: goldenverba/components/chunking/HTMLChunker.py
class HTMLChunker (line 12) | class HTMLChunker(Chunker):
method __init__ (line 17) | def __init__(self):
method chunk (line 23) | async def chunk(
FILE: goldenverba/components/chunking/JSONChunker.py
class JSONChunker (line 17) | class JSONChunker(Chunker):
method __init__ (line 22) | def __init__(self):
method chunk (line 36) | async def chunk(
FILE: goldenverba/components/chunking/MarkdownChunker.py
function get_header_values (line 20) | def get_header_values(
class MarkdownChunker (line 37) | class MarkdownChunker(Chunker):
method __init__ (line 42) | def __init__(self):
method chunk (line 50) | async def chunk(
FILE: goldenverba/components/chunking/RecursiveChunker.py
class RecursiveChunker (line 13) | class RecursiveChunker(Chunker):
method __init__ (line 18) | def __init__(self):
method chunk (line 58) | async def chunk(
FILE: goldenverba/components/chunking/SemanticChunker.py
class SemanticChunker (line 17) | class SemanticChunker(Chunker):
method __init__ (line 22) | def __init__(self):
method chunk (line 44) | async def chunk(
method combine_sentences (line 144) | def combine_sentences(self, sentences, buffer_size=1):
method calculate_cosine_distances (line 174) | def calculate_cosine_distances(self, sentences):
FILE: goldenverba/components/chunking/SentenceChunker.py
class SentenceChunker (line 10) | class SentenceChunker(Chunker):
method __init__ (line 15) | def __init__(self):
method chunk (line 34) | async def chunk(
FILE: goldenverba/components/chunking/TokenChunker.py
class TokenChunker (line 10) | class TokenChunker(Chunker):
method __init__ (line 15) | def __init__(self):
method chunk (line 34) | async def chunk(
FILE: goldenverba/components/chunking/chunking_examples.py
function run_token_chunker (line 6) | async def run_token_chunker():
FILE: goldenverba/components/document.py
function load_nlp_for_language (line 11) | def load_nlp_for_language(language: str):
function detect_language (line 33) | def detect_language(text: str) -> str:
class Document (line 46) | class Document:
method __init__ (line 47) | def __init__(
method to_json (line 90) | def to_json(document) -> dict:
method from_json (line 105) | def from_json(doc_dict: dict, nlp):
function create_document (line 133) | def create_document(content: str, fileConfig: FileConfig) -> Document:
FILE: goldenverba/components/embedding/CohereEmbedder.py
class CohereEmbedder (line 13) | class CohereEmbedder(Embedding):
method __init__ (line 18) | def __init__(self):
method vectorize (line 40) | async def vectorize(self, config: dict, content: list[str]) -> list[fl...
function get_models (line 72) | def get_models(url: str, token: str, model_type: str):
FILE: goldenverba/components/embedding/GoogleEmbedder.py
class GoogleEmbedder (line 6) | class GoogleEmbedder(Embedder):
method __init__ (line 11) | def __init__(self):
method embed (line 18) | def embed(
FILE: goldenverba/components/embedding/OllamaEmbedder.py
class OllamaEmbedder (line 12) | class OllamaEmbedder(Embedding):
method __init__ (line 14) | def __init__(self):
method vectorize (line 30) | async def vectorize(self, config: dict, content: list[str]) -> list[fl...
function get_models (line 44) | def get_models(url: str):
FILE: goldenverba/components/embedding/OpenAIEmbedder.py
class OpenAIEmbedder (line 14) | class OpenAIEmbedder(Embedding):
method __init__ (line 17) | def __init__(self):
method vectorize (line 65) | async def vectorize(self, config: dict, content: List[str]) -> List[Li...
method get_models (line 125) | def get_models(token: str, url: str) -> List[str]:
FILE: goldenverba/components/embedding/SentenceTransformersEmbedder.py
class SentenceTransformersEmbedder (line 10) | class SentenceTransformersEmbedder(Embedding):
method __init__ (line 15) | def __init__(self):
method vectorize (line 36) | async def vectorize(self, config: dict, content: list[str]) -> list[fl...
FILE: goldenverba/components/embedding/UpstageEmbedder.py
class UpstageEmbedder (line 14) | class UpstageEmbedder(Embedding):
method __init__ (line 17) | def __init__(self):
method vectorize (line 55) | async def vectorize(self, config: dict, content: List[str]) -> List[Li...
method get_models (line 107) | def get_models(token: str, url: str) -> List[str]:
FILE: goldenverba/components/embedding/VoyageAIEmbedder.py
class VoyageAIEmbedder (line 14) | class VoyageAIEmbedder(Embedding):
method __init__ (line 17) | def __init__(self):
method vectorize (line 53) | async def vectorize(self, config: dict, content: List[str]) -> List[Li...
method get_models (line 104) | def get_models(token: str, url: str) -> List[str]:
FILE: goldenverba/components/embedding/WeaviateEmbedder.py
class WeaviateEmbedder (line 11) | class WeaviateEmbedder(Embedding):
method __init__ (line 13) | def __init__(self):
method vectorize (line 48) | async def vectorize(self, config: dict, content: list[str]) -> list[fl...
FILE: goldenverba/components/generation/AnthrophicGenerator.py
class AnthropicGenerator (line 12) | class AnthropicGenerator(Generator):
method __init__ (line 17) | def __init__(self):
method generate_stream (line 41) | async def generate_stream(
method prepare_messages (line 107) | def prepare_messages(
FILE: goldenverba/components/generation/CohereGenerator.py
class CohereGenerator (line 12) | class CohereGenerator(Generator):
method __init__ (line 17) | def __init__(self):
method generate_stream (line 41) | async def generate_stream(
method _prepare_messages (line 94) | def _prepare_messages(
method _process_response (line 120) | def _process_response(line: bytes) -> Dict:
method _error_response (line 131) | def _error_response(message: str) -> Dict:
FILE: goldenverba/components/generation/GeminiGenerator.py
class GeminiGenerator (line 18) | class GeminiGenerator(Generator):
method __init__ (line 23) | def __init__(self):
method generate_stream (line 36) | async def generate_stream(
method prepare_messages (line 101) | def prepare_messages(
method ensure_user_model_alteration (line 140) | def ensure_user_model_alteration(self, messages):
FILE: goldenverba/components/generation/GroqGenerator.py
class GroqGenerator (line 24) | class GroqGenerator(Generator):
method __init__ (line 29) | def __init__(self):
method generate_stream (line 58) | async def generate_stream(
method _prepare_messages (line 108) | def _prepare_messages(
method _process_response (line 132) | def _process_response(line: bytes) -> Dict[str, str]:
method _error_response (line 162) | def _error_response(message: str) -> Dict[str, str]:
function get_models (line 167) | def get_models(url: str, api_key: str) -> List[str]:
function filter_models (line 190) | def filter_models(models: List[str]) -> List[str]:
FILE: goldenverba/components/generation/NovitaGenerator.py
class NovitaGenerator (line 16) | class NovitaGenerator(Generator):
method __init__ (line 21) | def __init__(self):
method generate_stream (line 44) | async def generate_stream(
method prepare_messages (line 105) | def prepare_messages(
function get_models (line 128) | def get_models():
FILE: goldenverba/components/generation/OllamaGenerator.py
class OllamaGenerator (line 12) | class OllamaGenerator(Generator):
method __init__ (line 13) | def __init__(self):
method generate_stream (line 31) | async def generate_stream(
method _prepare_messages (line 62) | def _prepare_messages(
method _process_response (line 84) | def _process_response(line: bytes) -> Dict:
method _empty_response (line 100) | def _empty_response() -> Dict:
method _error_response (line 105) | def _error_response(message: str) -> Dict:
FILE: goldenverba/components/generation/OpenAIGenerator.py
class OpenAIGenerator (line 14) | class OpenAIGenerator(Generator):
method __init__ (line 19) | def __init__(self):
method generate_stream (line 52) | async def generate_stream(
method prepare_messages (line 105) | def prepare_messages(
method get_models (line 127) | def get_models(self, token: str, url: str) -> List[str]:
FILE: goldenverba/components/generation/UpstageGenerator.py
class UpstageGenerator (line 15) | class UpstageGenerator(Generator):
method __init__ (line 25) | def __init__(self):
method generate_stream (line 55) | async def generate_stream(
method prepare_messages (line 110) | def prepare_messages(
FILE: goldenverba/components/interfaces.py
class VerbaComponent (line 15) | class VerbaComponent:
method __init__ (line 20) | def __init__(self):
method get_meta (line 28) | def get_meta(self, envs, libs) -> dict:
method check_available (line 45) | def check_available(self, envs, libs) -> bool:
class Reader (line 57) | class Reader(VerbaComponent):
method __init__ (line 62) | def __init__(self):
method load (line 67) | async def load(self, config: dict, fileConfig: FileConfig) -> list[Doc...
class Embedding (line 75) | class Embedding(VerbaComponent):
method __init__ (line 80) | def __init__(self):
method vectorize (line 84) | async def vectorize(self, config: dict, content: list[str]) -> list[fl...
class Chunker (line 93) | class Chunker(VerbaComponent):
method __init__ (line 98) | def __init__(self):
method chunk (line 102) | async def chunk(
class Retriever (line 119) | class Retriever(VerbaComponent):
method __init__ (line 124) | def __init__(self):
method retrieve (line 133) | async def retrieve(
class Generator (line 148) | class Generator(VerbaComponent):
method __init__ (line 153) | def __init__(self):
method generate_stream (line 165) | async def generate_stream(
method prepare_messages (line 183) | def prepare_messages(
FILE: goldenverba/components/managers.py
class WeaviateManager (line 161) | class WeaviateManager:
method __init__ (line 162) | def __init__(self):
method connect_to_cluster (line 170) | async def connect_to_cluster(self, w_url, w_key):
method connect_to_docker (line 183) | async def connect_to_docker(self, w_url):
method connect_to_custom (line 192) | async def connect_to_custom(self, host, w_key, port):
method connect_to_embedded (line 219) | async def connect_to_embedded(self):
method connect (line 227) | async def connect(
method disconnect (line 261) | async def disconnect(self, client: WeaviateAsyncClient):
method get_metadata (line 271) | async def get_metadata(self, client: WeaviateAsyncClient):
method verify_collection (line 304) | async def verify_collection(
method verify_embedding_collection (line 319) | async def verify_embedding_collection(self, client: WeaviateAsyncClien...
method verify_cache_collection (line 328) | async def verify_cache_collection(self, client: WeaviateAsyncClient, e...
method verify_embedding_collections (line 337) | async def verify_embedding_collections(
method verify_collections (line 351) | async def verify_collections(
method get_config (line 364) | async def get_config(self, client: WeaviateAsyncClient, uuid: str) -> ...
method set_config (line 373) | async def set_config(self, client: WeaviateAsyncClient, uuid: str, con...
method reset_config (line 386) | async def reset_config(self, client: WeaviateAsyncClient, uuid: str):
method import_document (line 394) | async def import_document(
method exist_document_name (line 450) | async def exist_document_name(self, client: WeaviateAsyncClient, name:...
method delete_document (line 466) | async def delete_document(self, client: WeaviateAsyncClient, uuid: str):
method delete_all_documents (line 488) | async def delete_all_documents(self, client: WeaviateAsyncClient):
method delete_all_configs (line 494) | async def delete_all_configs(self, client: WeaviateAsyncClient):
method delete_all (line 500) | async def delete_all(self, client: WeaviateAsyncClient):
method get_documents (line 506) | async def get_documents(
method get_document (line 560) | async def get_document(
method get_labels (line 577) | async def get_labels(self, client: WeaviateAsyncClient) -> list[str]:
method get_chunk (line 590) | async def get_chunk(
method get_chunks (line 602) | async def get_chunks(
method get_vectors (line 633) | async def get_vectors(
method hybrid_chunks (line 761) | async def hybrid_chunks(
method get_chunk_by_ids (line 813) | async def get_chunk_by_ids(
method add_suggestion (line 833) | async def add_suggestion(self, client: WeaviateAsyncClient, query: str):
method retrieve_suggestions (line 853) | async def retrieve_suggestions(
method retrieve_all_suggestions (line 873) | async def retrieve_all_suggestions(
method delete_suggestions (line 899) | async def delete_suggestions(self, client: WeaviateAsyncClient, uuid: ...
method delete_all_suggestions (line 906) | async def delete_all_suggestions(self, client: WeaviateAsyncClient):
method get_datacount (line 916) | async def get_datacount(
method get_chunk_count (line 937) | async def get_chunk_count(
class ReaderManager (line 953) | class ReaderManager:
method __init__ (line 954) | def __init__(self):
method load (line 957) | async def load(
class ChunkerManager (line 998) | class ChunkerManager:
method __init__ (line 999) | def __init__(self):
method chunk (line 1004) | async def chunk(
class EmbeddingManager (line 1058) | class EmbeddingManager:
method __init__ (line 1059) | def __init__(self):
method vectorize (line 1064) | async def vectorize(
method batch_vectorize (line 1125) | async def batch_vectorize(
method vectorize_query (line 1161) | async def vectorize_query(
class RetrieverManager (line 1175) | class RetrieverManager:
method __init__ (line 1176) | def __init__(self):
method retrieve (line 1181) | async def retrieve(
class GeneratorManager (line 1219) | class GeneratorManager:
method __init__ (line 1220) | def __init__(self):
method generate_stream (line 1225) | async def generate_stream(self, rag_config, query, context, conversati...
method truncate_conversation_dicts (line 1246) | def truncate_conversation_dicts(
FILE: goldenverba/components/reader/AssemblyAIAPI.py
class AssemblyAIReader (line 17) | class AssemblyAIReader(Reader):
method __init__ (line 22) | def __init__(self):
method load (line 85) | async def load(
FILE: goldenverba/components/reader/BasicReader.py
class BasicReader (line 50) | class BasicReader(Reader):
method __init__ (line 55) | def __init__(self):
method load (line 98) | async def load(self, config: dict, fileConfig: FileConfig) -> list[Doc...
method load_text_file (line 139) | async def load_text_file(self, decoded_bytes: bytes) -> str:
method load_json_file (line 147) | async def load_json_file(
method load_pdf_file (line 162) | async def load_pdf_file(self, decoded_bytes: bytes) -> str:
method load_docx_file (line 170) | async def load_docx_file(self, decoded_bytes: bytes) -> str:
method load_csv_file (line 180) | async def load_csv_file(self, decoded_bytes: bytes) -> str:
method load_excel_file (line 220) | async def load_excel_file(self, decoded_bytes: bytes, extension: str) ...
FILE: goldenverba/components/reader/FirecrawlReader.py
class FirecrawlReader (line 17) | class FirecrawlReader(Reader):
method __init__ (line 22) | def __init__(self):
method load (line 50) | async def load(self, config: dict, fileConfig: FileConfig) -> List[Doc...
method handle_response (line 91) | async def handle_response(self, response: aiohttp.ClientResponse) -> d...
method firecrawl (line 100) | async def firecrawl(
method scrape_url (line 139) | async def scrape_url(
method handle_crawl (line 163) | async def handle_crawl(
method poll_job_status (line 190) | async def poll_job_status(
FILE: goldenverba/components/reader/GitReader.py
class GitReader (line 17) | class GitReader(Reader):
method __init__ (line 22) | def __init__(self):
method load (line 70) | async def load(self, config: dict, fileConfig: FileConfig) -> list[Doc...
method get_token (line 128) | def get_token(self, config: dict, platform: str) -> str:
method fetch_docs_github (line 134) | async def fetch_docs_github(
method fetch_docs_gitlab (line 149) | async def fetch_docs_gitlab(self, url: str, token: str, reader: Reader...
method download_file_github (line 162) | async def download_file_github(
method download_file_gitlab (line 179) | async def download_file_gitlab(
method get_headers (line 202) | def get_headers(self, token: str, platform: str) -> dict:
FILE: goldenverba/components/reader/HTMLReader.py
class HTMLReader (line 21) | class HTMLReader(Reader):
method __init__ (line 27) | def __init__(self):
method load (line 62) | async def load(self, config: dict, fileConfig: FileConfig) -> list[Doc...
method process_url (line 92) | async def process_url(
method fetch_html_and_convert (line 150) | async def fetch_html_and_convert(
method extract_links (line 181) | def extract_links(self, html_content: str, base_url: str) -> List[str]:
FILE: goldenverba/components/reader/UnstructuredAPI.py
class UnstructuredReader (line 16) | class UnstructuredReader(Reader):
method __init__ (line 21) | def __init__(self):
method load (line 53) | async def load(
FILE: goldenverba/components/reader/UpstageDocumentParse.py
class UpstageDocumentParseReader (line 16) | class UpstageDocumentParseReader(Reader):
method __init__ (line 21) | def __init__(self):
method load (line 43) | async def load(
FILE: goldenverba/components/retriever/WindowRetriever.py
class WindowRetriever (line 5) | class WindowRetriever(Retriever):
method __init__ (line 10) | def __init__(self):
method retrieve (line 46) | async def retrieve(
method combine_context (line 206) | def combine_context(self, documents: list[dict]) -> str:
FILE: goldenverba/components/types.py
class InputConfig (line 5) | class InputConfig(BaseModel):
FILE: goldenverba/components/util.py
function standardize_data (line 5) | def standardize_data(X):
function compute_covariance_matrix (line 11) | def compute_covariance_matrix(X):
function eigen_decomposition (line 15) | def eigen_decomposition(C):
function sort_eigenvalues_eigenvectors (line 20) | def sort_eigenvalues_eigenvectors(eigenvalues, eigenvectors):
function select_top_k_components (line 27) | def select_top_k_components(eigenvectors, k):
function transform_data (line 31) | def transform_data(X, components):
function pca (line 35) | def pca(X, k):
function get_environment (line 49) | def get_environment(config, value: str, env: str, error_msg: str) -> str:
function get_token (line 58) | def get_token(env: str, default: str = None) -> str:
FILE: goldenverba/server/api.py
function lifespan (line 63) | async def lifespan(app: FastAPI):
function check_same_origin (line 83) | async def check_same_origin(request: Request, call_next):
function serve_frontend (line 132) | async def serve_frontend():
function health_check (line 141) | async def health_check():
function connect_to_verba (line 162) | async def connect_to_verba(payload: ConnectPayload):
function websocket_generate_stream (line 204) | async def websocket_generate_stream(websocket: WebSocket):
function websocket_import_files (line 239) | async def websocket_import_files(websocket: WebSocket):
function retrieve_rag_config (line 272) | async def retrieve_rag_config(payload: Credentials):
function update_rag_config (line 292) | async def update_rag_config(payload: SetRAGConfigPayload):
function retrieve_user_config (line 320) | async def retrieve_user_config(payload: Credentials):
function update_user_config (line 340) | async def update_user_config(payload: SetUserConfigPayload):
function retrieve_theme_config (line 370) | async def retrieve_theme_config(payload: Credentials):
function update_theme_config (line 391) | async def update_theme_config(payload: SetThemeConfigPayload):
function query (line 425) | async def query(payload: QueryPayload):
function get_document (line 449) | async def get_document(payload: GetDocumentPayload):
function get_document_count (line 493) | async def get_document_count(payload: DatacountPayload):
function get_labels (line 515) | async def get_labels(payload: Credentials):
function get_content (line 535) | async def get_content(payload: GetContentPayload):
function get_vectors (line 557) | async def get_vectors(payload: GetVectorPayload):
function get_chunks (line 581) | async def get_chunks(payload: ChunksPayload):
function get_chunk (line 605) | async def get_chunk(payload: GetChunkPayload):
function get_all_documents (line 629) | async def get_all_documents(payload: SearchQueryPayload):
function delete_document (line 665) | async def delete_document(payload: GetDocumentPayload):
function reset_verba (line 685) | async def reset_verba(payload: ResetPayload):
function get_meta (line 711) | async def get_meta(payload: Credentials):
function get_suggestions (line 738) | async def get_suggestions(payload: GetSuggestionsPayload):
function get_all_suggestions (line 758) | async def get_all_suggestions(payload: GetAllSuggestionsPayload):
function delete_suggestion (line 782) | async def delete_suggestion(payload: DeleteSuggestionPayload):
FILE: goldenverba/server/cli.py
function cli (line 13) | def cli():
function start (line 39) | def start(port, host, prod, workers):
function reset (line 73) | def reset(url, api_key, deployment, full_reset):
FILE: goldenverba/server/frontend/out/_next/static/chunks/07115393-160e96bd79d1e493.js
function r (line 1) | function r(t){return(0,c.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child...
function u (line 1) | function u(t){return(0,c.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child...
FILE: goldenverba/server/frontend/out/_next/static/chunks/07115393-8a796b5d068e3710.js
function r (line 1) | function r(t){return(0,c.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child...
function u (line 1) | function u(t){return(0,c.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child...
FILE: goldenverba/server/frontend/out/_next/static/chunks/117-2e3ee50cbb6fc8da.js
function n (line 1) | function n(){return""}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function u (line 1) | function u(e,t){return(0,o.normalizePathTrailingSlash)((0,r.addPathPrefi...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function n (line 1) | function n(e){var t,n;t=self.__next_s,n=()=>{e()},t&&t.length?t.reduce((...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function o (line 1) | async function o(e,t){let n=(0,r.getServerActionDispatcher)();if(!n)thro...
function P (line 1) | function P(e){if(0===e[0])r=[];else if(1===e[0]){if(!r)throw Error("Unex...
method start (line 1) | start(e){r&&(r.forEach(t=>{e.enqueue(b.encode(t))}),g&&!m&&(e.close(),m=...
function w (line 1) | function w(){return(0,c.use)(E)}
function M (line 1) | function M(e){let{children:t}=e;return t}
function x (line 1) | function x(){let e=(0,y.createMutableActionQueue)(),t=(0,a.jsx)(T,{child...
function l (line 1) | function l(e){let{tree:t}=e,[n,l]=(0,r.useState)(null);(0,r.useEffect)((...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function E (line 1) | function E(){return S}
function T (line 1) | function T(e){let t=new URL(e,location.origin);if(t.searchParams.delete(...
function M (line 1) | function M(e){return e.origin!==window.location.origin}
function x (line 1) | function x(e){let{appRouterState:t,sync:n}=e;return(0,u.useInsertionEffe...
function C (line 1) | function C(){return{lazyData:null,rsc:null,prefetchRsc:null,head:null,pr...
function A (line 1) | function A(e){null==e&&(e={});let t=window.history.state,n=null==t?void ...
function N (line 1) | function N(e){let{headCacheNode:t}=e,n=null!==t?t.head:null,r=null!==t?t...
function D (line 1) | function D(e){let t,{buildId:n,initialHead:r,initialTree:i,urlParts:f,in...
function I (line 1) | function I(e){let{globalErrorComponent:t,...n}=e;return(0,o.jsx)(f.Error...
function u (line 1) | function u(e){let t=o.staticGenerationAsyncStorage.getStore();if((null==...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function u (line 1) | function u(e){let{Component:t,props:n}=e;return n.searchParams=(0,o.crea...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function s (line 1) | function s(e){let{error:t}=e,n=i.staticGenerationAsyncStorage.getStore()...
class f (line 1) | class f extends u.default.Component{static getDerivedStateFromError(e){i...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(e){let{error:t}=e,n=null==t?void 0:t.digest;return(0,o.jsxs)(...
function h (line 1) | function h(e){let{errorComponent:t,errorStyles:n,errorScripts:r,children...
class r (line 1) | class r extends Error{constructor(e){super("Dynamic server usage: "+e),t...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&"string"...
function u (line 1) | function u(e){return e&&e.digest&&((0,o.isRedirectError)(e)||(0,r.isNotF...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function m (line 1) | function m(e,t){let n=e.getBoundingClientRect();return n.top>=0&&n.top<=t}
class R (line 1) | class R extends l.default.Component{componentDidMount(){this.handlePoten...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 1) | function P(e){let{segmentPath:t,children:n}=e,r=(0,l.useContext)(i.Globa...
function j (line 1) | function j(e){let{parallelRouterKey:t,url:n,childNodes:r,segmentPath:o,t...
function O (line 1) | function O(e){let{children:t,hasLoading:n,loading:r,loadingStyles:o,load...
function S (line 1) | function S(e){let{parallelRouterKey:t,segmentPath:n,error:r,errorStyles:...
function s (line 1) | function s(){let e=(0,r.useContext)(u.SearchParamsContext),t=(0,r.useMem...
function f (line 1) | function f(){return(0,r.useContext)(u.PathnameContext)}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(){let e=(0,r.useContext)(o.AppRouterContext);if(null===e)thro...
function p (line 1) | function p(){return(0,r.useContext)(u.PathParamsContext)}
function h (line 1) | function h(e){void 0===e&&(e="children");let t=(0,r.useContext)(o.Layout...
function y (line 1) | function y(e){void 0===e&&(e="children");let t=h(e);if(!t||0===t.length)...
class u (line 1) | class u extends Error{constructor(){super("Method unavailable on `Readon...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
class l (line 1) | class l extends URLSearchParams{append(){throw new u}delete(){throw new ...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
class c (line 1) | class c extends u.default.Component{componentDidCatch(){}static getDeriv...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{notFound:t,notFoundStyles:n,asNotFound:r,children:a}=e...
function r (line 1) | function r(){let e=Error(n);throw e.digest=n,e}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest...
class c (line 1) | class c{enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){if(void 0===e&&(e=!1),(r._(this,l)[l]<r._(this,u)[u]||e)&&...
function i (line 1) | function i(e){let{redirect:t,reset:n,redirectType:r}=e,o=(0,l.useRouter)...
class c (line 1) | class c extends u.default.Component{static getDerivedStateFromError(e){i...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{children:t}=e,n=(0,l.useRouter)();return(0,o.jsx)(c,{r...
function c (line 1) | function c(e,t,n){void 0===n&&(n=a.RedirectStatusCode.TemporaryRedirect)...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.get...
function f (line 1) | function f(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.get...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"...
function p (line 1) | function p(e){return d(e)?e.digest.split(";",3)[2]:null}
function h (line 1) | function h(e){if(!d(e))throw Error("Not a redirect error");return e.dige...
function y (line 1) | function y(e){if(!d(e))throw Error("Not a redirect error");return Number...
function a (line 1) | function a(){let e=(0,u.useContext)(l.TemplateContext);return(0,o.jsx)(o...
function o (line 1) | function o(e){let t=r.requestAsyncStorage.getStore();if(t)return t;throw...
function u (line 1) | function u(e,t,n,u){let[l,a,i]=n.slice(-3);if(null===a)return!1;if(3===n...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 1) | function l(e,t,n){let[u,a]=e,[i,c]=t;if(i===r.DEFAULT_SEGMENT_KEY&&u!==r...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function i (line 1) | function i(e){return e.reduce((e,t)=>""===(t=l(t))||(0,o.isGroupSegment)...
function c (line 1) | function c(e){var t;let n=Array.isArray(e[0])?e[0][1]:e[0];if(n===o.DEFA...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){let n=function e(t,n){let[o,l]=t,[i,s]=n,f=a(o),d=a(i);i...
function n (line 1) | function n(e,t){return void 0===t&&(t=!0),e.pathname+e.search+(t?e.hash:...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function c (line 1) | function c(e){var t;let{buildId:n,initialTree:c,initialSeedData:s,urlPar...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function o (line 1) | function o(e,t){return(void 0===t&&(t=!1),Array.isArray(e))?e[0]+"|"+e[1...
function c (line 1) | function c(e){return[(0,o.urlToUrlWithoutFlightMarker)(e).toString(),voi...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | async function s(e,t,n,s,f){let d={[r.RSC_HEADER]:"1",[r.NEXT_ROUTER_STA...
function o (line 1) | function o(e){return void 0!==e}
function u (line 1) | function u(e,t){var n,u,l;let a=null==(u=t.shouldScroll)||u,i=e.nextUrl;...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function o (line 1) | function o(e,t,n){return(0,r.handleExternalUrl)(e,{},e.canonicalUrl,!0)}
function o (line 1) | function o(e,t,n){for(let o in n[1]){let u=n[1][o][0],l=(0,r.createRoute...
function l (line 1) | function l(e,t,n){let r=i(e,t,n);return{route:e,node:r,children:null}}
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e,t){t.then(t=>{for(let n of t[0]){let t=n.slice(0,-3),r=n[n....
function i (line 1) | function i(e,t,n){let r=e[1],o=null!==t?t[1]:null,l=new Map;for(let e in...
function c (line 1) | function c(e,t){let n=e.node;if(null===n)return;let r=e.children;if(null...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t,n){let r=e[1],o=t.parallelRoutes;for(let e in r){let t=r[...
function d (line 1) | function d(e){return e&&e.tag===f}
function p (line 1) | function p(){let e,t;let n=new Promise((n,r)=>{e=n,t=r});return n.status...
function a (line 1) | function a(e,t){let n=(0,r.createHrefFromUrl)(e,!1);return t?t+"%"+n:n}
function i (line 1) | function i(e){let t,{url:n,nextUrl:r,tree:o,buildId:l,prefetchCache:i,ki...
function c (line 1) | function c(e){let{nextUrl:t,tree:n,prefetchCache:r,url:o,kind:l,data:i}=...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{url:t,kind:n,tree:r,nextUrl:i,buildId:c,prefetchCache:...
function f (line 1) | function f(e){for(let[t,n]of e)h(n)===u.PrefetchCacheEntryStatus.expired...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function h (line 1) | function h(e){let{kind:t,prefetchTime:n,lastUsedTime:r}=e;return Date.no...
function o (line 1) | function o(e,t){return function e(t,n,o){if(0===Object.keys(n).length)re...
function n (line 1) | function n(e){return Array.isArray(e)?e[1]:e}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function _ (line 1) | function _(e,t,n,r){return t.mpaNavigation=!0,t.canonicalUrl=n,t.pending...
function v (line 1) | function v(e){let t=[],[n,r]=e;if(0===Object.keys(r).length)return[[n]];...
function a (line 1) | function a(e,t){(0,u.prunePrefetchCache)(e.prefetchCache);let{url:n}=t;r...
function h (line 1) | function h(e,t){let{origin:n}=t,h={},y=e.canonicalUrl,_=e.tree;h.preserv...
function u (line 1) | function u(e,t){var n;let{url:u,tree:l}=t,a=(0,r.createHrefFromUrl)(u),i...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function b (line 1) | async function b(e,t,n){let l,{actionId:a,actionArgs:i}=n,c=await v(i),s...
function g (line 1) | function g(e,t){let{resolve:n,reject:r}=t,o={},u=e.canonicalUrl,_=e.tree...
function f (line 1) | function f(e,t){let{serverResponse:n}=t,[f,d]=n,p={};if(p.preserveCustom...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function l (line 1) | async function l(e){let t=new Set;await a({...e,rootTree:e.updatedTree,f...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | async function a(e){let{state:t,updatedTree:n,updatedCache:u,includeNext...
function p (line 1) | function p(e){return e&&("object"==typeof e||"function"==typeof e)&&"fun...
function l (line 1) | function l(e){let t=r.staticGenerationAsyncStorage.getStore();return t&&...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e){let t=r.staticGenerationAsyncStorage.getStore();return t?t...
class r (line 1) | class r extends Error{constructor(...e){super(...e),this.code=n}}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"code"in e&&e.code===n}
function l (line 1) | function l(e){if(e instanceof Map){let t={};for(let[n,r]of e.entries()){...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e){return(0,o.isThenable)(e)?(0,r.use)(e):e}
function o (line 1) | function o(e){return(0,r.pathHasPrefix)(e,"")}
function o (line 1) | function o(e){let t="function"==typeof reportError?reportError:e=>{windo...
function r (line 1) | function r(e){return e}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function n (line 1) | function n(e,t){var n=e.length;for(e.push(t);0<n;){var r=n-1>>>1,o=e[r];...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 1) | function r(e){return 0===e.length?null:e[0]}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t)...
function u (line 1) | function u(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function R (line 1) | function R(e){for(var t=r(f);null!==t;){if(null===t.callback)o(f);else i...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 1) | function P(e){if(v=!1,R(e),!_){if(null!==r(s))_=!0,C();else{var t=r(f);n...
function w (line 1) | function w(){return!(t.unstable_now()-E<S)}
function T (line 1) | function T(){if(j){var e=t.unstable_now();E=e;var n=!0;try{e:{_=!1,v&&(v...
function C (line 1) | function C(){j||(j=!0,l())}
function A (line 1) | function A(e,n){O=b(function(){e(t.unstable_now())},n)}
function r (line 1) | function r(e){return new URL(e,n).pathname}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return/https?:\/\//.test(e)}
function u (line 1) | function u(e){let t;try{t=new URL(e,n)}catch{}return t}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function c (line 1) | function c(e){return{isDebugSkeleton:e,dynamicAccesses:[]}}
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){let n=(0,a.getPathname)(e.urlPathname);if(!e.isUnstableC...
function f (line 1) | function f(e,t){let n=(0,a.getPathname)(e.urlPathname);if(e.isUnstableCa...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d({reason:e,prerenderState:t,pathname:n}){h(t,e,n)}
function p (line 1) | function p(e,t){e.prerenderState&&h(e.prerenderState,t,e.urlPathname)}
function h (line 1) | function h(e,t,n){v();let r=`Route ${n} needs to bail out of prerenderin...
function y (line 1) | function y(e){return e.dynamicAccesses.length>0}
function _ (line 1) | function _(e){return e.dynamicAccesses.filter(e=>"string"==typeof e.stac...
function v (line 2) | function v(){if(!i)throw Error("Invariant: React.unstable_postpone is no...
function b (line 2) | function b(e){v();let t=new AbortController;try{o.default.unstable_postp...
function o (line 2) | function o(e){let t=r.INTERCEPTION_ROUTE_MARKERS.find(t=>e.startsWith(t)...
function u (line 2) | function u(e){return void 0!==e.split("/").find(e=>o.find(t=>e.startsWit...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){let t,n,u;for(let r of e.split("/"))if(n=o.find(e=>r.start...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
class n (line 2) | class n{static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typ...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCod...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 2) | function r(e){return n(e).toString(36).slice(0,5)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
class r (line 2) | class r extends Error{constructor(e){super("Bail out to client-side rend...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest...
function n (line 2) | function n(e){return e.startsWith("/")?e:"/"+e}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function i (line 2) | function i(e,t){null!==e.pending&&(e.pending=e.pending.next,null!==e.pen...
function c (line 2) | async function c(e){let{actionQueue:t,action:n,setState:r}=e,u=t.state;i...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 2) | function s(){let e={state:null,dispatch:(t,n)=>(function(e,t,n){let r={r...
function o (line 2) | function o(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:n,query:...
function u (line 2) | function u(e){return(0,r.ensureLeadingSlash)(e.split("/").reduce((e,t,n,...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){return e.replace(/\.rsc($|\?)/,"$1")}
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function n (line 2) | function n(e,t){if(void 0===t&&(t={}),t.onlyHashChange){e();return}let n...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){return/Googlebot|Mediapartners-Google|AdsBot-Google|google...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){let t=e.indexOf("#"),n=e.indexOf("?"),r=n>-1&&(t<0||n<t);r...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function o (line 2) | function o(e,t){if("string"!=typeof e)return!1;let{pathname:n}=(0,r.pars...
function n (line 2) | function n(e){return e.replace(/\/$/,"")||"/"}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){return"("===e[0]&&e.endsWith(")")}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function u (line 2) | function u(e){let t=(0,r.useContext)(o);t&&t(e)}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
class r (line 2) | class r{disable(){throw n}getStore(){}run(){throw n}exit(){throw n}enter...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function u (line 2) | function u(){return o?new o:new r}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){var t=n(e);return"function"!=typeof t.then||"fulfilled"===...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 2) | function a(){}
function b (line 2) | function b(e,t,n,r){this.status=e,this.value=t,this.reason=n,this._respo...
function g (line 2) | function g(e){switch(e.status){case"resolved_model":E(e);break;case"reso...
function m (line 2) | function m(e,t){for(var n=0;n<e.length;n++)(0,e[n])(t)}
function R (line 2) | function R(e,t,n){switch(e.status){case"fulfilled":m(t,e.value);break;ca...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 2) | function P(e,t){if("pending"===e.status||"blocked"===e.status){var n=e.r...
function j (line 2) | function j(e,t){if("pending"===e.status||"blocked"===e.status){var n=e.v...
function E (line 2) | function E(e){var t=O,n=S;O=e,S=null;var r=e.value;e.status="cyclic",e.v...
function w (line 2) | function w(e){try{var t=e.value,r=n(t[0]);if(4===t.length&&"function"==t...
function T (line 2) | function T(e,t){e._chunks.forEach(function(e){"pending"===e.status&&P(e,...
function M (line 2) | function M(e,t){var n=e._chunks,r=n.get(t);return r||(r=new b("pending",...
function x (line 2) | function x(e,t){if("resolved_model"===(e=M(e,t)).status&&E(e),"fulfilled...
function C (line 2) | function C(){throw Error('Trying to call a function from "use server" bu...
function A (line 2) | function A(e,t,n,r,o){var u;return(e={_bundlerConfig:e,_moduleLoading:t,...
function N (line 2) | function N(e,t){function r(t){T(e,t)}var c=t.getReader();c.read().then(f...
function r (line 2) | function r(){var n=Array.prototype.slice.call(arguments);return t(e,n)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function i (line 2) | function i(e,t,n){var r,u={},i=null,c=null;for(r in void 0!==n&&(i=""+n)...
function v (line 2) | function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n...
function b (line 2) | function b(){}
function g (line 2) | function g(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n...
function T (line 2) | function T(e,t,r){var o,u={},l=null,a=null;if(null!=t)for(o in void 0!==...
function M (line 2) | function M(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}
function C (line 2) | function C(e,t){var n,r;return"object"==typeof e&&null!==e&&null!=e.key?...
function A (line 2) | function A(){}
function N (line 2) | function N(e,t,o){if(null==e)return e;var u=[],l=0;return!function e(t,o...
function D (line 2) | function D(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t...
function I (line 2) | function I(){return new WeakMap}
function U (line 2) | function U(){return{s:0,v:void 0,o:null,p:null}}
function k (line 2) | function k(){}
function r (line 2) | function r(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw Type...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e){return"__private_"+r+++"_"+e}
function r (line 2) | function r(e){return e&&e.__esModule?e:{default:e}}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function r (line 2) | function r(e){if("function"!=typeof WeakMap)return null;var t=new WeakMa...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=t...
FILE: goldenverba/server/frontend/out/_next/static/chunks/12038df7-a10f1b9476e02872.js
function a (line 1) | function a(t){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
function h (line 1) | function h(t){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
FILE: goldenverba/server/frontend/out/_next/static/chunks/12038df7-bbbca262706a9194.js
function a (line 1) | function a(t){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
function h (line 1) | function h(t){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
FILE: goldenverba/server/frontend/out/_next/static/chunks/12038df7-bed05817827b4802.js
function a (line 1) | function a(t){return(0,c.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
function u (line 1) | function u(t){return(0,c.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
function h (line 1) | function h(t){return(0,c.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
FILE: goldenverba/server/frontend/out/_next/static/chunks/23-2fc6611658866471.js
function n (line 1) | function n(){return""}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function u (line 1) | function u(e,t){return(0,o.normalizePathTrailingSlash)((0,r.addPathPrefi...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function n (line 1) | function n(e){var t,n;t=self.__next_s,n=()=>{e()},t&&t.length?t.reduce((...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function o (line 1) | async function o(e,t){let n=(0,r.getServerActionDispatcher)();if(!n)thro...
function P (line 1) | function P(e){if(0===e[0])r=[];else if(1===e[0]){if(!r)throw Error("Unex...
method start (line 1) | start(e){r&&(r.forEach(t=>{e.enqueue(b.encode(t))}),g&&!m&&(e.close(),m=...
function w (line 1) | function w(){return(0,c.use)(E)}
function M (line 1) | function M(e){let{children:t}=e;return t}
function x (line 1) | function x(){let e=(0,y.createMutableActionQueue)(),t=(0,a.jsx)(T,{child...
function l (line 1) | function l(e){let{tree:t}=e,[n,l]=(0,r.useState)(null);(0,r.useEffect)((...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function E (line 1) | function E(){return S}
function T (line 1) | function T(e){let t=new URL(e,location.origin);if(t.searchParams.delete(...
function M (line 1) | function M(e){return e.origin!==window.location.origin}
function x (line 1) | function x(e){let{appRouterState:t,sync:n}=e;return(0,u.useInsertionEffe...
function C (line 1) | function C(){return{lazyData:null,rsc:null,prefetchRsc:null,head:null,pr...
function A (line 1) | function A(e){null==e&&(e={});let t=window.history.state,n=null==t?void ...
function N (line 1) | function N(e){let{headCacheNode:t}=e,n=null!==t?t.head:null,r=null!==t?t...
function D (line 1) | function D(e){let t,{buildId:n,initialHead:r,initialTree:i,initialCanoni...
function I (line 1) | function I(e){let{globalErrorComponent:t,...n}=e;return(0,o.jsx)(f.Error...
function u (line 1) | function u(e){let t=o.staticGenerationAsyncStorage.getStore();if((null==...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function u (line 1) | function u(e){let{Component:t,props:n}=e;return n.searchParams=(0,o.crea...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function s (line 1) | function s(e){let{error:t}=e,n=i.staticGenerationAsyncStorage.getStore()...
class f (line 1) | class f extends u.default.Component{static getDerivedStateFromError(e){i...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(e){let{error:t}=e,n=null==t?void 0:t.digest;return(0,o.jsxs)(...
function h (line 1) | function h(e){let{errorComponent:t,errorStyles:n,errorScripts:r,children...
class r (line 1) | class r extends Error{constructor(e){super("Dynamic server usage: "+e),t...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&"string"...
function u (line 1) | function u(e){return e&&e.digest&&((0,o.isRedirectError)(e)||(0,r.isNotF...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function m (line 1) | function m(e,t){let n=e.getBoundingClientRect();return n.top>=0&&n.top<=t}
class R (line 1) | class R extends l.default.Component{componentDidMount(){this.handlePoten...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 1) | function P(e){let{segmentPath:t,children:n}=e,r=(0,l.useContext)(i.Globa...
function j (line 1) | function j(e){let{parallelRouterKey:t,url:n,childNodes:r,segmentPath:o,t...
function O (line 1) | function O(e){let{children:t,hasLoading:n,loading:r,loadingStyles:o,load...
function S (line 1) | function S(e){let{parallelRouterKey:t,segmentPath:n,error:r,errorStyles:...
function s (line 1) | function s(){let e=(0,r.useContext)(u.SearchParamsContext),t=(0,r.useMem...
function f (line 1) | function f(){return(0,r.useContext)(u.PathnameContext)}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(){let e=(0,r.useContext)(o.AppRouterContext);if(null===e)thro...
function p (line 1) | function p(){return(0,r.useContext)(u.PathParamsContext)}
function h (line 1) | function h(e){void 0===e&&(e="children");let t=(0,r.useContext)(o.Layout...
function y (line 1) | function y(e){void 0===e&&(e="children");let t=h(e);if(!t||0===t.length)...
class u (line 1) | class u extends Error{constructor(){super("Method unavailable on `Readon...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
class l (line 1) | class l extends URLSearchParams{append(){throw new u}delete(){throw new ...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
class c (line 1) | class c extends u.default.Component{componentDidCatch(){}static getDeriv...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{notFound:t,notFoundStyles:n,asNotFound:r,children:a}=e...
function r (line 1) | function r(){let e=Error(n);throw e.digest=n,e}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest...
class c (line 1) | class c{enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){if(void 0===e&&(e=!1),(r._(this,l)[l]<r._(this,u)[u]||e)&&...
function i (line 1) | function i(e){let{redirect:t,reset:n,redirectType:r}=e,o=(0,l.useRouter)...
class c (line 1) | class c extends u.default.Component{static getDerivedStateFromError(e){i...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{children:t}=e,n=(0,l.useRouter)();return(0,o.jsx)(c,{r...
function c (line 1) | function c(e,t,n){void 0===n&&(n=a.RedirectStatusCode.TemporaryRedirect)...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.get...
function f (line 1) | function f(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.get...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"...
function p (line 1) | function p(e){return d(e)?e.digest.split(";",3)[2]:null}
function h (line 1) | function h(e){if(!d(e))throw Error("Not a redirect error");return e.dige...
function y (line 1) | function y(e){if(!d(e))throw Error("Not a redirect error");return Number...
function a (line 1) | function a(){let e=(0,u.useContext)(l.TemplateContext);return(0,o.jsx)(o...
function o (line 1) | function o(e){let t=r.requestAsyncStorage.getStore();if(t)return t;throw...
function u (line 1) | function u(e,t,n,u){let[l,a,i]=n.slice(-3);if(null===a)return!1;if(3===n...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 1) | function l(e,t,n){let[u,a]=e,[i,c]=t;if(i===r.DEFAULT_SEGMENT_KEY&&u!==r...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function i (line 1) | function i(e){return e.reduce((e,t)=>""===(t=l(t))||(0,o.isGroupSegment)...
function c (line 1) | function c(e){var t;let n=Array.isArray(e[0])?e[0][1]:e[0];if(n===o.DEFA...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){let n=function e(t,n){let[o,l]=t,[i,s]=n,f=a(o),d=a(i);i...
function n (line 1) | function n(e,t){return void 0===t&&(t=!0),e.pathname+e.search+(t?e.hash:...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function c (line 1) | function c(e){var t;let{buildId:n,initialTree:c,initialSeedData:s,initia...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function o (line 1) | function o(e,t){return(void 0===t&&(t=!1),Array.isArray(e))?e[0]+"|"+e[1...
function c (line 1) | function c(e){return[(0,o.urlToUrlWithoutFlightMarker)(e).toString(),voi...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | async function s(e,t,n,s,f){let d={[r.RSC_HEADER]:"1",[r.NEXT_ROUTER_STA...
function o (line 1) | function o(e){return void 0!==e}
function u (line 1) | function u(e,t){var n,u,l;let a=null==(u=t.shouldScroll)||u,i=e.nextUrl;...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function o (line 1) | function o(e,t,n){return(0,r.handleExternalUrl)(e,{},e.canonicalUrl,!0)}
function o (line 1) | function o(e,t,n){for(let o in n[1]){let u=n[1][o][0],l=(0,r.createRoute...
function l (line 1) | function l(e,t,n){let r=i(e,t,n);return{route:e,node:r,children:null}}
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e,t){t.then(t=>{for(let n of t[0]){let t=n.slice(0,-3),r=n[n....
function i (line 1) | function i(e,t,n){let r=e[1],o=null!==t?t[1]:null,l=new Map;for(let e in...
function c (line 1) | function c(e,t){let n=e.node;if(null===n)return;let r=e.children;if(null...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t,n){let r=e[1],o=t.parallelRoutes;for(let e in r){let t=r[...
function d (line 1) | function d(e){return e&&e.tag===f}
function p (line 1) | function p(){let e,t;let n=new Promise((n,r)=>{e=n,t=r});return n.status...
function a (line 1) | function a(e,t){let n=(0,r.createHrefFromUrl)(e,!1);return t?t+"%"+n:n}
function i (line 1) | function i(e){let t,{url:n,nextUrl:r,tree:o,buildId:l,prefetchCache:i,ki...
function c (line 1) | function c(e){let{nextUrl:t,tree:n,prefetchCache:r,url:o,kind:l,data:i}=...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{url:t,kind:n,tree:r,nextUrl:i,buildId:c,prefetchCache:...
function f (line 1) | function f(e){for(let[t,n]of e)h(n)===u.PrefetchCacheEntryStatus.expired...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function h (line 1) | function h(e){let{kind:t,prefetchTime:n,lastUsedTime:r}=e;return Date.no...
function o (line 1) | function o(e,t){return function e(t,n,o){if(0===Object.keys(n).length)re...
function n (line 1) | function n(e){return Array.isArray(e)?e[1]:e}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function _ (line 1) | function _(e,t,n,r){return t.mpaNavigation=!0,t.canonicalUrl=n,t.pending...
function v (line 1) | function v(e){let t=[],[n,r]=e;if(0===Object.keys(r).length)return[[n]];...
function a (line 1) | function a(e,t){(0,u.prunePrefetchCache)(e.prefetchCache);let{url:n}=t;r...
function h (line 1) | function h(e,t){let{origin:n}=t,h={},y=e.canonicalUrl,_=e.tree;h.preserv...
function u (line 1) | function u(e,t){var n;let{url:u,tree:l}=t,a=(0,r.createHrefFromUrl)(u),i...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function b (line 1) | async function b(e,t,n){let l,{actionId:a,actionArgs:i}=n,c=await v(i),s...
function g (line 1) | function g(e,t){let{resolve:n,reject:r}=t,o={},u=e.canonicalUrl,_=e.tree...
function f (line 1) | function f(e,t){let{serverResponse:n}=t,[f,d]=n,p={};if(p.preserveCustom...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function l (line 1) | async function l(e){let t=new Set;await a({...e,rootTree:e.updatedTree,f...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | async function a(e){let{state:t,updatedTree:n,updatedCache:u,includeNext...
function p (line 1) | function p(e){return e&&("object"==typeof e||"function"==typeof e)&&"fun...
function l (line 1) | function l(e){let t=r.staticGenerationAsyncStorage.getStore();return t&&...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e){let t=r.staticGenerationAsyncStorage.getStore();return t?t...
class r (line 1) | class r extends Error{constructor(...e){super(...e),this.code=n}}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"code"in e&&e.code===n}
function l (line 1) | function l(e){if(e instanceof Map){let t={};for(let[n,r]of e.entries()){...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e){return(0,o.isThenable)(e)?(0,r.use)(e):e}
function o (line 1) | function o(e){return(0,r.pathHasPrefix)(e,"")}
function o (line 1) | function o(e){let t="function"==typeof reportError?reportError:e=>{windo...
function r (line 1) | function r(e){return e}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function n (line 1) | function n(e,t){var n=e.length;for(e.push(t);0<n;){var r=n-1>>>1,o=e[r];...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 1) | function r(e){return 0===e.length?null:e[0]}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t)...
function u (line 1) | function u(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function R (line 1) | function R(e){for(var t=r(f);null!==t;){if(null===t.callback)o(f);else i...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 1) | function P(e){if(v=!1,R(e),!_){if(null!==r(s))_=!0,C();else{var t=r(f);n...
function w (line 1) | function w(){return!(t.unstable_now()-E<S)}
function T (line 1) | function T(){if(j){var e=t.unstable_now();E=e;var n=!0;try{e:{_=!1,v&&(v...
function C (line 1) | function C(){j||(j=!0,l())}
function A (line 1) | function A(e,n){O=b(function(){e(t.unstable_now())},n)}
function n (line 1) | function n(e){return new URL(e,"http://n").pathname}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 1) | function r(e){return/https?:\/\//.test(e)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function c (line 1) | function c(e){return{isDebugSkeleton:e,dynamicAccesses:[]}}
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){let n=(0,a.getPathname)(e.urlPathname);if(!e.isUnstableC...
function f (line 1) | function f(e,t){let n=(0,a.getPathname)(e.urlPathname);if(e.isUnstableCa...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d({reason:e,prerenderState:t,pathname:n}){h(t,e,n)}
function p (line 1) | function p(e,t){e.prerenderState&&h(e.prerenderState,t,e.urlPathname)}
function h (line 1) | function h(e,t,n){v();let r=`Route ${n} needs to bail out of prerenderin...
function y (line 1) | function y(e){return e.dynamicAccesses.length>0}
function _ (line 1) | function _(e){return e.dynamicAccesses.filter(e=>"string"==typeof e.stac...
function v (line 2) | function v(){if(!i)throw Error("Invariant: React.unstable_postpone is no...
function b (line 2) | function b(e){v();let t=new AbortController;try{o.default.unstable_postp...
function o (line 2) | function o(e){let t=r.INTERCEPTION_ROUTE_MARKERS.find(t=>e.startsWith(t)...
function u (line 2) | function u(e){return void 0!==e.split("/").find(e=>o.find(t=>e.startsWit...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){let t,n,u;for(let r of e.split("/"))if(n=o.find(e=>r.start...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
class n (line 2) | class n{static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typ...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCod...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 2) | function r(e){return n(e).toString(36).slice(0,5)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
class r (line 2) | class r extends Error{constructor(e){super("Bail out to client-side rend...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest...
function n (line 2) | function n(e){return e.startsWith("/")?e:"/"+e}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function i (line 2) | function i(e,t){null!==e.pending&&(e.pending=e.pending.next,null!==e.pen...
function c (line 2) | async function c(e){let{actionQueue:t,action:n,setState:r}=e,u=t.state;i...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 2) | function s(){let e={state:null,dispatch:(t,n)=>(function(e,t,n){let r={r...
function o (line 2) | function o(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:n,query:...
function u (line 2) | function u(e){return(0,r.ensureLeadingSlash)(e.split("/").reduce((e,t,n,...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){return e.replace(/\.rsc($|\?)/,"$1")}
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function n (line 2) | function n(e,t){if(void 0===t&&(t={}),t.onlyHashChange){e();return}let n...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){return/Googlebot|Mediapartners-Google|AdsBot-Google|google...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){let t=e.indexOf("#"),n=e.indexOf("?"),r=n>-1&&(t<0||n<t);r...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function o (line 2) | function o(e,t){if("string"!=typeof e)return!1;let{pathname:n}=(0,r.pars...
function n (line 2) | function n(e){return e.replace(/\/$/,"")||"/"}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){return"("===e[0]&&e.endsWith(")")}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function u (line 2) | function u(e){let t=(0,r.useContext)(o);t&&t(e)}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
class r (line 2) | class r{disable(){throw n}getStore(){}run(){throw n}exit(){throw n}enter...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function u (line 2) | function u(){return o?new o:new r}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){var t=n(e);return"function"!=typeof t.then||"fulfilled"===...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 2) | function a(){}
function b (line 2) | function b(e,t,n,r){this.status=e,this.value=t,this.reason=n,this._respo...
function g (line 2) | function g(e){switch(e.status){case"resolved_model":E(e);break;case"reso...
function m (line 2) | function m(e,t){for(var n=0;n<e.length;n++)(0,e[n])(t)}
function R (line 2) | function R(e,t,n){switch(e.status){case"fulfilled":m(t,e.value);break;ca...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 2) | function P(e,t){if("pending"===e.status||"blocked"===e.status){var n=e.r...
function j (line 2) | function j(e,t){if("pending"===e.status||"blocked"===e.status){var n=e.v...
function E (line 2) | function E(e){var t=O,n=S;O=e,S=null;var r=e.value;e.status="cyclic",e.v...
function w (line 2) | function w(e){try{var t=e.value,r=n(t[0]);if(4===t.length&&"function"==t...
function T (line 2) | function T(e,t){e._chunks.forEach(function(e){"pending"===e.status&&P(e,...
function M (line 2) | function M(e,t){var n=e._chunks,r=n.get(t);return r||(r=new b("pending",...
function x (line 2) | function x(e,t){if("resolved_model"===(e=M(e,t)).status&&E(e),"fulfilled...
function C (line 2) | function C(){throw Error('Trying to call a function from "use server" bu...
function A (line 2) | function A(e,t,n,r,o){var u;return(e={_bundlerConfig:e,_moduleLoading:t,...
function N (line 2) | function N(e,t){function r(t){T(e,t)}var c=t.getReader();c.read().then(f...
function r (line 2) | function r(){var n=Array.prototype.slice.call(arguments);return t(e,n)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function i (line 2) | function i(e,t,n){var r,u={},i=null,c=null;for(r in void 0!==n&&(i=""+n)...
function v (line 2) | function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n...
function b (line 2) | function b(){}
function g (line 2) | function g(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n...
function T (line 2) | function T(e,t,r){var o,u={},l=null,a=null;if(null!=t)for(o in void 0!==...
function M (line 2) | function M(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}
function C (line 2) | function C(e,t){var n,r;return"object"==typeof e&&null!==e&&null!=e.key?...
function A (line 2) | function A(){}
function N (line 2) | function N(e,t,o){if(null==e)return e;var u=[],l=0;return!function e(t,o...
function D (line 2) | function D(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t...
function I (line 2) | function I(){return new WeakMap}
function U (line 2) | function U(){return{s:0,v:void 0,o:null,p:null}}
function k (line 2) | function k(){}
function r (line 2) | function r(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw Type...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e){return"__private_"+r+++"_"+e}
function r (line 2) | function r(e){return e&&e.__esModule?e:{default:e}}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function r (line 2) | function r(e){if("function"!=typeof WeakMap)return null;var t=new WeakMa...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=t...
FILE: goldenverba/server/frontend/out/_next/static/chunks/23-b149ce429217dd65.js
function n (line 1) | function n(){return""}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function u (line 1) | function u(e,t){return(0,o.normalizePathTrailingSlash)((0,r.addPathPrefi...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function n (line 1) | function n(e){var t,n;t=self.__next_s,n=()=>{e()},t&&t.length?t.reduce((...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function o (line 1) | async function o(e,t){let n=(0,r.getServerActionDispatcher)();if(!n)thro...
function P (line 1) | function P(e){if(0===e[0])r=[];else if(1===e[0]){if(!r)throw Error("Unex...
method start (line 1) | start(e){r&&(r.forEach(t=>{e.enqueue(b.encode(t))}),g&&!m&&(e.close(),m=...
function w (line 1) | function w(){return(0,c.use)(E)}
function M (line 1) | function M(e){let{children:t}=e;return t}
function x (line 1) | function x(){let e=(0,y.createMutableActionQueue)(),t=(0,a.jsx)(T,{child...
function l (line 1) | function l(e){let{tree:t}=e,[n,l]=(0,r.useState)(null);(0,r.useEffect)((...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function E (line 1) | function E(){return S}
function T (line 1) | function T(e){let t=new URL(e,location.origin);if(t.searchParams.delete(...
function M (line 1) | function M(e){return e.origin!==window.location.origin}
function x (line 1) | function x(e){let{appRouterState:t,sync:n}=e;return(0,u.useInsertionEffe...
function C (line 1) | function C(){return{lazyData:null,rsc:null,prefetchRsc:null,head:null,pr...
function A (line 1) | function A(e){null==e&&(e={});let t=window.history.state,n=null==t?void ...
function N (line 1) | function N(e){let{headCacheNode:t}=e,n=null!==t?t.head:null,r=null!==t?t...
function D (line 1) | function D(e){let t,{buildId:n,initialHead:r,initialTree:i,initialCanoni...
function I (line 1) | function I(e){let{globalErrorComponent:t,...n}=e;return(0,o.jsx)(f.Error...
function u (line 1) | function u(e){let t=o.staticGenerationAsyncStorage.getStore();if((null==...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function u (line 1) | function u(e){let{Component:t,props:n}=e;return n.searchParams=(0,o.crea...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function s (line 1) | function s(e){let{error:t}=e,n=i.staticGenerationAsyncStorage.getStore()...
class f (line 1) | class f extends u.default.Component{static getDerivedStateFromError(e){i...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(e){let{error:t}=e,n=null==t?void 0:t.digest;return(0,o.jsxs)(...
function h (line 1) | function h(e){let{errorComponent:t,errorStyles:n,errorScripts:r,children...
class r (line 1) | class r extends Error{constructor(e){super("Dynamic server usage: "+e),t...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&"string"...
function u (line 1) | function u(e){return e&&e.digest&&((0,o.isRedirectError)(e)||(0,r.isNotF...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function m (line 1) | function m(e,t){let n=e.getBoundingClientRect();return n.top>=0&&n.top<=t}
class R (line 1) | class R extends l.default.Component{componentDidMount(){this.handlePoten...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 1) | function P(e){let{segmentPath:t,children:n}=e,r=(0,l.useContext)(i.Globa...
function j (line 1) | function j(e){let{parallelRouterKey:t,url:n,childNodes:r,segmentPath:o,t...
function O (line 1) | function O(e){let{children:t,hasLoading:n,loading:r,loadingStyles:o,load...
function S (line 1) | function S(e){let{parallelRouterKey:t,segmentPath:n,error:r,errorStyles:...
function s (line 1) | function s(){let e=(0,r.useContext)(u.SearchParamsContext),t=(0,r.useMem...
function f (line 1) | function f(){return(0,r.useContext)(u.PathnameContext)}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(){let e=(0,r.useContext)(o.AppRouterContext);if(null===e)thro...
function p (line 1) | function p(){return(0,r.useContext)(u.PathParamsContext)}
function h (line 1) | function h(e){void 0===e&&(e="children");let t=(0,r.useContext)(o.Layout...
function y (line 1) | function y(e){void 0===e&&(e="children");let t=h(e);if(!t||0===t.length)...
class u (line 1) | class u extends Error{constructor(){super("Method unavailable on `Readon...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
class l (line 1) | class l extends URLSearchParams{append(){throw new u}delete(){throw new ...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
class c (line 1) | class c extends u.default.Component{componentDidCatch(){}static getDeriv...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{notFound:t,notFoundStyles:n,asNotFound:r,children:a}=e...
function r (line 1) | function r(){let e=Error(n);throw e.digest=n,e}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest...
class c (line 1) | class c{enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){if(void 0===e&&(e=!1),(r._(this,l)[l]<r._(this,u)[u]||e)&&...
function i (line 1) | function i(e){let{redirect:t,reset:n,redirectType:r}=e,o=(0,l.useRouter)...
class c (line 1) | class c extends u.default.Component{static getDerivedStateFromError(e){i...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{children:t}=e,n=(0,l.useRouter)();return(0,o.jsx)(c,{r...
function c (line 1) | function c(e,t,n){void 0===n&&(n=a.RedirectStatusCode.TemporaryRedirect)...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.get...
function f (line 1) | function f(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.get...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"...
function p (line 1) | function p(e){return d(e)?e.digest.split(";",3)[2]:null}
function h (line 1) | function h(e){if(!d(e))throw Error("Not a redirect error");return e.dige...
function y (line 1) | function y(e){if(!d(e))throw Error("Not a redirect error");return Number...
function a (line 1) | function a(){let e=(0,u.useContext)(l.TemplateContext);return(0,o.jsx)(o...
function o (line 1) | function o(e){let t=r.requestAsyncStorage.getStore();if(t)return t;throw...
function u (line 1) | function u(e,t,n,u){let[l,a,i]=n.slice(-3);if(null===a)return!1;if(3===n...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 1) | function l(e,t,n){let[u,a]=e,[i,c]=t;if(i===r.DEFAULT_SEGMENT_KEY&&u!==r...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function i (line 1) | function i(e){return e.reduce((e,t)=>""===(t=l(t))||(0,o.isGroupSegment)...
function c (line 1) | function c(e){var t;let n=Array.isArray(e[0])?e[0][1]:e[0];if(n===o.DEFA...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){let n=function e(t,n){let[o,l]=t,[i,s]=n,f=a(o),d=a(i);i...
function n (line 1) | function n(e,t){return void 0===t&&(t=!0),e.pathname+e.search+(t?e.hash:...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function c (line 1) | function c(e){var t;let{buildId:n,initialTree:c,initialSeedData:s,initia...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function o (line 1) | function o(e,t){return(void 0===t&&(t=!1),Array.isArray(e))?e[0]+"|"+e[1...
function c (line 1) | function c(e){return[(0,o.urlToUrlWithoutFlightMarker)(e).toString(),voi...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | async function s(e,t,n,s,f){let d={[r.RSC_HEADER]:"1",[r.NEXT_ROUTER_STA...
function o (line 1) | function o(e){return void 0!==e}
function u (line 1) | function u(e,t){var n,u,l;let a=null==(u=t.shouldScroll)||u,i=e.nextUrl;...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function o (line 1) | function o(e,t,n){return(0,r.handleExternalUrl)(e,{},e.canonicalUrl,!0)}
function o (line 1) | function o(e,t,n){for(let o in n[1]){let u=n[1][o][0],l=(0,r.createRoute...
function l (line 1) | function l(e,t,n){let r=i(e,t,n);return{route:e,node:r,children:null}}
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e,t){t.then(t=>{for(let n of t[0]){let t=n.slice(0,-3),r=n[n....
function i (line 1) | function i(e,t,n){let r=e[1],o=null!==t?t[1]:null,l=new Map;for(let e in...
function c (line 1) | function c(e,t){let n=e.node;if(null===n)return;let r=e.children;if(null...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t,n){let r=e[1],o=t.parallelRoutes;for(let e in r){let t=r[...
function d (line 1) | function d(e){return e&&e.tag===f}
function p (line 1) | function p(){let e,t;let n=new Promise((n,r)=>{e=n,t=r});return n.status...
function a (line 1) | function a(e,t){let n=(0,r.createHrefFromUrl)(e,!1);return t?t+"%"+n:n}
function i (line 1) | function i(e){let t,{url:n,nextUrl:r,tree:o,buildId:l,prefetchCache:i,ki...
function c (line 1) | function c(e){let{nextUrl:t,tree:n,prefetchCache:r,url:o,kind:l,data:i}=...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e){let{url:t,kind:n,tree:r,nextUrl:i,buildId:c,prefetchCache:...
function f (line 1) | function f(e){for(let[t,n]of e)h(n)===u.PrefetchCacheEntryStatus.expired...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function h (line 1) | function h(e){let{kind:t,prefetchTime:n,lastUsedTime:r}=e;return Date.no...
function o (line 1) | function o(e,t){return function e(t,n,o){if(0===Object.keys(n).length)re...
function n (line 1) | function n(e){return Array.isArray(e)?e[1]:e}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function _ (line 1) | function _(e,t,n,r){return t.mpaNavigation=!0,t.canonicalUrl=n,t.pending...
function v (line 1) | function v(e){let t=[],[n,r]=e;if(0===Object.keys(r).length)return[[n]];...
function a (line 1) | function a(e,t){(0,u.prunePrefetchCache)(e.prefetchCache);let{url:n}=t;r...
function h (line 1) | function h(e,t){let{origin:n}=t,h={},y=e.canonicalUrl,_=e.tree;h.preserv...
function u (line 1) | function u(e,t){var n;let{url:u,tree:l}=t,a=(0,r.createHrefFromUrl)(u),i...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function b (line 1) | async function b(e,t,n){let l,{actionId:a,actionArgs:i}=n,c=await v(i),s...
function g (line 1) | function g(e,t){let{resolve:n,reject:r}=t,o={},u=e.canonicalUrl,_=e.tree...
function f (line 1) | function f(e,t){let{serverResponse:n}=t,[f,d]=n,p={};if(p.preserveCustom...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function l (line 1) | async function l(e){let t=new Set;await a({...e,rootTree:e.updatedTree,f...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | async function a(e){let{state:t,updatedTree:n,updatedCache:u,includeNext...
function p (line 1) | function p(e){return e&&("object"==typeof e||"function"==typeof e)&&"fun...
function l (line 1) | function l(e){let t=r.staticGenerationAsyncStorage.getStore();return t&&...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e){let t=r.staticGenerationAsyncStorage.getStore();return t?t...
class r (line 1) | class r extends Error{constructor(...e){super(...e),this.code=n}}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){return"object"==typeof e&&null!==e&&"code"in e&&e.code===n}
function l (line 1) | function l(e){if(e instanceof Map){let t={};for(let[n,r]of e.entries()){...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 1) | function a(e){return(0,o.isThenable)(e)?(0,r.use)(e):e}
function o (line 1) | function o(e){return(0,r.pathHasPrefix)(e,"")}
function o (line 1) | function o(e){let t="function"==typeof reportError?reportError:e=>{windo...
function r (line 1) | function r(e){return e}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function n (line 1) | function n(e,t){var n=e.length;for(e.push(t);0<n;){var r=n-1>>>1,o=e[r];...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 1) | function r(e){return 0===e.length?null:e[0]}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 1) | function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t)...
function u (line 1) | function u(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function R (line 1) | function R(e){for(var t=r(f);null!==t;){if(null===t.callback)o(f);else i...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 1) | function P(e){if(v=!1,R(e),!_){if(null!==r(s))_=!0,C();else{var t=r(f);n...
function w (line 1) | function w(){return!(t.unstable_now()-E<S)}
function T (line 1) | function T(){if(j){var e=t.unstable_now();E=e;var n=!0;try{e:{_=!1,v&&(v...
function C (line 1) | function C(){j||(j=!0,l())}
function A (line 1) | function A(e,n){O=b(function(){e(t.unstable_now())},n)}
function n (line 1) | function n(e){return new URL(e,"http://n").pathname}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 1) | function r(e){return/https?:\/\//.test(e)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function c (line 1) | function c(e){return{isDebugSkeleton:e,dynamicAccesses:[]}}
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 1) | function s(e,t){let n=(0,a.getPathname)(e.urlPathname);if(!e.isUnstableC...
function f (line 1) | function f(e,t){let n=(0,a.getPathname)(e.urlPathname);if(e.isUnstableCa...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o...
method constructor (line 1) | constructor(e){super(e),this.reset=()=>{this.setState({error:null})},t...
function d (line 1) | function d({reason:e,prerenderState:t,pathname:n}){h(t,e,n)}
function p (line 1) | function p(e,t){e.prerenderState&&h(e.prerenderState,t,e.urlPathname)}
function h (line 1) | function h(e,t,n){v();let r=`Route ${n} needs to bail out of prerenderin...
function y (line 1) | function y(e){return e.dynamicAccesses.length>0}
function _ (line 1) | function _(e){return e.dynamicAccesses.filter(e=>"string"==typeof e.stac...
function v (line 2) | function v(){if(!i)throw Error("Invariant: React.unstable_postpone is no...
function b (line 2) | function b(e){v();let t=new AbortController;try{o.default.unstable_postp...
function o (line 2) | function o(e){let t=r.INTERCEPTION_ROUTE_MARKERS.find(t=>e.startsWith(t)...
function u (line 2) | function u(e){return void 0!==e.split("/").find(e=>o.find(t=>e.startsWit...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){let t,n,u;for(let r of e.split("/"))if(n=o.find(e=>r.start...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
class n (line 2) | class n{static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typ...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCod...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function r (line 2) | function r(e){return n(e).toString(36).slice(0,5)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
class r (line 2) | class r extends Error{constructor(e){super("Bail out to client-side rend...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest...
function n (line 2) | function n(e){return e.startsWith("/")?e:"/"+e}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function i (line 2) | function i(e,t){null!==e.pending&&(e.pending=e.pending.next,null!==e.pen...
function c (line 2) | async function c(e){let{actionQueue:t,action:n,setState:r}=e,u=t.state;i...
method componentDidCatch (line 1) | componentDidCatch(){}
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{...
method getDerivedStateFromProps (line 1) | static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPat...
method render (line 1) | render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{ch...
method constructor (line 1) | constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,p...
method enqueue (line 1) | enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try...
method bump (line 1) | bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){le...
method constructor (line 1) | constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.define...
method getDerivedStateFromError (line 1) | static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{...
method render (line 1) | render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&nu...
method constructor (line 1) | constructor(e){super(e),this.state={redirect:null,redirectType:null}}
function s (line 2) | function s(){let e={state:null,dispatch:(t,n)=>(function(e,t,n){let r={r...
function o (line 2) | function o(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:n,query:...
function u (line 2) | function u(e){return(0,r.ensureLeadingSlash)(e.split("/").reduce((e,t,n,...
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){return e.replace(/\.rsc($|\?)/,"$1")}
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function n (line 2) | function n(e,t){if(void 0===t&&(t={}),t.onlyHashChange){e();return}let n...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){return/Googlebot|Mediapartners-Google|AdsBot-Google|google...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){let t=e.indexOf("#"),n=e.indexOf("?"),r=n>-1&&(t<0||n<t);r...
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function o (line 2) | function o(e,t){if("string"!=typeof e)return!1;let{pathname:n}=(0,r.pars...
function n (line 2) | function n(e){return e.replace(/\/$/,"")||"/"}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function n (line 2) | function n(e){return"("===e[0]&&e.endsWith(")")}
method get (line 2) | static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?...
method set (line 2) | static set(e,t,n,r){return Reflect.set(e,t,n,r)}
method has (line 2) | static has(e,t){return Reflect.has(e,t)}
method deleteProperty (line 2) | static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}
function u (line 2) | function u(e){let t=(0,r.useContext)(o);t&&t(e)}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
class r (line 2) | class r{disable(){throw n}getStore(){}run(){throw n}exit(){throw n}enter...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function u (line 2) | function u(){return o?new o:new r}
method constructor (line 1) | constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. ...
function l (line 2) | function l(e){var t=n(e);return"function"!=typeof t.then||"fulfilled"===...
method append (line 1) | append(){throw new u}
method delete (line 1) | delete(){throw new u}
method set (line 1) | set(){throw new u}
method sort (line 1) | sort(){throw new u}
function a (line 2) | function a(){}
function b (line 2) | function b(e,t,n,r){this.status=e,this.value=t,this.reason=n,this._respo...
function g (line 2) | function g(e){switch(e.status){case"resolved_model":E(e);break;case"reso...
function m (line 2) | function m(e,t){for(var n=0;n<e.length;n++)(0,e[n])(t)}
function R (line 2) | function R(e,t,n){switch(e.status){case"fulfilled":m(t,e.value);break;ca...
method componentDidMount (line 1) | componentDidMount(){this.handlePotentialScroll()}
method componentDidUpdate (line 1) | componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePo...
method render (line 1) | render(){return this.props.children}
method constructor (line 1) | constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focu...
function P (line 2) | function P(e,t){if("pending"===e.status||"blocked"===e.status){var n=e.r...
function j (line 2) | function j(e,t){if("pending"===e.status||"blocked"===e.status){var n=e.v...
function E (line 2) | function E(e){var t=O,n=S;O=e,S=null;var r=e.value;e.status="cyclic",e.v...
function w (line 2) | function w(e){try{var t=e.value,r=n(t[0]);if(4===t.length&&"function"==t...
function T (line 2) | function T(e,t){e._chunks.forEach(function(e){"pending"===e.status&&P(e,...
function M (line 2) | function M(e,t){var n=e._chunks,r=n.get(t);return r||(r=new b("pending",...
function x (line 2) | function x(e,t){if("resolved_model"===(e=M(e,t)).status&&E(e),"fulfilled...
function C (line 2) | function C(){throw Error('Trying to call a function from "use server" bu...
function A (line 2) | function A(e,t,n,r,o){var u;return(e={_bundlerConfig:e,_moduleLoading:t,...
function N (line 2) | function N(e,t){function r(t){T(e,t)}var c=t.getReader();c.read().then(f...
function r (line 2) | function r(){var n=Array.prototype.slice.call(arguments);return t(e,n)}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function i (line 2) | function i(e,t,n){var r,u={},i=null,c=null;for(r in void 0!==n&&(i=""+n)...
function v (line 2) | function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n...
function b (line 2) | function b(){}
function g (line 2) | function g(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n...
function T (line 2) | function T(e,t,r){var o,u={},l=null,a=null;if(null!=t)for(o in void 0!==...
function M (line 2) | function M(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}
function C (line 2) | function C(e,t){var n,r;return"object"==typeof e&&null!==e&&null!=e.key?...
function A (line 2) | function A(){}
function N (line 2) | function N(e,t,o){if(null==e)return e;var u=[],l=0;return!function e(t,o...
function D (line 2) | function D(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t...
function I (line 2) | function I(){return new WeakMap}
function U (line 2) | function U(){return{s:0,v:void 0,o:null,p:null}}
function k (line 2) | function k(){}
function r (line 2) | function r(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw Type...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e){return"__private_"+r+++"_"+e}
function r (line 2) | function r(e){return e&&e.__esModule?e:{default:e}}
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function r (line 2) | function r(e){if("function"!=typeof WeakMap)return null;var t=new WeakMa...
method constructor (line 1) | constructor(e){super("Dynamic server usage: "+e),this.description=e,th...
method constructor (line 1) | constructor(...e){super(...e),this.code=n}
method constructor (line 2) | constructor(e){super("Bail out to client-side rendering: "+e),this.rea...
method disable (line 2) | disable(){throw n}
method getStore (line 2) | getStore(){}
method run (line 2) | run(){throw n}
method exit (line 2) | exit(){throw n}
method enterWith (line 2) | enterWith(){throw n}
function o (line 2) | function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=t...
FILE: goldenverba/server/frontend/out/_next/static/chunks/39209d7c-1514aaef8caa025b.js
function l (line 1) | function l(c){return(0,t.w_)({tag:"svg",attr:{viewBox:"0 0 576 512"},chi...
FILE: goldenverba/server/frontend/out/_next/static/chunks/39209d7c-9eeaeffa37c8b51e.js
function s (line 1) | function s(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},chi...
FILE: goldenverba/server/frontend/out/_next/static/chunks/39209d7c-f601708f0876481f.js
function l (line 1) | function l(c){return(0,t.w_)({tag:"svg",attr:{viewBox:"0 0 576 512"},chi...
FILE: goldenverba/server/frontend/out/_next/static/chunks/39aecf79-2d831b66f40a6478.js
function e (line 1) | function e(l){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
function n (line 1) | function n(l){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 20 20",fill:"...
FILE: goldenverba/server/frontend/out/_next/static/chunks/39aecf79-474a3d3c48835c08.js
function e (line 1) | function e(l){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
function n (line 1) | function n(l){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 20 20",fill:"...
FILE: goldenverba/server/frontend/out/_next/static/chunks/39aecf79-8d523cb23043db9d.js
function c (line 1) | function c(l){return(0,t.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
FILE: goldenverba/server/frontend/out/_next/static/chunks/472688b4-2c611c3f7f6780f5.js
function n (line 1) | function n(t){return(0,h.w_)({tag:"svg",attr:{version:"1.2",baseProfile:...
FILE: goldenverba/server/frontend/out/_next/static/chunks/472688b4-f8d4a7fb6705064c.js
function n (line 1) | function n(t){return(0,h.w_)({tag:"svg",attr:{version:"1.2",baseProfile:...
FILE: goldenverba/server/frontend/out/_next/static/chunks/48507feb-c058e15125ba1e58.js
function o (line 1) | function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
function e (line 1) | function e(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
function h (line 1) | function h(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
FILE: goldenverba/server/frontend/out/_next/static/chunks/48507feb-cb362b7475ba2891.js
function e (line 1) | function e(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
function o (line 1) | function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
FILE: goldenverba/server/frontend/out/_next/static/chunks/48507feb-fb2bbcdbd4adc32f.js
function o (line 1) | function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
function e (line 1) | function e(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
function h (line 1) | function h(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",stroke...
FILE: goldenverba/server/frontend/out/_next/static/chunks/4f53ad1b-af82feddb1367bb5.js
function e (line 1) | function e(C){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
function n (line 1) | function n(C){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
FILE: goldenverba/server/frontend/out/_next/static/chunks/4f53ad1b-cf02b0f93cf25527.js
function e (line 1) | function e(C){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
FILE: goldenverba/server/frontend/out/_next/static/chunks/4f53ad1b-f1821b28dab6f189.js
function e (line 1) | function e(C){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
function n (line 1) | function n(C){return(0,r.w_)({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"...
FILE: goldenverba/server/frontend/out/_next/static/chunks/4f9d9cd8-0af0a6a5e34c4b59.js
function a (line 1) | function a(t){return(0,u.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child...
FILE: goldenverba/server/frontend/out/_next/static/chunks/4f9d9cd8-7217d0ac0bfcc7ce.js
function a (line 1) | function a(t){return(0,u.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child...
FILE: goldenverba/server/frontend/out/_next/static/chunks/514-cff62b6f7919676e.js
class i (line 1) | class i extends a.Loader{constructor(e){super(e),this.decoderPath="",thi...
method constructor (line 1) | constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this...
method setDecoderPath (line 1) | setDecoderPath(e){return this.decoderPath=e,this}
method setDecoderConfig (line 1) | setDecoderConfig(e){return this.decoderConfig=e,this}
method setWorkerLimit (line 1) | setWorkerLimit(e){return this.workerLimit=e,this}
method load (line 1) | load(e,t,n,r){let o=new a.FileLoader(this.manager);o.setPath(this.path...
method decodeDracoFile (line 1) | decodeDracoFile(e,t,n,r){let a={attributeIDs:n||this.defaultAttributeI...
method decodeGeometry (line 1) | decodeGeometry(e,t){let n;for(let e in t.attributeTypes){let n=t.attri...
method _createGeometry (line 1) | _createGeometry(e){let t=new a.BufferGeometry;e.index&&t.setIndex(new ...
method _loadLibrary (line 1) | _loadLibrary(e,t){let n=new a.FileLoader(this.manager);return n.setPat...
method preload (line 1) | preload(){return this._initDecoder(),this}
method _initDecoder (line 1) | _initDecoder(){if(this.decoderPending)return this.decoderPending;let e...
method _getWorker (line 1) | _getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPoo...
method _releaseTask (line 1) | _releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],...
method debug (line 1) | debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}
method dispose (line 1) | dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e]....
function s (line 1) | function s(){let e,t;onmessage=function(n){let r=n.data;switch(r.type){c...
function i (line 1) | function i(t,n,r,a,o,i){let s=e.exports.sbrk,l=r+3&-4,c=s(l*a),u=s(o.len...
method constructor (line 1) | constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this...
method setDecoderPath (line 1) | setDecoderPath(e){return this.decoderPath=e,this}
method setDecoderConfig (line 1) | setDecoderConfig(e){return this.decoderConfig=e,this}
method setWorkerLimit (line 1) | setWorkerLimit(e){return this.workerLimit=e,this}
method load (line 1) | load(e,t,n,r){let o=new a.FileLoader(this.manager);o.setPath(this.path...
method decodeDracoFile (line 1) | decodeDracoFile(e,t,n,r){let a={attributeIDs:n||this.defaultAttributeI...
method decodeGeometry (line 1) | decodeGeometry(e,t){let n;for(let e in t.attributeTypes){let n=t.attri...
method _createGeometry (line 1) | _createGeometry(e){let t=new a.BufferGeometry;e.index&&t.setIndex(new ...
method _loadLibrary (line 1) | _loadLibrary(e,t){let n=new a.FileLoader(this.manager);return n.setPat...
method preload (line 1) | preload(){return this._initDecoder(),this}
method _initDecoder (line 1) | _initDecoder(){if(this.decoderPending)return this.decoderPending;let e...
method _getWorker (line 1) | _getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPoo...
method _releaseTask (line 1) | _releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],...
method debug (line 1) | debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}
method dispose (line 1) | dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e]....
method decodeVertexBuffer (line 1) | decodeVertexBuffer(t,n,r,a,o){i(e.exports.meshopt_decodeVertexBuffer,t,n...
method decodeIndexBuffer (line 1) | decodeIndexBuffer(t,n,r,a){i(e.exports.meshopt_decodeIndexBuffer,t,n,r,a)}
method decodeIndexSequence (line 1) | decodeIndexSequence(t,n,r,a){i(e.exports.meshopt_decodeIndexSequence,t,n...
method decodeGltfBuffer (line 1) | decodeGltfBuffer(t,n,r,a,o,c){i(e.exports[l[o]],t,n,r,a,e.exports[s[c]])}
function c (line 1) | function c(e,t){if(t===a.TrianglesDrawMode)return console.warn("THREE.Bu...
method constructor (line 9) | constructor(e,t,n){super(e,t,n,"function"),this.$button=document.creat...
function d (line 1) | function d(e){if("undefined"!=typeof TextDecoder)return new TextDecoder(...
method constructor (line 9) | constructor(e,t,n,r){super(e,t,n,"option"),this.$select=document.creat...
method options (line 9) | options(e){return this._values=Array.isArray(e)?e:Object.values(e),thi...
method updateDisplay (line 9) | updateDisplay(){let e=this.getValue(),t=this._values.indexOf(e);return...
method constructor (line 433) | constructor(e,t,n){let r=[null,null],a={start:{line:null,column:null},...
class g (line 1) | class g extends a.Loader{constructor(e){super(e),this.dracoLoader=null,t...
method constructor (line 1) | constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,thi...
method load (line 1) | load(e,t,n,r){let o;let i=this;if(""!==this.resourcePath)o=this.resour...
method setDRACOLoader (line 1) | setDRACOLoader(e){return this.dracoLoader=e,this}
method setDDSLoader (line 1) | setDDSLoader(){throw Error('THREE.GLTFLoader: "MSFT_texture_dds" no lo...
method setKTX2Loader (line 1) | setKTX2Loader(e){return this.ktx2Loader=e,this}
method setMeshoptDecoder (line 1) | setMeshoptDecoder(e){return this.meshoptDecoder=e,this}
method register (line 1) | register(e){return -1===this.pluginCallbacks.indexOf(e)&&this.pluginCa...
method unregister (line 1) | unregister(e){return -1!==this.pluginCallbacks.indexOf(e)&&this.plugin...
method parse (line 1) | parse(e,t,n,r){let a;let o={},i={};if("string"==typeof e)a=JSON.parse(...
method parseAsync (line 1) | parseAsync(e,t){let n=this;return new Promise(function(r,a){n.parse(e,...
method constructor (line 1) | constructor(e,t){super(),c(this,"object"),c(this,"domElement"),c(this,...
function h (line 1) | function h(){let e={};return{get:function(t){return e[t]},add:function(t...
method constructor (line 430) | constructor({parent:e,autoPlace:t=void 0===e,container:n,width:r,title...
method add (line 430) | add(e,t,n,r,o){if(Object(n)===n)return new d(this,e,t,n);let i=e[t];sw...
method addColor (line 433) | addColor(e,t,n=1){return new l(this,e,t,n)}
method addFolder (line 433) | addFolder(e){let t=new h({parent:this,title:e});return this.root._clos...
method load (line 433) | load(e,t=!0){return e.controllers&&this.controllers.forEach(t=>{!(t in...
method save (line 433) | save(e=!0){let t={controllers:{},folders:{}};return this.controllers.f...
method open (line 433) | open(e=!0){return this._setClosed(!e),this.$title.setAttribute("aria-e...
method close (line 433) | close(){return this.open(!1)}
method _setClosed (line 433) | _setClosed(e){this._closed!==e&&(this._closed=e,this._callOnOpenClose(...
method show (line 433) | show(e=!0){return this._hidden=!e,this.domElement.style.display=this._...
method hide (line 433) | hide(){return this.show(!1)}
method openAnimated (line 433) | openAnimated(e=!0){return this._setClosed(!e),this.$title.setAttribute...
method title (line 433) | title(e){return this._title=e,this.$title.textContent=e,this}
method reset (line 433) | reset(e=!0){return(e?this.controllersRecursive():this.controllers).for...
method onChange (line 433) | onChange(e){return this._onChange=e,this}
method _callOnChange (line 433) | _callOnChange(e){this.parent&&this.parent._callOnChange(e),void 0!==th...
method onFinishChange (line 433) | onFinishChange(e){return this._onFinishChange=e,this}
method _callOnFinishChange (line 433) | _callOnFinishChange(e){this.parent&&this.parent._callOnFinishChange(e)...
method onOpenClose (line 433) | onOpenClose(e){return this._onOpenClose=e,this}
method _callOnOpenClose (line 433) | _callOnOpenClose(e){this.parent&&this.parent._callOnOpenClose(e),void ...
method destroy (line 433) | destroy(){this.parent&&(this.parent.children.splice(this.parent.childr...
method controllersRecursive (line 433) | controllersRecursive(){let e=Array.from(this.controllers);return this....
method foldersRecursive (line 433) | foldersRecursive(){let e=Array.from(this.folders);return this.folders....
class b (line 1) | class b{constructor(e){this.parser=e,this.name=m.KHR_LIGHTS_PUNCTUAL,thi...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_LIGHTS_PUNCTUAL,this.cach...
method _markDefs (line 1) | _markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0...
method _loadLight (line 1) | _loadLight(e){let t;let n=this.parser,r="light:"+e,o=n.cache.get(r);if...
method getDependency (line 1) | getDependency(e,t){if("light"===e)return this._loadLight(t)}
method createNodeAttachment (line 1) | createNodeAttachment(e){let t=this,n=this.parser,r=n.json.nodes[e],a=(...
class y (line 1) | class y{constructor(){this.name=m.KHR_MATERIALS_UNLIT}getMaterialType(){...
method constructor (line 1) | constructor(){this.name=m.KHR_MATERIALS_UNLIT}
method getMaterialType (line 1) | getMaterialType(){return a.MeshBasicMaterial}
method extendParams (line 1) | extendParams(e,t,n){let r=[];e.color=new a.Color(1,1,1),e.opacity=1;le...
class A (line 1) | class A{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_EMISSIVE_...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_EMISSIVE_STRENGTH}
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser.json.materials[e];if(!n.ex...
class E (line 1) | class E{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_CLEARCOAT...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_CLEARCOAT}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
class v (line 1) | class v{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_DISPERSIO...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_DISPERSION}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser.json.materials[e];if(!n.ex...
class S (line 1) | class S{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_IRIDESCEN...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_IRIDESCENCE}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
class w (line 1) | class w{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_SHEEN}get...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_SHEEN}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
class k (line 1) | class k{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_TRANSMISS...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_TRANSMISSION}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
method render (line 1) | render(){return i.createElement(w.Provider,{value:this._reactInternals...
class C (line 1) | class C{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_VOLUME}ge...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_VOLUME}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
class T (line 1) | class T{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_IOR}getMa...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_IOR}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser.json.materials[e];if(!n.ex...
class x (line 1) | class x{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_SPECULAR}...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_SPECULAR}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
class _ (line 1) | class _{constructor(e){this.parser=e,this.name=m.EXT_MATERIALS_BUMP}getM...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.EXT_MATERIALS_BUMP}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
class R (line 1) | class R{constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_ANISOTROP...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_MATERIALS_ANISOTROPY}
method getMaterialType (line 1) | getMaterialType(e){let t=this.parser.json.materials[e];return t.extens...
method extendMaterialParams (line 1) | extendMaterialParams(e,t){let n=this.parser,r=n.json.materials[e];if(!...
class I (line 1) | class I{constructor(e){this.parser=e,this.name=m.KHR_TEXTURE_BASISU}load...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.KHR_TEXTURE_BASISU}
method loadTexture (line 1) | loadTexture(e){let t=this.parser,n=t.json,r=n.textures[e];if(!r.extens...
class O (line 1) | class O{constructor(e){this.parser=e,this.name=m.EXT_TEXTURE_WEBP,this.i...
method constructor (line 1) | constructor(e){this.parser=e,this.name=m.EXT_TEXTURE_WEBP,this.isSuppo...
method loadTexture (line 1) | loadTexture(e){let t=this.name,n=this.parser,r=n.json,a=r.textures[e];...
method detectSupport (line 1) | detectSupport(){return this.isSupported||(this.isSu
Copy disabled (too large)
Download .json
Condensed preview — 295 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,008K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/verba-feature-template.md",
"chars": 284,
"preview": "---\nname: Verba Feature Template\nabout: Request a new feature for Verba\ntitle: \"\"\nlabels: \"enhancement\"\nassignees: \"\"\n--"
},
{
"path": ".github/ISSUE_TEMPLATE/verba-issue-template.md",
"chars": 1169,
"preview": "---\nname: Verba Issue Template\nabout: Encountering errors or issues with Verba\ntitle: \"\"\nlabels: \"\"\nassignees: \"\"\n---\n\n#"
},
{
"path": ".github/workflows/docker-image.yml",
"chars": 701,
"preview": "name: Docker Build and Push\n\non:\n push:\n branches: [\"main\"]\n\njobs:\n build-and-push:\n runs-on: ubuntu-latest\n\n "
},
{
"path": ".gitignore",
"chars": 223,
"preview": ".env\n.env*\n__pycache__\n.DS_Store\n.pytest_cache\n.python-version\n*.egg-info\nvenv\nvenv*\ndist\nbuild\n~\n.local\n.cache\n.verba\n."
},
{
"path": "CHANGELOG.md",
"chars": 7983,
"preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\n## [2.1.3] More data types\n\n## Added\n"
},
{
"path": "CONTRIBUTING.md",
"chars": 3231,
"preview": "# Verba Contribution Guidelines\n\nWelcome to the Verba community! We're thrilled that you're interested in contributing t"
},
{
"path": "Dockerfile",
"chars": 136,
"preview": "FROM python:3.11\nWORKDIR /Verba\nCOPY . /Verba\nRUN pip install '.'\nEXPOSE 8000\nCMD [\"verba\", \"start\",\"--port\",\"8000\",\"--h"
},
{
"path": "FRONTEND.md",
"chars": 1271,
"preview": "# Verba - Frontend Documentation\n\nVerba's Frontend is a [NextJS](https://nextjs.org/) application used together with [Ta"
},
{
"path": "LICENSE",
"chars": 1503,
"preview": "Copyright (c) 2020-2023, Weaviate B.V.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or "
},
{
"path": "MANIFEST.in",
"chars": 51,
"preview": "recursive-include goldenverba/server/frontend/out *"
},
{
"path": "PYTHON_TUTORIAL.md",
"chars": 2182,
"preview": "# Installing Python and Setting Up a Virtual Environment\n\nBefore you can use Verba, you'll need to ensure that `Python >"
},
{
"path": "README.md",
"chars": 31779,
"preview": "# Verba\n\n## The Golden RAGtriever - Community Edition ✨\n\n[: Promise<any> {\n try {\n const response: any = await fetch(\n \"https://api"
},
{
"path": "frontend/app/components/Settings/InfoView.tsx",
"chars": 8937,
"preview": "\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport { Credentials, NodePayload, CollectionPayload "
},
{
"path": "frontend/app/components/Settings/SettingsComponent.tsx",
"chars": 10163,
"preview": "\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n Theme,\n Themes,\n TextFieldSetting,\n Ima"
},
{
"path": "frontend/app/components/Settings/SettingsView.tsx",
"chars": 4437,
"preview": "\"use client\";\n\nimport React, { useState } from \"react\";\n\nimport { RiAdminFill } from \"react-icons/ri\";\nimport { FaPaintB"
},
{
"path": "frontend/app/components/Settings/SuggestionView.tsx",
"chars": 5503,
"preview": "\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport { Credentials, Suggestion } from \"@/app/types\""
},
{
"path": "frontend/app/globals.css",
"chars": 97,
"preview": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n.react-colorful {\n height: 100px;\n}\n"
},
{
"path": "frontend/app/layout.tsx",
"chars": 430,
"preview": "import type { Metadata } from \"next\";\nimport \"./globals.css\";\n\nexport const metadata: Metadata = {\n title: \"Verba\",\n d"
},
{
"path": "frontend/app/page.tsx",
"chars": 9184,
"preview": "\"use client\";\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { GoogleAnalytics } from \"@next/t"
},
{
"path": "frontend/app/types.ts",
"chars": 14223,
"preview": "export type Credentials = {\n deployment: \"Weaviate\" | \"Docker\" | \"Local\" | \"Custom\";\n url: string;\n key: string;\n de"
},
{
"path": "frontend/app/util.ts",
"chars": 2780,
"preview": "import { Inter, Plus_Jakarta_Sans, Open_Sans, PT_Mono } from \"next/font/google\";\nimport { RAGConfig } from \"./types\";\n\n/"
},
{
"path": "frontend/glsl.d.ts",
"chars": 75,
"preview": "declare module \"*.glsl\" {\n const value: string;\n export default value;\n}\n"
},
{
"path": "frontend/next.config.js",
"chars": 630,
"preview": "/** @type {import('next').NextConfig} */\nconst nextConfig = {\n output: 'export',\n webpack: (config) => {\n config.mo"
},
{
"path": "frontend/package.json",
"chars": 1562,
"preview": "{\n \"name\": \"verba\",\n \"version\": \"2.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"next dev\",\n \"build\": \"next b"
},
{
"path": "frontend/postcss.config.js",
"chars": 83,
"preview": "module.exports = {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n"
},
{
"path": "frontend/public/macbook.gltf",
"chars": 606791,
"preview": "{\"asset\":{\"generator\":\"Khronos glTF Blender I/O v1.5.17\",\"version\":\"2.0\"},\"scene\":0,\"scenes\":[{\"name\":\"Scene\",\"nodes\":[1"
},
{
"path": "frontend/public/shaders/includes/simplexNoise4d.glsl",
"chars": 2965,
"preview": "//\tSimplex 4D Noise \n//\tby Ian McEwan, Ashima Arts\n//\nvec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}\nfloat p"
},
{
"path": "frontend/public/shaders/wobble/fragment.glsl",
"chars": 196,
"preview": "varying float vWobble;\nuniform vec3 uColorA;\nuniform vec3 uColorB;\n\nvoid main()\n{\n float colorMix = smoothstep(-1.0, "
},
{
"path": "frontend/public/shaders/wobble/vertex.glsl",
"chars": 4121,
"preview": "attribute vec4 tangent;\nuniform float uTime;\nuniform float uPositionFrequency;\nuniform float uTimeFrequency;\nuniform flo"
},
{
"path": "frontend/public/verba.gltf",
"chars": 116419,
"preview": "{\n \"asset\" : {\n \"generator\" : \"Khronos glTF Blender I/O v1.5.17\",\n \"version\" : \"2.0\"\n },\n \"scene\""
},
{
"path": "frontend/tailwind.config.ts",
"chars": 2446,
"preview": "import type { Config } from \"tailwindcss\";\nconst colors = require(\"tailwindcss/colors\");\n\nconst config: Config = {\n pur"
},
{
"path": "frontend/tsconfig.json",
"chars": 790,
"preview": "{\n \"compilerOptions\": {\n \"downlevelIteration\": true,\n \"target\": \"es5\",\n \"lib\": [\n \"dom\",\n \"dom.itera"
},
{
"path": "goldenverba/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/components/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/components/chunk.py",
"chars": 1575,
"preview": "from spacy.tokens import Doc, Span\n\n\nclass Chunk:\n def __init__(\n self,\n content: str = \"\",\n con"
},
{
"path": "goldenverba/components/chunking/CodeChunker.py",
"chars": 2940,
"preview": "import contextlib\n\nwith contextlib.suppress(Exception):\n from langchain_text_splitters import (\n Language,\n "
},
{
"path": "goldenverba/components/chunking/HTMLChunker.py",
"chars": 2168,
"preview": "import contextlib\n\nwith contextlib.suppress(Exception):\n from langchain_text_splitters import HTMLHeaderTextSplitter\n"
},
{
"path": "goldenverba/components/chunking/JSONChunker.py",
"chars": 2081,
"preview": "import contextlib\n\nimport json\n\nwith contextlib.suppress(Exception):\n from langchain_text_splitters import (\n "
},
{
"path": "goldenverba/components/chunking/MarkdownChunker.py",
"chars": 2933,
"preview": "import contextlib\n\nwith contextlib.suppress(Exception):\n from langchain_text_splitters import MarkdownHeaderTextSplit"
},
{
"path": "goldenverba/components/chunking/RecursiveChunker.py",
"chars": 3433,
"preview": "import contextlib\n\nwith contextlib.suppress(Exception):\n from langchain_text_splitters import RecursiveCharacterTextS"
},
{
"path": "goldenverba/components/chunking/SemanticChunker.py",
"chars": 7164,
"preview": "import contextlib\n\nfrom wasabi import msg\n\nwith contextlib.suppress(Exception):\n from sklearn.metrics.pairwise import"
},
{
"path": "goldenverba/components/chunking/SentenceChunker.py",
"chars": 3683,
"preview": "from wasabi import msg\n\nfrom goldenverba.components.chunk import Chunk\nfrom goldenverba.components.interfaces import Chu"
},
{
"path": "goldenverba/components/chunking/TokenChunker.py",
"chars": 3513,
"preview": "from wasabi import msg\n\nfrom goldenverba.components.chunk import Chunk\nfrom goldenverba.components.interfaces import Chu"
},
{
"path": "goldenverba/components/chunking/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/components/chunking/chunking_examples.py",
"chars": 718,
"preview": "from goldenverba.components.chunking.TokenChunker import TokenChunker\nfrom goldenverba.components.document import Docume"
},
{
"path": "goldenverba/components/document.py",
"chars": 4292,
"preview": "from goldenverba.server.types import FileConfig\nfrom goldenverba.components.chunk import Chunk\nfrom spacy.tokens import "
},
{
"path": "goldenverba/components/embedding/CohereEmbedder.py",
"chars": 3348,
"preview": "import os\nimport requests\nimport aiohttp\nimport json\n\nfrom goldenverba.components.interfaces import Embedding\nfrom golde"
},
{
"path": "goldenverba/components/embedding/GoogleEmbedder.py",
"chars": 1020,
"preview": "from weaviate import Client\nfrom goldenverba.components.interfaces import Embedder\nfrom goldenverba.components.document "
},
{
"path": "goldenverba/components/embedding/OllamaEmbedder.py",
"chars": 2035,
"preview": "import os\nimport requests\nfrom wasabi import msg\nimport aiohttp\nfrom urllib.parse import urljoin\n\nfrom goldenverba.compo"
},
{
"path": "goldenverba/components/embedding/OpenAIEmbedder.py",
"chars": 5673,
"preview": "import os\nimport json\nfrom typing import List\nimport io\n\nimport aiohttp\nfrom wasabi import msg\n\nfrom goldenverba.compone"
},
{
"path": "goldenverba/components/embedding/SentenceTransformersEmbedder.py",
"chars": 1478,
"preview": "from goldenverba.components.interfaces import Embedding\nfrom goldenverba.components.types import InputConfig\n\ntry:\n f"
},
{
"path": "goldenverba/components/embedding/UpstageEmbedder.py",
"chars": 3976,
"preview": "import os\nimport json\nfrom typing import List\nimport io\n\nimport aiohttp\nfrom wasabi import msg\n\nfrom goldenverba.compone"
},
{
"path": "goldenverba/components/embedding/VoyageAIEmbedder.py",
"chars": 4032,
"preview": "import os\nimport json\nfrom typing import List\nimport io\n\nimport aiohttp\nfrom wasabi import msg\n\nfrom goldenverba.compone"
},
{
"path": "goldenverba/components/embedding/WeaviateEmbedder.py",
"chars": 2419,
"preview": "import os\nimport requests\nfrom wasabi import msg\nimport aiohttp\n\nfrom goldenverba.components.interfaces import Embedding"
},
{
"path": "goldenverba/components/embedding/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/components/generation/AnthrophicGenerator.py",
"chars": 4236,
"preview": "import os\nfrom dotenv import load_dotenv\nfrom goldenverba.components.interfaces import Generator\nfrom goldenverba.compon"
},
{
"path": "goldenverba/components/generation/CohereGenerator.py",
"chars": 4349,
"preview": "import os\nimport json\nimport aiohttp\nfrom typing import List, Dict, AsyncGenerator\n\nfrom goldenverba.components.interfac"
},
{
"path": "goldenverba/components/generation/GeminiGenerator.py",
"chars": 5523,
"preview": "import os\n\ntry:\n import vertexai.preview\n from vertexai.preview.generative_models import GenerativeModel, Content,"
},
{
"path": "goldenverba/components/generation/GroqGenerator.py",
"chars": 6563,
"preview": "import json\nimport os\nimport aiohttp\nfrom typing import Any, AsyncGenerator, List, Dict\nfrom wasabi import msg\nimport re"
},
{
"path": "goldenverba/components/generation/NovitaGenerator.py",
"chars": 4663,
"preview": "import os\nfrom dotenv import load_dotenv\nimport json\nimport aiohttp\nimport requests\n\nfrom goldenverba.components.interfa"
},
{
"path": "goldenverba/components/generation/OllamaGenerator.py",
"chars": 3730,
"preview": "import os\nimport json\nimport aiohttp\nfrom urllib.parse import urljoin\nfrom typing import List, Dict, AsyncGenerator\n\nfro"
},
{
"path": "goldenverba/components/generation/OpenAIGenerator.py",
"chars": 4980,
"preview": "import os\nfrom dotenv import load_dotenv\nfrom goldenverba.components.interfaces import Generator\nfrom goldenverba.compon"
},
{
"path": "goldenverba/components/generation/UpstageGenerator.py",
"chars": 4718,
"preview": "import os\nfrom dotenv import load_dotenv\nfrom goldenverba.components.interfaces import Generator\nfrom goldenverba.compon"
},
{
"path": "goldenverba/components/generation/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/components/interfaces.py",
"chars": 7250,
"preview": "import os\n\nfrom goldenverba.components.document import Document\nfrom goldenverba.server.types import FileConfig\nfrom gol"
},
{
"path": "goldenverba/components/managers.py",
"chars": 50853,
"preview": "from wasabi import msg\n\nimport weaviate\nfrom weaviate.client import WeaviateAsyncClient\nfrom weaviate.auth import AuthAp"
},
{
"path": "goldenverba/components/reader/AssemblyAIAPI.py",
"chars": 4174,
"preview": "import base64\nimport io\nimport os\n\nimport requests\nfrom wasabi import msg\nimport aiohttp\nimport assemblyai as aai\n\nfrom "
},
{
"path": "goldenverba/components/reader/BasicReader.py",
"chars": 11867,
"preview": "import base64\nimport json\nimport io\nimport csv\n\nfrom wasabi import msg\n\nfrom goldenverba.components.document import Docu"
},
{
"path": "goldenverba/components/reader/FirecrawlReader.py",
"chars": 8051,
"preview": "import base64\nimport aiohttp\nimport asyncio\nimport os\nfrom typing import List, Tuple\n\nfrom wasabi import msg\n\nfrom golde"
},
{
"path": "goldenverba/components/reader/GitReader.py",
"chars": 8509,
"preview": "import aiohttp\nimport os\nimport urllib\nimport base64\n\nfrom wasabi import msg\n\nfrom goldenverba.components.document impor"
},
{
"path": "goldenverba/components/reader/HTMLReader.py",
"chars": 6887,
"preview": "import base64\nimport aiohttp\nfrom typing import Tuple, List\nfrom bs4 import BeautifulSoup\nfrom urllib.parse import urljo"
},
{
"path": "goldenverba/components/reader/UnstructuredAPI.py",
"chars": 4014,
"preview": "import base64\nimport io\nimport os\n\nimport requests\nfrom wasabi import msg\nimport aiohttp\n\nfrom goldenverba.components.do"
},
{
"path": "goldenverba/components/reader/UpstageDocumentParse.py",
"chars": 3385,
"preview": "import base64\nimport io\nimport os\n\nimport requests\nfrom wasabi import msg\nimport aiohttp\n\nfrom goldenverba.components.do"
},
{
"path": "goldenverba/components/reader/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/components/retriever/WindowRetriever.py",
"chars": 8236,
"preview": "from goldenverba.components.interfaces import Retriever\nfrom goldenverba.components.types import InputConfig\n\n\nclass Win"
},
{
"path": "goldenverba/components/retriever/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/components/types.py",
"chars": 262,
"preview": "from pydantic import BaseModel\nfrom typing import Literal, Union\n\n\nclass InputConfig(BaseModel):\n type: Literal[\"numb"
},
{
"path": "goldenverba/components/util.py",
"chars": 2088,
"preview": "import numpy as np\nimport os\n\n# Step 1: Standardize the data\ndef standardize_data(X):\n mean = np.mean(X, axis=0)\n "
},
{
"path": "goldenverba/server/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "goldenverba/server/api.py",
"chars": 24156,
"preview": "from fastapi import FastAPI, WebSocket, Request\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom fastapi.response"
},
{
"path": "goldenverba/server/cli.py",
"chars": 2603,
"preview": "import click\nimport uvicorn\nimport os\nfrom dotenv import load_dotenv\n\nfrom goldenverba import verba_manager\nfrom goldenv"
},
{
"path": "goldenverba/server/frontend/out/404.html",
"chars": 6809,
"preview": "<!DOCTYPE html><html lang=\"en\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-s"
},
{
"path": "goldenverba/server/frontend/out/_next/static/-4xCNh8fW_auOZGuG7OPj/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-28b8"
},
{
"path": "goldenverba/server/frontend/out/_next/static/-4xCNh8fW_auOZGuG7OPj/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/30i2FQTbR7Y4f-UfM6hbP/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/30i2FQTbR7Y4f-UfM6hbP/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/4ajn2kvxlVqvDvSUh7-up/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/4ajn2kvxlVqvDvSUh7-up/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/5piNIBwi9EVvWEGUCt1HJ/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/5piNIBwi9EVvWEGUCt1HJ/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/5rVRk1H0CSx_t9B72OCkV/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/5rVRk1H0CSx_t9B72OCkV/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/CZvV6ohXKOaM2HZQjSr_e/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/CZvV6ohXKOaM2HZQjSr_e/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/EK3SdW_8_2ZVH1NNgqlNv/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/EK3SdW_8_2ZVH1NNgqlNv/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/FEflRPdxwBXOroRwOpEz6/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/FEflRPdxwBXOroRwOpEz6/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/FcSX1HknjNhe9H0xxw_uy/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/FcSX1HknjNhe9H0xxw_uy/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/I01L2Qf2M5E8rKySVdfwz/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/I01L2Qf2M5E8rKySVdfwz/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/KoV36dmdEgYXG0yvTGe3m/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/KoV36dmdEgYXG0yvTGe3m/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/MYxb6oMzMgqonOwG97TqG/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/MYxb6oMzMgqonOwG97TqG/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/QPYBqPy_EgcZIfNhJUgzL/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/QPYBqPy_EgcZIfNhJUgzL/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/SqhqgckvG9-Sxn3_Nq2Rt/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/SqhqgckvG9-Sxn3_Nq2Rt/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/VZK8jRGqcSpcMf2ZOPpII/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/VZK8jRGqcSpcMf2ZOPpII/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/Y3oNq6sdVkiLcuMaChJwW/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/Y3oNq6sdVkiLcuMaChJwW/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/_LnFD6u1WPj3rRxWv1Mp3/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/_LnFD6u1WPj3rRxWv1Mp3/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/b8NLMEMd7UPwgQ6cqzdXK/_buildManifest.js",
"chars": 224,
"preview": "self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},\"/_error\":[\"static/chunks/pages/_error-6ae6"
},
{
"path": "goldenverba/server/frontend/out/_next/static/b8NLMEMd7UPwgQ6cqzdXK/_ssgManifest.js",
"chars": 80,
"preview": "self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/07115393-160e96bd79d1e493.js",
"chars": 682,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[682],{49270:function(t,a,n){n.d(a,{Lec:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/07115393-8a796b5d068e3710.js",
"chars": 682,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[682],{71375:function(t,a,n){n.d(a,{Lec:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/117-2e3ee50cbb6fc8da.js",
"chars": 124100,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[117],{65157:function(e,t){\"use strict\";function n(){return\"\"}Ob"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/12038df7-a10f1b9476e02872.js",
"chars": 787,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[400],{97230:function(t,c,n){n.d(c,{Lgw:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/12038df7-bbbca262706a9194.js",
"chars": 786,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[400],{8603:function(t,c,n){n.d(c,{Lgw:function(){r"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/12038df7-bed05817827b4802.js",
"chars": 943,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[400],{8603:function(t,n,r){r.d(n,{Lgw:function(){r"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/23-2fc6611658866471.js",
"chars": 123941,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[23],{29492:function(e,t){\"use strict\";function n(){return\"\"}Obj"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/23-b149ce429217dd65.js",
"chars": 123941,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[23],{29492:function(e,t){\"use strict\";function n(){return\"\"}Obj"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/39209d7c-1514aaef8caa025b.js",
"chars": 1153,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[306],{54018:function(c,s,L){L.d(s,{vuX:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/39209d7c-9eeaeffa37c8b51e.js",
"chars": 511,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[306],{54018:function(t,c,a){a.d(c,{EQK:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/39209d7c-f601708f0876481f.js",
"chars": 1153,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[306],{21151:function(c,s,L){L.d(s,{vuX:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/39aecf79-2d831b66f40a6478.js",
"chars": 2105,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[61],{22561:function(l,a,t){t.d(a,{drw:function(){r"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/39aecf79-474a3d3c48835c08.js",
"chars": 2105,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[61],{21794:function(l,a,t){t.d(a,{drw:function(){r"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/39aecf79-8d523cb23043db9d.js",
"chars": 1225,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[61],{21794:function(l,a,e){e.d(a,{dvR:function(){r"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/472688b4-2c611c3f7f6780f5.js",
"chars": 517,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[370],{95183:function(t,s,c){c.d(s,{QQh:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/472688b4-f8d4a7fb6705064c.js",
"chars": 517,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[370],{12649:function(t,s,c){c.d(s,{QQh:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/48507feb-c058e15125ba1e58.js",
"chars": 2015,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[465],{25847:function(t,a,r){r.d(a,{FUn:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/48507feb-cb362b7475ba2891.js",
"chars": 1390,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[465],{25847:function(t,a,r){r.d(a,{FUn:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/48507feb-fb2bbcdbd4adc32f.js",
"chars": 2015,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[465],{70476:function(t,a,r){r.d(a,{FUn:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/4f53ad1b-af82feddb1367bb5.js",
"chars": 2609,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[636],{88033:function(C,t,l){l.d(t,{$Wy:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/4f53ad1b-cf02b0f93cf25527.js",
"chars": 1462,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[636],{88033:function(C,t,l){l.d(t,{ZWp:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/4f53ad1b-f1821b28dab6f189.js",
"chars": 2609,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[636],{45983:function(C,t,l){l.d(t,{$Wy:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/4f9d9cd8-0af0a6a5e34c4b59.js",
"chars": 551,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[929],{43326:function(t,n,C){C.d(n,{Xn2:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/4f9d9cd8-7217d0ac0bfcc7ce.js",
"chars": 551,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[929],{22034:function(t,n,C){C.d(n,{Xn2:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/514-cff62b6f7919676e.js",
"chars": 1368058,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[514],{47239:function(e,t,n){\"use strict\";Object.defineProperty("
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/5349c568-74bb20b84335457b.js",
"chars": 474,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[520],{13629:function(l,t,h){h.d(t,{HL_:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/5349c568-e26f968c6773abca.js",
"chars": 474,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[520],{67447:function(l,t,h){h.d(t,{HL_:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/737dfa3e-71fd4aa07f7d84a6.js",
"chars": 477,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[33],{97223:function(t,n,e){e.d(n,{bqP:function(){r"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/789-e4deefde6e1de3c8.js",
"chars": 1320394,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[789],{90239:function(e,t,n){\"use strict\";Object.defineProperty("
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/864-15201e63d2e174b9.js",
"chars": 1307840,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[864],{90239:function(e,t,n){\"use strict\";Object.defineProperty("
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/8dc5345f-59beaec077e947c5.js",
"chars": 1309,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[115],{26615:function(t,h,a){a.d(h,{I2T:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/8dc5345f-9a36b2be5ef7459c.js",
"chars": 801,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[115],{93850:function(t,a,h){h.d(a,{I2T:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/8dc5345f-dfd13b91b6647830.js",
"chars": 1309,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[115],{93850:function(t,h,a){a.d(h,{I2T:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/8e68d877-65c524a5e56473c0.js",
"chars": 764,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[652],{73207:function(t,n,e){e.d(n,{y4s:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/8e68d877-6d32d357377fbcf8.js",
"chars": 764,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[652],{56321:function(t,n,e){e.d(n,{y4s:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/9081a741-3f102f6aee474fd0.js",
"chars": 11788,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[420],{14063:function(t,c,n){n.d(c,{$0H:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/9081a741-52789bf6b11470c5.js",
"chars": 11348,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[420],{14063:function(t,c,n){n.d(c,{$0H:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/9081a741-560e37099622c351.js",
"chars": 8561,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[420],{14063:function(t,c,n){n.d(c,{CkN:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/9081a741-599fa98ab2a737de.js",
"chars": 8086,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[420],{14063:function(t,c,n){n.d(c,{DAO:function(){"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/9081a741-a7c6599b4221aee8.js",
"chars": 11347,
"preview": "\"use strict\";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[420],{5674:function(t,c,n){n.d(c,{$0H:function(){r"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/949-4b7f5a091d97fe2c.js",
"chars": 1369625,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[949],{90239:function(e,t,n){\"use strict\";Object.defineProperty("
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/_not-found/page-26d6c07435b6028b.js",
"chars": 1750,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[409],{67589:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||["
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/_not-found/page-aaadc9fa354a98b4.js",
"chars": 1750,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[409],{67589:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||["
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/_not-found/page-d0fe2d040a50a096.js",
"chars": 1751,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[409],{67589:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||["
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/layout-213bbf4a992a0fc8.js",
"chars": 232,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{6458:function(n,e,u){Promise.resolve().then(u.t.bind(u,47"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/layout-ad434663ed5b1d3a.js",
"chars": 231,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{6458:function(n,e,u){Promise.resolve().then(u.t.bind(u,58"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/page-09caddcec70c8f21.js",
"chars": 107166,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{87094:function(e,t,n){Promise.resolve().then(n.bind(n,796"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/page-107cfe4c05eff918.js",
"chars": 127050,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{87094:function(e,t,a){Promise.resolve().then(a.bind(a,759"
},
{
"path": "goldenverba/server/frontend/out/_next/static/chunks/app/page-1afb38c40393046f.js",
"chars": 109615,
"preview": "(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{87094:function(e,t,a){Promise.resolve().then(a.bind(a,796"
}
]
// ... and 95 more files (download for full content)
About this extraction
This page contains the full source code of the weaviate/Verba GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 295 files (13.9 MB), approximately 3.7M tokens, and a symbol index with 16278 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.