Skip to content

Commit 8e6e17d

Browse files
committed
♻️(backend) control metadata collector agent launch via feature flag
Allow controlling when the metadata collector agent is started, enabling users to try the feature and disable it if needed. Introduce a user-level feature flag to toggle the agent for the initial release.
1 parent e4a9b23 commit 8e6e17d

6 files changed

Lines changed: 20 additions & 5 deletions

File tree

src/backend/core/api/serializers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,14 @@ class RecordingOptions(BaseModel):
232232
When `None`, falls back to the application default.
233233
original_mode: The original recording mode before any override.
234234
Must be one of the valid RecordingModeChoices values when provided.
235+
collect_metadata: Whether to collect additional metadata during recording.
236+
When `None`, no metadata are collected.
235237
236238
"""
237239

238240
language: str | None = None
239241
transcribe: bool | None = None
242+
collect_metadata: bool | None = None
240243
original_mode: Literal["screen_recording", "transcript"] | None = None
241244

242245
model_config = {"extra": "forbid"}

src/backend/core/api/viewsets.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,7 @@ def start_room_recording(self, request, pk=None): # pylint: disable=unused-argu
343343
)
344344

345345
if settings.METADATA_COLLECTOR_ENABLED and (
346-
recording.mode == models.RecordingModeChoices.TRANSCRIPT
347-
or recording.options.get("transcribe", False)
346+
recording.options.get("collect_metadata", False)
348347
):
349348
try:
350349
MetadataCollectorService().start(recording)

src/backend/core/services/livekit_events.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,7 @@ def _handle_egress_ended(self, data):
178178
except utils.MetadataUpdateException as e:
179179
logger.exception("Failed to update room's metadata: %s", e)
180180

181-
if settings.METADATA_COLLECTOR_ENABLED and recording.options.get(
182-
"metadata_collector_dispatch_id"
183-
):
181+
if recording.options.get("metadata_collector_dispatch_id", None) is not None:
184182
try:
185183
MetadataCollectorService().stop(recording)
186184
except MetadataCollectorException:

src/frontend/src/features/analytics/enums.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ export enum FeatureFlags {
55
noiseReduction = 'noise-reduction',
66
subtitles = 'subtitles',
77
candidatePolling = 'candidate-polling',
8+
metadataCollector = 'metadata-collector',
89
}

src/frontend/src/features/recording/components/TranscriptSidePanel.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { NoAccessView } from './NoAccessView'
3232
import { ControlsButton } from './ControlsButton'
3333
import { RowWrapper } from './RowWrapper'
3434
import { useMutateRecording } from '../hooks/useMutateRecording'
35+
import { useIsMetadataCollectorEnabled } from '../hooks/useMetadataCollectorEnabled'
3536
import { useSidePanel } from '@/features/rooms/livekit/hooks/useSidePanel'
3637

3738
export const TranscriptSidePanel = () => {
@@ -59,6 +60,8 @@ export const TranscriptSidePanel = () => {
5960
FeatureFlags.Transcript
6061
)
6162

63+
const isMetadataCollectorEnabled = useIsMetadataCollectorEnabled()
64+
6265
const roomId = useRoomId()
6366

6467
const { startRecording, isPendingToStart, stopRecording, isPendingToStop } =
@@ -106,6 +109,7 @@ export const TranscriptSidePanel = () => {
106109
transcribe: true,
107110
original_mode: RecordingMode.Transcript,
108111
}),
112+
collect_metadata: isMetadataCollectorEnabled,
109113
}
110114

111115
await startRecording({
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { useFeatureFlagEnabled } from 'posthog-js/react'
2+
import { useIsAnalyticsEnabled } from '@/features/analytics/hooks/useIsAnalyticsEnabled'
3+
import { FeatureFlags } from '@/features/analytics/enums'
4+
5+
export const useIsMetadataCollectorEnabled = () => {
6+
const featureEnabled = useFeatureFlagEnabled(FeatureFlags.metadataCollector)
7+
const isAnalyticsEnabled = useIsAnalyticsEnabled()
8+
9+
return (featureEnabled && isAnalyticsEnabled) || true
10+
}

0 commit comments

Comments
 (0)