Skip to main content

A RAG Framework for Information Retrieval and Generation.

Project description

Language github license Read the Docs PyPI - Version DOI

[ English | 中文 ]

FlexRAG is a flexible and high-performance framework designed for Retrieval-Augmented Generation (RAG) tasks, offering support for multimodal data, seamless configuration management, and out-of-the-box performance for both research and prototyping.

https://github.com/user-attachments/assets/4dfc0ec9-686b-40e2-b1f0-daa2b918e093

📖 Table of Contents

✨ Key Features

  • Multimodal RAG Support: FlexRAG isn't limited to just text-based Retrieval-Augmented Generation (RAG). It also supports multimodal RAG, opening up a wide range of application possibilities across different media types.
  • Diverse Data Types: FlexRAG enables seamless integration of multiple data formats, including text (e.g., CSV, JSONL), images, documents, web snapshots, and more, giving you flexibility in working with varied data sources.
  • Unified Configuration Management: Leveraging python dataclass and hydra-core, FlexRAG simplifies configuration management, making it easier to handle complex setups and customize your workflow.
  • Out-of-the-Box: With carefully optimized default configurations, FlexRAG delivers solid performance without the need for extensive parameter tuning.
  • High Performance: Built with persistent cache system and asynchronous methods to significantly improve speed and reduce latency in RAG workflows.
  • Research & Development Friendly: Supports multiple development modes and includes a companion repository, flexrag_examples, to help you reproduce various RAG algorithms with ease.
  • Lightweight: Designed with minimal overhead, FlexRAG is efficient and easy to integrate into your project.

📢 News

  • 2025-01-08: We provide wheels on Windows for FlexRAG. You can install FlexRAG via pip on Windows & MacOS now.
  • 2025-01-08: The benchmark of FlexRAG on Single-hop QA tasks is now available. Check out the benchmarks for more details.
  • 2025-01-05: Documentation for FlexRAG is now available. Check out the documentation for more details.

🚀 Getting Started

Step 0. Installation

Install from pip

To install FlexRAG via pip:

pip install flexrag

Install from source

Alternatively, to install from the source:

pip install pybind11

git clone https://github.com/ictnlp/flexrag.git
cd flexrag
pip install ./

You can also install the FlexRAG in editable mode with the -e flag.

Step 1. Prepare the Retriever

Download the Corpus

Before starting you RAG application, you need to download the corpus. In this example, we will use the wikipedia corpus provided by DPR as the corpus. You can download the corpus by running the following command:

# Download the corpus
wget https://dl.fbaipublicfiles.com/dpr/wikipedia_split/psgs_w100.tsv.gz
# Unzip the corpus
gzip -d psgs_w100.tsv.gz

Prepare the Index

After downloading the corpus, you need to build the index for the retriever. If you want to employ the dense retriever, you can simply run the following command to build the index:

CORPUS_PATH='[psgs_w100.tsv]'
CORPUS_FIELDS='[title,text]'
DB_PATH=<path_to_database>

python -m flexrag.entrypoints.prepare_index \
    corpus_path=$CORPUS_PATH \
    saving_fields=$CORPUS_FIELDS \
    retriever_type=dense \
    dense_config.database_path=$DB_PATH \
    dense_config.encode_fields=[text] \
    dense_config.passage_encoder_config.encoder_type=hf \
    dense_config.passage_encoder_config.hf_config.model_path='facebook/contriever' \
    dense_config.passage_encoder_config.hf_config.device_id=[0,1,2,3] \
    dense_config.index_type=faiss \
    dense_config.faiss_config.batch_size=4096 \
    dense_config.faiss_config.log_interval=100000 \
    dense_config.batch_size=4096 \
    dense_config.log_interval=100000 \
    reinit=True

If you want to employ the sparse retriever, you can run the following command to build the index:

CORPUS_PATH='[psgs_w100.tsv]'
CORPUS_FIELDS='[title,text]'
DB_PATH=<path_to_database>

python -m flexrag.entrypoints.prepare_index \
    corpus_path=$CORPUS_PATH \
    saving_fields=$CORPUS_FIELDS \
    retriever_type=bm25s \
    bm25s_config.database_path=$DB_PATH \
    bm25s_config.indexed_fields=[title,text] \
    bm25s_config.method=lucene \
    bm25s_config.batch_size=512 \
    bm25s_config.log_interval=100000 \
    reinit=True

