Skip to main content

Open-source tool for exploring, labeling, and monitoring data for NLP projects.

Project description

Argilla
Argilla

Work on data together, make your model outputs better!

CI Codecov CI

Argilla is a collaboration tool for AI engineers and domain experts who need to build high-quality datasets for their projects.

[!NOTE] This README represents the 1.29 SDK version. We have stopped development for the 1.x SDK version, while still committing to bug fixes. If you are looking for the README of the 2.x SDK version take a look here.

If you just want to get started, we recommend our UI demo or our 2-click deployment quick start. Curious, and want to know more? Read our documentation.

Why use Argilla?

Whether you are working on monitoring and improving complex generative tasks involving LLM pipelines with RAG, or you are working on a predictive task for things like AB-testing of span- and text-classification models. Our versatile platform helps you ensure your data work pays off.

Improve your AI output quality through data quality

Compute is expensive and output quality is important. We help you focus on data, which tackles the root cause of both of these problems at once. Argilla helps you to achieve and keep high-quality standards for your data. This means you can improve the quality of your AI output.

Take control of your data and models

Most AI tools are black boxes. Argilla is different. We believe that you should be the owner of both your data and your models. That's why we provide you with all the tools your team needs to manage your data and models in a way that suits you best.

Improve efficiency by quickly iterating on the right data and models

Gathering data is a time-consuming process. Argilla helps by providing a platform that allows you to interact with your data in a more engaging way. This means you can quickly and easily label your data with filters, AI feedback suggestions and semantic search. So you can focus on training your models and monitoring their performance.

🏘️ Community

We are an open-source community-driven project and we love to hear from you. Here are some ways to get involved:

  • Community Meetup: listen in or present during one of our bi-weekly events.

  • Discord: get direct support from the community in #argilla-distilabel-general and #argilla-distilabel-help.

  • Roadmap: plans change but we love to discuss those with our community so feel encouraged to participate.

What do people build with Argilla?

Open-source datasets and models

The community uses Argilla to create amazing open-source datasets and models.

  • Cleaned UltraFeedback dataset used to fine-tune the Notus and Notux models. The original UltraFeedback dataset was curated using Argilla UI filters to find and report a bug in the original data generation code. Based on this data curation process, Argilla built this new version of the UltraFeedback dataset and fine-tuned Notus, outperforming Zephyr on several benchmarks.
  • distilabeled Intel Orca DPO dataset used to fine-tune the improved OpenHermes model. This dataset was built by combining human curation in Argilla with AI feedback from distilabel, leading to an improved version of the Intel Orca dataset and outperforming models fine-tuned on the original dataset.

Examples Use cases

AI teams from companies like the Red Cross, Loris.ai and Prolific use Argilla to improve the quality and efficiency of AI projects. They shared their experiences in our AI community meetup.

  • AI for good: the Red Cross presentation showcases how the Red Cross domain experts and AI team collaborated by classifying and redirecting requests from refugees of the Ukrainian crisis to streamline the support processes of the Red Cross.
  • Customer support: during the Loris meetup they showed how their AI team uses unsupervised and few-shot contrastive learning to help them quickly validate and gain labelled samples for a huge amount of multi-label classifiers.
  • Research studies: the showcase from Prolific announced their integration with our platform. They use it to actively distribute data collection projects among their annotating workforce. This allows Prolific to quickly and efficiently collect high-quality data for research studies.

👨‍💻 Getting started

pip install argilla

First things first! You can install Argilla from pypi.

pip install argilla

Deploy Locally

docker run -d --name argilla -p 6900:6900 argilla/argilla-quickstart:latest

Deploy on Hugging Face Hub

HuggingFace Spaces now have persistent storage and this is supported from Argilla 1.11.0 onwards, but you will need to manually activate it via the HuggingFace Spaces settings. Otherwise, unless you're on a paid space upgrade, after 48 hours of inactivity the space will be shut off and you will lose all the data. To avoid losing data, we highly recommend using the persistent storage layer offered by HuggingFace.

After this, we can connect to our server.

Connect to the Server

Once you have deployed Argilla, we will connect to the server.

import argilla_v1 as rg

rg.init(
    api_url="argilla-api-url",  # e.g. http://localhost:6900 or https://[your-owner-name]-[your_space_name].hf.space
    api_key="argilla-api-key"  # e.g. "owner.apikey"
workspace = "argilla-workspace"  # e.g. "admin"
)

