From ac8e9d383056918ff2351291b7475cc31308c0f6 Mon Sep 17 00:00:00 2001 From: Sashank Aryal Date: Fri, 21 Feb 2025 12:06:30 -0600 Subject: [PATCH 01/13] teams -> enterprise --- README.md | 10 +- .../components/src/components/Teams/Teams.tsx | 159 ------------------ .../components/src/components/Teams/index.ts | 0 .../NativeModelEvaluationView/index.tsx | 2 +- app/packages/embeddings/src/EmbeddingsCTA.tsx | 2 +- 5 files changed, 7 insertions(+), 166 deletions(-) delete mode 100644 app/packages/components/src/components/Teams/Teams.tsx delete mode 100644 app/packages/components/src/components/Teams/index.ts diff --git a/README.md b/README.md index 1436b5b0285..25df078418e 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ data quality more efficiently than ever before 🤝 If you're looking to scale to production-grade, collaborative, cloud-native enterprise workloads, check out -**[FiftyOne Teams](http://voxel51.com/enterprise)** 🚀 +**[FiftyOne Enterprise](http://voxel51.com/enterprise)** 🚀 ![------------------------------------------------------------------](https://github.com/user-attachments/assets/fb0573d0-bb56-40ff-9ae1-a5e8f62f5f42) @@ -455,8 +455,8 @@ https://github.com/user-attachments/assets/c7ed496d-0cf7-45d6-9853-e349f1abd6f8 ##   additional resources   🚁 -| [FiftyOne Teams](https://voxel51.com/enterprise) | [VoxelGPT](https://github.com/voxel51/voxelgpt) | [Plugins](https://voxel51.com/plugins) | [Vector Search](https://voxel51.com/blog/the-computer-vision-interface-for-vector-search) | [Dataset Zoo](https://docs.voxel51.com/dataset_zoo/index.html) | [Model Zoo](https://docs.voxel51.com/model_zoo/index.html) | [FiftyOne Brain](https://docs.voxel51.com/brain.html) | -| ------------------------------------------------ | ----------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------- | +| [FiftyOne Enterprise](https://voxel51.com/enterprise) | [VoxelGPT](https://github.com/voxel51/voxelgpt) | [Plugins](https://voxel51.com/plugins) | [Vector Search](https://voxel51.com/blog/the-computer-vision-interface-for-vector-search) | [Dataset Zoo](https://docs.voxel51.com/dataset_zoo/index.html) | [Model Zoo](https://docs.voxel51.com/model_zoo/index.html) | [FiftyOne Brain](https://docs.voxel51.com/brain.html) | +| ----------------------------------------------------- | ----------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------- | @@ -478,11 +478,11 @@ Full documentation for FiftyOne is available at
-##   FiftyOne Teams   🏎️ +##   FiftyOne Enterprise   🏎️ Want to securely collaborate on billions of samples in the cloud and connect to your compute resources to automate your workflows? Check out -[FiftyOne Teams](https://voxel51.com/enterprise). +[FiftyOne Enterprise](https://voxel51.com/enterprise). ![------------------------------------------------------------------](https://github.com/user-attachments/assets/fb0573d0-bb56-40ff-9ae1-a5e8f62f5f42) diff --git a/app/packages/components/src/components/Teams/Teams.tsx b/app/packages/components/src/components/Teams/Teams.tsx deleted file mode 100644 index ee502cd77cb..00000000000 --- a/app/packages/components/src/components/Teams/Teams.tsx +++ /dev/null @@ -1,159 +0,0 @@ -import React, { useState } from "react"; -import { Close } from "@mui/icons-material"; -import { useRecoilState } from "recoil"; - -import { getFetchFunction } from "@fiftyone/utilities"; - -const Teams = () => { - const [formState, setFormState] = useState({ - email: "", - firstname: "", - lastname: "", - company: "", - role: "", - discover: "", - }); - const [submitText, setSubmitText] = useState("Submit"); - const [teams, setTeams] = useRecoilState(atoms.teams); - const portalId = 4972700; - const formId = "bca87445-10be-424c-9c07-e2b16770caf6"; - const postUrl = `https://api.hsforms.com/submissions/v3/integration/submit/${portalId}/${formId}`; - - const setFormValue = (name) => (e) => - setFormState({ - ...formState, - [name]: e.target.value, - }); - const disabled = - !( - formState.email?.length && - formState.firstname?.length && - formState.lastname?.length - ) || teams.submitted; - const submit = () => { - if (disabled) { - return; - } - setSubmitText("Submitting..."); - const headers = new Headers(); - headers.append("Content-Type", "application/json"); - const finalize = () => { - setSubmitText("Submitted. Thank you!"); - setTeams((cur) => ({ ...cur, submitted: true })); - getFetchFunction()("POST", "/teams?submitted=true", {}); - setTimeout(() => setTeams((cur) => ({ ...cur, open: false })), 2000); - }; - - fetch(postUrl, { - method: "post", - headers, - mode: "cors", - body: JSON.stringify({ - submittedAt: Date.now(), - fields: [ - { - name: "firstname", - value: formState.firstname, - }, - { - name: "lastname", - value: formState.lastname, - }, - { - name: "email", - value: formState.email, - }, - { - name: "company", - value: formState.company, - }, - { - name: "role", - value: formState.role, - }, - { - name: "app_how_did_you_hear_about_us", - value: formState.discover, - }, - ], - context: { pageName: "FiftyOne App" }, - }), - }) - .then((response) => { - if (response.status !== 200) { - throw new Error("Failed submission"); - } - return response.json(); - }) - .then(() => { - finalize(); - }) - .catch((e) => { - setSubmitText("Something went wrong"); - }); - }; - return ( - -
- Get FiftyOne for your team - -
- - - - - - - -
- ); -}; - -export default Teams; diff --git a/app/packages/components/src/components/Teams/index.ts b/app/packages/components/src/components/Teams/index.ts deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/index.tsx b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/index.tsx index a915d634874..865d12737d9 100644 --- a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/index.tsx +++ b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/index.tsx @@ -115,7 +115,7 @@ export default function NativeModelEvaluationView(props) { (showEmptyOverview || showCTA ? ( Date: Fri, 7 Mar 2025 14:09:44 -0600 Subject: [PATCH 02/13] add enterprise button --- app/packages/app/src/components/Teams.tsx | 318 +++++++++++++++++- .../core/src/components/Actions/Popout.tsx | 2 +- 2 files changed, 311 insertions(+), 9 deletions(-) diff --git a/app/packages/app/src/components/Teams.tsx b/app/packages/app/src/components/Teams.tsx index b8deba65704..338ba219e58 100644 --- a/app/packages/app/src/components/Teams.tsx +++ b/app/packages/app/src/components/Teams.tsx @@ -1,12 +1,314 @@ -import { Button, ExternalLink } from "@fiftyone/components"; -import React from "react"; +import { Button, ExternalLink, useTheme } from "@fiftyone/components"; +import AutoAwesomeIcon from "@mui/icons-material/AutoAwesome"; +import { + Box, + Button as MuiButton, + Popover, + Stack, + Typography, + useColorScheme, +} from "@mui/material"; +import React, { useCallback, useEffect, useState } from "react"; +import styled, { css, keyframes } from "styled-components"; + +const ENTERPRISE_TOOLTIP_LS = "fiftyone-enterprise-tooltip-seen"; +const ENTERPRISE_BUTTON_ID = "fo-cta-enterprise-button"; + +const DARK_BG_COLOR = "#333333"; +const LIGHT_BG_COLOR = "#FFFFFF"; +const GRADIENT_START_COLOR = "#FF6D04"; +const GRADIENT_END_COLOR = "#B681FF"; + +// subtle pulse animation for the sparkles icon +const pulse = keyframes` + 0% { + transform: scale(1); + opacity: 1; + } + 50% { + transform: scale(1.1); + opacity: 0.9; + } + 100% { + transform: scale(1); + opacity: 1; + } +`; + +// styles that will be applied to the icon container +const pulseAnimation = css` + animation: ${pulse} 1.5s ease-in-out infinite; +`; + +const IconContainer = styled.div` + display: flex; + align-items: center; + transition: all 0.3s ease; +`; + +// https://stackoverflow.com/questions/65282139/adding-a-linear-gradient-to-material-ui-icon +const GradientAutoAwesomeIcon = () => ( + <> + + + + + + + + + + + + +); + +const ButtonContainer = styled.div<{ bgColor: string }>` + background-color: ${({ bgColor }) => bgColor}; + border-radius: 16px; + + &:hover { + background-color: transparent; + } +`; + +const StyledExternalLink = styled(ExternalLink)` + text-decoration: none; + + &:hover { + text-decoration: none; + } +`; + +const BaseEnterpriseButton = styled(Button)<{ + borderColor: string; + isLightMode?: boolean; +}>` + background: linear-gradient(45deg, #ff6d04 0%, #b681ff 100%); + background-clip: text; + -webkit-background-clip: text; + text-fill-color: transparent; + -webkit-text-fill-color: transparent; + display: flex; + align-items: center; + gap: 2px; + padding: 6px 12px; + border-radius: 16px; + font-weight: 500; + text-transform: none; + transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); + text-decoration: none; + font-size: 16px; + position: relative; + overflow: hidden; + border: 1px solid ${({ borderColor }) => borderColor}; + outline: none; + box-shadow: none; + + @media (max-width: 767px) { + font-size: 14px; + padding: 4px 10px; + } + + &:before { + content: ""; + position: absolute; + top: 0; + left: -100%; + width: ${({ isLightMode }) => (isLightMode ? "150%" : "100%")}; + height: 100%; + background: linear-gradient( + 90deg, + rgba(255, 255, 255, 0) 0%, + rgba(255, 255, 255, ${({ isLightMode }) => (isLightMode ? "0.3" : "0.2")}) + 50%, + rgba(255, 255, 255, 0) 100% + ); + transition: all ${({ isLightMode }) => (isLightMode ? "0.8s" : "0.6s")} ease; + z-index: 1; + } + + &:hover, + &:focus, + &:active { + transform: scale(1.03); + text-decoration: none; + border: 1px solid ${({ borderColor }) => borderColor} !important; + outline: none; + box-shadow: none; + + background: linear-gradient(45deg, #ff6d04 0%, #b681ff 100%) !important; + background-clip: text !important; + -webkit-background-clip: text !important; + text-fill-color: transparent !important; + -webkit-text-fill-color: transparent !important; + + &:before { + left: 100%; + background: linear-gradient( + 90deg, + rgba(255, 255, 255, 0) 0%, + rgba( + 255, + 255, + 255, + ${({ isLightMode }) => (isLightMode ? "0.6" : "0.2")} + ) + 50%, + rgba(255, 255, 255, 0) 100% + ); + } + + .fo-teams-cta-pulse-animation { + ${pulseAnimation} + } + } +`; + +const PopoverContent = styled(Box)` + padding: 16px; + width: 310px; + position: relative; + display: flex; + flex-direction: column; + gap: 12px; +`; + +const PopoverHeading = styled(Typography)` + display: flex; + align-items: center; + gap: 8px; + font-weight: 600; + margin-bottom: 12px; +`; + +const PopoverBody = styled(Typography)` + position: relative; + color: var(--fo-palette-text-secondary); + font-size: 15px !important; +`; + +const PopoverFooter = styled(Stack)` + margin-top: 16px; +`; + +export default function Teams({ disablePopover = false }: { disablePopover?: boolean }) { + const [showPopover, setShowPopover] = useState(false); + + const { mode } = useColorScheme(); + const theme = useTheme(); + + // Get the appropriate background color based on mode + const bgColor = mode === "light" ? LIGHT_BG_COLOR : DARK_BG_COLOR; + + useEffect(() => { + const hasSeenTooltip = window.localStorage.getItem(ENTERPRISE_TOOLTIP_LS); + console.log("hasSeenTooltip", hasSeenTooltip); + if (!hasSeenTooltip) { + setShowPopover(true); + } + }, []); + + const markTooltipSeen = useCallback(() => { + localStorage.setItem(ENTERPRISE_TOOLTIP_LS, "true"); + }, []); + + const handlePopoverClose = useCallback(() => { + markTooltipSeen(); + setShowPopover(false); + }, [markTooltipSeen]); + + const handleExplore = useCallback(() => { + markTooltipSeen(); + setShowPopover(false); + window.open( + "https://voxel51.com/why-upgrade?utm_source=FiftyOneApp", + "_blank" + ); + }, [markTooltipSeen]); -export default function Teams() { return ( - - - + <> + + + + + Explore Enterprise + + + + + {showPopover && !disablePopover && ( + + + + + + Accelerate your workflow + + + + + With FiftyOne Enterprise you can connect to your data lake, + automate your data curation and model analysis tasks, securely + collaborate with your team, and more. + + + + + Explore Enterprise + + + Dismiss + + + + + )} + ); } diff --git a/app/packages/core/src/components/Actions/Popout.tsx b/app/packages/core/src/components/Actions/Popout.tsx index 32bb6edce73..503ccc88f9a 100644 --- a/app/packages/core/src/components/Actions/Popout.tsx +++ b/app/packages/core/src/components/Actions/Popout.tsx @@ -71,6 +71,6 @@ type PopoutPropsType = { style?: React.CSSProperties; modal?: boolean; fixed?: boolean; - anchorRef?: RefObject; + anchorRef?: RefObject | null; testId?: string; }; From 7ff7d16e68d33ad663bd7d223077d9d20f351855 Mon Sep 17 00:00:00 2001 From: Sashank Aryal Date: Fri, 7 Mar 2025 16:06:58 -0600 Subject: [PATCH 03/13] fix light mode --- app/packages/app/src/components/Teams.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/packages/app/src/components/Teams.tsx b/app/packages/app/src/components/Teams.tsx index 338ba219e58..f9688d7a909 100644 --- a/app/packages/app/src/components/Teams.tsx +++ b/app/packages/app/src/components/Teams.tsx @@ -16,6 +16,7 @@ const ENTERPRISE_BUTTON_ID = "fo-cta-enterprise-button"; const DARK_BG_COLOR = "#333333"; const LIGHT_BG_COLOR = "#FFFFFF"; + const GRADIENT_START_COLOR = "#FF6D04"; const GRADIENT_END_COLOR = "#B681FF"; @@ -50,6 +51,7 @@ const IconContainer = styled.div` const GradientAutoAwesomeIcon = () => ( <> + Gradient { const hasSeenTooltip = window.localStorage.getItem(ENTERPRISE_TOOLTIP_LS); - console.log("hasSeenTooltip", hasSeenTooltip); if (!hasSeenTooltip) { setShowPopover(true); } @@ -269,7 +271,12 @@ export default function Teams({ disablePopover = false }: { disablePopover?: boo }} elevation={3} > - + From 7d6dc791e473825de5a5ae5e28f2fd43f993f48a Mon Sep 17 00:00:00 2001 From: brimoor Date: Mon, 10 Mar 2025 12:33:21 -0400 Subject: [PATCH 04/13] fix YOLO kwargs syntax --- docs/source/integrations/ultralytics.rst | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/docs/source/integrations/ultralytics.rst b/docs/source/integrations/ultralytics.rst index dd01ddd16e6..9d4cd0f5a2a 100644 --- a/docs/source/integrations/ultralytics.rst +++ b/docs/source/integrations/ultralytics.rst @@ -150,14 +150,9 @@ You can also load any of these models directly from the # model_name = "yolo11x-coco-torch" # model_name = "rtdetr-l-coco-torch" - model = foz.load_zoo_model( - model_name, - label_field="boxes", - confidence_thresh=0.5, - iou_thresh=0.5, - ) + model = foz.load_zoo_model(model_name) - dataset.apply_model(model) + dataset.apply_model(model, label_field="boxes", confidence_thresh=0.5) session = fo.launch_app(dataset) @@ -242,9 +237,9 @@ You can also load YOLOv8, YOLOv9, and YOLO11 segmentation models from the # model_name = "yolo11x-seg-coco-torch" - model = foz.load_zoo_model(model_name, label_field="yolo_seg") + model = foz.load_zoo_model(model_name) - dataset.apply_model(model) + dataset.apply_model(model, label_field="yolo_seg") session = fo.launch_app(dataset) @@ -369,29 +364,29 @@ that you can set the classes that the model should detect: from ultralytics import YOLO - ## Load dataset + # Load dataset dataset = foz.load_zoo_dataset( "voc-2007", split="validation", max_samples=100 ) dataset.select_fields().keep_fields() - ## Load model + # Load model model = YOLO("yolov8l-world.pt") # model = YOLO("yolov8s-world.pt") # model = YOLO("yolov8m-world.pt") # model = YOLO("yolov8x-world.pt") - ## Set open vocabulary classes + # Set open vocabulary classes model.set_classes( ["plant", "window", "keyboard", "human baby", "computer monitor"] ) label_field = "yolo_world_detections" - ## Apply model + # Apply model dataset.apply_model(model, label_field=label_field) - ## Visualize the detection patches + # Visualize the detection patches patches = dataset.to_patches(label_field) session = fo.launch_app(patches) From cdc6cb258fc8517f04bb82c1b60b042f6f8a4ca0 Mon Sep 17 00:00:00 2001 From: Sashank Aryal Date: Mon, 10 Mar 2025 12:28:10 -0500 Subject: [PATCH 05/13] special case for pw where we don't show teams popover --- app/packages/app/src/components/Teams.tsx | 6 +++++- e2e-pw/src/oss/specs/regression-tests/index-page.spec.ts | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/packages/app/src/components/Teams.tsx b/app/packages/app/src/components/Teams.tsx index f9688d7a909..29410c44114 100644 --- a/app/packages/app/src/components/Teams.tsx +++ b/app/packages/app/src/components/Teams.tsx @@ -218,7 +218,11 @@ export default function Teams({ useEffect(() => { const hasSeenTooltip = window.localStorage.getItem(ENTERPRISE_TOOLTIP_LS); - if (!hasSeenTooltip) { + + // don't show intro popoverif we're in playwright + const isPlaywright = window["IS_PLAYWRIGHT"]; + + if (!hasSeenTooltip && !isPlaywright) { setShowPopover(true); } }, []); diff --git a/e2e-pw/src/oss/specs/regression-tests/index-page.spec.ts b/e2e-pw/src/oss/specs/regression-tests/index-page.spec.ts index 18680d47ef3..16611a2acd7 100644 --- a/e2e-pw/src/oss/specs/regression-tests/index-page.spec.ts +++ b/e2e-pw/src/oss/specs/regression-tests/index-page.spec.ts @@ -28,6 +28,13 @@ test.beforeAll(async ({ fiftyoneLoader, foWebServer }) => { test.describe.serial("index page", () => { test("index page", async ({ pagePom, page }) => { + await page.addInitScript(() => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore injecting IS_PLAYWRIGHT into window so that + // we can disable 1) analytics, and 2) QA performance toast banners + window.IS_PLAYWRIGHT = true; + }); + await pagePom.loadDataset(); await pagePom.assert.verifyPage("index"); await pagePom.assert.verifyPathname("/"); From cee47e583711d2104b5a3e48746ec645daf6eec3 Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Mon, 10 Mar 2025 16:23:27 -0400 Subject: [PATCH 06/13] Fix recomputing frames on a video dataset (#5554) * ensure read_only is accessed for fo fields only * safe field.read_only * another one * re-fix, we cannot update metadata for non-FO Field * more field.read_only protections * Revert "more field.read_only protections" This reverts commit a51251d59a594124b7fb47dd06348956ff113afa. * read_only protection that is necessary in obscure case --------- Co-authored-by: brimoor Co-authored-by: Stuart Wheaton --- fiftyone/core/collections.py | 2 +- fiftyone/core/odm/mixins.py | 16 ++++++++++------ tests/unittests/video_tests.py | 7 +++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/fiftyone/core/collections.py b/fiftyone/core/collections.py index 1f65085772a..27a6a26c099 100644 --- a/fiftyone/core/collections.py +++ b/fiftyone/core/collections.py @@ -1425,7 +1425,7 @@ def _parse_field(self, path, include_private=False, leaf=False): return None, None, read_only resolved_keys.append(field.db_field or field.name) - read_only = field.read_only + read_only = getattr(field, "read_only", False) last_key = idx == len(keys) - 1 if last_key and not leaf: diff --git a/fiftyone/core/odm/mixins.py b/fiftyone/core/odm/mixins.py index 1ce24be7bcd..80e6c3b7996 100644 --- a/fiftyone/core/odm/mixins.py +++ b/fiftyone/core/odm/mixins.py @@ -5,6 +5,7 @@ | `voxel51.com `_ | """ + from collections import OrderedDict from datetime import datetime import itertools @@ -305,7 +306,7 @@ def merge_field_schema( for path in new_schema.keys(): _, _, _, root_doc = cls._parse_path(path) - if root_doc is not None and root_doc.read_only: + if root_doc is not None and getattr(root_doc, "read_only", False): root = path.rsplit(".", 1)[0] raise ValueError("Cannot edit read-only field '%s'" % root) @@ -318,7 +319,10 @@ def merge_field_schema( # Silently skip updating metadata of any read-only fields for path in list(new_metadata.keys()): field = cls._get_field(path, allow_missing=True) - if field is not None and field.read_only: + if field is not None and ( + not isinstance(field, fof.Field) + or getattr(field, "read_only", False) + ): del new_metadata[path] for path, field in new_schema.items(): @@ -517,7 +521,7 @@ def _rename_fields(cls, sample_collection, paths, new_paths): % (cls._doc_name().lower(), path) ) - if field is not None and field.read_only: + if field is not None and getattr(field, "read_only", False): raise ValueError( "Cannot rename read-only %s field '%s'" % (cls._doc_name().lower(), path) @@ -684,7 +688,7 @@ def _clear_fields(cls, sample_collection, paths): "%s field '%s' does not exist" % (cls._doc_name(), path) ) - if field is not None and field.read_only: + if field is not None and getattr(field, "read_only", False): raise ValueError( "Cannot rename read-only %s field '%s'" % (cls._doc_name().lower(), path) @@ -753,7 +757,7 @@ def _delete_fields(cls, paths, error_level=0): ) continue - if field is not None and field.read_only: + if field is not None and getattr(field, "read_only", False): raise ValueError( "Cannot delete read-only %s field '%s'" % (cls._doc_name().lower(), path) @@ -862,7 +866,7 @@ def _remove_dynamic_fields(cls, paths, error_level=0): ) continue - if field is not None and field.read_only: + if field is not None and getattr(field, "read_only", False): fou.handle_error( ValueError( "Cannot remove read-only %s field '%s'" diff --git a/tests/unittests/video_tests.py b/tests/unittests/video_tests.py index 5139a753e6e..23f528b85e9 100644 --- a/tests/unittests/video_tests.py +++ b/tests/unittests/video_tests.py @@ -5,6 +5,7 @@ | `voxel51.com `_ | """ + from copy import deepcopy from datetime import date, datetime @@ -2397,7 +2398,13 @@ def test_to_frames_schema(self): sample.frames[1] = fo.Frame(filepath="image.jpg") dataset = fo.Dataset() + dataset.add_sample(sample) + dataset.add_frame_field( + "metadata", + fo.EmbeddedDocumentField, + embedded_doc_type=fo.ImageMetadata, + ) frames = dataset.to_frames() view = frames.select_fields() From 471b011a857510076e5360de3a41d07e09c8b0c8 Mon Sep 17 00:00:00 2001 From: Camron Staley <55006027+CamronStaley@users.noreply.github.com> Date: Mon, 10 Mar 2025 15:46:07 -0500 Subject: [PATCH 07/13] fix slow compute metadata on PNGs due to getexif on png (#5564) --- fiftyone/core/metadata.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/fiftyone/core/metadata.py b/fiftyone/core/metadata.py index dd75a9e168b..000e3726972 100644 --- a/fiftyone/core/metadata.py +++ b/fiftyone/core/metadata.py @@ -459,8 +459,8 @@ def get_image_info(f): img = Image.open(f) # Flip the dimensions if image metadata requires us to. PIL.Image doesn't - # handle by default. - if _image_has_flipped_dimensions(img): + # handle by default. Image flipping only efficiently supported on JPEG. + if img.format == "JPEG" and _image_has_flipped_dimensions(img): width, height = img.height, img.width else: width, height = img.width, img.height @@ -555,13 +555,12 @@ def _do_compute_metadata(args): def _compute_sample_metadata( filepath, media_type, skip_failures=False, cache=None ): - if not skip_failures: - return _get_metadata(filepath, media_type, cache=cache) - try: return _get_metadata(filepath, media_type, cache=cache) except: - return None + if skip_failures: + return None + raise def _get_metadata(filepath, media_type, cache=None): From 44c6d48fffaaa2c9ae5ee4351cbbe128c2928168 Mon Sep 17 00:00:00 2001 From: Stuart Wheaton Date: Thu, 27 Feb 2025 11:51:09 -0500 Subject: [PATCH 08/13] replace capital Teams Fiftyone->FiftyOne rename teams docs folders rename teams files teams->enterprise add redirects from teams files to now enterprise fix nav/footer layout --- docs/source/_templates/layout.html | 4 +- .../cheat_sheets/fiftyone_terminology.rst | 4 +- docs/source/conf.py | 4 +- docs/source/deprecation.rst | 2 +- .../{teams => enterprise}/api_connection.rst | 40 +- .../{teams => enterprise}/cloud_media.rst | 60 +-- .../{teams => enterprise}/data_lens.rst | 48 +-- .../{teams => enterprise}/data_quality.rst | 28 +- .../dataset_versioning.rst | 80 ++-- .../enterprise_app.rst} | 80 ++-- .../enterprise_plugins.rst} | 172 ++++----- docs/source/{teams => enterprise}/index.rst | 60 +-- .../{teams => enterprise}/installation.rst | 122 +++--- .../{teams => enterprise}/management_sdk.rst | 30 +- .../{teams => enterprise}/migrations.rst | 74 ++-- .../source/{teams => enterprise}/overview.rst | 70 ++-- .../{teams => enterprise}/pluggable_auth.md | 84 ++-- .../query_performance.rst | 18 +- .../roles_and_permissions.rst | 82 ++-- docs/source/{teams => enterprise}/secrets.rst | 42 +- docs/source/environments/index.rst | 2 +- docs/source/faq/index.rst | 2 +- docs/source/getting_started/install.rst | 2 +- .../getting_started/upgrading-mongodb.rst | 8 +- .../admin_add_users_to_team.png | Bin .../admin_create_group.png | Bin .../admin_roles_page.png | Bin .../admin_team_groups_page.png | Bin .../admin_team_users_page.png | Bin .../images/{teams => enterprise}/airflow.png | Bin .../{teams => enterprise}/api_key_delete.png | Bin .../api_key_generate.png | Bin .../api_key_generated.png | Bin .../{teams => enterprise}/cas/SMTP_config.png | Bin .../cas/SMTP_config_test_email.png | Bin .../cas/cas_api_docs.png | Bin .../{teams => enterprise}/cas/cas_sign_in.png | Bin .../cas/org_enable_invitations.png | Bin .../cas/org_send_email_invitations.png | Bin .../cloud_creds_add_btn.png | Bin .../cloud_creds_modal_blank.png | Bin .../{teams => enterprise}/create_dataset.png | Bin .../create_secret_form.png | Bin .../data_lens_add_data_source.png | Bin .../data_lens_data_sources.png | Bin .../data_lens_data_sources_empty.png | Bin .../{teams => enterprise}/data_lens_home.png | Bin .../data_lens_immediate_import.png | Bin .../data_lens_import_dialog.png | Bin .../data_lens_import_options.png | Bin .../data_lens_imported_samples.png | Bin .../data_lens_preview.png | Bin .../{teams => enterprise}/data_lens_query.png | Bin .../data_lens_runs_page.png | Bin .../data_lens_scheduled_import.png | Bin .../data_lens_synthetic_batch.png | Bin .../data_lens_synthetic_query.png | Bin .../data_lens_synthetic_sample.png | Bin .../data_lens_synthetic_text.png | Bin .../data_quality_brightness_analysis.png | Bin ...ta_quality_brightness_mark_as_reviewed.png | Bin .../data_quality_brightness_scan.png | Bin .../data_quality_brightness_scan_options.png | Bin .../data_quality_brightness_scheduled.png | Bin .../data_quality_brightness_slider.gif | Bin .../data_quality_brightness_tag.png | Bin .../data_quality_home.png | Bin .../data_quality_new_samples_home.png | Bin .../data_quality_new_samples_modal.png | Bin .../{teams => enterprise}/dataset_access.png | Bin .../dataset_basic_info.png | Bin .../dataset_danger_zone.png | Bin .../dataset_default_access.png | Bin .../dataset_search_bar.png | Bin .../dataset_search_fields.png | Bin .../dataset_specific_access.png | Bin .../enterprise_architecture.png} | Bin .../images/{teams => enterprise}/hero.png | Bin .../images/{teams => enterprise}/homepage.png | Bin .../install_fiftyone.png | Bin .../ordering_datasets.png | Bin .../{teams => enterprise}/pinned_datasets.png | Bin .../{teams => enterprise}/plugins_disable.png | Bin .../{teams => enterprise}/plugins_install.png | Bin .../plugins_install_btn.png | Bin .../plugins_install_success.png | Bin .../plugins_operators_btn.png | Bin .../plugins_operators_disable.png | Bin .../plugins_operators_perms.png | Bin .../plugins_operators_perms2.png | Bin .../plugins_org_settings.png | Bin .../{teams => enterprise}/plugins_page.png | Bin .../plugins_uninstall_btn.png | Bin .../plugins_upgrade_btn.png | Bin .../plugins_upgrade_page.png | Bin .../plugins_upgrade_success_page.png | Bin .../{teams => enterprise}/qp_config.png | Bin .../{teams => enterprise}/qp_create_index.png | Bin .../qp_create_summary_field.png | Bin .../images/{teams => enterprise}/qp_home.png | Bin .../{teams => enterprise}/qp_tableview.png | Bin .../images/{teams => enterprise}/qp_toast.png | Bin .../{teams => enterprise}/qp_tooltip.png | Bin .../{teams => enterprise}/samples_page.png | Bin .../{teams => enterprise}/secrets_page.png | Bin .../{teams => enterprise}/share_dataset.png | Bin .../{teams => enterprise}/user_invitation.png | Bin .../versioning/archive-snapshot.png | Bin .../versioning/browse-banner-dropdown.png | Bin .../versioning/browse-banner-right.png | Bin .../versioning/browse-banner-right2.png | Bin .../versioning/browse-button.png | Bin .../versioning/create-refresh-button.png | Bin .../versioning/create-save-button.png | Bin .../versioning/delete-snapshot.png | Bin .../versioning/history-new-snapshot.png | Bin .../versioning/history-tab-button.png | Bin .../versioning/rollback-snapshot.png | Bin .../versioning/snapshot-list.png | Bin .../versioning/unarchive-snapshot.png | Bin docs/source/index.rst | 10 +- docs/source/plugins/developing_plugins.rst | 6 +- docs/source/plugins/index.rst | 2 +- docs/source/plugins/using_plugins.rst | 22 +- docs/source/recipes/creating_views.ipynb | 4 +- docs/source/redirects | 18 + docs/source/release-notes.rst | 364 +++++++++--------- docs/source/user_guide/app.rst | 6 +- docs/source/user_guide/config.rst | 6 +- docs/source/user_guide/evaluation.rst | 4 +- 130 files changed, 789 insertions(+), 771 deletions(-) rename docs/source/{teams => enterprise}/api_connection.rst (75%) rename docs/source/{teams => enterprise}/cloud_media.rst (93%) rename docs/source/{teams => enterprise}/data_lens.rst (96%) rename docs/source/{teams => enterprise}/data_quality.rst (87%) rename docs/source/{teams => enterprise}/dataset_versioning.rst (94%) rename docs/source/{teams/teams_app.rst => enterprise/enterprise_app.rst} (69%) rename docs/source/{teams/teams_plugins.rst => enterprise/enterprise_plugins.rst} (82%) rename docs/source/{teams => enterprise}/index.rst (72%) rename docs/source/{teams => enterprise}/installation.rst (83%) rename docs/source/{teams => enterprise}/management_sdk.rst (69%) rename docs/source/{teams => enterprise}/migrations.rst (65%) rename docs/source/{teams => enterprise}/overview.rst (80%) rename docs/source/{teams => enterprise}/pluggable_auth.md (87%) rename docs/source/{teams => enterprise}/query_performance.rst (93%) rename docs/source/{teams => enterprise}/roles_and_permissions.rst (78%) rename docs/source/{teams => enterprise}/secrets.rst (65%) rename docs/source/images/{teams => enterprise}/admin_add_users_to_team.png (100%) rename docs/source/images/{teams => enterprise}/admin_create_group.png (100%) rename docs/source/images/{teams => enterprise}/admin_roles_page.png (100%) rename docs/source/images/{teams => enterprise}/admin_team_groups_page.png (100%) rename docs/source/images/{teams => enterprise}/admin_team_users_page.png (100%) rename docs/source/images/{teams => enterprise}/airflow.png (100%) rename docs/source/images/{teams => enterprise}/api_key_delete.png (100%) rename docs/source/images/{teams => enterprise}/api_key_generate.png (100%) rename docs/source/images/{teams => enterprise}/api_key_generated.png (100%) rename docs/source/images/{teams => enterprise}/cas/SMTP_config.png (100%) rename docs/source/images/{teams => enterprise}/cas/SMTP_config_test_email.png (100%) rename docs/source/images/{teams => enterprise}/cas/cas_api_docs.png (100%) rename docs/source/images/{teams => enterprise}/cas/cas_sign_in.png (100%) rename docs/source/images/{teams => enterprise}/cas/org_enable_invitations.png (100%) rename docs/source/images/{teams => enterprise}/cas/org_send_email_invitations.png (100%) rename docs/source/images/{teams => enterprise}/cloud_creds_add_btn.png (100%) rename docs/source/images/{teams => enterprise}/cloud_creds_modal_blank.png (100%) rename docs/source/images/{teams => enterprise}/create_dataset.png (100%) rename docs/source/images/{teams => enterprise}/create_secret_form.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_add_data_source.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_data_sources.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_data_sources_empty.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_home.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_immediate_import.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_import_dialog.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_import_options.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_imported_samples.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_preview.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_query.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_runs_page.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_scheduled_import.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_synthetic_batch.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_synthetic_query.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_synthetic_sample.png (100%) rename docs/source/images/{teams => enterprise}/data_lens_synthetic_text.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_brightness_analysis.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_brightness_mark_as_reviewed.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_brightness_scan.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_brightness_scan_options.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_brightness_scheduled.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_brightness_slider.gif (100%) rename docs/source/images/{teams => enterprise}/data_quality_brightness_tag.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_home.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_new_samples_home.png (100%) rename docs/source/images/{teams => enterprise}/data_quality_new_samples_modal.png (100%) rename docs/source/images/{teams => enterprise}/dataset_access.png (100%) rename docs/source/images/{teams => enterprise}/dataset_basic_info.png (100%) rename docs/source/images/{teams => enterprise}/dataset_danger_zone.png (100%) rename docs/source/images/{teams => enterprise}/dataset_default_access.png (100%) rename docs/source/images/{teams => enterprise}/dataset_search_bar.png (100%) rename docs/source/images/{teams => enterprise}/dataset_search_fields.png (100%) rename docs/source/images/{teams => enterprise}/dataset_specific_access.png (100%) rename docs/source/images/{teams/teams_architecture.png => enterprise/enterprise_architecture.png} (100%) rename docs/source/images/{teams => enterprise}/hero.png (100%) rename docs/source/images/{teams => enterprise}/homepage.png (100%) rename docs/source/images/{teams => enterprise}/install_fiftyone.png (100%) rename docs/source/images/{teams => enterprise}/ordering_datasets.png (100%) rename docs/source/images/{teams => enterprise}/pinned_datasets.png (100%) rename docs/source/images/{teams => enterprise}/plugins_disable.png (100%) rename docs/source/images/{teams => enterprise}/plugins_install.png (100%) rename docs/source/images/{teams => enterprise}/plugins_install_btn.png (100%) rename docs/source/images/{teams => enterprise}/plugins_install_success.png (100%) rename docs/source/images/{teams => enterprise}/plugins_operators_btn.png (100%) rename docs/source/images/{teams => enterprise}/plugins_operators_disable.png (100%) rename docs/source/images/{teams => enterprise}/plugins_operators_perms.png (100%) rename docs/source/images/{teams => enterprise}/plugins_operators_perms2.png (100%) rename docs/source/images/{teams => enterprise}/plugins_org_settings.png (100%) rename docs/source/images/{teams => enterprise}/plugins_page.png (100%) rename docs/source/images/{teams => enterprise}/plugins_uninstall_btn.png (100%) rename docs/source/images/{teams => enterprise}/plugins_upgrade_btn.png (100%) rename docs/source/images/{teams => enterprise}/plugins_upgrade_page.png (100%) rename docs/source/images/{teams => enterprise}/plugins_upgrade_success_page.png (100%) rename docs/source/images/{teams => enterprise}/qp_config.png (100%) rename docs/source/images/{teams => enterprise}/qp_create_index.png (100%) rename docs/source/images/{teams => enterprise}/qp_create_summary_field.png (100%) rename docs/source/images/{teams => enterprise}/qp_home.png (100%) rename docs/source/images/{teams => enterprise}/qp_tableview.png (100%) rename docs/source/images/{teams => enterprise}/qp_toast.png (100%) rename docs/source/images/{teams => enterprise}/qp_tooltip.png (100%) rename docs/source/images/{teams => enterprise}/samples_page.png (100%) rename docs/source/images/{teams => enterprise}/secrets_page.png (100%) rename docs/source/images/{teams => enterprise}/share_dataset.png (100%) rename docs/source/images/{teams => enterprise}/user_invitation.png (100%) rename docs/source/images/{teams => enterprise}/versioning/archive-snapshot.png (100%) rename docs/source/images/{teams => enterprise}/versioning/browse-banner-dropdown.png (100%) rename docs/source/images/{teams => enterprise}/versioning/browse-banner-right.png (100%) rename docs/source/images/{teams => enterprise}/versioning/browse-banner-right2.png (100%) rename docs/source/images/{teams => enterprise}/versioning/browse-button.png (100%) rename docs/source/images/{teams => enterprise}/versioning/create-refresh-button.png (100%) rename docs/source/images/{teams => enterprise}/versioning/create-save-button.png (100%) rename docs/source/images/{teams => enterprise}/versioning/delete-snapshot.png (100%) rename docs/source/images/{teams => enterprise}/versioning/history-new-snapshot.png (100%) rename docs/source/images/{teams => enterprise}/versioning/history-tab-button.png (100%) rename docs/source/images/{teams => enterprise}/versioning/rollback-snapshot.png (100%) rename docs/source/images/{teams => enterprise}/versioning/snapshot-list.png (100%) rename docs/source/images/{teams => enterprise}/versioning/unarchive-snapshot.png (100%) diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html index e0d3a5add47..e98659af764 100644 --- a/docs/source/_templates/layout.html +++ b/docs/source/_templates/layout.html @@ -42,7 +42,7 @@
@@ -131,7 +131,7 @@ diff --git a/docs/source/cheat_sheets/fiftyone_terminology.rst b/docs/source/cheat_sheets/fiftyone_terminology.rst index d3a74eee469..546eec94299 100644 --- a/docs/source/cheat_sheets/fiftyone_terminology.rst +++ b/docs/source/cheat_sheets/fiftyone_terminology.rst @@ -20,8 +20,8 @@ __________ - The :ref:`provided user interface ` for graphically viewing, filtering, and understanding your datasets. Can be launched in the browser or within notebooks. - * - FiftyOne Teams - - `The enterprise-grade suite `_ + * - FiftyOne Enterprise + - `The enterprise-grade suite `_ built on top of FiftyOne for collaboration, permissioning, and working with cloud-backed media. diff --git a/docs/source/conf.py b/docs/source/conf.py index 815a62ed640..6eca02aab95 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -192,11 +192,11 @@ "link_contactus": "mailto:solutions@voxel51.com?subject=[Voxel51]%20Contact%20us", "link_docs_fiftyone": "https://docs.voxel51.com/", "link_fiftyone": "https://voxel51.com/fiftyone/", - "link_fiftyone_teams": "https://voxel51.com/fiftyone-teams/", + "link_fiftyone_enterprise": "https://voxel51.com/enterprise/", "link_usecases": "https://voxel51.com/computer-vision-use-cases/", "link_success_stories": "https://voxel51.com/success-stories/", "link_talk_to_sales": "https://voxel51.com/talk-to-sales/", - "link_workshop": "https://voxel51.com/schedule-teams-workshop/", + "link_workshop": "https://voxel51.com/book-a-demo/", "link_fiftyone_tutorials": "https://docs.voxel51.com/tutorials/index.html", "link_fiftyone_examples": "https://github.com/voxel51/fiftyone-examples", "link_fiftyone_quickstart": "https://colab.research.google.com/github/voxel51/fiftyone-examples/blob/master/examples/quickstart.ipynb", diff --git a/docs/source/deprecation.rst b/docs/source/deprecation.rst index e3d919cf766..c671c7a82ce 100644 --- a/docs/source/deprecation.rst +++ b/docs/source/deprecation.rst @@ -32,7 +32,7 @@ Kubernetes 1.27 *Support ended November 1, 2024* `Kubernetes 1.27 `_ -transitioned to `end-of-life` effective July of 2024. FiftyOne Teams +transitioned to `end-of-life` effective July of 2024. FiftyOne Enterprise releases after October 31, 2024 might no longer be compatible with Kubernetes 1.27 and older. diff --git a/docs/source/teams/api_connection.rst b/docs/source/enterprise/api_connection.rst similarity index 75% rename from docs/source/teams/api_connection.rst rename to docs/source/enterprise/api_connection.rst index f8f5fb6f388..d73ecc60f4f 100644 --- a/docs/source/teams/api_connection.rst +++ b/docs/source/enterprise/api_connection.rst @@ -1,4 +1,4 @@ -.. _teams-api-connection: +.. _enterprise-api-connection: API Connection ============== @@ -6,7 +6,7 @@ API Connection .. default-role:: code This page describes how to create API keys and configure your -:ref:`SDK installation ` to connect to your Teams +:ref:`SDK installation ` to connect to your Enterprise deployment's API. All actions taken via API connections are authenticated based on the user @@ -16,7 +16,7 @@ dataset permissions *are enforced*. .. note:: **API connections are currently in beta.** The recommended stable solution - is to use your Teams deployment's + is to use your Enterprise deployment's :ref:`MongoDB connection `. .. _configuring-an-api-connection: @@ -27,32 +27,32 @@ Configuring an API connection You can configure an API connection by adding an API URI and API key to your FiftyOne config as described below: -+-------------------------------+-------------------------------------+----------------------------------------------------------------------------------------+ -| Config field | Environment variable | Description | -+===============================+=====================================+========================================================================================+ -| `api_uri` | `FIFTYONE_API_URI` | The URI of your FiftyOne Teams API. Ask your deployment admin for this value. | -+-------------------------------+-------------------------------------+----------------------------------------------------------------------------------------+ -| `api_key` | `FIFTYONE_API_KEY` | Your FiftyOne Teams API key. :ref:`See here ` to generate one. | -+-------------------------------+-------------------------------------+----------------------------------------------------------------------------------------+ ++-------------------------------+-------------------------------------+--------------------------------------------------------------------------------------------------+ +| Config field | Environment variable | Description | ++===============================+=====================================+==================================================================================================+ +| `api_uri` | `FIFTYONE_API_URI` | The URI of your FiftyOne Enterprise API. Ask your deployment admin for this value. | ++-------------------------------+-------------------------------------+--------------------------------------------------------------------------------------------------+ +| `api_key` | `FIFTYONE_API_KEY` | Your FiftyOne Enterprise API key. :ref:`See here ` to generate one. | ++-------------------------------+-------------------------------------+--------------------------------------------------------------------------------------------------+ For example, you can set environment variables: .. code-block:: shell - export FIFTYONE_API_URI==XXXXXXXX - export FIFTYONE_API_KEY==YYYYYYYY + export FIFTYONE_API_URI=XXXXXXXX + export FIFTYONE_API_KEY=YYYYYYYY See :ref:`this page ` for more information about using your FiftyOne config. -.. _teams-generate-api-key: +.. _enterprise-generate-api-key: Generating an API key --------------------- Users can generate and manage API keys via the UI or the -:ref:`Management SDK `. +:ref:`Management SDK `. .. note:: @@ -62,21 +62,21 @@ Generating keys via the UI ~~~~~~~~~~~~~~~~~~~~~~~~~~ You can access API key management features by clicking on your account icon in -the upper-right of the FiftyOne Teams App and navigating to the +the upper-right of the FiftyOne Enterprise App and navigating to the "Settings > API keys" page. A new key can be generated by clicking on "Generate API key" and optionally providing a nickname for the key to identify what it is used for. Click "Generate key" to complete the process. -.. image:: /images/teams/api_key_generate.png +.. image:: /images/enterprise/api_key_generate.png :alt: api-key-generate :align: center Finally, copy the key and configure it locally using one of the options -:ref:`described here `. +:ref:`described here `. -.. image:: /images/teams/api_key_generated.png +.. image:: /images/enterprise/api_key_generated.png :alt: api-key-generated :align: center @@ -97,7 +97,7 @@ generate API keys programmatically. Admins can generate API keys for other users, if desired. -.. _teams-delete-api-key: +.. _enterprise-delete-api-key: Deleting an API key ------------------- @@ -105,7 +105,7 @@ Deleting an API key To delete a key and remove its access, find the key to delete in the list and click "Delete". -.. image:: /images/teams/api_key_delete.png +.. image:: /images/enterprise/api_key_delete.png :alt: api-key-delete :align: center diff --git a/docs/source/teams/cloud_media.rst b/docs/source/enterprise/cloud_media.rst similarity index 93% rename from docs/source/teams/cloud_media.rst rename to docs/source/enterprise/cloud_media.rst index c9cac450d40..d4077808865 100644 --- a/docs/source/teams/cloud_media.rst +++ b/docs/source/enterprise/cloud_media.rst @@ -1,25 +1,25 @@ -.. _teams-cloud-media: +.. _enterprise-cloud-media: Cloud-Backed Media ================== .. default-role:: code -FiftyOne Teams datasets may contain samples whose filepath refers to cloud +FiftyOne Enterprise datasets may contain samples whose filepath refers to cloud object storage paths and/or publicly available URLs. .. note:: - :ref:`Click here ` to see how to configure FiftyOne - Teams to load your cloud credentials! + :ref:`Click here ` to see how to configure FiftyOne + Enterprise to load your cloud credentials! -.. _teams-cloud-media-caching: +.. _enterprise-cloud-media-caching: Cloud media caching ___________________ When you work with cloud-backed datasets using the -:ref:`Teams SDK `, media files will automatically be +:ref:`Enterprise SDK `, media files will automatically be downloaded and cached on the machine you’re working from when you execute workflows such as model inference or Brain methods that require access to the pixels of the media files. This design minimizes bandwidth usage and can @@ -32,12 +32,12 @@ file repeatedly: import fiftyone as fo import fiftyone.brain as fob - dataset = fo.load_dataset("a-teams-dataset") + dataset = fo.load_dataset("an-enterprise-dataset") # Automatically downloads cloud media to your local cache for processing fob.compute_visualization(dataset, brain_key="img_viz") -When launching the App locally using the Teams SDK, media will be served from +When launching the App locally using the Enterprise SDK, media will be served from your local cache whenever possible; otherwise it will be automatically retrieved from the cloud: @@ -46,14 +46,14 @@ retrieved from the cloud: import fiftyone as fo - dataset = fo.load_dataset("a-teams-dataset") + dataset = fo.load_dataset("an-enterprise-dataset") # Any media you view will be automatically retrieved from the cloud session = fo.launch_app(dataset) By default, viewing media in the App will not add it to your local media cache, but, if desired, you can enable caching of images via the `cache_app_images` -parameter of your :ref:`media cache config `. Viewing +parameter of your :ref:`media cache config `. Viewing video datasets in the App will never cause previously uncached videos to be cached locally. @@ -70,7 +70,7 @@ cached locally. available when viewing datasets in the App. Otherwise, the App must pull this metadata each time you view a sample. -.. _teams-media-cache-config: +.. _enterprise-media-cache-config: Media cache config __________________ @@ -83,8 +83,8 @@ of virtual CPU cores on your machine to download media files. When the cache is full, local files are automatically deleted in reverse order of when they were last accessed (i.e., oldest deleted first). -You can configure the behavior of FiftyOne Team’s media cache in any of the -following ways. +You can configure the behavior of FiftyOne Enterprise’s media cache in any of +the following ways. 1. Configure your media cache on a per-session basis by setting any of the following environment variables (default values shown): @@ -116,12 +116,12 @@ You can change the location of this file by setting the If you combine multiple options above, environment variables will take precedence over JSON config settings. -.. _teams-cloud-media-python: +.. _enterprise-cloud-media-python: Working with cloud-backed datasets __________________________________ -When writing Python code using the Teams client that may involve cloud-backed +When writing Python code using the Enterprise client that may involve cloud-backed datasets, use `sample.local_path` instead of `sample.filepath` to retrieve the location of the locally cached version of a media file: @@ -130,7 +130,7 @@ the location of the locally cached version of a media file: import fiftyone as fo - dataset = fo.load_dataset("a-teams-dataset") + dataset = fo.load_dataset("an-enterprise-dataset") sample = dataset.first() print(sample.filepath) @@ -142,7 +142,7 @@ the location of the locally cached version of a media file: .. note:: If `sample.filepath` itself is a local path, then `sample.local_path` - will simply return that path. In other words, it is safe to write all Teams + will simply return that path. In other words, it is safe to write all Enterprise Python code as if the dataset contains cloud-backed media. .. note:: @@ -179,7 +179,7 @@ when iterating over samples in a collection: import fiftyone as fo - dataset = fo.load_dataset("a-teams-dataset") + dataset = fo.load_dataset("an-enterprise-dataset") # Download media using the default batching strategy with dataset.download_context(): @@ -195,7 +195,7 @@ when iterating over samples in a collection: You can configure the default size of each download batch via the ``download_size_bytes`` parameter of your - :ref:`media cache config `. + :ref:`media cache config `. Download contexts provide a middle ground between the two extremes: @@ -378,7 +378,7 @@ or you can use `delete_files()` to delete assets: All of the above methods use the media cache's thread pool to maximize throughput. -.. _teams-cloud-api-reference: +.. _enterprise-cloud-api-reference: API reference _____________ @@ -721,7 +721,7 @@ _____________ the list of remote paths """ -.. _teams-annotating-cloud-media: +.. _enterprise-annotating-cloud-media: Annotating cloud-backed datasets with CVAT __________________________________________ @@ -769,7 +769,7 @@ collection being annotated, then you can simply pass `cloud_manifest=True`: The cloud manifest file must contain all media files in the sample collection being annotated. -.. _teams-annotating-cloud-media-v7: +.. _enterprise-annotating-cloud-media-v7: Annotating cloud-backed datasets with V7 Darwin _______________________________________________ @@ -798,7 +798,7 @@ specify the sluggified external storage name: ... ) -.. _teams-annotating-cloud-media-labelbox: +.. _enterprise-annotating-cloud-media-labelbox: Annotating cloud-backed datasets with Labelbox ______________________________________________ @@ -832,24 +832,24 @@ method to pass URLs for your S3-backed media when creating Labelbox data rows. any Google Cloud, Azure, or local media will still be uploaded to Labelbox as usual. -.. _teams-cloud-functions: +.. _enterprise-cloud-functions: AWS Lambda and Google Cloud Functions _____________________________________ -FiftyOne Teams can easily be used in AWS Lambda Functions and Google Cloud +FiftyOne Enterprise can easily be used in AWS Lambda Functions and Google Cloud Functions. **Requirements** -We recommend including Teams in your function’s `requirements.txt` file by -passing your token as a build environment variable, e.g., -`FIFTYONE_TEAMS_TOKEN` and then using the syntax below to specify the version -of the Teams client to use: +We recommend including FiftyOne Enterprise in your function’s `requirements.txt` +file by passing your token as a build environment variable, e.g., +`FIFTYONE_ENTERPRISE_TOKEN` and then using the syntax below to specify the version +of the FiftyOne Enterprise client to use: .. code-block:: text - https://${FIFTYONE_TEAMS_TOKEN}@pypi.fiftyone.ai/packages/fiftyone-0.6.6-py3-none-any.whl + https://${FIFTYONE_ENTERPRISE_TOKEN}@pypi.fiftyone.ai/packages/fiftyone-0.6.6-py3-none-any.whl **Runtime** diff --git a/docs/source/teams/data_lens.rst b/docs/source/enterprise/data_lens.rst similarity index 96% rename from docs/source/teams/data_lens.rst rename to docs/source/enterprise/data_lens.rst index 048cc6811e7..38c0df9c49e 100644 --- a/docs/source/teams/data_lens.rst +++ b/docs/source/enterprise/data_lens.rst @@ -5,9 +5,9 @@ Data Lens .. default-role:: code -**Available in FiftyOne Teams v2.2+** +**Available in FiftyOne Enterprise v2.2+** -Data Lens is a feature built into the :ref:`FiftyOne Teams App ` +Data Lens is a feature built into the :ref:`FiftyOne Enterprise App ` which allows you to use FiftyOne to explore and import samples from external data sources. @@ -17,7 +17,7 @@ Whether your data resides in a database like PostgreSQL or a data lake like data sources, visualize sample data, and import into FiftyOne for further analysis. -.. image:: /images/teams/data_lens_home.png +.. image:: /images/enterprise/data_lens_home.png :alt: data-lens-home-tab :align: center @@ -59,7 +59,7 @@ Once your operator is defined, you can navigate to the "Data sources" tab by clicking on the tab header or by clicking on "Connect to a data source" from the "Home" tab. -.. image:: /images/teams/data_lens_data_sources_empty.png +.. image:: /images/enterprise/data_lens_data_sources_empty.png :alt: data-lens-data-sources-empty :align: center @@ -68,13 +68,13 @@ Add a new data source by clicking on "Add data source". Enter a useful name for your data source and provide the URI for your operator. The URI should have the format `/`. -.. image:: /images/teams/data_lens_add_data_source.png +.. image:: /images/enterprise/data_lens_add_data_source.png :alt: data-lens-add-data-source :align: center Click "Connect" once you're finished to save your configuration. -.. image:: /images/teams/data_lens_data_sources.png +.. image:: /images/enterprise/data_lens_data_sources.png :alt: data-lens-data-sources :align: center @@ -107,7 +107,7 @@ allowing you to tailor your search experience to exactly what you need. Selecting a new data source will automatically update the query parameters to match those expected by your data source. -.. image:: /images/teams/data_lens_query.png +.. image:: /images/enterprise/data_lens_query.png :alt: data-lens-query :align: center @@ -116,7 +116,7 @@ at the bottom of the page to fetch samples which match your query parameters. These samples will be displayed in the preview panel, along with any features associated with the sample like labels or bounding boxes. -.. image:: /images/teams/data_lens_preview.png +.. image:: /images/enterprise/data_lens_preview.png :alt: data-lens-preview :align: center @@ -139,7 +139,7 @@ Importing samples to FiftyOne After generating a preview in Data Lens, you can click on the "Import data" button to open the import dialog. -.. image:: /images/teams/data_lens_import_dialog.png +.. image:: /images/enterprise/data_lens_import_dialog.png :alt: data-lens-import-dialog :align: center @@ -166,7 +166,7 @@ sample. When you click import, you will have the option to either execute immediately or to schedule this import for asynchronous execution. -.. image:: /images/teams/data_lens_import_options.png +.. image:: /images/enterprise/data_lens_import_options.png :alt: data-lens-import-options :align: center @@ -177,7 +177,7 @@ import, as this will result in more consistent and performant execution. .. note:: Scheduled imports use the - :ref:`delegated operations ` framework to + :ref:`delegated operations ` framework to execute asynchronously on your connected compute cluster! After selecting your execution preference, you will be able to monitor the @@ -187,20 +187,20 @@ In the case of immediate execution, you will be presented with an option to view your samples once the import is complete. Clicking on this button will open your destination dataset containing your imported samples. -.. image:: /images/teams/data_lens_immediate_import.png +.. image:: /images/enterprise/data_lens_immediate_import.png :alt: data-lens-immediate-import :align: center In the case of scheduled execution, you will be presented with an option to -visit the :ref:`Runs page `. +visit the :ref:`Runs page `. -.. image:: /images/teams/data_lens_scheduled_import.png +.. image:: /images/enterprise/data_lens_scheduled_import.png :alt: data-lens-scheduled-import :align: center From the Runs page, you can track the status of your import. -.. image:: /images/teams/data_lens_runs_page.png +.. image:: /images/enterprise/data_lens_runs_page.png :alt: data-lens-runs-page :align: center @@ -208,7 +208,7 @@ Once your samples are imported, you will be able to leverage the full capabilities of FiftyOne to analyze and curate your data, and you can continue to use Data Lens to augment your datasets. -.. image:: /images/teams/data_lens_imported_samples.png +.. image:: /images/enterprise/data_lens_imported_samples.png :alt: data-lens-imported-samples :align: center @@ -235,7 +235,7 @@ Setting up your operator To assist with Data Lens integration, we can use the :class:`DataLensOperator ` -base class provided with the Teams SDK. This base class handles the +base class provided with the Enterprise SDK. This base class handles the implementation for the operator's `execute()` method, and defines a single abstract method that we'll implement. @@ -282,7 +282,7 @@ Let's take a look at what we have so far. Our operator extends the :class:`DataLensOperator ` -provided by the Teams SDK. This base class defines the abstract +provided by the Enterprise SDK. This base class defines the abstract :meth:`handle_lens_search_request() ` method, which we will need to implement. @@ -351,7 +351,7 @@ the following properties: The `ctx` argument provides access to a :ref:`range of useful capabilities ` which you can leverage in your operator, including things like -:ref:`providing secrets to your operator `. +:ref:`providing secrets to your operator `. Using these inputs, we are expected to return a generator which yields :class:`DataLensSearchResponse ` @@ -423,7 +423,7 @@ tab to interact with the operator. When we click the preview button, the Data Lens framework invokes our operator to retrieve sample data. Our operator yields a single sample, and we see that sample shown in the preview. -.. image:: /images/teams/data_lens_synthetic_sample.png +.. image:: /images/enterprise/data_lens_synthetic_sample.png :alt: data-lens-synthetic-sample :align: center @@ -458,7 +458,7 @@ Let's modify our operator to incorporate the `request.batch_size` property. Now if we re-run our preview, we see that we get a number of samples equal to the "Number of preview samples" input. -.. image:: /images/teams/data_lens_synthetic_batch.png +.. image:: /images/enterprise/data_lens_synthetic_batch.png :alt: data-lens-synthetic-batch :align: center @@ -502,7 +502,7 @@ method. With this method implemented, Data Lens will construct a form allowing users to define any or all of these inputs. -.. image:: /images/teams/data_lens_synthetic_query.png +.. image:: /images/enterprise/data_lens_synthetic_query.png :alt: data-lens-synthetic-query :align: center @@ -554,7 +554,7 @@ Now when we run our preview, we can see that the text we provide as input is reflected in the samples returned by our operator. Modifying the text and regenerating the preview yields the expected result. -.. image:: /images/teams/data_lens_synthetic_text.png +.. image:: /images/enterprise/data_lens_synthetic_text.png :alt: data-lens-synthetic-text :align: center @@ -1072,7 +1072,7 @@ Let's take a look at a few parts in detail. # Create our client client = bigquery.Client() -In practice, you'll likely need to use :ref:`secrets ` to +In practice, you'll likely need to use :ref:`secrets ` to securely provide credentials to connect to your data source. .. code-block:: python diff --git a/docs/source/teams/data_quality.rst b/docs/source/enterprise/data_quality.rst similarity index 87% rename from docs/source/teams/data_quality.rst rename to docs/source/enterprise/data_quality.rst index 3456c323a19..22afb2e9bd3 100644 --- a/docs/source/teams/data_quality.rst +++ b/docs/source/enterprise/data_quality.rst @@ -5,10 +5,10 @@ Data Quality .. default-role:: code -**Available in FiftyOne Teams v2.2+** +**Available in FiftyOne Enterprise v2.2+** The Data Quality panel is a builtin feature of the -:ref:`FiftyOne Teams App ` that automatically scans your dataset +:ref:`FiftyOne Enterprise App ` that automatically scans your dataset for common quality issues and helps you explore and take action to resolve them. @@ -34,7 +34,7 @@ current analysis/review status: Click on the right arrow of an issue type's card to open its expanded view. -.. image:: /images/teams/data_quality_home.png +.. image:: /images/enterprise/data_quality_home.png :alt: data-quality-home :align: center @@ -46,13 +46,13 @@ ___________________ If you have not yet scanned a dataset for a given issue type, you'll see a landing page like this: -.. image:: /images/teams/data_quality_brightness_scan.png +.. image:: /images/enterprise/data_quality_brightness_scan.png :alt: data-quality-brightness-scan :align: center Clicking the "Scan Dataset" button presents two choices for execution: -.. image:: /images/teams/data_quality_brightness_scan_options.png +.. image:: /images/enterprise/data_quality_brightness_scan_options.png :alt: data-quality-brightness-scan-options :align: center @@ -63,17 +63,17 @@ Clicking the "Scan Dataset" button presents two choices for execution: few minutes. Choose "Schedule" for all production data, which schedules the scan for - :ref:`delegated execution ` on your compute + :ref:`delegated execution ` on your compute cluster. While a scan is in-progress, you'll see a status page like this: -.. image:: /images/teams/data_quality_brightness_scheduled.png +.. image:: /images/enterprise/data_quality_brightness_scheduled.png :alt: data-quality-brightness-scheduled :align: center Click the link in the notification to navigate to the dataset's -:ref:`Runs page ` where you can monitor +:ref:`Runs page ` where you can monitor the status of the task. .. _data-quality-analyze: @@ -84,7 +84,7 @@ ______________________ Once an issue scan is complete, its card will update to display an interactive histogram that you can use to analyze the findings: -.. image:: /images/teams/data_quality_brightness_analysis.png +.. image:: /images/enterprise/data_quality_brightness_analysis.png :alt: data-quality-brightness-analysis :align: center @@ -120,7 +120,7 @@ You can also use the threshold slider to manually explore different threshold ranges. When you release the slider, the Samples panel will automatically update to show the corresponding samples: -.. image:: /images/teams/data_quality_brightness_slider.gif +.. image:: /images/enterprise/data_quality_brightness_slider.gif :alt: data-quality-brightness-slider :align: center @@ -132,7 +132,7 @@ Once you've reviewed the potential issues in the grid, you can use the "Add Tags" button to take action on them. Clicking the button will display a modal like this: -.. image:: /images/teams/data_quality_brightness_tag.png +.. image:: /images/enterprise/data_quality_brightness_tag.png :alt: data-quality-brightness-tag :align: center @@ -154,7 +154,7 @@ If you navigate away from an issue type that is currently "In Review", you'll be prompted to indicate whether or not you'd like to mark the issue type as "Reviewed": -.. image:: /images/teams/data_quality_brightness_mark_as_reviewed.png +.. image:: /images/enterprise/data_quality_brightness_mark_as_reviewed.png :alt: data-quality-brightness-mark-as-reviewed :align: center @@ -176,7 +176,7 @@ the panel will automatically detect the presence of unscanned samples and will display contextual information from the :ref:`home page ` and :ref:`analysis page `: -.. image:: /images/teams/data_quality_new_samples_home.png +.. image:: /images/enterprise/data_quality_new_samples_home.png :alt: data-quality-new-samples-home :align: center @@ -185,7 +185,7 @@ To update an existing scan, open the issue type and click the :ref:`analysis page `. This will open a modal that provides additional context and prompts you to initiate the new samples scan: -.. image:: /images/teams/data_quality_new_samples_modal.png +.. image:: /images/enterprise/data_quality_new_samples_modal.png :alt: data-quality-new-samples-modal :align: center diff --git a/docs/source/teams/dataset_versioning.rst b/docs/source/enterprise/dataset_versioning.rst similarity index 94% rename from docs/source/teams/dataset_versioning.rst rename to docs/source/enterprise/dataset_versioning.rst index 68ff457ffec..98e960a25ac 100644 --- a/docs/source/teams/dataset_versioning.rst +++ b/docs/source/enterprise/dataset_versioning.rst @@ -5,7 +5,7 @@ Dataset Versioning .. default-role:: code -FiftyOne Teams provides native support for versioning your datasets! +FiftyOne Enterprise provides native support for versioning your datasets! Dataset Versioning allows you to capture the state of your dataset in time so that it can be referenced in the future. This enables workflows like recalling @@ -24,7 +24,7 @@ annotation added, etc) as well as helping to prevent accidental data loss. Overview ________ -Dataset Versioning in FiftyOne Teams is implemented as a linear sequence of +Dataset Versioning in FiftyOne Enterprise is implemented as a linear sequence of read-only :ref:`Snapshots `. In other words, creating a new Snapshot creates a permanent record of the dataset’s contents that can be loaded and viewed at any time in the future, but not directly @@ -78,7 +78,7 @@ Dataset Versioning has been built with an extensible architecture so that different versioning backends can be swapped in. Each backend may have different tradeoffs in terms of performance, storage, and deployment needs, so users should be able to choose the best fit for their needs. In addition, many -users may already have a versioning solution external to FiftyOne Teams, and +users may already have a versioning solution external to FiftyOne Enterprise, and the goal is to support integration around those use cases as well. Currently, only the @@ -97,7 +97,7 @@ are :ref:`on the roadmap `. Snapshots _________ -Dataset Versioning in FiftyOne Teams is implemented as a linear history of +Dataset Versioning in FiftyOne Enterprise is implemented as a linear history of **Snapshots**. A Snapshot captures the state of a dataset at a particular point in time as an immutable object. Compare this concept to creating commits and tags in a single branch of a version control system such as git or svn; a @@ -133,7 +133,7 @@ choices and user actions. Virtual Snapshot A Snapshot whose state and contents are stored by the pluggable backend versioning implementation in whatever way it chooses. In order to be - loaded by FiftyOne Teams users, the Snapshot must be *materialized* + loaded by FiftyOne Enterprise users, the Snapshot must be *materialized* into its workable form in MongoDB. This is done through a combination of the overarching versioning infrastructure and the specific versioning backend. @@ -165,7 +165,7 @@ creating snapshots causes database storage to grow quickly! When a snapshot is archived, all of its contents are stored in an archive in the configured cold storage location: either a mounted filesystem or cloud storage folder (using your deployment's -:ref:`cloud credentials `). +:ref:`cloud credentials `). .. note:: @@ -237,7 +237,7 @@ Usage notes Snapshot permissions ____________________ -The table below shows the :ref:`dataset permissions ` +The table below shows the :ref:`dataset permissions ` required to perform different Snapshot-related operations: +----------------------------+----------------------------------+ @@ -278,20 +278,20 @@ trigger a modification to the stored dataset. List snapshots -------------- -Teams UI -~~~~~~~~ +Enterprise UI +~~~~~~~~~~~~~ To access the Snapshot history and management page, click the "History tab" on a dataset's main page. -.. image:: /images/teams/versioning/history-tab-button.png +.. image:: /images/enterprise/versioning/history-tab-button.png :alt: history-tab-button :align: center On this page you can see a listing of the Snapshot history for the dataset. Each row contains information about a single Snapshot. -.. image:: /images/teams/versioning/snapshot-list.png +.. image:: /images/enterprise/versioning/snapshot-list.png :alt: snapshot-list :align: center @@ -330,16 +330,16 @@ Loading snapshots ----------------- Any user with Can View permissions to a dataset can view and load its snapshots -via the Teams UI or the SDK. +via the Enterprise UI or the SDK. -Teams UI -~~~~~~~~ +Enterprise UI +~~~~~~~~~~~~~ From the dataset's History tab, click the "Browse" button next to a Snapshot in the :ref:`snapshot list ` to load the Snapshot in the UI. -.. image:: /images/teams/versioning/browse-button.png +.. image:: /images/enterprise/versioning/browse-button.png :alt: history-browse-button :align: center @@ -353,7 +353,7 @@ button. For the above Snapshot, it would look like this: .. code-block:: text - https:///datasets/roadscene-vehicle-detection/samples?snapshot=new+snapshot + https:///datasets/roadscene-vehicle-detection/samples?snapshot=new+snapshot One other difference from the normal page is the Snapshot banner which gives information about the Snapshot being viewed, and other quick-click operations. @@ -361,7 +361,7 @@ Clicking the name line drops down a list of the Snapshots where the current one is highlighted. Clicking on a Snapshot in the dropdown will navigate to the browse page for that Snapshot. -.. image:: /images/teams/versioning/browse-banner-dropdown.png +.. image:: /images/enterprise/versioning/browse-banner-dropdown.png :alt: browse-banner-dropdown :align: center @@ -372,7 +372,7 @@ from the 3-dot (kebab) menu which gives various :ref:`management functions ` for the current Snapshot. -.. image:: /images/teams/versioning/browse-banner-right.png +.. image:: /images/enterprise/versioning/browse-banner-right.png :alt: browse-banner-rightside :align: center @@ -409,14 +409,14 @@ Creating a snapshot ------------------- Users with Can Manage permissions to a dataset can create Snapshots through the -Teams UI or the Management SDK. +Enterprise UI or the Management SDK. .. note:: Snapshots can only be created from the HEAD of the dataset. -Teams UI -~~~~~~~~ +Enterprise UI +~~~~~~~~~~~~~ At the top of the History tab for a dataset is the Create snapshot panel. This panel shows the number of changes that have happened between the last @@ -427,7 +427,7 @@ Snapshot and the current state of the dataset. The latest changes summary is not continuously updated; click the "Refresh" button to recompute these values. -.. image:: /images/teams/versioning/create-refresh-button.png +.. image:: /images/enterprise/versioning/create-refresh-button.png :alt: create-refresh-button :align: center @@ -440,13 +440,13 @@ click the "Save new snapshot" button. used, deployment options chosen, and the size of the dataset, this may take some time. -.. image:: /images/teams/versioning/create-save-button.png +.. image:: /images/enterprise/versioning/create-save-button.png :alt: create-save-button :align: center After creation, the new Snapshot will show up in the list! -.. image:: /images/teams/versioning/history-new-snapshot.png +.. image:: /images/enterprise/versioning/history-new-snapshot.png :alt: history-new-snapshot :align: center @@ -505,7 +505,7 @@ Deleting a snapshot ------------------- Users with Can Manage permissions to a dataset can delete snapshots through the -Teams UI or the Management SDK. +Enterprise UI or the Management SDK. If the Snapshot is the most recent, the latest (HEAD) sample changes summary is not automatically recalculated. See @@ -520,14 +520,14 @@ Snapshot. Deleting a Snapshot cannot be undone! -Teams UI -~~~~~~~~ +Enterprise UI +~~~~~~~~~~~~~ To delete a Snapshot via the App, open the 3-dot (kebab) menu for the Snapshot. In the menu, click "Delete snapshot". This will bring up a confirmation dialog to prevent accidental deletions. -.. image:: /images/teams/versioning/delete-snapshot.png +.. image:: /images/enterprise/versioning/delete-snapshot.png :alt: delete-snapshot :align: center @@ -562,15 +562,15 @@ of a given Snapshot. **all** changes between the selected Snapshot and the current working version of the dataset, including all newer Snapshots. -Teams UI -~~~~~~~~ +Enterprise UI +~~~~~~~~~~~~~ To revert a dataset to a Snapshot's state, click the 3-dot (kebab) menu in the History tab for the Snapshot you want to rollback to and select "Rollback to this snapshot". This will bring up a confirmation dialog to prevent accidental deletions. -.. image:: /images/teams/versioning/rollback-snapshot.png +.. image:: /images/enterprise/versioning/rollback-snapshot.png :alt: rollback-snapshot :align: center @@ -615,15 +615,15 @@ configured cold storage location via the UI or the Management SDK. The snapshot must first be :ref:`unarchived `. -Teams UI -~~~~~~~~ +Enterprise UI +~~~~~~~~~~~~~ To manually archive a snapshot, click the 3-dot (kebab) menu in the History tab for a snapshot you want to archive and select "Archive snapshot". This will begin the archival process and the browse button will be replaced with an "Archiving" spinner": -.. image:: /images/teams/versioning/archive-snapshot.png +.. image:: /images/enterprise/versioning/archive-snapshot.png :alt: archive-snapshot :align: center @@ -655,14 +655,14 @@ Unarchive snapshot To make an archived snapshot browsable again, users with Can Manage permissions to the dataset can unarchive it via the UI or Management SDK. -Teams UI -~~~~~~~~ +Enterprise UI +~~~~~~~~~~~~~ To unarchive a snapshot, click the "Unarchive" button in the History tab for a snapshot you want to unarchive. This will begin the unarchival process and the archive button will be replaced with an "Unarchiving" spinner: -.. image:: /images/teams/versioning/unarchive-snapshot.png +.. image:: /images/enterprise/versioning/unarchive-snapshot.png :alt: unarchive-snapshot :align: center @@ -701,7 +701,7 @@ better suit the users' needs and technology preferences. In the future, this section will contain information and discussion about each of these available backends, including their strengths/limitations and configuration options. -For the initial release in FiftyOne Teams v1.4.0, however, there is only one +For the initial release in FiftyOne Enterprise v1.4.0, however, there is only one backend choice described below. Additional backends may be implemented in the future, but for now, releasing dataset versioning with the first iteration was prioritized so that users can begin to see value and provide @@ -808,7 +808,7 @@ following advice: Configuration ------------- -Since Snapshots impact the storage needs of FiftyOne Teams, some guard rails +Since Snapshots impact the storage needs of FiftyOne Enterprise, some guard rails have been put in place to control the maximum amount of Snapshots that can be created. If a threshold has been exceeded while a user attempts to create a new Snapshot, they will receive an error informing them that it may be time to @@ -844,7 +844,7 @@ Roadmap _______ The following are some items that are on the roadmap for future iterations -of the dataset versioning system. Keep an eye out for future FiftyOne Teams +of the dataset versioning system. Keep an eye out for future FiftyOne Enterprise versions for these additional features! **Near term** diff --git a/docs/source/teams/teams_app.rst b/docs/source/enterprise/enterprise_app.rst similarity index 69% rename from docs/source/teams/teams_app.rst rename to docs/source/enterprise/enterprise_app.rst index ae4d9abfb7e..6475418fa8a 100644 --- a/docs/source/teams/teams_app.rst +++ b/docs/source/enterprise/enterprise_app.rst @@ -1,24 +1,24 @@ -.. _teams-app: +.. _enterprise-app: -FiftyOne Teams App -================== +FiftyOne Enterprise App +======================= .. default-role:: code -The FiftyOne Teams App allows you to visualize, browse, and interact with your +The FiftyOne Enterprise App allows you to visualize, browse, and interact with your individual datasets like you can with the :ref:`FiftyOne App `, but with expanded features for organizing, permissionsing, versioning, and sharing your team's datasets, all from a centralized web portal. This page provides a brief overview of some features available only in the -FiftyOne Teams App. +FiftyOne Enterprise App. -.. _teams-homepage: +.. _enterprise-homepage: The homepage ____________ -When you login to the FiftyOne Teams App, you'll land on the homepage pictured +When you login to the FiftyOne Enterprise App, you'll land on the homepage pictured below. In the top bar of this page, on the left side, the gray number next to @@ -28,14 +28,14 @@ buttons at the bottom of the page to see different batches of datasets. .. note:: - You can return to the homepage from any page of the Teams App by clicking on + You can return to the homepage from any page of the Enterprise App by clicking on the Voxel51 logo in the upper left corner. -.. image:: /images/teams/homepage.png +.. image:: /images/enterprise/homepage.png :alt: app-homepage :align: center -.. _teams-pinned-datasets: +.. _enterprise-pinned-datasets: Pinned datasets --------------- @@ -52,12 +52,12 @@ To unpin a dataset, click the pin icon next to the dataset name in the "Your pinned datasets" widget or the pin next to the dataset's name in the main table. -.. image:: /images/teams/pinned_datasets.png +.. image:: /images/enterprise/pinned_datasets.png :alt: pin-datasets :align: center :width: 500 -.. _teams-sorting-datasets: +.. _enterprise-sorting-datasets: Sorting datasets ---------------- @@ -66,12 +66,12 @@ You can use the drop-down menu in the upper left of the main table to sort your datasets by various criteria, including size, creation date, recently used, and alphabetically by name: -.. image:: /images/teams/ordering_datasets.png +.. image:: /images/enterprise/ordering_datasets.png :alt: order-datasets :align: center :width: 500 -.. _teams-filtering-datasets: +.. _enterprise-filtering-datasets: Filtering datasets ------------------ @@ -79,7 +79,7 @@ Filtering datasets You can use the search bar (with the magnifying glass icon) in the upper right corner of the dataset table to filter datasets by name, tags, and media type: -.. image:: /images/teams/dataset_search_bar.png +.. image:: /images/enterprise/dataset_search_bar.png :alt: dataset-search-bar :align: center :width: 500 @@ -88,12 +88,12 @@ By default, datasets that match across any supported field are returned, but you can narrow the search to specific fields by selecting the relevant option in the search dropdown: -.. image:: /images/teams/dataset_search_fields.png +.. image:: /images/enterprise/dataset_search_fields.png :alt: dataset-search-fields :align: center :width: 500 -.. _teams-creating-datasets: +.. _enterprise-creating-datasets: Creating datasets _________________ @@ -118,19 +118,19 @@ description, and tags for the dataset: .. note:: A dataset's name, description, and tags can be edited later from the - dataset's :ref:`Manage tab `. + dataset's :ref:`Manage tab `. -.. image:: /images/teams/create_dataset.png +.. image:: /images/enterprise/create_dataset.png :alt: create-dataset :align: center .. note:: - What next? Use the :ref:`Teams Python SDK ` to upload new + What next? Use the :ref:`Enterprise Python SDK ` to upload new samples, labels, and metadata to your dataset. A common approach is to - automate this process via :ref:`cloud functions `. + automate this process via :ref:`cloud functions `. -.. _teams-using-datasets: +.. _enterprise-using-datasets: Using a dataset _______________ @@ -140,7 +140,7 @@ Click on a dataset from the homepage to open the dataset's "Samples" tab. From the Samples tab you can visualize, tag, filter, and explore your dataset just as you would via the :ref:`FiftyOne App `. -.. image:: /images/teams/samples_page.png +.. image:: /images/enterprise/samples_page.png :alt: samples-page :align: center @@ -149,74 +149,74 @@ just as you would via the :ref:`FiftyOne App `. Did you know? You can also navigate directly to a dataset of interest by pasting its URL into your browser's URL bar. -.. _teams-managing-datasets: +.. _enterprise-managing-datasets: Managing a dataset __________________ -The FiftyOne Teams App provides a number of options for managing existing +The FiftyOne Enterprise App provides a number of options for managing existing datasets, as described below. -You can access these options from the :ref:`Samples tab ` +You can access these options from the :ref:`Samples tab ` by clicking on the "Manage" tab in the upper left corner of the page. You can also directly navigate to this page from the -:ref:`homepage ` by clicking the three dots on the +:ref:`homepage ` by clicking the three dots on the right hand side of a row of the dataset listing table and selecting "Edit dataset". .. note:: - Did you know? You can also use the :ref:`Teams SDK ` to + Did you know? You can also use the :ref:`Enterprise SDK ` to programmatically, create, edit, and delete datasets. -.. _teams-dataset-basic-info: +.. _enterprise-dataset-basic-info: Basic info ---------- The "Basic info" tab is accessible to all users with -:ref:`Can view ` access to the dataset. +:ref:`Can view ` access to the dataset. -Users with :ref:`Can manage ` permissions on the dataset can +Users with :ref:`Can manage ` permissions on the dataset can edit the name, description, and tags of a dataset from this page. Additionally, members can create a copy of the dataset by clicking on the "Clone this dataset" button. -.. image:: /images/teams/dataset_basic_info.png +.. image:: /images/enterprise/dataset_basic_info.png :alt: dataset-basic-info :align: center -.. _teams-dataset-access: +.. _enterprise-dataset-access: Access ------ The "Access" tab is only accessible to users with -:ref:`Can manage ` permissions on the dataset. +:ref:`Can manage ` permissions on the dataset. From this tab, users can add, remove, edit, or invite users to the dataset. -Refer to :ref:`this page ` for more information about the +Refer to :ref:`this page ` for more information about the available dataset-level permissions that you can grant. -.. image:: /images/teams/dataset_access.png +.. image:: /images/enterprise/dataset_access.png :alt: dataset-access :align: center -.. _teams-dataset-danger-zone: +.. _enterprise-dataset-danger-zone: Danger zone ----------- The "Danger zone" tab is only accessible to users with -:ref:`Can manage ` permissions on the dataset. +:ref:`Can manage ` permissions on the dataset. From this tab, you can select "Delete entire dataset" to permanently delete a -dataset from your Teams deployment. You must type the dataset's full name in +dataset from your Enterprise deployment. You must type the dataset's full name in the modal to confirm this action. -.. image:: /images/teams/dataset_danger_zone.png +.. image:: /images/enterprise/dataset_danger_zone.png :alt: danger-zone :align: center diff --git a/docs/source/teams/teams_plugins.rst b/docs/source/enterprise/enterprise_plugins.rst similarity index 82% rename from docs/source/teams/teams_plugins.rst rename to docs/source/enterprise/enterprise_plugins.rst index fe0b50719b6..a50f0ee57d4 100644 --- a/docs/source/teams/teams_plugins.rst +++ b/docs/source/enterprise/enterprise_plugins.rst @@ -1,73 +1,73 @@ -.. _teams-plugins: +.. _enterprise-plugins: -FiftyOne Teams Plugins -====================== +FiftyOne Enterprise Plugins +=========================== .. default-role:: code -FiftyOne Teams provides native support for installing and running +FiftyOne Enterprise provides native support for installing and running :ref:`FiftyOne plugins `, which offers powerful opportunities -to extend and customize the functionality of your Teams deployment to suit your +to extend and customize the functionality of your Enterprise deployment to suit your needs. .. note:: What can you do with plugins? Check out - :ref:`delegated operations ` to see some quick + :ref:`delegated operations ` to see some quick examples, then check out the `FiftyOne plugins `_ repository for a growing collection of prebuilt plugins that you can add to - your Teams deployment! + your Enterprise deployment! -.. _teams-plugins-page: +.. _enterprise-plugins-page: Plugins page ____________ Admins can use the plugins page to upload, manage, and configure permissions -for plugins that are made available to users of your Teams deployment. +for plugins that are made available to users of your Enterprise deployment. Admins can access the plugins page under Settings > Plugins. It displays a list of all installed plugins and their operators, as well as the enablement and permissions of each. -.. image:: /images/teams/plugins_page.png - :alt: teams-plugins-page +.. image:: /images/enterprise/plugins_page.png + :alt: enterprise-plugins-page :align: center -.. _teams-plugins-install: +.. _enterprise-plugins-install: Installing a plugin ___________________ -Admins can install plugins via the Teams UI or Management SDK. +Admins can install plugins via the Enterprise UI or Management SDK. .. note:: A plugin is a directory (or ZIP of it) that contains a top-level ``fiftyone.yml`` file. -Teams UI --------- +Enterprise UI +------------- To install a plugin, click the "Install plugin" button on the plugins page. -.. image:: /images/teams/plugins_install_btn.png - :alt: teams-plugins-page-install-button +.. image:: /images/enterprise/plugins_install_btn.png + :alt: enterprise-plugins-page-install-button :align: center Then upload or drag and drop the plugin contents as a ZIP file and click install. -.. image:: /images/teams/plugins_install.png - :alt: teams-plugins-page-install-page +.. image:: /images/enterprise/plugins_install.png + :alt: enterprise-plugins-page-install-page :align: center You should then see a success message and the newly installed plugin listed on the plugins page. -.. image:: /images/teams/plugins_install_success.png - :alt: teams-plugins-page-install-success-page +.. image:: /images/enterprise/plugins_install_success.png + :alt: enterprise-plugins-page-install-success-page :align: center SDK @@ -85,27 +85,27 @@ the Management SDK: # You can pass the directory or an already zipped version of it fom.upload_plugin("/path/to/plugin_dir") -.. _teams-plugins-upgrade: +.. _enterprise-plugins-upgrade: Upgrading a plugin __________________ -Admins can upgrade plugins at any time through the Teams UI or Management SDK. +Admins can upgrade plugins at any time through the Enterprise UI or Management SDK. -Teams UI --------- +Enterprise UI +------------- To upgrade a plugin, click the plugin's dropdown and select "Upgrade plugin". -.. image:: /images/teams/plugins_upgrade_btn.png - :alt: teams-plugins-page-upgrade-btn +.. image:: /images/enterprise/plugins_upgrade_btn.png + :alt: enterprise-plugins-page-upgrade-btn :align: center Then upload or drag and drop the upgraded plugin as a ZIP file and click upgrade. -.. image:: /images/teams/plugins_upgrade_page.png - :alt: teams-plugins-page-upgrade-page +.. image:: /images/enterprise/plugins_upgrade_page.png + :alt: enterprise-plugins-page-upgrade-page :align: center .. note:: @@ -117,8 +117,8 @@ upgrade. You should then see a success message and the updated information about the plugin on the plugins page. -.. image:: /images/teams/plugins_upgrade_success_page.png - :alt: teams-plugins-page-upgrade-success-page +.. image:: /images/enterprise/plugins_upgrade_success_page.png + :alt: enterprise-plugins-page-upgrade-success-page :align: center SDK @@ -136,28 +136,28 @@ the Management SDK with the `overwrite=True` option: # You can pass the directory or an already zipped version of it fom.upload_plugin("/path/to/plugin_dir", overwrite=True) -.. _teams-plugins-uninstall: +.. _enterprise-plugins-uninstall: Uninstalling a plugin _____________________ -Admins can uninstall plugins at any time through the Teams UI or Management +Admins can uninstall plugins at any time through the Enterprise UI or Management SDK. .. note:: Did you know? You can - :ref:`enable/disable plugins ` rather than + :ref:`enable/disable plugins ` rather than permanently uninstalling them. -Teams UI --------- +Enterprise UI +------------- To uninstall a plugin, click the plugin's dropdown and select "Uninstall plugin". -.. image:: /images/teams/plugins_uninstall_btn.png - :alt: teams-plugins-page-uninstall-btn +.. image:: /images/enterprise/plugins_uninstall_btn.png + :alt: enterprise-plugins-page-uninstall-btn :align: center SDK @@ -174,35 +174,35 @@ the Management SDK: fom.delete_plugin(plugin_name) -.. _teams-plugins-enable-disable: +.. _enterprise-plugins-enable-disable: Enabling/disabling plugins __________________________ -Teams UI ---------- +Enterprise UI +------------- -When plugins are first installed into Teams, they are enabled by default, along +When plugins are first installed into Enterprise, they are enabled by default, along with any operators they contain. Admins can enable/disable a plugin and all of its operators by toggling the enabled/disabled switch. -.. image:: /images/teams/plugins_disable.png - :alt: teams-plugins-page-disable +.. image:: /images/enterprise/plugins_disable.png + :alt: enterprise-plugins-page-disable :align: center Admins can also disable/enable specific operators within an (enabled) plugin by clicking on the plugin's operators link. -.. image:: /images/teams/plugins_operators_btn.png - :alt: teams-plugins-page-operators-btn +.. image:: /images/enterprise/plugins_operators_btn.png + :alt: enterprise-plugins-page-operators-btn :align: center and then toggling the enabled/disabled switch for each operator as necessary. -.. image:: /images/teams/plugins_operators_disable.png - :alt: teams-plugins-page-operators-disable +.. image:: /images/enterprise/plugins_operators_disable.png + :alt: enterprise-plugins-page-operators-disable :align: center SDK @@ -225,7 +225,7 @@ methods from the management SDK: # Disable a particular operator fom.set_plugin_operator_enabled(plugin_name, operator_name, False) -.. _teams-plugins-permissions: +.. _enterprise-plugins-permissions: Plugin permissions __________________ @@ -244,26 +244,26 @@ within them via any combination of the permissions described below: | | on a particular dataset. | +-------------------------------+----------------------------------------------------------------------------+ -Teams UI --------- +Enterprise UI +------------- To configure the permissions for an operator, first click on the plugin's operators link. -.. image:: /images/teams/plugins_operators_btn.png - :alt: teams-plugins-page-operators-btn +.. image:: /images/enterprise/plugins_operators_btn.png + :alt: enterprise-plugins-page-operators-btn :align: center Then change the dropdown for the operator to reflect the desired permission level. -.. image:: /images/teams/plugins_operators_perms.png - :alt: teams-plugins-page-operators-perms +.. image:: /images/enterprise/plugins_operators_perms.png + :alt: enterprise-plugins-page-operators-perms :align: left :width: 49% -.. image:: /images/teams/plugins_operators_perms2.png - :alt: teams-plugins-page-operators-perms2 +.. image:: /images/enterprise/plugins_operators_perms2.png + :alt: enterprise-plugins-page-operators-perms2 :align: right :width: 49% @@ -319,15 +319,15 @@ By default, the initial permissions are: | Minimum Dataset Permission | Edit | +-------------------------------+---------------+ -Teams UI -^^^^^^^^ +Enterprise UI +^^^^^^^^^^^^^ Default operator permissions can be configured by navigating to the page at Settings > Security and looking under the Plugins header. Click the dropdown for the permission you want to change and select the new value. -.. image:: /images/teams/plugins_org_settings.png - :alt: teams-plugins-page-org-settings +.. image:: /images/enterprise/plugins_org_settings.png + :alt: enterprise-plugins-page-org-settings :align: center SDK @@ -347,7 +347,7 @@ method from the Management SDK: default_operator_minimum_dataset_permission=fom.EDIT, ) -.. _teams-delegated-operations: +.. _enterprise-delegated-operations: Delegated operations ____________________ @@ -356,17 +356,17 @@ ____________________ FiftyOne's plugin framework that allows users to schedule tasks from within the App that are executed in the background on a connected compute cluster. -With FiftyOne Teams, your team can -:ref:`upload and permission ` custom operations that your -users can execute from the Teams App, all of which run against a central -orchestrator :ref:`configured by ` your admins. +With FiftyOne Enterprise, your team can +:ref:`upload and permission ` custom operations that your +users can execute from the Enterprise App, all of which run against a central +orchestrator :ref:`configured by ` your admins. Why is this awesome? Your AI stack needs a flexible data-centric component that enables you to organize and compute on your data. With delegated operations, -FiftyOne Teams becomes both a dataset management/visualization tool and a +FiftyOne Enterprise becomes both a dataset management/visualization tool and a workflow automation tool that defines how your data-centric workflows like ingestion, curation, and evaluation are performed. In short, think of FiftyOne -Teams as the single source of truth on which you co-develop your data and +Enterprise as the single source of truth on which you co-develop your data and models together. What can delegated operations do for you? Get started by installing any of @@ -421,21 +421,21 @@ plugin and proceed with other work while the execution happens in the background When you choose delegated execution in the App, these tasks are automatically scheduled for execution on your -:ref:`connected orchestrator ` and you can +:ref:`connected orchestrator ` and you can continue with other work. Meanwhile, all datasets have a -:ref:`Runs tab ` in the App where you can +:ref:`Runs tab ` in the App where you can browse a history of all delegated operations that have been run on the dataset and their status. -.. _teams-delegated-orchestrator: +.. _enterprise-delegated-orchestrator: Configuring your orchestrator(s) ________________________________ -FiftyOne Teams offers a builtin orchestrator that is configured as part of your +FiftyOne Enterprise offers a builtin orchestrator that is configured as part of your team's deployment with a default level of compute capacity. -It is also possible to connect your FiftyOne Teams deployment to an externally +It is also possible to connect your FiftyOne Enterprise deployment to an externally managed workflow orchestration tool (`Airflow `_, `Flyte `_, `Spark `_, etc). @@ -445,12 +445,12 @@ managed workflow orchestration tool (`Airflow `_, Contact your Voxel51 support team to scale your deployment's compute capacity or if you'd like to use an external orchestrator. -.. _teams-managing-delegated-operations: +.. _enterprise-managing-delegated-operations: Managing delegated operations _____________________________ -Every dataset in FiftyOne Teams has a Runs page that allows users with access +Every dataset in FiftyOne Enterprise has a Runs page that allows users with access to monitor and explore delegated operations scheduled against that dataset. All scheduled operations are maintained in a queue and will be automatically @@ -461,7 +461,7 @@ executed as resources are available on the targeted orchestrator. The Runs page only tracks operations that are **scheduled** for delegated execution, not operations that are executed immediately in the App. -.. _teams-runs-page: +.. _enterprise-runs-page: Runs page --------- @@ -469,7 +469,7 @@ Runs page The Runs page is accessible to all users with Can view access to the dataset. You can access the Runs page by clicking on the "Runs" tab from the -:ref:`Samples tab `. +:ref:`Samples tab `. Once you are on the Runs page, you will see a table with the list of all operators scheduled by any user of your organization on the dataset. You can @@ -477,7 +477,7 @@ sort, search and filter runs listed to refine the list as you like: .. image:: /images/plugins/operators/runs/runs_page.png -.. _teams-runs-sorting: +.. _enterprise-runs-sorting: Sorting ^^^^^^^ @@ -488,7 +488,7 @@ name of the operator: .. image:: /images/plugins/operators/runs/sort.png -.. _teams-runs-filtering: +.. _enterprise-runs-filtering: Filtering ^^^^^^^^^ @@ -504,7 +504,7 @@ or more status you would like to filter by: .. image:: /images/plugins/operators/runs/filter_by_status.png -.. _teams-runs-searching: +.. _enterprise-runs-searching: Searching ^^^^^^^^^ @@ -521,7 +521,7 @@ updated to show only the runs matching your query: name, not label. For example, searches will not match against **Demo: Export to GCP** in the image above. -.. _teams-runs-re-running: +.. _enterprise-runs-re-running: Re-running ^^^^^^^^^^ @@ -531,7 +531,7 @@ three-dots to open actions menu and then clicking "Re-run": .. image:: /images/plugins/operators/runs/re_run.png -.. _teams-runs-pinning: +.. _enterprise-runs-pinning: Pinning ^^^^^^^ @@ -550,7 +550,7 @@ appears beside the operator label: Pinned runs are stored at the dataset-level and will be visible to all users with access to the dataset. -.. _teams-runs-renaming: +.. _enterprise-runs-renaming: Renaming ^^^^^^^^ @@ -566,7 +566,7 @@ indicated by "3". .. image:: /images/plugins/operators/runs/edit_label.png -.. _teams-runs-mark-as-failed: +.. _enterprise-runs-mark-as-failed: Mark as failed ^^^^^^^^^^^^^^ @@ -586,7 +586,7 @@ updated and will now display as failed. orchestrator, marking the run as failed will **not** terminate the execution of operation. -.. _teams-runs-monitoring-progress: +.. _enterprise-runs-monitoring-progress: Monitoring progress ^^^^^^^^^^^^^^^^^^^ @@ -605,7 +605,7 @@ toggling the auto refresh setting indicated by "1". Only the progress of running operations is automatically refreshed. -.. _teams-run-page: +.. _enterprise-run-page: Run page -------- diff --git a/docs/source/teams/index.rst b/docs/source/enterprise/index.rst similarity index 72% rename from docs/source/teams/index.rst rename to docs/source/enterprise/index.rst index 0a69fc62151..ee4b69ceaae 100644 --- a/docs/source/teams/index.rst +++ b/docs/source/enterprise/index.rst @@ -1,7 +1,7 @@ -.. _fiftyone-teams: +.. _fiftyone-enterprise: -FiftyOne Teams -============== +FiftyOne Enterprise +=================== .. Social links --------------------------------------------------------------- @@ -10,13 +10,13 @@ FiftyOne Teams