Step 2. Run FlexRAG Assistant

When the index is ready, you can run RAG Assistant provided by FlexRAG. Here is an example of how to run a Modular Assistant.

Run the FlexRAG Example RAG Application with GUI

python -m flexrag.entrypoints.run_interactive \
    assistant_type=modular \
    modular_config.used_fields=[title,text] \
    modular_config.retriever_type=dense \
    modular_config.dense_config.top_k=5 \
    modular_config.dense_config.database_path=${DB_PATH} \
    modular_config.dense_config.query_encoder_config.encoder_type=hf \
    modular_config.dense_config.query_encoder_config.hf_config.model_path='facebook/contriever' \
    modular_config.dense_config.query_encoder_config.hf_config.device_id=[0] \
    modular_config.response_type=short \
    modular_config.generator_type=openai \
    modular_config.openai_config.model_name='gpt-4o-mini' \
    modular_config.openai_config.api_key=$OPENAI_KEY \
    modular_config.do_sample=False

Run the FlexRAG Example Assistants for Knowledge Intensive Tasks

You can evaluate your RAG assistant on several knowledge intensive datasets with great ease. The following command let you evaluate the Modular Assistant with dense retriever on the Natural Questions (NQ) dataset:

OUTPUT_PATH=<path_to_output>
DB_PATH=<path_to_database>
OPENAI_KEY=<your_openai_key>

python -m flexrag.entrypoints.run_assistant \
    data_path=flash_rag/nq/test.jsonl \
    output_path=${OUTPUT_PATH} \
    assistant_type=modular \
    modular_config.used_fields=[title,text] \
    modular_config.retriever_type=dense \
    modular_config.dense_config.top_k=10 \
    modular_config.dense_config.database_path=${DB_PATH} \
    modular_config.dense_config.query_encoder_config.encoder_type=hf \
    modular_config.dense_config.query_encoder_config.hf_config.model_path='facebook/contriever' \
    modular_config.dense_config.query_encoder_config.hf_config.device_id=[0] \
    modular_config.response_type=short \
    modular_config.generator_type=openai \
    modular_config.openai_config.model_name='gpt-4o-mini' \
    modular_config.openai_config.api_key=$OPENAI_KEY \
    modular_config.do_sample=False \
    eval_config.metrics_type=[retrieval_success_rate,generation_f1,generation_em] \
    eval_config.retrieval_success_rate_config.context_preprocess.processor_type=[simplify_answer] \
    eval_config.retrieval_success_rate_config.eval_field=text \
    eval_config.response_preprocess.processor_type=[simplify_answer] \
    log_interval=10

Similarly, you can evaluate the Modular Assistant with sparse retriever on the Natural Questions dataset:

OUTPUT_PATH=<path_to_output>
DB_PATH=<path_to_database>
OPENAI_KEY=<your_openai_key>

python -m flexrag.entrypoints.run_assistant \
    data_path=flash_rag/nq/test.jsonl \
    output_path=${OUTPUT_PATH} \
    assistant_type=modular \
    modular_config.used_fields=[title,text] \
    modular_config.retriever_type=bm25s \
    modular_config.bm25s_config.top_k=10 \
    modular_config.bm25s_config.database_path=${DB_PATH} \
    modular_config.response_type=short \
    modular_config.generator_type=openai \
    modular_config.openai_config.model_name='gpt-4o-mini' \
    modular_config.openai_config.api_key=$OPENAI_KEY \
    modular_config.do_sample=False \
    eval_config.metrics_type=[retrieval_success_rate,generation_f1,generation_em] \
    eval_config.retrieval_success_rate_config.context_preprocess.processor_type=[simplify_answer] \
    eval_config.retrieval_success_rate_config.eval_field=text \
    eval_config.response_preprocess.processor_type=[simplify_answer] \
    log_interval=10

You can also evaluate your own assistant by adding the user_module=<your_module_path> argument to the command.

Build your own RAG Assistant

To build your own RAG assistant, you can create a new Python file and import the necessary FlexRAG modules. Here is an example of how to build a RAG assistant:

from dataclasses import dataclass

