base on The easiest way to use Agentic RAG in any enterprise <p align="center"><img alt="Logo - RAGapp" src="docs/logo.png"></p> <p align="center"><strong>The easiest way to use Agentic RAG in any enterprise.</strong></p> <p align="center">As simple to configure as <a href="https://openai.com/index/introducing-gpts" target="_blank">OpenAI's custom GPTs</a>, but deployable in your own cloud infrastructure using Docker. Built using <a href="https://github.com/run-llama/llama_index">LlamaIndex</a>.</p> <p align="center"> <a href="#get-started"><strong>Get Started</strong></a> · <a href="#endpoints"><strong>Endpoints</strong></a> · <a href="#deployment"><strong>Deployment</strong></a> · <a href="#contact"><strong>Contact</strong></a> </p> <br/> <img alt="Screenshot" src="docs/screenshot.png"> ## Get Started To run, start a docker container with our image: ```shell docker run -p 8000:8000 ragapp/ragapp ``` Then, access the Admin UI at http://localhost:8000/admin to configure your RAGapp. You can use hosted AI models from OpenAI or Gemini, and local models using [Ollama](https://ollama.com/). > _Note_: To avoid [running into any errors](https://github.com/ragapp/ragapp/issues/22), we recommend using the latest version of Docker and (if needed) Docker Compose. ## Endpoints The docker container exposes the following endpoints: - Admin UI: http://localhost:8000/admin - Chat UI: http://localhost:8000 - API: http://localhost:8000/docs > _Note_: The Chat UI and API are only functional if the RAGapp is configured. ## Security ### Authentication Just the RAGapp container doesn't come with any authentication layer by design. This is the task of an API Gateway routing the traffic to RAGapp. This step heavily depends on your cloud provider and the services you use. For a pure Docker Compose environment, you can look at our [RAGapp with management UI](./deployments/multiple-ragapps) deployment. ### Authorization Later versions of RAGapp will support restricting access based on access tokens forwarded from an API Gateway or similar. ## Deployment ### Using Docker Compose You can easily deploy RAGapp to your own infrastructure with one of these Docker Compose deployments: 1. [RAGapp with Ollama and Qdrant](./deployments/single) 2. [Multiple RAGapps with a management UI](./deployments/multiple-ragapps) ### Kubernetes It's easy to deploy RAGapp in your own cloud infrastructure. Customized K8S deployment descriptors are coming soon. ## Development ### RAGApp: > _Important_: Parts of this project's source code is dynamically retrieved from the [create-llama](https://github.com/run-llama/create-llama) project. Before committing changes, make sure to update the source code by calling `make build-frontends`. Move to [src/ragapp](src/ragapp) directory and start with these commands: ```shell export ENVIRONMENT=dev poetry install --no-root make build-frontends make dev ``` Then, to check out the admin UI, go to http://localhost:3000/admin. > _Note_: Make sure you have [Poetry](https://python-poetry.org/) installed. ## Contact Questions, feature requests or found a bug? [Open an issue](https://github.com/ragapp/ragapp/issues/new/choose) or reach out to [marcusschiesser](https://github.com/marcusschiesser). ## Star History [![Star History Chart](https://api.star-history.com/svg?repos=ragapp/ragapp&type=Date)](https://star-history.com/#ragapp/ragapp&Date) ", Assign "at most 3 tags" to the expected json: {"id":"10351","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"