Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 50 additions & 12 deletions src/rapidata/rapidata_client/benchmark/rapidata_benchmark.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from __future__ import annotations
import os.path
import re
import urllib.parse
import webbrowser
from colorama import Fore
Expand Down Expand Up @@ -53,9 +55,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"):
Expand Down Expand Up @@ -89,21 +96,50 @@ 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:
break

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:
Expand Down Expand Up @@ -373,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
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading