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
9 changes: 9 additions & 0 deletions langfuse/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@
CreateScoreValue,
Dataset,
DatasetItem,
DatasetItemMediaReference,
DatasetItemMediaReferenceField,
DatasetItemMediaReferenceMedia,
DatasetRun,
DatasetRunItem,
DatasetRunWithItems,
Expand Down Expand Up @@ -396,6 +399,9 @@
"CreateTextPromptType": ".prompts",
"Dataset": ".commons",
"DatasetItem": ".commons",
"DatasetItemMediaReference": ".commons",
"DatasetItemMediaReferenceField": ".commons",
"DatasetItemMediaReferenceMedia": ".commons",
"DatasetRun": ".commons",
"DatasetRunItem": ".commons",
"DatasetRunWithItems": ".commons",
Expand Down Expand Up @@ -717,6 +723,9 @@ def __dir__():
"CreateTextPromptType",
"Dataset",
"DatasetItem",
"DatasetItemMediaReference",
"DatasetItemMediaReferenceField",
"DatasetItemMediaReferenceMedia",
"DatasetRun",
"DatasetRunItem",
"DatasetRunWithItems",
Expand Down
9 changes: 9 additions & 0 deletions langfuse/api/commons/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
CreateScoreValue,
Dataset,
DatasetItem,
DatasetItemMediaReference,
DatasetItemMediaReferenceField,
DatasetItemMediaReferenceMedia,
DatasetRun,
DatasetRunItem,
DatasetRunWithItems,
Expand Down Expand Up @@ -84,6 +87,9 @@
"CreateScoreValue": ".types",
"Dataset": ".types",
"DatasetItem": ".types",
"DatasetItemMediaReference": ".types",
"DatasetItemMediaReferenceField": ".types",
"DatasetItemMediaReferenceMedia": ".types",
"DatasetRun": ".types",
"DatasetRunItem": ".types",
"DatasetRunWithItems": ".types",
Expand Down Expand Up @@ -174,6 +180,9 @@ def __dir__():
"CreateScoreValue",
"Dataset",
"DatasetItem",
"DatasetItemMediaReference",
"DatasetItemMediaReferenceField",
"DatasetItemMediaReferenceMedia",
"DatasetRun",
"DatasetRunItem",
"DatasetRunWithItems",
Expand Down
9 changes: 9 additions & 0 deletions langfuse/api/commons/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
from .create_score_value import CreateScoreValue
from .dataset import Dataset
from .dataset_item import DatasetItem
from .dataset_item_media_reference import DatasetItemMediaReference
from .dataset_item_media_reference_field import DatasetItemMediaReferenceField
from .dataset_item_media_reference_media import DatasetItemMediaReferenceMedia
from .dataset_run import DatasetRun
from .dataset_run_item import DatasetRunItem
from .dataset_run_with_items import DatasetRunWithItems
Expand Down Expand Up @@ -78,6 +81,9 @@
"CreateScoreValue": ".create_score_value",
"Dataset": ".dataset",
"DatasetItem": ".dataset_item",
"DatasetItemMediaReference": ".dataset_item_media_reference",
"DatasetItemMediaReferenceField": ".dataset_item_media_reference_field",
"DatasetItemMediaReferenceMedia": ".dataset_item_media_reference_media",
"DatasetRun": ".dataset_run",
"DatasetRunItem": ".dataset_run_item",
"DatasetRunWithItems": ".dataset_run_with_items",
Expand Down Expand Up @@ -163,6 +169,9 @@ def __dir__():
"CreateScoreValue",
"Dataset",
"DatasetItem",
"DatasetItemMediaReference",
"DatasetItemMediaReferenceField",
"DatasetItemMediaReferenceMedia",
"DatasetRun",
"DatasetRunItem",
"DatasetRunWithItems",
Expand Down
7 changes: 7 additions & 0 deletions langfuse/api/commons/types/dataset_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import typing_extensions
from ...core.pydantic_utilities import UniversalBaseModel
from ...core.serialization import FieldMetadata
from .dataset_item_media_reference import DatasetItemMediaReference
from .dataset_status import DatasetStatus


