diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..5a4ce435 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,28 @@ +# Installation + +## Build from source + +To build and run Ragbits from the source code: + +1. Requirements: [**uv**](https://docs.astral.sh/uv/getting-started/installation/) & [**python**](https://docs.astral.sh/uv/guides/install-python/) 3.10 or higher +2. Install dependencies and run venv in editable mode: + +```bash +$ source ./setup_dev_env.sh +``` + +## Install pre-commit + +To ensure code quality we use pre-commit hook with several checks. Setup it by: + +``` +pre-commit install +``` + +All updated files will be reformatted and linted before the commit. + +To reformat and lint all files in the project, use: + +`pre-commit run --all-files` + +The used linters are configured in `.pre-commit-config.yaml`. You can use `pre-commit autoupdate` to bump tools to the latest versions. diff --git a/README.md b/README.md index 2a2d8255..c47afb68 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,90 @@ -# Ragbits +
-Repository for internal experiment with our upcoming LLM framework. +

Ragbits

-# Installation +*Building blocks for rapid development of GenAI applications* -## Build from source +[Documentation](https://ragbits.deepsense.ai) | [Contact](https://deepsense.ai/contact/) -To build and run Ragbits from the source code: +[![PyPI - License](https://img.shields.io/pypi/l/ragbits)](https://pypi.org/project/ragbits) +[![PyPI - Version](https://img.shields.io/pypi/v/ragbits)](https://pypi.org/project/ragbits) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ragbits)](https://pypi.org/project/ragbits) -1. Requirements: [**uv**](https://docs.astral.sh/uv/getting-started/installation/) & [**python**](https://docs.astral.sh/uv/guides/install-python/) 3.10 or higher -2. Install dependencies and run venv in editable mode: +
-```bash -$ source ./setup_dev_env.sh +--- + +## What's Included? + +- [X] **[Core](packages/ragbits-core)** - Fundamental tools for working with prompts and LLMs. +- [X] **[Document Search](packages/ragbits-document-search)** - Handles vector search to retrieve relevant documents. +- [X] **[CLI](packages/ragbits-cli)** - The `ragbits` shell command, enabling tools such as GUI prompt management. +- [ ] **Flow Controls** - Manages multi-stage chat flows for performing advanced actions *(coming soon)*. +- [ ] **Structured Querying** - Queries structured data sources in a predictable manner *(coming soon)*. +- [ ] **Caching** - Adds a caching layer to reduce costs and response times *(coming soon)*. +- [ ] **Observability & Audit** - Tracks user queries and events for easier troubleshooting *(coming soon)*. +- [ ] **Guardrails** - Ensures response safety and relevance *(coming soon)*. + +## Installation + +To use the complete Ragbits stack, install the `ragbits` package: + +```sh +pip install ragbits +``` + +Alternatively, you can use individual components of the stack by installing their respective packages: `ragbits-core`, `ragbits-document-search`, `ragbits-cli`. + +## Quickstart + +First, create a prompt and a model for the data used in the prompt: + +```python +from pydantic import BaseModel +from ragbits.core.prompt import Prompt + +class Dog(BaseModel): + breed: str + age: int + temperament: str + +class DogNamePrompt(Prompt[Dog, str]): + system_prompt = """ + You are a dog name generator. You come up with funny names for dogs given the dog details. + """ + + user_prompt = """ + The dog is a {breed} breed, {age} years old, and has a {temperament} temperament. + """ ``` -## Install pre-commit +Next, create an instance of the LLM and the prompt: -To ensure code quality we use pre-commit hook with several checks. Setup it by: +```python +from ragbits.core.llms.litellm import LiteLLM +llm = LiteLLM("gpt-4o") +example_dog = Dog(breed="Golden Retriever", age=3, temperament="friendly") +prompt = DogNamePrompt(example_dog) ``` -pre-commit install + +Finally, generate a response from the LLM using the prompt: + +```python +response = await llm.generate(prompt) +print(f"Generated dog name: {response}") ``` -All updated files will be reformatted and linted before the commit. + + +## License -To reformat and lint all files in the project, use: +Ragbits is licensed under the [MIT License](LICENSE). -`pre-commit run --all-files` +## Contributing -The used linters are configured in `.pre-commit-config.yaml`. You can use `pre-commit autoupdate` to bump tools to the latest versions. +We welcome contributions! Please read [CONTRIBUTING.md](CONTRIBUTING.md) for more information.