from flexrag.assistant import ASSISTANTS, AssistantBase
from flexrag.models import OpenAIGenerator, OpenAIGeneratorConfig
from flexrag.prompt import ChatPrompt, ChatTurn
from flexrag.retriever import DenseRetriever, DenseRetrieverConfig


@dataclass
class SimpleAssistantConfig(DenseRetrieverConfig, OpenAIGeneratorConfig): ...


@ASSISTANTS("simple", config_class=SimpleAssistantConfig)
class SimpleAssistant(AssistantBase):
    def __init__(self, config: SimpleAssistantConfig):
        self.retriever = DenseRetriever(config)
        self.generator = OpenAIGenerator(config)
        return

    def answer(self, question: str) -> str:
        prompt = ChatPrompt()
        context = self.retriever.search(question)[0]
        prompt_str = ""
        for ctx in context:
            prompt_str += f"Question: {question}\nContext: {ctx.data['text']}"
        prompt.update(ChatTurn(role="user", content=prompt_str))
        response = self.generator.chat([prompt])[0][0]
        prompt.update(ChatTurn(role="assistant", content=response))
        return response

After defining the SimpleAssistant class and registering it with the ASSISTANTS decorator, you can run the assistant with the following command:

DB_PATH=<path_to_database>
OPENAI_KEY=<your_openai_key>
DATA_PATH=<path_to_data>
MODULE_PATH=<path_to_simple_assistant_module>

python -m flexrag.entrypoints.run_assistant \
    user_module=${MODULE_PATH} \
    data_path=${DATA_PATH} \
    assistant_type=simple \
    simple_config.model_name='gpt-4o-mini' \
    simple_config.api_key=${OPENAI_KEY} \
    simple_config.database_path=${DB_PATH} \
    simple_config.index_type=faiss \
    simple_config.query_encoder_config.encoder_type=hf \
    simple_config.query_encoder_config.hf_config.model_path='facebook/contriever' \
    simple_config.query_encoder_config.hf_config.device_id=[0] \
    eval_config.metrics_type=[retrieval_success_rate,generation_f1,generation_em] \
    eval_config.retrieval_success_rate_config.eval_field=text \
    eval_config.response_preprocess.processor_type=[simplify_answer] \
    log_interval=10

In flexrag_examples repository, we provide several detailed examples of how to build a RAG assistant.

Run your own RAG Application

In addition to using FlexRAG's built-in Entrypoints to run your RAG Assistant, you can also use FlexRAG to build your own RAG application. The following is an example of how to build a RAG application.

from flexrag.models import HFEncoderConfig, OpenAIGenerator, OpenAIGeneratorConfig
from flexrag.prompt import ChatPrompt, ChatTurn
from flexrag.retriever import DenseRetriever, DenseRetrieverConfig


def main():
    # Initialize the retriever
    retriever_cfg = DenseRetrieverConfig(database_path="path_to_database", top_k=1)
    retriever_cfg.query_encoder_config.encoder_type = "hf"
    retriever_cfg.query_encoder_config.hf_config = HFEncoderConfig(
        model_path="facebook/contriever"
    )
    retriever = DenseRetriever(retriever_cfg)

    # Initialize the generator
    generator = OpenAIGenerator(
        OpenAIGeneratorConfig(
            model_name="gpt-4o-mini", api_key="your_openai_key", do_sample=False
        )
    )

    # Run your RAG application
    prompt = ChatPrompt()
    while True:
        query = input("Please input your query (type `exit` to exit): ")
        if query == "exit":
            break
        context = retriever.search(query)[0]
        prompt_str = ""
        for ctx in context:
            prompt_str += f"Question: {query}\nContext: {ctx.data['text']}"
        prompt.update(ChatTurn(role="user", content=prompt_str))
        response = generator.chat(prompt)
        prompt.update(ChatTurn(role="assistant", content=response))
        print(response)
    return


if __name__ == "__main__":
    main()

For more details on how to build your own RAG application, please refer to the flexrag_examples repository.

🏗️ Architecture

FlexRAG is designed with a modular architecture, allowing you to easily customize and extend the framework to meet your specific needs. The following diagram illustrates the architecture of FlexRAG:

📊 Benchmarks

