{"id":28533496,"url":"https://github.com/epam/ai-dial-rag","last_synced_at":"2026-04-29T18:01:32.652Z","repository":{"id":293673613,"uuid":"943974999","full_name":"epam/ai-dial-rag","owner":"epam","description":"Document Q\u0026A system with multiple retrieval methods","archived":false,"fork":false,"pushed_at":"2026-01-22T19:55:50.000Z","size":54406,"stargazers_count":11,"open_issues_count":9,"forks_count":5,"subscribers_count":16,"default_branch":"development","last_synced_at":"2026-01-23T04:15:59.063Z","etag":null,"topics":["ai-dial","llm"],"latest_commit_sha":null,"homepage":"https://dialx.ai","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/epam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-06T15:20:22.000Z","updated_at":"2026-01-21T19:08:26.000Z","dependencies_parsed_at":"2025-10-20T14:39:17.470Z","dependency_job_id":null,"html_url":"https://github.com/epam/ai-dial-rag","commit_stats":null,"previous_names":["epam/ai-dial-rag"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/epam/ai-dial-rag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-rag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-rag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-rag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-rag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epam","download_url":"https://codeload.github.com/epam/ai-dial-rag/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-rag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28929701,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T04:05:25.756Z","status":"ssl_error","status_checked_at":"2026-01-31T04:02:35.005Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-dial","llm"],"created_at":"2025-06-09T17:07:17.555Z","updated_at":"2026-04-29T18:01:32.637Z","avatar_url":"https://github.com/epam.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dial RAG\n\n## Overview\n\nThe Dial RAG answers user questions using information from the documents provided by user. It supports the following document formats: PDF, DOC/DOCX, PPT/PPTX, TXT and other plain text formats such as code files. Also, it supports PDF and JPEG, PNG and other image formats for the image understanding.\n\nThe Dial RAG implements several retrieval methods to find the relevant information:\n\n- **Description retriever** - uses vision model to generate page images descriptions and perform search on them. Supports different vision models, like `gpt-4o-mini`, `gemini-1.5-flash-002` or `anthropic.claude-v3-haiku`.\n- **Multimodal retriever** - uses multimodal embedding models for pages images search. Supports different multimodal models, like [`azure-ai-vision-embeddings`](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/concept-image-retrieval), [Google `multimodalembedding@001`](https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings) or [`amazon.titan-embed-image-v1`](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-multiemb-models.html)\n- **Semantic retriever** - uses [text embedding model](https://huggingface.co/epam/bge-small-en) to find the relevant information in the documents.\n- **Keyword retriever** - uses [Okapi BM25](https://en.wikipedia.org/wiki/Okapi_BM25) algorithm to find the relevant information in the documents.\n\nThe Dial RAG is intended to be used in the [Dial](https://github.com/epam/ai-dial) environment. It uses the [Dial Core](https://github.com/epam/ai-dial-core) to access the LLMs and other services.\n\n## Configuration\n\n### Required environment variables\n\nFollowing environment variables are required to set for the deployment configuration:\n\n| Variable                                         | Description                                                                                 |\n| ------------------------------------------------ | ------------------------------------------------------------------------------------------- |\n| `DIAL_URL`                                       | url to the dial core                                                                        |\n| `DIAL_RAG__INDEX_STORAGE__USE_DIAL_FILE_STORAGE` | set to **True** to store indexes in the Dial File Storage instead of the local file storage |\n\n### Configuration files\n\nThe Dial RAG provides a set of configuration files with predefined settings for different environments. The configuration files are located in the `config` directory.\nYou can set the environment variable `DIAL_RAG__CONFIG_PATH` to point to the required configuration file depending on the Dial environment and available models.\n\nThe following configuration files are available in the `config` directory:\n\n- `config/aws_description.yaml` - AWS environment with description retriever, which uses `Claude Haiku 4.5` model for page images descriptions and `Claude Sonnet 3.5` for the answer generation.\n- `config/aws_embedding.yaml` - AWS environment with multimodal retriever, which uses `amazon.titan-embed-image-v1` model for page images embeddings and `Claude Sonnet 3.5` for the answer generation.\n- `config/azure_description.yaml` - Azure environment with description retriever, which uses `GPT-4.1 mini` model for page images descriptions and `GPT-4.1` for the answer generation.\n- `config/azure_embedding.yaml` - Azure environment with multimodal retriever, which uses `azure-ai-vision-embeddings` model for page images embeddings and `GPT-4.1` for the answer generation.\n- `config/gcp_description.yaml` - GCP environment with description retriever, which uses `Gemini 2.5 Flash` model for page images descriptions and `Gemini 2.5 Pro` for the answer generation.\n- `config/gcp_embedding.yaml` - GCP environment with multimodal retriever, which uses Google `multimodalembedding@001` model for page images embeddings and `Gemini 2.5 Pro` for the answer generation.\n- `config/azure_with_gcp_embedding.yaml` - mixed environment which assumes that you have and access to both Azure and GCP models in the Dial. It uses Google `multimodalembedding@001` model for page images embeddings and `GPT-4.1` for the answer generation.\n- `config/text_only.yaml` - example of config with text-only mode, where the image-based retrievers are disabled. This config can be used with LLMs which do not support image inputs. Uses `GPT-4.1` for the answer generation by default.\n\nIf you are running the Dial RAG in a different environment, you can create your own configuration file based on one of the provided files and set the `DIAL_RAG__CONFIG_PATH` environment variable to point to it. If you need a small change in the configuration (for example to change the model name), you can point the `DIAL_RAG__CONFIG_PATH` to the existing file and override the required settings using the environment variables. See the [Additional environment variables](#additional-environment-variables) section for the list of available settings.\n\n### Logging configuration environment variables\n\n| Variable             | Default | Description                                                                                                                   |\n| -------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |\n| `LOG_LEVEL`          | `INFO`  | Log level for the application.                                                                                                |\n| `LOG_LEVEL_OVERRIDE` | `{}`    | Allows to override log level for specific modules. Example: `LOG_LEVEL_OVERRIDE='{\"dial_rag\": \"DEBUG\", \"urllib3\": \"ERROR\" }'` |\n\n### Additional environment variables\n\nDial RAG has additional variables to tune its performance and behavior:\n\n\u003c!-- The following section of the file is automatically generated from the AppConfig. --\u003e\n\u003c!-- Do NOT edit it manually. Use `nox -s update_docs` command for update. --\u003e\n\n\u003c!-- generated-app-config-env-start --\u003e\n##### `DIAL_RAG__CONFIG_PATH`\n\n*Optional*, default value: `.`\n\nPath to the yaml configuration file.See config directory for examples.\n\n##### `DIAL_URL`\n\n*Optional*, default value: `http://dial-proxy.dial-proxy`\n\nUrl to the dial core.\n\n##### `DIAL_RAG__HEADERS_TO_PROXY`\n\n*Optional*\n\nList of headers to proxy from the request to the dial core.\n\n##### `ENABLE_DEBUG_COMMANDS`\n\n*Optional*, default value: `False`\n\nEnables support of debug commands in the messages. Should be `false` for prod envs. It is set to `true` only for staging. See [Debug commands](README.md#debug-commands) for more details.\n\n##### `DIAL_RAG__CPU_POOLS__INDEXING_CPU_POOL`\n\n*Optional*, default value: `6`\n\nProcess pool for document parsing, image extraction and similar CPU-bound tasks. Is set to `max(1, CPU_COUNT - 2)` to leave some CPU cores for other tasks.\n\n##### `USE_DIAL_FILE_STORAGE`\n\n*Optional*, default value: `False`\n\nSet to `True` to store indexes in the Dial File Storage instead of in memory storage\n\n##### `DIAL_RAG__INDEX_STORAGE__IN_MEMORY_CACHE_CAPACITY`\n\n*Optional*, default value: `128MiB`\n\nUsed to cache the document indexes and avoid requesting Dial Core File API every time, if user makes several requests for the same document. Could be increased to reduce load on the Dial Core File API if we have a lot of concurrent users (requires corresponding increase of the pod memory). Could be integer for bytes, or a pydantic.ByteSize compatible string (e.g. 128MiB, 1GiB, 2.5GiB).\n\n##### `DIAL_RAG__REQUEST__IGNORE_DOCUMENT_LOADING_ERRORS`\n\n*Optional*, default value: `False`\n\nIgnore errors during document loading. Used for Web RAG for the request with multiple documents.\n\n##### `DIAL_RAG__REQUEST__USE_PROFILER`\n\n*Optional*, default value: `False`\n\nUse profiler to collect performance metrics for the request.\n\n##### `DIAL_RAG__REQUEST__LOG_DOCUMENT_LINKS`\n\n*Optional*, default value: `False`\n\nAllows writing the links of the attached documents to the logs with log levels higher than DEBUG.\n\nIf enabled, Dial RAG will log the links to the documents for log messages with levels from INFO to CRITICAL where relevant. For example, an ERROR log message with an exception during document processing will contain the link to the document.\n\nIf disabled, only log messages with DEBUG level may contain the links to the documents, to avoid logging sensitive information. For example, the links to the documents will not be logged for the ERROR log messages with an exception during document processing.\n\n##### `DIAL_RAG__REQUEST__DOWNLOAD__TIMEOUT_SECONDS`\n\n*Optional*, default value: `30`\n\nTimeout for the whole request. Includes connection establishment, sending the request, and receiving the response.\n\n##### `DIAL_RAG__REQUEST__DOWNLOAD__CONNECT_TIMEOUT_SECONDS`\n\n*Optional*, default value: `30`\n\nTimeout for establishing a connection to the server.\n\n##### `DIAL_RAG__REQUEST__CHECK_ACCESS__TIMEOUT_SECONDS`\n\n*Optional*, default value: `30`\n\nTimeout for the whole request. Includes connection establishment, sending the request, and receiving the response.\n\n##### `DIAL_RAG__REQUEST__CHECK_ACCESS__CONNECT_TIMEOUT_SECONDS`\n\n*Optional*, default value: `30`\n\nTimeout for establishing a connection to the server.\n\n##### `DIAL_RAG__REQUEST__INDEXING__PARSER__MAX_DOCUMENT_TEXT_SIZE`\n\n*Optional*, default value: `5MiB`\n\nLimits the size of the document the RAG will accept for processing. This limit is applied to the size of the text extracted from the document, not the size of the attached document itself. Could be integer for bytes, or a pydantic.ByteSize compatible string.\n\n##### `DIAL_RAG__REQUEST__INDEXING__PARSER__UNSTRUCTURED_CHUNK_SIZE`\n\n*Optional*, default value: `1000`\n\nSets the chunk size for unstructured document loader.\n\n##### `DIAL_RAG__REQUEST__INDEXING__MULTIMODAL_INDEX`\n\n*Optional*, default value: `None`\n\nEnables MultimodalRetriever which uses multimodal embedding models for pages images search.\n\n##### `DIAL_RAG__REQUEST__INDEXING__DESCRIPTION_INDEX`\n\n*Optional*, default value: `llm=LlmConfig(deployment_name='gpt-4.1-mini-2025-04-14', max_prompt_tokens=0, max_retries=1000000000, temperature=0.0) estimated_task_tokens=4000 time_limit_multiplier=1.5 min_time_limit_sec=300`\n\nEnables DescriptionRetriever which uses vision model to generate page images descriptions and perform search on them.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__LLM__DEPLOYMENT_NAME`\n\n*Optional*, default value: `gpt-4.1-2025-04-14`\n\nUsed to set the deployment name of the LLM used in the chain. Could be useful if the model deployments have non-standard names in the Dial Core configuration.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__LLM__MAX_PROMPT_TOKENS`\n\n*Optional*, default value: `0`\n\nSets `max_prompt_tokens` for the history truncation for the LLM, if history is used. Requires `DEPLOYMENT_NAME` model to support he history truncation and `max_prompt_tokens` parameter. Could be set to `0` to disable the history truncation for models which does not support it, but will cause error it if max model context window will be reached.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__LLM__MAX_RETRIES`\n\n*Optional*, default value: `2`\n\nSets the number of retries to send the request to the LLM.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__LLM__TEMPERATURE`\n\n*Optional*, default value: `0.0`\n\nSets the temperature for the LLM, controlling the randomness of the output. Higher values (e.g., 1.0) make the output more random, while lower values (e.g., 0.0) make it more deterministic.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__SYSTEM_PROMPT_TEMPLATE_OVERRIDE`\n\n*Optional*, default value: `None`\n\nAllow to override the system prompt template.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__USE_HISTORY`\n\n*Optional*, default value: `True`\n\nUsed to set whether to use the history for the answer generation. If true, the previous messages from the chat history would be passes to the model. If false, only the query (last user message or standalone question, depending on the `query_chain` settings) will be passed to the model for the answer generation.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__NUM_PAGE_IMAGES_TO_USE`\n\n*Optional*, default value: `4`\n\nSets number of page images to pass to the model for the answer generation. If is greater that 0, the model in `llm.deployment_name` should accept images in the user messages. Could be set to 0 (together with USE_MULTIMODAL_INDEX=False and USE_DESCRIPTION_INDEX=False) for text-only RAG.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__CHAT_CHAIN__PAGE_IMAGE_SIZE`\n\n*Optional*, default value: `1536`\n\nSets the size of the page images to pass to the model for the answer generation.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__QUERY_CHAIN__LLM__DEPLOYMENT_NAME`\n\n*Optional*, default value: `gpt-4.1-2025-04-14`\n\nUsed to set the deployment name of the LLM used in the chain. Could be useful if the model deployments have non-standard names in the Dial Core configuration.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__QUERY_CHAIN__LLM__MAX_PROMPT_TOKENS`\n\n*Optional*, default value: `0`\n\nSets `max_prompt_tokens` for the history truncation for the LLM, if history is used. Requires `DEPLOYMENT_NAME` model to support he history truncation and `max_prompt_tokens` parameter. Could be set to `0` to disable the history truncation for models which does not support it, but will cause error it if max model context window will be reached.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__QUERY_CHAIN__LLM__MAX_RETRIES`\n\n*Optional*, default value: `2`\n\nSets the number of retries to send the request to the LLM.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__QUERY_CHAIN__LLM__TEMPERATURE`\n\n*Optional*, default value: `0.0`\n\nSets the temperature for the LLM, controlling the randomness of the output. Higher values (e.g., 1.0) make the output more random, while lower values (e.g., 0.0) make it more deterministic.\n\n##### `DIAL_RAG__REQUEST__QA_CHAIN__QUERY_CHAIN__USE_HISTORY`\n\n*Optional*, default value: `True`\n\nUsed to set whether to use the history for the chat history summarization to the standalone question for retrieval. If true, the previous messages from the chat history would be passes to the model to make a standalone question. If false, the last user message was assumed to be a standalone question and be used for retrieval as is.\n\u003c!-- generated-app-config-env-end --\u003e\n\n## Commands\n\nDial RAG supports following commands in messages:\n\n### Attach\n\n`/attach \u003curl\u003e` - allows to provide an url to the attached document in the message body. Is equivalent to the setting `messages[i].custom_content.attachments[j].url` in the [Dial API](https://dialx.ai/dial_api).\n\nThe `/attach` command is useful to attach the document which is available in the Internet and is not uploaded to the Dial File Storage.\n\n### Debug commands\n\nDial RAG supports following debug commands if the option `ENABLE_DEBUG_COMMANDS` is set to `true`.\n\n- `/model \u003cmodel\u003e` - allows to override the chat model used for the answer generation. Should be a deployment name of a chat model in available the Dial.\n- `/query_model \u003cmodel\u003e` - allows to override the model used to summarize the chat history to the standalone question. Should be a deployment name of a chat model in available the Dial. The model should support `tool calls`.\n- `/profile` - generates CPU profile report for the request. The report will be available as an attachment in the `Profiler` stage.\n\n## Developer environment\n\nThis project uses [Python==3.11](https://www.python.org/downloads/) and [Poetry\u003e=2.2.1](https://python-poetry.org/) as a dependency manager.\n\nCheck out Poetry's [documentation on how to install it](https://python-poetry.org/docs/#installation) on your system before proceeding.\n\nIf you have [Poetry\u003e=2.2.1](https://python-poetry.org/) and python 3.11 installed in the system, to install requirements you can run:\n\n```sh\npoetry install\n```\n\nThis will install all requirements for running the package, linting, formatting and tests.\n\nAlternatively, if you have [uv](https://docs.astral.sh/uv/) installed, you can use it to create the environment with required version of Python and poetry:\n\n```sh\nuv venv \"$VIRTUAL_ENV\" --python 3.11\nuvx poetry@2.2.1 install\n```\n\nThis will install all requirements for running the package, linting, formatting and tests, the same as `poetry install` command above.\n\nIf you want to use poetry from the uv with make commands, you can set the `POETRY=uvx poetry@2.2.1` environment variable:\n\n```sh\nPOETRY=\"uvx poetry@2.2.1\" make install\n```\n\n### IDE configuration\n\nThe recommended IDE is [VSCode](https://code.visualstudio.com/).\nOpen the project in VSCode and install the recommended extensions.\n\nThis project uses [Ruff](https://docs.astral.sh/ruff/) as a linter and formatter. To configure it for your IDE follow the instructions in \u003chttps://docs.astral.sh/ruff/editors/setup/\u003e.\n\n### Make on Windows\n\nAs of now, Windows distributions do not include the make tool. To run make commands, the tool can be installed using\nthe following command (since [Windows 10](https://learn.microsoft.com/en-us/windows/package-manager/winget/)):\n\n```sh\nwinget install GnuWin32.Make\n```\n\nFor convenience, the tool folder can be added to the PATH environment variable as `C:\\Program Files (x86)\\GnuWin32\\bin`.\nThe command definitions inside Makefile should be cross-platform to keep the development environment setup simple.\n\n### Environment Variables\n\nCopy `.env.example` to `.env` and customize it for your environment for the development process. See the [Configuration](#configuration) section for the list of environment variables.\n\n## Run\n\nRun the development server locally:\n\n```sh\nmake serve\n```\n\nRun the development server in Docker:\n\n```sh\nmake docker_serve\n```\n\nOpen `localhost:5000/docs` to make sure the server is up and running.\n\n## Run with Dial in Docker Compose\n\nThe `docker_compose_local` folder contains the Docker Compose file and auxiliary scripts to run Dial RAG with [Dial Core](https://github.com/epam/ai-dial-core) in Docker Compose. The `docker-compose.yml` file is configured to run Dial RAG alongside [Dial Core](https://github.com/epam/ai-dial-core), [Dial Chat UI](https://github.com/epam/ai-dial-chat), and the [DIAL Adapter for DIAL](https://github.com/epam/ai-dial-adapter-dial) to provide access to LLMs.\n\n### Steps to Configure and Run\n\n1. In the `docker_compose_local` folder, create a file named `.env` and define the following variables:\n    - `DIAL_RAG_URL` - Provide the URL for the local Dial RAG instance (including the IP address and port) if you are running it in your IDE. The default value is `http://host.docker.internal:5000`.\n    - `REMOTE_DIAL_URL` - Provide the URL for the remote Dial Core to access the LLMs.\n    - `REMOTE_DIAL_API_KEY` - Provide the API key for the remote Dial Core.\n    - `DEPLOY_DIAL_RAG=\u003c0|1\u003e` - Set to `0` to skip deploying the Dial RAG container in Docker Compose (useful for debugging the application locally). Set to `1` to deploy Dial RAG as a Docker Compose container.\n\n    These variables will be passed to `dial_conf/core/config.json` and used for communication between the Dial and Dial RAG applications.\n\n2. Navigate to the `docker_compose_local` folder and run the following command in the terminal:\n\n    ```sh\n    docker-compose up\n    ```\n\n    This will bring up the entire Dial application, ready to use.\n\n3. If you need to rebuild the Dial RAG image, use the following command:\n\n    ```sh\n    docker-compose up --build dial-rag\n    ```\n\n## Lint\n\nRun the linting before committing:\n\n```sh\nmake lint\n```\n\nTo auto-fix formatting issues run:\n\n```sh\nmake format\n```\n\n## Test\n\nRun unit tests locally:\n\n```sh\nmake test\n```\n\nRun unit tests in Docker:\n\n```sh\nmake docker_test\n```\n\n### Tests with cached LLM responses\n\nSome of the tests marked with the `@e2e_test` decorator utilize cached results located in the `./tests/cache` directory. By default, these tests will use cached values. During test execution, you may encounter warning or failure messages such as `Failed: There is no response found in cache, use environment variable REFRESH=True to update` This indicates that some logic has changed and that the cached responses are out of date.\n\nThese tests can be executed using environment variables, or nox sessions:\n\n- `make test` (or `nox -s test`) - usual test run, executed on CI. The test uses *ONLY* the cached responses from LLM. If cache missing, test throws an exception.\n- `REFRESH=True make test` (or `nox -s test -- --refresh`) - This flag will delete all unused cache files, and stores new ones required by the executed tests.\n\nTo use the `REFRESH` flag, you need to have running dial-core on `DIAL_CORE_HOST` (default \"localhost:8080\") with `DIAL_CORE_API_KEY` (default \"dial_api_key\").\n\n## Clean\n\nTo remove the virtual environment and build artifacts:\n\n```sh\nmake clean\n```\n\n## Update docs\n\nThis project uses [settings-doc](https://github.com/radeklat/settings-doc) to generate the [Configuration](#configuration) section of this documentation from the Pydantic settings.\nTo update the documentation run:\n\n```sh\nmake docs\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fai-dial-rag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepam%2Fai-dial-rag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fai-dial-rag/lists"}