After this, you can start using Argilla, so you can create a dataset and add records to it. We use the FeedbackDataset as an example, but you can use any of the other datasets available in Argilla. You can find more information about the different datasets here.

Create workspace

Once you have connected to the server, we will create a workspace for datasets.

workspace = rg.Workspace.create("new-workspace")

After this, you can assign users to the workspace, this will allow the datasets to appear in the UI for that user.

users = [u for u in rg.User.list() if u.role == "annotator"]
for user in users:
    workspace.add_user(user)

Configure datasets

import argilla_v1 as rg

dataset = rg.FeedbackDataset(
    guidelines="Please, read the question carefully and try to answer it as accurately as possible.",
    fields=[
        rg.TextField(name="question"),
        rg.TextField(name="answer"),
    ],
    questions=[
        rg.RatingQuestion(
            name="answer_quality",
            description="How would you rate the quality of the answer?",
            values=[1, 2, 3, 4, 5],
        ),
        rg.TextQuestion(
            name="answer_correction",
            description="If you think the answer is not accurate, please, correct it.",
            required=False,
        ),
    ]
)
remote_dataset = dataset.push_to_argilla(name="my-dataset", workspace="my-workspace")

Add records

import argilla_v1 as rg

record = rg.FeedbackRecord(
    fields={
        "question": "Why can camels survive long without water?",
        "answer": "Camels use the fat in their humps to keep them filled with energy and hydration for long periods of time."
    },
    metadata={"source": "encyclopedia"},
    external_id='rec_1'
)
remote_dataset.add_records(record)

And that's it, you now have your first dataset ready. You can begin annotating it or embark on other related tasks.

Query datasets

import argilla_v1 as rg

filtered_dataset = dataset.filter_by(response_status="submitted")

Semantic search

import argilla_v1 as rg

# using text embeddings
similar_records = ds.find_similar_records(
    vector_name="my_vector",
    value=embedder_model.embeddings("My text is here")
    # value=embedder_model.embeddings("My text is here").tolist() # for numpy arrays
)

# using another record
similar_records = ds.find_similar_records(
    vector_name="my_vector",
    record=ds.records[0],
    max_results=5
)

Weak supervision

from argilla_v1.labeling.text_classification import add_rules, Rule

rule = Rule(query="positive impact", label="optimism")
add_rules(dataset="go_emotion", rules=[rule])

Train models

from argilla_v1.training import ArgillaTrainer

trainer = ArgillaTrainer(
    name="my_dataset",
    workspace="my_workspace",
    framework="my_framework",
    model="my_framework_model",
    train_size=0.8,
    seed=42,
    limit=10,
    query="my-query"
)
trainer.update_config()  # see usage below
trainer.train()
records = trainer.predict(["my-text"], as_argilla_records=True)

🥇 Contributors

To help our community with the creation of contributions, we have created our developer and contributor docs. Additionally, you can always schedule a meeting with our Developer Advocacy team so they can get you up to speed.

Project details


Download files

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

Source Distribution

argilla_v1-1.29.1.tar.gz (266.2 kB view details)

Uploaded Source

Built Distribution

argilla_v1-1.29.1-py3-none-any.whl (423.1 kB view details)

Uploaded Python 3

File details

Details for the file argilla_v1-1.29.1.tar.gz.

File metadata

  • Download URL: argilla_v1-1.29.1.tar.gz
  • Upload date:
  • Size: 266.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for argilla_v1-1.29.1.tar.gz
Algorithm Hash digest
SHA256 b91bda814a09dec5f638f24d10ab0a51cba274b878fada3357a27629c3cd5023
MD5 b47bb1d79ba1697826034bc4fe443339
BLAKE2b-256 af1df668548f7a1221b9008ee84d7523fdf8e6b81dc0c5cd53bd182f787a4cd2

See more details on using hashes here.

File details

Details for the file argilla_v1-1.29.1-py3-none-any.whl.

File metadata

  • Download URL: argilla_v1-1.29.1-py3-none-any.whl
  • Upload date:
  • Size: 423.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for argilla_v1-1.29.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f27e9f4189b5a0335f84f6d28b6969941c6166b358f18b9120c483f5a75ba768
MD5 b6b2f9711c88dc62103bfa39fee1a198
BLAKE2b-256 ed68ca4efd0aabe3bf8d8a29b6b04880b18cb84adacaec3c48b5a7ac70fd2ecc

See more details on using hashes here.

Supported by

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