We have conducted extensive benchmarks using the FlexRAG framework. For more details, please refer to the benchmarks page.

🏷️ License

This repository is licensed under the MIT License. See the LICENSE file for details.

❤️ Acknowledgements

This project benefits from the following open-source projects:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

flexrag-0.1.5-cp313-cp313-win_amd64.whl (176.0 kB view details)

Uploaded CPython 3.13Windows x86-64

flexrag-0.1.5-cp313-cp313-win32.whl (171.3 kB view details)

Uploaded CPython 3.13Windows x86

flexrag-0.1.5-cp313-cp313-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

flexrag-0.1.5-cp313-cp313-musllinux_1_2_i686.whl (2.0 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

flexrag-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (932.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

flexrag-0.1.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (925.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

flexrag-0.1.5-cp312-cp312-win_amd64.whl (176.0 kB view details)

Uploaded CPython 3.12Windows x86-64

flexrag-0.1.5-cp312-cp312-win32.whl (171.2 kB view details)

Uploaded CPython 3.12Windows x86

flexrag-0.1.5-cp312-cp312-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

flexrag-0.1.5-cp312-cp312-musllinux_1_2_i686.whl (2.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

flexrag-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (931.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

flexrag-0.1.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (926.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

flexrag-0.1.5-cp311-cp311-win_amd64.whl (175.7 kB view details)

Uploaded CPython 3.11Windows x86-64

flexrag-0.1.5-cp311-cp311-win32.whl (170.9 kB view details)

Uploaded CPython 3.11Windows x86

flexrag-0.1.5-cp311-cp311-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

flexrag-0.1.5-cp311-cp311-musllinux_1_2_i686.whl (2.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

flexrag-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (933.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

flexrag-0.1.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (927.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

File details

Details for the file flexrag-0.1.5-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: flexrag-0.1.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 176.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.9

File hashes

Hashes for flexrag-0.1.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b31b28d47b1753418519a67ca1800e48eb3d7863b749851de3a5cbaaadb3e78c
MD5 c0a22612fb1c6ec33af3e72676324313
BLAKE2b-256 94514eee62830e176e11b835c9596b0c2c856154ce0334e5ec9e874b5dff24c9

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp313-cp313-win32.whl.

File metadata

  • Download URL: flexrag-0.1.5-cp313-cp313-win32.whl
  • Upload date:
  • Size: 171.3 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.9

File hashes

Hashes for flexrag-0.1.5-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 b886af96829935df4b5daa4afa147c51a60e5c8c00fd5563c936b1e4fc4a1405
MD5 acf269d101a6ebc29373eca4428fb333
BLAKE2b-256 db2cd2748a0a0b5b6450514e0340ee6a615abfec59f6d35b2619c3fec7ef15d9

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 021993263a619d4b40d3647ddbe70b846959f13874cbc499a9ddeac8b1a21899
MD5 7626c5c0c7ef87870db542d1f94927da
BLAKE2b-256 36edaee73b3ca786e0ccb9dd069bce94f1099c32450f1fa16ede9482efac38af

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 18b98c88a430321981054be4d1d2aee9c1d9dc250f778fd534979e42da01b46a
MD5 b0933740fa52eb516070294b9a839326
BLAKE2b-256 6567da352eafd5fe44c6c1ab8743f467e99b14386c6ae2f229308f2e2ee4b5d7

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 47b3dea11feb47885ffa07dc0ac937eda70228d8224ab4ca4aaeebaaa02af779
MD5 f9984db50373bbc6de8f9a09571c8a69
BLAKE2b-256 7dbd1ced1c5a015eb73b2577d7c43679e47ef7653382d1558621514a56182711

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 46760c7dbc33374381b394fb2b7b10f04801db11e5cad351acd2804418dcfb67
MD5 e4a2138613e06d6310ac0711eab5fd58
BLAKE2b-256 29707492c2cd1dea487c8c9e1d7c058db584f19455d4eba8b90c47dfb19e5a42

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: flexrag-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 176.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.9

File hashes

Hashes for flexrag-0.1.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 faf729bcbe496486d47ec063b9d0a1f92a01c4ed8f3dcc2662d5a07289686162
MD5 3c67763bc83c4741ad58ba20c6489e43
BLAKE2b-256 6945e4452ef0a0768d916e8ec47207e2573a0ed4422fdf65123f1f3bf6237b55

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp312-cp312-win32.whl.

File metadata

  • Download URL: flexrag-0.1.5-cp312-cp312-win32.whl
  • Upload date:
  • Size: 171.2 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.9

File hashes

Hashes for flexrag-0.1.5-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 0e5b54cd25a833458485af9174e1057b4ccb23fc324af98d83a392f8b0682e19
MD5 7140447a52bc1ae47b482d25119024d2
BLAKE2b-256 35c71e08a27c823f24673e7b28d1945e8b65ef8ed6c5515e38e231a12901aa0a

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 740dc79b1a953a72ed576e621513caf9c1c714c46dac478ac8af0d5318e849ea
MD5 f7bdb8daf2caaa12b5dba0dfdce9a114
BLAKE2b-256 5d0585132360f62882b757aacdf4001ae9de1cd6bf75c440ca9b3efba64500a6

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 49bff1e5192c728c6cdb5235ac64f0f8436934f9cc8e4c3f3f1aba2e7249d2ea
MD5 eb53f7397662c5067d1aaada3f1aad63
BLAKE2b-256 ee43eb2af07421550836d15de8d3d012d0fcc9ad652e1403aa9b22ace88f9494

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b0aafa36d7e0d9447276194abfc29bc334d56b92842b03962d7f20608f2a6b8b
MD5 d8d63c57bfa50fe9ae53181d3fe81824
BLAKE2b-256 095fa74364bdb884c4245655a4c6bf711011adde69ef7cc9871d861e2029a5dd

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a598bc5f317f773f026732df87c10c3297bc569ce75b9792a3e04d0dcea1e409
MD5 2b7258b3dad9feb068b68acedbdbde78
BLAKE2b-256 2b64ed2286873ec9d5fbfff98649e5e64a4acfb2ad557f9aceea3ea0299e096a

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: flexrag-0.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 175.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.9

File hashes

Hashes for flexrag-0.1.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d3fad8a1b6dc0acba195e53a3092d6350f2f358e9b03fe3395300a9a7b33cca9
MD5 e52e17d3d02fa44d18f705b4319cff22
BLAKE2b-256 0b0f2794006bc7d290064407beb5233ab6cf7eb44bd8926ad106382ff355c1d1

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp311-cp311-win32.whl.

File metadata

  • Download URL: flexrag-0.1.5-cp311-cp311-win32.whl
  • Upload date:
  • Size: 170.9 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.9

File hashes

Hashes for flexrag-0.1.5-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 0cc3443876a36313b721a25dd603a4255439d61b8907b713b4384d0f45413fa3
MD5 4651ef7dd5cecce280f4a6908432e20f
BLAKE2b-256 e19f2f67f4e4287ea342ae39b5fb4b8e66be2704863a04f2ec391a7505d9c86a

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7593d0f23d3a395879e09e293c0cd4c9a82ad1a3aed49eec1ef6bcecd01de41c
MD5 287ef4492260671dd48cc12936008c32
BLAKE2b-256 057d20eb4bae1814672d2c90a08dfaa0dd507e48c15ca8d676aa0280239561fd

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 85c0c4ac6e2f174508463414acd2587c5ac7876a715eb44281134dda49650e4c
MD5 563adfc969466b7c39297363f4b5703b
BLAKE2b-256 9c97bbd03ea792f75bc28391ad00bac9c9456321cbf13609ab372aa2ecdb1927

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74fa394ad0a0d08cc0abcc187317a1353d623a918e6a10bc552482a8ae823556
MD5 3fcb38e670b2546b5f31206d78365686
BLAKE2b-256 524b1d3e7cf1e33e3ac5d2ffe40e5a901aa1c8baa05c00946aef3f4c9871bf89

See more details on using hashes here.

File details

Details for the file flexrag-0.1.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for flexrag-0.1.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 214c363c228dd59ab6f816d443a0b7cb46efd67b8ac258cb8c0e545d2c4cc5ce
MD5 8c8306b9a9df69d350b88e9c16d236c6
BLAKE2b-256 07749867aa1f74703294571bfa1232cbcfe8b5714a5487996af5ea9572de3e2e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page