-
Notifications
You must be signed in to change notification settings - Fork 142
Feat/memory2 #1536
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
leshy
wants to merge
120
commits into
dev
Choose a base branch
from
feat/memory2
base: dev
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+6,705
−52
Open
Feat/memory2 #1536
Changes from all commits
Commits
Show all changes
120 commits
Select commit
Hold shift + click to select a range
ec93173
memory plans
leshy 5c23e89
spec iteration
leshy dc0f946
spec iteration
leshy 69540aa
query objects spec
leshy cc5939b
mem3 iteration
leshy a5d3f3c
live/passive transforms
leshy c87d955
initial pass on memory
leshy 76fbea1
transform materialize
leshy ef7fe1d
sqlite schema: decomposed pose columns, separate payload table, R*Tre…
leshy 936e2ce
JpegCodec for Image storage (43x smaller), ingest helpers, QualityWin…
leshy 852a7e9
Wire parent_id lineage through transforms for automatic source data p…
leshy d44aaaf
Wire parent_stream into _streams registry, add tasks.md gap analysis
leshy fa31471
Implement project_to() for cross-stream lineage projection
leshy 41a06f0
Make search_embedding auto-project to source stream
leshy bce7586
CaptionTransformer + Florence2 batch fix
leshy 8ad469e
ObservationSet: fetch() returns list-like + stream-like result set
leshy 2163179
search_embedding accepts str/image with auto-embedding
leshy 1bdd496
Add sqlite_vec to mypy ignore list (no type stubs available)
leshy 5130511
Fix mypy + pytest errors across memory and memory_old modules
leshy 219341f
Improve similarity heatmap with normalized values and distance spread
leshy e7f3fcd
Remove plans/ from tracking (kept locally)
leshy 92ee380
Address Greptile review: SQL injection guards, distance ordering, stubs
leshy de0efb9
Add memory Rerun visualization, fix stream iteration, update docs
leshy 314b4d3
Rename run_e2e_export → test_e2e_export, delete viz.py + run_viz_demo…
leshy 0b2983c
added docs
leshy ec499cd
removed tasks.md
leshy e344498
Optimize memory pipeline: TurboJPEG codec, sharpness downsample, thre…
leshy bf0b79a
text embedding transformer
leshy b4f9f96
cleanup
leshy 19a8db3
Use Codec protocol type instead of concrete union, remove dead _pose_…
leshy 2cbf162
correct db sessions
leshy 74df2de
record module cleanup
leshy e039f90
memory elements are now Resource, simplification of memory Module
leshy bd3a572
Rename stream.appended to stream.observable()/subscribe()
leshy 24a13de
repr, embedding fetch simplification
leshy d5db010
Make Observation generic: Observation[T] with full type safety
leshy 2d0bedc
Simplify Stream._clone with copy.copy, remove subclass overrides
leshy ce9f5e8
loader refactor
leshy 33ad5e1
Extract backend.load_data(), add stream.load_data(obs) public API
leshy 1b67959
Add rich colored __str__ to Stream and Filter types
leshy 2f66bc0
Unify __repr__ and __str__ via _rich_text().plain, remove duplicate r…
leshy e9078a9
renamed types to type
leshy 2b79919
one -> first, time range
leshy dfd06c4
getitem for streams
leshy 4734acf
readme sketch
leshy d6e5efc
bigoffice db in lfs, sqlite accepts Path
leshy 31cf8a8
projection transformers
leshy 04337db
stream info removed, stream accessor helper, TS unique per stream
leshy 6fc6e8d
Add colored summary() output and model= param to search_embedding
leshy a6a06e1
stream delete
leshy b9af997
florence model detail settings and prefix filter
leshy 1e42408
extracted formatting to a separate file
leshy 0c09d49
extract rich text rendering to formatting.py, add Stream.name, fix st…
leshy a954f79
matching based on streams
leshy ab48171
projection experiments
leshy a80bbb9
projection bugfix
leshy c7522d3
observationset typing fix
leshy decd090
detections, cleanup
leshy f51923d
mini adjustments
leshy 9edcbef
transform chaining
leshy 24c708d
memory2: lazy pull-based stream system
leshy 363f094
memory2: fix typing — zero type:ignore, proper generics
leshy 90a636a
memory2: fix .live() on transform streams — reject with clear error
leshy 2f029e4
memory2: replace custom Disposable with rxpy DisposableBase
leshy 4061b8f
memory2: extract filters and StreamQuery from type.py into filter.py
leshy a44d870
memory2: store transform on Stream node, not as source tuple
leshy 09ada62
memory2: move live logic from Stream into Backend via StreamQuery
leshy 9ef10ab
memory2: extract impl/ layer with MemoryStore and SqliteStore scaffold
leshy 87b94ad
memory2: add buffer.py docstring and extract buffer tests to test_buf…
leshy 8070379
memory2: add Codec protocol and grid test for store implementations
leshy dde8017
memory2: add codec implementations (pickle, lcm, jpeg) with grid tests
leshy 7ce2364
resource: add context manager to Resource; make Store/Session Resources
leshy d5dde81
resource: add CompositeResource with owned disposables
leshy 9d37f1d
memory2: add BlobStore ABC with File and SQLite implementations
leshy a83d7a2
memory2: move blobstore.md into blobstore/ as module readme
leshy b6c9543
memory2: add embedding layer, vector/text search, live safety guards
leshy 94aa659
memory2: add documentation for streaming model, codecs, and backends
leshy 1dc68b7
query application refactor
leshy 4d31779
memory2: replace LiveBackend with pluggable LiveChannel, add Configur…
leshy 690c5ec
memory2: make backends Configurable, add session→stream config propag…
leshy f73d8d4
memory2: wire VectorStore into ListBackend, add MemoryVectorStore
leshy c655739
memory2: wire BlobStore into ListBackend with lazy/eager blob loading
leshy 5b565db
memory2: allow bare generator functions as stream transforms
leshy da676f6
memory2: update docs to reflect current API
leshy a0c9c70
memory2: implement full SqliteBackend with vec0 vector search, JSONB …
leshy 0b09404
memory2: stream rows via cursor pagination instead of fetchall()
leshy df076ce
memory2: add lazy/eager blob tests and spy store delegation grid tests
leshy bcb98bd
memory2: add R*Tree spatial index for NearFilter SQL pushdown, add e2…
leshy 3c01a6e
auto index tags
leshy f368297
memory/stream str, and observables
leshy f89ad3f
live stream is a resource
leshy a32b44d
readme work
leshy db23275
streams and intro
leshy 9b14894
renamed readme to arch
leshy 67a6a83
Rename memory2 → memory, fix all imports and type errors
leshy f35cfe5
Merge remote-tracking branch 'origin/dev' into feat/memory/embedding
leshy 1a6c8a1
Revert memory rename: restore memory/ from dev, new code lives in mem…
leshy 2076ba4
Remove stray old memory module references
leshy 05c091d
Remove LFS test databases from PR
leshy 0570bc3
Address review findings: SQL injection guards, type fixes, cleanup
leshy 2dcfcd9
Revert detection type changes: keep image as required field
leshy e88e0e5
add libturbojpeg to docker image
leshy f29f766
Make turbojpeg import lazy so tests skip gracefully in CI
leshy c56e283
Give each SqliteBackend its own connection for WAL-mode concurrency
leshy 93d6afe
Block search_text on SqliteBackend to prevent full table scans
leshy 317562c
Catch RuntimeError from missing turbojpeg native library in codec tests
leshy 5a418c6
pr comments
leshy 99c3f3e
occupancy change undo
leshy 1103e3d
tests cleanup
leshy 32d75d8
compression codec added, new bigoffice db uploaded
leshy b7e25a9
correct jpeg codec
leshy c2e91d8
PR comments cleanup
leshy 8be106a
blobstore stream -> stream_name
leshy 1e28b50
vectorstore stream -> stream_name
leshy 6f3ef51
resource typing fixes
leshy 30959af
move type definitions into dimos/memory2/type/ subpackage
leshy 367fa4e
lz4 codec included, utils/ cleanup
leshy a0becc6
Merge remote-tracking branch 'origin/dev' into feat/memory2
leshy 02a2332
migrated stores to a new config system
leshy b3e7236
config fix
leshy File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Git LFS file not shown
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| from dimos.memory2.buffer import ( | ||
| BackpressureBuffer, | ||
| Bounded, | ||
| ClosedError, | ||
| DropNew, | ||
| KeepLast, | ||
| Unbounded, | ||
| ) | ||
| from dimos.memory2.embed import EmbedImages, EmbedText | ||
| from dimos.memory2.impl.memory import ListBackend, MemorySession, MemoryStore | ||
| from dimos.memory2.impl.sqlite import SqliteBackend, SqliteSession, SqliteStore, SqliteStoreConfig | ||
| from dimos.memory2.livechannel import SubjectChannel | ||
| from dimos.memory2.store import Session, SessionConfig, Store, StoreConfig, StreamNamespace | ||
| from dimos.memory2.stream import Stream | ||
| from dimos.memory2.transform import FnTransformer, QualityWindow, Transformer | ||
| from dimos.memory2.type.backend import Backend, LiveChannel, VectorStore | ||
| from dimos.memory2.type.filter import ( | ||
| AfterFilter, | ||
| AtFilter, | ||
| BeforeFilter, | ||
| Filter, | ||
| NearFilter, | ||
| PredicateFilter, | ||
| StreamQuery, | ||
| TagsFilter, | ||
| TimeRangeFilter, | ||
| ) | ||
| from dimos.memory2.type.observation import EmbeddedObservation, Observation | ||
|
|
||
| __all__ = [ | ||
| "AfterFilter", | ||
| "AtFilter", | ||
| "Backend", | ||
| "BackpressureBuffer", | ||
| "BeforeFilter", | ||
| "Bounded", | ||
| "ClosedError", | ||
| "DropNew", | ||
| "EmbedImages", | ||
| "EmbedText", | ||
| "EmbeddedObservation", | ||
| "Filter", | ||
| "FnTransformer", | ||
| "KeepLast", | ||
| "ListBackend", | ||
| "LiveChannel", | ||
| "MemorySession", | ||
| "MemoryStore", | ||
| "NearFilter", | ||
| "Observation", | ||
| "PredicateFilter", | ||
| "QualityWindow", | ||
| "Session", | ||
| "SessionConfig", | ||
| "SqliteBackend", | ||
| "SqliteSession", | ||
| "SqliteStore", | ||
| "SqliteStoreConfig", | ||
| "Store", | ||
| "StoreConfig", | ||
| "Stream", | ||
| "StreamNamespace", | ||
| "StreamQuery", | ||
| "SubjectChannel", | ||
| "TagsFilter", | ||
| "TimeRangeFilter", | ||
| "Transformer", | ||
| "Unbounded", | ||
| "VectorStore", | ||
| ] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,115 @@ | ||
| # memory | ||
|
|
||
| Observation storage and streaming layer for DimOS. Pull-based, lazy, composable. | ||
|
|
||
| ## Architecture | ||
|
|
||
| ``` | ||
| Live Sensor Data | ||
| ↓ | ||
| Store → Session → Stream → [filters / transforms / terminals] → Stream → [filters / transforms / terminals] → Stream → Live hooks | ||
| ↓ ↓ ↓ | ||
| Backend (ListBackend, SqliteBackend) Backend In Memory | ||
| ``` | ||
|
|
||
| **Store** owns a storage location (file, in-memory). **Session** manages named streams over a shared connection. **Stream** is the query/iteration surface — lazy until a terminal is called. | ||
|
|
||
|
|
||
| Supporting Systems: | ||
|
|
||
| - BlobStore — separates large payloads from metadata. FileBlobStore (files on disk) and SqliteBlobStore (blob table per stream). Supports lazy loading. | ||
| - Codecs — codec_for() auto-selects: JpegCodec for images (TurboJPEG, ~10-20x compression), LcmCodec for DimOS messages, PickleCodec fallback. | ||
| - Transformers — Transformer[T,R] ABC wrapping iterator-to-iterator. EmbedImages/EmbedText enrich observations with embeddings. QualityWindow keeps best per time window. | ||
| - Backpressure Buffers — KeepLast, Bounded, DropNew, Unbounded — bridge push/pull for live mode. | ||
|
|
||
|
|
||
| ## Modules | ||
|
|
||
| | Module | What | | ||
| |----------------|-------------------------------------------------------------------| | ||
| | `stream.py` | Stream node — filters, transforms, terminals | | ||
| | `backend.py` | Backend protocol, LiveChannel / VectorStore / BlobStore ABCs | | ||
| | `filter.py` | StreamQuery dataclass, filter types, Python query execution | | ||
| | `transform.py` | Transformer ABC, FnTransformer, FnIterTransformer, QualityWindow | | ||
| | `buffer.py` | Backpressure buffers for live mode (KeepLast, Bounded, Unbounded) | | ||
| | `store.py` | Store / Session (Configurable), StoreConfig / SessionConfig | | ||
| | `type.py` | Observation, EmbeddedObservation dataclasses | | ||
| | `embed.py` | EmbedImages / EmbedText transformers | | ||
|
|
||
| ## Subpackages | ||
|
|
||
| | Package | What | Docs | | ||
| |--------------|------------------------------------------------------|--------------------------------------------------| | ||
| | `impl/` | Backend implementations (ListBackend, SqliteBackend) | [impl/README.md](impl/README.md) | | ||
| | `livechannel/` | Live notification channels (SubjectChannel) | | | ||
| | `blobstore/` | Pluggable blob storage (file, sqlite) | [blobstore/blobstore.md](blobstore/blobstore.md) | | ||
| | `codecs/` | Encode/decode for storage (pickle, JPEG, LCM) | [codecs/README.md](codecs/README.md) | | ||
|
|
||
| ## Docs | ||
|
|
||
| | Doc | What | | ||
| |-----|------| | ||
| | [streaming.md](streaming.md) | Lazy vs materializing vs terminal — evaluation model, live safety | | ||
| | [embeddings.md](embeddings.md) | Embedding layer design — EmbeddedObservation, vector search, EmbedImages/EmbedText | | ||
| | [blobstore/blobstore.md](blobstore/blobstore.md) | BlobStore architecture — separate payload storage from metadata | | ||
|
|
||
| ## Query execution | ||
|
|
||
| `StreamQuery` holds the full query spec (filters, text search, vector search, ordering, offset/limit). It also provides `apply(iterator)` — a Python-side execution path that runs all operations as in-memory predicates, brute-force cosine, and list sorts. | ||
|
|
||
| This is the **default fallback**. Backends are free to push down operations using store-specific strategies instead: | ||
|
|
||
| | Operation | Python fallback (`StreamQuery.apply`) | Store push-down (example) | | ||
| |----------------|---------------------------------------|----------------------------------| | ||
| | Filters | `filter.matches()` predicates | SQL WHERE clauses | | ||
| | Text search | Case-insensitive substring | FTS5 full-text index | | ||
| | Vector search | Brute-force cosine similarity | vec0 / FAISS ANN index | | ||
| | Ordering | `sorted()` materialization | SQL ORDER BY | | ||
| | Offset / limit | `islice()` | SQL OFFSET / LIMIT | | ||
|
|
||
| `ListBackend` delegates entirely to `StreamQuery.apply()`. `SqliteBackend` translates the query into SQL and only falls back to Python for operations it can't express natively. | ||
|
|
||
| Transform-sourced streams (post `.transform()`) always use `StreamQuery.apply()` since there's no backend to push down to. | ||
|
|
||
| ## Quick start | ||
|
|
||
| ```python | ||
| from dimos.memory2 import MemoryStore | ||
|
|
||
| store = MemoryStore() | ||
| with store.session() as session: | ||
| images = session.stream("images") | ||
|
|
||
| # Write | ||
| images.append(frame, ts=time.time(), pose=(x, y, z), tags={"camera": "front"}) | ||
|
|
||
| # Query | ||
| recent = images.after(t).limit(10).fetch() | ||
| nearest = images.near(pose, radius=2.0).fetch() | ||
| latest = images.last() | ||
|
|
||
| # Transform (class or bare generator function) | ||
| edges = images.transform(Canny()).save(session.stream("edges")) | ||
|
|
||
| def running_avg(upstream): | ||
| total, n = 0.0, 0 | ||
| for obs in upstream: | ||
| total += obs.data; n += 1 | ||
| yield obs.derive(data=total / n) | ||
| avgs = stream.transform(running_avg).fetch() | ||
|
|
||
| # Live | ||
| for obs in images.live().transform(process): | ||
| handle(obs) | ||
|
|
||
| # Embed + search | ||
| images.transform(EmbedImages(clip)).save(session.stream("embedded")) | ||
| results = session.stream("embedded").search(query_vec, k=5).fetch() | ||
| ``` | ||
|
|
||
| ## Implementations | ||
|
|
||
| | Backend | Status | Storage | | ||
| |-----------------|----------|----------------------------------------| | ||
| | `ListBackend` | Complete | In-memory (lists + brute-force search) | | ||
| | `SqliteBackend` | Complete | SQLite (WAL, FTS5, vec0) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| # Copyright 2026 Dimensional Inc. | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| from dimos.memory2.blobstore.file import FileBlobStore | ||
| from dimos.memory2.blobstore.sqlite import SqliteBlobStore | ||
| from dimos.memory2.type.backend import BlobStore | ||
|
|
||
| __all__ = ["BlobStore", "FileBlobStore", "SqliteBlobStore"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,86 @@ | ||
| # blobstore/ | ||
|
|
||
| Separates payload blob storage from metadata indexing. Observation payloads vary hugely in size — a `Vector3` is 24 bytes, a camera frame is megabytes. Storing everything inline penalizes metadata queries. BlobStore lets large payloads live elsewhere. | ||
|
|
||
| ## ABC (`backend.py`) | ||
|
|
||
| ```python | ||
| class BlobStore(Resource, ABC): | ||
| def put(self, stream_name: str, key: int, data: bytes) -> None: ... | ||
| def get(self, stream_name: str, key: int) -> bytes: ... # raises KeyError if missing | ||
| def delete(self, stream_name: str, key: int) -> None: ... # silent if missing | ||
| ``` | ||
|
|
||
| - `stream_name` — stream name (used to organize storage: directories, tables) | ||
| - `key` — observation id | ||
| - `data` — encoded payload bytes (codec handles serialization, blob store handles persistence) | ||
| - Extends `Resource` (start/stop) but does NOT own its dependencies' lifecycle | ||
|
|
||
| ## Implementations | ||
|
|
||
| ### `file.py` — FileBlobStore | ||
|
|
||
| Stores blobs as files on disk, one directory per stream. | ||
|
|
||
| ``` | ||
| {root}/{stream}/{key}.bin | ||
| ``` | ||
|
|
||
| `__init__(root: str | os.PathLike[str])` — `start()` creates the root directory. | ||
|
|
||
| ### `sqlite.py` — SqliteBlobStore | ||
|
|
||
| Stores blobs in a separate SQLite table per stream. | ||
|
|
||
| ```sql | ||
| CREATE TABLE "{stream}_blob" (id INTEGER PRIMARY KEY, data BLOB NOT NULL) | ||
| ``` | ||
|
|
||
| `__init__(conn: sqlite3.Connection)` — does NOT own the connection. | ||
|
|
||
| **Internal use** (same db as metadata): `SqliteStore.session()` creates one connection, passes it to both the metadata backend and the blob store. | ||
|
|
||
| **External use** (separate db): user creates a separate connection and passes it. User manages that connection's lifecycle. | ||
|
|
||
| **JOIN optimization** (future): when `lazy=False` and the blob store shares the same connection as the metadata backend, `SqliteBackend` can optimize with a JOIN instead of separate queries: | ||
|
|
||
| ```sql | ||
| SELECT m.id, m.ts, m.pose, m.tags, b.data | ||
| FROM "images" m JOIN "images_blob" b ON m.id = b.id | ||
| WHERE m.ts > ? | ||
| ``` | ||
|
|
||
| ## Lazy loading | ||
|
|
||
| `lazy` is a stream-level flag, orthogonal to blob store choice. It controls WHEN data is loaded: | ||
|
|
||
| - `lazy=False` → backend loads payload during iteration (eager) | ||
| - `lazy=True` → backend sets `Observation._loader`, payload loaded on `.data` access | ||
|
|
||
| | lazy | blob store | loading strategy | | ||
| |------|-----------|-----------------| | ||
| | False | SqliteBlobStore (same conn) | JOIN — one round trip | | ||
| | False | any other | iterate meta, `blob_store.get()` per row | | ||
| | True | any | iterate meta only, `_loader = lambda: codec.decode(blob_store.get(...))` | | ||
|
|
||
| ## Usage | ||
|
|
||
| ```python | ||
| # Per-stream blob store choice | ||
| with store.session() as session: | ||
| poses = session.stream("poses", PoseStamped) # default, eager | ||
| images = session.stream("images", Image, lazy=True) # default, lazy | ||
| images = session.stream("images", Image, blob_store=file_blobs) # override | ||
| ``` | ||
|
|
||
| ## Files | ||
|
|
||
| ``` | ||
| backend.py BlobStore ABC (alongside Backend, LiveBackend) | ||
| blobstore/ | ||
| blobstore.md this file | ||
| __init__.py re-exports BlobStore, FileBlobStore, SqliteBlobStore | ||
| file.py FileBlobStore | ||
| sqlite.py SqliteBlobStore | ||
| test_blobstore.py grid tests across implementations | ||
| ``` |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think opencv stuff belongs in worker.py. Maybe add a
bootstrap_workerfunction in a different file and call it here.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah me niether,
this was actually consuming a bunch of resources so quickly prefixed dimos startup with this setting but obviously doesn't belong here.
should we have some "general lib config" file that's preloaded for all dimos runs? where should this be ran from?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think just configuring this in a different file should be sufficient.