Skip to content

Releases: argilla-io/argilla

v2.6.0

18 Dec 15:46
Compare
Choose a tag to compare

🔆 Release highlights

Push to hub

Export your dataset to the Hugging Face Hub directly from the Argilla UI:

1️⃣ Go to your dataset
2️⃣ Click on Push to Hub
3️⃣ Make sure you include your username or organization and a Hub Access Token with write permissions

Screenshot of the exporting feature

Share your progress

Share your annotation progress on any Argilla dataset with the world!

1️⃣ In your dataset, click on "Share progress"
2️⃣ Open your preferred social media platform
3️⃣ Start a post and paste the copied text
4️⃣ Publish and share with the world!

Screenshot of the sharing feature

Update user data

You can update all information of a user. Here's an example of how to update the role of a user:

import argilla as rg

client = rg.Argilla(api_url="<ARGILLA_API_URL>", api_key="<ARGILLA_API_KEY>")

user = client.users("username")
user.role = "admin"
user.update()

Change record fields

You can now update the content of record fields.

import argilla as rg

client = rg.Argilla(api_url="<ARGILLA_API_URL>", api_key="<ARGILLA_API_KEY>")

dataset = client.datasets("my_dataset")
record = next(dataset.records(limit=1))
record.fields["text"] = "this is my updated text"
record.update()

# or several records at once
records = list(dataset.records(...))

for record in records:
    record.fields["text"] = "this is my updated text"

dataset.records.log(records)

Changelog v2.6.0

New Contributors

Full Changelog: v2.5.0...v2.6.0

v2.5.0

29 Nov 12:28
Compare
Choose a tag to compare

🔆 Release highlights

Webhooks

You can now create and manage webhooks to support your workflows!

Webhooks allow you to submit real-time information to other applications whenever a specific event occurs within Argilla. Here's an example of how you can set up a webhook in Argilla:

import argilla as rg

@rg.webhook_listener("record.completed")
async def record_completed(record: rg.Record, **kwargs):
    print (f"Record {record.id} has been completed")

Visit the Argilla documentation for more information.

A redesigned home page

Captura de pantalla 2024-11-29 a las 12 49 32

Argilla's home page has been redesigned to provide a better user experience. The new home page now shows a new
dataset card view, which provides a better overview of the datasets and annotation progress.

Python 3.13 and Pydantic v2 support

The Argilla server (and SDK) now supports Python 3.13 and Pydantic 2.0.0. This means that you can now install and use both SDK and server with Python 3.13 in the same Python environment!

pip install argilla
pip install argilla-server

python -m argilla_server

Other improvements

  • We've added a high contrast theme to help users with visual impairments. To change the theme go to "My settings" and choose your preferred theme. Thanks @paulbauriegel for this! 🎉
  • You can select the language that you'd like to display in the Argilla UI, also from the "My settings" page. Your language isn't there? Visit the Argilla documentation to learn how you can add yours.

Changelog v2.5.0

New Contributors

Full Changelog: v2.4.1...v2.5.0

v2.4.1

11 Nov 11:37
Compare
Choose a tag to compare

