|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Unpin Nikolay Yankov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Yankov
Zoom in
Open in new window
Enter Full Screen
Pin Stefka Stoyanova to your main screen
You can't unmute someone else
More options for Stefka Stoyanova
Stefka Stoyanova
Pin Nikolay Yankov to your main screen
Mute Nikolay Yankov's microphone
More options for Nikolay Yankov
Nikolay Yankov
Pin Steliyan Georgiev to your main screen
Mute Steliyan Georgiev's microphone
More options for Steliyan Georgiev
Steliyan Georgiev
Pin Nikolay Ivanov to your main screen
You can't unmute someone else
More options for Nikolay Ivanov
Nikolay Ivanov
Pin Aneliya Angelova to your main screen
You can't unmute someone else
More options for Aneliya Angelova
Aneliya Angelova
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined
meet.google.com / Daily - Platform
S(CDiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)C SRD-677С зy 19798(l Service-oDe Foet, AnvCost | CM/37?selectedissue=JY-18909• ProjectsE3 SSHEl Dutadog* ClaudePlatform TeamQ Search board200$ 39-19240 / Д Jy-18900READY FOR DEV 1[Part2) Automated reports with Ask JiminnyooaesnoTxwiexceed Fontawesomepackage limitsMASNTENANEDReady for Dev8-20564 1 П ****=Descriptionwrich thoy neco them.We want to allow our users to automate the execution of their AJA prompts in order to save time and have them ready• admins and manages should be able to automate reports based on their Panorama prompts and saved searches• the report should be generated in a paf - use a lightly branded one this time - F https://www.figma.com/design/jXcUe1y9mx5Fiz8KosLAUn/Project-Phoenix?node-id=7691-616888t«cLuF71P72T14xBsQ-1 [Connect your Figma accour• l the customer hasn t adoco a orano logo tien use tie vimniny logo• once the report is ready it should be shared with the users over emall - F https://www.figma.com/design//XcUety9mx5Fiz8KosLAUn/Project-Phoenix?node-id=12208-230648t=nJK629FloDyaWRYR-1 |Connect your Figma account• If no one is selected then the report will only be shared with the person who created it• ensure the reports has a proper structure and formatting - headings, bold etc. - take examples from the Exec Reports•crisure the teport nas lnxs to otroack when examples are useol• in the beginning of each report have a brief section for "Data Srouce' and '"Objective' - take the Exec summary reportfor example• data source should cover what data has been analysedhowroposimnnya• show the report in the Al Reports page with a special logo - Prolest Phoscixonly the creator of the reports and the users it is shared with should be able to see it in the list• users should be able to preview the report and download itActions10:01 AM Daily - Platform‹$0(abl| Daily - Platform • 4 m left100% C47 8• Tue 14 Apr 10:01:21ChatC Ct: Depe• Actions s• Dependel0 Tasks|7 Insights & CoachinD Dev- UX# Improve StoryDetailsAssigneeSteliyan GeorgievAssioin to mo2 Galya DimitrovaUuncoomeui@ Open with VS Code|3 branches32 commitsPueneOuid TauirxReleasesA Production2 See all deploymentsComponentsPlatformSub-ProductAdd options8•• Far Depel0 Al BookmarksGroup: QueriesDEPLOYFix dowinitie ouring tofeature fiag reieaseDeployedXE -20565 15 4 ..••=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_19082 |1 • ** =No such column "Type' onentity 'Event"Deployed0 -20384 05 11 ****=|Missed deletion of staledeals risks0-2000 1 *=[Pipedrive) DI > status notlabeled, date data missingDeployed4200%0 8 ****=:Stefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova15:57Lukas Kovalik...
|
Dia
|
Work: Meet - Daily - Pla…
|
NULL
|
8698
|
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Unpin Nikolay Yankov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Yankov
Zoom in
Open in new window
Enter Full Screen
Pin Stefka Stoyanova to your main screen
You can't unmute someone else
More options for Stefka Stoyanova
Stefka Stoyanova
Pin Nikolay Yankov to your main screen
Mute Nikolay Yankov's microphone
More options for Nikolay Yankov
Nikolay Yankov
Pin Steliyan Georgiev to your main screen
Mute Steliyan Georgiev's microphone
More options for Steliyan Georgiev
Steliyan Georgiev
Pin Nikolay Ivanov to your main screen
You can't unmute someone else
More options for Nikolay Ivanov
Nikolay Ivanov
Pin Aneliya Angelova to your main screen
Mute Aneliya Angelova's microphone
More options for Aneliya Angelova
Aneliya Angelova
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:01
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined
meet.google.com / Daily - Platform
FirefoxFileEditViewHistoryBookmarks)HookmalProfilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3→0 i • Daily - Platform • 4 m left100% 4l8• Tue 14 Apr 10:01:21- | + Automatic Zoom ~Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 AprService-Desk - Queues - Platform- New laoSearch bookmarksv booknarks100l0atSprint BoardSRD Queuecithuav E Bookmarks Menu> C Mozilla FirefoxOther BookmarksAsk Jiminny Test Report8 Apr 2026JIMINNY...
|
Dia
|
Work: Meet - Daily - Pla…
|
NULL
|
8697
|
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Toggle Sidebar
Toggle Sidebar
Previous
Previous
Next
Next
1
of 3
Zoom Out
Zoom Out
Zoom In
Zoom In
Comment
Comment
Add signature
Add signature
Highlight
Highlight
Text
Text
Draw
Draw
Add or edit images
Add or edit images
Print
Print
Save
Save
Tools
Tools
Ask Jiminny Test Report
8 Apr 2026
Based on the analysis of recent customer interactions, Jiminny is currently being utilized as a
strategic tool for sales enablement, coaching, and pipeline visibility. Below is a synthesis of the
key themes and trends observed across our accounts.
Driving Adoption and Coaching
Clients are increasingly moving beyond basic call recording to leverage Jiminny for structured
performance improvement:
Manager Accountability:
Many teams are shifting coaching responsibility to managers by
https://app.staging.jiminny.com/playback/299f6fe6-d94f-4a57-9aee-0d72ea7cf85f?apFrom=217
using automated nudges to highlight specific calls for review.
Peer-to-Peer Learning:
https://app.staging.jiminny.com/playback/4c90dfe7-0d83-4692-9dcf-9be85e5ecdd5?apFrom=161
Organizations like Insuritas and PipeDrive are creating "best of"
https://app.staging.jiminny.com/playback/69e57e78-c6fd-43f5-adf6-34c5721010df?apFrom=1855
playlists to share successful objection handling and sales techniques, fostering a culture of
reflection.
Self-Coaching:
https://app.staging.jiminny.com/playback/ad9442a4-564f-4106-83da-3109534cdcff?apFrom=1213
Several clients, including Funding Circle and Edozo, are implementing self-
https://app.staging.jiminny.com/playback/c9e7c974-6001-4997-a390-e50ab5d51508?apFrom=474
coaching workflows where reps identify their own calls for review based on specific criteria
like urgency or discovery quality.
CRM Integration and Data Accuracy
Seamless integration with CRM platforms remains a primary value driver for our users:
Salesforce & HubSpot:
https://app.staging.jiminny.com/playback/927d43d2-bc41-4eba-a3ca-fb11e52266e2?apFrom=268
https://app.staging.jiminny.com/playback/34431fe9-3211-4187-937a-c8df8f6da36c?apFrom=1001
Clients such as Productsup, Unbiased, and PostHog prioritize deep
https://app.staging.jiminny.com/playback/41710312-388f-4d77-b47d-0878dbfe8ec5?apFrom=534
CRM integration to ensure Jiminny serves as a single source of truth.
Technical Troubleshooting:
We are actively addressing integration challenges, such as
https://app.staging.jiminny.com/playback/b703b339-7cca-4a78-ad68-aa76c5496422?apFrom=226
Salesforce mapping errors and Notetaker configuration issues, to ensure data flows correctly
https://app.staging.jiminny.com/playback/7ec29505-fa65-475f-b221-ef3f1fcf6fea?apFrom=116
between systems.
Roadmap Requests:
There is significant interest in upcoming features, including native Zoho
https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793
https://app.staging.jiminny.com/playback/756a7b41-47ce-42e0-941c-99f9038a2f30?apFrom=793
integration and automated field mapping for Salesforce.
https://app.staging.jiminny.com/playback/9d971fbe-7e32-4243-97ea-d37bc8f8315c?apFrom=1517
Strategic AI Utilization
The "Ask Jiminny" feature and AI-driven insights are becoming central to how teams manage
their pipeline:
Deal Visibility:
https://app.staging.jiminny.com/playback/06de5e10-1e9b-43de-8839-85d179633dfb?apFrom=479
https://app.staging.jiminny.com/playback/b0d29a10-aa12-414e-8039-79d805c7803d?apFrom=858
Users at Specright and Cision are using "Ask Jiminny" at the opportunity level
to generate summaries, identify risks, and determine next steps without needing to listen to
every call.
•
•
•
•
•
•
•
Competitive Intelligence:
https://app.staging.jiminny.com/playback/204c4327-517d-4f0b-b055-d661e4b9094e?apFrom=1888
Teams are configuring competitor trackers and automated alerts to
https://app.staging.jiminny.com/playback/57b92b82-8674-492a-876e-1947275032e3?apFrom=492
gain insights into market trends and churn risks.
Implementation and Expansion
Trial Strategies:
We are successfully using flexible trial structures, such as 90-day paid trials
https://app.staging.jiminny.com/playback/fab460ca-ac4b-48b4-8617-6349da36b32f?apFrom=853
https://app.staging.jiminny.com/playback/098c5d08-16e6-4e4b-9128-4204561a4d65?apFrom=924
or proof-of-concept migrations, to help prospects evaluate Jiminny against incumbents like
Gong.
Scaling Usage:
https://app.staging.jiminny.com/playback/8c45d5b8-3842-4baf-821b-453fc4898b72?apFrom=435
Existing customers like Nourish Care and Les Mills are expanding their usage
https://app.staging.jiminny.com/playback/f3362bd7-af1c-4208-b358-3cdab49a6c73?apFrom=130
across multiple departments, including Customer Success and Service Delivery, to consolidate
their tech stacks.
While adoption is strong, some clients—such as CrossPurpose—face challenges with team
https://app.staging.jiminny.com/playback/a277399f-739a-40f3-b8e9-c56c314b4b38?apFrom=230
bandwidth and require a more targeted, "crawl-walk-run" approach to implementation to ensure
long-term success.
•
•
•...
|
Firefox
|
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf — Work...
|
app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d0 app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843...
|
8696
|
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
iTerm2
|
-zsh
|
NULL
|
8695
|
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
iTerm2
|
-zsh
|
NULL
|
8694
|
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
iTerm2
|
-zsh
|
NULL
|
8693
|
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
iTerm2
|
-zsh
|
NULL
|
8692
|
|
clipboard)
2026-04-12T12:56:32.282413Z INFO scree clipboard)
2026-04-12T12:56:32.282413Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 63 eligible frames
2026-04-12T12:56:35.864419Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 62 frames, 12.3MB → 1.4MB (8.8x), 62 JPEGs deleted
2026-04-12T12:57:23.323460Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7117750811651615127, trigger=visual_change)
2026-04-12T12:57:50.662064Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:53.683485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:55.798894Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=click)
2026-04-12T12:57:56.695259Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:57:59.627838Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=clipboard)
2026-04-12T12:58:06.244699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-511619204708572479, trigger=visual_change)
2026-04-12T12:58:12.326714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1307508556897368580, trigger=visual_change)
2026-04-12T12:58:24.650586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7572195946815769416, trigger=visual_change)
2026-04-12T12:58:33.716470Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=visual_change)
2026-04-12T12:58:36.001151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3380018746534994898, trigger=clipboard)
2026-04-12T12:58:58.301152Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1143839518323082265, trigger=visual_change)
2026-04-12T12:59:04.378698Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:07.382586Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:10.381122Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:16.434529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:22.369195Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:25.626810Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:26.286149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:26.557203Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=clipboard)
2026-04-12T12:59:30.443395Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=click)
2026-04-12T12:59:32.544924Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6234391425887373863, trigger=visual_change)
2026-04-12T12:59:44.704803Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=443481647041916883, trigger=visual_change)
2026-04-12T13:00:05.117734Z INFO screenpipe_engine::server: api_usage_5min: 14 requests
2026-04-12T13:00:40.121236Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:00:40.121208+00:00 (14d retention)
2026-04-12T13:01:35.875809Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 93 eligible frames
2026-04-12T13:01:41.052370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 92 frames, 16.3MB → 2.6MB (6.2x), 92 JPEGs deleted
2026-04-12T13:05:05.113110Z INFO screenpipe_engine::server: api_usage_5min: 2 requests
2026-04-12T13:05:40.135052Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:05:40.135037+00:00 (14d retention)
2026-04-12T13:06:41.084839Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 76 eligible frames
2026-04-12T13:06:45.534272Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 75 frames, 14.1MB → 7.0MB (2.0x), 75 JPEGs deleted
2026-04-12T13:10:40.134615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:10:40.134575+00:00 (14d retention)
2026-04-12T13:11:45.546114Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 65 eligible frames
2026-04-12T13:11:49.453197Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 64 frames, 10.2MB → 3.6MB (2.8x), 64 JPEGs deleted
2026-04-12T13:13:54.895981Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-12T13:23:50.936233Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:23:50.936218+00:00 (14d retention)
2026-04-12T13:25:00.291068Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-12T13:25:02.158205Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 4.5MB → 1.2MB (3.7x), 31 JPEGs deleted
2026-04-12T13:32:02.286288Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T10:32:02.286237+00:00 (14d retention)
2026-04-12T13:36:43.535311Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-12T14:00:30.096441Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T11:00:30.096410+00:00 (14d retention)
2026-04-12T14:03:33.050373Z ERROR screenpipe_engine::resource_monitor: Failed to send resource usage to PostHog: error sending request for url ([URL_WITH_CREDENTIALS] ~/.screenpipe/data/data $ 2026-04-12T20:14:53.267187Z INFO screenpipe_engine::vision_manager::monitor_watcher: New monitor 6 detected, starting recording
2026-04-12T20:14:53.504465Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 6 (2560x1440)
2026-04-12T20:14:53.504821Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.504861Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 disconnected, stopping recording
2026-04-12T20:14:53.504869Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 1
2026-04-12T20:14:53.505247Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 6 (device: monitor_6)
2026-04-12T20:14:53.505539Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 6
2026-04-12T20:26:44.490006Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T21:19:37.144088Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:14:45.376795Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 1 reconnected, resuming recording
2026-04-12T22:14:45.691383Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-04-12T22:14:45.691471Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691487Z INFO screenpipe_engine::vision_manager::monitor_watcher: Monitor 6 disconnected, stopping recording
2026-04-12T22:14:45.691497Z INFO screenpipe_engine::vision_manager::manager: Stopping vision recording for monitor 6
2026-04-12T22:14:45.691504Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-04-12T22:14:45.691518Z INFO screenpipe_engine::event_driven_capture: screen is locked on startup, skipping initial capture for monitor 1
2026-04-12T22:15:08.850666Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:15:35.653527Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:15:35.653498+00:00 (14d retention)
2026-04-12T22:16:13.877754Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:16:34.828212Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-12T22:16:34.868351Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-12T22:16:34.883187Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-12T22:16:35.346631Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-12T22:16:48.463120Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=visual_change)
2026-04-12T22:16:48.804890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8881612386233290395, trigger=click)
2026-04-12T22:16:59.897151Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3604981275089575272, trigger=click)
2026-04-12T22:17:18.850373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2355689602952124658, trigger=visual_change)
2026-04-12T22:17:18.918578Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:17:33.961611Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1484931182052497352, trigger=visual_change)
2026-04-12T22:18:23.938126Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:18:52.752659Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7132740500514870786, trigger=visual_change)
2026-04-12T22:19:28.964313Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:19:35.208922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:19:38.220553Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7520087617581375402, trigger=visual_change)
2026-04-12T22:20:29.699327Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:34.005845Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:20:35.648827Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:20:35.648818+00:00 (14d retention)
2026-04-12T22:20:38.768848Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8423083696421607961, trigger=visual_change)
2026-04-12T22:20:47.878009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:50.900875Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7616415175664572712, trigger=visual_change)
2026-04-12T22:20:59.937401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1304474969039783672, trigger=visual_change)
2026-04-12T22:21:27.187255Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:30.214215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:33.220423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5660606474235116689, trigger=visual_change)
2026-04-12T22:21:39.027483Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:21:54.477609Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:21:57.490028Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3451424756031953095, trigger=visual_change)
2026-04-12T22:22:06.557939Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:09.561968Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:12.620628Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6096774307956840043, trigger=visual_change)
2026-04-12T22:22:27.699475Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4406650560182634868, trigger=visual_change)
2026-04-12T22:22:39.836999Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6702397966650464851, trigger=visual_change)
2026-04-12T22:22:44.052745Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:22:54.977274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4954038102724882870, trigger=visual_change)
2026-04-12T22:23:04.067624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556556138478186125, trigger=visual_change)
2026-04-12T22:23:22.229817Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9076293218035077076, trigger=visual_change)
2026-04-12T22:23:28.278077Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:34.312538Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4783981874452913338, trigger=visual_change)
2026-04-12T22:23:40.338438Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:43.350979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4987736796410036352, trigger=visual_change)
2026-04-12T22:23:49.082693Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:23:58.499624Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:01.517862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-763583983667788238, trigger=visual_change)
2026-04-12T22:24:10.610720Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:13.622839Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-528530849735058466, trigger=visual_change)
2026-04-12T22:24:28.729718Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-268381976421465647, trigger=visual_change)
2026-04-12T22:24:37.819714Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:40.807487Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:43.926970Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4292471428384779442, trigger=visual_change)
2026-04-12T22:24:54.102622Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:24:56.037518Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1336615422496480469, trigger=visual_change)
2026-04-12T22:25:04.994185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2490954796285178130, trigger=visual_change)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-12T22:25:14.042201Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6660592639383128564, trigger=visual_change)
2026-04-12T22:25:20.906940Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7604187256398490687, trigger=click)
2026-04-12T22:25:35.646197Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:25:35.646180+00:00 (14d retention)
2026-04-12T22:25:59.131708Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-12T22:30:35.546756Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:30:35.546690+00:00 (14d retention)
2026-04-12T22:35:35.540779Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:35:35.540726+00:00 (14d retention)
2026-04-12T22:40:35.534224Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:40:35.534197+00:00 (14d retention)
2026-04-12T22:45:35.553749Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:45:35.553714+00:00 (14d retention)
2026-04-12T22:50:35.547970Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:50:35.547775+00:00 (14d retention)
2026-04-12T22:55:35.543613Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T19:55:35.543583+00:00 (14d retention)
2026-04-12T23:00:35.530639Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:00:35.530575+00:00 (14d retention)
2026-04-12T23:05:35.525661Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:05:35.525614+00:00 (14d retention)
2026-04-12T23:10:35.519806Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:10:35.519766+00:00 (14d retention)
2026-04-12T23:15:35.531767Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:15:35.531720+00:00 (14d retention)
2026-04-12T23:20:35.528053Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:20:35.527995+00:00 (14d retention)
2026-04-12T23:25:35.522960Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:25:35.522901+00:00 (14d retention)
2026-04-12T23:30:35.517961Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:30:35.517905+00:00 (14d retention)
2026-04-12T23:35:35.513125Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:35:35.513064+00:00 (14d retention)
2026-04-12T23:40:35.509062Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:40:35.508928+00:00 (14d retention)
2026-04-12T23:45:35.504021Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:45:35.503956+00:00 (14d retention)
2026-04-12T23:50:35.454615Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:50:35.454592+00:00 (14d retention)
2026-04-12T23:55:35.448748Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T20:55:35.448668+00:00 (14d retention)
2026-04-13T00:00:35.442141Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:00:35.442098+00:00 (14d retention)
2026-04-13T00:05:35.495992Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:05:35.495911+00:00 (14d retention)
2026-04-13T00:10:33.704826Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-04-13T00:10:35.489255Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-29T21:10:35.489246+00:00 (14d retention)
2026-04-13T04:35:50.292492Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:08:19.632155Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:23:13.306515Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:44:49.127855Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T09:46:08.530755Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T06:46:08.530742+00:00 (14d retention)
2026-04-13T09:56:03.339024Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T10:17:58.001333Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:09:17.685286Z WARN screenpipe_engine::resource_monitor: PostHog request timed out
2026-04-13T15:10:58.856201Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:10:58.856189+00:00 (14d retention)
2026-04-13T15:11:08.215959Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-04-13T15:11:08.233258Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-04-13T15:11:08.258389Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-04-13T15:11:08.584259Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)
2026-04-13T15:11:08.744918Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: day rollover (102 -> 103), clearing cache
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ 2026-04-13T15:11:18.351950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3109533011400363461, trigger=click)
2026-04-13T15:11:30.250935Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:11:33.282072Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1668589341758781530, trigger=visual_change)
2026-04-13T15:11:45.371786Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8357418222679209184, trigger=visual_change)
2026-04-13T15:12:30.742143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6720830376041362096, trigger=visual_change)
2026-04-13T15:12:37.072650Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3567639822824693735, trigger=visual_change)
2026-04-13T15:13:16.438133Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:19.551988Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=click)
2026-04-13T15:13:33.147285Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 312 eligible frames
2026-04-13T15:13:38.418523Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6120049575502606819, trigger=visual_change)
2026-04-13T15:13:39.034453Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 16.9MB → 5.4MB (3.1x), 100 JPEGs deleted
2026-04-13T15:13:44.624555Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.175134Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 28.6MB → 0.5MB (56.5x), 100 JPEGs deleted
2026-04-13T15:13:50.964513Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 3.4MB → 0.5MB (6.9x), 12 JPEGs deleted
2026-04-13T15:15:23.847308Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-13T15:15:58.849682Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:15:58.849672+00:00 (14d retention)
2026-04-13T15:18:51.418476Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames
2026-04-13T15:20:58.844397Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:20:58.844384+00:00 (14d retention)
2026-04-13T15:23:51.658198Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 34 eligible frames
2026-04-13T15:23:54.196880Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 34 frames, 6.4MB → 4.1MB (1.5x), 34 JPEGs deleted
2026-04-13T15:25:58.849578Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:25:58.849562+00:00 (14d retention)
2026-04-13T15:28:54.439933Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:28:59.739644Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 94 frames, 13.6MB → 0.4MB (32.3x), 94 JPEGs deleted
2026-04-13T15:30:58.843449Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:30:58.843438+00:00 (14d retention)
2026-04-13T15:33:59.997784Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 98 eligible frames
2026-04-13T15:34:05.496170Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 97 frames, 14.0MB → 0.4MB (32.2x), 97 JPEGs deleted
2026-04-13T15:35:58.838949Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:35:58.838933+00:00 (14d retention)
2026-04-13T15:36:43.957185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8238343711221217740, trigger=visual_change)
2026-04-13T15:39:05.750583Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T15:39:11.372793Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 14.3MB → 0.4MB (32.3x), 99 JPEGs deleted
2026-04-13T15:39:12.238235Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.9MB → 0.2MB (8.7x), 13 JPEGs deleted
2026-04-13T15:40:58.859706Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:40:58.859689+00:00 (14d retention)
2026-04-13T15:44:12.510199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 111 eligible frames
2026-04-13T15:44:18.081066Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 14.2MB → 0.4MB (34.1x), 98 JPEGs deleted
2026-04-13T15:44:18.845421Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 11 frames, 1.6MB → 0.2MB (7.3x), 11 JPEGs deleted
2026-04-13T15:45:58.861764Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:45:58.861753+00:00 (14d retention)
2026-04-13T15:49:19.146995Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 106 eligible frames
2026-04-13T15:49:24.726638Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 15.2MB → 1.0MB (14.7x), 98 JPEGs deleted
2026-04-13T15:49:25.321666Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 1.0MB → 0.2MB (4.1x), 6 JPEGs deleted
2026-04-13T15:50:58.857966Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:50:58.857955+00:00 (14d retention)
2026-04-13T15:54:25.552953Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 95 eligible frames
2026-04-13T15:54:30.752258Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 15.3MB → 0.3MB (55.6x), 93 JPEGs deleted
2026-04-13T15:55:08.850842Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:11.307514Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7660123553205362671, trigger=click)
2026-04-13T15:55:58.854584Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T12:55:58.854569+00:00 (14d retention)
2026-04-13T15:57:06.748688Z WARN sqlx::query: summary="SELECT frames.id as frame_id, …" db.statement="\n\nSELECT\n frames.id as frame_id,\n COALESCE(\n frames.full_text,\n ocr_text.text,\n frames.accessibility_text,\n ''\n ) as ocr_text,\n ocr_text.text_json,\n frames.timestamp,\n frames.name as frame_name,\n COALESCE(frames.snapshot_path, video_chunks.file_path) as file_path,\n frames.offset_index,\n frames.app_name,\n COALESCE(ocr_text.ocr_engine, '') as ocr_engine,\n frames.window_name,\n COALESCE(video_chunks.device_name, frames.device_name) as device_name,\n GROUP_CONCAT(tags.name, ',') as tags,\n frames.browser_url,\n frames.focused\nFROM\n frames\n LEFT JOIN video_chunks ON frames.video_chunk_id = video_chunks.id\n LEFT JOIN ocr_text ON frames.id = ocr_text.frame_id\n LEFT JOIN vision_tags ON frames.id = vision_tags.vision_id\n LEFT JOIN tags ON vision_tags.tag_id = tags.id\nWHERE\n 1 = 1\n AND (\n ?2 IS NULL\n OR frames.timestamp >= ?2\n )\n AND (\n ?3 IS NULL\n OR frames.timestamp <= ?3\n )\n AND (\n ?4 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) >= ?4\n )\n AND (\n ?5 IS NULL\n OR LENGTH(COALESCE(frames.full_text, ocr_text.text, '')) <= ?5\n )\n AND (\n ?6 IS NULL\n OR COALESCE(video_chunks.device_name, frames.device_name) LIKE '%' || ?6 || '%'\n )\n AND (\n ?7 IS NULL\n OR frames.machine_id = ?7\n )\n AND (\n ?8 IS NULL\n OR frames.focused = ?8\n )\n AND (\n ?9 IS NULL\n OR frames.name LIKE '%' || ?9 || '%'\n )\nGROUP BY\n frames.id\nORDER BY\n frames.timestamp DESC\nLIMIT\n ?10 OFFSET ?11\n" rows_affected=0 rows_returned=1000 elapsed=1.158041625s
2026-04-13T15:59:30.782676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 64 eligible frames
2026-04-13T15:59:34.479395Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 63 frames, 10.3MB → 0.3MB (39.5x), 63 JPEGs deleted
2026-04-13T16:00:23.847610Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-13T16:00:58.868162Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:00:58.868152+00:00 (14d retention)
2026-04-13T16:04:34.533584Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 79 eligible frames
2026-04-13T16:04:38.997720Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 78 frames, 12.8MB → 0.3MB (47.7x), 78 JPEGs deleted
2026-04-13T16:05:58.872129Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:05:58.872118+00:00 (14d retention)
2026-04-13T16:09:39.038290Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 58 eligible frames
2026-04-13T16:09:42.379184Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 57 frames, 7.5MB → 2.1MB (3.6x), 57 JPEGs deleted
2026-04-13T16:10:58.871036Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:10:58.871026+00:00 (14d retention)
2026-04-13T16:14:42.468923Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 110 eligible frames
2026-04-13T16:14:48.051795Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 11.9MB → 0.4MB (30.2x), 99 JPEGs deleted
2026-04-13T16:14:48.760305Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.2MB → 0.2MB (7.6x), 10 JPEGs deleted
2026-04-13T16:15:58.868243Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:15:58.868232+00:00 (14d retention)
2026-04-13T16:19:48.877144Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 113 eligible frames
2026-04-13T16:19:54.398325Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (30.6x), 98 JPEGs deleted
2026-04-13T16:19:55.258815Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 1.6MB → 0.2MB (8.4x), 13 JPEGs deleted
2026-04-13T16:20:58.867143Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:20:58.867134+00:00 (14d retention)
2026-04-13T16:24:55.331192Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-04-13T16:25:00.883640Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 11.8MB → 0.4MB (31.3x), 98 JPEGs deleted
2026-04-13T16:25:01.692088Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.4MB → 0.2MB (8.1x), 12 JPEGs deleted
2026-04-13T16:25:58.878568Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-30T13:25:58.878557+00:00 (14d retention)
2026-04-13T16:30:01.824636Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 135 eligible frames
2026-04-13T16:30:07.34...
|
iTerm2
|
-zsh
|
NULL
|
8691
|
|
Docker DesktopEditView< 40 hil• | Daily - Platf Docker DesktopEditView< 40 hil• | Daily - Platform • 5 m leftA100% (45).8 • Tue 14 Apr 10:00:07app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3+ Automatic zoomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr XService-Desk - Queues - Platform— New |aobookmhleQ Search bookmarksv booknarks100l0atSprint BoardSRD Queuecithuhv E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks• ••ii dockerdesktop PERSONALQ SearchSign inStarting the Docker Engine...Docker Engine is the underlying technology that runs containersdly Engine startingRAM 0.34 GB CPU 6.45% Disk: --- GB used (limit -- CB)>_ ® Update availableJIMINNY-...
|
NULL
|
NULL
|
NULL
|
8690
|
|
Docker DesktopEditView40 lil• | Daily - Platform • Docker DesktopEditView40 lil• | Daily - Platform • 5m leftA100% C.∞• Tue 14 Apr 10:00:04app.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3+ Automatic coomPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 AprService-Desk - Queues - Platf- New laobookmaeQ Search bookmarksv booknarks100l0atSprint BoardSRD Queuecithuav E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks• • •ii dockerdesktop PERSONALQ SearchSign inStarting the Docker Engine...Docker Engine is the underlying technology that runs containersdly Engine startingRAM 0.00 GB CPU 0.00% Disk: -- GB used (limit -- GB)>_ ® Update availableJIMINNY-...
|
NULL
|
NULL
|
NULL
|
8689
|
|
DiaFileEditViewTabsBookmarksHistoryExtensionsWindo DiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme.Mandoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics© Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRefactor secfix scripts for improved parsing and handling of covered…it S1171as pushed by nikolay-yankoxRefactor Slack notification handling in secfix scripts and workflowPu upenosootweewet 2691834 pushed by rikolay-yackor• Fix Dependabot issuesтu vepchos0otn3n conwen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_10:00 AM | Daily - PlatformIaalC Ct: Depe• Actions s• DependelD TиsksInsights & Coachin.• Dev- UXQ Type ([] to searchQ Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35s88 Aor 8, 10:16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)| Daily - Platform • 5 m left100% C47 8• Tue 14 Apr 10:00:03ChatO Far DepeStefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova14:38Lukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8688
|
|
DiaFileEditViewTabsBookmarksHistoryExtensionsWindo DiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme._.Marsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankor• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - PlatformC Ct: Depe• Actions s• DependelD TиsksInsights & Coachin.• Dev- UXQ Type ([] to searchQ Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35s88 Aor 8, 10:16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)Daily - Platform - 6 m left100% [8• Tue 14 Apr 9:59:57ChatO Far DepeEA oootnrtStefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya Angelova14:32Lukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8687
|
|
Alfred Search Field
DiaFileEditViewTabsBookmarksHi Alfred Search Field
DiaFileEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)C SRD-677C 3y 19790( Actions 11 Sentryjminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme.Marsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsE SSHActionsCD WikiSecurity and qualityk InsightsFix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankor• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issuesDr Foet AwrlEl Dutados O @ # ClaudeO Circieci@ Settings|autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - PlatformDaily - Platform - 6 m left100% [8• Tue 14 Apr 9:59:54ChatC C: Depe() Actions( DepenD TиsksInsights & Coachin.D Dev•ux.Q Type ([] to search+ •Q Fiter workdiow runsEvent -Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35s88 Aor 8, 10:16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)Va degDA oootnrtStefka StoyanovaNikolay YankovSteliyan GeorgievNikolay IvanovAneliya AngelovaLukas Kovalik14:29...
|
Alfred
|
Alfred
|
NULL
|
8686
|
|
FirefoxFileEditViewHistoryBookmarksbookmhleProfile FirefoxFileEditViewHistoryBookmarksbookmhleProfilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 3‹ 40 lihl © | Daily - Platform • 6m left100% [* &• Tue 14 Apr 9:59:52.- | + Automatic Zoom ~Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr XService-Desk - Queues - Platf- New |aoSearch bookmarksv booknarks100l0atSprint BoardSRD Queuecithuhv E Bookmarks Menu> C Mozilla Firefox• Other BookmarksAsk Jiminny Test Report8 Apr 2026JIMINNY...
|
NULL
|
NULL
|
NULL
|
8685
|
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
9:59
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined
meet.google.com / Daily - Platform...
|
Dia
|
Work: Meet - Daily - Pla…
|
NULL
|
8684
|
|
Nikolay Yankov (Presenting)
Nikolay Yankov (Presen Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Zoom in
Open in new window
Enter Full Screen
Stefka Stoyanova
Nikolay Yankov
Steliyan Georgiev
Nikolay Ivanov
Aneliya Angelova
Lukas Kovalik
Others might see more of your background. Click to view your full video.
9:59
AM
Daily - Platform
Daily - Platform
Audio settings
Turn on microphone
Video settings
Turn off camera
Nikolay Yankov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Aneliya Angelova joined...
|
Dia
|
Work: Meet - Daily - Pla…
|
NULL
|
8683
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme...Marsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankor• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - Platform> 0.Daily - Platform • 6 m left8•C Ct: Depe• Actions s• DependelO Far DepeD TиsksInsights & Coachin.• Dev•ux.Q Type ([] to search+ •Q Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35s88 Aor 8, 10:16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)ue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova14:208 • Tue 14 Apr 9:59:45Chat•B•Nikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8682
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)nboк (21SRD-677T7 (SRO-67C зy 19796( Service-cJz Font Awe• COstI CHE3 SSHEl Dutados3 Circiecjminay / app&‹> Code11 Pull requests 24ActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows$1NNotion[include) Database Migrations[include) Start/Stop testing environme...Refactor Slack notification handling in secfix scripts and workflowPu Dpenosootiwee# 2681d34 pushed by nikolay-yankovMandoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pilkolay-yankovFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by nikolay-yankoy• Fix Dependabot issuesQ Actions :C Ct: DepeD Tиsks27 insights & CoachinD DevQ Type to searchQ Fiter workdiow runs•ux.autonate-dependabot-issue-auto300-0epc00000530Cautonate-dependabot-issue..autonate-dependabot-issue..E8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|68 Aor 9, 9:48 PM GMT+3(0) 150E8 Apr 9, 7:30 PM GMT+3Ô 4m 238Apr 9,7116 PM GMTe9:59 AM Daily - PlatformDaily - Platform • 6 m leftO Far DepeStefka StoyanovaSteliyan GeorgievAneliya Angelova14:178 • Tue 14 Apr 9:59:42• ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8681
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)иbок (2)C SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, Anv• COstI CHE SSHEl Dutadogjminay / app&‹> Code11 Pull requestsActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows33 workflow runsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRelease EnvironmentStart-Stop EnvironmentRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankov[include) Start/Stop testing environme…Refactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankorMarsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issuesO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - Platform> 0.Daily - Platform • 6 m left8•C Ct: Depe• Actions s• DependelO Far DepeD TиsksInsights & Coachin.• Dev•ux.Q Type ([] to search+ •Q Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35s88 Aor 8, 10:16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)ue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova14:148 • Tue 14 Apr 9:59:39ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8680
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)иbок (2)C SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, Anv• COstI CHE SSHEl Dutadogjminay / app&‹> Code11 Pull requestsActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows33 workflow runsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorRelease EnvironmentStart-Stop EnvironmentRefactor secfix scripts for improved parsing and handling of covered…it $1171as pushed by nikolay-yankov[include) Start/Stop testing environme…Refactor Slack notification handling in secfix scripts and workflowPu upenosootweewea 2691834 pushed by sikolay-yankorMarsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issuesO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - Platform> 0.Daily - Platform • 6 m left8•C Ct: Depe• Actions s• DependelO Far DepeD TиsksInsights & Coachin.• Dev•ux.Q Type ([] to search+ •Q Fiter workdiow runsEvent-Status -BranchActor -Hn wOrKow88 Apr 9, 10-20 PM GMT+3Ô Sm 35sE Apr 9, 10-16 PM GMT+3Ô FailureE8 Aor 9, 10:12 PM OMT+3Ô FalureE Aor 9, 10:04 PM GMT+3© 50sỆ Apr 9, 9:48 PM GMT+3Ô em 128|Eệ Aor 9, 9-48 PM GMT+3(0) 150B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)ue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova14:118 • Tue 14 Apr 9:59:36ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8679
|
|
FirefoxFileEoitViewHistoryBookmarksProtilesToolsWi FirefoxFileEoitViewHistoryBookmarksProtilesToolsWindowHelpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e88431 of 340 hil l Daily - Platform • 6m leftA * 100%C# &• Tue 14 Apr 9:59:28Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnya Ask Jiminny test report - 8 Apr XNService-Desk - Queues - Platform+ New labbookmhleSearch bookmarksv Booknarks100l0aiSprint BoardSRD QueueASk Jiminny test report- o Apr 2026 - ASK- | + Automatic Zoom ~Other BookmarksAsk Jiminny Test Report8 Apr 2026JIMINNY...
|
NULL
|
NULL
|
NULL
|
8678
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpjiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37O JIMINNYQ SearchC 40 lbl | Daily - Platform • 6m leftA 100%C &• Tue 14 Apr 9:59:25+ Create*C ASK RoVO A ® sôPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminny8 Ask Jimipy tost report - 8 AprService-Desk - Queues - Platfc+ New labbookmhleQ Search bookmarksv booknarks 100l0a1Sprint BoardSRD QueueGithualv E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks203@ For you• Recent# Starred04 Apps0, SpacesRecentJiminny (New)9 Service-Deska Queuesv Team PriorityEj All open tic... 10•, Unassigne...@ Support te...kalsed ov ...Ej Assigned t...Service re…...1@ Platform te...@ Processing...7E Site reliabil...0New featur...OE Intosec Is... O8 Ready for ...0@ Resolve... 999+= View all que... ›Service requestsA Incidentsal ReportsC OperationsA Knowledge Base& CustomersChannels• Email logs⅘› Developer escalati...: Slack integration& Reporting Center[ Add shortcutE Archived work items= More spaces— -iltersDashboards@ OperationsSpaces / Service-Desk / QueuesPlatform team:= List +Q Search work2 work items• т keySRD-6779SRD-6716Request typevStatusvSummaryUnable to log in to SidekickFlosonics - Panoramaprocessing errorAssignee vMore filters vPriority levelP2 MediumP2 MediumSeverity levelS2S2ReporterMario GeorgievGabriela DurevaAssigneeNikolay Nikolovl Ssellyan GeorgievStatusIN PROGRESSPLANNEDTriageCreated I09/Apr/2617/Mar/26...
|
NULL
|
NULL
|
NULL
|
8677
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)иbок (2)C SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, Anv• COstI CHE SSHEl Dutadogjminay / app&‹> Code11 Pull requestsActionsCD WikiSecurity and qualityk Insights@ Settings|ActionsFix Dependabot issuessecfix.ymlAll workfiows33 workflow runsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankovRelease EnvironmentStart-Stop EnvironmentRefactor secfix scripts for improved parsing and handling of covered…it 51171aa pushed by nikolay-yankkov[include) Start/Stop testing environme.Refactor Slack notification handling in secfix scripts and workflowPu upenosootweewe00OSe PWROOFTRONTaraosMarsoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metrics• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issuesO Actions :autonate-dependabot-issue_autonate-dependabot-issue.0U10110 -003000000183300autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - Platform> 0.Daily - Platform • 6 m leftue 14 Apr 9:59C Ct: Depe• Actions s• DependelO Far DepeD TиsksInsights & Coachin.• Dev- UXQ Type ([] to search+ •Q Fiter workdiow runsEvent-Status -BranchActor -H wOrmowStefka StoyanovaBranchesФрY-COSe-20-08-0980deploy-master-25-02-2026-myackovdeploy-master-24-02-2026automate-hubspot-app-deploymentФигтк-феpоnо8008-195005-1001E Aor 9, 9:48 PM GMT43Ô 158B Apr 9, 7:30 PM GMT+3|Ae 9, 718 PM CMTA)Steliyan GeorgievAneliya Angelova14:018 • Tue 14 Apr 9:59:26Chat•j•Nikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8676
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)jminay / app&‹> Code11 Pull requestsActionsAll workfiowsAPP DeploymentClaude Security Helper|Database MigrationsDependabot UpdatesRelease EnvironmentStart-Stop Environment[include) Start/Stop testing environme...Mandoecien8 CachesA Deployments• Attestations|EB Runners@ Usage metrics@ Performance metricsC SRD-677T7 (SRO-67С зy 19798Service-oDe Foet, AnvE SSHEl DutadogActionsCD WikiSecurity and qualityk Insights@ Settings|Fix Dependabot issuessecfix.yml33 workflow runsThis workflow has a workflow_dispatch event trigger.• Fix Dependabot issuesFix Dependabot issues 842: Manually run by pikolay-yankorO Refactor secfix scripts for improved parsing and handling of coveredl...it $1171as pushed by nikolay-yankovRefactor Slack notification handling in secfix scripts and workflowPu wpenosootweewe00OSe PWROOFTRONTaraos• Fix Dependabot issuesmu vepchos0otn3n con Monanh by magen• Fix Dependabot issuesFix Dependabot istues R38: Manually run by pikolay-yankoyFix Dependabot issuesFix Dependabot issues #37: Manually run by nikolay-yankor• Fix Dependabot issuesFix Dependabot issues #36: Manually run by pikolay-yankov• Fix Dependabot issues• COstI CHO Actions :autonate-dependabot-issue_autonate-dependabot-issue.autonate-dependabot-issue_autonate-dependabot-issue.autonate-dependabot-issue_9:59 AM Daily - PlatformC Ct: Depe• Actions s• DependelD TиsksInsights & Coachin.• Dev- UXQ Type ([] to searchQ Fiter workdiow runsEvent-Status -BranchActor -H wOrmowSelect branch |Tagshutspot-webhooks-bckpfa-planet-migrationsfa-fontamesome-download-issuesfeature(JY-19120-chorus-retryfeature(JY-16492-office-add-inSeatureT-10400© 4m 236Daily - Platform • 6 m leftO Far Depeue 14 Apr 9:59EA ooownrtStefka StoyanovaSteliyan GeorgievAneliya Angelova13:5688 • Tue 14 Apr 9:59:21ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8675
|
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Jira
Jira
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Queues
Queues
Create
Create
More for queues
More for queues
Team Priority
Team Priority
All open tickets
All open tickets
Star
-
Unassigned tickets
Unassigned tickets
Star
-
Support team Queue
Support team Queue
Star
-
Raised by me
Raised by me
Star
-
Assigned to me
Assigned to me
Star
-
Service requests
Service requests
Star
-
Platform team
Platform team
Star
-
Processing team
Processing team
Star
-
Site reliability team
Site reliability team
Star
-
New features requests
New features requests
Star
-
InfoSec issues
InfoSec issues
Star
-
Ready for Customer
Ready for Customer
Star
-
Resolved tickets
Resolved tickets
Star
-
View all queues
View all queues...
|
Firefox
|
Jira — Work
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37...
|
8674
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpmail.google.com/mail/u/O/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTIbookmaePlatform Sprint 1 Q2 - Platform TeaQ Search bookmarks@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Your Ask Jiminny test report rev booknarks 100l0a1Sprint Boardy SRD queueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks+ New lab=MailChatMeetM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsHoe emalisGithubappextensionvuejsJIK HNotes••Utilities[< 40 ll • | Daily - Platform • 6m left100% C# 8• Tue 14 Apr 9:59:17UMNNY 61,540Q Ask GmailYour Ask Jiminny test report report is ready Inbox xThe Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01AM (4 days ago)++7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail ©# Add to Drive203Por Ask Jiminny test r...1 Reply→ ForwardEnable desktop notifications for Jiminny Mail. OK No thankslet/iira/servicedesk/proiects/SRD/queues/custom/37• Share in chat-...
|
NULL
|
NULL
|
NULL
|
8673
|
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)> 0.Daily - Platform • 6 m leftPlatform TeamREADY FOR DEV 1ooaiesnoTxwitexceed Fontawesomepackage limitsMAINTENANEDReady for Dev8 -20564 1T*ae+=S)))SRD-677С зy 19790Service-oie Foet, Ane• COstI CHhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/372selectedissue=JY-205510 ProjectsE SSHEl Dutadog* ClaudeO Circiec800$ Jy-12253 / E JY-20551Experiment with AI workflow for automated Dependabot fixes~ Descriptionproposed changes.Try to build a workflow that automatically detects open Dependabot issues, fixes them with Al agent and opens a PR withSubtasksLinked work itemsAdd linked work itemActivityCommentsHistoryWork lognou s commuasieSuggest a reply….Status update...Thanks…Pro tip: press M to commentNikolay Yankov9 Aprl 2026 at 14:17https://github.com/jminny/app/pull/11875Q Actions :C Ct: Depe• Actions :• Dependel0 Tasks|7 Insights & Coachin.• Dev•ux.In Dev vIx Improve Technical StoryDetailsAssigneeNikolay YankovReporterNikolay YankovQuick start developmentLink this work item to your codeoy meboine kor wnen croounea branch, commit, or pull requestUuneoomeriQ Open with VS Code1J Create branch4 Create commitCoiootenPlatformSub-Product8•• Far DepeAl BookmarksGroup: Queriesfix cowiniome ouring tofeature flag reieaseSUPPORT TICKETSDeployedXE -20565 15 •***=AI Review - Q1GROWTH - MAINTAIN OUR COMPE...Deployed_10082|1 • ..** =No such column "Type' onentity 'Event"DeployedE-20384 05 # *** =®Missed deletion of staleClosed02000 1 *=[Pipedrive) DI > status notlabeled, date data missingД -20014 05 01 **** =|Stefka StoyanovaSteliyan Georgiev9:59 AM Daily - Platform:Aneliya Angelova13:538 • Tue 14 Apr 9:59:17ChatNikolay YankovNikolay IvanovLukas Kovalik...
|
NULL
|
NULL
|
NULL
|
8672
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpmail.google.com/mail/u/O/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTIbookmhlePlatform Sprint 1 Q2 - Platform TeaQ Gearch bookmarks@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Your Ask Jiminny test report rev booknarks 100l0a1Sprint BoardSRD QueueGithuov E Bookmarks Menu> C Mozilla Firefox• Other Bookmarks+ New lab=MailChatMeetM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsHoe emalisGithubappextensionvuejsJIRANotes• Utilities[< 40 ll • | Daily - Platform • 6m left100% C# 8• Tue 14 Apr 9:59:16UMNNY 61,540Q Ask GmailYour Ask Jiminny test report report is ready Inbox xThe Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01AM (4 days ago)++7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail ®# Add to DrivePor Ask Jiminny test r...1 Reply→ ForwardEnable desktop notifications for Jiminny Mail. OK No thanks203• Share in chat-...
|
NULL
|
NULL
|
NULL
|
8671
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity tsocc ce Cdcseciie(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses+ New labare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro v=M GmailComposeMailChatInboxStarredonoozeeMeetYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilitiesC 40 lbl | Daily - Platform • 6m left100% C# 8• Tue 14 Apr 9:59:15O JIMINNY1,540C Ask GmaillYour Ask Jiminny test report report is ready Inbox *The Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01 AM (4 days ago)+7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail © &* Add to DrivePoF Ask Jiminny test r...Reply→ Forward0 Share in chatEnable desktop notifications for Jiminny Mail. OK No thanks...
|
NULL
|
NULL
|
NULL
|
8670
|
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow...
|
Firefox
|
Your Ask Jiminny test report report is ready - luk Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvc mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTl...
|
8669
|
|
Platform Sprint 1 Q2 - Platform Team - Scrum Board Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
jiminny.atlassian.net
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Close tab
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()
(ideally wrapped in an
asyncio.Semaphore
to avoid overwhelming the endpoint) to run the replayability probes concurrently.
Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):
Standard synchronous file operations (
with open(...)
,
json.dump
,
json.load
) are used inside
async def
functions. In Python, this blocks the entire event loop while the disk is reading/writing.
Fix:
Use an asynchronous file I/O library like
aiofiles
, or run the blocking I/O operations in a separate thread using
asyncio.to_thread()
.
Architecture & State Management
Architecture & State Management
Mutating Class-Level Variables (Lines 323-328):
The script parses CLI arguments and directly mutates the class attributes (e.g.,
AiActivityTypeEvaluator.DATA_SET = args.data_set
). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.
Fix:
Pass these arguments into the
__init__
constructor of the instance (
self.data_set = args.data_set
) rather than modifying the class definition globally.
Code Quality & Edge Cases
Code Quality & Edge Cases
Broad Exception Catching (Line 107):
Using a bare
except Exception:
during the replayability probe is dangerous. It will catch
aiohttp.ClientError
(which is intended), but it will also silently swallow
TimeoutError
or even memory errors, making debugging incredibly difficult if the endpoint goes down.
Fix:
Scope the exception to specific expected errors, like
except (aiohttp.ClientError, asyncio.TimeoutError):
.
Inefficient Size Calculation (Line 95):
len(json.dumps(request_body)) < min_size
requires serializing the entire dictionary to a string...
|
Firefox
|
Your Ask Jiminny test report report is ready - luk Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvc mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTl...
|
8668
|
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Your Ask Jiminny test report report is ready - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()
(ideally wrapped in an
asyncio.Semaphore
to avoid overwhelming the endpoint) to run the replayability probes concurrently.
Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):
Standard synchronous file operations (
with open(...)
,
json.dump
,
json.load
) are used inside
async def
functions. In Python, this blocks the entire event loop while the disk is reading/writing.
Fix:
Use an asynchronous file I/O library like
aiofiles
, or run the blocking I/O operations in a separate thread using
asyncio.to_thread()
.
Architecture & State Management
Architecture & State Management
Mutating Class-Level Variables (Lines 323-328):
The script parses CLI arguments and directly mutates the class attributes (e.g.,
AiActivityTypeEvaluator.DATA_SET = args.data_set
). This is a major anti-pattern. If you ever try to run tests in parallel or create multiple instances of this evaluator in a single process, the state will bleed across them.
Fix:
Pass these arguments into the
__init__
constructor of the instance (
self.data_set = args.data_set
) rather than modifying the class definition globally.
Code Quality & Edge Cases
Code Quality & Edge Cases
Broad Exception Catching (Line 107):
Using a bare
except Exception:
during the replayability probe is dangerous. It will catch
aiohttp.ClientError
(which is intended), but it will also silently swallow
TimeoutError
or even memory errors, making debugging incredibly difficult if the endpoint goes down.
Fix:
Scope the exception to specific expected errors, like
except (aiohttp.ClientError, asyncio.TimeoutError):
.
Inefficient Size Calculation (Line 95):
len(json.dumps(request_body)) < min_size
requires serializing the entire dictionary to a string
just
to check its length. Since
min_size
defaults to
0
, the
if min_size
short-circuit saves it for now, but if anyone sets a minimum size, this will become an unnecessary CPU bottleneck on large datasets.
Potential Path Traversal Risk (Lines 110, 113, 251):
The script writes and reads files directly using...
|
Firefox
|
Your Ask Jiminny test report report is ready - luk Your Ask Jiminny test report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvc mail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTl...
|
8667
|
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Daily - Platform • 6 m left8•)))nbox (2)SRD-677C Jy 19796(7 Service-o xie Font Ame• COMTICHhttps://fjiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedissue=JY-20551Simiri0 ProjectsB AWSE3 SSHElDatadog * Claude3 CircieciPlatform TeamQ Search board800$ JY-12253 / E JY-20551READY FOR DEV 1Experiment with AI workflow for automated Dependabot fixesexceed Fontawesomepackage limitsMAINTENANESReady for Dev8-205641 П ****:~ Descriptionproposed chandesTry to bulld a workflow that automatically detects open Dependabot issues, fixes them with Al agent and opens a PR with |SubtasksLinked work itemsActivityCommentsHistoryWork logNUU & COITETISTnSuggest a reply…..Status update...Thanks….Pro tip: press M to commertcohny Yanko9 April 2026 at 14.17• Actions :С Ct: Depe• Actions sDependolD TasksInsights & Coachin.• Del0ux.©2|In Dev v#x Improve Technical Story~ DetailsAssignee& Nikolay YanikowKeoohNikolay YankovQuick start developmentLink this work item to your codeby including keys when creatinga branch, commit, or pull requestbelow. Learn moreDismissDevelopment@ Open with VS Code1 Create branch+ Create commitComponentsPlatformSub-Product• Far DepeD Al Bookmarks9:59 AM Daily - PlatformGroup: QueriesPuooanonoeeleature fiag releaseDeployed0 -20565 15 + ****=AI Review - Q1CTNTHEVATAORCEVDeployed__19982 |1 ••**=No sucn coumh "lype onentty 'Event"PLATTORM STABTLTTYDeployed8 -20384 05 1 ****=Missed deletion of stale0m400R3 409000(Pipedrive) DI > status notlabeled, date data missingREDUCT CHURNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievLovalik13:388 • Tue 14 Apr 9:59:02ChatNikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8666
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelp> 0.meet.google.com / Daily - PlatformNikolay Yankov (Presenting)SRD-677XC Jy 19796(7 Service-ords/37?selectedissue=JY-20551El Datadogie Font. AmrCostI ChActionsС Ct: DepeD Tasks• Actions s27 Insights & CoachielSminnyPlatform TeamQ Search boardREADY FOR DEV 1hoeenotxwirtexceed Fontawesomepockage limitsMASNTENANESReady for Dev027-20564 1Projects806• Dev9:58 AM ||Daily - PlatformDaily - Platform - 7 m left8•Dependal0ux.• Far DepeGroup: QueriesDEPLOY &feature fiag releaseSUPPORT TICKETSDeployed0 -205e5 15 + •***=AI Review - 01DeployeQ -19982 1••= 9No sucn column Type onentty 'Event"PLATTORM STARILITYDeployed2038405 •.00Missed deletion of staleREDUGE CHURN0 -4001a-ene=(Pipedrive] DI > status notlabeled, date data missingREDUSE CHURNDeployeo0 -200м 03 l1 •***=Stefka StoyanovaSteliyan Georgievlik13:358 • Tue 14 Apr 9:58:59ChatNikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8665
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)PlactormSRD-677(7 (5RD-67)C Jy 1979607 Service-oir Font. Amr• COMTICHhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-20553• Sminn0 Projects# AWS|E SSHEl Dutadog* Claude3 CircieciPlatform TeamQ Search board800$ JY-20285 / A JY-20553READY FOR DEV 1Linked work itemsAdd linked work itemooesnoTixWiwexceed Fontawesomepackage limitsMAINTENANCISReady for Dev8-20564 1~ ActivitywotanoiStatus update...Pro tip: press (M to commNikolay Nikolov &Nhwewoalo4onConsider this has helped for the drop from 19 to 6 H: () https://github.com/jminny/app/pull/11796Connect.youcolay ikoloy9 Aprl 2026 at 16:28oonioruOeyE (Draft) Debug crm-sync long jobsPossible worker outage starting at 22:00 UTC on 2026-03-24:• Actions :A, Sentryl9:58 AM | Daily - Platform(ah|Daily - Platform • 7 m left8•С Ct: Depe• Actions sDependol• Far DepeD Tasks7 Insights & Coachin• DevDux.D Al BookmarksIn Dev vXZ Improve Story~ DetailsNikolay NikolovAsuntoeReporter8 Stetka Stoyanovauuick star dcvciopmentLink this work item to your codeoy inciuding xeys wiith Creaungla branch, commit, or pull request |below. Learn moreDismissDevelopment• Oocn with VS CodelCreate branch4 Create commitComponentsPlatformSub-ProductAdd optionsGroup: QueriesDEPLOY &"uoehnonoeleature fiag releaseDeployed0 -20585 15 + ****=AI Review - Q1CTNTHEWANTANOURCOVIDeployed19982 1 @ ...•=No such column "Type' onentty 'Event"PLATTORM STABTLITYDeployed9 -20384 05 ^ ****=|Missed deletion of stale(Pipedrive) DI > status notlabeled, date data missingCREDUCE CHURNNDeployed0 -20614 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik13:298 • Tue 14 Apr 9:58:53ChatNikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8664
|
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Inbox (2)SRD-677C Jy 1979607 Service-oir Font. Amr• COMTICHhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=JY-20553• Smir0 Projects# AWS|E SSHE Datados* Claude3 CircieciPlatform Team800$ JY-20285 / A JY-20553READY FOR DEV 1Delays in CRM SyncoohesnetxWiwexceed Fontawesomepackage limitsMAINTENANCISReady for Dev8-20564 1 П ****=Descriptioncrm.sync queue consistently contains messages with 18+ hours age, meanwhile the number of messages is not huge.therefore more worker won't help. Please make sure that the messages in this queue are processed timely - for not morethan 1-2 minutes.Approximate Age 01 Oldest Message* is an AWS SQS metric that measures:The time elopsed since the oldest messoge wos added to the queue and is stil woiting to be received (picked up byo worker)Metric ValueMeaning19 hoursA message (ob) was dispatched 19 hours ago and has notyet been picked up by any workerSubtasksAdd subtaskLinked work items• Actions :A, Sentryl9:58 AM | Daily - Platform(ah|Daily - Platform • 7 m left8•С Ct: Depe• Actions sDependol• Far DepeD Tasks7 Insights & Coachin.• DevDux.D Al BookmarksIn Dev vXZ Improve Story~ DetailsNikolay NikolovAsuntoeReporter8 Stetka StoyanovaQuick start developmentLink this work item to your codeby including keys when creatinga branch, commit, or pull request |below. Learn moreDismissDevelopmentQ Open with VS Code!J Create branch4 Create commitComponentsPlatformSub-ProductAdd optionsGroup: QueriesDEPLOY &leature fiag releaseDeployed0 -20585 15 + ****=AI Review - Q1CTWIHENANANORCOUHDeployed_19082|1 • •***=wo sucn coumh "lype onentty 'Event"PLATTORM STABTLITYDeployed9 -20384 05 11 ****=|Missed deletion of stale74000(Pipedrive) DI > status notlabeled, date data missingDeployed0 -20014 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik13:238 • Tue 14 Apr 9:58:47Chat6Nikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8663
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity tsocc ce Cdcseciie(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOeses+ New labare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProv=M GmailComposeMailChatInboxStarredonoozeeMeetYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilitiesC 40 lbl | Daily - Platform • 7 m left100% C# 8• Tue 14 Apr 9:58:45O JIMINNY1,540C* Ask GmaillYour Ask Jiminny test report report is ready Inbox *The Jiminny Team <[EMAIL]>1o mev7 of 25,263@ Fri, Apr 10, 9:01 AM (4 days ago)[PHONE]00,739*Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail © &* Add to DrivePoF Ask Jiminny test r...Reply→ Forward0 Share in chatEnable desktop notifications for Jiminny Mail. OK No thanks...
|
NULL
|
NULL
|
NULL
|
8662
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow HelpPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re+ New labmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI?projector=1&messagePartld=0.1/~ Google Gemini...Ask Jiminny test report - 9 Apr 2026.pdfk Gmail• • шsocc ce Cdlasecie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOesesYour Ask Jiminrne Jiminny leams< 40 ll • | Daily - Platform • 7m left100% C# 8• Tue 14 Apr 9:58:43E Open with Google Does| -)@и• G Ф:Draftsualegonle)Purchasesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageGithubappextensionAsk Jiminny Test Report8 Apr 2026senurOne attachment • SJIMINNYPoF) Ask Jiminny test+ReplyBased on the analysis of recent custo merinteractions.limiony is taufrently being utilized as aetrtocie tool for eoloe anoblomant coschino and sinolino vicibilit,, Dolouie seunthocie of thol...
|
NULL
|
NULL
|
NULL
|
8661
|
|
DialFilelEditViewTabsBookmarksHistoryExtensionsWin DialFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SRD-677C Jy 1979607 Service-oir Font. Amr• COMTICH[URL_WITH_CREDENTIALS] Dev v# Improve Story~ DetailsAssignee #Nikolay NikolovAsunteteReporter8 Stetka StoyanovaQuick start developmentLink this work item to your codeby including keys when creatinga branch, commit, or pull request |below. Learn moreDismissDevelopmentQ Open with VS CodeCreate branch4 Create commitComponentsPlatformSub-ProductAdd optionsGroup: QueriesDEPLOY 8leature fiag releaseDeployed0 -20565 15 * ****=AI Review - Q1CTWIHENANANORCOUHDeployed19982 1 @ ..••=wo sucn coumh "lype onentty 'Event"PLATTORM STABTLITYDeployed9 -20384 05 11 ****=Missed deletion of stale(Pipedrive) DI > status notlabeled, date data missingCREDUCE CHURNNDeployed0 -20014 05 П ****=:Stefka StoyanovaSteliyan GeorgievKovalik13:198 • Tue 14 Apr 9:58:43Chat6Nikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8660
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow HelpPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re+ New labmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI?projector=1&messagePartld=0.1/~ Google GeminiAsk Jiminny test report - 9 Apr 2026.pdfk Gmail!» ..socc ce Cdlasecie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOesesYour Ask Jiminrne Jiminny leams< 40 ll • | Daily - Platform • 7m left100% C# 8• Tue 14 Apr 9:58:42@и• G Ф4:Draftsualegonle)Purchasesare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await s asession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageGithubappextensionAsk Jiminny Test Report8 Apr 2026senurune auacnment . oJIMINNYPOF) Ask Jiminny test+ ReplyBased on the analysis of recent custo merinteractions.limiony is taufrently being utilized as aetrntocie tool for eoloe anoblomant coschino and sinolino vicibilit,, Dolouie seunthocie of thol...
|
NULL
|
NULL
|
NULL
|
8659
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity tsocc ce Cdcseciie(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses+ New labare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiPro v=M GmailComposeMailChatInboxStarredonoozeeMeetYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilitiesC 40 lbl | Daily - Platform • 7 m left100% C# 8• Tue 14 Apr 9:58:39O JIMINNY1,540C Ask GmailYour Ask Jiminny test report report is ready Inbox *The Jiminny Team <[EMAIL]>lo mev7 of 25,263@ Fri, Apr 10, 9:01 AM (4 days ago)+7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail © &* Add to DrivePor Ask Jiminny test report- 9 Apr 2026.pdf22 KBReply→ ForwardEnable desktop notifications for Jiminny Mail. OK No thanks0 Share in chat...
|
NULL
|
NULL
|
NULL
|
8658
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelp$0.(ah|Daily - Platform - 7 m leftmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Q 8•• Fa Depe xInbox (2)PlactormSRD-677https://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37Sminn8) ProjectiE SSHPlatform TeamQ Search board2000018Турe чLabel vQuick filtersREADY FOR DEV 1INDEV 4COOE REVIEW 3Part? Automated reoorts)exceed FontawesomeMASNTENANESReady for Dev8-20564 1AJREPORTSIn DevAIBEFE4-16900 115n****= 3Delays in CRM SyncCUATFORM STABTUITYIn DevQJy-20553workfiow for automatedDependabot fixesEMPROVEMENT OF OUR EFFICEINCYIn Dev© J-205512+000sru and staoiize MobieOS using new mobile use...MAINTENANCEIn DevQAД JY-204313****=0Evaluation foe AI ActivityTypesAUTO-DETECTED ACTIVITY TYPECode Review93-19798 15 + •*•=AJ Reports > Tracking LCode Review8JY-20543 1 .0=for SSO for 'persistent'name_id_formatREDUCE CHURNCode ReviewД -37-2063205 •.•=+ CreateC Jy 19796(7 Service-o xfont AwtXO COMICH• Actions :С Ct: DepeQ Actions :DependolEl Dacadog © * Claude5 Circiecl[ Sentry8) TasksInsights & Coachin.• DevDux.Complete sprint8) AI Bookmarks)BLOCKEDPO ACCEPTANCEGroup: QueriesDEPLOY &fix cownome ouring teleature fiag releaseBUPPORT TICKETSDeployed0 -20585 15 ****=AI Review - Q1OeployedP -19982|1 • •=*=no sucn coumn "lype onentity 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 П •***=Missed deletion of staleCEOUCE CHURD0 -20670 /80 01 ...*=(Pipedrive) DI > status not|labeled, date data missingREOUCE CHURNDeployed0 -20614 05 П ****=Stefka StoyanovalSteliyan GeorgievKovalik9:58 AM | Daily - Platform13:158 • Tue 14 Apr 9:58:39ChatNikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8657
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelp$0.(ah|Daily - Platform - 7 m leftmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)Q 8•• Fa Depe xInbox (2)PlactormSRD-677C7 (5RD-67C Jy 19796(7 Service-o xfont AwtX• COMTICH• Actions :С Ct: DepeQ Actions :Dependolhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37Sminn8) ProjectiE SSHEl Dacadog © * Claude5 CircieclA Sentry|8) TasksInsights & Coachin.• DevDux.Platform TeamQ Search board2000018Турe чLabel vQuick filtersComplete sprintREADY FOR DEV 1INDEV 4COOE REVIEW 3BLOCKEDPart? Automated reoorts)exceed FontawesomeMASNTENANESReady for Dev8-20564 11*as*AJREPORTSIn DevAIBEFE4-16900 115n****= 3Delays in CRM Sync|CUATFORM STABTUITYIn DevQJy-20553toeweworkfiow for automatedDependabot fixesEMPROVEMENT OF OUR EFFICEINCYIn Dev₴л-205512+000sru and staoiize MobieOS using new mobile use...MAINTENANCEIn DevQAД JY-204313****=0PO ACCEPTANCEEvaluation foe AI ActivityTypesAUTO-DETECTED ACTIVITY TYPECode Review93-19798 15 + •••=+ CreateAJ Reports TrackingCode ReviewД л-20543 1 *** = ©for SSO for 'persistent'name_id_formatREDUCE CHURNCode ReviewД 31-206320,5 ..0=8) AI Bookmarks)Group: QueriesDEPLOY &Hix oownome ouring taleature fiag releaseBUPPORT TICKETSDeployed0 -20585 15 ****=AI Review - Q1OeployedP -19982|1 • •=*=no sucn coumn "lype onentity 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 П •***=Missed deletion of staleCEOUCE CHURD0 -20670 /80 01 ...*=(Pipedrive) DI > status not|labeled, date data missingREOUCE CHURNDeployed0 -20614 05 П ****=Stefka StoyanovaSteliyan GeorgievKovalik9:58 AM | Daily - Platform13:148 • Tue 14 Apr 9:58:38ChatNikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8656
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpmail.google.com/mail/u/0/#inbox/FMfcgzQgLPHqhfTqvcRjxxxrPDNRGZTI~ Google GeminiPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity tsocc ce Cdcseciie(8 Jiminnyg Ask Jiminny test report - 8 Apr 20:M Your Ask Jiminny test report re3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses+ New labare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProv=M GmailComposeMailChatInboxStarredonoozeeMeetYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejswvolesSharedSentryUtilitiesC 40 lbl | Daily - Platform • 7 m left100% C# 8• Tue 14 Apr 9:58:36O JIMINNY1,540C* Ask GmaillYour Ask Jiminny test report report is ready Inbox *The Jiminny Team <[EMAIL]>1o mev7 of 25,263@ Fri, Apr 10, 9:01 AM (4 days ago)*+7385,449215100,739Hi there,Your latest Ask Jiminny Report has been generated and is now available.Report details:Name: Ask Jiminny test reportPeriod: 9 Apr 2026You can find all reports and details on Al Reporting page.Please review the attached files at your convenience.Best wishes,The Jiminny TeamO UIMINNYMade by Jiminny, Inc. Our BlogCONTACT USKNOWLEDGE BASECOMMUNITYOne attachment • Scanned by Gmail © &* Add to DrivePoF Ask Jiminny test r...Reply→ Forward0 Share in chatEnable desktop notifications for Jiminny Mail. OK No thanks...
|
NULL
|
NULL
|
NULL
|
8655
|
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labProfilesToolsWindowHelp1dll.cooeie.com alluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilities1,5409.449215100,15%Q Ask Gmail• # steliyan., sonarqub. 3 |• # Datadog• & Google 2.• & Datadog• # Datadog# # The Jiminny Team# Nikolay .. sonarqub. 4• * Datadog• * steliya... sonarqu. 6* stellyan., sonargud. 4• & The Jiminny Team• 4 ilian-j... sonarqu. 7• # steliya.…. claude[. 34• * noreply@salesforce..• # Google 2• * The Jiminny Team• # Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]U * IWillo• * steliyan. .. Nikolay 16• # Atlassian• # Atlassian• # Salesforce• # Datadog• * Veselin .. sonarqub. 3JiraEnable desktop notifications for Jiminny Mail.UxNo uhank50 lhl| Daily - Platform • 7 m leftA100% C8 • Tue 14 Apr 9:58:34*O JIMINNY1-50 01 6.2631[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu…..Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...Ljiminny/propnetf Jt-19%o2. Allow muntiple Lum evais with one commana run (PK #404) - eg pytnon srerevalleval-ask-anything-chat.py "-steps run valldate evaluate expo..Your API Token is about to expire - Atlassian Your API token is about to expire Hi Lukas Kovalik, Your API token with label rest api expires at 2026-04-09T00:00:00Z UTC. To av..• Are you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ....ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered) D...[jiminny/infrastructure] JY-20623 Add SQS queue for panorama reports (PR #728) - You can view, comment on, or merge this pull request online at: https://github.com/jimi..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...[jiminny/infrastructure] JY-20309 Enable ECS execute command (PR #727) - You can view, comment on, or merge this pull request online at: https://github.com/jiminny/infr..Apr 11Apr 11Apr 10Apr 9Apr 9Apr9Apr 9Apr 9Apr9Apr9Apr9Apr 8Apr 8AOroApr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr7Apr 7...
|
NULL
|
NULL
|
NULL
|
8654
|
|
FirefoxFileEoitViewHistoryBookmarksPlatform Sprint FirefoxFileEoitViewHistoryBookmarksPlatform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity t(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)M Inbox (1,540) - lukas.kovalik@j+ New labProfilesToolsWindowHelp1dll.eooele.com nalluo tinoox~ Google Geminisocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringOeses=MailChatMeetare there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageM GmailComposeInboxStarredonoozeeSentDraftsCategoriesPurchasesv MoreLabelsApp emailsGithubappextensionvuejsIvOlesSharedSentryUtilities1,5407389.449215100,15%Q Ask Gmail• # steliyan., sonarqub. 3 |• # Datadog• & Google 2.• & Datadog• # Datadog# # The Jiminny Team# Nikolay... sonarqub. 4• # Datadog• * steliya... sonarqu. 6* stellyan., sonargue. 2• & The Jiminny Team• 4 ilian-j... sonarqu. 7• # steliya.…. claude[. 34• * noreply@salesforce..• # Google 2• * The Jiminny Team• # Datadog• * Veselin .. sonarqub. 3• * github-actions[bot]U * IWillo• * steliyan. .. Nikolay 16• # Atlassian• # Atlassian• # Salesforce• # Datadog• * Veselin .. sonarqub. 3JiraEnable desktop notifications for Jiminny Mail.UxNo uhank50 lhl| Daily - Platform • 7 m leftA100% C8 • Tue 14 Apr 9:58:30*O JIMINNY1-50 01 6.2631[jiminny/prophet] JY-20674: panorama pdf add header section (PR #467) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] - Reply to this email directly, view i...[jiminny/prophet] JY020575: panorama reports absolute links (PR #466) - You can view, comment on, or merge this pull request online at: [URL_WITH_CREDENTIALS] pushed 1 commit. 44d1cad Update swagger-ui to v5.32.2 — View it on GitHu…..Your Twilio account has been funded - We charged the Jiminny (Production) Credit Card (**** **** **** 6609) $4965.78 to bring the balance to -$217.51. Visit the Twilio Payme...Ljiminny/propnetf Jt-19%o2. Allow muntiple Lum evais with one commana run (PK #404) - eg pytnon srerevalleval-ask-anything-chat.py "-steps run valldate evaluate expo..Your API Token is about to expire - Atlassian Your API token is about to expire Hi Lukas Kovalik, Your API token with label rest api expires at 2026-04-09T00:00:00Z UTC. To av..• Are you our Rovo Competition winner!? - Votes are in! Here are your top Rovo demos Top ways real teams are using Rovo Al We asked how your teams are using Rovo Al in ....ATTENTION: Update to Communications for Certificate Rotations - Product & Service Notification What's changing? Salesforce is updating our communication policy regard...Your Daily Digest from Datadog - The Daily Digest for Jiminny, Inc. Here's what happened in Datadog on April 06. Metric Alerts 3 Total Events 3 Alerts Recovered [Recovered) D...[jiminny/infrastructure] JY-20623 Add SQS queue for panorama reports (PR #728) - You can view, comment on, or merge this pull request online at: https://github.com/jimi..Lukas Kovalik, here is your weekly update for 7 Apr - Your weekly update Space updates Check on 3 work items without updates for 28 days JY-20584 [BE] Change search report...[jiminny/infrastructure] JY-20309 Enable ECS execute command (PR #727) - You can view, comment on, or merge this pull request online at: https://github.com/jiminny/infr..Apr 11Apr 11Apr 10Apr 9Apr 9Apr9Apr 9Apr 9Apr9Apr9Apr9Apr 8Apr 8AOroApr 8Apr 8Apr 8Apr 8Apr 8Apr 8Apr 7Apr 7Apr 7Apr7Apr 7...
|
NULL
|
NULL
|
NULL
|
8653
|
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()
(ideally wrapped in an
asyncio.Semaphore
to avoid overwhelming the endpoint) to run the replayability probes concurrently.
Blocking File I/O in Async Functions (Lines 110-114, 184-188, 268-269):
Standard synchronous file operations (...
|
Firefox
|
Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminn Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
mail.google.com/mail/u/0/#inbox
|
8652
|
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Inbox (1,540) - [EMAIL] - Jiminny Mail
Inbox (1,540) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 19798 evaluation for ai activity types by nikol</tabTitle>” with “<selection>@@ -0,0 +1,330 @@1+#!/usr/bin/env python32+import asyncio3+import json4+import os5+from pathlib import Path6+from typing import Any, Dict, List7+8+import aiohttp9+10+from src.component.call_processing.schemes.ai_activity_type_request import AiActivityTypeRequest11+from src.component.call_processing.schemes.ai_activity_type_response import AiActivityTypeResponse12+from src.eval.abstract_evaluator import AbstractEvaluator13+from src.eval.collectors import collect_test_set as es_collect_test_set14+from src.eval.common_evaluator_runner import create_parser, run_evaluation15+from src.eval.endpoints import run_endpoint as run_endpoint_http16+from src.eval.models import EvaluationResult17+18+19+class AiActivityTypeEvaluator(AbstractEvaluator):20+ENDPOINT_PATH = "call/ai-activity-type"21+REQUEST_MODEL = AiActivityTypeRequest22+RESPONSE_MODEL = AiActivityTypeResponse23+OUTPUT_SUBFOLDER = "ai_activity_type"24+USES_LLM_EVALUATION = False25+26+READS_FROM_DATASET_FOLDER = True27+28+DATA_SET: str = "initial"29+30+MINIMUM_REQUEST_BODY_SIZE: int = 031+32+SKIP_UNREPLAYABLE_ON_COLLECT: bool = True33+REPLAYABILITY_CHECK_TIMEOUT_SECONDS: float = 20.034+35+POPULATE_GROUND_TRUTH_LLM: bool = False36+GROUND_TRUTH_LLM_ENDPOINT: str = "OPENAI:gpt-5_2"37+38+COMPARE_TO_GROUND_TRUTH: str = "es"39+40+def __init__(self, **kwargs: Any) -> None:41+super().__init__(**kwargs)42+_repo_root = Path(__file__).parents[2]43+_datasets_root = _repo_root / "eval_output" / self.OUTPUT_SUBFOLDER / "eval_datasets"44+_dataset_dir = _datasets_root / self.__class__.DATA_SET45+self._dataset_dir = _dataset_dir46+self._inputs_dir = _dataset_dir / "input"47+self._ground_truths_dir = _dataset_dir / "ground_truth"48+49+async def collect_test_set(self) -> List[Dict[str, Any]]:50+if self.es_host_name:51+return await self._collect_from_es()52+return await self._collect_from_files()53+54+async def _collect_from_es(self) -> List[Dict[str, Any]]:55+if self._inputs_dir.exists() or self._ground_truths_dir.exists():56+raise FileExistsError(57+f"Dataset folder already exists: {self._inputs_dir.parent}. "58+"Choose a different --data-set name or remove the folder manually."59+ )60+61+raw_samples = await es_collect_test_set(62+es_host_name=self.es_host_name,63+es_port=self.es_port,64+endpoint_path=self.ENDPOINT_PATH,65+limit=self.limit,66+language_filter=self.language_filter,67+min_prompt_length=self.min_prompt_length,68+is_json_response=self.IS_JSON_RESPONSE,69+exclude_languages=self.exclude_languages,70+ )71+72+self._inputs_dir.mkdir(parents=True, exist_ok=True)73+self._ground_truths_dir.mkdir(parents=True, exist_ok=True)74+75+min_size = self.MINIMUM_REQUEST_BODY_SIZE76+samples: List[Dict[str, Any]] = []77+skipped_no_response = 078+skipped_too_small = 079+skipped_unreplayable = 080+skipped_probe_errors = 081+82+endpoint_url = f"{self.api_host}/{self.ENDPOINT_PATH}"83+84+timeout = aiohttp.ClientTimeout(total=self.REPLAYABILITY_CHECK_TIMEOUT_SECONDS)85+async with aiohttp.ClientSession(timeout=timeout) as session:86+for sample in raw_samples:87+es_id = sample["id"]88+request_body = sample["request_body"]89+original_response = sample.get("original_response")90+91+if not original_response:92+skipped_no_response += 193+continue94+95+if min_size and len(json.dumps(request_body)) < min_size:96+skipped_too_small += 197+continue98+99+if self.SKIP_UNREPLAYABLE_ON_COLLECT:100+try:101+async with session.post(endpoint_url, json=request_body) as resp:102+if resp.status != 200:103+body_text = await resp.text()104+if "Cannot find activity" in body_text:105+skipped_unreplayable += 1106+continue107+except Exception:108+skipped_probe_errors += 1109+110+with open(self._inputs_dir / f"{es_id}.json", "w") as f:111+json.dump(request_body, f, indent=2)112+113+with open(self._ground_truths_dir / f"gt_{es_id}.json", "w") as f:114+json.dump(original_response, f, indent=2)115+116+samples.append(117+ {118+"id": es_id,119+"request_body": request_body,120+"original_response": original_response,121+"ground_truth": original_response,122+ }123+ )124+125+print(f"Wrote {len(samples)} samples to {self._inputs_dir.parent}")126+if skipped_no_response:127+print(f"Skipped {skipped_no_response} records with no response body")128+if skipped_too_small:129+print(130+f"Skipped {skipped_too_small} records whose request body was smaller "131+f"than {min_size} characters"132+ )133+if skipped_unreplayable:134+print(f"Skipped {skipped_unreplayable} records that are not replayable (missing activity in ES)")135+if skipped_probe_errors:136+print(f"Warning: replayability probe errored for {skipped_probe_errors} records (kept those records)")137+138+if self.__class__.POPULATE_GROUND_TRUTH_LLM:139+label_results = await run_endpoint_http(140+test_set=samples,141+endpoint_url=endpoint_url,142+request_model=self.REQUEST_MODEL,143+force_llm_endpoint=self.__class__.GROUND_TRUTH_LLM_ENDPOINT,144+is_streaming_response=self.IS_STREAMING_RESPONSE,145+timeout_seconds=300.0,146+parallel_requests=self.parallel_requests,147+return_prompt_in_run=self.RETURN_PROMPT_IN_RUN,148+ )149+150+for i, r in enumerate(label_results):151+forced = self.__class__.GROUND_TRUTH_LLM_ENDPOINT152+model = forced.split(":", 1)[1] if ":" in forced else forced153+samples[i]["ground_truth_llm_model"] = model154+155+if not r.get("success", True):156+samples[i]["ground_truth_llm"] = None157+samples[i]["ground_truth_llm_reasoning"] = None158+samples[i]["ground_truth_llm_error_type"] = r.get("error_type")159+samples[i]["ground_truth_llm_error_message"] = r.get("error_message")160+continue161+162+resp = r.get("new_response") or {}163+samples[i]["ground_truth_llm"] = resp.get("ai_activity_type")164+samples[i]["ground_truth_llm_reasoning"] = resp.get("ai_activity_type_reasoning")165+166+return samples167+168+async def _collect_from_files(self) -> List[Dict[str, Any]]:169+if not self._inputs_dir.exists():170+raise FileNotFoundError(171+f"Dataset folder not found: {self._inputs_dir}. "172+"Run --steps collect first or check your --data-set name."173+ )174+175+samples: List[Dict[str, Any]] = []176+for filename in sorted(os.listdir(self._inputs_dir)):177+input_path = self._inputs_dir / filename178+gt_path = self._ground_truths_dir / f"gt_{filename}"179+180+if not gt_path.exists():181+print(f"Warning: ground truth not found for {filename}, skipping")182+continue183+184+with open(input_path, "r") as f:185+request_body: Dict[str, Any] = json.load(f)186+187+with open(gt_path, "r") as f:188+ground_truth: Dict[str, Any] = json.load(f)189+190+samples.append(191+ {192+"id": Path(filename).stem,193+"request_body": request_body,194+"original_response": None,195+"ground_truth": ground_truth,196+ }197+ )198+199+print(f"Loaded {len(samples)} samples from {self._inputs_dir.parent}")200+return samples201+202+async def evaluate_against_ground_truth(self, results: List[Dict[str, Any]]) -> List[EvaluationResult]:203+evaluation_results: List[EvaluationResult] = []204+compare_to = self.__class__.COMPARE_TO_GROUND_TRUTH205+206+for res in results:207+req_id = res["request_id"]208+is_success = res.get("success", True)209+210+if not is_success:211+evaluation_results.append(212+EvaluationResult(213+request_id=req_id,214+request_body=res["request_body"],215+new_response=res.get("new_response"),216+valid_schema=False,217+quality_score=0.0,218+quality_feedback=f"Request failed: {res.get('error_type')} - {res.get('error_message')}",219+response_time=res.get("response_time"),220+success=False,221+error_type=res.get("error_type"),222+error_message=res.get("error_message"),223+ground_truth_match=False,224+ )225+ )226+continue227+228+pred = (res.get("new_response") or {}).get("ai_activity_type")229+230+if compare_to == "llm":231+if "ground_truth_llm" not in res:232+evaluation_results.append(233+EvaluationResult(234+request_id=req_id,235+request_body=res["request_body"],236+new_response=res.get("new_response"),237+valid_schema=res.get("valid_schema", True),238+quality_score=0.0,239+quality_feedback=(240+"Missing ground_truth_llm in run results. Ensure collect step populated it and "241+"endpoints.py passes it through."242+ ),243+response_time=res.get("response_time"),244+success=True,245+ground_truth_match=False,246+ )247+ )248+continue249+gt_label = res.get("ground_truth_llm")250+else:251+gt_path = self._ground_truths_dir / f"gt_{req_id}.json"252+if not gt_path.exists():253+evaluation_results.append(254+EvaluationResult(255+request_id=req_id,256+request_body=res["request_body"],257+new_response=res.get("new_response"),258+valid_schema=res.get("valid_schema", True),259+quality_score=0.0,260+quality_feedback=f"Ground truth file not found: {gt_path}",261+response_time=res.get("response_time"),262+success=True,263+ground_truth_match=False,264+ )265+ )266+continue267+268+with open(gt_path, "r") as f:269+ground_truth_dict: Dict[str, Any] = json.load(f)270+271+gt_label = (ground_truth_dict or {}).get("ai_activity_type")272+273+matched = pred == gt_label274+275+evaluation_results.append(276+EvaluationResult(277+request_id=req_id,278+request_body=res["request_body"],279+new_response=res.get("new_response"),280+valid_schema=res.get("valid_schema", True),281+quality_score=1.0 if matched else 0.0,282+quality_feedback="PASS" if matched else f"FAIL\nExpected: {gt_label}\nGot: {pred}",283+response_time=res.get("response_time"),284+success=True,285+ground_truth_match=matched,286+ )287+ )288+289+return evaluation_results290+291+292+if __name__ == "__main__":293+parser = create_parser(AiActivityTypeEvaluator)294+parser.add_argument(295+"--data-set",296+type=str,297+default="initial",298+dest="data_set",299+help="Dataset folder under eval_output/ai_activity_type/eval_datasets/ (default: initial)",300+ )301+302+parser.add_argument(303+"--populate-ground-truth-llm",304+action="store_true",305+dest="populate_ground_truth_llm",306+ )307+parser.add_argument(308+"--ground-truth-llm-endpoint",309+type=str,310+default="OPENAI:gpt-5_2",311+dest="ground_truth_llm_endpoint",312+ )313+314+parser.add_argument(315+"--compare-to-ground-truth",316+type=str,317+choices=["es", "llm"],318+default="es",319+dest="compare_to_ground_truth",320+ )321+322+args = parser.parse_args()323+AiActivityTypeEvaluator.DATA_SET = args.data_set324+325+AiActivityTypeEvaluator.POPULATE_GROUND_TRUTH_LLM = bool(args.populate_ground_truth_llm)326+AiActivityTypeEvaluator.GROUND_TRUTH_LLM_ENDPOINT = args.ground_truth_llm_endpoint327+328+AiActivityTypeEvaluator.COMPARE_TO_GROUND_TRUTH = args.compare_to_ground_truth329+330+asyncio.run(run_evaluation(AiActivityTypeEvaluator, args))</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show more options
Gemini said
Gemini said
This Python script defines the
AiActivityTypeEvaluator
class, a specialized tool for evaluating AI-driven activity type classification. It extends a base evaluation framework to handle data collection, ground-truth comparison, and performance scoring.
Core Functionality
Core Functionality
Data Collection (
collect_test_set
):
* Supports fetching raw samples from
Elasticsearch (ES)
or loading them from
local JSON files
.
Implements a
replayability check
: It probes the live API endpoint to ensure the activity exists before including it in the dataset.
Filters data based on request body size, language, and the presence of an original response.
Ground Truth Management:
Saves inputs and "gold standard" responses to a local directory structure (
eval_output/ai_activity_type/...
).
Features an optional mode to populate ground truth using a high-order LLM (e.g.,
gpt-5_2
) if the
POPULATE_GROUND_TRUTH_LLM
flag is set.
Evaluation Logic (
evaluate_against_ground_truth
):
Compares the model's predicted
ai_activity_type
against either the original ES response or the LLM-generated ground truth.
Assigns a
quality_score
of
1.0
for a match and
0.0
for a mismatch or request failure.
Key Configuration Constants
Key Configuration Constants
Constant
Purpose
ENDPOINT_PATH
The specific API route being tested:
call/ai-activity-type
.
COMPARE_TO_GROUND_TRUTH
Determines if the baseline is the original data (
es
) or an
llm
.
SKIP_UNREPLAYABLE_ON_COLLECT
If
True
, discards records where the API returns "Cannot find activity."
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Limits the probe request to 20 seconds.
Constant
ENDPOINT_PATH
COMPARE_TO_GROUND_TRUTH
SKIP_UNREPLAYABLE_ON_COLLECT
REPLAYABILITY_CHECK_TIMEOUT_SECONDS
Purpose
The specific API route being tested:
call/ai-activity-type
.
Determines if the baseline is the original data (
es
) or an
llm
.
If
True
, discards records where the API returns "Cannot find activity."
Limits the probe request to 20 seconds.
Copy table
Execution Workflow
Execution Workflow
Parsing:
The script uses
create_parser
to handle CLI arguments like
--data-set
,
--populate-ground-truth-llm
, and
--compare-to-ground-truth
.
Initialization:
Sets up directory paths for inputs and ground truths based on the selected dataset name.
Run:
Executes the evaluation via
asyncio.run(run_evaluation(...))
, which orchestrates the collection, endpoint calling, and result scoring phases.
Copy prompt
Edit
You said are there soem issues with this PR
You said
are there soem issues with this PR
Listen
Show more options
Show thinking
Gemini said
Gemini said
Yes, there are several issues and code smells in this Pull Request, ranging from performance bottlenecks to architectural anti-patterns.
Here is a breakdown of the most notable issues, categorized by impact:
Performance & Async Anti-Patterns
Performance & Async Anti-Patterns
Sequential Requests Defeating Async (Lines 86-106):
Inside
_collect_from_es
, the code loops through
raw_samples
and
await
s a
session.post
request for each sample one by one. This means the script waits for one HTTP request to finish before starting the next, completely defeating the purpose of using
aiohttp
for asynchronous concurrency.
Fix:
Collect these coroutines into a list and use
asyncio.gather()...
|
Firefox
|
Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminn Inbox (1,540) - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
mail.google.com/mail/u/0/#inbox
|
8651
|
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpapp.staging.jiminny.com/ai-reports/pdf/e2f4890a-d097-495b-8dfd-d4c25a5e8843~ Google Gemini1of 3< 40 ll • | Daily - Platform • 7m leftA * 100%C# &• Tue 14 Apr 9:58:25- | + Automatic Zoom~Platform Sprint 1 Q2 - Platform Tea@ Jy 19798 evaluation for ai activity tg Ask Jiminny test report - 8 Apr XM Inbox (1,540) - lukas.kovalik@jimir+ New labsocc ce Cdcseciie3.Run: Executes the evaluation viaasyncio.run(run_evaluation(...)),which orchestrates the collection,endpoint calling, and result scoringoeses.are there soem issueswith this PRShow thinking vYes, there are several issues and code smellsin this Pull Request, ranging from performancebottlenecks to architectural anti-patterns.Here is a breakdown of the most notableissues, categorized by impact:Performance & Async Anti-Patterns• Sequential Requests Defeating Async(Lines 86-106): Inside_collect_from_es, the code loopsthrough raw_samples and await sasession.post request for each sampleone by one. This means the script waitsfor one HTTP request to finish beforestarting the next, completely defeatingthe purpose of using aiohttp forasynchronous concurrency.• Fix: Collect these coroutines into alist and use asyncio.gather ()(ideally wrapped in anasyncio.Semaphore to avoidoverwhelming the endpoint) to run• Enter a prompt for GeminiAsk Jiminny Test Report8 Apr 2026ProvYour Jiminny chats aren't used to improve our models. Gemini is Alane can make mistakes, Inciualne aoout peodleYour privacy & GeminiSummarize pageJIMINNY...
|
NULL
|
NULL
|
NULL
|
8650
|
|
DiaFilelEditViewTabsBookmarksHistoryExtensionsWind DiaFilelEditViewTabsBookmarksHistoryExtensionsWindowHelpmeet.google.com / Daily - PlatformNikolay Yankov (Presenting)SInbox (2)SRD-677XC Jy 19798(7 Service-oi Font. AmrCostI Clhttps://jiminny.atlassian.net/jira/software/c/projects/JY/boards/377selectedissue=Jy-18909• Siminm0 ProjectsEI AWSE3 SSHEl DatadogPlatform TeamQ Search board800$ Jy-19240 / [ JY-18900READY FOR DEV 1Subtasks|ooeeheTxWirtexceed Fontawesomepackage limitsMAINTENANCISReady for Dev©-20564 1 П ****=PrioritySto.....8 JY-20574 [AI) Ensure PDF formatting is good= Medium% JY-20582 (BE+AI+Infra] Create new queue= Medium% JY-20586 [QA] Manual Testing= Medium% JY-20626 Integration testing= MediumLinked work itemsis cioned byA JY-20458 CRUD reports with Ask. JiminnyJY-20849 Generate Ask Jiminny Report and display it in AI ReportsJY-20656 Expired Ask Jiminny report template is automatically disabled an..O Jy-20060 non-creator cannos ocieue generated ask Jiminny reportwrom A.JY-20651 Generated Ask Jiminny Report PDF displays Jiminny logo when n.….JY-20655 Generated Ask Jiminny Report email is sent to recipientsJY-20854 Generated Ask Jiminny Report is visible only to creator and shar...• JY-20650 Generated Ask Jiminny Report PDF includes branding, report se.•**-77% DoneAiwneeSteliyan...it Steliyan ...IN DEVIN DEV SAnellya A...READY FOR DEVS8 Unassign...KAUTPOKOYDEPLOYEDDONEM.DONEDONE MDONEDONE MDONEActions9:58 AM | Daily - Platform> 0.Daily - Platform • 7 m left8•CE: DepeDependol• Far DepeD Tasks7 Insights & Coachin• Del0ux.© 2XZ Improve Story~ DetailsAssignee32 Stellyan GeorgievAsentoeReporter2 Galya DimitrovaDevelopmentO Open with VS Code3 branches32 commits1 pull request1 build failingRelessesProduction7 See all deploymentsComponentsPlatformSub-ProductAooton5 days agcUrEhGroup: QueriesDEPLOY &fix connume ouring tcleature fiag reieaseDeployed0E -20585 15 + ****=AI Review - Q1CTNIHEMANTANORCODeployed_19082|1 • •***=No such column "Type' onentty 'Event"PLATTORM STABTUTTYDeployed8 -20384 05 11 ****=Missed deletion of stale0 -400034.9000(Pipedrive) DI > status notlabeled, date data missingREDUCE CHURNNDeployed0 -20614 05 П ****=:D Al BookmarksStefka StoyanovaSteliyan GeorgievKovalik13:018 • Tue 14 Apr 9:58:25ChatNikolay YankovNikolay Ivanov...
|
NULL
|
NULL
|
NULL
|
8649
|