pixeltable 0.4.6__py3-none-any.whl → 0.4.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pixeltable might be problematic. Click here for more details.
- pixeltable/__init__.py +4 -2
- pixeltable/catalog/__init__.py +1 -1
- pixeltable/catalog/catalog.py +3 -3
- pixeltable/catalog/column.py +49 -0
- pixeltable/catalog/insertable_table.py +0 -7
- pixeltable/catalog/schema_object.py +1 -14
- pixeltable/catalog/table.py +139 -53
- pixeltable/catalog/table_version.py +30 -138
- pixeltable/catalog/view.py +2 -1
- pixeltable/dataframe.py +2 -3
- pixeltable/env.py +43 -5
- pixeltable/exec/expr_eval/expr_eval_node.py +2 -2
- pixeltable/exec/expr_eval/schedulers.py +36 -15
- pixeltable/exprs/array_slice.py +2 -2
- pixeltable/exprs/data_row.py +13 -0
- pixeltable/exprs/expr.py +9 -9
- pixeltable/exprs/function_call.py +2 -2
- pixeltable/exprs/globals.py +1 -2
- pixeltable/exprs/json_path.py +3 -3
- pixeltable/exprs/row_builder.py +14 -16
- pixeltable/exprs/string_op.py +3 -3
- pixeltable/func/query_template_function.py +2 -2
- pixeltable/func/signature.py +30 -3
- pixeltable/func/tools.py +2 -2
- pixeltable/functions/anthropic.py +75 -25
- pixeltable/functions/globals.py +2 -2
- pixeltable/functions/llama_cpp.py +9 -1
- pixeltable/functions/openai.py +74 -54
- pixeltable/functions/video.py +54 -1
- pixeltable/functions/vision.py +2 -2
- pixeltable/globals.py +74 -12
- pixeltable/io/datarows.py +3 -3
- pixeltable/io/fiftyone.py +4 -4
- pixeltable/io/globals.py +3 -3
- pixeltable/io/hf_datasets.py +4 -4
- pixeltable/io/pandas.py +6 -6
- pixeltable/io/parquet.py +3 -3
- pixeltable/io/table_data_conduit.py +2 -2
- pixeltable/io/utils.py +2 -2
- pixeltable/iterators/document.py +2 -2
- pixeltable/iterators/video.py +49 -9
- pixeltable/share/packager.py +45 -36
- pixeltable/store.py +5 -25
- pixeltable/type_system.py +5 -8
- pixeltable/utils/__init__.py +2 -2
- pixeltable/utils/arrow.py +5 -5
- pixeltable/utils/description_helper.py +3 -3
- pixeltable/utils/iceberg.py +1 -2
- {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/METADATA +70 -19
- {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/RECORD +53 -53
- {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/WHEEL +0 -0
- {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/entry_points.txt +0 -0
- {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/licenses/LICENSE +0 -0
pixeltable/store.py
CHANGED
|
@@ -4,7 +4,7 @@ import abc
|
|
|
4
4
|
import logging
|
|
5
5
|
import sys
|
|
6
6
|
import warnings
|
|
7
|
-
from typing import Any, Iterable, Iterator, Optional
|
|
7
|
+
from typing import Any, Iterable, Iterator, Optional
|
|
8
8
|
|
|
9
9
|
import more_itertools
|
|
10
10
|
import psycopg
|
|
@@ -17,7 +17,6 @@ from pixeltable.env import Env
|
|
|
17
17
|
from pixeltable.exec import ExecNode
|
|
18
18
|
from pixeltable.metadata import schema
|
|
19
19
|
from pixeltable.utils.exception_handler import run_cleanup
|
|
20
|
-
from pixeltable.utils.media_store import MediaStore
|
|
21
20
|
from pixeltable.utils.sql import log_explain, log_stmt
|
|
22
21
|
|
|
23
22
|
_logger = logging.getLogger('pixeltable')
|
|
@@ -123,21 +122,6 @@ class StoreBase:
|
|
|
123
122
|
def _storage_name(self) -> str:
|
|
124
123
|
"""Return the name of the data store table"""
|
|
125
124
|
|
|
126
|
-
def _move_tmp_media_file(self, file_url: Optional[str], col: catalog.Column) -> str:
|
|
127
|
-
src_path = MediaStore.resolve_tmp_url(file_url)
|
|
128
|
-
if src_path is None:
|
|
129
|
-
return file_url
|
|
130
|
-
assert col.tbl.id == self.tbl_version.id # Ensure the column belongs to the same table as this store
|
|
131
|
-
new_file_url = MediaStore.relocate_local_media_file(src_path, col)
|
|
132
|
-
return new_file_url
|
|
133
|
-
|
|
134
|
-
def _move_tmp_media_files(
|
|
135
|
-
self, table_row: list[Any], media_cols_by_sql_idx: dict[int, catalog.Column], v_min: int
|
|
136
|
-
) -> None:
|
|
137
|
-
"""Move tmp media files that we generated to a permanent location"""
|
|
138
|
-
for n, col in media_cols_by_sql_idx.items():
|
|
139
|
-
table_row[n] = self._move_tmp_media_file(table_row[n], col)
|
|
140
|
-
|
|
141
125
|
def count(self) -> int:
|
|
142
126
|
"""Return the number of rows visible in self.tbl_version"""
|
|
143
127
|
stmt = (
|
|
@@ -235,7 +219,6 @@ class StoreBase:
|
|
|
235
219
|
# create temp table to store output of exec_plan, with the same primary key as the store table
|
|
236
220
|
tmp_name = f'temp_{self._storage_name()}'
|
|
237
221
|
tmp_pk_cols = tuple(sql.Column(col.name, col.type, primary_key=True) for col in self.pk_columns())
|
|
238
|
-
tmp_val_col_sql_idx = len(tmp_pk_cols)
|
|
239
222
|
tmp_val_col = sql.Column(col.sa_col.name, col.sa_col.type)
|
|
240
223
|
tmp_cols = [*tmp_pk_cols, tmp_val_col]
|
|
241
224
|
# add error columns if the store column records errors
|
|
@@ -262,9 +245,7 @@ class StoreBase:
|
|
|
262
245
|
if abort_on_exc and row.has_exc():
|
|
263
246
|
exc = row.get_first_exc()
|
|
264
247
|
raise excs.Error(f'Error while evaluating computed column {col.name!r}:\n{exc}') from exc
|
|
265
|
-
table_row, num_row_exc = row_builder.
|
|
266
|
-
if col.col_type.is_media_type():
|
|
267
|
-
table_row[tmp_val_col_sql_idx] = self._move_tmp_media_file(table_row[tmp_val_col_sql_idx], col)
|
|
248
|
+
table_row, num_row_exc = row_builder.create_store_table_row(row, None, row.pk)
|
|
268
249
|
num_excs += num_row_exc
|
|
269
250
|
batch_table_rows.append(tuple(table_row))
|
|
270
251
|
|
|
@@ -317,7 +298,7 @@ class StoreBase:
|
|
|
317
298
|
progress_bar: Optional[tqdm] = None # create this only after we started executing
|
|
318
299
|
row_builder = exec_plan.row_builder
|
|
319
300
|
|
|
320
|
-
store_col_names
|
|
301
|
+
store_col_names = row_builder.store_column_names()
|
|
321
302
|
|
|
322
303
|
try:
|
|
323
304
|
table_rows: list[tuple[Any]] = []
|
|
@@ -337,7 +318,7 @@ class StoreBase:
|
|
|
337
318
|
rowid = (next(rowids),) if rowids is not None else row.pk[:-1]
|
|
338
319
|
pk = (*rowid, v_min)
|
|
339
320
|
assert len(pk) == len(self._pk_cols)
|
|
340
|
-
table_row, num_row_exc = row_builder.
|
|
321
|
+
table_row, num_row_exc = row_builder.create_store_table_row(row, cols_with_excs, pk)
|
|
341
322
|
num_excs += num_row_exc
|
|
342
323
|
|
|
343
324
|
if show_progress:
|
|
@@ -351,7 +332,6 @@ class StoreBase:
|
|
|
351
332
|
)
|
|
352
333
|
progress_bar.update(1)
|
|
353
334
|
|
|
354
|
-
self._move_tmp_media_files(table_row, media_cols_by_idx, v_min)
|
|
355
335
|
batch_table_rows.append(tuple(table_row))
|
|
356
336
|
|
|
357
337
|
table_rows.extend(batch_table_rows)
|
|
@@ -427,7 +407,7 @@ class StoreBase:
|
|
|
427
407
|
base_versions_clause = (
|
|
428
408
|
sql.true() if len(base_versions) == 0 else self.base._versions_clause(base_versions, match_on_vmin)
|
|
429
409
|
)
|
|
430
|
-
set_clause: dict[sql.Column,
|
|
410
|
+
set_clause: dict[sql.Column, int | sql.Column] = {self.v_max_col: current_version}
|
|
431
411
|
for index_info in self.tbl_version.get().idxs_by_name.values():
|
|
432
412
|
# copy value column to undo column
|
|
433
413
|
set_clause[index_info.undo_col.sa_col] = index_info.val_col.sa_col
|
pixeltable/type_system.py
CHANGED
|
@@ -292,7 +292,7 @@ class ColumnType:
|
|
|
292
292
|
|
|
293
293
|
@classmethod
|
|
294
294
|
def from_python_type(
|
|
295
|
-
cls, t:
|
|
295
|
+
cls, t: type | _GenericAlias, nullable_default: bool = False, allow_builtin_types: bool = True
|
|
296
296
|
) -> Optional[ColumnType]:
|
|
297
297
|
"""
|
|
298
298
|
Convert a Python type into a Pixeltable `ColumnType` instance.
|
|
@@ -311,7 +311,7 @@ class ColumnType:
|
|
|
311
311
|
if origin in (typing.Union, types.UnionType):
|
|
312
312
|
# Check if `t` has the form Optional[T].
|
|
313
313
|
if len(type_args) == 2 and type(None) in type_args:
|
|
314
|
-
# `t` is a type of the form Optional[T] (equivalently,
|
|
314
|
+
# `t` is a type of the form Optional[T] (equivalently, T | None or None | T).
|
|
315
315
|
# We treat it as the underlying type but with nullable=True.
|
|
316
316
|
underlying_py_type = type_args[0] if type_args[1] is type(None) else type_args[1]
|
|
317
317
|
underlying = cls.from_python_type(underlying_py_type, allow_builtin_types=allow_builtin_types)
|
|
@@ -361,10 +361,7 @@ class ColumnType:
|
|
|
361
361
|
|
|
362
362
|
@classmethod
|
|
363
363
|
def normalize_type(
|
|
364
|
-
cls,
|
|
365
|
-
t: Union[ColumnType, type, _AnnotatedAlias],
|
|
366
|
-
nullable_default: bool = False,
|
|
367
|
-
allow_builtin_types: bool = True,
|
|
364
|
+
cls, t: ColumnType | type | _AnnotatedAlias, nullable_default: bool = False, allow_builtin_types: bool = True
|
|
368
365
|
) -> ColumnType:
|
|
369
366
|
"""
|
|
370
367
|
Convert any type recognizable by Pixeltable to its corresponding ColumnType.
|
|
@@ -389,7 +386,7 @@ class ColumnType:
|
|
|
389
386
|
]
|
|
390
387
|
|
|
391
388
|
@classmethod
|
|
392
|
-
def __raise_exc_for_invalid_type(cls, t:
|
|
389
|
+
def __raise_exc_for_invalid_type(cls, t: type | _AnnotatedAlias) -> None:
|
|
393
390
|
for builtin_type, suggestion in cls.__TYPE_SUGGESTIONS:
|
|
394
391
|
if t is builtin_type or (isinstance(t, type) and issubclass(t, builtin_type)):
|
|
395
392
|
name = t.__name__ if t.__module__ == 'builtins' else f'{t.__module__}.{t.__name__}'
|
|
@@ -405,7 +402,7 @@ class ColumnType:
|
|
|
405
402
|
return cls.from_python_type(py_type) if py_type is not None else None
|
|
406
403
|
|
|
407
404
|
@classmethod
|
|
408
|
-
def __json_schema_to_py_type(cls, schema: dict[str, Any]) ->
|
|
405
|
+
def __json_schema_to_py_type(cls, schema: dict[str, Any]) -> type | _GenericAlias | None:
|
|
409
406
|
if 'type' in schema:
|
|
410
407
|
if schema['type'] == 'null':
|
|
411
408
|
return type(None)
|
pixeltable/utils/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@ import hashlib
|
|
|
2
2
|
import urllib.parse
|
|
3
3
|
import urllib.request
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Optional
|
|
5
|
+
from typing import Optional
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def print_perf_counter_delta(delta: float) -> str:
|
|
@@ -24,7 +24,7 @@ def print_perf_counter_delta(delta: float) -> str:
|
|
|
24
24
|
return f'{delta:.2f} s'
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
def sha256sum(path:
|
|
27
|
+
def sha256sum(path: Path | str) -> str:
|
|
28
28
|
"""
|
|
29
29
|
Compute the SHA256 hash of a file.
|
|
30
30
|
"""
|
pixeltable/utils/arrow.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import datetime
|
|
2
|
-
from typing import Any, Iterator, Optional
|
|
2
|
+
from typing import Any, Iterator, Optional
|
|
3
3
|
|
|
4
4
|
import numpy as np
|
|
5
5
|
import pyarrow as pa
|
|
@@ -88,11 +88,11 @@ def to_arrow_schema(pixeltable_schema: dict[str, Any]) -> pa.Schema:
|
|
|
88
88
|
return pa.schema((name, to_arrow_type(typ)) for name, typ in pixeltable_schema.items()) # type: ignore[misc]
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
def to_pydict(batch:
|
|
91
|
+
def to_pydict(batch: pa.Table | pa.RecordBatch) -> dict[str, list | np.ndarray]:
|
|
92
92
|
"""Convert a RecordBatch to a dictionary of lists, unlike pa.lib.RecordBatch.to_pydict,
|
|
93
93
|
this function will not convert numpy arrays to lists, and will preserve the original numpy dtype.
|
|
94
94
|
"""
|
|
95
|
-
out: dict[str,
|
|
95
|
+
out: dict[str, list | np.ndarray] = {}
|
|
96
96
|
for k, name in enumerate(batch.schema.names):
|
|
97
97
|
col = batch.column(k)
|
|
98
98
|
if isinstance(col.type, pa.FixedShapeTensorType):
|
|
@@ -105,7 +105,7 @@ def to_pydict(batch: Union[pa.Table, pa.RecordBatch]) -> dict[str, Union[list, n
|
|
|
105
105
|
return out
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
def iter_tuples(batch:
|
|
108
|
+
def iter_tuples(batch: pa.Table | pa.RecordBatch) -> Iterator[dict[str, Any]]:
|
|
109
109
|
"""Convert a RecordBatch to an iterator of dictionaries. also works with pa.Table and pa.RowGroup"""
|
|
110
110
|
pydict = to_pydict(batch)
|
|
111
111
|
assert len(pydict) > 0, 'empty record batch'
|
|
@@ -145,7 +145,7 @@ def _ar_val_to_pxt_val(val: Any, pxt_type: ts.ColumnType) -> Any:
|
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
def iter_tuples2(
|
|
148
|
-
batch:
|
|
148
|
+
batch: pa.Table | pa.RecordBatch, col_mapping: Optional[dict[str, str]], schema: dict[str, ts.ColumnType]
|
|
149
149
|
) -> Iterator[dict[str, Any]]:
|
|
150
150
|
"""Convert a RecordBatch to an iterator of dictionaries. also works with pa.Table and pa.RowGroup"""
|
|
151
151
|
pydict = to_pydict(batch)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import dataclasses
|
|
2
|
-
from typing import Optional
|
|
2
|
+
from typing import Optional
|
|
3
3
|
|
|
4
4
|
import pandas as pd
|
|
5
5
|
from pandas.io.formats.style import Styler
|
|
@@ -7,7 +7,7 @@ from pandas.io.formats.style import Styler
|
|
|
7
7
|
|
|
8
8
|
@dataclasses.dataclass
|
|
9
9
|
class _Descriptor:
|
|
10
|
-
body:
|
|
10
|
+
body: str | pd.DataFrame
|
|
11
11
|
# The remaining fields only affect the behavior if `body` is a pd.DataFrame.
|
|
12
12
|
show_index: bool
|
|
13
13
|
show_header: bool
|
|
@@ -33,7 +33,7 @@ class DescriptionHelper:
|
|
|
33
33
|
|
|
34
34
|
def append(
|
|
35
35
|
self,
|
|
36
|
-
descriptor:
|
|
36
|
+
descriptor: str | pd.DataFrame,
|
|
37
37
|
show_index: bool = False,
|
|
38
38
|
show_header: bool = True,
|
|
39
39
|
styler: Optional[Styler] = None,
|
pixeltable/utils/iceberg.py
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
|
-
from typing import Union
|
|
3
2
|
|
|
4
3
|
from pyiceberg.catalog.sql import SqlCatalog
|
|
5
4
|
|
|
6
5
|
|
|
7
|
-
def sqlite_catalog(warehouse_path:
|
|
6
|
+
def sqlite_catalog(warehouse_path: str | Path, name: str = 'pixeltable') -> SqlCatalog:
|
|
8
7
|
"""
|
|
9
8
|
Instantiate a sqlite Iceberg catalog at the specified path. If no catalog exists, one will be created.
|
|
10
9
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pixeltable
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.7
|
|
4
4
|
Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
|
|
5
5
|
Project-URL: homepage, https://pixeltable.com/
|
|
6
6
|
Project-URL: repository, https://github.com/pixeltable/pixeltable
|
|
@@ -62,6 +62,8 @@ Description-Content-Type: text/markdown
|
|
|
62
62
|
|
|
63
63
|
<h2>Declarative Data Infrastructure for Multimodal AI Apps</h2>
|
|
64
64
|
|
|
65
|
+
Pixeltable is the only Python library providing incremental storage, transformation, indexing, and orchestration of multimodal data.
|
|
66
|
+
|
|
65
67
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
66
68
|

|
|
67
69
|

|
|
@@ -82,31 +84,68 @@ Description-Content-Type: text/markdown
|
|
|
82
84
|
|
|
83
85
|
---
|
|
84
86
|
|
|
85
|
-
|
|
87
|
+
## 💾 Installation
|
|
86
88
|
|
|
87
|
-
|
|
89
|
+
```python
|
|
90
|
+
pip install pixeltable
|
|
91
|
+
```
|
|
88
92
|
|
|
89
|
-
|
|
90
|
-
* ETL pipelines for data loading and transformation.
|
|
91
|
-
* Vector databases for semantic search.
|
|
92
|
-
* Feature stores for ML models.
|
|
93
|
-
* Orchestrators for scheduling.
|
|
94
|
-
* Model serving infrastructure for inference.
|
|
95
|
-
* Separate systems for parallelization, caching, versioning, and lineage tracking.
|
|
93
|
+
**Pixeltable unifies multimodal data storage, retrieval and orchestration.** It stores metadata and computed results persistently, typically in a `.pixeltable` directory in your workspace. See [configuration](https://docs.pixeltable.com/docs/overview/configuration) options for your setup. All media (videos, images, audio) resides in ext. files, and Pixeltable stores references to those. Files can be local/remote (e.g. S3). For the latter, Pixeltable caches the [files locally on access](https://github.com/pixeltable/pixeltable/blob/main/docs/notebooks/feature-guides/working-with-external-files.ipynb).
|
|
96
94
|
|
|
97
|
-
|
|
95
|
+
https://github.com/user-attachments/assets/b50fd6df-5169-4881-9dbe-1b6e5d06cede
|
|
98
96
|
|
|
99
|
-
##
|
|
97
|
+
## Quick Start
|
|
98
|
+
|
|
99
|
+
With Pixeltable, you define your *entire* data processing and AI workflow declaratively using **[computed columns](https://docs.pixeltable.com/docs/datastore/computed-columns)** on **[tables](https://docs.pixeltable.com/docs/datastore/tables-and-operations)**.
|
|
100
100
|
|
|
101
101
|
```python
|
|
102
|
-
pip install pixeltable
|
|
103
|
-
```
|
|
104
102
|
|
|
105
|
-
|
|
103
|
+
# Installation
|
|
104
|
+
pip install -qU torch transformers openai pixeltable
|
|
106
105
|
|
|
107
|
-
|
|
106
|
+
# Basic setup
|
|
107
|
+
import pixeltable as pxt
|
|
108
|
+
|
|
109
|
+
# Table with multimodal column types (Image, Video, Audio, Document)
|
|
110
|
+
t = pxt.create_table('images', {'input_image': pxt.Image})
|
|
111
|
+
|
|
112
|
+
# Computed columns: define transformation logic once, runs on all data
|
|
113
|
+
from pixeltable.functions import huggingface
|
|
108
114
|
|
|
109
|
-
|
|
115
|
+
# Object detection with automatic model management
|
|
116
|
+
t.add_computed_column(
|
|
117
|
+
detections=huggingface.detr_for_object_detection(
|
|
118
|
+
t.input_image,
|
|
119
|
+
model_id='facebook/detr-resnet-50'
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
# Extract specific fields from detection results
|
|
124
|
+
t.add_computed_column(detections_text=t.detections.label_text)
|
|
125
|
+
|
|
126
|
+
# OpenAI Vision API integration with built-in rate limiting and async managemennt
|
|
127
|
+
from pixeltable.functions import openai
|
|
128
|
+
|
|
129
|
+
t.add_computed_column(
|
|
130
|
+
vision=openai.vision(
|
|
131
|
+
prompt="Describe what's in this image.",
|
|
132
|
+
image=t.input_image,
|
|
133
|
+
model='gpt-4o-mini'
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
# Insert data - automatically triggers computation of all computed columns
|
|
138
|
+
t.insert(input_image='https://raw.github.com/pixeltable/pixeltable/release/docs/resources/images/000000000025.jpg')
|
|
139
|
+
|
|
140
|
+
# Query - All data, metadata, and computed results are persistently stored
|
|
141
|
+
results = t.select(
|
|
142
|
+
t.input_image,
|
|
143
|
+
t.detections_text,
|
|
144
|
+
t.vision
|
|
145
|
+
).collect()
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## ✨ What Happened?
|
|
110
149
|
|
|
111
150
|
* **Data Ingestion & Storage:** References [files](https://docs.pixeltable.com/docs/datastore/bringing-data) (images, videos, audio, docs) in place, handles structured data.
|
|
112
151
|
* **Transformation & Processing:** Applies *any* Python function ([UDFs](https://docs.pixeltable.com/docs/datastore/custom-functions)) or built-in operations ([chunking, frame extraction](https://docs.pixeltable.com/docs/datastore/iterators)) automatically.
|
|
@@ -118,7 +157,7 @@ With Pixeltable, you define your *entire* data processing and AI workflow declar
|
|
|
118
157
|
**Focus on your application logic, not the infrastructure.**
|
|
119
158
|
|
|
120
159
|
|
|
121
|
-
##
|
|
160
|
+
## ⚖️ Key Principles
|
|
122
161
|
|
|
123
162
|
* **[Unified Multimodal Interface:](https://docs.pixeltable.com/docs/datastore/tables-and-operations)** `pxt.Image`, `pxt.Video`, `pxt.Audio`, `pxt.Document`, etc. – manage diverse data consistently.
|
|
124
163
|
```python
|
|
@@ -416,12 +455,24 @@ Explore Pixeltable's capabilities interactively:
|
|
|
416
455
|
| Object Detection | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/object-detection-in-videos.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Image/Text Search | <a target="_blank" href="https://github.com/pixeltable/pixeltable/tree/main/docs/sample-apps/text-and-image-similarity-search-nextjs-fastapi"> <img src="https://img.shields.io/badge/🖥️%20App-black.svg" alt="GitHub App"/> |
|
|
417
456
|
| Audio Transcription | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> | Discord Bot | <a target="_blank" href="https://github.com/pixeltable/pixeltable/blob/main/docs/sample-apps/context-aware-discord-bot"> <img src="https://img.shields.io/badge/%F0%9F%92%AC%20Bot-%235865F2.svg" alt="GitHub App"/></a> |
|
|
418
457
|
|
|
458
|
+
## 🚨 Maintaining Production-Ready Multimodal AI Apps is Still Too Hard
|
|
459
|
+
|
|
460
|
+
Building robust AI applications, especially [multimodal](https://docs.pixeltable.com/docs/datastore/bringing-data) ones, requires stitching together numerous tools:
|
|
461
|
+
* ETL pipelines for data loading and transformation.
|
|
462
|
+
* Vector databases for semantic search.
|
|
463
|
+
* Feature stores for ML models.
|
|
464
|
+
* Orchestrators for scheduling.
|
|
465
|
+
* Model serving infrastructure for inference.
|
|
466
|
+
* Separate systems for parallelization, caching, versioning, and lineage tracking.
|
|
467
|
+
|
|
468
|
+
This complex "data plumbing" slows down development, increases costs, and makes applications brittle and hard to reproduce.
|
|
469
|
+
|
|
419
470
|
## 🔮 Roadmap (2025)
|
|
420
471
|
|
|
421
472
|
### Cloud Infrastructure and Deployment
|
|
422
473
|
We're working on a hosted Pixeltable service that will:
|
|
423
474
|
|
|
424
|
-
- Enable Multimodal Data Sharing of Pixeltable Tables and Views
|
|
475
|
+
- Enable Multimodal Data Sharing of Pixeltable Tables and Views | [Waitlist](https://www.pixeltable.com/waitlist)
|
|
425
476
|
- Provide a persistent cloud instance
|
|
426
477
|
- Turn Pixeltable workflows (Tables, Queries, UDFs) into API endpoints/[MCP Servers](https://github.com/pixeltable/pixeltable-mcp-server)
|
|
427
478
|
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
pixeltable/__init__.py,sha256
|
|
1
|
+
pixeltable/__init__.py,sha256=fAeDmkHIxf7jbpIAWhygnBy5iqTeH2blX9L1yNqLFFY,1567
|
|
2
2
|
pixeltable/__version__.py,sha256=LnMIuAxx6nAQDMev_jnZyUdgsaiE3F8lulfXQBRl9qQ,112
|
|
3
3
|
pixeltable/config.py,sha256=NbiB6qoE8ujjEHpRbzlNDUMTi6EFvJ0sGHGxdwkWkgc,7472
|
|
4
|
-
pixeltable/dataframe.py,sha256=
|
|
5
|
-
pixeltable/env.py,sha256=
|
|
4
|
+
pixeltable/dataframe.py,sha256=afWRvVjlWzwqUkrBAgTROIZSyDhdSkfI-WspEl2cOUg,63046
|
|
5
|
+
pixeltable/env.py,sha256=ENOkan4XcDWQKrnLfWlam-ReWItYkLatT6IIX_Q1CfM,39919
|
|
6
6
|
pixeltable/exceptions.py,sha256=Gm8d3TL2iiv6Pj2DLd29wp_j41qNBhxXL9iTQnL4Nk4,1116
|
|
7
|
-
pixeltable/globals.py,sha256=
|
|
7
|
+
pixeltable/globals.py,sha256=GpufZW_pm4dxg6kXqVbE__jEupYTvphFzcoPwujgndk,38543
|
|
8
8
|
pixeltable/plan.py,sha256=PXqq7aLQ5wRC-4RkRlAF6KEZFArA6g5RVLYamxNu6FY,48984
|
|
9
9
|
pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
pixeltable/store.py,sha256=
|
|
11
|
-
pixeltable/type_system.py,sha256=
|
|
12
|
-
pixeltable/catalog/__init__.py,sha256=
|
|
13
|
-
pixeltable/catalog/catalog.py,sha256=
|
|
14
|
-
pixeltable/catalog/column.py,sha256=
|
|
10
|
+
pixeltable/store.py,sha256=CneWUmgN-EwaPYLcizlAxONC7WYwMr8SNpSFeNBBmOA,22885
|
|
11
|
+
pixeltable/type_system.py,sha256=CvePMwTSr8ygc0wnYa-etgoXQLvzMyjNDLIC8TmIXa4,55294
|
|
12
|
+
pixeltable/catalog/__init__.py,sha256=zw6hiyAIjMBxCExtsr7G51ul2XQ9fTQQKcs45rIy7xA,682
|
|
13
|
+
pixeltable/catalog/catalog.py,sha256=ZD3XXJaWZO9o6_aDoq6P2plAH_0x8do3JiMQiopAtLo,93967
|
|
14
|
+
pixeltable/catalog/column.py,sha256=MXa5o3ku94T8ZFEL7wnAvqvlk65fOmmHPqIvrUVf3uo,13514
|
|
15
15
|
pixeltable/catalog/dir.py,sha256=VYTscPlKR6XhupPTXlJ8txAHxS5GSpPJ3LIleDJagVQ,2047
|
|
16
16
|
pixeltable/catalog/globals.py,sha256=uMIDsbeDzFxZbcgKDTOiT5plC1gAKgz1oxxdh1odIPw,2648
|
|
17
|
-
pixeltable/catalog/insertable_table.py,sha256=
|
|
17
|
+
pixeltable/catalog/insertable_table.py,sha256=PDjUhsiVKPT5utHi9ETCEnJWhQSCLBzF_1ITDIIvFRI,9292
|
|
18
18
|
pixeltable/catalog/named_function.py,sha256=vZ-j7P4HugWh9OmUzBMwyRYvO3tQn9jWyJz_1stPavU,1210
|
|
19
19
|
pixeltable/catalog/path.py,sha256=O3FfxrvyX2crijBhp_2k4-3mG3BFxwba-tlPB74QtJQ,3780
|
|
20
|
-
pixeltable/catalog/schema_object.py,sha256=
|
|
21
|
-
pixeltable/catalog/table.py,sha256=
|
|
22
|
-
pixeltable/catalog/table_version.py,sha256=
|
|
20
|
+
pixeltable/catalog/schema_object.py,sha256=rQ6-3rzqnOHyEEHi97kai2S7BO3D9AkH7rirnfbGc14,1785
|
|
21
|
+
pixeltable/catalog/table.py,sha256=stZuISgW0sQwN5TJB_EOh61i_s_WV2xD9ujScCX2dFM,79644
|
|
22
|
+
pixeltable/catalog/table_version.py,sha256=V8g87XEOapUKT4sIQulAiWFra95hsQFVuxhRkkaFlzs,64760
|
|
23
23
|
pixeltable/catalog/table_version_handle.py,sha256=FTPRqcGY-h-POcWyZbd9b8P2D5zIw5OSUvwF_dbyCGo,3608
|
|
24
24
|
pixeltable/catalog/table_version_path.py,sha256=TcMG-R5b0O72HCvk0Qn8kGpZnfIsYhawOP7RjP1Sjb4,9815
|
|
25
25
|
pixeltable/catalog/tbl_ops.py,sha256=Vdcz4Nzvdw09zcQaCEaOr9Uufk2rQHgG0vBvMbQp9R8,1145
|
|
26
26
|
pixeltable/catalog/update_status.py,sha256=tF3KkDc6kvEQ7Tg3VMj-n774uKi1iLla61wLyeuwDRs,6888
|
|
27
|
-
pixeltable/catalog/view.py,sha256=
|
|
27
|
+
pixeltable/catalog/view.py,sha256=VSBy_8eO76X1ZFtT8T6syjksb-gtcNA-XPMGndRdBy0,15179
|
|
28
28
|
pixeltable/exec/__init__.py,sha256=hQvj4ra4ubxu94qyuCBTHKsuYGzundkTTluOTIb5Bx8,524
|
|
29
29
|
pixeltable/exec/aggregation_node.py,sha256=2GGg0WraYYUZxUK4CURYKyCeAg-ojRHkZEAAo1Z-0vE,4490
|
|
30
30
|
pixeltable/exec/cache_prefetch_node.py,sha256=rAGCSR8nJ_LkdYhyEUqVZen85xO_ikOFu_SqYOpR2Rw,11865
|
|
@@ -37,36 +37,36 @@ pixeltable/exec/row_update_node.py,sha256=zU0eSyn81-vRrjAMOadRqU8luTshnPUtIbS7np
|
|
|
37
37
|
pixeltable/exec/sql_node.py,sha256=EHZNvbkzECJUgCQtqFjC1yGr6PkSYZXM3wPlAGcGuAI,27436
|
|
38
38
|
pixeltable/exec/expr_eval/__init__.py,sha256=sQThSEByK_DLfB-_-18RFhpARx49cSXYEkpCDyi0vQI,61
|
|
39
39
|
pixeltable/exec/expr_eval/evaluators.py,sha256=-6s_y29Wh8p35SVKkXtnA0NkzcHVw1Z8PgHGiFrMsqs,17135
|
|
40
|
-
pixeltable/exec/expr_eval/expr_eval_node.py,sha256=
|
|
40
|
+
pixeltable/exec/expr_eval/expr_eval_node.py,sha256=JIbyo61yTr4RUMyXbTFkMb88h4JWsdRjieBy9VikWTE,18919
|
|
41
41
|
pixeltable/exec/expr_eval/globals.py,sha256=fFrj2O53TgHDfVF8dgnyn1fPLi4ZHQuylewf5aHMwYk,7752
|
|
42
42
|
pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
|
|
43
|
-
pixeltable/exec/expr_eval/schedulers.py,sha256=
|
|
43
|
+
pixeltable/exec/expr_eval/schedulers.py,sha256=d48syzZ3A5zLQfjkjmLhmKvYzVEb-o_LSBKpWlMXRfE,23561
|
|
44
44
|
pixeltable/exprs/__init__.py,sha256=AxSMjKNavCT9F6vBaNR-nwX2iupAI5hbMb5hEj65Tfk,1096
|
|
45
45
|
pixeltable/exprs/arithmetic_expr.py,sha256=sZPao0qdFWbrDx0eiAVxw1wGHJXZ5ZoCpQaScysBldE,7333
|
|
46
|
-
pixeltable/exprs/array_slice.py,sha256=
|
|
46
|
+
pixeltable/exprs/array_slice.py,sha256=C8O0cmGHdc-iVe2FFdW_2jRVR4Gwurzeot6ESEk6RTA,2167
|
|
47
47
|
pixeltable/exprs/column_property_ref.py,sha256=rq8VD34fZwAZuN9wIqQEwVay7LTPBKvXXdZPknOJM6M,4422
|
|
48
48
|
pixeltable/exprs/column_ref.py,sha256=MH83bYsef5UC4vWU71PE-lPiVd8hVw4tT6sjdCCvWNw,15473
|
|
49
49
|
pixeltable/exprs/comparison.py,sha256=lgaRx000ZaNH10A4hrtsi5XoZKE-CNEONGMi7jxJfcM,5133
|
|
50
50
|
pixeltable/exprs/compound_predicate.py,sha256=vJVRVueAmaKnjiHCLWyh8wHgktzzK0DVqbOIQJgTjF8,3801
|
|
51
|
-
pixeltable/exprs/data_row.py,sha256=
|
|
52
|
-
pixeltable/exprs/expr.py,sha256=
|
|
51
|
+
pixeltable/exprs/data_row.py,sha256=hJJV9VYCJoBHb-8QwKwPXLvAzTciJbVWeQgGHgukjhU,12401
|
|
52
|
+
pixeltable/exprs/expr.py,sha256=T558PJBeVaHCGgv_TBDUIn-fOZJtSMkz26jGUTpvCVY,35961
|
|
53
53
|
pixeltable/exprs/expr_dict.py,sha256=2ZeZ0eACx3VrRNEOjipuT5WxOIzjXQ_DSip8NTH0KRo,1584
|
|
54
54
|
pixeltable/exprs/expr_set.py,sha256=OlRTbHAAYH2fOEs1HE-8DIu7Z247xVfoT_9Y58GZoOQ,2559
|
|
55
|
-
pixeltable/exprs/function_call.py,sha256=
|
|
56
|
-
pixeltable/exprs/globals.py,sha256=
|
|
55
|
+
pixeltable/exprs/function_call.py,sha256=1bHnXp6qPmBwLMdS3DX6ir1XAH8hILr6O0dE4_OoNNU,21980
|
|
56
|
+
pixeltable/exprs/globals.py,sha256=33fq5Ec15z_SkIqz9ILICx18wuGAazpFDUkc_Ppl03c,2288
|
|
57
57
|
pixeltable/exprs/in_predicate.py,sha256=u98JmBX9XsglKe5uCy1NUMnyi3wioBri_tue2vI9_sk,3799
|
|
58
58
|
pixeltable/exprs/inline_expr.py,sha256=XYVKKXZN9BtHN5qlvZna-mgdOlot6WcmPu5usRBYei0,7972
|
|
59
59
|
pixeltable/exprs/is_null.py,sha256=NfA_485hfT69pWyY6u8BhykDUkz5k91AH93azGu6lCg,1087
|
|
60
60
|
pixeltable/exprs/json_mapper.py,sha256=bJSB39sZgpN9KS0RReDnUhTCwg-4Y4cgXXaFNy3o3wU,7035
|
|
61
|
-
pixeltable/exprs/json_path.py,sha256=
|
|
61
|
+
pixeltable/exprs/json_path.py,sha256=XgVhxeJEa9a48Dg2FgzE0CH4N1Qk2ZCaTJC9UOui3lo,7145
|
|
62
62
|
pixeltable/exprs/literal.py,sha256=OCJL_pw_WKqx3bXMEwL6yNaKVAKDtGRzSZUFwucRxZI,4860
|
|
63
63
|
pixeltable/exprs/method_ref.py,sha256=NNhJTGo7luZLh8EJdFIZAax9LiiqqDCEK1AwPmHip0w,2642
|
|
64
64
|
pixeltable/exprs/object_ref.py,sha256=idYFcT27jv0BjtJT3paL37xDrZZc35_3eCJyQOIqdZU,1999
|
|
65
|
-
pixeltable/exprs/row_builder.py,sha256=
|
|
65
|
+
pixeltable/exprs/row_builder.py,sha256=m37FpMROIr0guWjLlY9WM0ugl0dVfcZr_FGKRPesJBE,22986
|
|
66
66
|
pixeltable/exprs/rowid_ref.py,sha256=8MvQs3Uu01Gz__WXw9BCJv0CHrSaFDuQtU7rUr1AWEk,5008
|
|
67
67
|
pixeltable/exprs/similarity_expr.py,sha256=i0UUnMSKKGXd3Uksu6FU2NvkfG0qzfzfi-GPy-LdutM,3688
|
|
68
68
|
pixeltable/exprs/sql_element_cache.py,sha256=c7Q6vFK4xnf9vmcRYnXiAcwPBBwmw0dolftM4BwDO8c,1359
|
|
69
|
-
pixeltable/exprs/string_op.py,sha256=
|
|
69
|
+
pixeltable/exprs/string_op.py,sha256=PGWRH1yUaqj7xszdumIBOTHzVkXE0k831jXxIeFPDog,4131
|
|
70
70
|
pixeltable/exprs/type_cast.py,sha256=_nDzTxg5kXVGLewI0FrH2zmwJzgptdxYd5Jvuyig0UI,2322
|
|
71
71
|
pixeltable/exprs/variable.py,sha256=UwWwaNECbtwyC8v0g8iqCa3a6mO8z9lK7ta5NrlCwvs,1493
|
|
72
72
|
pixeltable/ext/__init__.py,sha256=UgDXWzGWiQIrwOuEvWTePLBcR2kecllPAE7gp-42Awg,457
|
|
@@ -81,58 +81,58 @@ pixeltable/func/function.py,sha256=3nSXRdGFGi471x7_TMVdSgXs1SQuLv4HaUJA7NLhv_M,2
|
|
|
81
81
|
pixeltable/func/function_registry.py,sha256=7AQ1bdF2DJbTRn9xx6s5cC_VHtCBXGt_GyJJEjJHcMw,12308
|
|
82
82
|
pixeltable/func/globals.py,sha256=5Wo4GPxYgHRRk5nvV0h_lAthKSalxKvj5n1p-uMPR0U,1501
|
|
83
83
|
pixeltable/func/mcp.py,sha256=P9M2w8cm7ad-XmAcf2ZThfWmD8W46De1spwX98bZL4Y,2861
|
|
84
|
-
pixeltable/func/query_template_function.py,sha256=
|
|
85
|
-
pixeltable/func/signature.py,sha256=
|
|
86
|
-
pixeltable/func/tools.py,sha256=
|
|
84
|
+
pixeltable/func/query_template_function.py,sha256=aX6GgANSdDTQwrObEV-B_la_oVRVkyesCM9KMc4h1kg,8027
|
|
85
|
+
pixeltable/func/signature.py,sha256=LdHbdim14Zu7Xt1pMhOCzl6Xn2fq5CQQpwSXmu28umw,14988
|
|
86
|
+
pixeltable/func/tools.py,sha256=2_M_u0Jiy5-uToZziB4O54aTuJeaytPmh71q3I2ydNw,6062
|
|
87
87
|
pixeltable/func/udf.py,sha256=6tKpMt37t3BmXwRyA5fFAd6OM4D5EPEd2KuAr7DQhr0,13231
|
|
88
88
|
pixeltable/functions/__init__.py,sha256=Akk6Nk-rpz2D_V4kJTfyP56xnNbCz3EtxVAuwLoiysA,588
|
|
89
|
-
pixeltable/functions/anthropic.py,sha256=
|
|
89
|
+
pixeltable/functions/anthropic.py,sha256=GsXEsdAoQ3P_NDRDcAIxa26phftulPBCK64nYrzlRg4,10567
|
|
90
90
|
pixeltable/functions/audio.py,sha256=6_tUhSZgxhOQQJemvZYNEoKNjWdr3SgJsvLkKCSmtfw,1633
|
|
91
91
|
pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfxms,4217
|
|
92
92
|
pixeltable/functions/date.py,sha256=qs1svJ9FVod3OTa5hQNKIuashb6tVhW_2EAEXYGQX74,5308
|
|
93
93
|
pixeltable/functions/deepseek.py,sha256=IAo2e_DhkM0A5NrskxuPQUGYzIYAl4do_mdO1Qc3PeY,3338
|
|
94
94
|
pixeltable/functions/fireworks.py,sha256=q7eWlYfiWbA0d9r3CB_NAe1fw3q-Z7qsw2gyGJNgWLQ,4786
|
|
95
95
|
pixeltable/functions/gemini.py,sha256=Yede8DzWEa4eboW7SNTOooBabriUlsnQMUdG5jCWRQo,8320
|
|
96
|
-
pixeltable/functions/globals.py,sha256=
|
|
96
|
+
pixeltable/functions/globals.py,sha256=OyPJUJ4S6VWyzxstxIzk3xzYBGIEMwgk1RmSTWTZzdI,5106
|
|
97
97
|
pixeltable/functions/groq.py,sha256=FpR_LJpfZfzyhEvoBMMbQpQ-VQSRzBsS9U21qaINwww,3593
|
|
98
98
|
pixeltable/functions/huggingface.py,sha256=cJyf86qMcvivkGGNduNHAvh_idI-e4wJm0Zje1KJ2vQ,20611
|
|
99
99
|
pixeltable/functions/image.py,sha256=IKXljMma-uU88efptC3F4aywau7DYcD-Nqd3YpmRNRw,13971
|
|
100
100
|
pixeltable/functions/json.py,sha256=d7-AvwytUQtQYF_JnWJkptT_Yq0NgMpWfVk-m3U6qTY,807
|
|
101
|
-
pixeltable/functions/llama_cpp.py,sha256=
|
|
101
|
+
pixeltable/functions/llama_cpp.py,sha256=uop0K6oNxCnQXbdiL-_6PVsusc1xqCtwTipAyIbQ-Uc,4119
|
|
102
102
|
pixeltable/functions/math.py,sha256=jhlD7v4eY-6KdmsFEBqb-W_vspGahOosUvFahWFzxrU,4969
|
|
103
103
|
pixeltable/functions/mistralai.py,sha256=Fk52mfWUfxVy-yCxhH6wrGS7nLLSiOOrWxbTkkiQ-O8,5542
|
|
104
104
|
pixeltable/functions/ollama.py,sha256=4-6h9Foq_7Ut7JtEHGkeg1KbuKaFywSuMrKiw0xAyCA,4231
|
|
105
|
-
pixeltable/functions/openai.py,sha256=
|
|
105
|
+
pixeltable/functions/openai.py,sha256=VXWiz1Zzj2SBboY8MXpSIRFvB8C3s-Q76yyDUDQcceQ,28729
|
|
106
106
|
pixeltable/functions/replicate.py,sha256=sPvRGr0j0kCDc6Vz3mPUioFflApijukvZWJJUO2bqIQ,2429
|
|
107
107
|
pixeltable/functions/string.py,sha256=LdBNOna5PUSPmM5VlJ_qhmwzyFhumW0k6Dvx2rXSZtc,25356
|
|
108
108
|
pixeltable/functions/timestamp.py,sha256=3GVCVIWdry96Qk5XXuvbJ58Tp30iY5snBibzl2CHjQc,9143
|
|
109
109
|
pixeltable/functions/together.py,sha256=A8J19BXywyWQ6a2_n05-8uIG5jquOBGqPmW3mb-NrIc,8842
|
|
110
110
|
pixeltable/functions/util.py,sha256=uQNkyBSkTVMe1wbUI2Q0nz-mM3qPVTF86yK8c9OFIcE,954
|
|
111
|
-
pixeltable/functions/video.py,sha256=
|
|
112
|
-
pixeltable/functions/vision.py,sha256=
|
|
111
|
+
pixeltable/functions/video.py,sha256=eFaJmtuoivsCj9EkU8GfpbFgWRYO3qsu42ekms4etHQ,10574
|
|
112
|
+
pixeltable/functions/vision.py,sha256=17h9bOm3NJyQzFMBwXDHMqnkcuCspyQJgHdBOXV1Ip8,15380
|
|
113
113
|
pixeltable/functions/whisper.py,sha256=c9E6trhc2UcShVaGaEBCUEpArke1ql3MV5We0qSgmuU,2960
|
|
114
114
|
pixeltable/index/__init__.py,sha256=97aFuxiP_oz1ldn5iq8IWApkOV8XG6ZIBW5-9rkS0vM,122
|
|
115
115
|
pixeltable/index/base.py,sha256=200s7v3Zy810bRlbSAYzxxaEjVssl6r8esTHiSvWRwQ,1704
|
|
116
116
|
pixeltable/index/btree.py,sha256=8B06D67ay0DFUtEBC5q4bLjxMq7ILpKyyoLAiSaamzA,2503
|
|
117
117
|
pixeltable/index/embedding_index.py,sha256=B_k_3UJmSv7t2ljUg8GC_D4t1jc03PVsTAvxqiTmHBA,11754
|
|
118
118
|
pixeltable/io/__init__.py,sha256=chVGh3ygtZwSY6g_skIyCsjxwzo2847jDq9YGObAY98,608
|
|
119
|
-
pixeltable/io/datarows.py,sha256=
|
|
119
|
+
pixeltable/io/datarows.py,sha256=s2fDQTttGxq7cS5JwKFEJRSKn6WsXTaGdmm9VJSl_2M,6154
|
|
120
120
|
pixeltable/io/external_store.py,sha256=rOYBwTqcZZVU2toWxJ_9Iy2w2YO0DhuABrM2xGmqHSo,14787
|
|
121
|
-
pixeltable/io/fiftyone.py,sha256=
|
|
122
|
-
pixeltable/io/globals.py,sha256=
|
|
123
|
-
pixeltable/io/hf_datasets.py,sha256=
|
|
121
|
+
pixeltable/io/fiftyone.py,sha256=t_4WqRkKZm-G8qiiUXwld_4sijO9BGexmmzU5MmSDP0,6865
|
|
122
|
+
pixeltable/io/globals.py,sha256=B9ubI9Z0m2wGPZXWmZm10vlaP0UCuUsVyrMWvyudZSc,11360
|
|
123
|
+
pixeltable/io/hf_datasets.py,sha256=5WfWfXoQppG1Bx_pS5n44KO1Vo_mEb_S82PLB8cLfAU,5606
|
|
124
124
|
pixeltable/io/label_studio.py,sha256=XpPkOLktm37Jnhh5ce1PQpUYzeuPJjoCZDaSGedagF4,31426
|
|
125
|
-
pixeltable/io/pandas.py,sha256=
|
|
126
|
-
pixeltable/io/parquet.py,sha256
|
|
127
|
-
pixeltable/io/table_data_conduit.py,sha256
|
|
128
|
-
pixeltable/io/utils.py,sha256=
|
|
125
|
+
pixeltable/io/pandas.py,sha256=xQmkwbqE9_fjbbPUgeG5yNICrbVVK73UHxDL-cgrQw0,9007
|
|
126
|
+
pixeltable/io/parquet.py,sha256=qoVDuCoW-Tq14IlzN_psoNP7z83hIQ3ZEg_pKzHSqoY,7796
|
|
127
|
+
pixeltable/io/table_data_conduit.py,sha256=--UWwG6agBtOA5PLPfjxp2XKoAQ-f5nSPJqOgA5DAAI,22062
|
|
128
|
+
pixeltable/io/utils.py,sha256=qzBTmqdIawXMt2bfXQOraYnEstL69eC2Z33nl8RrwJk,4244
|
|
129
129
|
pixeltable/iterators/__init__.py,sha256=bU4EmbX85J1URmRw6G71f2I77b1ctqngEOwDmRB3T0w,455
|
|
130
130
|
pixeltable/iterators/audio.py,sha256=Xuv6sOuhhMbof87JrlO218Fm_j6MoMxEr88otmoXME4,9623
|
|
131
131
|
pixeltable/iterators/base.py,sha256=ZC0ZvXL4iw6AmT8cu-Mdx-T2UG9nmJYV1C6LK4efAfw,1669
|
|
132
|
-
pixeltable/iterators/document.py,sha256=
|
|
132
|
+
pixeltable/iterators/document.py,sha256=HcwL4X1V-RMDBlJJeF7Qcp6cF4C1C8HbJCp_AfiO1rE,20293
|
|
133
133
|
pixeltable/iterators/image.py,sha256=RrFdf5cnFIQzWKJk4uYi1m1p2qAiz909THYhRQ27DbY,3603
|
|
134
134
|
pixeltable/iterators/string.py,sha256=URj5edWp-CsorjN_8nnfWGvtIFs_Zh4VPm6htlJbFkU,1257
|
|
135
|
-
pixeltable/iterators/video.py,sha256=
|
|
135
|
+
pixeltable/iterators/video.py,sha256=PKztCS_FEtu-AoHR6X-wJG6UJddX195lS-9eQp5ClGc,10810
|
|
136
136
|
pixeltable/metadata/__init__.py,sha256=iJxMsd3s5yNZ5ciIBzQCa0frXZKgvFj2_-H0Sf4N1mk,3154
|
|
137
137
|
pixeltable/metadata/notes.py,sha256=3fdZDFpL1-b194Ejv0Y0YP-vbnV-XvVP9wOmZM9XARA,1545
|
|
138
138
|
pixeltable/metadata/schema.py,sha256=fs9W2SLh32Ehxc9AChVH7YCtlSSnQkgGMbEyOh0B4W0,13416
|
|
@@ -168,29 +168,29 @@ pixeltable/metadata/converters/convert_38.py,sha256=YyNyocwzzdJRcI0YSCo_70Q4hSk6
|
|
|
168
168
|
pixeltable/metadata/converters/convert_39.py,sha256=YaEfgStxtYGRbuRLFw8wTAZVJRzIU6zL6nPU2zuDcEU,4658
|
|
169
169
|
pixeltable/metadata/converters/util.py,sha256=QUBOj2F_6rCAdIo0lgD1IVgAM15Vmq7ikQspB4s0eQ8,7732
|
|
170
170
|
pixeltable/share/__init__.py,sha256=AtR4nS6YkfkFRkXA-zZXFTK5pSQjHry8MnxdVLUk5SA,68
|
|
171
|
-
pixeltable/share/packager.py,sha256=
|
|
171
|
+
pixeltable/share/packager.py,sha256=yzqatcxR6VQDCCPKnMk8-i2YaHTPWE6jfJU-Cpr5-RQ,31259
|
|
172
172
|
pixeltable/share/publish.py,sha256=U6PzOUYiZaPu-sVNjh2nN8qzY2-uMsYeTwQCCuGk7Jg,6537
|
|
173
|
-
pixeltable/utils/__init__.py,sha256=
|
|
174
|
-
pixeltable/utils/arrow.py,sha256=
|
|
173
|
+
pixeltable/utils/__init__.py,sha256=45qEM20L2VuIe-Cc3BTKWFqQb-S7A8qDtmmgl77zYK0,1728
|
|
174
|
+
pixeltable/utils/arrow.py,sha256=Rooa02GL5k--D2utlKATtYKrrlsHbbi6JmkarXMux1M,6384
|
|
175
175
|
pixeltable/utils/coco.py,sha256=Y1DWVYguZD4VhKyf7JruYfHWvhkJLq39fzbiSm5cdyY,7304
|
|
176
176
|
pixeltable/utils/code.py,sha256=SbG5OUF_fQAbOgGZHDuENijmbzisVqa4VS9guaZ0KtU,1231
|
|
177
177
|
pixeltable/utils/console_output.py,sha256=x23iDnNwUbsr7Ec20BQ7BLATTsrQZflxc9NucAt_sVU,1150
|
|
178
178
|
pixeltable/utils/coroutine.py,sha256=d87kLlkVIZq2u0kTE7kJ5Tc_yjEkdGi5sXAuxjLLxXY,896
|
|
179
179
|
pixeltable/utils/dbms.py,sha256=cuQqlzLF7WON_mkJZ4QWlfX6lCxA97V32lhtMcOlDLg,2018
|
|
180
|
-
pixeltable/utils/description_helper.py,sha256=
|
|
180
|
+
pixeltable/utils/description_helper.py,sha256=lwAduHT1yofH6loyNBwuCnMh-sY2e2FqHKDTVhrZDbg,3724
|
|
181
181
|
pixeltable/utils/documents.py,sha256=x3UHU7eykibyA3eVkSrCK1CQoaid228vp96WUEESssU,3105
|
|
182
182
|
pixeltable/utils/exception_handler.py,sha256=yrTAtUJEOhldps_k6aRLEf5yQ8gYGhl9c6ewYNC4Qfc,2476
|
|
183
183
|
pixeltable/utils/filecache.py,sha256=3TTEqhGg0pEAP_l0GKn34uspC4dha1jPab1Ka9_oTBM,10877
|
|
184
184
|
pixeltable/utils/formatter.py,sha256=tbMxE9rBw6wdKUnJhNZ8h9uAF8dZKcihQ2KesqAag9A,10096
|
|
185
185
|
pixeltable/utils/http_server.py,sha256=6khOAtpVj1lDIm9Dx8VIECLm87cFEp4IFbAg8T92A2o,2441
|
|
186
|
-
pixeltable/utils/iceberg.py,sha256=
|
|
186
|
+
pixeltable/utils/iceberg.py,sha256=COeNqqy5RRMkDGLS8CTnaUeAccG10x2fwP3e1veuqIA,522
|
|
187
187
|
pixeltable/utils/media_store.py,sha256=O3pByWHRd79Z5vcy1Dc1crIUADaLL93pPz19Y60e2wY,7011
|
|
188
188
|
pixeltable/utils/pytorch.py,sha256=564VHRdDHwD9h0v5lBHEDTJ8c6zx8wuzWYx8ZYjBxlI,3621
|
|
189
189
|
pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
|
|
190
190
|
pixeltable/utils/sql.py,sha256=Sa4Lh-VGe8GToU5W7DRiWf2lMl9B6saPqemiT0ZdHEc,806
|
|
191
191
|
pixeltable/utils/transactional_directory.py,sha256=OFKmu90oP7KwBAljwjnzP_w8euGdAXob3y4Nx9SCNHA,1357
|
|
192
|
-
pixeltable-0.4.
|
|
193
|
-
pixeltable-0.4.
|
|
194
|
-
pixeltable-0.4.
|
|
195
|
-
pixeltable-0.4.
|
|
196
|
-
pixeltable-0.4.
|
|
192
|
+
pixeltable-0.4.7.dist-info/METADATA,sha256=ffhRp1xau1eRh53Io-7nhHF7Pg0MVp59qN4ci6Jhu94,22299
|
|
193
|
+
pixeltable-0.4.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
194
|
+
pixeltable-0.4.7.dist-info/entry_points.txt,sha256=rrKugZmxDtGnXCnEQ5UJMaaSYY7-g1cLjUZ4W1moIhM,98
|
|
195
|
+
pixeltable-0.4.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
196
|
+
pixeltable-0.4.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|