From dcf8e4b485b69c304d702a877dfdb9d927d14918 Mon Sep 17 00:00:00 2001 From: Lino Giger <68745352+LinoGiger@users.noreply.github.com> Date: Wed, 24 Jun 2026 12:50:31 +0200 Subject: [PATCH 1/2] fixed the prompt asset casting --- .../benchmark/rapidata_benchmark.py | 37 +++++++++++++------ uv.lock | 2 +- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py b/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py index 1f7b8c3cd..aa02308dc 100644 --- a/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py +++ b/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py @@ -53,9 +53,14 @@ def __init__(self, name: str, id: str, openapi_service: OpenAPIService): def __instantiate_prompts(self) -> None: from rapidata.rapidata_client.config import tracer - from rapidata.api_client.models.file_asset_model import FileAssetModel - from rapidata.api_client.models.source_url_metadata_model import ( - SourceUrlMetadataModel, + from rapidata.api_client.models.i_asset_model_file_asset_model import ( + IAssetModelFileAssetModel, + ) + from rapidata.api_client.models.i_metadata_model_source_url_metadata_model import ( + IMetadataModelSourceUrlMetadataModel, + ) + from rapidata.api_client.models.i_metadata_model_original_filename_metadata_model import ( + IMetadataModelOriginalFilenameMetadataModel, ) with tracer.start_as_current_span("RapidataBenchmark.__instantiate_prompts"): @@ -89,14 +94,24 @@ def __instantiate_prompts(self) -> None: if prompt.prompt_asset is None: self.__prompt_assets.append(None) else: - assert isinstance( - prompt.prompt_asset.actual_instance, FileAssetModel - ) - source_url = prompt.prompt_asset.actual_instance.metadata[ - "sourceUrl" - ].actual_instance - assert isinstance(source_url, SourceUrlMetadataModel) - self.__prompt_assets.append(source_url.url) + file_asset = prompt.prompt_asset.actual_instance + assert isinstance(file_asset, IAssetModelFileAssetModel) + source_url = file_asset.metadata.get("sourceUrl") + original_filename = file_asset.metadata.get("originalFilename") + if source_url is not None: + instance = source_url.actual_instance + assert isinstance( + instance, IMetadataModelSourceUrlMetadataModel + ) + self.__prompt_assets.append(instance.url) + elif original_filename is not None: + instance = original_filename.actual_instance + assert isinstance( + instance, IMetadataModelOriginalFilenameMetadataModel + ) + self.__prompt_assets.append(instance.original_filename) + else: + self.__prompt_assets.append(None) self.__tags.append(prompt.tags) if current_page >= total_pages: diff --git a/uv.lock b/uv.lock index c4661d8fd..23c812895 100644 --- a/uv.lock +++ b/uv.lock @@ -2570,7 +2570,7 @@ wheels = [ [[package]] name = "rapidata" -version = "3.13.0" +version = "3.15.0" source = { editable = "." } dependencies = [ { name = "authlib" }, From d8fcbadf93ee602053ce5d6dba4a86ada986bb3b Mon Sep 17 00:00:00 2001 From: Lino Giger <68745352+LinoGiger@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:02:53 +0200 Subject: [PATCH 2/2] small fix --- .../benchmark/rapidata_benchmark.py | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py b/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py index aa02308dc..07b31b2e3 100644 --- a/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py +++ b/src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py @@ -1,4 +1,6 @@ from __future__ import annotations +import os.path +import re import urllib.parse import webbrowser from colorama import Fore @@ -119,6 +121,25 @@ def __instantiate_prompts(self) -> None: current_page += 1 + # http / https in any case — same detection the asset uploader uses to tell + # a remote URL from a local path. + __URL_SCHEME_RE = re.compile(r"^https?://", re.IGNORECASE) + + @classmethod + def __normalize_cached_asset(cls, asset: str | None) -> str | None: + """Mirror the representation a re-fetch would reconstruct for an asset. + + `__instantiate_prompts` rebuilds assets from server metadata: remote + URLs come back verbatim (`sourceUrl`), but local files come back as just + their base filename (`originalFilename`). Normalizing the freshly + uploaded value here keeps `prompt_assets` identical before and after any + re-fetch, so it stays idempotent as input to downstream calls. + """ + if asset is None or cls.__URL_SCHEME_RE.match(asset): + return asset + + return os.path.basename(asset) + @property def identifiers(self) -> list[str]: if not self.__identifiers: @@ -388,7 +409,9 @@ def add_prompts( for uploaded in self._prompt_uploader.upload_many(to_upload): self.__identifiers.append(uploaded.identifier) self.__prompts.append(uploaded.prompt) - self.__prompt_assets.append(uploaded.prompt_asset) + self.__prompt_assets.append( + self.__normalize_cached_asset(uploaded.prompt_asset) + ) self.__tags.append(uploaded.tags) # The English translation is produced server-side and is unknown for