Expand Down Expand Up @@ -52,6 +53,12 @@ class DatasetItem(UniversalBaseModel):
updated_at: typing_extensions.Annotated[
dt.datetime, FieldMetadata(alias="updatedAt")
]
media_references: typing_extensions.Annotated[
typing.List[DatasetItemMediaReference], FieldMetadata(alias="mediaReferences")
] = pydantic.Field()
"""
Resolved Langfuse media references found in input, expectedOutput, and metadata.
"""
Comment thread
wochinge marked this conversation as resolved.
Comment thread
wochinge marked this conversation as resolved.

model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
extra="allow", frozen=True
Expand Down
40 changes: 40 additions & 0 deletions langfuse/api/commons/types/dataset_item_media_reference.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# This file was auto-generated by Fern from our API Definition.

import typing

import pydantic
import typing_extensions
from ...core.pydantic_utilities import UniversalBaseModel
from ...core.serialization import FieldMetadata
from .dataset_item_media_reference_field import DatasetItemMediaReferenceField
from .dataset_item_media_reference_media import DatasetItemMediaReferenceMedia


class DatasetItemMediaReference(UniversalBaseModel):
field: DatasetItemMediaReferenceField = pydantic.Field()
"""
The dataset item field containing the reference
"""

reference_string: typing_extensions.Annotated[
str, FieldMetadata(alias="referenceString")
] = pydantic.Field()
"""
The Langfuse media reference string, e.g. `@@@langfuseMedia:type=image/png|id=...|source=bytes@@@`
"""

json_path: typing_extensions.Annotated[str, FieldMetadata(alias="jsonPath")] = (
pydantic.Field()
)
"""
JSONPath of the string holding the reference within the field, e.g. `$['image']`
"""

media: DatasetItemMediaReferenceMedia = pydantic.Field()
"""
The resolved media record.
"""

model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
extra="allow", frozen=True
)
26 changes: 26 additions & 0 deletions langfuse/api/commons/types/dataset_item_media_reference_field.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# This file was auto-generated by Fern from our API Definition.

import typing

from ...core import enum

T_Result = typing.TypeVar("T_Result")


class DatasetItemMediaReferenceField(enum.StrEnum):
INPUT = "input"
EXPECTED_OUTPUT = "expectedOutput"
METADATA = "metadata"

def visit(
self,
input: typing.Callable[[], T_Result],
expected_output: typing.Callable[[], T_Result],
metadata: typing.Callable[[], T_Result],
) -> T_Result:
if self is DatasetItemMediaReferenceField.INPUT:
return input()
if self is DatasetItemMediaReferenceField.EXPECTED_OUTPUT:
return expected_output()
if self is DatasetItemMediaReferenceField.METADATA:
return metadata()
Comment thread
wochinge marked this conversation as resolved.
47 changes: 47 additions & 0 deletions langfuse/api/commons/types/dataset_item_media_reference_media.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# This file was auto-generated by Fern from our API Definition.

import typing

import pydantic
import typing_extensions
from ...core.pydantic_utilities import UniversalBaseModel
from ...core.serialization import FieldMetadata


class DatasetItemMediaReferenceMedia(UniversalBaseModel):
media_id: typing_extensions.Annotated[str, FieldMetadata(alias="mediaId")] = (
pydantic.Field()
)
"""
The unique langfuse identifier of the media record
"""

content_type: typing_extensions.Annotated[
str, FieldMetadata(alias="contentType")
] = pydantic.Field()
"""
The MIME type of the media record
"""

content_length: typing_extensions.Annotated[
int, FieldMetadata(alias="contentLength")
] = pydantic.Field()
"""
The size of the media record in bytes
"""

url: str = pydantic.Field()
"""
The signed download URL of the media record
"""

url_expiry: typing_extensions.Annotated[str, FieldMetadata(alias="urlExpiry")] = (
pydantic.Field()
)
"""
The expiry date and time of the download URL
"""

