pixeltable 0.4.6__py3-none-any.whl → 0.4.8__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.

Files changed (69) hide show
  1. pixeltable/__init__.py +4 -2
  2. pixeltable/catalog/__init__.py +1 -1
  3. pixeltable/catalog/catalog.py +7 -9
  4. pixeltable/catalog/column.py +49 -0
  5. pixeltable/catalog/insertable_table.py +0 -7
  6. pixeltable/catalog/schema_object.py +1 -14
  7. pixeltable/catalog/table.py +180 -67
  8. pixeltable/catalog/table_version.py +42 -146
  9. pixeltable/catalog/table_version_path.py +6 -5
  10. pixeltable/catalog/view.py +2 -1
  11. pixeltable/config.py +24 -9
  12. pixeltable/dataframe.py +5 -6
  13. pixeltable/env.py +113 -21
  14. pixeltable/exec/aggregation_node.py +1 -1
  15. pixeltable/exec/cache_prefetch_node.py +4 -3
  16. pixeltable/exec/exec_node.py +0 -8
  17. pixeltable/exec/expr_eval/expr_eval_node.py +2 -2
  18. pixeltable/exec/expr_eval/globals.py +1 -0
  19. pixeltable/exec/expr_eval/schedulers.py +52 -19
  20. pixeltable/exec/in_memory_data_node.py +2 -3
  21. pixeltable/exprs/array_slice.py +2 -2
  22. pixeltable/exprs/data_row.py +15 -2
  23. pixeltable/exprs/expr.py +9 -9
  24. pixeltable/exprs/function_call.py +61 -23
  25. pixeltable/exprs/globals.py +1 -2
  26. pixeltable/exprs/json_path.py +3 -3
  27. pixeltable/exprs/row_builder.py +25 -21
  28. pixeltable/exprs/string_op.py +3 -3
  29. pixeltable/func/expr_template_function.py +6 -3
  30. pixeltable/func/query_template_function.py +2 -2
  31. pixeltable/func/signature.py +30 -3
  32. pixeltable/func/tools.py +2 -2
  33. pixeltable/functions/anthropic.py +76 -27
  34. pixeltable/functions/deepseek.py +5 -1
  35. pixeltable/functions/gemini.py +11 -2
  36. pixeltable/functions/globals.py +2 -2
  37. pixeltable/functions/huggingface.py +6 -12
  38. pixeltable/functions/llama_cpp.py +9 -1
  39. pixeltable/functions/openai.py +76 -55
  40. pixeltable/functions/video.py +59 -6
  41. pixeltable/functions/vision.py +2 -2
  42. pixeltable/globals.py +86 -13
  43. pixeltable/io/datarows.py +3 -3
  44. pixeltable/io/fiftyone.py +7 -7
  45. pixeltable/io/globals.py +3 -3
  46. pixeltable/io/hf_datasets.py +4 -4
  47. pixeltable/io/label_studio.py +2 -1
  48. pixeltable/io/pandas.py +6 -6
  49. pixeltable/io/parquet.py +3 -3
  50. pixeltable/io/table_data_conduit.py +2 -2
  51. pixeltable/io/utils.py +2 -2
  52. pixeltable/iterators/audio.py +3 -2
  53. pixeltable/iterators/document.py +2 -8
  54. pixeltable/iterators/video.py +49 -9
  55. pixeltable/plan.py +0 -16
  56. pixeltable/share/packager.py +51 -42
  57. pixeltable/share/publish.py +134 -7
  58. pixeltable/store.py +5 -25
  59. pixeltable/type_system.py +5 -8
  60. pixeltable/utils/__init__.py +2 -2
  61. pixeltable/utils/arrow.py +5 -5
  62. pixeltable/utils/description_helper.py +3 -3
  63. pixeltable/utils/iceberg.py +1 -2
  64. pixeltable/utils/media_store.py +131 -66
  65. {pixeltable-0.4.6.dist-info → pixeltable-0.4.8.dist-info}/METADATA +238 -122
  66. {pixeltable-0.4.6.dist-info → pixeltable-0.4.8.dist-info}/RECORD +69 -69
  67. {pixeltable-0.4.6.dist-info → pixeltable-0.4.8.dist-info}/WHEEL +0 -0
  68. {pixeltable-0.4.6.dist-info → pixeltable-0.4.8.dist-info}/entry_points.txt +0 -0
  69. {pixeltable-0.4.6.dist-info → pixeltable-0.4.8.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pixeltable
3
- Version: 0.4.6
3
+ Version: 0.4.8
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
@@ -67,7 +67,8 @@ Description-Content-Type: text/markdown
67
67
  ![Platform Support](https://img.shields.io/badge/platform-Linux%20%7C%20macOS%20%7C%20Windows-E5DDD4)
68
68
  <br>
69
69
  [![tests status](https://github.com/pixeltable/pixeltable/actions/workflows/pytest.yml/badge.svg)](https://github.com/pixeltable/pixeltable/actions/workflows/pytest.yml)
70
- [![tests status](https://github.com/pixeltable/pixeltable/actions/workflows/nightly.yml/badge.svg)](https://github.com/pixeltable/pixeltable/actions/workflows/nightly.yml)
70
+ [![nightly status](https://github.com/pixeltable/pixeltable/actions/workflows/nightly.yml/badge.svg)](https://github.com/pixeltable/pixeltable/actions/workflows/nightly.yml)
71
+ [![stress-tests status](https://github.com/pixeltable/pixeltable/actions/workflows/stress-tests.yml/badge.svg)](https://github.com/pixeltable/pixeltable/actions/workflows/stress-tests.yml)
71
72
  [![PyPI Package](https://img.shields.io/pypi/v/pixeltable?color=4D148C)](https://pypi.org/project/pixeltable/)
72
73
  [![My Discord (1306431018890166272)](https://img.shields.io/badge/💬-Discord-%235865F2.svg)](https://discord.gg/QPyqFYx2UN)
73
74
 
@@ -82,137 +83,234 @@ Description-Content-Type: text/markdown
82
83
 
83
84
  ---
84
85
 
85
- Pixeltable is the only Python framework that provides incremental storage, transformation, indexing, and orchestration of your multimodal data.
86
+ ## 💾 Installation
86
87
 
87
- ## 😩 Maintaining Production-Ready Multimodal AI Apps is Still Too Hard
88
+ ```python
89
+ pip install pixeltable
90
+ ```
88
91
 
89
- Building robust AI applications, especially [multimodal](https://docs.pixeltable.com/docs/datastore/bringing-data) ones, requires stitching together numerous tools:
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.
92
+ **Pixeltable unifies storage, retrieval, and orchestration for multimodal data.**
93
+ It stores metadata and computed results persistently, typically in a `.pixeltable` directory in your workspace.
96
94
 
97
- This complex "data plumbing" slows down development, increases costs, and makes applications brittle and hard to reproduce.
95
+ ## Pixeltable Demo
98
96
 
99
- ## 💾 Installation
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/docs/datastore/computed-columns)** on
103
+ **[tables](https://docs.pixeltable.com/docs/datastore/tables-and-operations)**.
104
+ Focus on your application logic, not the data plumbing.
100
105
 
101
106
  ```python
102
- pip install pixeltable
103
- ```
104
107
 
105
- **Pixeltable is a database.** 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.
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 managemennt
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')
106
145
 
107
- ## What is Pixeltable?
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
+ ```
108
154
 
109
- 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)**. Pixeltable's engine then automatically handles:
155
+ ## What Happened?
156
+
157
+ * **Data Ingestion & Storage:** References [files](https://docs.pixeltable.com/docs/datastore/bringing-data)
158
+ (images, videos, audio, docs) in place, handles structured data.
159
+ * **Transformation & Processing:** Applies *any* Python function ([UDFs](https://docs.pixeltable.com/docs/datastore/custom-functions))
160
+ or built-in operations ([chunking, frame extraction](https://docs.pixeltable.com/docs/datastore/iterators)) automatically.
161
+ * **AI Model Integration:** Runs inference ([embeddings](https://docs.pixeltable.com/docs/datastore/embedding-index),
162
+ [object detection](https://docs.pixeltable.com/docs/examples/vision/yolox),
163
+ [LLMs](https://docs.pixeltable.com/docs/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/docs/datastore/embedding-index#phase-3%3A-query)
166
+ alongside traditional filtering.
167
+ * **Incremental Computation:** Only [recomputes](https://docs.pixeltable.com/docs/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/docs/datastore/tables-and-operations)** `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
+ ```
110
203
 
111
- * **Data Ingestion & Storage:** References [files](https://docs.pixeltable.com/docs/datastore/bringing-data) (images, videos, audio, docs) in place, handles structured data.
112
- * **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.
113
- * **AI Model Integration:** Runs inference ([embeddings](https://docs.pixeltable.com/docs/datastore/embedding-index), [object detection](https://docs.pixeltable.com/docs/examples/vision/yolox), [LLMs](https://docs.pixeltable.com/docs/integrations/frameworks#cloud-llm-providers)) as part of the data pipeline.
114
- * **Indexing & Retrieval:** Creates and manages vector indexes for fast [semantic search](https://docs.pixeltable.com/docs/datastore/embedding-index#phase-3%3A-query) alongside traditional filtering.
115
- * **Incremental Computation:** Only [recomputes](https://docs.pixeltable.com/docs/overview/quick-start) what's necessary when data or code changes, saving time and cost.
116
- * **Versioning & Lineage:** Automatically tracks data and schema changes for reproducibility.
204
+ * **[Declarative Computed Columns:](https://docs.pixeltable.com/docs/datastore/computed-columns)** Define processing
205
+ steps once; they run automatically on new/updated data.
117
206
 
118
- **Focus on your application logic, not the infrastructure.**
207
+ ```python
208
+ t.add_computed_column(
209
+ classification=huggingface.vit_for_image_classification(
210
+ t.image
211
+ )
212
+ )
213
+ ```
119
214
 
215
+ * **[Built-in Vector Search:](https://docs.pixeltable.com/docs/datastore/embedding-index)** Add embedding indexes and
216
+ perform similarity searches directly on tables/views.
120
217
 
121
- ## 🚀 Key Features
218
+ ```python
219
+ t.add_embedding_index(
220
+ 'img',
221
+ embedding=clip.using(
222
+ model_id='openai/clip-vit-base-patch32'
223
+ )
224
+ )
122
225
 
123
- * **[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
- ```python
125
- t = pxt.create_table(
126
- 'media',
127
- {
128
- 'img': pxt.Image,
129
- 'video': pxt.Video
130
- }
131
- )
132
- ```
226
+ sim = t.img.similarity("cat playing with yarn")
227
+ ```
133
228
 
134
- * **[Declarative Computed Columns:](https://docs.pixeltable.com/docs/datastore/computed-columns)** Define processing steps once; they run automatically on new/updated data.
135
- ```python
136
- t.add_computed_column(
137
- classification=huggingface.vit_for_image_classification(
138
- t.image
229
+ * **[On-the-Fly Data Views:](https://docs.pixeltable.com/docs/datastore/views)** Create virtual tables using iterators
230
+ for efficient processing without data duplication.
231
+
232
+ ```python
233
+ frames = pxt.create_view(
234
+ 'frames',
235
+ videos,
236
+ iterator=FrameIterator.create(
237
+ video=videos.video,
238
+ fps=1
239
+ )
139
240
  )
140
- )
141
- ```
142
-
143
- * **[Built-in Vector Search:](https://docs.pixeltable.com/docs/datastore/embedding-index)** Add embedding indexes and perform similarity searches directly on tables/views.
144
- ```python
145
- t.add_embedding_index(
146
- 'img',
147
- embedding=clip.using(
148
- model_id='openai/clip-vit-base-patch32'
241
+ ```
242
+
243
+ * **[Seamless AI Integration:](https://docs.pixeltable.com/docs/integrations/frameworks)** Built-in functions for
244
+ OpenAI, Anthropic, Hugging Face, CLIP, YOLOX, and more.
245
+
246
+ ```python
247
+ t.add_computed_column(
248
+ response=openai.chat_completions(
249
+ messages=[{"role": "user", "content": t.prompt}]
250
+ )
149
251
  )
150
- )
151
-
152
- sim = t.img.similarity("cat playing with yarn")
153
- ```
154
-
155
- * **[On-the-Fly Data Views:](https://docs.pixeltable.com/docs/datastore/views)** Create virtual tables using iterators for efficient processing without data duplication.
156
- ```python
157
- frames = pxt.create_view(
158
- 'frames',
159
- videos,
160
- iterator=FrameIterator.create(
161
- video=videos.video,
162
- fps=1
252
+ ```
253
+
254
+ * **[Bring Your Own Code:](https://docs.pixeltable.com/docs/datastore/custom-functions)** Extend Pixeltable with simple
255
+ Python User-Defined Functions.
256
+
257
+ ```python
258
+ @pxt.udf
259
+ def format_prompt(context: list, question: str) -> str:
260
+ return f"Context: {context}\nQuestion: {question}"
261
+ ```
262
+
263
+ * **[Agentic Workflows / Tool Calling:](https://docs.pixeltable.com/docs/examples/chat/tools)** Register `@pxt.udf` or
264
+ `@pxt.query` functions as tools and orchestrate LLM-based tool use (incl. multimodal).
265
+
266
+ ```python
267
+ # Example tools: a UDF and a Query function for RAG
268
+ tools = pxt.tools(get_weather_udf, search_context_query)
269
+
270
+ # LLM decides which tool to call; Pixeltable executes it
271
+ t.add_computed_column(
272
+ tool_output=invoke_tools(tools, t.llm_tool_choice)
163
273
  )
164
- )
165
- ```
166
-
167
- * **[Seamless AI Integration:](https://docs.pixeltable.com/docs/integrations/frameworks)** Built-in functions for OpenAI, Anthropic, Hugging Face, CLIP, YOLOX, and more.
168
- ```python
169
- t.add_computed_column(
170
- response=openai.chat_completions(
171
- messages=[{"role": "user", "content": t.prompt}]
274
+ ```
275
+
276
+ * **[Data Persistence:](https://docs.pixeltable.com/docs/datastore/tables-and-operations#data-operations)** All data,
277
+ metadata, and computed results are automatically stored and versioned.
278
+
279
+ ```python
280
+ t = pxt.get_table('my_table') # Get a handle to an existing table
281
+ t.select(t.account, t.balance).collect() # Query its contents
282
+ t.revert() # Undo the last modification to the table and restore its previous state
283
+ ```
284
+
285
+ * **[Time Travel:](https://docs.pixeltable.com/docs/datastore/tables-and-operations#data-operations)** By default,
286
+ Pixeltable preserves the full change history of each table, and any prior version can be selected and queried.
287
+
288
+ ```python
289
+ t.history() # Display a human-readable list of all prior versions of the table
290
+ old_version = pxt.get_table('my_table:472') # Get a handle to a specific table version
291
+ old_version.select(t.account, t.balance).collect() # Query the older version
292
+ ```
293
+
294
+ * **[SQL-like Python Querying:](https://docs.pixeltable.com/docs/datastore/filtering-and-selecting)** Familiar syntax
295
+ combined with powerful AI capabilities.
296
+
297
+ ```python
298
+ results = (
299
+ t.where(t.score > 0.8)
300
+ .order_by(t.timestamp)
301
+ .select(t.image, score=t.score)
302
+ .limit(10)
303
+ .collect()
172
304
  )
173
- )
174
- ```
175
-
176
- * **[Bring Your Own Code:](https://docs.pixeltable.com/docs/datastore/custom-functions)** Extend Pixeltable with simple Python User-Defined Functions.
177
- ```python
178
- @pxt.udf
179
- def format_prompt(context: list, question: str) -> str:
180
- return f"Context: {context}\nQuestion: {question}"
181
- ```
182
-
183
- * **[Agentic Workflows / Tool Calling:](https://docs.pixeltable.com/docs/examples/chat/tools)** Register `@pxt.udf` or `@pxt.query` functions as tools and orchestrate LLM-based tool use (incl. multimodal).
184
- ```python
185
- # Example tools: a UDF and a Query function for RAG
186
- tools = pxt.tools(get_weather_udf, search_context_query)
187
-
188
- # LLM decides which tool to call; Pixeltable executes it
189
- t.add_computed_column(
190
- tool_output=invoke_tools(tools, t.llm_tool_choice)
191
- )
192
- ```
193
-
194
- * **[Persistent & Versioned:](https://docs.pixeltable.com/docs/datastore/tables-and-operations#data-operations)** All data, metadata, and computed results are automatically stored.
195
- ```python
196
- t.revert() # Revert to a previous version
197
- stored_table = pxt.get_table('my_existing_table') # Retrieve persisted table
198
- ```
199
-
200
- * **[SQL-like Python Querying:](https://docs.pixeltable.com/docs/datastore/filtering-and-selecting)** Familiar syntax combined with powerful AI capabilities.
201
- ```python
202
- results = (
203
- t.where(t.score > 0.8)
204
- .order_by(t.timestamp)
205
- .select(t.image, score=t.score)
206
- .limit(10)
207
- .collect()
208
- )
209
- ```
305
+ ```
210
306
 
211
307
  ## 💡 Key Examples
212
308
 
213
- *(See the [Full Quick Start](https://docs.pixeltable.com/docs/overview/quick-start) or [Notebook Gallery](#-notebook-gallery) for more details)*
309
+ *(See the [Full Quick Start](https://docs.pixeltable.com/docs/overview/quick-start) or
310
+ [Notebook Gallery](#-notebook-gallery) for more details)*
214
311
 
215
312
  **1. Multimodal Data Store and Data Transformation (Computed Column):**
313
+
216
314
  ```bash
217
315
  pip install pixeltable
218
316
  ```
@@ -222,14 +320,14 @@ import pixeltable as pxt
222
320
 
223
321
  # Create a table
224
322
  t = pxt.create_table(
225
- 'films',
226
- {'name': pxt.String, 'revenue': pxt.Float, 'budget': pxt.Float},
323
+ 'films',
324
+ {'name': pxt.String, 'revenue': pxt.Float, 'budget': pxt.Float},
227
325
  if_exists="replace"
228
326
  )
229
327
 
230
328
  t.insert([
231
- {'name': 'Inside Out', 'revenue': 800.5, 'budget': 200.0},
232
- {'name': 'Toy Story', 'revenue': 1073.4, 'budget': 200.0}
329
+ {'name': 'Inside Out', 'revenue': 800.5, 'budget': 200.0},
330
+ {'name': 'Toy Story', 'revenue': 1073.4, 'budget': 200.0}
233
331
  ])
234
332
 
235
333
  # Add a computed column for profit - runs automatically!
@@ -371,13 +469,13 @@ qa.add_computed_column(context=get_relevant_context(qa.prompt))
371
469
  qa.add_computed_column(
372
470
  final_prompt=pxtf.string.format(
373
471
  """
374
- PASSAGES:
472
+ PASSAGES:
375
473
  {0}
376
-
377
- QUESTION:
474
+
475
+ QUESTION:
378
476
  {1}
379
- """,
380
- qa.context,
477
+ """,
478
+ qa.context,
381
479
  qa.prompt
382
480
  )
383
481
  )
@@ -416,18 +514,36 @@ Explore Pixeltable's capabilities interactively:
416
514
  | 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
515
  | 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
516
 
517
+ ## 🚨 Maintaining Production-Ready Multimodal AI Apps is Still Too Hard
518
+
519
+ Building robust AI applications, especially [multimodal](https://docs.pixeltable.com/docs/datastore/bringing-data) ones,
520
+ requires stitching together numerous tools:
521
+
522
+ * ETL pipelines for data loading and transformation.
523
+ * Vector databases for semantic search.
524
+ * Feature stores for ML models.
525
+ * Orchestrators for scheduling.
526
+ * Model serving infrastructure for inference.
527
+ * Separate systems for parallelization, caching, versioning, and lineage tracking.
528
+
529
+ This complex "data plumbing" slows down development, increases costs, and makes applications brittle and hard to reproduce.
530
+
419
531
  ## 🔮 Roadmap (2025)
420
532
 
421
533
  ### Cloud Infrastructure and Deployment
534
+
422
535
  We're working on a hosted Pixeltable service that will:
423
536
 
424
- - Enable Multimodal Data Sharing of Pixeltable Tables and Views
425
- - Provide a persistent cloud instance
426
- - Turn Pixeltable workflows (Tables, Queries, UDFs) into API endpoints/[MCP Servers](https://github.com/pixeltable/pixeltable-mcp-server)
537
+ * Enable Multimodal Data Sharing of Pixeltable Tables and Views | [Waitlist](https://www.pixeltable.com/waitlist)
538
+ * Provide a persistent cloud instance
539
+ * Turn Pixeltable workflows (Tables, Queries, UDFs) into API endpoints/[MCP Servers](https://github.com/pixeltable/pixeltable-mcp-server)
427
540
 
428
541
  ## 🤝 Contributing
429
542
 
430
- We love contributions! Whether it's reporting bugs, suggesting features, improving documentation, or submitting code changes, please check out our [Contributing Guide](CONTRIBUTING.md) and join the [Discussions](https://github.com/pixeltable/pixeltable/discussions) or our [Discord Server](https://discord.gg/QPyqFYx2UN).
543
+ We love contributions! Whether it's reporting bugs, suggesting features, improving documentation, or submitting code
544
+ changes, please check out our [Contributing Guide](CONTRIBUTING.md) and join the
545
+ [Discussions](https://github.com/pixeltable/pixeltable/discussions) or our
546
+ [Discord Server](https://discord.gg/QPyqFYx2UN).
431
547
 
432
548
  ## 🏢 License
433
549