Giter VIP home page Giter VIP logo

qdrant-web-ui's Introduction

Qdrant web-ui

This is a self-hosted web UI for Qdrant Vector Search Engine.

This UI is supposed to be served by Qdrant itself, but you can use it as a standalone application.

Main goal of this UI is to provide a simple way to view and manage your collections.

Similar to Kibana for Elasticsearch, but does not require any additional services.

Available Scripts

In the project directory, you can run:

npm start

Runs the app in the development mode.
Open http://localhost:3000 to view it in your browser.

Development mode expects that Qdrant is running on http://localhost:6333.

npm test

Launches the test runner in the interactive watch mode.
See the section about running tests for more information.

npm run build

Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.
Your app is ready to be deployed!

See the section about deployment for more information.

Stack used

qdrant-web-ui's People

Contributors

ashwagandhae avatar bashofmann avatar coszio avatar elbart avatar fabribet avatar generall avatar intech avatar kaijietti avatar kartik-gupta-ij avatar mautini avatar nawed2611 avatar programmer-dost avatar snehil-shah avatar stefanb7 avatar timvisee avatar trean avatar xzfc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

qdrant-web-ui's Issues

qdrant-web-ui console

What are the main functions of the web ui console? I tried using this to create collections and save the code, but it doesn't seem like I actually created it. Thank you
image

Design frame layout

Use MUI open-source templates to define basic page components:

  • Header
  • Side bar
  • Footer

Feature: An easier way to create collections from the dashboard

Like a lot of other database client UIs, we can have a + Collection button in the homepage, where a user can quickly create a new collection using a form based interface and start working on it, instead of going to the console.

Something like this:
image

This will open up a form where user can fill in basic details of the collection, and also have an advanced section for further configurations

405 Method Not Allowed

I'm keep getting this error do you guys know why?

