pixeltable 0.3.14__py3-none-any.whl → 0.5.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.
- pixeltable/__init__.py +42 -8
- pixeltable/{dataframe.py → _query.py} +470 -206
- pixeltable/_version.py +1 -0
- pixeltable/catalog/__init__.py +5 -4
- pixeltable/catalog/catalog.py +1785 -432
- pixeltable/catalog/column.py +190 -113
- pixeltable/catalog/dir.py +2 -4
- pixeltable/catalog/globals.py +19 -46
- pixeltable/catalog/insertable_table.py +191 -98
- pixeltable/catalog/path.py +63 -23
- pixeltable/catalog/schema_object.py +11 -15
- pixeltable/catalog/table.py +843 -436
- pixeltable/catalog/table_metadata.py +103 -0
- pixeltable/catalog/table_version.py +978 -657
- pixeltable/catalog/table_version_handle.py +72 -16
- pixeltable/catalog/table_version_path.py +112 -43
- pixeltable/catalog/tbl_ops.py +53 -0
- pixeltable/catalog/update_status.py +191 -0
- pixeltable/catalog/view.py +134 -90
- pixeltable/config.py +134 -22
- pixeltable/env.py +471 -157
- pixeltable/exceptions.py +6 -0
- pixeltable/exec/__init__.py +4 -1
- pixeltable/exec/aggregation_node.py +7 -8
- pixeltable/exec/cache_prefetch_node.py +83 -110
- pixeltable/exec/cell_materialization_node.py +268 -0
- pixeltable/exec/cell_reconstruction_node.py +168 -0
- pixeltable/exec/component_iteration_node.py +4 -3
- pixeltable/exec/data_row_batch.py +8 -65
- pixeltable/exec/exec_context.py +16 -4
- pixeltable/exec/exec_node.py +13 -36
- pixeltable/exec/expr_eval/evaluators.py +11 -7
- pixeltable/exec/expr_eval/expr_eval_node.py +27 -12
- pixeltable/exec/expr_eval/globals.py +8 -5
- pixeltable/exec/expr_eval/row_buffer.py +1 -2
- pixeltable/exec/expr_eval/schedulers.py +106 -56
- pixeltable/exec/globals.py +35 -0
- pixeltable/exec/in_memory_data_node.py +19 -19
- pixeltable/exec/object_store_save_node.py +293 -0
- pixeltable/exec/row_update_node.py +16 -9
- pixeltable/exec/sql_node.py +351 -84
- pixeltable/exprs/__init__.py +1 -1
- pixeltable/exprs/arithmetic_expr.py +27 -22
- pixeltable/exprs/array_slice.py +3 -3
- pixeltable/exprs/column_property_ref.py +36 -23
- pixeltable/exprs/column_ref.py +213 -89
- pixeltable/exprs/comparison.py +5 -5
- pixeltable/exprs/compound_predicate.py +5 -4
- pixeltable/exprs/data_row.py +164 -54
- pixeltable/exprs/expr.py +70 -44
- pixeltable/exprs/expr_dict.py +3 -3
- pixeltable/exprs/expr_set.py +17 -10
- pixeltable/exprs/function_call.py +100 -40
- pixeltable/exprs/globals.py +2 -2
- pixeltable/exprs/in_predicate.py +4 -4
- pixeltable/exprs/inline_expr.py +18 -32
- pixeltable/exprs/is_null.py +7 -3
- pixeltable/exprs/json_mapper.py +8 -8
- pixeltable/exprs/json_path.py +56 -22
- pixeltable/exprs/literal.py +27 -5
- pixeltable/exprs/method_ref.py +2 -2
- pixeltable/exprs/object_ref.py +2 -2
- pixeltable/exprs/row_builder.py +167 -67
- pixeltable/exprs/rowid_ref.py +25 -10
- pixeltable/exprs/similarity_expr.py +58 -40
- pixeltable/exprs/sql_element_cache.py +4 -4
- pixeltable/exprs/string_op.py +5 -5
- pixeltable/exprs/type_cast.py +3 -5
- pixeltable/func/__init__.py +1 -0
- pixeltable/func/aggregate_function.py +8 -8
- pixeltable/func/callable_function.py +9 -9
- pixeltable/func/expr_template_function.py +17 -11
- pixeltable/func/function.py +18 -20
- pixeltable/func/function_registry.py +6 -7
- pixeltable/func/globals.py +2 -3
- pixeltable/func/mcp.py +74 -0
- pixeltable/func/query_template_function.py +29 -27
- pixeltable/func/signature.py +46 -19
- pixeltable/func/tools.py +31 -13
- pixeltable/func/udf.py +18 -20
- pixeltable/functions/__init__.py +16 -0
- pixeltable/functions/anthropic.py +123 -77
- pixeltable/functions/audio.py +147 -10
- pixeltable/functions/bedrock.py +13 -6
- pixeltable/functions/date.py +7 -4
- pixeltable/functions/deepseek.py +35 -43
- pixeltable/functions/document.py +81 -0
- pixeltable/functions/fal.py +76 -0
- pixeltable/functions/fireworks.py +11 -20
- pixeltable/functions/gemini.py +195 -39
- pixeltable/functions/globals.py +142 -14
- pixeltable/functions/groq.py +108 -0
- pixeltable/functions/huggingface.py +1056 -24
- pixeltable/functions/image.py +115 -57
- pixeltable/functions/json.py +1 -1
- pixeltable/functions/llama_cpp.py +28 -13
- pixeltable/functions/math.py +67 -5
- pixeltable/functions/mistralai.py +18 -55
- pixeltable/functions/net.py +70 -0
- pixeltable/functions/ollama.py +20 -13
- pixeltable/functions/openai.py +240 -226
- pixeltable/functions/openrouter.py +143 -0
- pixeltable/functions/replicate.py +4 -4
- pixeltable/functions/reve.py +250 -0
- pixeltable/functions/string.py +239 -69
- pixeltable/functions/timestamp.py +16 -16
- pixeltable/functions/together.py +24 -84
- pixeltable/functions/twelvelabs.py +188 -0
- pixeltable/functions/util.py +6 -1
- pixeltable/functions/uuid.py +30 -0
- pixeltable/functions/video.py +1515 -107
- pixeltable/functions/vision.py +8 -8
- pixeltable/functions/voyageai.py +289 -0
- pixeltable/functions/whisper.py +16 -8
- pixeltable/functions/whisperx.py +179 -0
- pixeltable/{ext/functions → functions}/yolox.py +2 -4
- pixeltable/globals.py +362 -115
- pixeltable/index/base.py +17 -21
- pixeltable/index/btree.py +28 -22
- pixeltable/index/embedding_index.py +100 -118
- pixeltable/io/__init__.py +4 -2
- pixeltable/io/datarows.py +8 -7
- pixeltable/io/external_store.py +56 -105
- pixeltable/io/fiftyone.py +13 -13
- pixeltable/io/globals.py +31 -30
- pixeltable/io/hf_datasets.py +61 -16
- pixeltable/io/label_studio.py +74 -70
- pixeltable/io/lancedb.py +3 -0
- pixeltable/io/pandas.py +21 -12
- pixeltable/io/parquet.py +25 -105
- pixeltable/io/table_data_conduit.py +250 -123
- pixeltable/io/utils.py +4 -4
- pixeltable/iterators/__init__.py +2 -1
- pixeltable/iterators/audio.py +26 -25
- pixeltable/iterators/base.py +9 -3
- pixeltable/iterators/document.py +112 -78
- pixeltable/iterators/image.py +12 -15
- pixeltable/iterators/string.py +11 -4
- pixeltable/iterators/video.py +523 -120
- pixeltable/metadata/__init__.py +14 -3
- pixeltable/metadata/converters/convert_13.py +2 -2
- pixeltable/metadata/converters/convert_18.py +2 -2
- pixeltable/metadata/converters/convert_19.py +2 -2
- pixeltable/metadata/converters/convert_20.py +2 -2
- pixeltable/metadata/converters/convert_21.py +2 -2
- pixeltable/metadata/converters/convert_22.py +2 -2
- pixeltable/metadata/converters/convert_24.py +2 -2
- pixeltable/metadata/converters/convert_25.py +2 -2
- pixeltable/metadata/converters/convert_26.py +2 -2
- pixeltable/metadata/converters/convert_29.py +4 -4
- pixeltable/metadata/converters/convert_30.py +34 -21
- pixeltable/metadata/converters/convert_34.py +2 -2
- pixeltable/metadata/converters/convert_35.py +9 -0
- pixeltable/metadata/converters/convert_36.py +38 -0
- pixeltable/metadata/converters/convert_37.py +15 -0
- pixeltable/metadata/converters/convert_38.py +39 -0
- pixeltable/metadata/converters/convert_39.py +124 -0
- pixeltable/metadata/converters/convert_40.py +73 -0
- pixeltable/metadata/converters/convert_41.py +12 -0
- pixeltable/metadata/converters/convert_42.py +9 -0
- pixeltable/metadata/converters/convert_43.py +44 -0
- pixeltable/metadata/converters/util.py +20 -31
- pixeltable/metadata/notes.py +9 -0
- pixeltable/metadata/schema.py +140 -53
- pixeltable/metadata/utils.py +74 -0
- pixeltable/mypy/__init__.py +3 -0
- pixeltable/mypy/mypy_plugin.py +123 -0
- pixeltable/plan.py +382 -115
- pixeltable/share/__init__.py +1 -1
- pixeltable/share/packager.py +547 -83
- pixeltable/share/protocol/__init__.py +33 -0
- pixeltable/share/protocol/common.py +165 -0
- pixeltable/share/protocol/operation_types.py +33 -0
- pixeltable/share/protocol/replica.py +119 -0
- pixeltable/share/publish.py +257 -59
- pixeltable/store.py +311 -194
- pixeltable/type_system.py +373 -211
- pixeltable/utils/__init__.py +2 -3
- pixeltable/utils/arrow.py +131 -17
- pixeltable/utils/av.py +298 -0
- pixeltable/utils/azure_store.py +346 -0
- pixeltable/utils/coco.py +6 -6
- pixeltable/utils/code.py +3 -3
- pixeltable/utils/console_output.py +4 -1
- pixeltable/utils/coroutine.py +6 -23
- pixeltable/utils/dbms.py +32 -6
- pixeltable/utils/description_helper.py +4 -5
- pixeltable/utils/documents.py +7 -18
- pixeltable/utils/exception_handler.py +7 -30
- pixeltable/utils/filecache.py +6 -6
- pixeltable/utils/formatter.py +86 -48
- pixeltable/utils/gcs_store.py +295 -0
- pixeltable/utils/http.py +133 -0
- pixeltable/utils/http_server.py +2 -3
- pixeltable/utils/iceberg.py +1 -2
- pixeltable/utils/image.py +17 -0
- pixeltable/utils/lancedb.py +90 -0
- pixeltable/utils/local_store.py +322 -0
- pixeltable/utils/misc.py +5 -0
- pixeltable/utils/object_stores.py +573 -0
- pixeltable/utils/pydantic.py +60 -0
- pixeltable/utils/pytorch.py +5 -6
- pixeltable/utils/s3_store.py +527 -0
- pixeltable/utils/sql.py +26 -0
- pixeltable/utils/system.py +30 -0
- pixeltable-0.5.7.dist-info/METADATA +579 -0
- pixeltable-0.5.7.dist-info/RECORD +227 -0
- {pixeltable-0.3.14.dist-info → pixeltable-0.5.7.dist-info}/WHEEL +1 -1
- pixeltable-0.5.7.dist-info/entry_points.txt +2 -0
- pixeltable/__version__.py +0 -3
- pixeltable/catalog/named_function.py +0 -40
- pixeltable/ext/__init__.py +0 -17
- pixeltable/ext/functions/__init__.py +0 -11
- pixeltable/ext/functions/whisperx.py +0 -77
- pixeltable/utils/media_store.py +0 -77
- pixeltable/utils/s3.py +0 -17
- pixeltable-0.3.14.dist-info/METADATA +0 -434
- pixeltable-0.3.14.dist-info/RECORD +0 -186
- pixeltable-0.3.14.dist-info/entry_points.txt +0 -3
- {pixeltable-0.3.14.dist-info → pixeltable-0.5.7.dist-info/licenses}/LICENSE +0 -0
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pixeltable
|
|
3
|
+
Version: 0.5.7
|
|
4
|
+
Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
|
|
5
|
+
Project-URL: homepage, https://pixeltable.com/
|
|
6
|
+
Project-URL: repository, https://github.com/pixeltable/pixeltable
|
|
7
|
+
Project-URL: documentation, https://docs.pixeltable.com/
|
|
8
|
+
Author-email: "Pixeltable, Inc." <contact@pixeltable.com>
|
|
9
|
+
License-Expression: Apache-2.0
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: ai,artificial-intelligence,chatbot,computer-vision,data-science,database,feature-engineering,feature-store,genai,llm,machine-learning,ml,mlops,multimodal,vector-database
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Database
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
24
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
|
+
Requires-Dist: aiohttp>=3.10
|
|
27
|
+
Requires-Dist: av>=10.0.0
|
|
28
|
+
Requires-Dist: beautifulsoup4>=4.10
|
|
29
|
+
Requires-Dist: cloudpickle>=2.2.1
|
|
30
|
+
Requires-Dist: deprecated>=1.2.15
|
|
31
|
+
Requires-Dist: ftfy>=6.2.0
|
|
32
|
+
Requires-Dist: httpcore>=1.0.3
|
|
33
|
+
Requires-Dist: httpx>=0.27
|
|
34
|
+
Requires-Dist: jinja2>=3.1.3
|
|
35
|
+
Requires-Dist: jmespath>=1.0.1
|
|
36
|
+
Requires-Dist: jsonschema>=4.1.0
|
|
37
|
+
Requires-Dist: lxml>=5.1
|
|
38
|
+
Requires-Dist: more-itertools>=10.2
|
|
39
|
+
Requires-Dist: nest-asyncio>=1.5
|
|
40
|
+
Requires-Dist: numpy>=1.25
|
|
41
|
+
Requires-Dist: pandas>=2.0
|
|
42
|
+
Requires-Dist: pgvector>=0.4.0
|
|
43
|
+
Requires-Dist: pillow-heif>=0.15.0
|
|
44
|
+
Requires-Dist: pillow>=9.3.0
|
|
45
|
+
Requires-Dist: pixeltable-pgserver==0.4.0
|
|
46
|
+
Requires-Dist: psutil>=5.9.5
|
|
47
|
+
Requires-Dist: psycopg[binary]>=3.1.18
|
|
48
|
+
Requires-Dist: puremagic>=1.20
|
|
49
|
+
Requires-Dist: pyarrow>=19
|
|
50
|
+
Requires-Dist: pydantic>=2.7.4
|
|
51
|
+
Requires-Dist: pypdfium2>=4.30.0
|
|
52
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
53
|
+
Requires-Dist: requests>=2.31.0
|
|
54
|
+
Requires-Dist: sqlalchemy>=2.0.23
|
|
55
|
+
Requires-Dist: tenacity>=8.2
|
|
56
|
+
Requires-Dist: toml>=0.10
|
|
57
|
+
Requires-Dist: tqdm>=4.64
|
|
58
|
+
Requires-Dist: tzlocal>=5.0
|
|
59
|
+
Description-Content-Type: text/markdown
|
|
60
|
+
|
|
61
|
+
<picture class="github-only">
|
|
62
|
+
<source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/e9bf82b2-cace-4bd8-9523-b65495eb8131">
|
|
63
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/c5ab123e-806c-49bf-93e7-151353719b16">
|
|
64
|
+
<img alt="Pixeltable Logo" src="https://github.com/user-attachments/assets/e9bf82b2-cace-4bd8-9523-b65495eb8131" width="40%">
|
|
65
|
+
</picture>
|
|
66
|
+
|
|
67
|
+
<div>
|
|
68
|
+
<br>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
The only open source Python library providing declarative data infrastructure for building multimodal AI applications, enabling incremental storage, transformation, indexing, retrieval, and orchestration of data.
|
|
72
|
+
|
|
73
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
74
|
+
[](https://github.com/pixeltable/pixeltable/actions/workflows/pytest.yml)
|
|
75
|
+
[](https://github.com/pixeltable/pixeltable/actions/workflows/nightly.yml)
|
|
76
|
+
[](https://github.com/pixeltable/pixeltable/actions/workflows/stress-tests.yml)
|
|
77
|
+
[](https://pypi.org/project/pixeltable/)
|
|
78
|
+
[](https://discord.gg/QPyqFYx2UN)
|
|
79
|
+
|
|
80
|
+
[**Quick Start**](https://docs.pixeltable.com/overview/quick-start) |
|
|
81
|
+
[**Documentation**](https://docs.pixeltable.com/) |
|
|
82
|
+
[**API Reference**](https://docs.pixeltable.com/sdk/latest/pixeltable) |
|
|
83
|
+
[**Sample Apps**](https://github.com/pixeltable/pixeltable/tree/main/docs/sample-apps) |
|
|
84
|
+
[**Discord Community**](https://discord.gg/QPyqFYx2UN)
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Installation
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
pip install pixeltable
|
|
92
|
+
```
|
|
93
|
+
Pixeltable replaces the complex multi-system architecture typically needed for AI applications (databases, file storage, vector DBs, APIs, orchestration) with a single declarative table interface that natively handles multimodal data like images, videos, and documents.
|
|
94
|
+
|
|
95
|
+
## Demo
|
|
96
|
+
|
|
97
|
+
https://github.com/user-attachments/assets/b50fd6df-5169-4881-9dbe-1b6e5d06cede
|
|
98
|
+
|
|
99
|
+
## Quick Start
|
|
100
|
+
|
|
101
|
+
With Pixeltable, you define your *entire* data processing and AI workflow declaratively using
|
|
102
|
+
**[computed columns](https://docs.pixeltable.com/tutorials/computed-columns)** on
|
|
103
|
+
**[tables](https://docs.pixeltable.com/tutorials/tables-and-data-operations)**.
|
|
104
|
+
Focus on your application logic, not the data plumbing.
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
|
|
108
|
+
# Installation
|
|
109
|
+
pip install -qU torch transformers openai pixeltable
|
|
110
|
+
|
|
111
|
+
# Basic setup
|
|
112
|
+
import pixeltable as pxt
|
|
113
|
+
|
|
114
|
+
# Table with multimodal column types (Image, Video, Audio, Document)
|
|
115
|
+
t = pxt.create_table('images', {'input_image': pxt.Image})
|
|
116
|
+
|
|
117
|
+
# Computed columns: define transformation logic once, runs on all data
|
|
118
|
+
from pixeltable.functions import huggingface
|
|
119
|
+
|
|
120
|
+
# Object detection with automatic model management
|
|
121
|
+
t.add_computed_column(
|
|
122
|
+
detections=huggingface.detr_for_object_detection(
|
|
123
|
+
t.input_image,
|
|
124
|
+
model_id='facebook/detr-resnet-50'
|
|
125
|
+
)
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
# Extract specific fields from detection results
|
|
129
|
+
t.add_computed_column(detections_text=t.detections.label_text)
|
|
130
|
+
|
|
131
|
+
# OpenAI Vision API integration with built-in rate limiting and async management
|
|
132
|
+
from pixeltable.functions import openai
|
|
133
|
+
|
|
134
|
+
t.add_computed_column(
|
|
135
|
+
vision=openai.vision(
|
|
136
|
+
prompt="Describe what's in this image.",
|
|
137
|
+
image=t.input_image,
|
|
138
|
+
model='gpt-4o-mini'
|
|
139
|
+
)
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# Insert data directly from an external URL
|
|
143
|
+
# Automatically triggers computation of all computed columns
|
|
144
|
+
t.insert(input_image='https://raw.github.com/pixeltable/pixeltable/release/docs/resources/images/000000000025.jpg')
|
|
145
|
+
|
|
146
|
+
# Query - All data, metadata, and computed results are persistently stored
|
|
147
|
+
# Structured and unstructured data are returned side-by-side
|
|
148
|
+
results = t.select(
|
|
149
|
+
t.input_image,
|
|
150
|
+
t.detections_text,
|
|
151
|
+
t.vision
|
|
152
|
+
).collect()
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## What Happened?
|
|
156
|
+
|
|
157
|
+
* **Data Ingestion & Storage:** References [files](https://docs.pixeltable.com/platform/external-files)
|
|
158
|
+
(images, videos, audio, docs) in place, handles structured data.
|
|
159
|
+
* **Transformation & Processing:** Applies *any* Python function ([UDFs](https://docs.pixeltable.com/platform/udfs-in-pixeltable))
|
|
160
|
+
or built-in operations ([chunking, frame extraction](https://docs.pixeltable.com/platform/iterators)) automatically.
|
|
161
|
+
* **AI Model Integration:** Runs inference ([embeddings](https://docs.pixeltable.com/platform/embedding-indexes),
|
|
162
|
+
[object detection](https://docs.pixeltable.com/howto/cookbooks/images/img-detect-objects),
|
|
163
|
+
[LLMs](https://docs.pixeltable.com/integrations/frameworks#cloud-llm-providers)) as part of the data pipeline.
|
|
164
|
+
* **Indexing & Retrieval:** Creates and manages vector indexes for fast
|
|
165
|
+
[semantic search](https://docs.pixeltable.com/platform/embedding-indexes)
|
|
166
|
+
alongside traditional filtering.
|
|
167
|
+
* **Incremental Computation:** Only [recomputes](https://docs.pixeltable.com/overview/quick-start) what's
|
|
168
|
+
necessary when data or code changes, saving time and cost.
|
|
169
|
+
* **Versioning & Lineage:** Automatically tracks data and schema changes for reproducibility. See below for an example
|
|
170
|
+
that uses "time travel" to query an older version of a table.
|
|
171
|
+
|
|
172
|
+
Pixeltable can ingest data from local storage or directly from a URL. When external media files are referenced by URL,
|
|
173
|
+
as in the `insert` statement above, Pixeltable caches them locally before processing. See the
|
|
174
|
+
[Working with External Files](https://github.com/pixeltable/pixeltable/blob/main/docs/notebooks/feature-guides/working-with-external-files.ipynb)
|
|
175
|
+
notebook for more details.
|
|
176
|
+
|
|
177
|
+
## Where Did My Data Go?
|
|
178
|
+
|
|
179
|
+
Pixeltable workloads generate various outputs, including both structured outputs (such as bounding boxes for detected
|
|
180
|
+
objects) and/or unstructured outputs (such as generated images or video). By default, everything resides in your
|
|
181
|
+
Pixeltable user directory at `~/.pixeltable`. Structured data is stored in a Postgres instance in `~/.pixeltable`.
|
|
182
|
+
Generated media (images, video, audio, documents) are stored outside the Postgres database, in separate flat files in
|
|
183
|
+
`~/.pixeltable/media`. Those media files are referenced by URL in the database, and Pixeltable provides the "glue" for
|
|
184
|
+
a unified table interface over both structured and unstructured data.
|
|
185
|
+
|
|
186
|
+
In general, the user is not expected to interact directly with the data in `~/.pixeltable`; the data store is fully
|
|
187
|
+
managed by Pixeltable and is intended to be accessed through the Pixeltable Python SDK.
|
|
188
|
+
|
|
189
|
+
## Key Principles
|
|
190
|
+
|
|
191
|
+
**[Unified Multimodal Interface:](https://docs.pixeltable.com/platform/type-system)** `pxt.Image`,
|
|
192
|
+
`pxt.Video`, `pxt.Audio`, `pxt.Document`, etc. – manage diverse data consistently.
|
|
193
|
+
|
|
194
|
+
```python
|
|
195
|
+
t = pxt.create_table(
|
|
196
|
+
'media',
|
|
197
|
+
{
|
|
198
|
+
'img': pxt.Image,
|
|
199
|
+
'video': pxt.Video
|
|
200
|
+
}
|
|
201
|
+
)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**[Declarative Computed Columns:](https://docs.pixeltable.com/tutorials/computed-columns)** Define processing
|
|
205
|
+
steps once; they run automatically on new/updated data.
|
|
206
|
+
|
|
207
|
+
```python
|
|
208
|
+
t.add_computed_column(
|
|
209
|
+
classification=huggingface.vit_for_image_classification(
|
|
210
|
+
t.image
|
|
211
|
+
)
|
|
212
|
+
)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**[Built-in Vector Search:](https://docs.pixeltable.com/platform/embedding-indexes)** Add embedding indexes and
|
|
216
|
+
perform similarity searches directly on tables/views.
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
t.add_embedding_index(
|
|
220
|
+
'img',
|
|
221
|
+
embedding=clip.using(
|
|
222
|
+
model_id='openai/clip-vit-base-patch32'
|
|
223
|
+
)
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
sim = t.img.similarity(string="cat playing with yarn")
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**[Incremental View Maintenance:](https://docs.pixeltable.com/platform/views)** Create virtual tables using iterators
|
|
230
|
+
for efficient processing without data duplication.
|
|
231
|
+
|
|
232
|
+
```python
|
|
233
|
+
# Document chunking with overlap & metadata and many more options to build your own iterator
|
|
234
|
+
chunks = pxt.create_view('chunks', docs,
|
|
235
|
+
iterator=DocumentSplitter.create(
|
|
236
|
+
document=docs.doc,
|
|
237
|
+
separators='sentence,token_limit',
|
|
238
|
+
overlap=50, limit=500
|
|
239
|
+
))
|
|
240
|
+
|
|
241
|
+
# Video frame extraction
|
|
242
|
+
frames = pxt.create_view('frames', videos,
|
|
243
|
+
iterator=FrameIterator.create(video=videos.video, fps=0.5))
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**[Seamless AI Integration:](https://docs.pixeltable.com/integrations/frameworks)** Built-in functions for
|
|
247
|
+
OpenAI, Anthropic, Hugging Face, CLIP, YOLOX, and more.
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
# LLM integration (OpenAI, Anthropic, etc.)
|
|
251
|
+
t.add_computed_column(
|
|
252
|
+
response=openai.chat_completions(
|
|
253
|
+
messages=[{"role": "user", "content": t.prompt}], model='gpt-4o-mini'
|
|
254
|
+
)
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
# Computer vision (YOLOX object detection)
|
|
258
|
+
t.add_computed_column(
|
|
259
|
+
detections=yolox(t.image, model_id='yolox_s', threshold=0.5)
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
# Embedding models (Hugging Face, CLIP)
|
|
263
|
+
t.add_computed_column(
|
|
264
|
+
embeddings=huggingface.sentence_transformer(
|
|
265
|
+
t.text, model_id='all-MiniLM-L6-v2'
|
|
266
|
+
)
|
|
267
|
+
)
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**[Bring Your Own Code:](https://docs.pixeltable.com/platform/udfs-in-pixeltable)** Extend Pixeltable with UDFs, batch processing, and custom aggregators.
|
|
271
|
+
|
|
272
|
+
```python
|
|
273
|
+
@pxt.udf
|
|
274
|
+
def format_prompt(context: list, question: str) -> str:
|
|
275
|
+
return f"Context: {context}\nQuestion: {question}"
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**[Agentic Workflows / Tool Calling:](https://docs.pixeltable.com/howto/cookbooks/agents/llm-tool-calling)** Register `@pxt.udf`,
|
|
279
|
+
`@pxt.query` functions, or **MCP tools** as tools.
|
|
280
|
+
|
|
281
|
+
```python
|
|
282
|
+
# Example tools: UDFs, Query functions, and MCP tools
|
|
283
|
+
mcp_tools = pxt.mcp_udfs('http://localhost:8000/mcp') # Load from MCP server
|
|
284
|
+
tools = pxt.tools(get_weather_udf, search_context_query, *mcp_tools)
|
|
285
|
+
|
|
286
|
+
# LLM decides which tool to call; Pixeltable executes it
|
|
287
|
+
t.add_computed_column(
|
|
288
|
+
tool_output=invoke_tools(tools, t.llm_tool_choice)
|
|
289
|
+
)
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**[Data Persistence:](https://docs.pixeltable.com/tutorials/tables-and-data-operations)** All data,
|
|
293
|
+
metadata, and computed results are automatically stored and versioned.
|
|
294
|
+
|
|
295
|
+
```python
|
|
296
|
+
t = pxt.get_table('my_table') # Get a handle to an existing table
|
|
297
|
+
t.select(t.account, t.balance).collect() # Query its contents
|
|
298
|
+
t.revert() # Undo the last modification to the table and restore its previous state
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**[Time Travel:](https://docs.pixeltable.com/platform/version-control)** By default,
|
|
302
|
+
Pixeltable preserves the full change history of each table, and any prior version can be selected and queried.
|
|
303
|
+
|
|
304
|
+
```python
|
|
305
|
+
t.history() # Display a human-readable list of all prior versions of the table
|
|
306
|
+
old_version = pxt.get_table('my_table:472') # Get a handle to a specific table version
|
|
307
|
+
old_version.select(t.account, t.balance).collect() # Query the older version
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**[SQL-like Python Querying:](https://docs.pixeltable.com/tutorials/queries-and-expressions)** Familiar syntax
|
|
311
|
+
combined with powerful AI capabilities.
|
|
312
|
+
|
|
313
|
+
```python
|
|
314
|
+
results = (
|
|
315
|
+
t.where(t.score > 0.8)
|
|
316
|
+
.order_by(t.timestamp)
|
|
317
|
+
.select(t.image, score=t.score)
|
|
318
|
+
.limit(10)
|
|
319
|
+
.collect()
|
|
320
|
+
)
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**[I/O & Integration:](https://pixeltable.github.io/pixeltable/pixeltable/io/)** Export to multiple
|
|
324
|
+
formats and integrate with ML/AI tools ecosystem.
|
|
325
|
+
|
|
326
|
+
```python
|
|
327
|
+
# Export to analytics/ML formats
|
|
328
|
+
pxt.export_parquet(table, 'data.parquet', partition_size_bytes=100_000_000)
|
|
329
|
+
pxt.export_lancedb(table, 'vector_db')
|
|
330
|
+
|
|
331
|
+
# DataFrame conversions
|
|
332
|
+
results = table.select(table.image, table.labels).collect()
|
|
333
|
+
df = results.to_pandas() # → pandas DataFrame
|
|
334
|
+
models = results.to_pydantic(MyModel) # → Pydantic models
|
|
335
|
+
|
|
336
|
+
# Specialized ML dataset formats
|
|
337
|
+
coco_path = table.to_coco_dataset() # → COCO annotations
|
|
338
|
+
pytorch_ds = table.to_pytorch_dataset('pt') # → PyTorch DataLoader ready
|
|
339
|
+
|
|
340
|
+
# ML tool integrations
|
|
341
|
+
pxt.create_label_studio_project(table, label_config) # Annotation
|
|
342
|
+
pxt.export_images_as_fo_dataset(table, table.image) # FiftyOne
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## Key Examples
|
|
346
|
+
|
|
347
|
+
*(See the [Full Quick Start](https://docs.pixeltable.com/overview/quick-start) or
|
|
348
|
+
[Notebook Gallery](#notebook-gallery) for more details)*
|
|
349
|
+
|
|
350
|
+
**1. Multimodal Data Store and Data Transformation (Computed Column):**
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
pip install pixeltable
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
```python
|
|
357
|
+
import pixeltable as pxt
|
|
358
|
+
|
|
359
|
+
# Create a table
|
|
360
|
+
t = pxt.create_table(
|
|
361
|
+
'films',
|
|
362
|
+
{'name': pxt.String, 'revenue': pxt.Float, 'budget': pxt.Float},
|
|
363
|
+
if_exists="replace"
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
t.insert([
|
|
367
|
+
{'name': 'Inside Out', 'revenue': 800.5, 'budget': 200.0},
|
|
368
|
+
{'name': 'Toy Story', 'revenue': 1073.4, 'budget': 200.0}
|
|
369
|
+
])
|
|
370
|
+
|
|
371
|
+
# Add a computed column for profit - runs automatically!
|
|
372
|
+
t.add_computed_column(profit=(t.revenue - t.budget), if_exists="replace")
|
|
373
|
+
|
|
374
|
+
# Query the results
|
|
375
|
+
print(t.select(t.name, t.profit).collect())
|
|
376
|
+
# Output includes the automatically computed 'profit' column
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**2. Object Detection with [YOLOX](https://github.com/pixeltable/pixeltable-yolox):**
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
pip install pixeltable pixeltable-yolox
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
```python
|
|
386
|
+
import PIL
|
|
387
|
+
import pixeltable as pxt
|
|
388
|
+
from yolox.models import Yolox
|
|
389
|
+
from yolox.data.datasets import COCO_CLASSES
|
|
390
|
+
|
|
391
|
+
t = pxt.create_table('image', {'image': pxt.Image}, if_exists='replace')
|
|
392
|
+
|
|
393
|
+
# Insert some images
|
|
394
|
+
prefix = 'https://upload.wikimedia.org/wikipedia/commons'
|
|
395
|
+
paths = [
|
|
396
|
+
'/1/15/Cat_August_2010-4.jpg',
|
|
397
|
+
'/e/e1/Example_of_a_Dog.jpg',
|
|
398
|
+
'/thumb/b/bf/Bird_Diversity_2013.png/300px-Bird_Diversity_2013.png'
|
|
399
|
+
]
|
|
400
|
+
t.insert({'image': prefix + p} for p in paths)
|
|
401
|
+
|
|
402
|
+
@pxt.udf
|
|
403
|
+
def detect(image: PIL.Image.Image) -> list[str]:
|
|
404
|
+
model = Yolox.from_pretrained("yolox_s")
|
|
405
|
+
result = model([image])
|
|
406
|
+
coco_labels = [COCO_CLASSES[label] for label in result[0]["labels"]]
|
|
407
|
+
return coco_labels
|
|
408
|
+
|
|
409
|
+
t.add_computed_column(classification=detect(t.image))
|
|
410
|
+
|
|
411
|
+
print(t.select().collect())
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
**3. Image Similarity Search (CLIP Embedding Index):**
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
pip install pixeltable sentence-transformers
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
```python
|
|
421
|
+
import pixeltable as pxt
|
|
422
|
+
from pixeltable.functions.huggingface import clip
|
|
423
|
+
|
|
424
|
+
# Create image table and add sample images
|
|
425
|
+
images = pxt.create_table('my_images', {'img': pxt.Image}, if_exists='replace')
|
|
426
|
+
images.insert([
|
|
427
|
+
{'img': 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Orange_tabby_cat_sitting_on_fallen_leaves-Hisashi-01A.jpg/1920px-Orange_tabby_cat_sitting_on_fallen_leaves-Hisashi-01A.jpg'},
|
|
428
|
+
{'img': 'https://upload.wikimedia.org/wikipedia/commons/d/d5/Retriever_in_water.jpg'}
|
|
429
|
+
])
|
|
430
|
+
|
|
431
|
+
# Add CLIP embedding index for similarity search
|
|
432
|
+
images.add_embedding_index(
|
|
433
|
+
'img',
|
|
434
|
+
embedding=clip.using(model_id='openai/clip-vit-base-patch32')
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
# Text-based image search
|
|
438
|
+
query_text = "a dog playing fetch"
|
|
439
|
+
sim_text = images.img.similarity(string=query_text)
|
|
440
|
+
results_text = images.order_by(sim_text, asc=False).limit(3).select(
|
|
441
|
+
image=images.img, similarity=sim_text
|
|
442
|
+
).collect()
|
|
443
|
+
print("--- Text Query Results ---")
|
|
444
|
+
print(results_text)
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
**4. Multimodal/Incremental RAG Workflow (Document Chunking & LLM Call):**
|
|
448
|
+
|
|
449
|
+
```bash
|
|
450
|
+
pip install pixeltable openai spacy sentence-transformers
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
python -m spacy download en_core_web_sm
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
```python
|
|
458
|
+
import pixeltable as pxt
|
|
459
|
+
import pixeltable.functions as pxtf
|
|
460
|
+
from pixeltable.functions import openai, huggingface
|
|
461
|
+
from pixeltable.iterators import DocumentSplitter
|
|
462
|
+
|
|
463
|
+
# Manage your tables by directories
|
|
464
|
+
directory = "my_docs"
|
|
465
|
+
pxt.drop_dir(directory, if_not_exists="ignore", force=True)
|
|
466
|
+
pxt.create_dir("my_docs")
|
|
467
|
+
|
|
468
|
+
# Create a document table and add a PDF
|
|
469
|
+
docs = pxt.create_table(f'{directory}.docs', {'doc': pxt.Document})
|
|
470
|
+
docs.insert([{'doc': 'https://github.com/pixeltable/pixeltable/raw/release/docs/resources/rag-demo/Jefferson-Amazon.pdf'}])
|
|
471
|
+
|
|
472
|
+
# Create chunks view with sentence-based splitting
|
|
473
|
+
chunks = pxt.create_view(
|
|
474
|
+
'doc_chunks',
|
|
475
|
+
docs,
|
|
476
|
+
iterator=DocumentSplitter.create(document=docs.doc, separators='sentence')
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
# Explicitly create the embedding function object
|
|
480
|
+
embed_model = huggingface.sentence_transformer.using(model_id='all-MiniLM-L6-v2')
|
|
481
|
+
# Add embedding index using the function object
|
|
482
|
+
chunks.add_embedding_index('text', string_embed=embed_model)
|
|
483
|
+
|
|
484
|
+
# Define query function for retrieval - Returns a Query expression
|
|
485
|
+
@pxt.query
|
|
486
|
+
def get_relevant_context(query_text: str, limit: int = 3):
|
|
487
|
+
sim = chunks.text.similarity(string=query_text)
|
|
488
|
+
# Return a list of strings (text of relevant chunks)
|
|
489
|
+
return chunks.order_by(sim, asc=False).limit(limit).select(chunks.text)
|
|
490
|
+
|
|
491
|
+
# Build a simple Q&A table
|
|
492
|
+
qa = pxt.create_table(f'{directory}.qa_system', {'prompt': pxt.String})
|
|
493
|
+
|
|
494
|
+
# 1. Add retrieved context (now a list of strings)
|
|
495
|
+
qa.add_computed_column(context=get_relevant_context(qa.prompt))
|
|
496
|
+
|
|
497
|
+
# 2. Format the prompt with context
|
|
498
|
+
qa.add_computed_column(
|
|
499
|
+
final_prompt=pxtf.string.format(
|
|
500
|
+
"""
|
|
501
|
+
PASSAGES:
|
|
502
|
+
{0}
|
|
503
|
+
|
|
504
|
+
QUESTION:
|
|
505
|
+
{1}
|
|
506
|
+
""",
|
|
507
|
+
qa.context,
|
|
508
|
+
qa.prompt
|
|
509
|
+
)
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
# 4. Generate the answer using the well-formatted prompt column
|
|
513
|
+
qa.add_computed_column(
|
|
514
|
+
answer=openai.chat_completions(
|
|
515
|
+
model='gpt-4o-mini',
|
|
516
|
+
messages=[{
|
|
517
|
+
'role': 'user',
|
|
518
|
+
'content': qa.final_prompt
|
|
519
|
+
}]
|
|
520
|
+
).choices[0].message.content
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
# Ask a question and get the answer
|
|
524
|
+
qa.insert([{'prompt': 'What can you tell me about Amazon?'}])
|
|
525
|
+
print("--- Final Answer ---")
|
|
526
|
+
print(qa.select(qa.answer).collect())
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
## Notebook Gallery
|
|
530
|
+
|
|
531
|
+
Explore Pixeltable's capabilities interactively:
|
|
532
|
+
|
|
533
|
+
| Topic | Notebook | Topic | Notebook |
|
|
534
|
+
|:----------|:-----------------|:-------------------------|:---------------------------------:|
|
|
535
|
+
| **Fundamentals** | | **Integrations** | |
|
|
536
|
+
| 10-Min Tour | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/pixeltable-basics.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | OpenAI | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/integrations/working-with-openai.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
|
|
537
|
+
| Tables & Ops | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/fundamentals/tables-and-data-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Anthropic | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/integrations/working-with-anthropic.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
|
|
538
|
+
| UDFs | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/feature-guides/udfs-in-pixeltable.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Together AI | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/integrations/working-with-together.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
|
|
539
|
+
| Embedding Index | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/feature-guides/embedding-indexes.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Label Studio | <a target="_blank" href="https://docs.pixeltable.com/examples/vision/label-studio"> <img src="https://img.shields.io/badge/📚%20Docs-013056" alt="Visit Docs"/></a> |
|
|
540
|
+
| External Files | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/feature-guides/working-with-external-files.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Mistral | <a target="_blank" href="https://colab.research.google.com/github/mistralai/cookbook/blob/main/third_party/Pixeltable/incremental_prompt_engineering_and_model_comparison.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Github"/> |
|
|
541
|
+
| **Use Cases** | | **Sample Apps** | |
|
|
542
|
+
| RAG Demo | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/rag-demo.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> | Multimodal Agent | <a target="_blank" href="https://huggingface.co/spaces/Pixeltable/Multimodal-Powerhouse"> <img src="https://img.shields.io/badge/🤗%20Demo-FF7D04" alt="HF Space"/></a> |
|
|
543
|
+
| 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"/> |
|
|
544
|
+
| 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> |
|
|
545
|
+
|
|
546
|
+
## Maintaining Production-Ready Multimodal AI Apps is Still Too Hard
|
|
547
|
+
|
|
548
|
+
Building robust AI applications, especially [multimodal](https://docs.pixeltable.com/platform/type-system) ones,
|
|
549
|
+
requires stitching together numerous tools:
|
|
550
|
+
|
|
551
|
+
* ETL pipelines for data loading and transformation.
|
|
552
|
+
* Vector databases for semantic search.
|
|
553
|
+
* Feature stores for ML models.
|
|
554
|
+
* Orchestrators for scheduling.
|
|
555
|
+
* Model serving infrastructure for inference.
|
|
556
|
+
* Separate systems for parallelization, caching, versioning, and lineage tracking.
|
|
557
|
+
|
|
558
|
+
This complex "data plumbing" slows down development, increases costs, and makes applications brittle and hard to reproduce.
|
|
559
|
+
|
|
560
|
+
## Roadmap (2025)
|
|
561
|
+
|
|
562
|
+
### Cloud Infrastructure and Deployment
|
|
563
|
+
|
|
564
|
+
We're working on a hosted Pixeltable service that will:
|
|
565
|
+
|
|
566
|
+
* Enable Multimodal Data Sharing of Pixeltable Tables and Views | [Waitlist](https://www.pixeltable.com/waitlist)
|
|
567
|
+
* Provide a persistent cloud instance
|
|
568
|
+
* Turn Pixeltable workflows (Tables, Queries, UDFs) into API endpoints/[MCP Servers](https://github.com/pixeltable/pixeltable-mcp-server)
|
|
569
|
+
|
|
570
|
+
## Contributing
|
|
571
|
+
|
|
572
|
+
We love contributions! Whether it's reporting bugs, suggesting features, improving documentation, or submitting code
|
|
573
|
+
changes, please check out our [Contributing Guide](CONTRIBUTING.md) and join the
|
|
574
|
+
[Discussions](https://github.com/pixeltable/pixeltable/discussions) or our
|
|
575
|
+
[Discord Server](https://discord.gg/QPyqFYx2UN).
|
|
576
|
+
|
|
577
|
+
## License
|
|
578
|
+
|
|
579
|
+
Pixeltable is licensed under the Apache 2.0 License.
|