-
Notifications
You must be signed in to change notification settings - Fork 853
π feat(inspect): Geti Inspect #3158
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
base: main
Are you sure you want to change the base?
Conversation
Mainly based on the UI files and architecture from [Geti Tune](https://github.com/open-edge-platform/training_extensions/tree/develop/ui)
* initial backend commit Signed-off-by: Ma, Xiangxiang <[email protected]> * app -> src Signed-off-by: Ma, Xiangxiang <[email protected]> * Remove empty file Signed-off-by: Ma, Xiangxiang <[email protected]> * move code Signed-off-by: Ma, Xiangxiang <[email protected]> * fix style backend Signed-off-by: Ma, Xiangxiang <[email protected]> * rename media endpoint Signed-off-by: Ma, Xiangxiang <[email protected]> --------- Signed-off-by: Ma, Xiangxiang <[email protected]>
add unit tests for endpoints Signed-off-by: Ma, Xiangxiang <[email protected]>
These won't be needed yet
* Use src folder inside run.sh * Set openapi_url path * Update to react 19 * Specify bash language in readme
* add training + inference endpoint Signed-off-by: Ma, Xiangxiang <[email protected]> * remove model api Signed-off-by: Ma, Xiangxiang <[email protected]> * cleanup code Signed-off-by: Ma, Xiangxiang <[email protected]> * update async execution Signed-off-by: Ma, Xiangxiang <[email protected]> * improve training worker loop and predict endpoint Signed-off-by: Ma, Xiangxiang <[email protected]> * fix style Signed-off-by: Ma, Xiangxiang <[email protected]> * fix style to use python3.10 generics Signed-off-by: Ma, Xiangxiang <[email protected]> * add tests for services Signed-off-by: Ma, Xiangxiang <[email protected]> * style fix Signed-off-by: Ma, Xiangxiang <[email protected]> * style fix Signed-off-by: Ma, Xiangxiang <[email protected]> * style fix Signed-off-by: Ma, Xiangxiang <[email protected]> * style fix Signed-off-by: Ma, Xiangxiang <[email protected]> * style fix Signed-off-by: Ma, Xiangxiang <[email protected]> --------- Signed-off-by: Ma, Xiangxiang <[email protected]>
* Add github actions for ui and server of geti inspect * Exclude UI from pre-commit prettier configuration The UI uses a different prettier configuration that does not seem to be picked up by pre-commit. * Add newline to .prettierignore * Apply prettier to `geti-inspect.yaml` * Generate OpenAPI spec before running UI checks * Checkout with lfs * Fix lint issues by removing wip components * Try installing git lfs in the playwright docker image * Fix unused noqa
* Add OpenAPI route * Remove MSW browser worker * Rename infernece to inspect * Update navbar title * Rename infernece to inspect
* rename models/ to pydantic_models/ Signed-off-by: Ma, Xiangxiang <[email protected]> * switch to use async session context manager Signed-off-by: Ma, Xiangxiang <[email protected]> * fix unit tests Signed-off-by: Ma, Xiangxiang <[email protected]> * add pipeline endpoints Signed-off-by: Ma, Xiangxiang <[email protected]> * fix frame aquisition worker and rename pipiline endpoints Signed-off-by: Ma, Xiangxiang <[email protected]> * add sources and sinks endpoints Signed-off-by: Ma, Xiangxiang <[email protected]> * stream loading working Signed-off-by: Ma, Xiangxiang <[email protected]> * add webrtc endpoints Signed-off-by: Ma, Xiangxiang <[email protected]> * fix workers: stream loading + inference + dispatcher Signed-off-by: Ma, Xiangxiang <[email protected]> * fix sinks Signed-off-by: Ma, Xiangxiang <[email protected]> * style Signed-off-by: Ma, Xiangxiang <[email protected]> * add unit tests and address comments Signed-off-by: Ma, Xiangxiang <[email protected]> * add tests Signed-off-by: Ma, Xiangxiang <[email protected]> * fix example schema Signed-off-by: Ma, Xiangxiang <[email protected]> * add todo Signed-off-by: Ma, Xiangxiang <[email protected]> --------- Signed-off-by: Ma, Xiangxiang <[email protected]>
* chore: Add path alias to icons * feat: Add sidebar with dataset, models and stats
* feat: Display placeholders for images * refactor: Fix scrollbar * chore: Remove learn more
* chore(inspect): Update UI scripts * chore: Update github actions * chore: Update port to 8000
* chore: Add project route * feat: Add project management * revert ui lock change * chore: Remove not needed code for project management
β¦ts from the UI (#2980) chore(inspect): Update allowed origins
β¦ training progress (#2984) * feat: Allow user to upload images * feat: List uploaded images * chore: Extract components to separate files and add ready to train and training progress * chore: comment thumbnail url generation
chore(inspect): Update openapi page title
β¦of email (#2990) refactor: Update photo placeholder to use indicator instead of email
Improve error and suspense handling in router By moving all of the routes into a single root route we can make sure that all routes are rendered inside of an layout that has a suspense and error boundary.
Signed-off-by: Ashwin Vaidya <[email protected]>
β¦#2992) refactor: Improvements to the jobs management and training
chore(inspect): Add more models
π fix(inspect): Fix unable to start train job
chore(inspect): Update uv.lock
* add trainable models endpoint * fix Signed-off-by: Ma, Xiangxiang <[email protected]> * add test Signed-off-by: Ma, Xiangxiang <[email protected]> * add copyright Signed-off-by: Ma, Xiangxiang <[email protected]> --------- Signed-off-by: Ma, Xiangxiang <[email protected]>
* add thumbnails endpoint Signed-off-by: Ma, Xiangxiang <[email protected]> * add tests Signed-off-by: Ma, Xiangxiang <[email protected]> * generate thumbnails as background task Signed-off-by: Ma, Xiangxiang <[email protected]> * update docstring Signed-off-by: Ma, Xiangxiang <[email protected]> --------- Signed-off-by: Ma, Xiangxiang <[email protected]>
* remove item from view modal Signed-off-by: Colorado, Camilo <[email protected]> * download button Signed-off-by: Colorado, Camilo <[email protected]> * new end list hook Signed-off-by: Colorado, Camilo <[email protected]> * LoadMoreList component Signed-off-by: Colorado, Camilo <[email protected]> --------- Signed-off-by: Colorado, Camilo <[email protected]>
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.
Pull request overview
Copilot reviewed 229 out of 448 changed files in this pull request and generated 1 comment.
π‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| style={{ | ||
| // Enable hardware acceleration | ||
| transform: 'translate3d(0, 0, 0)', | ||
| '--zoom-scale': zoom.scale, |
Copilot
AI
Dec 9, 2025
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.
[nitpick] CSS custom property value should be converted to a string. While JavaScript may coerce the number, explicit conversion with .toString() or template literal is more reliable and matches CSS custom property best practices.
| '--zoom-scale': zoom.scale, | |
| '--zoom-scale': `${zoom.scale}`, |
feat(inspect): add contextual help for compression types in export model dialog Signed-off-by: Dmitry Kalinin <[email protected]>
β¦3201) * fix pipeline visualization Signed-off-by: Max Xiang <[email protected]> * fix tests Signed-off-by: Max Xiang <[email protected]> * make max_epochs optional Signed-off-by: Max Xiang <[email protected]> * make max_epochs optional Signed-off-by: Max Xiang <[email protected]> * add pipeline overlay on/off Signed-off-by: Max Xiang <[email protected]> * make fps more reactive Signed-off-by: Max Xiang <[email protected]> * address comment Signed-off-by: Max Xiang <[email protected]> * enable/disable pipeline overlay Signed-off-by: Colorado, Camilo <[email protected]> * COLOR_RGB2BGR Signed-off-by: Max Xiang <[email protected]> * enabled -> overlay Signed-off-by: Max Xiang <[email protected]> --------- Signed-off-by: Max Xiang <[email protected]> Signed-off-by: Colorado, Camilo <[email protected]> Co-authored-by: Colorado, Camilo <[email protected]>
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.
Pull request overview
Copilot reviewed 229 out of 448 changed files in this pull request and generated 1 comment.
π‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| # - Multiple training jobs to run concurrently | ||
| # - Event loop to remain responsive for shutdown signals | ||
| if len(running_tasks) < MAX_CONCURRENT_TRAINING: | ||
| running_tasks.add(asyncio.create_task(training_service.train_pending_job())) |
Copilot
AI
Dec 10, 2025
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.
The fire-and-forget task creation could lead to unhandled exceptions being silently ignored. Consider storing task exceptions and logging them. For example: task = asyncio.create_task(training_service.train_pending_job()); task.add_done_callback(lambda t: logger.error(f'Task failed: {t.exception()}') if t.exception() else None)
| running_tasks.add(asyncio.create_task(training_service.train_pending_job())) | |
| task = asyncio.create_task(training_service.train_pending_job()) | |
| task.add_done_callback( | |
| lambda t: logger.error(f"Task failed: {t.exception()}", exc_info=True) if t.exception() else None | |
| ) | |
| running_tasks.add(task) |
* limit next page request Signed-off-by: Colorado, Camilo <[email protected]> * load paginated projects Signed-off-by: Colorado, Camilo <[email protected]> --------- Signed-off-by: Colorado, Camilo <[email protected]>
* reorder anomaly-map Signed-off-by: Colorado, Camilo <[email protected]> * selection card style Signed-off-by: Colorado, Camilo <[email protected]> * field validations Signed-off-by: Colorado, Camilo <[email protected]> * disable remove source/sink when connected to a pipeline Signed-off-by: Colorado, Camilo <[email protected]> --------- Signed-off-by: Colorado, Camilo <[email protected]>
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.
Pull request overview
Copilot reviewed 231 out of 454 changed files in this pull request and generated no new comments.
π‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Update Playwright to 1.57 I've also ran `npm audit fix` to fix minor security vulnerabilities related to our linting tools. Signed-off-by: Mark Redeman <[email protected]>
* Add early stopping Signed-off-by: Ashwin Vaidya <[email protected]> * Fix test Signed-off-by: Ashwin Vaidya <[email protected]> --------- Signed-off-by: Ashwin Vaidya <[email protected]>
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.
Pull request overview
Copilot reviewed 230 out of 454 changed files in this pull request and generated no new comments.
π‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
* feat(model): ensure associated training job is deleted when a model is removed Signed-off-by: Dmitry Kalinin <[email protected]> * Fixed linter Signed-off-by: Dmitry Kalinin <[email protected]> * Fixed linter Signed-off-by: Dmitry Kalinin <[email protected]> * Update application/backend/src/services/model_service.py Co-authored-by: Copilot <[email protected]> Signed-off-by: Dmitry Kalinin <[email protected]> --------- Signed-off-by: Dmitry Kalinin <[email protected]> Co-authored-by: Copilot <[email protected]>
* feat(export): fix INT8_PTQ and INT8_ACQ export by passing a datamodule to export * feat(export): enhance INT8_PTQ and INT8_ACQ export by integrating dataset snapshot as datamodule * fix(export): Undo changes to export_mixin library file. * refactor(model_service): remove unused import of DatasetSnapshot * refactor(model_service): reorder import statements for consistency * fix(model_service): remove trailing space in export comment * Update application/backend/src/services/model_service.py Signed-off-by: Rajesh Gangireddy <[email protected]> * fix(model_service): remove trailing space in export_model method * refactor(model_service): streamline export_model method by removing redundant comments * fix(model_service): remove unnecessary blank line in export_model method * Update application/backend/src/services/model_service.py Signed-off-by: Rajesh Gangireddy <[email protected]> --------- Signed-off-by: Rajesh Gangireddy <[email protected]>
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.
Pull request overview
Copilot reviewed 228 out of 454 changed files in this pull request and generated 1 comment.
π‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // TODO: | ||
| // 1. Add scale restrictions - min max | ||
| // 2. Add translate restrictions - min max |
Copilot
AI
Dec 15, 2025
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.
These TODO comments indicate incomplete functionality for zoom restrictions. Consider creating tickets to track this technical debt or implementing the scale and translate restrictions.
* Enable training on XPU using SingleXPUStrategy Setting the SingleXPUStrategy fixes the error message, ``` Failed to train pending training job: Device should be xpu, got cpu instead ``` After this another error would show up, ``` Cannot re-initialize XPU in forked subproces. To use XPU with multiprocessing you must use the `spawn` method ``` This requires us to set the start method of our `main.py` file. Signed-off-by: Mark Redeman <[email protected]> * Move `set_start_method` to main block Signed-off-by: Mark Redeman <[email protected]> --------- Signed-off-by: Mark Redeman <[email protected]>
* feat(inspect): enhance training status adapter with SSE progress tracking Signed-off-by: Dmitry Kalinin <[email protected]> * Fixed comments Signed-off-by: Dmitry Kalinin <[email protected]> * Fixed typing Signed-off-by: Dmitry Kalinin <[email protected]> --------- Signed-off-by: Dmitry Kalinin <[email protected]>
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.
Pull request overview
Copilot reviewed 228 out of 454 changed files in this pull request and generated 2 comments.
π‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| import { paths } from './openapi-spec'; | ||
| import spec from './openapi-spec.json' with { type: 'json' }; | ||
|
|
||
| const handlers = await fromOpenApi(JSON.stringify(spec).replace(/}:/g, '}//:')); |
Copilot
AI
Dec 17, 2025
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.
The regex replacement replace(/}:/g, '}//:') modifying the OpenAPI spec appears to be a workaround. Add a comment explaining why this transformation is necessary for MSW to properly handle the spec, as this is not immediately obvious.
| const handlers = await fromOpenApi(JSON.stringify(spec).replace(/}:/g, '}//:')); | |
| // MSW's OpenAPI parser struggles with paths that have an operation suffix | |
| // immediately after a path parameter, e.g. `/api/models/{model_name}:activate`. | |
| // To work around this, we rewrite `}:` to `}//:` in the serialized spec so that | |
| // `@mswjs/source/open-api` can parse these routes, and then later escape the | |
| // colon at runtime in `post` via `path.replace('}:', '}\\:')`. | |
| const handlers = await fromOpenApi( | |
| JSON.stringify(spec).replace(/}:/g, '}//:') | |
| ); |
| mock_bin_repo = MagicMock() | ||
|
|
||
| # Capture arguments to validate content and filename | ||
| async def _save_file(filename: str, content: bytes) -> str: # type: ignore[override] |
Copilot
AI
Dec 17, 2025
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.
The # type: ignore[override] comment suggests a type mismatch. Consider using proper type annotations that match the expected signature instead of suppressing the type checker.
| async def _save_file(filename: str, content: bytes) -> str: # type: ignore[override] | |
| async def _save_file(filename: str, content: bytes) -> str: |
Signed-off-by: Mark Redeman <[email protected]>
β¦ch (#3228) add javascript-typescript Signed-off-by: Barabanov, Alexander <[email protected]>
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.
Pull request overview
Copilot reviewed 228 out of 455 changed files in this pull request and generated 1 comment.
π‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| export const downloadImageAsFile = async (media: MediaItem) => { | ||
| const response = await fetch(`/api/projects/${media.project_id}/images/${media.id}/full`); | ||
|
|
||
| const blob = await response.blob(); | ||
|
|
||
| return new File([blob], media.filename, { type: blob.type }); | ||
| }; |
Copilot
AI
Dec 18, 2025
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.
The fetch request doesn't check for HTTP errors. Add response.ok validation and throw an error for failed requests to prevent silent failures.
feat(inspect): add model exporting message and granular progress updates Signed-off-by: Dmitry Kalinin <[email protected]>
π Description
β¨ Changes
Select what type of change your PR is:
β Checklist
Before you submit your pull request, please make sure you have completed the following steps:
For more information about code review checklists, see the Code Review Checklist.