This release includes some argilla-server fixes:

  • Fixed redirection problems after users sign-in using HF OAuth. (#5635)
  • Fixed highlighting of the searched text in text, span and chat fields (#5678)
  • Fixed validation for rating question when creating a dataset (#5670)
  • Fixed question name based on question type when creating a dataset (#5670)
  • Fixed error so now _touch_dataset_last_activity_at function is not updating dataset's updated_at column. (#5656)

Full Changelog: v2.4.0...v2.4.1

v2.4.0

30 Oct 17:05
Compare
Choose a tag to compare

🔆 Release highlights

Import Hub datasets from the UI

import_hub_dataset.mp4

In this release, we’ve focused all of our efforts in bringing you a new feature to import datasets from the Hugging Face Hub directly within our UI, making it easier and faster to get started with your AI projects.

To get started, click on the “Import dataset from Hugging Face” button and paste the repo id of the dataset you want to use. Argilla will process the columns of the dataset and map them to Fields or Questions. Then, you can add more questions or remove any unnecessary fields by selecting the “No mapping” options. All the changes you make will be automatically reflected in the preview.

Once you’re happy with the result you simply need to provide a name for your dataset, select a workspace and (if applicable) a split. Then, Argilla will start importing the dataset.

Note

If your dataset is bigger than 10k records, at this stage Argilla will only import the first 10k. You can import the rest of the dataset using the Argilla SDK: simply click on the “Import data” button in the dataset and use the code snippet provided.

If you want to make extra changes, like customizing the titles of your fields and questions, don’t worry, you can always go back to the Dataset Settings page after the dataset has been created.

Learn more about this new feature in our docs.

Deploy an Argilla Space directly from the SDK

If you're working from the SDK and don't want to leave to start your Argilla server, you can start an Argilla deployment on Spaces with a simple line of code:

import argilla as rg

client = rg.Argilla.deploy_on_spaces(api_key="12345678")

Learn more in our docs.

Changelog v2.4.0

New Contributors

Full Changelog: v2.3.1...v2.4.0

v2.3.1

08 Oct 09:45
Compare
Choose a tag to compare

What's Changed

This is a patch release fixing an error listing current user datasets:

  • Fixed error listing current user datasets and not filtering by current user id. (#5583)

Full Changelog: v2.3.0...v2.3.1

v2.3.0

03 Oct 15:11
1e54a48
Compare
Choose a tag to compare

🌟 Release highlights

Custom Fields: the most powerful way to build custom annotation tasks

We heard you. This new type of field gives you full control over how data is presented to annotators.

With custom fields, you can use your own CSS, HTML, and even Javascript (welcome interactive fields!). Moreover, you can populate your fields with custom structures like custom_field={"image1": ..., "image_2": ..., etc.}.

Here's an example:

Imagine you want to show two images and a prompt to your users.

With a custom field

With the new custom field, you can configure something like this:

Screenshot 2024-10-04 at 13 04 28

And you can set this up with a few lines of code:

css_template = """
<style>
#container {
    display: flex;
    flex-direction: column;
    font-family: Arial, sans-serif;
}
.prompt {
    margin-bottom: 10px;
    font-size: 16px;
    line-height: 1.4;
    color: #333;
    background-color: #f8f8f8;
    padding: 10px;
    border-radius: 5px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.image-container {
    display: flex;
    gap: 10px;
}
.column {
    flex: 1;
    position: relative;
}
img {
    max-width: 100%;
    height: auto;
    display: block;
}
.image-label {
    position: absolute;
    top: 10px;
    right: 10px;
    background-color: rgba(255, 255, 255, 0.7);
    color: black;
    padding: 5px 10px;
    border-radius: 5px;
    font-weight: bold;
}
</style>
"""

html_template = """
<div id="container">
    <div class="prompt"><strong>Prompt:</strong> {{record.fields.images.prompt}}</div>
    <div class="image-container">
        <div class="column">
            <img src="{{record.fields.images.image_1}}" />
            <div class="image-label">Image 1</div>
        </div>
        <div class="column">
            <img src="{{record.fields.images.image_2}}" />
            <div class="image-label">Image 2</div>
        </div>
    </div>
</div>
"""

custom_field = rg.CustomField(
    name="images",
    template=css_template + html_template,
)

# and the log records like this
rg.Record(
    fields={
        "prompt": prompt,
         "image_1": schnell_uri,
         "image_2": dev_uri,
   }
)

Before the custom field

Before this release, you were forced to use two ImageField and a TextField, which would be displayed sequentially, limiting the ability to compare the images side-by-side, with clear labels, prompt text, etc. It would look like this:

Screenshot 2024-10-04 at 14 13 52

How to get started with custom fields

Here we've shown a basic presentation-oriented custom field but you can set up anything you can think of, leveraging JS, html, and css. Imagination is the limit!

To get started check the docs: https://docs.argilla.io/v2.3/how_to_guides/custom_fields/

Other features

An other changes and fixes

Changed

  • Changed the repr method for SettingsProperties to display the details of all the properties in Setting object. (#5380)
  • Changed error messages when creating datasets with insufficient permissions. (#5540)

Fixed

  • Fixed serialization of ChatField when collecting records from the hub and exporting to datasets. (#5554)
  • Fixed error when creating default user with existing default workspace. (#5558)
  • Fixed the deployment yaml used to create a new Argilla server in K8s. Added USERNAME and PASSWORD to the environment variables of pod template. (#5434)
  • Fix autofill form on sign-in page #5522
  • Support copy on clipboard for no secure context #5535

New Contributors

Thanks to

Full Changelog: v2.2.2...v2.3.0

v2.2.2

25 Sep 14:55
Compare
Choose a tag to compare

What's Changed

This is a patch release with certain fixes to the SDK

Fixed

  • Fixed from_hub with unsupported column names. (#5524)
  • Fixed from_hub with missing dataset subset configuration value. (#5524)

Changed

  • Changed from_hub to only generate fields not questions for strings in the dataset. (#5524)

Full Changelog: v2.2.1...v2.2.2

v2.2.1

23 Sep 11:52
Compare
Choose a tag to compare

What's Changed

This is a patch release with certain fixes to the SDK:

  • Fixed from_hub errors when columns names contain uppercase letters. (#5523)
  • Fixed from_hub errors when class feature values contains unlabelled values. (#5523)
  • Fixed from_hub errors when loading cached datasets. (#5523)

Full Changelog: v2.2.0...v2.2.1

v2.2.0

19 Sep 14:59
e1b2e6e
Compare
Choose a tag to compare

🌟 Release highlights

Important

Argilla server 2.2.0 adds support for background jobs. These background jobs allow us to run jobs that might take a long time at request time. For this reason we now rely on Redis and Python RQ workers.

So to upgrade your Argilla instance to version 2.2.0 you need to have an available Redis server. See the Redis get-started documentation for more information or the Argilla server configuration documentation.

If you have deployed Argilla server using the docker-compose.yaml, you should download the docker-compose.yaml file again to bring the latest changes to set Redis and Argilla workers

Workers are needed to process Argilla's background jobs. You can run Argilla workers with the following command:

python -m argilla_server worker

ChatField: working with text conversations in Argilla

chat_field.mp4

You can now work with text conversations natively in Argilla using the new ChatField. It is especially designed to make it easier to build datasets for conversational Large Language Models (LLMs), displaying conversational data in the form of a chat.

Here's how you can create a dataset with a ChatField:

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

settings = rg.Settings(
	fields=[rg.ChatField(name="chat")],
	questions=[...]
)

dataset = rg.Dataset(
	name="chat_dataset",
	settings=settings,
	workspace="my_workspace",
	client=client
)

dataset.create()

record = rg.Record(
	fields={
		"chat": [
			{"role": "user", "content": "Hello World, how are you?"},
			{"role": "assistant", "content": "I'm doing great, thank you!"}
		]
	}
)

dataset.records.log([record])

Read more about how to use this new field type here and here.

Adjust task distribution settings

You can now modify task distribution settings at any time, and Argilla will automatically recalculate the completed and pending records. When you update this setting, records will be removed from or added to the pending queues of your team accordingly.

You can make this change in the dataset settings page or using the SDK:

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

dataset = client.datasets("my_dataset")
dataset.settings.distribution.min_submitted = 2
dataset.update()

Track team progress from the SDK

The Argilla SDK now provides a way to retrieve data on annotation progress. This feature allows you to monitor the number of completed and pending records in a dataset and also the number of responses made by each user:

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

dataset = client.datasets("my_dataset")

progress = dataset.progress(with_users_distribution=True)

The expected output looks like this:

{
    "total": 100,
    "completed": 50,
    "pending": 50,
    "users": {
        "user1": {
           "completed": { "submitted": 10, "draft": 5, "discarded": 5},
           "pending": { "submitted": 5, "draft": 10, "discarded": 10},
        },
        "user2": {
           "completed": { "submitted": 20, "draft": 10, "discarded": 5},
           "pending": { "submitted": 2, "draft": 25, "discarded": 0},
        },
        ...
}

Read more about this feature here.

Automatic settings inference

When you import a dataset using the from_hub method, Argilla will automatically infer the settings, such as the fields and questions, based on the dataset Features. This will save you time and effort when working with datasets from the Hub.

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

dataset = rg.Dataset.from_hub("yahma/alpaca-cleaned")

Task templates

We've added pre-built templates for common dataset types, including text classification, ranking, and rating tasks. These templates provide a starting point for your dataset creation, with pre-configured settings. You can use these templates to get started quickly, without having to configure everything from scratch.

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

settings = rg.Settings.for_classification(labels=["positive", "negative"])

dataset = rg.Dataset(
	name="my_dataset",
	settings=settings,
	client=client,
	workspace="my_workspace",
)

dataset.create()

Read more about templates here.

Full Changelog: v2.1.0...v2.2.0

Release 2.1.0

05 Sep 15:11
Compare
Choose a tag to compare

🌟 Release highlights

Image Field

Screenshot showing Argilla's new Image Field and Dark Mode
Argilla now supports multimodal datasets with the introduction of a native ImageField. This new type of field allows you to work seamlessly with image data, making it easier to annotate and curate datasets that combine text and images.

Here's an example of a dataset with an image field:

import argilla as rg

client = rg.Argilla(...)

settings = rg.Settings(
	fields = [
		rg.ImageField(name="image"),
		rg.TextField(name="caption")
	],
	questions = [
		rg.LabelQuestion(
			name="good_or_bad", 
			title="Is the caption good or bad",
			labels=["good", "bad"]
		),
		rg.TextQuestion(name="comments")
	]
)

dataset = rg.Dataset(name="image_captions", settings=settings)
dataset.create()

record = rg.Record(
	fields= {
	  "image": "https://docs.argilla.io/dev/assets/logo.svg", 
	  "caption": "This is the Argilla logo"
	}
)
dataset.records.log([record])

Read more

Dark Mode

Argilla seems too bright for you? You can now try our new Dark Mode: a theme designed to reduce eye strain and give a new modern look to the app. You can enable Dark Mode under "My Settings".

Spanish Translation

Captura de pantalla 2024-09-05 a las 17 28 29

We're committed to making Argilla accessible to a broader audience. With the addition of Spanish translation, we're taking another step towards breaking language barriers and enabling more teams to collaborate on data curation projects.
There's nothing you need to do to enable it: Argilla will automatically switch to Spanish when your browser's main language is set to Spanish. ¡Disfrutadla!

Import any dataset from the Hugging Face Hub

The from_hub method just got a major boost! You can now input your own settings, allowing you to use this method with almost any dataset from the Hugging Face Hub, not just Argilla datasets.

Here's how easy it is to import a dataset from the Hub:

import argilla as rg

client = rg.Argilla(...)

settings = rg.Settings(
    fields=[
        rg.TextField(name="input"),
    ],
    questions=[
        rg.TextQuestion(name="output"),
    ],
)

dataset = rg.Dataset.from_hub(
    repo_id="yahma/alpaca-cleaned",
    settings=settings,
)

Read more

Other Notable Fixes and Improvements

  • Adaptable text areas for TextQuestion's, providing a better user experience in the UI.
  • Enhanced messaging for empty queues, keeping you informed when no records are available in the UI.

Full Changelog: v2.0.1...v2.1.0