Visualization Unsuccessful, error: {"message":"Request failed with status code 405","name":"AxiosError","stack":"AxiosError: Request failed with status code 405\n at qte (https://[CENSORED URL]/dashboard/assets/index-22a6d29c.js:295:959)\n at XMLHttpRequest.d (https://[CENSORED URL]/dashboard/assets/index-22a6d29c.js:295:4075)","config":{"transitional":{"silentJSONParsing":true,"forcedJSONParsing":true,"clarifyTimeoutError":false},"adapter":["xhr","http"],"transformRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"maxBodyLength":-1,"env":{},"headers":{"Accept":"application/json, text/plain, /","api-key":"[CENSORED API KEY]","Content-Type":"application/json"},"baseURL":"https://[CENSORED URL]/dashboard/","method":"post","url":"collections/me_BOT/points/scroll","data":"{"limit":500,"color_by":"source","with_vector":true}"},"code":"ERR_BAD_REQUEST","status":405}

`color_by` doesn't work with nested object path

Examples:
Screenshot from 2023-08-17 12-57-17
Screenshot from 2023-08-17 12-56-28

scroll request works properly and returns the necessary data.

const labelby = scrollResult.data.color_by;
if (labelby) {
if (scrollResult.data.result?.points[0]?.payload[labelby] === undefined) {
enqueueSnackbar(`Visualization Unsuccessful, error: Color by field ${labelby} does not exist`, {
variant: 'error',
action,
});
return;
}
scrollResult.data.labelByArrayUnique = [
...new Set(scrollResult.data.result?.points?.map((point) => point.payload[labelby])),
];

Add "Commands" tooltip to the list commands icon

image

It's not clear what the icon does, it can be misinterpreted as a "RUN all commands" or "Open new console" etc.

Adding a tooltip on hover that says "Commands" or something similar will make it clearer to the user.

If this issue is entertained, I would like to work on this.

[Web-UI] UX visualization improvements

The Web-UI (http://localhost:6333/dashboard#/collections/<collection>/visualize) is very useful for quick exploration of a collection.
However, the UX might need some minor improvements. I guess that the most common use case is free exploration i.e., you take a look at your points and see which topics seem to form some kind of cluster. By doing so, currently when you hover over the points, first the raw JSON is displayed. Displaying the embeddings here is not needed.
image

When you click on the point, an overlay appears in a nice tabular format. The embeddings are hidden by default.
image

I think what would be better suited is an integration of the overlay table in the right side bar as there is lots of available space. Maybe two tabs would be good, one for the request and one for the point info?
image

If the tabular format was displayed for each point on hover in the right side bar, one could much easier explore a collection.

Anyway thanks a lot for providing the tool - much appreciated! :)

[Console] Gallery of examples

Prepare and integrate a collection of useful examples which user can select to start with something.

Should have a menu to to select an example by name: click on example should insert in into the editor

Link previews render quirky

See, how the link previews are rendered right now.

Slack:
Screenshot 2023-06-28 at 22 19 44
Discord:
Screenshot 2023-06-28 at 22 19 58

This looks quite ugly, so let's change this

I suggest the following changes:
index.html

  • change the <title> to: UI | Qdrant like you do already for when the SPA loads
  • change the <meta name="description"> value to: Qdrant Web UI

public/manifest.json

  • short_name: "UI | Qdrant"
  • name: "Qdrant Web UI"

logos

  • the logo being rendered in slack is either the logo192.png or logo512.png. Those need to be replaced by a qdrant logo of that size.

Could you provide a dockerfile for this project?

I build a dockerfile by myself looks below:

FROM node:18-alpine

WORKDIR /app

COPY . .

CMD ["npm", "start"]

And when I start the container, I got a error "sh: vite: not found". I'm not very familiar with front-end projects. It will make my life easier if you can provide a dockerfile which can handle all the dependencies.
Thank you.

Add deeplink to the docs for each request in the console

I mostly use the auto completion to write the endpoint I want to query in the console but then I do not remember all the parameters which are required / optional. I just want to click on a link which deeplinks to the endpoint I want to query. The link could be next to the "RUN | BEAUTIFY" buttons. What do you think?

UI Dashboard can't work offline

The UI Dashboard loads the monaco-editor package from an online CDN.
So the Dashboard console can't work while offline or on Kubernetes Pods without internet access

Current Behavior

Console won't load

Steps to Reproduce

  1. Try to use the dashboard console on an offline machine

Expected Behavior

Loading the dependencies from the UI server.

Possible Solution

Add monaco-editor as a local dependency

Split PR into multiple smaller once

There is a PR with multiple useful fixes: #38

  • introduction of Vite
  • hotkeys in console
  • typescript intgration

But it is too huge to be merged in one run.
Let's split it function-wise and merge one-by-one

[Console] Allow comments

Make commentaries (lines, starting with //) a valid syntax construction in console

Advanced: make any text after // commentary, not only the whole line

Run from pre-built docker image

A Qdrant admin UI is an amazing idea! It would be perfect if we could just run it from a pre-built docker image though...
Even better would be to have a version of qdrant vector store docker image with the UI served there as well, in a separate port.

Page for viewing collection content

Desired features:

  • Be able to see first N records of the collection
  • Should be possible to click on records to see similar ones
  • If payload contains links, try to render links as images
  • Nested payload values render as json

Changes required to adapt with sparse vectors

I noticed some issues with the dashboard when using sparse vectors. So creating an issue here for us to track those.

  1. Sparse vector dims are not displayed in the dashboard
    sparse-vector-dashboard

  2. Sparse vector visualization doesn't work because the response format is slightly different

qdrant-sparse-viz

Both of these are low-priority tasks at the moment.

Setting the value of 'history' exceeded the quota on Console Page

When testing queries a lot of time, I end up with the error:

{
  "stack": "Error: Failed to execute 'setItem' on 'Storage': Setting the value of 'history' exceeded the quota.\n    at https://127.0.0.1/dashboard/assets/index-92508d58.js:250:7963\n    at async https://127.0.0.1/dashboard/assets/index-92508d58.js:262:12108"
}

By clearing some queries in the History pop-up, I can finally send requests again.

Reset button doesn't work, it doesn't clear the history

I think old requests should be deleted automatically or limit must be increased (seems to be around 470)

Add a license

This will reduce ambiguity and provide ease-of-mind for companies and developers that want to use/improve this tool.

The Qdrant DB uses Apache 2.0, maybe keep going with that?

[Console] History mode

Add ability to save previously used editor states and, if necessary, go back to them.
Saved states should be placed into the local storage of the browser.

Add Color Mode Based on Media Queries

Hi,

I would like to request the addition of a color mode based on media queries. It would be great to have a color theme for both light and dark modes that switches automatically based on the user's current choice.

There are many different implementations of this and I'm not a front-end dev, but I like the way Material for MkDocs does it with a 3-state button.

Thanks in advance!

[Console] Autocomplete

Implement autocomplete for requests based on OpenAPI schema of qdrant: https://qdrant.github.io/qdrant/redoc/index.html

Autocomplete should suggest:

  • next allowed work in API url. Examples

    • /collect -> ["collections"]
    • /collections/mycollection/ -> ["points", "snapshots"]
  • Allowed fields in JSON:

{
  "filter": {
    "|
  }
}

should suggest

must
should
must_not

Support For Non Root Path Hosting

The dashboard expects Qdrant to be hosted at the root of a domain otherwise it breaks. Our clusters work by hosting each service, or which Qdrant is one, on the same domain each with their own sub path. So for instance www.foo.com/qdrant.

need a docker image for every release

I'm currently using Qdrant and I tried it for the first time the UI and I know it is currently working in progress,

But it is better we have a docker image for this so that we can add it to kubernetees.

Thanks

Bug in ids of documents on dashboard

Hi - I have created the ID of the document using the following hash function.

record_id, _ = mmh3.hash64(file_data, signed=False)

If I check the ID using Python client, I get the actual ID. On Qdrant dashboard, it seems that we approximate the value to the nearest thousand
Suppose the actual id is 298631332630714982. On UI, we get ID 298631332630715000
It makes it slightly challenging to use the qdrant dashboard using record_id.

Move to Vite or Next with TypeScript

I would like to suggest moving to Next.js or Vite with TypeScript as CRA (create-react-app) is not recommended anymore.

Below are few reasons for the same -

  1. Faster build times
  2. Hot Code Reloading with Vite while Next.js provides a simplified API for handling server-side rendering and static site generation
  3. Built-in TypeScript support - As the project grows, it would be helpful to have type safety within the app and the ability to access features like autocomplete through TypeScript

Fold button hitbox is not accurate

Hi !
It seems the fold button on the monaco editor is not fully accurate. I need to click upper than the button I see if I want to fold my JSON.

Capture.video.du.26-06-2023.15.01.05.webm

Visualize button doesn't work in collections page

I guess this is implemented yet. But looks wrong to put CTA with an unimplemented functionality.
I think we should hide VISUALIZE button.

I tried to check github history of src/components/Collections/CollectionCard.jsx. This button was from start.
I am curious to know, is visualize coming soon ?

Add vector name auto-complete in visualisation

The visualisation tool requires a vector name to build a map

A user does not necessarily remembers vector names, they might be bulky or they can be autogenerated (e.g. with fastembed)

To find a vector name, one need to do some extra actions, like visiting other pages or making requests to the DB.

It would be nice to have autocomplete for vector_name field, or have available vector names somewhere in the vicinity.

If there is only one vector in a collection, then it might also be helpful to fill vector_name automatically.

image

Implementing Vector Visualization Page

Implementing Vector Visualization Page

This Issue proposes the implementation of a vector visualization page, which involves converting n-dimensional vectors into 2 dimensions and plotting the resulting points on a 2D graph. The page allows users to filter points, assign colours based on specified criteria (color_by), and select vectors using vector_name if a point has multiple vectors.

Route

/#/collections/:collection_name/visualize

Changes to be Made

  • Implemented a filter editor window for users to customize point filtering.
  • Performed dimension reduction on the n-dimensional vectors to plot them in 2D.
  • Created a graph plotting component for visualizing the converted vectors.
  • Included optimizers to improve the efficiency of the visualization process.

Task List

  • Filter Editor window
  • Dimension reduction
  • Plotting Graph
  • Optimizers

Please review and provide feedback on the proposed changes. Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.