Knowledge base service.
Project description
Dewy - The Knowledgebase for AI
Opinionated knowledge extraction and semantic retrieval for Gen AI applications.
Explore the docs »
Report Bug
·
Request Feature
About The Project
Dewy helps you build AI agents and RAG applications by managing the extraction of knowledge from your documents and implementing semantic search over the extracted content. Load your documents and Dewy takes care of parsing, chunking, summarizing, and indexing for retrieval Dewy builds on the lessons of putting real Gen AI applications into production so you can focus on getting 💩 done, rather than comparing vector databases and building data extraction infrastructure.
Below is the typical architecture of an AI agent performing RAG. Dewy handles all of the parts shown in brown, letting you focus on your application -- the parts in green.
Getting Started
To get a local copy up and running follow these steps.
- (Optional) Start a
pgvector
instance to persist your datadocker run -d \ -p 5432:5432 \ -e POSTGRES_DB=dewydb \ -e POSTGRES_USER=dewydbuser \ -e POSTGRES_PASSWORD=dewydbpwd \ -e POSTGRES_HOST_AUTH_METHOD=trust \ ankane/pgvector
- Install Dewy
pip install dewy
- Fire up Dewy
// Configure your OpenAI key (optional - local models will be used if not provided) export OPENAI_API_KEY=... // Configure your pgvector endpoint (this assumes you installed with Docker as shown previously) export DB=postgresql://dewydbuser:dewydbpwd@localhost/dewydb // Run the docker container dewy // Go to the management console to start creating resources! open http://localhost/admin
- Install the API client library
npm install dewy-ts
- Add documents
import { Dewy } from 'dewy_ts'; const dewy = new Dewy({endpoint: “localhost:3000”}) await dewy.addDocument({url: “https://arxiv.org/abs/2005.11401”})
- Retrieve document chunks for LLM prompting
import { Dewy } from 'dewy_ts'; const dewy = new Dewy({endpoint: “localhost:3000”}) const context = await dewy.retrieveChunks({query: "tell me about RAG", n: 10}); const prompt = [ { role: 'system', content: `You are a helpful assistant. You will take into account any CONTEXT BLOCK that is provided in a conversation. START CONTEXT BLOCK ${context.results.map((c: any) => c.chunk.text).join("\n")} END OF CONTEXT BLOCK `, }, ] const response = await openai.chat.completions.create({ model: 'gpt-3.5-turbo', stream: true, messages: [...prompt, [{role: 'user': content: 'Tell me about RAG'}]] })
Swagger docs at http://localhost:8000/docs
.
Notebook example_notebook.ipynb
uses the REST API from Python.
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Development Installation
- Clone the repo
git clone https://github.com/DewyKB/dewy.git
- Install Python packages
poetry install
- Configure Dewy.
Dewy will read env vars from an
.env
file if provided. You can also set these directly in the environment, for example when configuring an instance running in docker / kubernetes.cat > .env << EOF ENVIRONMENT=LOCAL DB=postgresql://... OPENAI_API_KEY=... EOF
- Build the frontend
cd frontend && npm install && npm run build
- Run the Dewy service
poetry run dewy
Practices
Some skeleton code based on best practices from https://github.com/zhanymkanov/fastapi-best-practices.
The following commands run tests and apply linting.
If you're in a poetry shell
, you can omit the poetry run
:
- Running tests:
poetry run pytest
- Linting (and formatting):
poetry run ruff check --fix
- Formatting:
poetry run ruff format
- Type Checking:
poetry run mypy app
License
Distributed under the Apache 2 License. See LICENSE.txt
for more information.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.