Argilla is a collaboration platform for AI engineers and domain experts that require high-quality outputs, full data ownership, and overall efficiency.
We’ve added a new queue in the Feedback Task UI so that you can save your drafts and have them all together in a separate view. This allows you to save your responses and come back to them before submission.
Note that responses won’t be autosaved now and to save your changes you will need to click on “Save as draft” or use the shortcut command ⌘
+ S
(macOS), Ctrl
+ S
(other).
We’ve been working to improve the keyboard shortcuts within the Feedback Task UI to make them more productive and user-friendly.
You can now select labels in Label and Multi-label questions using the numerical keys in your keyboard. To know which number corresponds with each label you can simply show or hide helpers by pressing command ⌘
(MacOS) or Ctrl
(other) for 2 seconds. You will then see the numbers next to the corresponding labels.
We’ve also simplified shortcuts for navigation and actions, so that they use as few keys as possible.
Check all available shortcuts here.
metrics
moduleWe've added a new module to analyze the annotations, both in terms of agreement between the annotators and in terms of data and model drift monitoring.
Easily measure the inter-annotator agreement to explore the quality of the annotation guidelines and consistency between annotators:
import argilla as rg
from argilla.client.feedback.metrics import AgreementMetric
feedback_dataset = rg.FeedbackDataset.from_argilla("...", workspace="...")
metric = AgreementMetric(dataset=feedback_dataset, question_name="question_name")
agreement_metrics = metric.compute("alpha")
#>>> agreement_metrics
#[AgreementMetricResult(metric_name='alpha', count=1000, result=0.467889)]
Read more here.
You can use ModelMetric
to model monitor performance for data and model drift:
import argilla as rg
from argilla.client.feedback.metrics import ModelMetric
feedback_dataset = rg.FeedbackDataset.from_argilla("...", workspace="...")
metric = ModelMetric(dataset=feedback_dataset, question_name="question_name")
annotator_metrics = metric.compute("accuracy")
#>>> annotator_metrics
#{'00000000-0000-0000-0000-000000000001': [ModelMetricResult(metric_name='accuracy', count=3, result=0.5)], '00000000-0000-0000-0000-000000000002': [ModelMetricResult(metric_name='accuracy', count=3, result=0.25)], '00000000-0000-0000-0000-000000000003': [ModelMetricResult(metric_name='accuracy', count=3, result=0.5)]}
Read more here.
TermsMetadataProperty
You can now pass a list of terms within a record’s metadata that will be aggregated and filterable as part of a TermsMetadataProperty
.
Here is an example:
import argilla as rg
dataset = rg.FeedbackDataset(
fields = ...,
questions = ...,
metadata_properties = [rg.TermsMetadataProperty(name="annotators")]
)
record = rg.FeedbackRecord(
fields = ...,
metadata = {"annotators": ["user_1", "user_2"]}
)
Reindex all entities in your Argilla instance (datasets, records, responses, etc.) with a simple CLI command.
argilla server reindex
This is useful when you are working with an existing feedback datasets and you want to update the search engine info.
FeedbackDataset
(argilla.client.feedback.metrics
). (#4175).401
HTTP status code` (#4362)textdescriptives
using TextDescriptivesExtractor
to configure metadata_properties
in FeedbackDataset
and FeedbackRecord
. (#4400). Contributed by @m-newhauserPOST /api/v1/me/responses/bulk
endpoint to create responses in bulk for current user. (#4380)httpx_extra_kwargs
argument to rg.init
and Argilla
to allow passing extra arguments to httpx.Client
used by Argilla
. (#4440)ArgillaSingleton
, init
and active_client
to a new module singleton
. (#4347)argilla.load
functions to also work with FeedbackDataset
s. (#4347)argilla.delete
functions to also work with FeedbackDataset
s. It now raises an error if the dataset does not exist. (#4347)argilla.list_datasets
functions to also work with FeedbackDataset
s. (#4347)TextClassificationSettings.from_dict
method in which the label_schema
created was a list of dict
instead of a list of str
. (#4347)draft
auto save for annotation view (#4334)We’ve added new filters in the Argilla UI to filter records within Feedback datasets based on response values and suggestions information. It is also possible to sort records based on suggestion scores. This is available for questions of the type: LabelQuestion
, MultiLabelQuestion
and RatingQuestion
.
We added several methods to assign records to annotators via controlled overlap assign_records
and assign_workspaces
.
from argilla.client.feedback.utils import assign_records
assignments = assign_records(
users=users,
records=records,
overlap=1,
shuffle=True
)
from argilla.client.feedback.utils import assign_workspaces
assignments = assign_workspaces(
assignments=assignments,
workspace_type="individual"
)
for username, records in assignments.items():
dataset = rg.FeedbackDataset(
fields=fields, questions=questions, metadata=metadata,
vector_settings=vector_settings, guidelines=guidelines
)
dataset.add_records(records)
remote_dataset = dataset.push_to_argilla(name="my_dataset", workspace=username)
Argilla supports basic handling of video, audio, and images within markdown fields, provided they are formatted in HTML. To facilitate this, we offer three functions: video_to_html
, audio_to_html
, and image_to_html
. Note that performance differs per browser and database configuration.
from argilla.client.feedback.utils import audio_to_html, image_to_html, video_to_html
# Configure the FeedbackDataset
ds_multi_modal = rg.FeedbackDataset(
fields=[rg.TextField(name="content", use_markdown=True, required=True)],
questions=[rg.TextQuestion(name="description", title="Describe the content of the media:", use_markdown=True, required=True)],
)
# Add the records
records = [
rg.FeedbackRecord(fields={"content": video_to_html("/content/snapshot.mp4")}),
rg.FeedbackRecord(fields={"content": audio_to_html("/content/sea.wav")}),
rg.FeedbackRecord(fields={"content": image_to_html("/content/peacock.jpg")}),
]
ds_multi_modal.add_records(records)
# Push the dataset to Argilla
ds_multi_modal = ds_multi_modal.push_to_argilla("multi-modal-basic", workspace="admin")
You can also add custom highlights to the text by using create_token_highlights
and a custom color map.
from argilla.client.feedback.utils import create_token_highlights
tokens = ["This", "is", "a", "test"]
weights = [0.1, 0.2, 0.3, 0.4]
html = create_token_highlights(tokens, weights, c_map=custom_RGB) # 'viridis' by default
GET /api/v1/datasets/:dataset_id/records/search/suggestions/options
endpoint to return suggestion available options for searching. (#4260)metadata_properties
to the __repr__
method of the FeedbackDataset
and RemoteFeedbackDataset
.(#4192).get_model_kwargs
, get_trainer_kwargs
, get_trainer_model
, get_trainer_tokenizer
and get_trainer
-methods to the ArgillaTrainer
to improve interoperability across frameworks. (#4214).ArgillaTrainer
to allow for better interoperability of defaults
and formatting_func
usage. (#4214).update_config
-method of ArgillaTrainer
to emphasize if the kwargs
were updated correctly. (#4214).argilla.client.feedback.utils
module with html_utils
(this mainly includes video/audio/image_to_html
that convert media to dataURL to be able to render them in tha Argilla UI and create_token_highlights
to highlight tokens in a custom way. Both work on TextQuestion and TextField with use_markdown=True) and assignments
(this mainly includes assign_records
to assign records according to a number of annotators and records, an overlap and the shuffle option; and assign_workspace
to assign and create if needed a workspace according to the record assignment). (#4121)ArgillaTrainer
, with numerical labels, using RatingQuestion
instead of RankingQuestion
(#4171)ArgillaTrainer
, now we can train for extractive_question_answering
using a validation sample (#4204)ArgillaTrainer
, when training for sentence-similarity
it didn't work with a list of values per record (#4211)RankingQuestion
(#4295)TextClassificationSettings.labels_schema
order was not being preserved. Closes #3828 (#4332)draft
responses to create records endpoint. (#4354)agent
field only accepts now some specific characters and a limited length. (#4265)score
field only accepts now float values in the range 0
to 1
. (#4266)POST /api/v1/dataset/:dataset_id/records/search
endpoint to support optional query
attribute. (#4327)POST /api/v1/dataset/:dataset_id/records/search
endpoint to support filter
and sort
attributes. (#4327)POST /api/v1/me/datasets/:dataset_id/records/search
endpoint to support optional query
attribute. (#4270)POST /api/v1/me/datasets/:dataset_id/records/search
endpoint to support filter
and sort
attributes. (#4270)FeedbackDataset
to Argilla from tqdm
style to rich
. (#4267). Contributed by @zucchini-nlp.push_to_argilla
to print repr
of the pushed RemoteFeedbackDataset
after push and changed show_progress
to True by default. (#4223)models
and tokenizer
for the ArgillaTrainer
to explicitly allow for changing them when needed. (#4214).We have chosen to disable raining a ValueError
during the FeedbackDataset.*_by_name()
: FeedbackDataset.question_by_name()
, FeedbackDataset.field_by_name()
and FeedbackDataset.metadata_property_by_name
. Instead, these methods will now return None
when no match is found. This change is backwards compatible with previous versions of Argilla but might break your code if you are relying on the ValueError
to be raised.
FeedbackDataset
You can now add vectors to your Feedback dataset and records to enable similarity search.
To do that, first, you need to add vector settings to your dataset:
dataset = rg.FeedbackDataset(
fields=[...],
questions=[....],
vector_settings=[
rg.VectorSettings(
name="my_vectors",
dimensions=768,
tite="My Vectors" #optional
)
]
)
Then, you can add vectors to your records where the key matches the name
of your vector settings and the value is a List[float]
:
record = rg.FeedbackRecord(
fields={...},
vectors={"my_vectors": [...]}
)
⚠️ For vector search in OpenSearch, the filtering applied is using a post_filter
step, since there is a bug that makes queries fail using filtering + KNN from Argilla.
See https://github.com/opensearch-project/k-NN/issues/1286
If you have included vectors and vector settings in your dataset, you can use the similarity search features within that dataset.
In the Argilla UI, you can find records that are similar to each other using the Find similar
button at the top right corner of the record card. Here's how to do it:
With a collapsed reference record: With an expanded reference record:
In the SDK, you can do the same like this:
ds = rg.FeedbackDataset.from_argilla("my_dataset", workspace="my_workspace")
# using another record
similar_records = ds.find_similar_records(
vector_name="my_vector",
record=ds.records[0],
max_results=5
)
# work with the resulting tuples
for record, score in similar_records:
...
You can also find records that are similar to a given text, but bear in mind that the dimensions of the resulting vector should be equal to that of the vector used in the dataset records:
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
)
FeedbackDataset
We added a show_progress
argument to from_huggingface()
method to make the progress bar for the parsing records process optional.
RemoteFeedbackDataset
We have added additional support for the pull()
-method of RemoteFeedbackDataset
. It is now possible to pull a RemoteFeedbackDataset
with a specific max_records
-argument. In combination with the earlier introduced filter_by
and sorty_by
this allows for more fine-grained control over the records that are pulled from Argilla.
ArgillaTrainer
The ArgillaTrainer
class has been updated to support additional features. Hugging Face models can now be shared to the Hugging Face Hub directly from the ArgillaTrainer.push_to_huggingface
-method. Additionally, we have included filter_by
, sort_by
, and max_records
arguments to the `ArgillaTrainer '-initialisation method to allow for more fine-grained control over the records used for training.
from argilla import SortBy
trainer = ArgillaTrainer(
dataset=dataset,
task=task,
framework="setfit",
filter_by={"response_status": ["submitted"]},
sort_by=[SortBy(field="metadata.my-metadata", order="asc")],
max_records=1000
)
inserted_at
and updated_at
datetime fields.POST /api/v1/datasets/:dataset_id/records/search
endpoint to search for records without user context, including responses by all users. (#4143)POST /api/v1/datasets/:dataset_id/vectors-settings
endpoint for creating vector settings for a dataset. (#3776)GET /api/v1/datasets/:dataset_id/vectors-settings
endpoint for listing the vectors settings for a dataset. (#3776)DELETE /api/v1/vectors-settings/:vector_settings_id
endpoint for deleting a vector settings. (#3776)PATCH /api/v1/vectors-settings/:vector_settings_id
endpoint for updating a vector settings. (#4092)GET /api/v1/records/:record_id
endpoint to get a specific record. (#4039)GET /api/v1/datasets/:dataset_id/records
endpoint response using include
query param. (#4063)GET /api/v1/me/datasets/:dataset_id/records
endpoint response using include
query param. (#4063)POST /api/v1/me/datasets/:dataset_id/records/search
endpoint response using include
query param. (#4063)show_progress
argument to from_huggingface()
method to make the progress bar for parsing records process optional.(#4132).from_huggingface()
method with trange
in tqdm
.(#4132).inserted_at
or updated_at
for datasets with no metadata. (4147)max_records
argument to pull()
method for RemoteFeedbackDataset
.(#4074)ArgillaTrainer.push_to_huggingface
(#3976). Contributed by @Racso-3141.filter_by
argument to ArgillaTrainer
to filter by response_status
(#4120).sort_by
argument to ArgillaTrainer
to sort by metadata
(#4120).max_records
argument to ArgillaTrainer
to limit record used for training (#4120).add_vector_settings
method to local and remote FeedbackDataset
. (#4055)update_vectors_settings
method to local and remote FeedbackDataset
. (#4122)delete_vectors_settings
method to local and remote FeedbackDataset
. (#4130)vector_settings_by_name
method to local and remote FeedbackDataset
. (#4055)find_similar_records
method to local and remote FeedbackDataset
. (#4023)ARGILLA_SEARCH_ENGINE
environment variable to configure the search engine to use. (#4019)ARGILLA_SEARCH_ENGINE=opensearch
. (#4019 and #4111)FeedbackDataset.*_by_name()
methods to return None
when no match is found (#4101).limit
query parameter for GET /api/v1/datasets/:dataset_id/records
endpoint is now only accepting values greater or equal than 1
and less or equal than 1000
. (#4143)limit
query parameter for GET /api/v1/me/datasets/:dataset_id/records
endpoint is now only accepting values greater or equal than 1
and less or equal than 1000
. (#4143)GET /api/v1/datasets/:dataset_id/records
endpoint to fetch record using the search engine. (#4142)GET /api/v1/me/datasets/:dataset_id/records
endpoint to fetch record using the search engine. (#4142)POST /api/v1/datasets/:dataset_id/records
endpoint to allow to create records with vectors
(#4022)PATCH /api/v1/datasets/:dataset_id
endpoint to allow updating allow_extra_metadata
attribute. (#4112)PATCH /api/v1/datasets/:dataset_id/records
endpoint to allow to update records with vectors
. (#4062)PATCH /api/v1/records/:record_id
endpoint to allow to update record with vectors
. (#4062)POST /api/v1/me/datasets/:dataset_id/records/search
endpoint to allow to search records with vectors. (#4019)BaseElasticAndOpenSearchEngine.index_records
method to also index record vectors. (#4062)FeedbackDataset.__init__
to allow passing a list of vector settings. (#4055)FeedbackDataset.push_to_argilla
to also push vector settings. (#4055)FeedbackDatasetRecord
to support the creation of records with vectors. (#4043)from_huggingface()
method with trange
in tqdm
.(#4132).You can now filter and sort records in Feedback Datasets in the UI and Python SDK using the metadata included in the records. To do that, you will first need to set up a MetadataProperty
in your dataset:
# set up a dataset including metadata properties
dataset = rg.FeedbackDataset(
fields=[
rg.TextField(name="prompt"),
rg.TextField(name="response"),
],
questions=[
rg.TextQuestion(name="question")
],
metadata_properties=[
rg.TermsMetadataProperty(name="source"),
rg.IntegerMetadataProperty(name="response_length", title="Response length")
]
)
Learn more about how to define metadata properties or adding or deleting metadata properties in existing datasets.
This will read the metadata in the records that match the name of the metadata property. Any other metadata present in the record not matching a metadata property will be saved but not available to use in the filtering and sorting features in the UI or SDK.
# create a record with metadata
record = rg.FeedbackRecord(
fields={
"prompt": "Why can camels survive long without water?",
"response": "Camels use the fat in their humps to keep them filled with energy and hydration for long periods of time."
},
metadata={"source": "wikipedia", "response_length": 105, "my_hidden_metadata": "hidden metadata"}
)
Learn more about how to create records with metadata and how to add, modify or delete metadata from existing records.
In the Python SDK, you can filter and sort records based on the Metadata Properties that you set up for your dataset. You can combine multiple filters and sorts. Here is an example of how you could use them:
filtered_records = remote.filter_by(
metadata_filters=[
rg.IntegerMetadataFilter(
name="response_length",
ge=500, # optional: greater or equal to
le=1000 # optional: lower or equal to
),
rg.TermsMetadataFilter(
name="source",
values=["wikipedia", "wikihow"]
)
]
).sort_by(
[
rg.SortBy(
field="response_length",
order="desc" # for descending or "asc" for ascending
)
]
In the UI, simply use the Metadata
and Sort
components to filter and sort records like this:
https://github.com/argilla-io/argilla/assets/126158523/6a5a7984-425d-4f1a-b0f7-7cc2bb7e4a0a
Read more about filtering and sorting in Feedback Datasets.
From version 1.17.0 a new argilla
os user is configured for the provided docker images. If you are using the docker deployment and you want to upload to this version from versions older than v1.17.0 (If you already updated from v1.17.0 this step was already applied - see Release Notes), you should change permissions to the SQLite db file, before upgrading the version. You can do it with the following action:
docker exec --user root <argilla_server_container_id> /bin/bash -c 'chmod -R 777 "$ARGILLA_HOME_PATH"'
Note: You can find the docker container id by running:
docker ps | grep -i argilla-server
713973693fb7 argilla/argilla-server:v1.16.0 "/bin/bash start_arg…" 11 hours ago Up 7 minutes 0.0.0.0:6900->6900/tcp docker-argilla-1
Once the version is upgraded, we recommend to provided proper security access to this folder by setting the user and group to the new argilla
user:
docker exec --user root <argilla_server_container_id> /bin/bash -c 'chown -R argilla:argilla "$ARGILLA_HOME_PATH"'
GET /api/v1/datasets/:dataset_id/metadata-properties
endpoint for listing dataset metadata properties. (#3813)POST /api/v1/datasets/:dataset_id/metadata-properties
endpoint for creating dataset metadata properties. (#3813)PATCH /api/v1/metadata-properties/:metadata_property_id
endpoint allowing the update of a specific metadata property. (#3952)DELETE /api/v1/metadata-properties/:metadata_property_id
endpoint for deletion of a specific metadata property. (#3911)GET /api/v1/metadata-properties/:metadata_property_id/metrics
endpoint to compute metrics for a specific metadata property. (#3856)PATCH /api/v1/records/:record_id
endpoint to update a record. (#3920)PATCH /api/v1/dataset/:dataset_id/records
endpoint to bulk update the records of a dataset. (#3934)PATCH /api/v1/questions/:question_id
. Now title
and description
are using the same validations used to create questions. (#3967)TermsMetadataProperty
, IntegerMetadataProperty
and FloatMetadataProperty
classes allowing to define metadata properties for a FeedbackDataset
. (#3818)metadata_filters
to filter_by
method in RemoteFeedbackDataset
to filter based on metadata i.e. TermsMetadataFilter
, IntegerMetadataFilter
, and FloatMetadataFilter
. (#3834)metadata_properties
and metadata_filters
in their schemas and as part of the add_records
and filter_by
methods, respectively. (#3860)sort_by
query parameter to listing records endpoints that allows to sort the records by inserted_at
, updated_at
or metadata property. (#3843)add_metadata_property
method to both FeedbackDataset
and RemoteFeedbackDataset
(i.e. FeedbackDataset
in Argilla). (#3900)inserted_at
and updated_at
in RemoteResponseSchema
. (#3822)sort_by
for RemoteFeedbackDataset
i.e. a FeedbackDataset
uploaded to Argilla. (#3925)metadata_properties
support for both push_to_huggingface
and from_huggingface
. (#3947)metadata
) from Python SDK. (#3946)delete_metadata_properties
method to delete metadata properties. (#3932)update_metadata_properties
method to update metadata_properties
. (#3961)ArgillaTrainer.save
(#3857)FeedbackDataset
TaskTemplateMixin
for pre-defined task templates. (#3969)last_activity_at
field to FeedbackDataset
exposing when the last activity for the associated dataset occurs. (#3992)GET /api/v1/datasets/{dataset_id}/records
, GET /api/v1/me/datasets/{dataset_id}/records
and POST /api/v1/me/datasets/{dataset_id}/records/search
endpoints to return the total
number of records. (#3848, #3903)__len__
method for filtered datasets to return the number of records matching the provided filters. (#3916)values
to be None
i.e. when a record is discarded the response.values
are set to None
. (#3926)Full Changelog: https://github.com/argilla-io/argilla/compare/v1.17.0...v1.18.0
This release comes with a lot of new goodies and quality improvements. We added model card support for the ArgillaTrainer
, worked on the FeedbackDataset
task templates and added timestamps to responses. We also fixed a lot of bugs and improved the overall quality of the codebase. Enjoy!
The quickstart image startup script was changed from from /start_quickstart.sh
to /home/argilla/start_quickstart.sh
, which might cause existing Hugging Face Spaces deployments to malfunction. A fix was added for the Argilla template space via this PR. Alternatively, you can just create a new deployment.
From version 1.17.0 a new argilla
os user is configured for the provided docker images. If you are using the docker deployment and you want to upload to this version, you should do some actions once update your container and before working with Argilla. Execute the following command:
docker exec --user root <argilla_server_container_id> /bin/bash -c 'chown -R argilla:argilla "$ARGILLA_HOME_PATH"'
This will change the permissions on the argilla home path, which allows it to work with new containers.
Note: You can find the docker container id by running:
docker ps | grep -i argilla-server
713973693fb7 argilla/argilla-server:v1.17.0 "/bin/bash start_arg…" 11 hours ago Up 7 minutes 0.0.0.0:6900->6900/tcp docker-argilla-1
ArgillaTrainer
Model Card GenerationThe ArgillaTrainer
now supports automatic model card generation. This means that you can now generate a model card with all the required info for Hugging Face and directly share these models to the hub, as you would expect within the Hugging Face ecosystem. See the docs for more info.
model_card_kwargs = {
"language": ["en", "es"],
"license": "Apache-2.0",
"model_id": "all-MiniLM-L6-v2",
"dataset_name": "argilla/emotion",
"tags": ["nlp", "few-shot-learning", "argilla", "setfit"],
"model_summary": "Small summary of what the model does",
"model_description": "An extended explanation of the model",
"model_type": "A 1.3B parameter embedding model fine-tuned on an awesome dataset",
"finetuned_from": "all-MiniLM-L6-v2",
"repo": "https://github.com/..."
"developers": "",
"shared_by": "",
}
trainer = ArgillaTrainer(
dataset=dataset,
task=task,
framework="setfit",
framework_kwargs={"model_card_kwargs": model_card_kwargs}
)
trainer.train(output_dir="my_model")
# or get the card as `str` by calling the `generate_model_card` method
argilla_model_card = trainer.generate_model_card("my_model")
FeedbackDataset
Task TemplatesThe Argilla FeedbackDataset
now supports a number of task templates that can be used to quickly create a dataset for specific tasks out of the box. This should help starting users get right into the action without having to worry about the dataset structure. We support basic tasks like Text Classification but also allow you to setup complex RAG-pipelines. See the docs for more info.
import argilla as rg
ds = rg.FeedbackDataset.for_text_classification(
labels=["positive", "negative"],
multi_label=False,
use_markdown=True,
guidelines=None,
)
ds
# FeedbackDataset(
# fields=[TextField(name="text", use_markdown=True)],
# questions=[LabelQuestion(name="label", labels=["positive", "negative"])]
# guidelines="<Guidelines for the task>",
# )
inserted_at
and updated_at
are added to responsesWhat are responses without timestamps? The RemoteResponseSchema
now supports inserted_at
and updated_at
fields. This should help you to keep track of the time when a response was created and updated. Perfectly, for keeping track of annotator performance within your company.
inserted_at
and updated_at
in RemoteResponseSchema
(#3822).ArgillaTrainer.save
(#3857).FeedbackDataset
(#3973).Dockerfile
to use multi stage build (#3221 and #3793).unify_responses
support for remote datasets (#3937).TextClassificationRecord
(#3831).required=True
) when the field value was None
(#3846).pretrained_model_name_or_path
attribute as string in ArgillaTrainer
(#3914).inserted_at
and updated_at
attributes are create using the utcnow
factory to avoid unexpected race conditions on timestamp creation (#3945)configure_dataset_settings
when providing the workspace via the arg workspace
(#3887).ArgillaTrainer
with a peft_config
parameter (#3795).from_huggingface
when loading a FeedbackDataset
from the Hugging Face Hub that was previously dumped using another version of Argilla, starting at 1.8.0, when it was first introduced (#3829).TrainingTaskForQuestionAnswering.__repr__
(#3969)TrainingTask.prepare_for_training_with_*
-methods (#3969)rg.configure_dataset
is deprecated in favour of rg.configure_dataset_settings
. The former will be removed in version 1.19.0Full Changelog: https://github.com/argilla-io/argilla/compare/v1.16.0...v1.17.0
This release comes with an auto save feature for the UI, an enhanced Argilla CLI app, new keyboard shortcuts for the annotation process in the Feedback Dataset and new integrations for the ArgillaTrainer
.
Have you been writing a long corrected text in a TextField
for a completion given by an LLM and you have refreshed the page before submitting it? Well, since this release you are covered! The Argilla UI will save every few seconds the responses given in the annotation form of a FeedbackDataset
. Annotators can partially annotate one record and then come back to finish the annotation process without losing the previous work.
The Argilla CLI has been updated to include an extensive list of new commands, from users and datasets management to training models all from the terminal!
Now, you can seamlessly navigate within the feedback form using just your keyboard. We've extended the functionality of these shortcuts to cover all types of available questions: Label, Multi-label, Ranking, Rating and Text
ArgillaTrainer
The ArgillaTrainer
doesn't stop getting new features and improvements!
TrainingTask
has been added for Question and Answering (QnA)
FeedbackDataset
for fine-tuning an OpenAI model for Chat Completion
ArgillaTrainer
integration with sentence-transformers, allowing fine tuning for sentence similarity (#3739)ArgillaTrainer
integration with TrainingTask.for_question_answering
(#3740)Auto save record
to save automatically the current record that you are working on (#3541)ArgillaTrainer
integration with OpenAI, allowing fine tuning for chat completion (#3615)workspaces list
command to list Argilla workspaces (#3594).datasets list
command to list Argilla datasets (#3658).users create
command to create users (#3667).whoami
command to get current user (#3673).users delete
command to delete users (#3671).users list
command to list users (#3688).workspaces delete-user
command to remove a user from a workspace (#3699).datasets list
command to list Argilla datasets (#3658).users create
command to create users (#3667).users delete
command to delete users (#3671).workspaces create
command to create an Argilla workspace (#3676).datasets push-to-hub
command to push a FeedbackDataset
from Argilla into the HuggingFace Hub (#3685).info
command to get info about the used Argilla client and server (#3707).datasets delete
command to delete a FeedbackDataset
from Argilla (#3703).created_at
and updated_at
properties to RemoteFeedbackDataset
and FilteredRemoteFeedbackDataset
(#3709).PermissionError
when executing a command with a logged in user with not enough permissions (#3717).workspaces add-user
command to add a user to workspace (#3712).workspace_id
param to GET /api/v1/me/datasets
endpoint (#3727).workspace_id
arg to list_datasets
in the Python SDK (#3727).argilla
script that allows to execute Argilla CLI using the argilla
command (#3730).server_info
function to check the Argilla server information (also accessible via rg.server_info
) (#3772).database
commands under server
group of commands (#3710)server
commands only included in the CLI app when server
extra requirements are installed (#3710).PUT /api/v1/responses/{response_id}
to replace values
stored with received values
in request (#3711).UserWarning
when the user_id
in Workspace.add_user
and Workspace.delete_user
is the ID of an user with the owner role as they don't require explicit permissions (#3716).tasks
sub-package to cli
(#3723).argilla database
command in the CLI to now be accessed via argilla server database
, to be deprecated in the upcoming release (#3754).visible_options
(of label and multi label selection questions) validation in the backend to check that the provided value is greater or equal than/to 3 and less or equal than/to the number of provided options (#3773).remove user modification in text component on clear answers
(#3775)Highlight raw text field in dataset feedback task
(#3731)Field title too long
(#3734)DatasetForTextClassification
(#3652)Pending queue
pagination problems when during data annotation (#3677)visible_labels
default value to be 20 just when visible_labels
not provided and len(labels) > 20
, otherwise it will either be the provided visible_labels
value or None
, for LabelQuestion
and MultiLabelQuestion
(#3702).DatasetCard
generation when RemoteFeedbackDataset
contains suggestions (#3718).draft
status in ResponseSchema
as now there can be responses with draft
status when annotating via the UI (#3749)./api/datasets
endpoints due to the TaskType
enum replacement in the endpoint URL (#3769).Full Changelog: https://github.com/argilla-io/argilla/compare/v1.15.1...v1.16.0
Text component
text content sanitization behavior just for markdown to prevent disappear the text (#3738)Text component
now you need to press Escape to exit the text area (#3733)SearchEngine
was creating the same number of primary shards and replica shards for each FeedbackDataset
(#3736).Argilla 1.15.0 comes with an enhanced FeedbackDataset
settings page enabling the update of the dataset settings, an integration of the TRL package with the ArgillaTrainer
, and continues adding improvements to the Python client for managing FeedbackDataset
s.
FeedbackDataset
settings from the UIFeedbackDataset
settings page has been updated and now it allows to update the guidelines
and some attributes of the fields
and questions
of the dataset. Did you misspell the title or description of a field or question? Well, you don't have to remove your dataset and create it again anymore! Just go to the settings page and fix it.
ArgillaTrainer
The famous TRL package for training Transformers with Reinforcement Learning techniques has been integrated with the ArgillaTrainer, that comes with four new TrainingTask
: SFT, Reward Modeling, PPO and DPO. Each training task expects a formatting function that will return the data in the expected format for training the model.
Check this 🆕 tutorial for training a Reward Model using the Argilla Trainer.
FeedbackDataset
and remove suggestionsIn the 1.14.0 release we added many improvements for working with remote FeedbackDataset
s. In this release, a new filter_by
method has been added that allows to filter the records of a dataset from the Python client. For now, the records can be only filtered using the response_status
, but we're planning adding more complex filters for the upcoming releases. In addition, new methods have been added allowing to remove the suggestions created for a record.
Enable to update guidelines and dataset settings for Feedback Datasets directly in the UI
(#3489)ArgillaTrainer
integration with TRL, allowing for easy supervised finetuning, reward modeling, direct preference optimization and proximal policy optimization (#3467)formatting_func
to ArgillaTrainer
for FeedbackDataset
datasets add a custom formatting for the data (#3599).login
function in argilla.client.login
to login into an Argilla server and store the credentials locally (#3582).login
command to login into an Argilla server (#3600).logout
command to logout from an Argilla server (#3605).DELETE /api/v1/suggestions/{suggestion_id}
endpoint to delete a suggestion given its ID (#3617).DELETE /api/v1/records/{record_id}/suggestions
endpoint to delete several suggestions linked to the same record given their IDs (#3617).response_status
param to GET /api/v1/datasets/{dataset_id}/records
to be able to filter by response_status
as previously included for GET /api/v1/me/datasets/{dataset_id}/records
(#3613).list
classmethod to ArgillaMixin
to be used as FeedbackDataset.list()
, also including the workspace
to list from as arg (#3619).filter_by
method in RemoteFeedbackDataset
to filter based on response_status
(#3610).list_workspaces
function (to be used as rg.list_workspaces
, but Workspace.list
is preferred) to list all the workspaces from an user in Argilla (#3641).list_datasets
function (to be used as rg.list_datasets
) to list the TextClassification
, TokenClassification
, and Text2Text
datasets in Argilla (#3638).RemoteSuggestionSchema
to manage suggestions in Argilla, including the delete
method to delete suggestios from Argilla via DELETE /api/v1/suggestions/{suggestion_id}
(#3651).delete_suggestions
to RemoteFeedbackRecord
to remove suggestions from Argilla via DELETE /api/v1/records/{record_id}/suggestions
(#3651).Optional label for * mark for required question
(#3608)RemoteFeedbackDataset.delete_records
to use batch delete records endpoint (#3580).allowed_for_roles
for some RemoteFeedbackDataset
, RemoteFeedbackRecords
, and RemoteFeedbackRecord
methods that are only allowed for users with roles owner
and admin
(#3601).ArgillaToFromMixin
to ArgillaMixin
(#3619).users
CLI app under database
CLI app (#3593).Enum
classes to argilla.server.enums
module (#3620).Filter by workspace in breadcrumbs
(#3577)Filter by workspace in datasets table
(#3604)Query search highlight
for Text2Text and TextClassification (#3621)RatingQuestion.values
validation to raise a ValidationError
when values are out of range i.e. [1, 10] (#3626).multi_task_text_token_classification
from TaskType
as not used (#3640).argilla_id
in favor of id
from RemoteFeedbackDataset
(#3663).fetch_records
from RemoteFeedbackDataset
as now the records are lazily fetched from Argilla (#3663).push_to_argilla
from RemoteFeedbackDataset
, as it just works when calling it through a FeedbackDataset
locally, as now the updates of the remote datasets are automatically pushed to Argilla (#3663).set_suggestions
in favor of update(suggestions=...)
for both FeedbackRecord
and RemoteFeedbackRecord
, as all the updates of any "updateable" attribute of a record will go through update
instead (#3663).owner
attribute for client Dataset data model (#3665)Full Changelog: https://github.com/argilla-io/argilla/compare/v1.14.1...v1.15.0
begin_nested
because of missing commit
(#3567).Full Changelog: https://github.com/argilla-io/argilla/compare/v1.14.0...v1.14.1
Argilla 1.14.0 comes packed with improvements to manage Feedback Datasets from the Python client. Here are the most important changes in this version:
Pushing a dataset to Argilla will now create a RemoteFeedbackDataset
in Argilla. To make changes to your dataset in Argilla you will need to make those updates to the remote dataset. You can do so by either using the dataset returned when using the push_to_argilla()
method (as shown in the image above) or by loading the dataset like so:
import argilla as rg
# connect to Argilla
rg.init(api_url="...", api_key="...")
# get the existing dataset in Argilla
remote_dataset = rg.FeedbackDataset.from_argilla(name="my-dataset", workspace="my-workspace")
# add a list of FeedbackRecords to the dataset in Argilla
remote_dataset.add_records(...)
Alternatively, you can make a local copy of the dataset using the pull()
method.
local_dataset = remote_dataset.pull()
Note that any changes that you make to this local dataset will not affect the remote dataset in Argilla.
How to add records to an existing dataset in Argilla was demonstrated in the first code snippet in the "Pushing and pulling a dataset" section. This is how you can delete a list of records using that same dataset:
records_to_delete = remote_dataset.records[0:5]
remote_dataset.delete_records(records_to_delete)
Or delete a single record:
record = remote_dataset.records[-1]
record.delete()
To add and update suggestions in existing records, you can simply use the update()
method. For example:
for record in remote_dataset.records:
record.update(suggestions=...)
Note that adding a suggestion to a question that already has one will overwrite the previous suggestion. To learn more about the format that the suggestions must follow, check our docs.
You can now easily delete datasets from the Python client. To do that, get the existing dataset like demonstrated in the first section and just use:
remote_dataset.delete()
Now you can create a user and directly assign existing workspaces to grant them access.
user = rg.User.create(username="...", first_name="...", password="...", workspaces=["ws1", "ws2"])
PATCH /api/v1/fields/{field_id}
endpoint to update the field title and markdown settings (#3421).PATCH /api/v1/datasets/{dataset_id}
endpoint to update dataset name and guidelines (#3402).PATCH /api/v1/questions/{question_id}
endpoint to update question title, description and some settings (depending on the type of question) (#3477).DELETE /api/v1/records/{record_id}
endpoint to remove a record given its ID (#3337).pull
method in RemoteFeedbackDataset
(a FeedbackDataset
pushed to Argilla) to pull all the records from it and return it as a local copy as a FeedbackDataset
(#3465).delete
method in RemoteFeedbackDataset
(a FeedbackDataset
pushed to Argilla) (#3512).delete_records
method in RemoteFeedbackDataset
, and delete
method in RemoteFeedbackRecord
to delete records from Argilla (#3526).ArgillaDatasetMixin
to detach the Argilla-related functionality from the FeedbackDataset
(#3427)FeedbackDataset
-related pydantic.BaseModel
schemas to argilla.client.feedback.schemas
instead, to be better structured and more scalable and maintainable (#3427)POST /api/users
endpoint to be able to provide a list of workspace names to which the user should be linked to (#3462).User.create
method to be able to provide a list of workspace names to which the user should be linked to (#3462).GET /api/v1/me/datasets/{dataset_id}/records
endpoint to allow getting records matching one of the response statuses provided via query param (#3359).POST /api/v1/me/datasets/{dataset_id}/records
endpoint to allow searching records matching one of the response statuses provided via query param (#3359).SearchEngine.search
method to allow searching records matching one of the response statuses provided (#3359).FeedbackDataset.push_to_argilla
, the methods FeedbackDataset.add_records
and FeedbackRecord.set_suggestions
will automatically call Argilla with no need of calling push_to_argilla
explicitly (#3465).FeedbackDataset.push_to_huggingface
dumps the responses
as a List[Dict[str, Any]]
instead of Sequence
to make it more readable via 🤗datasets
(#3539).bool
values and default
from Jinja2 while generating the HuggingFace DatasetCard
from argilla_template.md
(#3499).DatasetConfig.from_yaml
which was failing when calling FeedbackDataset.from_huggingface
as the UUIDs cannot be deserialized automatically by PyYAML
, so UUIDs are neither dumped nor loaded anymore (#3502).TextClassificationSettings
and TokenClassificationSettings
labels are properly parsed to strings both in the Python client and in the backend endpoint (#3495).PUT /api/v1/datasets/{dataset_id}/publish
to check whether at least one field and question has required=True
(#3511).FeedbackDataset.from_huggingface
as suggestions
were being lost when there were no responses
(#3539).QuestionSchema
and FieldSchema
not validating name
attribute (#3550).FeedbackDataset.push_to_argilla
, calling push_to_argilla
again won't do anything since the dataset is already pushed to Argilla (#3465).FeedbackDataset.push_to_argilla
, calling fetch_records
won't do anything since the records are lazily fetched from Argilla (#3465).FeedbackDataset.push_to_argilla
, the Argilla ID is no longer stored in the attribute/property argilla_id
but in id
instead (#3465).Full Changelog: https://github.com/argilla-io/argilla/compare/v1.13.3...v1.14.0