model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
extra="allow", frozen=True
)
46 changes: 32 additions & 14 deletions langfuse/api/media/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,22 +138,21 @@ def patch(
def get_upload_url(
self,
*,
trace_id: str,
content_type: MediaContentType,
content_length: int,
sha256hash: str,
field: str,
trace_id: typing.Optional[str] = OMIT,
observation_id: typing.Optional[str] = OMIT,
dataset_id: typing.Optional[str] = OMIT,
dataset_item_id: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> GetMediaUploadUrlResponse:
"""
Get a presigned upload URL for a media record

Parameters
----------
trace_id : str
The trace ID associated with the media record

content_type : MediaContentType

content_length : int
Expand All @@ -163,11 +162,20 @@ def get_upload_url(
The SHA-256 hash of the media record

field : str
The trace / observation field the media record is associated with. This can be one of `input`, `output`, `metadata`
The item field the media is in: `input`/`output`/`metadata` (trace) or `input`/`expectedOutput`/`metadata` (dataset item).

trace_id : typing.Optional[str]
The trace the media is associated with. Null for dataset item media uploads.

observation_id : typing.Optional[str]
The observation ID associated with the media record. If the media record is associated directly with a trace, this will be null.

dataset_id : typing.Optional[str]
The dataset the media belongs to. Null for trace/observation media uploads.

dataset_item_id : typing.Optional[str]
The dataset item the media is associated with (need not exist yet). Null for trace/observation media uploads.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand All @@ -189,20 +197,21 @@ def get_upload_url(
base_url="https://yourhost.com/path/to/api",
)
client.media.get_upload_url(
trace_id="traceId",
content_type=MediaContentType.IMAGE_PNG,
content_length=1,
sha256hash="sha256Hash",
field="field",
)
"""
_response = self._raw_client.get_upload_url(
trace_id=trace_id,
content_type=content_type,
content_length=content_length,
sha256hash=sha256hash,
field=field,
trace_id=trace_id,
observation_id=observation_id,
dataset_id=dataset_id,
dataset_item_id=dataset_item_id,
request_options=request_options,
)
return _response.data
Expand Down Expand Up @@ -349,22 +358,21 @@ async def main() -> None:
async def get_upload_url(
self,
*,
trace_id: str,
content_type: MediaContentType,
content_length: int,
sha256hash: str,
field: str,
trace_id: typing.Optional[str] = OMIT,
observation_id: typing.Optional[str] = OMIT,
dataset_id: typing.Optional[str] = OMIT,
dataset_item_id: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> GetMediaUploadUrlResponse:
"""
Get a presigned upload URL for a media record

Parameters
----------
trace_id : str
The trace ID associated with the media record

content_type : MediaContentType

content_length : int
Expand All @@ -374,11 +382,20 @@ async def get_upload_url(
The SHA-256 hash of the media record

field : str
The trace / observation field the media record is associated with. This can be one of `input`, `output`, `metadata`
The item field the media is in: `input`/`output`/`metadata` (trace) or `input`/`expectedOutput`/`metadata` (dataset item).

trace_id : typing.Optional[str]
The trace the media is associated with. Null for dataset item media uploads.

observation_id : typing.Optional[str]
The observation ID associated with the media record. If the media record is associated directly with a trace, this will be null.

dataset_id : typing.Optional[str]
The dataset the media belongs to. Null for trace/observation media uploads.

dataset_item_id : typing.Optional[str]
The dataset item the media is associated with (need not exist yet). Null for trace/observation media uploads.

request_options : typing.Optional[RequestOptions]
Request-specific configuration.

Expand All @@ -405,7 +422,6 @@ async def get_upload_url(

async def main() -> None:
await client.media.get_upload_url(
trace_id="traceId",
content_type=MediaContentType.IMAGE_PNG,
content_length=1,
sha256hash="sha256Hash",
Expand All @@ -416,12 +432,14 @@ async def main() -> None:
asyncio.run(main())
"""
_response = await self._raw_client.get_upload_url(
trace_id=trace_id,
content_type=content_type,
content_length=content_length,
sha256hash=sha256hash,
field=field,
trace_id=trace_id,
observation_id=observation_id,
dataset_id=dataset_id,
dataset_item_id=dataset_item_id,
request_options=request_options,
)
return _response.data
Loading