diff --git a/.github/workflows/ci-backend.yml b/.github/workflows/ci-backend.yml index a3560ec5aea42..3a882b030012f 100644 --- a/.github/workflows/ci-backend.yml +++ b/.github/workflows/ci-backend.yml @@ -245,8 +245,20 @@ jobs: person-on-events: false clickhouse-server-image: 'clickhouse/clickhouse-server:23.12.6.19' python-version: '3.11.9' - concurrency: 1 + concurrency: 3 group: 1 + - segment: 'Temporal' + person-on-events: false + clickhouse-server-image: 'clickhouse/clickhouse-server:23.12.6.19' + python-version: '3.11.9' + concurrency: 3 + group: 2 + - segment: 'Temporal' + person-on-events: false + clickhouse-server-image: 'clickhouse/clickhouse-server:23.12.6.19' + python-version: '3.11.9' + concurrency: 3 + group: 3 steps: # The first step is the only one that should run if `needs.changes.outputs.backend == 'false'`. diff --git a/.test_durations b/.test_durations index b4abda5726bf3..1b633fb941fd7 100644 --- a/.test_durations +++ b/.test_durations @@ -344,349 +344,6 @@ "posthog/tasks/test/test_check_clickhouse_schema_drift.py::test_check_clickhouse_schema_drift_with_drift": 0.0015845119999085, "posthog/tasks/test/test_check_clickhouse_schema_drift.py::test_check_clickhouse_schema_drift_without_drift": 0.001685240000028898, "posthog/tasks/test/test_check_clickhouse_schema_drift.py::test_get_clickhouse_schema_drift": 0.0013514149998172797, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow": 10.292407731000026, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_fails_when_schedule_deleted": 15.964849461999961, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_fails_when_schedule_deleted_after_running": 4.981706163000013, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_no_end_at": 3.562440150000043, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at0-end_at0-step0-expected0]": 0.01690257199993539, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at1-end_at1-step1-expected1]": 0.011926281999990351, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at2-end_at2-step2-expected2]": 0.012296583000079409, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at3-end_at3-step3-expected3]": 0.013560831999939182, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_schedule_activity": 10.34647553600007, - "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_get_schedule_frequency": 1.0351820969999608, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_binds_activity_context[activity_environment0]": 0.015138239999942016, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_binds_activity_context[activity_environment1]": 0.014095781000037277, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_binds_context": 0.015654002000133005, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_formats_positional_args": 0.012765827000066565, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_puts_in_queue[activity_environment0]": 0.06183065700008683, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_puts_in_queue[activity_environment1]": 0.06147200099997008, - "posthog/temporal/tests/batch_exports/test_run_updates.py::test_finish_batch_export_run": 0.9063133599998991, - "posthog/temporal/tests/batch_exports/test_run_updates.py::test_start_batch_export_run": 0.8183217390001118, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs0-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.010806901000023572, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs1-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.011144656999931613, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs10-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.009671390000050906, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs11-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.01110310199999276, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs12-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.gz]": 0.014032022000037614, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs13-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.br]": 0.011836863999974412, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs14-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet.sz]": 0.0104175260000261, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs15-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet]": 0.009945421999987047, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs16-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet.gz]": 0.011846324999964963, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs17-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet.br]": 0.010056374999919626, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs2-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.gz]": 0.014028388999918207, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs3-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.br]": 0.00989006699995798, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs4-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.011361444999977266, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs5-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.010177876000000197, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs6-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.gz]": 0.010474272999999812, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs7-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.br]": 0.009758096999973986, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs8-my-fancy-prefix-with-a-forwardslash/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.010592891000044347, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs9-my-fancy-prefix-with-a-forwardslash/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.009617079000008744, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_heartbeats": 0.827966215999993, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_defaults_to_timestamp_on_null_inserted_at": 0.9257406560000163, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_handles_cancellation": 5.224087549999979, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_handles_insert_activity_errors": 0.26658238200002415, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_handles_insert_activity_non_retryable_errors": 0.2313431610000407, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_a_lot_of_data": 41.80885684399999, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[posthog-{table}/{hour}:{minute}:{second}/{year}-{month}-{day}]": 0.6001721350000366, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[posthog-{table}/{hour}:{minute}:{second}]": 0.5289125729999569, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[posthog-{table}/{year}-{month}-{day}/{hour}:{minute}:{second}]": 0.5342149009999844, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[posthog/{year}-{month}-{day}/{hour}:{minute}:{second}]": 0.521243448000007, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[{year}-{month}-{day}]": 0.5208314039999777, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-None-day]": 0.0001978519999852324, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-None-every 5 minutes]": 0.00025565099997493235, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-None-hour]": 0.00020370400000047084, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-brotli-day]": 0.00019975600002908322, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-brotli-every 5 minutes]": 0.00020008600000664956, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-brotli-hour]": 0.00020788000000493412, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-gzip-day]": 0.00020005599998285106, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-gzip-every 5 minutes]": 0.00019758100000899503, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-gzip-hour]": 0.0002379769999834025, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-None-day]": 0.0002380869999569768, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-None-every 5 minutes]": 0.00020368399998460518, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-None-hour]": 0.0009867149999536196, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-brotli-day]": 0.0002885619999233313, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.0002094540000143752, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-brotli-hour]": 0.00020023699994453636, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-gzip-day]": 0.00019953499997882318, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-gzip-every 5 minutes]": 0.00019881300005408775, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-gzip-hour]": 0.00020202000001745546, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-None-day]": 0.0002539779999892744, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-None-every 5 minutes]": 0.0002444490000357291, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-None-hour]": 0.0002484969999727582, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-brotli-day]": 0.00020121700003983278, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-brotli-every 5 minutes]": 0.00020374300004277757, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-brotli-hour]": 0.0002823510000098395, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-gzip-day]": 0.0002569930000504428, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-gzip-every 5 minutes]": 0.00021925300001157666, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-gzip-hour]": 0.00025335600003018044, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-None-day]": 0.00020737899995992848, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-None-every 5 minutes]": 0.00019920500000125685, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-None-hour]": 0.00019794199999978446, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-brotli-day]": 0.00019595800000615782, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-brotli-every 5 minutes]": 0.0002000359999669854, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-brotli-hour]": 0.00019979600000397113, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-gzip-day]": 0.0002552789999867855, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-gzip-every 5 minutes]": 0.00019940499998938321, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-gzip-hour]": 0.00020760100005645654, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-None-day]": 0.00019779199999447883, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-None-every 5 minutes]": 0.00019733999999971275, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-None-hour]": 0.00020088699994857961, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-brotli-day]": 0.00019810200006986634, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-brotli-every 5 minutes]": 0.0002015179999261818, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-brotli-hour]": 0.00019730000002482484, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-gzip-day]": 0.00020835200001556586, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-gzip-every 5 minutes]": 0.0002595380000229852, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-gzip-hour]": 0.0002011180000067725, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-None-day]": 0.00019681100002344465, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.0002042249999476553, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-None-hour]": 0.00019864299997607304, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-brotli-day]": 0.00019566799994663597, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00022168600003169558, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-brotli-hour]": 0.00019490599999016922, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-gzip-day]": 0.0001974310000036894, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.000194754999995439, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-gzip-hour]": 0.00025522900000396476, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-None-day]": 0.00020776100001285158, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-None-every 5 minutes]": 0.00020521699997289033, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-None-hour]": 0.00020619800000076793, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-brotli-day]": 0.00020602699999017204, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-brotli-every 5 minutes]": 0.000202140000055806, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-brotli-hour]": 0.00020332200000439116, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-gzip-day]": 0.00021184700005960622, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-gzip-every 5 minutes]": 0.0002827110000112043, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-None-gzip-hour]": 0.00020787099998642589, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-None-day]": 0.00020750999999563646, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-None-every 5 minutes]": 0.0002061870000034105, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-None-hour]": 0.000203332000012324, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-brotli-day]": 0.0002253539999514942, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.00020360299998856135, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-brotli-hour]": 0.00020299200002682483, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-gzip-day]": 0.00020364199991718124, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-gzip-every 5 minutes]": 0.00020223000001351465, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-AES256-exclude_events1-gzip-hour]": 0.0002651180000157183, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-None-day]": 0.00020349099997929443, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-None-every 5 minutes]": 0.00026855400000158625, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-None-hour]": 0.00020429300002433592, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-brotli-day]": 0.00020680800002992328, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-brotli-every 5 minutes]": 0.00020539600001256986, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-brotli-hour]": 0.0002054459999953906, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-gzip-day]": 0.00020238099995140146, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-gzip-every 5 minutes]": 0.0002160660000072312, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-None-gzip-hour]": 0.00020948399998133027, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-None-day]": 0.0002238809999539626, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-None-every 5 minutes]": 0.00021021500003826077, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-None-hour]": 0.000267351999980292, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-brotli-day]": 0.00028681899993898696, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-brotli-every 5 minutes]": 0.0002094939999892631, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-brotli-hour]": 0.00020553599995309924, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-gzip-day]": 0.00020676799999819195, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-gzip-every 5 minutes]": 0.00020801099998379868, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-None-exclude_events1-gzip-hour]": 0.00020372299997006849, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-None-day]": 0.0002651890000038293, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-None-every 5 minutes]": 0.00020336199997927906, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-None-hour]": 0.00020385400000577647, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-brotli-day]": 0.00020134900006496537, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-brotli-every 5 minutes]": 0.0002682440000398856, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-brotli-hour]": 0.00020496600001251863, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-gzip-day]": 0.000209594000011748, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-gzip-every 5 minutes]": 0.00022270899995646687, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-None-gzip-hour]": 0.0002036529999713821, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-None-day]": 0.00021021399999199275, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.00020232000002806672, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-None-hour]": 0.00020618699994656708, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-brotli-day]": 0.00021397299997261143, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.0002077999999983149, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-brotli-hour]": 0.0007814089999556018, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-gzip-day]": 0.00020072699999218457, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.00020286200003738486, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema0-None-aws:kms-exclude_events1-gzip-hour]": 0.00020170900000948677, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-None-day]": 0.00022187700000131372, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-None-every 5 minutes]": 0.00023549200000161363, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-None-hour]": 0.00025769500001615597, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-brotli-day]": 0.000260668999999325, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-brotli-every 5 minutes]": 0.00020131799999489886, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-brotli-hour]": 0.00020000600000003033, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-gzip-day]": 0.00019973600001321756, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-gzip-every 5 minutes]": 0.00019928500000787608, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-None-gzip-hour]": 0.00019934499999862965, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-None-day]": 0.0002864690000023984, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-None-every 5 minutes]": 0.00026827399994999723, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-None-hour]": 0.00020084700003053513, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-brotli-day]": 0.0002476150000347843, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.00024293699993904738, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-brotli-hour]": 0.00024595199994337236, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-gzip-day]": 0.00028118799997400856, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-gzip-every 5 minutes]": 0.0003221059999987119, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-AES256-exclude_events1-gzip-hour]": 0.0002558509999630587, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-None-day]": 0.00020957399999588233, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-None-every 5 minutes]": 0.00020227000004524598, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-None-hour]": 0.0002062570000020969, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-brotli-day]": 0.00020155900000418114, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-brotli-every 5 minutes]": 0.0002040839999608579, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-brotli-hour]": 0.00020336200003612248, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-gzip-day]": 0.00026346499998908257, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-gzip-every 5 minutes]": 0.0002030900000136171, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-None-gzip-hour]": 0.00023422100002790103, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-None-day]": 0.0002158249999411055, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-None-every 5 minutes]": 0.00026077899997289933, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-None-hour]": 0.00024685400006774216, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-brotli-day]": 0.00020064699998556534, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-brotli-every 5 minutes]": 0.00020139800000151808, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-brotli-hour]": 0.00020290099996600475, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-gzip-day]": 0.0001997150000079273, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-gzip-every 5 minutes]": 0.0002671709999617633, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-None-exclude_events1-gzip-hour]": 0.00020342200002687605, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-None-day]": 0.0002432879999787474, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-None-every 5 minutes]": 0.00024446899999475136, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-None-hour]": 0.0002487069999688174, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-brotli-day]": 0.0002464120000240655, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-brotli-every 5 minutes]": 0.00025685200000680197, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-brotli-hour]": 0.00024361700002373254, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-gzip-day]": 0.00024715400002151, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-gzip-every 5 minutes]": 0.0002507020000166449, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-None-gzip-hour]": 0.0003596560000005411, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-None-day]": 0.00033167399999456393, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.00025030099999412414, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-None-hour]": 0.0003140800000664967, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-brotli-day]": 0.00024766500001760505, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.0003235779999499755, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-brotli-hour]": 0.0002553000000489192, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-gzip-day]": 0.000245041000027868, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.0002898550000054456, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-batch_export_schema1-None-aws:kms-exclude_events1-gzip-hour]": 0.00024330600001576386, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-None-day]": 0.0004297369999903822, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-None-every 5 minutes]": 0.00027608000004875066, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-brotli-day]": 0.0002083230000380354, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-brotli-every 5 minutes]": 0.00020832199999176737, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-brotli-hour]": 0.0002069589999678101, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-gzip-day]": 0.00021200899999485046, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-gzip-every 5 minutes]": 0.00021247899996978958, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-gzip-hour]": 0.0002597380000111116, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-None-day]": 0.00020270099997787838, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.0002141719999713132, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-None-hour]": 0.0002046040000323046, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-brotli-day]": 0.00020265099999505765, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.0002110069999616826, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-brotli-hour]": 0.0002057270000364042, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-gzip-day]": 0.0002739539999652152, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.00020485600003894433, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-gzip-hour]": 0.00020503500002178043, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_heartbeats": 0.0002712790000032328, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[None-None]": 0.00020410399997672357, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[None-exclude_events1]": 0.0002028199999131175, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[batch_export_schema0-None]": 0.00027633899992451916, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[batch_export_schema0-exclude_events1]": 0.00023972000008143368, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[batch_export_schema1-None]": 0.0002336579999564492, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[batch_export_schema1-exclude_events1]": 0.00021662599999672238, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-None-day]": 0.00020055700008470012, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-None-hour]": 0.00020172899996850902, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-exclude_events1-day]": 0.00020469499997943785, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-exclude_events1-hour]": 0.0002122980000649477, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema0-None-day]": 0.0002511510000431372, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema0-None-hour]": 0.0002028410000320946, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema0-exclude_events1-day]": 0.0002658890000475367, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema0-exclude_events1-hour]": 0.0018403960000341613, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema1-None-day]": 0.00020884299999579525, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema1-None-hour]": 0.00024654200001350546, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema1-exclude_events1-day]": 0.000202982000018892, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[batch_export_schema1-exclude_events1-hour]": 0.0002190210000208026, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_exports_events[day]": 2.296894346999977, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_exports_events[hour]": 2.293334077000054, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_cancellation": 0.00019983499998943444, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_cancellation_mocked": 5.223303879000014, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_insert_activity_errors": 0.24601918799999112, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_insert_activity_non_retryable_errors": 0.2529892630000177, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_raises_error_on_copy_fail": 20.506388711999932, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_raises_error_on_put_fail": 10.474501169000064, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-None-day]": 0.00021320099995136843, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-None-hour]": 0.00020735999999033083, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-exclude_events1-day]": 0.00019923299998936272, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-exclude_events1-hour]": 0.00020355200001631601, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema0-None-day]": 0.00020373300003484474, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema0-None-hour]": 0.0002111070000410109, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema0-exclude_events1-day]": 0.00020557599998483056, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema0-exclude_events1-hour]": 0.00020047599991812604, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema1-None-day]": 0.00020357099992907024, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema1-None-hour]": 0.00021041499996954371, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema1-exclude_events1-day]": 0.0002027610000823188, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[batch_export_schema1-exclude_events1-hour]": 0.000292940000008457, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_without_events[day]": 0.2497988960000157, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_without_events[hour]": 0.24095065400001658, - "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_heartbeat_details_parses_from_tuple[details0]": 0.012829431999989538, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write0]": 0.01438858500000606, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write1]": 0.013728219999961766, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write2]": 0.0129131230000894, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write3]": 0.011312814999882903, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write4]": 0.012400543000126163, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write5]": 0.011658755000098608, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_csv[records0]": 0.011353202000009333, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_csv[records1]": 0.012316478000116149, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_jsonl[records0]": 0.01193024700000933, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_jsonl[records1]": 0.011533734000067852, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_jsonl_invalid_unicode": 0.01208799200003341, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_tsv[records0]": 0.01307112900019547, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_tsv[records1]": 0.012739603999989413, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_csv_writer_writes_record_batches[record_batch0]": 0.011573337999948308, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_flushing_parquet_writer_resets_underlying_file[record_batch0]": 0.01311032699993575, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_jsonl_writer_writes_record_batches[record_batch0]": 0.015687524000099984, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_parquet_writer_writes_record_batches[record_batch0]": 0.025229676000094514, - "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_writing_out_of_scope_of_temporary_file_raises[record_batch0]": 0.012471018000042022, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_create_external_job_activity": 0.9620034760000635, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_create_external_job_activity_schemas_exist": 0.9223716660000036, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_create_external_job_activity_update_schemas": 0.9695932310000899, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_create_schema_activity": 1.0103307460000224, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_external_data_job_workflow_blank": 1.090781475999961, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_external_data_job_workflow_with_schema": 1.438901466999937, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_run_postgres_job": 2.6224233880000156, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_run_stripe_job": 3.3541348629998993, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_run_stripe_job_cancelled": 1.529545422999945, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_run_stripe_job_row_count_update": 1.5973113909999483, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_update_external_job_activity": 0.9285814659999687, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_validate_schema_and_update_table_activity": 1.0240615350001008, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_validate_schema_and_update_table_activity_half_run": 1.0180848649999916, - "posthog/temporal/tests/external_data/test_external_data_job.py::test_validate_schema_and_update_table_activity_with_existing": 1.470675808999772, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_person_distinct_id_overrides_join_table": 5.081714898999962, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_person_distinct_id_overrides_join_with_newer_overrides_after_create": 5.070420972999841, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_person_distinct_id_overrides_join_with_older_overrides_present": 0.17147195799987003, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_wait_and_drop_table": 5.05709619799984, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_delete_person_overrides_mutation": 5.435560273999954, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_delete_person_overrides_mutation_within_grace_period": 5.444926676000023, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_delete_squashed_person_overrides_from_clickhouse_dry_run": 10.338184107000188, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_parse_empty_mutation_counts": 0.11595565700008592, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_squash_person_overrides_workflow": 5.803186683000149, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_squash_person_overrides_workflow_with_limited_team_ids": 0.7487980719999996, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_squash_person_overrides_workflow_with_newer_overrides": 0.812512020999975, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation": 0.3204058470000746, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_dry_run": 0.20793869700003142, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_with_limited_team_ids": 0.3221017930001153, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_with_newer_overrides": 0.44863285500002803, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_with_older_overrides": 0.3204548359999535, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs0-expected0]": 0.15584378399989873, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs1-expected1]": 0.04614855800002715, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs2-expected2]": 0.048124492999932045, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs3-expected3]": 0.04797831899998073, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs4-expected4]": 0.04909213799999179, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs0-expected0]": 0.046199872000102005, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs1-expected1]": 0.045779895000009674, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs2-expected2]": 0.04550408700004027, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs3-expected3]": 0.051021674000025996, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs4-expected4]": 0.05703461600000992, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs5-expected5]": 0.046022488999938105, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs6-expected6]": 0.04557420900005127, - "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs7-expected7]": 0.045708342000011726, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data['-'\\'']": 0.0012663349999684215, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[-'']": 0.0011250499999277963, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[\\\\-'\\\\']": 0.0011903719998827, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[a'\\\\b\\\\'c-'a\\'\\\\b\\\\\\'c']": 0.0012621570000419524, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data0-'c4c5547d-8782-4017-8eca-3ea19f4d528e']": 0.0014161460001105297, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data10-toDateTime('2023-07-14 00:00:00', 'UTC')]": 0.001149175000023206, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data11-toDateTime('2023-07-14 00:00:00')]": 0.0011275250000153392, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data12-toDateTime64('2023-07-14 00:00:00.005555', 6, 'UTC')]": 0.0011327360000450426, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data6-('a',1,('b',2))]": 0.0011242790001233516, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data7-['a',1,['b',2]]]": 0.0011121160001721364, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data8-('; DROP TABLE events --')]": 0.001118349000080343, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data9-('\\'a\\'); DROP TABLE events --')]": 0.0011166640000510597, - "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[test-string-'test-string']": 0.001134567999997671, - "posthog/temporal/tests/test_encryption_codec.py::test_payloads_are_encrypted": 0.07414375200005452, "posthog/test/activity_logging/test_activity_logging.py::TestActivityLogModel::test_can_save_a_log_that_has_no_model_changes": 0.21304183499989904, "posthog/test/activity_logging/test_activity_logging.py::TestActivityLogModel::test_can_save_a_model_changed_activity_log": 0.0068463449999853765, "posthog/test/activity_logging/test_activity_logging.py::TestActivityLogModel::test_does_not_save_if_there_is_neither_a_team_id_nor_an_organisation_id": 0.004331150000098205, @@ -1751,386 +1408,1227 @@ "posthog/tasks/test/test_usage_report.py::TestSurveysUsageReport::test_usage_report_survey_responses": 3.198643786000048, "posthog/tasks/test/test_usage_report.py::UsageReport::test_unlicensed_usage_report": 5.951032942999973, "posthog/tasks/test/test_warehouse.py::TestWarehouse::test_check_synced_row_limits_of_team": 0.21824967200018364, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_data_interval[day-2023-08-01T00:00:00+00:00-expected1]": 0.03155673199989906, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_data_interval[hour-2023-08-01T00:00:00+00:00-expected0]": 0.03329995599983704, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_rows_count": 0.8873776360001102, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_rows_count_can_exclude_events": 0.4172756019997905, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_rows_count_can_include_events": 0.22743713500017293, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_rows_count_handles_duplicates": 0.036166425000146774, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_rows_count_ignores_timestamp_predicates": 0.18833247699990352, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records": 0.07202429599988136, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_can_exclude_events": 1.1487606989999222, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_can_flatten_properties": 0.06638811800030453, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_can_include_events": 1.1571610560001773, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_handles_duplicates": 0.06438210999999683, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_ignores_timestamp_predicates": 0.21619482200003404, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_uses_extra_query_parameters": 0.057177034999767784, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field0]": 0.057358543999953326, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field1]": 0.060142138999935923, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field2]": 0.05656927299992276, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field3]": 0.05681761899995763, - "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field4]": 0.05713659399975768, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-None-day]": 0.00020328200002950325, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-None-hour]": 0.00019887400003426592, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-exclude_events1-day]": 0.00019989499992334459, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-exclude_events1-hour]": 0.0002017100000557548, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-None-day]": 0.00019935500017709273, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-None-hour]": 0.00019801200005531427, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-exclude_events1-day]": 0.00020157899984951655, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-exclude_events1-hour]": 0.00026333499977226893, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-False-None-day]": 0.00021973200000502402, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-False-None-hour]": 0.00022752799986847094, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-False-exclude_events1-day]": 0.00020378199997139745, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-False-exclude_events1-hour]": 0.00021076600000924373, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-True-None-day]": 0.00020216999996591767, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-True-None-hour]": 0.00021721699999943667, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-True-exclude_events1-day]": 0.0002000459999180748, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema0-True-exclude_events1-hour]": 0.0002101239999774407, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-False-None-day]": 0.00020160999997642648, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-False-None-hour]": 0.00027148999993187317, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-False-exclude_events1-day]": 0.00020155900006102456, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-False-exclude_events1-hour]": 0.00020063699980710226, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-True-None-day]": 0.00020094799992875778, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-True-None-hour]": 0.00021170799982428434, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-True-exclude_events1-day]": 0.0002632850000736653, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[batch_export_schema1-True-exclude_events1-hour]": 0.000198573999796281, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_handles_cancellation": 0.00019770099993365875, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_handles_insert_activity_errors": 0.00020490499991865363, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_handles_insert_activity_non_retryable_errors": 0.00019868300000780437, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords0-expected_schema0]": 0.00019987599989690352, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords1-expected_schema1]": 0.00020241999982317793, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords2-expected_schema2]": 0.00029340099990804447, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords3-expected_schema3]": 0.00021043499987172254, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords4-expected_schema4]": 0.00020039600008203706, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords5-expected_schema5]": 0.0001992239999708545, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords6-expected_schema6]": 0.00019915399980163784, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords7-expected_schema7]": 0.0002000049998969189, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-False-None]": 0.00020135899990236794, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-False-exclude_events1]": 0.00019985600010841154, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-True-None]": 0.00022359100012181443, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-True-exclude_events1]": 0.00020189899987599347, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema0-False-None]": 0.00032655399991199374, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema0-False-exclude_events1]": 0.00029229899996607855, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema0-True-None]": 0.0002155250001578679, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema0-True-exclude_events1]": 0.00020892399993499566, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema1-False-None]": 0.00021826000011060387, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema1-False-exclude_events1]": 0.0003630819999216328, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema1-True-None]": 0.00024349700015591225, - "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[batch_export_schema1-True-exclude_events1]": 0.0002106670001467137, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[None-day]": 0.3387743490000048, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[None-hour]": 2.4338746890000493, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[exclude_events1-day]": 0.37597745199968813, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[exclude_events1-hour]": 0.36254445799977475, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow_handles_cancellation": 5.249861273000079, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow_handles_insert_activity_errors": 0.2763871129998279, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow_handles_insert_activity_non_retryable_errors": 0.26311523399999714, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_heartbeats": 0.5876375120001285, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_inserts_data_into_http_endpoint[None]": 1.3632343719998516, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_inserts_data_into_http_endpoint[exclude_events1]": 1.448870270000043, - "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_throws_on_bad_http_status": 0.1057495289999224, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_produces_to_kafka[activity_environment0]": 2.0502748579997387, - "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_produces_to_kafka[activity_environment1]": 1.6336696389998906, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[None-None]": 1.6144049090000863, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[None-exclude_events1]": 2.0832854909997423, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[batch_export_schema0-None]": 1.1557923439997921, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[batch_export_schema0-exclude_events1]": 1.1276491730000089, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[batch_export_schema1-None]": 1.1842296099998748, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[batch_export_schema1-exclude_events1]": 1.2025649619999967, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-None-day]": 0.47729342899992844, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-None-hour]": 0.44470229299986386, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-exclude_events1-day]": 0.46406340699991233, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-exclude_events1-hour]": 0.44986957400010397, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema0-None-day]": 0.43500177600003553, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema0-None-hour]": 0.4476820229997429, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema0-exclude_events1-day]": 0.4479830759999004, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema0-exclude_events1-hour]": 0.456206315999907, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema1-None-day]": 0.44122396800025854, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema1-None-hour]": 0.430553787000008, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema1-exclude_events1-day]": 0.45631930499985174, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[batch_export_schema1-exclude_events1-hour]": 0.46163162799985, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_handles_cancellation": 5.241237832999786, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_handles_insert_activity_errors": 0.2656815809998534, - "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_handles_insert_activity_non_retryable_errors": 0.2574132770000688, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[None-None]": 0.4754871669997556, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[None-exclude_events1]": 0.4758492749999732, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[batch_export_schema0-None]": 0.31083665300002394, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[batch_export_schema0-exclude_events1]": 0.33335566300024766, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[batch_export_schema1-None]": 0.3292215799999667, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[batch_export_schema1-exclude_events1]": 0.3331172000000606, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-None-day]": 0.4555026009998073, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-None-hour]": 0.44319368999981634, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-exclude_events1-day]": 0.45089339100013603, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-exclude_events1-hour]": 0.4557034399999793, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema0-None-day]": 0.42245313900025394, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema0-None-hour]": 0.4195623550001528, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema0-exclude_events1-day]": 0.427924202999975, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema0-exclude_events1-hour]": 0.4499689169999783, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema1-None-day]": 0.42250860699982695, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema1-None-hour]": 0.4255231820000063, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema1-exclude_events1-day]": 0.4636745959996915, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[batch_export_schema1-exclude_events1-hour]": 0.44630241099980594, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow_handles_insert_activity_errors": 0.2689389519996439, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow_handles_insert_activity_non_retryable_errors": 0.25382475100013835, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[hi\\t\\n\\r\\x0c\\x08hi-hi hi]": 0.03316788500023904, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value0-expected0]": 0.03577681100000518, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value2-expected2]": 0.03275835199974608, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value3-expected3]": 0.03130663999991157, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value4-expected4]": 0.030789539999886983, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value5-expected5]": 0.031801811999685015, - "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value6-expected6]": 0.03148304999990614, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-None-None]": 2.325898864999999, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-None-brotli]": 10.244689160999997, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-None-gzip]": 2.076674608999838, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-exclude_events1-None]": 1.7406697550002264, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-exclude_events1-brotli]": 10.225842745000136, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-exclude_events1-gzip]": 2.5651795839996794, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema0-None-None]": 1.1673992429998634, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema0-None-brotli]": 5.122857358000147, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema0-None-gzip]": 1.4134223019998444, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema0-exclude_events1-None]": 1.1371485419999772, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema0-exclude_events1-brotli]": 5.2002192340000875, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema0-exclude_events1-gzip]": 1.9196193820002918, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema1-None-None]": 1.0891739480002798, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema1-None-brotli]": 3.1342515279998224, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema1-None-gzip]": 1.3521976770000492, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema1-exclude_events1-None]": 1.1077674770001522, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema1-exclude_events1-brotli]": 3.090931944000431, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-batch_export_schema1-exclude_events1-gzip]": 1.3123611430000892, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-None-None]": 1.6982528720002392, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-None-brotli]": 1.7956036609998591, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-None-gzip]": 2.380103705000238, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-exclude_events1-None]": 1.737576336000302, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-exclude_events1-brotli]": 1.8345180229998732, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-exclude_events1-gzip]": 2.469915522000065, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema0-None-None]": 1.3352228989997457, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema0-None-brotli]": 1.221810031999894, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema0-None-gzip]": 1.256685619999871, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema0-exclude_events1-None]": 1.7720235550000325, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema0-exclude_events1-brotli]": 1.2249328090001654, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema0-exclude_events1-gzip]": 1.2238703429998168, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema1-None-None]": 1.1542490599999837, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema1-None-brotli]": 1.7748804950001613, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema1-None-gzip]": 1.1637849090000145, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema1-exclude_events1-None]": 1.180301947000089, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema1-exclude_events1-brotli]": 1.1976010999997015, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-batch_export_schema1-exclude_events1-gzip]": 1.1652342290001343, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-None-day]": 0.5611336509998637, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-None-hour]": 0.5563499719999072, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-brotli-day]": 0.6267723959999785, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-brotli-hour]": 1.317381824999984, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-gzip-day]": 0.5572579689999202, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-gzip-hour]": 0.5538598309999543, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-None-day]": 0.5904026210000666, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-None-hour]": 0.5926646069999606, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-brotli-day]": 0.6755323280003722, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-brotli-hour]": 0.6734970380000505, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-gzip-day]": 0.6501363670001865, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-gzip-hour]": 0.5748254329998872, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-None-None-day]": 0.6037107239999386, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-None-None-hour]": 0.5663201949996619, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-None-brotli-day]": 0.5730808240000442, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-None-brotli-hour]": 0.5717288179996558, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-None-gzip-day]": 0.5694518369998605, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-None-gzip-hour]": 0.5578514789999645, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-exclude_events1-None-day]": 0.5558187489998545, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-exclude_events1-None-hour]": 0.5477602749999733, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-exclude_events1-brotli-day]": 0.6045359259996985, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-exclude_events1-brotli-hour]": 0.6017190989998653, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-exclude_events1-gzip-day]": 0.5863952089998747, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema0-exclude_events1-gzip-hour]": 1.212857803000361, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-None-None-day]": 0.5387868440000148, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-None-None-hour]": 0.5471913160001804, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-None-brotli-day]": 0.5646224509998774, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-None-brotli-hour]": 0.5683719590001601, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-None-gzip-day]": 0.542011741999886, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-None-gzip-hour]": 0.5594293969998034, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-exclude_events1-None-day]": 0.5813775649999116, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-exclude_events1-None-hour]": 1.2525669840001683, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-exclude_events1-brotli-day]": 0.5794502700000521, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-exclude_events1-brotli-hour]": 0.5926054189999377, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-exclude_events1-gzip-day]": 0.5719758630000342, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-batch_export_schema1-exclude_events1-gzip-hour]": 0.5654027099999439, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-None-day]": 0.6865155329996924, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-None-hour]": 0.7004831719998492, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-brotli-day]": 0.7035022529998969, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-brotli-hour]": 1.429488425999807, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-gzip-day]": 0.7056211219999113, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-gzip-hour]": 0.6929205229998843, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-None-day]": 0.7314709629997651, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-None-hour]": 0.7325374489998921, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-brotli-day]": 0.80010599000002, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-brotli-hour]": 1.472295891000158, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-gzip-day]": 0.730104726000036, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-gzip-hour]": 0.7357787000000826, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-None-None-day]": 0.6919424959999105, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-None-None-hour]": 0.6982857240000158, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-None-brotli-day]": 0.7060720900001343, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-None-brotli-hour]": 1.3596561499998643, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-None-gzip-day]": 0.6874703820001287, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-None-gzip-hour]": 0.7055370720001974, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-exclude_events1-None-day]": 0.6967075020002085, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-exclude_events1-None-hour]": 0.7286580979996415, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-exclude_events1-brotli-day]": 0.6939036239998586, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-exclude_events1-brotli-hour]": 1.3558440100002827, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-exclude_events1-gzip-day]": 0.7069054719997894, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema0-exclude_events1-gzip-hour]": 0.7215619600001446, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-None-None-day]": 0.7263254339998184, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-None-None-hour]": 0.6932906319998438, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-None-brotli-day]": 0.661468356000114, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-None-brotli-hour]": 1.30057012400016, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-None-gzip-day]": 0.6630916090000483, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-None-gzip-hour]": 0.663160206999919, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-exclude_events1-None-day]": 0.6876621549999982, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-exclude_events1-None-hour]": 0.6906750269999975, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-exclude_events1-brotli-day]": 0.7096777390001989, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-exclude_events1-brotli-hour]": 1.4185416910002004, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-exclude_events1-gzip-day]": 0.6973243840000123, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-batch_export_schema1-exclude_events1-gzip-hour]": 0.6821212060001471, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-None-day]": 0.0001972100003513333, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-None-every 5 minutes]": 0.00020184899995001615, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-None-hour]": 0.00019653799995467125, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-brotli-day]": 0.00019735100022444385, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-brotli-every 5 minutes]": 0.00020471599987104128, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-brotli-hour]": 0.000197009999965303, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-gzip-day]": 0.00025885700028993597, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-gzip-every 5 minutes]": 0.0001999459998387465, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-gzip-hour]": 0.00020076699979654222, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-None-day]": 0.00019720100021913822, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-None-every 5 minutes]": 0.0002560309999353194, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-None-hour]": 0.0001975610000499728, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-brotli-day]": 0.00020322199998190627, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.00020145899998169625, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-brotli-hour]": 0.00022934999992685334, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-gzip-day]": 0.00019981499985988194, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-gzip-every 5 minutes]": 0.0002271559999371675, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-gzip-hour]": 0.000196990000176811, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-None-day]": 0.0002633349999996426, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-None-every 5 minutes]": 0.00023498199993809976, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-None-hour]": 0.00020192899978610512, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-brotli-day]": 0.00020045599990226037, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-brotli-every 5 minutes]": 0.00026194199995188683, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-brotli-hour]": 0.0001993439998386748, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-gzip-day]": 0.00020405300006132165, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-gzip-every 5 minutes]": 0.00020280199987610104, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-gzip-hour]": 0.00019859400003952032, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-None-day]": 0.0001966199999969831, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-None-every 5 minutes]": 0.00019715000007636263, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-None-hour]": 0.00019865299987031904, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-brotli-day]": 0.00020117799999752606, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-brotli-every 5 minutes]": 0.0001975620000393974, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-brotli-hour]": 0.00026021899975603446, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-gzip-day]": 0.0002037119998021808, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-gzip-every 5 minutes]": 0.0001994250001189357, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-gzip-hour]": 0.00019827300025099248, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-None-hour]": 0.9751823520000471, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-None-day]": 0.00020371300001897907, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-None-every 5 minutes]": 0.00021246900018923043, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-None-hour]": 0.0002050860000508692, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-brotli-day]": 0.00020652800003517768, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-brotli-every 5 minutes]": 0.00020635700025195547, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-brotli-hour]": 0.0002069179997761239, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-gzip-day]": 0.00023553400001219416, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-gzip-every 5 minutes]": 0.0002078410000194708, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-None-gzip-hour]": 0.0002385569998750725, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-None-day]": 0.00020434399993973784, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-None-every 5 minutes]": 0.00020391299995026202, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-None-hour]": 0.0002113279999775841, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-brotli-day]": 0.00020621800013032043, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.00020361299993965076, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-brotli-hour]": 0.00022424100006901426, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-gzip-day]": 0.00020602700010385888, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-gzip-every 5 minutes]": 0.0002069079998818779, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-AES256-exclude_events1-gzip-hour]": 0.00020118799989177205, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-None-day]": 0.00022083499993641453, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-None-every 5 minutes]": 0.00023449099990102695, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-None-hour]": 0.0003317829998650268, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-brotli-day]": 0.0002033119999396149, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-brotli-every 5 minutes]": 0.00020270099980734813, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-brotli-hour]": 0.00021092699989821995, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-gzip-day]": 0.00022199799991540203, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-gzip-every 5 minutes]": 0.00021379200006776955, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-None-gzip-hour]": 0.00021196800003053795, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-None-day]": 0.00022364099982041807, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-None-every 5 minutes]": 0.00020589700011441892, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-None-hour]": 0.00024008199989111745, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-brotli-day]": 0.00020709800014628854, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-brotli-every 5 minutes]": 0.00020644699998229044, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-brotli-hour]": 0.00021147799998288974, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-gzip-day]": 0.000209163000135959, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-gzip-every 5 minutes]": 0.00020461399981286377, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-None-exclude_events1-gzip-hour]": 0.00021363099972404598, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-None-day]": 0.00020291200007704902, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-None-every 5 minutes]": 0.00025052999990293756, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-None-hour]": 0.00020445400014068582, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-brotli-day]": 0.00020233999998708896, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-brotli-every 5 minutes]": 0.00022765800008528458, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-brotli-hour]": 0.00020266100000299048, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-gzip-day]": 0.0002046350000455277, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-gzip-every 5 minutes]": 0.000202972000124646, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-None-gzip-hour]": 0.0002050359998975182, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-None-day]": 0.0002080110000406421, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.00020527599986053247, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-None-hour]": 0.0002853669998330588, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-brotli-day]": 0.0004166529997746693, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00031708599999547005, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-brotli-hour]": 0.00020428299990271626, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-gzip-day]": 0.00020561599990287505, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.00020785000015166588, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema0-None-aws:kms-exclude_events1-gzip-hour]": 0.00020823200020458899, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-None-day]": 0.00022502399997392786, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-None-every 5 minutes]": 0.00020485499976530264, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-None-hour]": 0.00020071700009793858, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-brotli-day]": 0.00022247900005822885, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-brotli-every 5 minutes]": 0.00020825100023103005, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-brotli-hour]": 0.0002052449999609962, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-gzip-day]": 0.00020451399996090913, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-gzip-every 5 minutes]": 0.00020514600009846617, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-None-gzip-hour]": 0.00020656799983953533, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-None-day]": 0.00020332200006123458, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-None-every 5 minutes]": 0.00020345200005067454, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-None-hour]": 0.0002715790001275309, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-brotli-day]": 0.00026485700004741375, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.00020349200008240587, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-brotli-hour]": 0.00020002499991278455, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-gzip-day]": 0.0002100540000355977, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-gzip-every 5 minutes]": 0.00020322199998190627, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-AES256-exclude_events1-gzip-hour]": 0.00020559599988700938, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-None-day]": 0.00029091800001879164, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-None-every 5 minutes]": 0.00021383200009950087, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-None-hour]": 0.0002730129999690689, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-brotli-day]": 0.000210996000078012, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-brotli-every 5 minutes]": 0.00021066599992991542, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-brotli-hour]": 0.00024941000015132886, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-gzip-day]": 0.00020942400010426354, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-gzip-every 5 minutes]": 0.00327412199999344, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-None-gzip-hour]": 0.00021011599983467022, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-None-day]": 0.00020875199993497517, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-None-every 5 minutes]": 0.00020516600011433184, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-None-hour]": 0.00020700000004580943, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-brotli-day]": 0.00020656799983953533, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-brotli-every 5 minutes]": 0.000203032000172243, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-brotli-hour]": 0.000203022000277997, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-gzip-day]": 0.00022590500020669424, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-gzip-every 5 minutes]": 0.00021163800010981504, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-None-exclude_events1-gzip-hour]": 0.0002055150002888695, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-None-day]": 0.0002209440001479379, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-None-every 5 minutes]": 0.00020515500000328757, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-None-hour]": 0.00019854199990732013, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-brotli-day]": 0.00020502499978647393, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-brotli-every 5 minutes]": 0.00020128799997110036, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-brotli-hour]": 0.0002096640000672778, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-gzip-day]": 0.00020866099998784193, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-gzip-every 5 minutes]": 0.00027869399991686805, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-None-gzip-hour]": 0.00026182199985669286, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-None-day]": 0.0001997760000449489, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.00020200999983899237, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-None-hour]": 0.0001986629999919387, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-brotli-day]": 0.00019909399998141453, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00019687899998643843, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-brotli-hour]": 0.00019780100001298706, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-gzip-day]": 0.00020708900001409347, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.00019862299996020738, - "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-batch_export_schema1-None-aws:kms-exclude_events1-gzip-hour]": 0.00026009799989878957, + "posthog/temporal/data_imports/pipelines/sql_database/test/test_sql_database.py::test_get_column_hints_numeric_no_results": 0.0018367916345596313, + "posthog/temporal/data_imports/pipelines/sql_database/test/test_sql_database.py::test_get_column_hints_numeric_with_missing_scale_and_precision": 0.0014157076366245747, + "posthog/temporal/data_imports/pipelines/sql_database/test/test_sql_database.py::test_get_column_hints_numeric_with_no_numeric": 0.001423208974301815, + "posthog/temporal/data_imports/pipelines/sql_database/test/test_sql_database.py::test_get_column_hints_numeric_with_scale_and_precision": 0.0018554595299065113, + "posthog/temporal/data_imports/pipelines/test/test_pipeline.py::TestDataImportPipeline::test_pipeline_incremental": 3.1084591667167842, + "posthog/temporal/data_imports/pipelines/test/test_pipeline.py::TestDataImportPipeline::test_pipeline_non_incremental": 0.025830667465925217, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_adjust_bound_datetime_to_schedule_time_zone[bound_dt0-None-frequency0-expected0]": 0.0896311248652637, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_adjust_bound_datetime_to_schedule_time_zone[bound_dt1-None-frequency1-expected1]": 0.08088362589478493, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_adjust_bound_datetime_to_schedule_time_zone[bound_dt2-UTC-frequency2-expected2]": 0.0720550836995244, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_adjust_bound_datetime_to_schedule_time_zone[bound_dt3-Europe/Berlin-frequency3-expected3]": 0.06861875066533685, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_aware_batch_export_workflow_with_timezone_aware_bounds[Asia/Katmandu]": 13.650323917157948, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_aware_batch_export_workflow_with_timezone_aware_bounds[Asia/Tokyo]": 13.829388918355107, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_aware_batch_export_workflow_with_timezone_aware_bounds[Europe/Berlin]": 13.420448082033545, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_aware_batch_export_workflow_with_timezone_aware_bounds[Pacific/Marquesas]": 14.099319208879024, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_aware_batch_export_workflow_with_timezone_aware_bounds[US/Pacific]": 13.586014833766967, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_aware_batch_export_workflow_with_timezone_aware_bounds[UTC]": 13.588275083806366, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow": 15.010600960347801, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_fails_when_schedule_deleted": 1.3743774574249983, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_fails_when_schedule_deleted_after_running": 1.3616271680220962, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_is_cancelled_on_repeated_failures": 43.23523495765403, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_no_end_at": 5.269642875995487, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_batch_export_workflow_no_start_at": 4.570732666645199, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[None-end_at5-step5-expected5]": 0.08638870809227228, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at0-end_at0-step0-expected0]": 0.418461499735713, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at1-end_at1-step1-expected1]": 0.08804537635296583, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at2-end_at2-step2-expected2]": 0.09853254212066531, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at3-end_at3-step3-expected3]": 0.11106837401166558, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_range[start_at4-None-step4-expected4]": 0.0878240829333663, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_schedule_activity": 14.589261500164866, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_utc_batch_export_workflow_with_timezone_aware_bounds[Asia/Katmandu]": 14.620815831702203, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_utc_batch_export_workflow_with_timezone_aware_bounds[Asia/Tokyo]": 14.666418957989663, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_utc_batch_export_workflow_with_timezone_aware_bounds[Europe/Berlin]": 13.551783833652735, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_utc_batch_export_workflow_with_timezone_aware_bounds[Pacific/Marquesas]": 14.70072779012844, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_utc_batch_export_workflow_with_timezone_aware_bounds[US/Pacific]": 14.04716529045254, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_backfill_utc_batch_export_workflow_with_timezone_aware_bounds[UTC]": 14.579388209152967, + "posthog/temporal/tests/batch_exports/test_backfill_batch_export.py::test_get_schedule_frequency": 1.9745350838638842, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_batch_export_run_is_set_to_running": 0.44159345887601376, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_json_type_as_py[input0-expected0]": 0.07612841669470072, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_json_type_as_py[input1-expected1]": 0.05632475018501282, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_json_type_as_py[input2-expected2]": 0.06068829353898764, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_json_type_as_py[input3-expected3]": 0.06082037463784218, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_json_type_as_py[input4-expected4]": 0.07866587396711111, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_make_retryable_with_exponential_backoff_called_max_attempts": 4.097516166511923, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_make_retryable_with_exponential_backoff_called_max_attempts_if_func_returns_retryable": 4.10928445821628, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_make_retryable_with_exponential_backoff_called_max_attempts_if_timesout": 9.122839707881212, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_make_retryable_with_exponential_backoff_raises_if_func_returns_not_retryable": 0.06838929187506437, + "posthog/temporal/tests/batch_exports/test_batch_export_utils.py::test_make_retryable_with_exponential_backoff_raises_if_not_retryable": 0.06301916716620326, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_data_interval[day-2023-08-01T00:00:00+00:00-expected1]": 0.07389962440356612, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_get_data_interval[hour-2023-08-01T00:00:00+00:00-expected0]": 0.07329575018957257, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records": 0.3226477080024779, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_can_exclude_events": 1.0449165417812765, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_can_flatten_properties": 0.14104366581887007, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_can_include_events": 1.0001808749511838, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_handles_duplicates": 0.13514454197138548, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_ignores_timestamp_predicates": 0.2834269576705992, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_uses_extra_query_parameters": 0.12742358399555087, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field0]": 0.14313158299773932, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field1]": 0.1529365424066782, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field2]": 0.11818729201331735, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_iter_records_with_single_field_and_alias[field3]": 0.11676800018176436, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_raise_on_produce_task_failure_does_not_raise": 0.0826150830835104, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_raise_on_produce_task_failure_raises_record_batch_producer_error": 0.08223970886319876, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_raise_on_produce_task_failure_raises_task_not_done": 0.0844950838945806, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_record_batch_queue_raises_queue_full": 0.08126474916934967, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_record_batch_queue_sets_schema": 0.08911841688677669, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_record_batch_queue_tracks_bytes": 0.08606000104919076, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_can_exclude_events": 1.0046181259676814, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_can_flatten_properties": 0.22650549933314323, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_can_include_events": 0.9258446246385574, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_handles_duplicates": 0.23539995728060603, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_ignores_timestamp_predicates": 0.4959305417723954, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_uses_extra_query_parameters": 0.22422629175707698, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_with_single_field_and_alias[field0]": 0.2120839999988675, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_with_single_field_and_alias[field1]": 0.21941362507641315, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_with_single_field_and_alias[field2]": 0.21424166718497872, + "posthog/temporal/tests/batch_exports/test_batch_exports.py::test_start_produce_batch_export_record_batches_with_single_field_and_alias[field3]": 0.25417975010350347, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-None-day]": 7.962528616189957e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-None-hour]": 8.970871567726135e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-exclude_events1-day]": 7.50841572880745e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-False-exclude_events1-hour]": 7.77081586420536e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-None-day]": 7.800012826919556e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-None-hour]": 7.600011304020882e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-exclude_events1-day]": 0.00014870800077915192, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[None-True-exclude_events1-hour]": 9.295810014009476e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-False-None-day]": 7.379194721579552e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-False-None-hour]": 7.929187268018723e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-False-exclude_events1-day]": 0.0001687910407781601, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-False-exclude_events1-hour]": 0.00017537549138069153, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-True-None-day]": 0.00015979213640093803, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-True-None-hour]": 0.00024970807135105133, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-True-exclude_events1-day]": 0.0001610829494893551, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model0-True-exclude_events1-hour]": 0.000210499856621027, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-False-None-day]": 0.0007373332045972347, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-False-None-hour]": 0.00015291618183255196, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-False-exclude_events1-day]": 0.00014283321797847748, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-False-exclude_events1-hour]": 0.00014841696247458458, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-True-None-day]": 0.0001393742859363556, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-True-None-hour]": 0.00014304136857390404, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-True-exclude_events1-day]": 0.00013629067689180374, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model1-True-exclude_events1-hour]": 0.00013291696086525917, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-False-None-day]": 0.00020754151046276093, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-False-None-hour]": 0.00014066603034734726, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-False-exclude_events1-day]": 0.00013454211875796318, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-False-exclude_events1-hour]": 0.0001387498341500759, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-True-None-day]": 0.0001259571872651577, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-True-None-hour]": 0.0001238328404724598, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-True-exclude_events1-day]": 0.00011704163625836372, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model2-True-exclude_events1-hour]": 0.000153333880007267, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-False-None-day]": 0.00010258331894874573, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-False-None-hour]": 0.00017837528139352798, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-False-exclude_events1-day]": 7.529137656092644e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-False-exclude_events1-hour]": 8.7750144302845e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-True-None-day]": 7.458264008164406e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-True-None-hour]": 7.400009781122208e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-True-exclude_events1-day]": 0.00018974952399730682, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow[model3-True-exclude_events1-hour]": 9.091664105653763e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_backfill_earliest_persons[model0-True-hour-data_interval_start0]": 7.195910438895226e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_handles_cancellation": 7.012486457824707e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_handles_insert_activity_errors": 8.070794865489006e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_handles_insert_activity_non_retryable_errors": 7.38329254090786e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_without_events[None-None-hour]": 7.429253309965134e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_without_events[model0-None-hour]": 7.979199290275574e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_without_events[model1-None-hour]": 7.504178211092949e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_without_events[model2-None-hour]": 8.287513628602028e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_bigquery_export_workflow_without_events[model3-None-hour]": 7.524993270635605e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords0-expected_schema0]": 7.120845839381218e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords1-expected_schema1]": 7.354281842708588e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords2-expected_schema2]": 7.425015792250633e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords3-expected_schema3]": 7.22086988389492e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords4-expected_schema4]": 0.00011979090049862862, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords5-expected_schema5]": 9.074993431568146e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords6-expected_schema6]": 7.729185745120049e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_get_bigquery_fields_from_record_schema[pyrecords7-expected_schema7]": 7.583294063806534e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-False-None]": 0.00019529182463884354, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-False-exclude_events1]": 0.00010520918294787407, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-True-None]": 8.108280599117279e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[None-True-exclude_events1]": 7.649976760149002e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model0-False-None]": 0.0001527089625597, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model0-False-exclude_events1]": 8.541764691472054e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model0-True-None]": 0.0001139594241976738, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model0-True-exclude_events1]": 0.00015816697850823402, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model1-False-None]": 0.00011687399819493294, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model1-False-exclude_events1]": 0.00010154210031032562, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model1-True-None]": 7.812492549419403e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model1-True-exclude_events1]": 8.074985817074776e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model2-False-None]": 9.179208427667618e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model2-False-exclude_events1]": 7.804203778505325e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model2-True-None]": 7.375050336122513e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model2-True-exclude_events1]": 6.920797750353813e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model3-False-None]": 7.654167711734772e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model3-False-exclude_events1]": 6.829109042882919e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model3-True-None]": 9.008357301354408e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_inserts_data_into_bigquery_table[model3-True-exclude_events1]": 8.674990385770798e-05, + "posthog/temporal/tests/batch_exports/test_bigquery_batch_export_workflow.py::test_insert_into_bigquery_activity_merges_data_in_follow_up_runs": 7.650023326277733e-05, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[None-day]": 0.5331644993275404, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[None-hour]": 2.4092883747071028, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[exclude_events1-day]": 0.6243977081030607, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow[exclude_events1-hour]": 1.1204974162392318, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow_handles_cancellation": 5.560298207681626, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow_handles_insert_activity_errors": 0.4493210003711283, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_http_export_workflow_handles_insert_activity_non_retryable_errors": 0.5576338330283761, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_heartbeats": 0.7119531673379242, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_inserts_data_into_http_endpoint[None]": 1.7019219999201596, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_inserts_data_into_http_endpoint[exclude_events1]": 1.2853725007735193, + "posthog/temporal/tests/batch_exports/test_http_batch_export_workflow.py::test_insert_into_http_activity_throws_on_bad_http_status": 0.18163037486374378, + "posthog/temporal/tests/batch_exports/test_import_data.py::test_postgres_source_with_ssh_tunnel_disabled": 1.1623539999127388, + "posthog/temporal/tests/batch_exports/test_import_data.py::test_postgres_source_with_ssh_tunnel_enabled": 1.0993274576030672, + "posthog/temporal/tests/batch_exports/test_import_data.py::test_postgres_source_without_ssh_tunnel": 1.7952518332749605, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_binds_activity_context[activity_environment0]": 0.07891270890831947, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_binds_activity_context[activity_environment1]": 0.07009716564789414, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_binds_context": 0.20476737525314093, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_formats_positional_args": 0.06643270934000611, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_produces_to_kafka[activity_environment0]": 5.471429251134396, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_produces_to_kafka[activity_environment1]": 5.8206479591317475, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_puts_in_queue[activity_environment0]": 0.13181325094774365, + "posthog/temporal/tests/batch_exports/test_logger.py::test_batch_exports_logger_puts_in_queue[activity_environment1]": 0.11565720895305276, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[None-None]": 1.054760123603046, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[None-exclude_events1]": 1.013812290970236, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model0-None]": 1.3884093747474253, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model0-exclude_events1]": 1.0815725829452276, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model1-None]": 1.022982916329056, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model1-exclude_events1]": 1.1756517076864839, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model2-None]": 1.4717166661284864, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model2-exclude_events1]": 0.8867229158058763, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model3-None]": 1.1463667484931648, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_inserts_data_into_postgres_table[model3-exclude_events1]": 1.2544388328678906, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_insert_into_postgres_activity_merges_data_in_follow_up_runs": 1.158923374954611, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-None-day]": 1.7835563751868904, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-None-hour]": 1.9624811243265867, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-exclude_events1-day]": 1.2092333333566785, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[None-exclude_events1-hour]": 1.4378362502902746, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model0-None-day]": 1.5271071675233543, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model0-None-hour]": 1.5911054168827832, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model0-exclude_events1-day]": 1.2857967079617083, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model0-exclude_events1-hour]": 1.6052605407312512, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model1-None-day]": 1.3498363750986755, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model1-None-hour]": 1.302321081981063, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model1-exclude_events1-day]": 1.5762609587982297, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model1-exclude_events1-hour]": 1.2972861668094993, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model2-None-day]": 1.5440700012259185, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model2-None-hour]": 1.7287712930701673, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model2-exclude_events1-day]": 1.4442605394870043, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model2-exclude_events1-hour]": 1.2987427078187466, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model3-None-day]": 1.306228790897876, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model3-None-hour]": 1.3864931669086218, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model3-exclude_events1-day]": 1.4820509171113372, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow[model3-exclude_events1-hour]": 1.4865690837614238, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_backfill_earliest_persons[model0-hour-data_interval_start0]": 1.071765124797821, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_handles_cancellation": 5.494274333119392, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_handles_insert_activity_errors": 0.39679420785978436, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_handles_insert_activity_non_retryable_errors": 0.39865233190357685, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_without_events[None-None-hour]": 0.769423333927989, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_without_events[model0-None-hour]": 0.7777431677095592, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_without_events[model1-None-hour]": 0.8347002500668168, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_without_events[model2-None-hour]": 0.8604941256344318, + "posthog/temporal/tests/batch_exports/test_postgres_batch_export_workflow.py::test_postgres_export_workflow_without_events[model3-None-hour]": 0.8076599994674325, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[None-super-None]": 0.9748366260901093, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[None-super-exclude_events1]": 1.9109151675365865, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[None-varchar-None]": 1.5238502910360694, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[None-varchar-exclude_events1]": 1.0156165417283773, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model0-super-None]": 1.389367832802236, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model0-super-exclude_events1]": 0.7386749987490475, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model0-varchar-None]": 0.857204167637974, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model0-varchar-exclude_events1]": 0.954199249856174, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model1-super-None]": 0.7457721247337759, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model1-super-exclude_events1]": 0.7921792501583695, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model1-varchar-None]": 1.038733832538128, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model1-varchar-exclude_events1]": 1.159852541051805, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model2-super-None]": 0.9661673754453659, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model2-super-exclude_events1]": 0.9938011667691171, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model2-varchar-None]": 0.8434402905404568, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model2-varchar-exclude_events1]": 1.0240329173393548, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model3-super-None]": 0.8722617500461638, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model3-super-exclude_events1]": 1.3667717911303043, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model3-varchar-None]": 1.2401785007677972, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_insert_into_redshift_activity_inserts_data_into_redshift_table[model3-varchar-exclude_events1]": 1.1471651243045926, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-None-day]": 1.371961208526045, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-None-hour]": 1.7862846669740975, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-exclude_events1-day]": 1.3930214163847268, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[None-exclude_events1-hour]": 1.4807370826601982, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model0-None-day]": 1.205301043111831, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model0-None-hour]": 1.3521162904798985, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model0-exclude_events1-day]": 1.167960208375007, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model0-exclude_events1-hour]": 1.0847527915611863, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model1-None-day]": 1.180042582564056, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model1-None-hour]": 1.2109572482295334, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model1-exclude_events1-day]": 1.465975666884333, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model1-exclude_events1-hour]": 1.3335500000976026, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model2-None-day]": 1.0451714182272553, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model2-None-hour]": 1.0652440837584436, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model2-exclude_events1-day]": 1.103282374329865, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model2-exclude_events1-hour]": 1.1027878341265023, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model3-None-day]": 1.3081858749501407, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model3-None-hour]": 1.7451025396585464, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model3-exclude_events1-day]": 1.3008865001611412, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow[model3-exclude_events1-hour]": 1.260397749952972, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow_handles_insert_activity_errors": 0.4049384999088943, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_redshift_export_workflow_handles_insert_activity_non_retryable_errors": 0.4301055008545518, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[hi\\t\\n\\r\\x0c\\x08hi-hi hi]": 0.07322312472388148, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value0-expected0]": 0.0807393342256546, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value2-expected2]": 0.0821072063408792, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value3-expected3]": 0.07649533357471228, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value4-expected4]": 0.07358416775241494, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value5-expected5]": 0.06931962538510561, + "posthog/temporal/tests/batch_exports/test_redshift_batch_export_workflow.py::test_remove_escaped_whitespace_recursive[value6-expected6]": 0.0723640825599432, + "posthog/temporal/tests/batch_exports/test_run_updates.py::test_finish_batch_export_run": 1.5929715409874916, + "posthog/temporal/tests/batch_exports/test_run_updates.py::test_finish_batch_export_run_never_pauses_with_small_check_window": 2.5364780835807323, + "posthog/temporal/tests/batch_exports/test_run_updates.py::test_finish_batch_export_run_pauses_if_reaching_failure_threshold": 2.306633291300386, + "posthog/temporal/tests/batch_exports/test_run_updates.py::test_start_batch_export_run": 1.6450461675412953, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs0-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.06711354199796915, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs1-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.0756736658513546, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs10-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.06183737376704812, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs11-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.06447783391922712, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs12-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.gz]": 0.06536354217678308, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs13-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.br]": 0.0656959586776793, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs14-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet.sz]": 0.07463966589421034, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs15-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet]": 0.07209804281592369, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs16-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet.gz]": 0.06621329160407186, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs17-nested/prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.parquet.br]": 0.06455725012347102, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs2-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.gz]": 0.12707112403586507, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs3-2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.br]": 0.08928020903840661, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs4-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.06310349842533469, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs5-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.06040587369352579, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs6-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.gz]": 0.057755748741328716, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs7-my-fancy-prefix/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl.br]": 0.06977795902639627, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs8-my-fancy-prefix-with-a-forwardslash/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.06591475009918213, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_get_s3_key[inputs9-my-fancy-prefix-with-a-forwardslash/2023-01-01 00:00:00-2023-01-01 01:00:00.jsonl]": 0.06715562473982573, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_heartbeats": 2.2067585824988782, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-None-None]": 0.5854994175024331, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-None-brotli]": 1.733578541316092, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-None-gzip]": 0.5847226670011878, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-exclude_events1-None]": 0.9172789566218853, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-exclude_events1-brotli]": 1.1732787075452507, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-None-exclude_events1-gzip]": 0.6346085830591619, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model0-None-None]": 1.7650214601308107, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model0-None-brotli]": 0.9253660831600428, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model0-None-gzip]": 0.7100242916494608, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model0-exclude_events1-None]": 1.4408971252851188, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model0-exclude_events1-brotli]": 0.9948324584402144, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model0-exclude_events1-gzip]": 0.6693252502009273, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model1-None-None]": 0.6766865416429937, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model1-None-brotli]": 1.2967028329148889, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model1-None-gzip]": 0.6233162079006433, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model1-exclude_events1-None]": 0.6589729581028223, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model1-exclude_events1-brotli]": 1.2298647095449269, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model1-exclude_events1-gzip]": 0.703896707855165, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model2-None-None]": 0.7476510009728372, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model2-None-brotli]": 0.7584255416877568, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model2-None-gzip]": 1.116870166733861, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model2-exclude_events1-None]": 0.5328401657752693, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model2-exclude_events1-brotli]": 0.5320561663247645, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model2-exclude_events1-gzip]": 0.5277714165858924, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model3-None-None]": 0.5844499999657273, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model3-None-brotli]": 0.8029374573379755, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model3-None-gzip]": 0.5689524584449828, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model3-exclude_events1-None]": 1.7137764589861035, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model3-exclude_events1-brotli]": 0.8152642101049423, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[JSONLines-model3-exclude_events1-gzip]": 0.595033124089241, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-None-None]": 0.6568892495706677, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-None-brotli]": 1.0558956670574844, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-None-gzip]": 0.6490688333287835, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-exclude_events1-None]": 0.9662601253949106, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-exclude_events1-brotli]": 4.89253754215315, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-None-exclude_events1-gzip]": 0.8082168339751661, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model0-None-None]": 6.326167625840753, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model0-None-brotli]": 0.5775078749284148, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model0-None-gzip]": 0.5827175844460726, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model0-exclude_events1-None]": 0.5977093330584466, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model0-exclude_events1-brotli]": 0.6815807088278234, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model0-exclude_events1-gzip]": 0.9913779981434345, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model1-None-None]": 0.6343056675978005, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model1-None-brotli]": 0.5688727493397892, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model1-None-gzip]": 0.5833811666816473, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model1-exclude_events1-None]": 0.6110968748107553, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model1-exclude_events1-brotli]": 1.1428568735718727, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model1-exclude_events1-gzip]": 0.6147561245597899, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model2-None-None]": 0.5371772502548993, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model2-None-brotli]": 0.5720098749734461, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model2-None-gzip]": 0.5571016254834831, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model2-exclude_events1-None]": 0.4445621659979224, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model2-exclude_events1-brotli]": 0.459351250436157, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model2-exclude_events1-gzip]": 0.44556887447834015, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model3-None-None]": 0.6533050839789212, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model3-None-brotli]": 1.0473637906834483, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model3-None-gzip]": 0.6435528751462698, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model3-exclude_events1-None]": 0.7019901257008314, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model3-exclude_events1-brotli]": 0.6914012501947582, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3[Parquet-model3-exclude_events1-gzip]": 0.6944115422666073, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3_using_async[model0]": 0.6242980002425611, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3_using_async[model1]": 0.6613161666318774, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3_using_async[model2]": 0.6704642502591014, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_insert_into_s3_activity_puts_data_into_s3_using_async[model3]": 0.519144874997437, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_backfill_earliest_persons_with_minio_bucket[model0-hour-data_interval_start0]": 0.8356635826639831, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_handles_cancellation": 5.381054123863578, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_handles_insert_activity_errors": 0.4538555829785764, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_handles_insert_activity_non_retryable_errors": 0.3885155408643186, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-None-day]": 0.8767325421795249, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-None-hour]": 0.9742650832049549, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-brotli-day]": 1.8521655411459506, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-brotli-hour]": 1.418922707438469, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-gzip-day]": 1.1144125005230308, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-None-gzip-hour]": 0.919516250025481, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-None-day]": 0.8496557911857963, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-None-hour]": 0.8777132923714817, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-brotli-day]": 1.5723648332059383, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-brotli-hour]": 1.4667788753286004, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-gzip-day]": 0.8974965829402208, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-None-exclude_events1-gzip-hour]": 0.9307867921888828, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-None-None-day]": 1.9879225422628224, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-None-None-hour]": 0.8623362928628922, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-None-brotli-day]": 1.0361085426993668, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-None-brotli-hour]": 1.0982046253047884, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-None-gzip-day]": 1.2259211665950716, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-None-gzip-hour]": 0.8811926678754389, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-exclude_events1-None-day]": 0.9330097916536033, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-exclude_events1-None-hour]": 1.485024125315249, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-exclude_events1-brotli-day]": 2.266627541743219, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-exclude_events1-brotli-hour]": 1.1866853344254196, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-exclude_events1-gzip-day]": 0.9549653339199722, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model0-exclude_events1-gzip-hour]": 0.9573372500017285, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-None-None-day]": 0.9014632487669587, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-None-None-hour]": 0.9563990407623351, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-None-brotli-day]": 2.0549905002117157, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-None-brotli-hour]": 1.528113791719079, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-None-gzip-day]": 0.8877682089805603, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-None-gzip-hour]": 0.9402113342657685, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-exclude_events1-None-day]": 0.9550527092069387, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-exclude_events1-None-hour]": 0.9477350004017353, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-exclude_events1-brotli-day]": 1.5261282506398857, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-exclude_events1-brotli-hour]": 1.4766417085193098, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-exclude_events1-gzip-day]": 0.8905382086522877, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model1-exclude_events1-gzip-hour]": 0.9296239167451859, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-None-None-day]": 0.7981007909402251, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-None-None-hour]": 0.8699394990690053, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-None-brotli-day]": 0.8330790419131517, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-None-brotli-hour]": 0.7923075007274747, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-None-gzip-day]": 1.4039600417017937, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-None-gzip-hour]": 0.8702673749066889, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-exclude_events1-None-day]": 0.7386988755315542, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-exclude_events1-None-hour]": 0.9064485412091017, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-exclude_events1-brotli-day]": 0.4679476246237755, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-exclude_events1-brotli-hour]": 0.4961416684091091, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-exclude_events1-gzip-day]": 0.4832654157653451, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model2-exclude_events1-gzip-hour]": 0.5348814595490694, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-None-None-day]": 0.8661917094141245, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-None-None-hour]": 0.8383261682465672, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-None-brotli-day]": 1.0381970424205065, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-None-brotli-hour]": 1.0333721674978733, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-None-gzip-day]": 0.8423837502487004, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-None-gzip-hour]": 0.8544681658968329, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-exclude_events1-None-day]": 0.8620872497558594, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-exclude_events1-None-hour]": 1.292261166498065, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-exclude_events1-brotli-day]": 1.0705524161458015, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-exclude_events1-brotli-hour]": 1.0872227917425334, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-exclude_events1-gzip-day]": 0.9333015410229564, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[JSONLines-model3-exclude_events1-gzip-hour]": 0.8687024582177401, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-None-day]": 1.137744708918035, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-None-hour]": 1.1472987085580826, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-brotli-day]": 2.999892959371209, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-brotli-hour]": 3.139740416314453, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-gzip-day]": 1.5146193327382207, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-None-gzip-hour]": 1.1625404595397413, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-None-day]": 0.9244546247646213, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-None-hour]": 1.0417948327958584, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-brotli-day]": 2.044351999182254, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-brotli-hour]": 1.054773542098701, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-gzip-day]": 1.4837472918443382, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-None-exclude_events1-gzip-hour]": 1.0468022511340678, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-None-None-day]": 1.301559458952397, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-None-None-hour]": 1.076713917311281, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-None-brotli-day]": 0.9899887489154935, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-None-brotli-hour]": 0.8855587081052363, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-None-gzip-day]": 0.9067723755724728, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-None-gzip-hour]": 0.9476310424506664, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-exclude_events1-None-day]": 1.6314646676182747, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-exclude_events1-None-hour]": 0.9415495842695236, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-exclude_events1-brotli-day]": 1.0128098758868873, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-exclude_events1-brotli-hour]": 2.109523542691022, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-exclude_events1-gzip-day]": 0.9834887078031898, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model0-exclude_events1-gzip-hour]": 1.1322856661863625, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-None-None-day]": 0.9994771243073046, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-None-None-hour]": 4.999072207603604, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-None-brotli-day]": 0.9324787082150578, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-None-brotli-hour]": 0.9106893735006452, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-None-gzip-day]": 0.9921404174529016, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-None-gzip-hour]": 1.5967548340559006, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-exclude_events1-None-day]": 1.428070500958711, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-exclude_events1-None-hour]": 0.9567563333548605, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-exclude_events1-brotli-day]": 0.9932642909698188, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-exclude_events1-brotli-hour]": 1.0444886670447886, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-exclude_events1-gzip-day]": 0.9897393328137696, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model1-exclude_events1-gzip-hour]": 1.336940957698971, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-None-None-day]": 1.051480249967426, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-None-None-hour]": 0.8603308745659888, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-None-brotli-day]": 0.8652634168975055, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-None-brotli-hour]": 0.8817967078648508, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-None-gzip-day]": 0.8488927511498332, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-None-gzip-hour]": 1.4220476658083498, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-exclude_events1-None-day]": 0.5034748334437609, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-exclude_events1-None-hour]": 0.5737588750198483, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-exclude_events1-brotli-day]": 0.6017620409838855, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-exclude_events1-brotli-hour]": 0.6716642072424293, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-exclude_events1-gzip-day]": 1.7940955418162048, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model2-exclude_events1-gzip-hour]": 0.4711102503351867, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-None-None-day]": 2.1126996241509914, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-None-None-hour]": 6.096246957778931, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-None-brotli-day]": 0.9898537094704807, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-None-brotli-hour]": 0.9165059584192932, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-None-gzip-day]": 0.969439041800797, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-None-gzip-hour]": 1.3072099988348782, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-exclude_events1-None-day]": 1.295641708187759, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-exclude_events1-None-hour]": 0.9394986242987216, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-exclude_events1-brotli-day]": 1.055149707943201, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-exclude_events1-brotli-hour]": 2.7059249989688396, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-exclude_events1-gzip-day]": 1.5853867926634848, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket[Parquet-model3-exclude_events1-gzip-hour]": 1.3729095831513405, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[None-posthog-{table}/{hour}:{minute}:{second}/{year}-{month}-{day}]": 0.9829393341206014, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[None-posthog-{table}/{hour}:{minute}:{second}]": 0.9856550842523575, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[None-posthog-{table}/{year}-{month}-{day}/{hour}:{minute}:{second}]": 1.3254122505895793, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[None-posthog/{year}-{month}-{day}/{hour}:{minute}:{second}]": 0.9284434588626027, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[None-{year}-{month}-{day}]": 1.0438671661540866, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model0-posthog-{table}/{hour}:{minute}:{second}/{year}-{month}-{day}]": 0.8372701685875654, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model0-posthog-{table}/{hour}:{minute}:{second}]": 0.8333891653455794, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model0-posthog-{table}/{year}-{month}-{day}/{hour}:{minute}:{second}]": 1.3237055414356291, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model0-posthog/{year}-{month}-{day}/{hour}:{minute}:{second}]": 0.9409934990108013, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model0-{year}-{month}-{day}]": 1.0118387918919325, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model1-posthog-{table}/{hour}:{minute}:{second}/{year}-{month}-{day}]": 1.9733256245963275, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model1-posthog-{table}/{hour}:{minute}:{second}]": 0.8570033749565482, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model1-posthog-{table}/{year}-{month}-{day}/{hour}:{minute}:{second}]": 0.7911749593913555, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model1-posthog/{year}-{month}-{day}/{hour}:{minute}:{second}]": 0.7961646248586476, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_and_custom_key_prefix[model1-{year}-{month}-{day}]": 0.8196256263181567, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_without_events[None-None-None-hour]": 0.47067829221487045, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_without_events[model0-None-None-hour]": 0.4668008740991354, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_without_events[model1-None-None-hour]": 0.7947097909636796, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_without_events[model2-None-None-hour]": 0.5111806686036289, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_minio_bucket_without_events[model3-None-None-hour]": 0.39404758298769593, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_request_timeouts[None]": 61.78477221028879, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_request_timeouts[model0]": 61.642525624949485, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_request_timeouts[model1]": 61.19657287513837, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-None-day]": 8.066697046160698e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-None-every 5 minutes]": 7.04578123986721e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-None-hour]": 9.966734796762466e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-brotli-day]": 6.637396290898323e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-brotli-every 5 minutes]": 6.541702896356583e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-brotli-hour]": 7.179239764809608e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-gzip-day]": 6.820820271968842e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-gzip-every 5 minutes]": 0.0001121661625802517, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-None-gzip-hour]": 6.704218685626984e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-None-day]": 7.341708987951279e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-None-every 5 minutes]": 6.808340549468994e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-None-hour]": 6.679212674498558e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-brotli-day]": 8.137477561831474e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-brotli-every 5 minutes]": 7.570907473564148e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-brotli-hour]": 0.00017033331096172333, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-gzip-day]": 6.587430834770203e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-gzip-every 5 minutes]": 7.379194721579552e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-AES256-exclude_events1-gzip-hour]": 6.691692396998405e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-None-day]": 8.37906263768673e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-None-every 5 minutes]": 7.424969226121902e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-None-hour]": 9.691622108221054e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-brotli-day]": 6.658351048827171e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-brotli-every 5 minutes]": 6.716558709740639e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-brotli-hour]": 7.383432239294052e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-gzip-day]": 6.887596100568771e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-gzip-every 5 minutes]": 7.133372128009796e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-None-gzip-hour]": 6.791623309254646e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-None-day]": 7.766718044877052e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-None-every 5 minutes]": 6.641820073127747e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-None-hour]": 6.729178130626678e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-brotli-day]": 6.704218685626984e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-brotli-every 5 minutes]": 6.66668638586998e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-brotli-hour]": 7.008295506238937e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-gzip-day]": 6.76657073199749e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-gzip-every 5 minutes]": 7.454119622707367e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-None-exclude_events1-gzip-hour]": 6.624963134527206e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-None-day]": 8.233170956373215e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-None-every 5 minutes]": 0.00012349942699074745, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-None-hour]": 7.825111970305443e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-brotli-day]": 7.175002247095108e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-brotli-every 5 minutes]": 7.079122588038445e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-brotli-hour]": 7.324852049350739e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-gzip-day]": 7.533282041549683e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-gzip-every 5 minutes]": 7.754191756248474e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-None-gzip-hour]": 8.341716602444649e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-None-day]": 7.520802319049835e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-None-every 5 minutes]": 7.00005330145359e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-None-hour]": 7.079169154167175e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-brotli-day]": 0.00010604178532958031, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 6.962474435567856e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-brotli-hour]": 7.354188710451126e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-gzip-day]": 6.9458968937397e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 6.958283483982086e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-None-None-aws:kms-exclude_events1-gzip-hour]": 6.754277274012566e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-None-day]": 0.000418749637901783, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-None-every 5 minutes]": 0.0007154173217713833, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-None-hour]": 7.987534627318382e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-brotli-day]": 0.00015208451077342033, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-brotli-every 5 minutes]": 8.483417332172394e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-brotli-hour]": 0.00027520814910531044, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-gzip-day]": 0.0001521250233054161, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-gzip-every 5 minutes]": 9.841611608862877e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-None-gzip-hour]": 0.0008651674725115299, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-None-day]": 8.129095658659935e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-None-every 5 minutes]": 7.170811295509338e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-None-hour]": 0.00013566575944423676, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-brotli-day]": 0.0002964581362903118, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.0009520826861262321, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-brotli-hour]": 0.00043449876829981804, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-gzip-day]": 7.191719487309456e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-gzip-every 5 minutes]": 7.224874570965767e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-AES256-exclude_events1-gzip-hour]": 7.49579630792141e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-None-day]": 0.0001687495969235897, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-None-every 5 minutes]": 0.0007580420933663845, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-None-hour]": 8.38334672152996e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-brotli-day]": 0.00020804116502404213, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-brotli-every 5 minutes]": 0.00019524991512298584, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-brotli-hour]": 7.754145190119743e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-gzip-day]": 8.095894008874893e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-gzip-every 5 minutes]": 0.00021358346566557884, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-None-gzip-hour]": 0.00020241551101207733, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-None-day]": 0.00035512493923306465, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-None-every 5 minutes]": 0.00018362374976277351, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-None-hour]": 0.00012683309614658356, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-brotli-day]": 7.908279076218605e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-brotli-every 5 minutes]": 7.450021803379059e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-brotli-hour]": 0.00011287536472082138, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-gzip-day]": 0.0006648330017924309, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-gzip-every 5 minutes]": 0.0005962089635431767, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-None-exclude_events1-gzip-hour]": 0.0002827504649758339, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-None-day]": 0.00011129211634397507, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-None-every 5 minutes]": 0.0001515410840511322, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-None-hour]": 8.124951273202896e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-brotli-day]": 0.0004020826891064644, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-brotli-every 5 minutes]": 0.0004888745024800301, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-brotli-hour]": 9.083421900868416e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-gzip-day]": 8.012540638446808e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-gzip-every 5 minutes]": 0.0003843335434794426, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-None-gzip-hour]": 0.00012720748782157898, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-None-day]": 0.0006124582141637802, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.0007009170949459076, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-None-hour]": 0.0006665419787168503, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-brotli-day]": 0.0003950009122490883, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00013095932081341743, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-brotli-hour]": 0.0006138766184449196, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-gzip-day]": 0.0007708328776061535, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.0008816253393888474, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model0-None-aws:kms-exclude_events1-gzip-hour]": 0.0005272091366350651, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-None-day]": 7.095746695995331e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-None-every 5 minutes]": 7.274886593222618e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-None-hour]": 6.983429193496704e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-brotli-day]": 0.00014187488704919815, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-brotli-every 5 minutes]": 8.079083636403084e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-brotli-hour]": 9.595789015293121e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-gzip-day]": 6.924988701939583e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-gzip-every 5 minutes]": 7.099984213709831e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-None-gzip-hour]": 7.370905950665474e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-None-day]": 7.241824641823769e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-None-every 5 minutes]": 7.254211232066154e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-None-hour]": 7.250020280480385e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-brotli-day]": 7.379194721579552e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-brotli-every 5 minutes]": 7.083266973495483e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-brotli-hour]": 7.079215720295906e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-gzip-day]": 6.841728463768959e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-gzip-every 5 minutes]": 7.158378139138222e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-AES256-exclude_events1-gzip-hour]": 7.208297029137611e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-None-day]": 0.0002916669473052025, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-None-every 5 minutes]": 0.0005746250972151756, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-None-hour]": 0.00015616603195667267, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-brotli-day]": 9.641703218221664e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-brotli-every 5 minutes]": 0.0001166248694062233, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-brotli-hour]": 0.00010391604155302048, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-gzip-day]": 0.0001070825383067131, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-gzip-every 5 minutes]": 0.0008347085677087307, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-None-gzip-hour]": 0.0001554577611386776, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-None-day]": 8.524954319000244e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-None-every 5 minutes]": 0.00010320916771888733, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-None-hour]": 0.00010437518358230591, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-brotli-day]": 7.937522605061531e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-brotli-every 5 minutes]": 0.00011854199692606926, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-brotli-hour]": 7.020775228738785e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-gzip-day]": 7.595913484692574e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-gzip-every 5 minutes]": 7.100030779838562e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-None-exclude_events1-gzip-hour]": 7.933331653475761e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-None-day]": 7.083406671881676e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-None-every 5 minutes]": 7.062405347824097e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-None-hour]": 6.791669875383377e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-brotli-day]": 7.187435403466225e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-brotli-every 5 minutes]": 7.124990224838257e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-brotli-hour]": 7.095979526638985e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-gzip-day]": 7.099984213709831e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-gzip-every 5 minutes]": 6.749993190169334e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-None-gzip-hour]": 0.00010562455281615257, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-None-day]": 7.466552779078484e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.0002595423720777035, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-None-hour]": 6.83753751218319e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-brotli-day]": 7.32913613319397e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 6.712507456541061e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-brotli-hour]": 7.391674444079399e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-gzip-day]": 0.00014412496238946915, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.00013016723096370697, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model1-None-aws:kms-exclude_events1-gzip-hour]": 9.64989885687828e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-None-day]": 7.575051859021187e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-None-every 5 minutes]": 7.66250304877758e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-None-hour]": 9.791599586606026e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-brotli-day]": 6.950134411454201e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-brotli-every 5 minutes]": 6.94170594215393e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-brotli-hour]": 7.66245648264885e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-gzip-day]": 7.11251050233841e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-gzip-every 5 minutes]": 6.920890882611275e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-None-gzip-hour]": 7.679127156734467e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-None-day]": 7.120752707123756e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-None-every 5 minutes]": 0.00011170795187354088, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-None-hour]": 6.66249543428421e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-brotli-day]": 7.066735997796059e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-brotli-every 5 minutes]": 6.941799074411392e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-brotli-hour]": 7.67512246966362e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-gzip-day]": 6.679166108369827e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-gzip-every 5 minutes]": 7.050018757581711e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-AES256-exclude_events1-gzip-hour]": 6.825011223554611e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-None-day]": 8.333288133144379e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-None-every 5 minutes]": 0.00010133348405361176, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-None-hour]": 7.05420970916748e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-brotli-day]": 0.0009595002047717571, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-brotli-every 5 minutes]": 0.0004462907090783119, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-brotli-hour]": 0.0002520829439163208, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-gzip-day]": 0.000603875145316124, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-gzip-every 5 minutes]": 0.0020841239020228386, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-None-gzip-hour]": 8.474988862872124e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-None-day]": 0.00038129184395074844, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-None-every 5 minutes]": 0.0020522489212453365, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-None-hour]": 0.0019046254456043243, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-brotli-day]": 0.0006032916717231274, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-brotli-every 5 minutes]": 0.00012191571295261383, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-brotli-hour]": 0.006584083195775747, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-gzip-day]": 0.0005778339691460133, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-gzip-every 5 minutes]": 9.862473234534264e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-None-exclude_events1-gzip-hour]": 0.0013946262188255787, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-None-day]": 0.00012612482532858849, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-None-every 5 minutes]": 8.308328688144684e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-None-hour]": 0.00010016607120633125, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-brotli-day]": 7.070787250995636e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-brotli-every 5 minutes]": 7.220776751637459e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-brotli-hour]": 7.333420217037201e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-gzip-day]": 7.604295387864113e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-gzip-every 5 minutes]": 7.345806807279587e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-None-gzip-hour]": 9.066611528396606e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-None-day]": 7.066689431667328e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-None-every 5 minutes]": 7.687509059906006e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-None-hour]": 6.933324038982391e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-brotli-day]": 0.00039420928806066513, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00014691613614559174, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-brotli-hour]": 0.00020024972036480904, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-gzip-day]": 0.00023974990472197533, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.00025404198095202446, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model2-None-aws:kms-exclude_events1-gzip-hour]": 6.912602111697197e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-None-day]": 0.0001183338463306427, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-None-every 5 minutes]": 7.979106158018112e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-None-hour]": 7.012486457824707e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-brotli-day]": 0.0001178341917693615, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-brotli-every 5 minutes]": 0.0001588752493262291, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-brotli-hour]": 0.0002821669913828373, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-gzip-day]": 0.00034495769068598747, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-gzip-every 5 minutes]": 0.00023475103080272675, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-None-gzip-hour]": 7.137563079595566e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-None-day]": 7.916614413261414e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-None-every 5 minutes]": 7.341569289565086e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-None-hour]": 8.645746856927872e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-brotli-day]": 6.916699931025505e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-brotli-every 5 minutes]": 8.062506094574928e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-brotli-hour]": 7.38333910703659e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-gzip-day]": 6.983382627367973e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-gzip-every 5 minutes]": 7.595820352435112e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-AES256-exclude_events1-gzip-hour]": 7.124990224838257e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-None-day]": 7.354188710451126e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-None-every 5 minutes]": 7.700035348534584e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-None-hour]": 7.425108924508095e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-brotli-day]": 9.079230949282646e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-brotli-every 5 minutes]": 7.983297109603882e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-brotli-hour]": 0.0004444592632353306, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-gzip-day]": 7.041683420538902e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-gzip-every 5 minutes]": 0.0001295008696615696, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-None-gzip-hour]": 7.466599345207214e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-None-day]": 7.229205220937729e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-None-every 5 minutes]": 0.00014849985018372536, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-None-hour]": 7.487460970878601e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-brotli-day]": 7.433351129293442e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-brotli-every 5 minutes]": 6.854208186268806e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-brotli-hour]": 0.00013579102233052254, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-gzip-day]": 0.00010120775550603867, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-gzip-every 5 minutes]": 7.479218766093254e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-None-exclude_events1-gzip-hour]": 0.00014166627079248428, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-None-day]": 8.045835420489311e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-None-every 5 minutes]": 7.299985736608505e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-None-hour]": 9.27918590605259e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-brotli-day]": 6.62514939904213e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-brotli-every 5 minutes]": 6.595812737941742e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-brotli-hour]": 7.170764729380608e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-gzip-day]": 8.129095658659935e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-gzip-every 5 minutes]": 7.562525570392609e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-None-gzip-hour]": 7.070926949381828e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-None-day]": 7.43749551475048e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-None-every 5 minutes]": 6.716698408126831e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-None-hour]": 7.087411358952522e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-brotli-day]": 7.095886394381523e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00015699956566095352, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-brotli-hour]": 7.087551057338715e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-gzip-day]": 9.525055065751076e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 8.404301479458809e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[JSONLines-model3-None-aws:kms-exclude_events1-gzip-hour]": 0.0007168739102780819, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-None-day]": 0.0001082075759768486, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-None-every 5 minutes]": 0.00027129193767905235, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-None-hour]": 9.324867278337479e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-brotli-day]": 9.487476199865341e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-brotli-every 5 minutes]": 7.566716521978378e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-brotli-hour]": 9.358441457152367e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-gzip-day]": 0.00012237532064318657, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-gzip-every 5 minutes]": 0.0004127919673919678, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-None-gzip-hour]": 0.0003065001219511032, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-None-day]": 0.00011100014671683311, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-None-every 5 minutes]": 8.37910920381546e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-None-hour]": 0.0001072082668542862, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-brotli-day]": 0.00020475126802921295, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-brotli-every 5 minutes]": 9.100046008825302e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-brotli-hour]": 0.00017650052905082703, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-gzip-day]": 0.0003098752349615097, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-gzip-every 5 minutes]": 0.00020654313266277313, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-AES256-exclude_events1-gzip-hour]": 0.0002929987385869026, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-None-day]": 0.0013589169830083847, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-None-every 5 minutes]": 8.850032463669777e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-None-hour]": 0.00014899903908371925, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-brotli-day]": 9.224982932209969e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-brotli-every 5 minutes]": 0.00013862596824765205, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-brotli-hour]": 8.733430877327919e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-gzip-day]": 7.620779797434807e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-gzip-every 5 minutes]": 0.00015912484377622604, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-None-gzip-hour]": 8.137477561831474e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-None-day]": 0.000103791244328022, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-None-every 5 minutes]": 0.00015866709873080254, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-None-hour]": 8.254218846559525e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-brotli-day]": 8.187536150217056e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-brotli-every 5 minutes]": 0.0002431240864098072, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-brotli-hour]": 0.00016624992713332176, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-gzip-day]": 8.008349686861038e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-gzip-every 5 minutes]": 7.870933040976524e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-None-exclude_events1-gzip-hour]": 9.766686707735062e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-None-day]": 0.0002120407298207283, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-None-every 5 minutes]": 0.00027462514117360115, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-None-hour]": 7.98739492893219e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-brotli-day]": 8.529191836714745e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-brotli-every 5 minutes]": 0.0003463327884674072, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-brotli-hour]": 0.00015137437731027603, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-gzip-day]": 8.637504652142525e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-gzip-every 5 minutes]": 8.870754390954971e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-None-gzip-hour]": 0.00014141714200377464, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-None-day]": 0.00018579047173261642, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.00022558309137821198, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-None-hour]": 0.00015554111450910568, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-brotli-day]": 0.00010316586121916771, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00014083366841077805, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-brotli-hour]": 0.00015866616740822792, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-gzip-day]": 7.316609844565392e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 7.404200732707977e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-None-None-aws:kms-exclude_events1-gzip-hour]": 8.71666707098484e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-None-day]": 8.041597902774811e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-None-every 5 minutes]": 7.450021803379059e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-None-hour]": 0.000154959037899971, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-brotli-day]": 7.412489503622055e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-brotli-every 5 minutes]": 7.233349606394768e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-brotli-hour]": 7.483409717679024e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-gzip-day]": 7.26659782230854e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-gzip-every 5 minutes]": 7.237493991851807e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-None-gzip-hour]": 8.012447506189346e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-None-day]": 6.854208186268806e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-None-every 5 minutes]": 6.620818749070168e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-None-hour]": 7.279077544808388e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-brotli-day]": 0.00014575058594346046, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-brotli-every 5 minutes]": 8.49580392241478e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-brotli-hour]": 6.591761484742165e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-gzip-day]": 0.00011462485417723656, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-gzip-every 5 minutes]": 6.958283483982086e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-AES256-exclude_events1-gzip-hour]": 6.541609764099121e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-None-day]": 0.0001238747499883175, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-None-every 5 minutes]": 8.174963295459747e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-None-hour]": 0.00013862550258636475, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-brotli-day]": 7.266737520694733e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-brotli-every 5 minutes]": 0.00025833258405327797, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-brotli-hour]": 7.083360105752945e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-gzip-day]": 7.866555824875832e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-gzip-every 5 minutes]": 7.070787250995636e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-None-gzip-hour]": 7.987534627318382e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-None-day]": 8.841697126626968e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-None-every 5 minutes]": 7.716706022620201e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-None-hour]": 0.00010087573900818825, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-brotli-day]": 0.00014479178935289383, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-brotli-every 5 minutes]": 8.783303201198578e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-brotli-hour]": 0.00010087480768561363, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-gzip-day]": 7.50422477722168e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-gzip-every 5 minutes]": 0.00010170694440603256, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-None-exclude_events1-gzip-hour]": 7.800012826919556e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-None-day]": 7.183384150266647e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-None-every 5 minutes]": 7.674982771277428e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-None-hour]": 7.9374760389328e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-brotli-day]": 7.558288052678108e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-brotli-every 5 minutes]": 7.241591811180115e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-brotli-hour]": 8.133286610245705e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-gzip-day]": 8.991546928882599e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-gzip-every 5 minutes]": 7.65826553106308e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-None-gzip-hour]": 0.0018508750945329666, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-None-day]": 8.687516674399376e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-None-every 5 minutes]": 8.133286610245705e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-None-hour]": 0.00011258292943239212, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-brotli-day]": 7.591629400849342e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 7.149949669837952e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-brotli-hour]": 7.599964737892151e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-gzip-day]": 7.879221811890602e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 8.77082347869873e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model0-None-aws:kms-exclude_events1-gzip-hour]": 0.00017887400463223457, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-None-day]": 6.970809772610664e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-None-every 5 minutes]": 7.333280518651009e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-None-hour]": 7.170811295509338e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-brotli-day]": 7.791677489876747e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-brotli-every 5 minutes]": 0.00015616696327924728, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-brotli-hour]": 7.179193198680878e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-gzip-day]": 7.141567766666412e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-gzip-every 5 minutes]": 7.329322397708893e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-None-gzip-hour]": 7.15409405529499e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-None-day]": 7.420824840664864e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-None-every 5 minutes]": 7.304130122065544e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-None-hour]": 8.44169408082962e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-brotli-day]": 6.758281961083412e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-brotli-every 5 minutes]": 7.429113611578941e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-brotli-hour]": 6.975000724196434e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-gzip-day]": 0.00012175086885690689, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-gzip-every 5 minutes]": 7.220916450023651e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-AES256-exclude_events1-gzip-hour]": 7.275119423866272e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-None-day]": 7.462501525878906e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-None-every 5 minutes]": 7.550092414021492e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-None-hour]": 7.304130122065544e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-brotli-day]": 8.774921298027039e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-brotli-every 5 minutes]": 7.104221731424332e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-brotli-hour]": 7.404200732707977e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-gzip-day]": 8.074985817074776e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-gzip-every 5 minutes]": 7.720803841948509e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-None-gzip-hour]": 9.454181417822838e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-None-day]": 0.00011512497439980507, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-None-every 5 minutes]": 9.037554264068604e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-None-hour]": 7.554097101092339e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-brotli-day]": 8.345814421772957e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-brotli-every 5 minutes]": 7.09989108145237e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-brotli-hour]": 7.520755752921104e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-gzip-day]": 8.762581273913383e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-gzip-every 5 minutes]": 7.60834664106369e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-None-exclude_events1-gzip-hour]": 0.00018900074064731598, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-None-day]": 6.908364593982697e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-None-every 5 minutes]": 6.924895569682121e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-None-hour]": 6.833299994468689e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-brotli-day]": 6.512505933642387e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-brotli-every 5 minutes]": 7.425015792250633e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-brotli-hour]": 6.849924102425575e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-gzip-day]": 7.158378139138222e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-gzip-every 5 minutes]": 6.958423182368279e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-None-gzip-hour]": 7.800152525305748e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-None-day]": 6.920890882611275e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-None-every 5 minutes]": 6.691599264740944e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-None-hour]": 0.00010950025171041489, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-brotli-day]": 7.866602391004562e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00016945833340287209, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-brotli-hour]": 7.966626435518265e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-gzip-day]": 0.00015712575986981392, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.00011345883831381798, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model1-None-aws:kms-exclude_events1-gzip-hour]": 7.220776751637459e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-None-day]": 7.191579788923264e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-None-every 5 minutes]": 6.962474435567856e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-None-hour]": 7.187435403466225e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-brotli-day]": 0.0001676664687693119, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-brotli-every 5 minutes]": 0.00010541733354330063, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-brotli-hour]": 0.00019904086366295815, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-gzip-day]": 8.333241567015648e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-gzip-every 5 minutes]": 0.0006837500259280205, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-None-gzip-hour]": 0.0008782926015555859, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-None-day]": 0.00020683370530605316, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-None-every 5 minutes]": 0.00013129180297255516, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-None-hour]": 0.0004058331251144409, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-brotli-day]": 0.0008678752928972244, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.0006169583648443222, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-brotli-hour]": 9.479327127337456e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-gzip-day]": 9.683333337306976e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-gzip-every 5 minutes]": 7.558288052678108e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-AES256-exclude_events1-gzip-hour]": 0.00016754213720560074, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-None-day]": 8.116569370031357e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-None-every 5 minutes]": 7.516751065850258e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-None-hour]": 9.27504152059555e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-brotli-day]": 7.541617378592491e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-brotli-every 5 minutes]": 8.137384429574013e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-brotli-hour]": 8.729053661227226e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-gzip-day]": 8.254172280430794e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-gzip-every 5 minutes]": 0.00013924995437264442, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-None-gzip-hour]": 0.00011883443221449852, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-None-day]": 8.166581392288208e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-None-every 5 minutes]": 8.024973794817924e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-None-hour]": 8.187489584088326e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-brotli-day]": 7.574958726763725e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-brotli-every 5 minutes]": 7.924996316432953e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-brotli-hour]": 7.60410912334919e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-gzip-day]": 0.0001893746666610241, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-gzip-every 5 minutes]": 8.766725659370422e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-None-exclude_events1-gzip-hour]": 0.00014641601592302322, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-None-day]": 0.0001210835762321949, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-None-every 5 minutes]": 0.0001322501339018345, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-None-hour]": 0.00022695818915963173, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-brotli-day]": 0.00014962488785386086, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-brotli-every 5 minutes]": 0.0001799589954316616, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-brotli-hour]": 8.504046127200127e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-gzip-day]": 0.00019620871171355247, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-gzip-every 5 minutes]": 0.00010474957525730133, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-None-gzip-hour]": 7.858267053961754e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-None-day]": 0.00011691683903336525, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-None-every 5 minutes]": 8.15829262137413e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-None-hour]": 9.529199451208115e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-brotli-day]": 0.0002605831250548363, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 9.200070053339005e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-brotli-hour]": 0.00012049917131662369, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-gzip-day]": 0.0003793328069150448, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 8.841697126626968e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model2-None-aws:kms-exclude_events1-gzip-hour]": 8.16667452454567e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-None-day]": 0.0005226251669228077, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-None-every 5 minutes]": 0.00017812475562095642, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-None-hour]": 0.00029054097831249237, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-brotli-day]": 0.0001443740911781788, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-brotli-every 5 minutes]": 8.262461051344872e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-brotli-hour]": 8.029118180274963e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-gzip-day]": 9.82498750090599e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-gzip-every 5 minutes]": 8.204346522688866e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-None-gzip-hour]": 0.0002936245873570442, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-None-day]": 7.724948227405548e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-None-every 5 minutes]": 8.266698569059372e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-None-hour]": 0.00013962434604763985, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-brotli-day]": 0.00019858358427882195, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-brotli-every 5 minutes]": 0.0005052071064710617, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-brotli-hour]": 0.00012837490066885948, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-gzip-day]": 7.491698488593102e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-gzip-every 5 minutes]": 6.966618821024895e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-AES256-exclude_events1-gzip-hour]": 7.412629202008247e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-None-day]": 0.00016741687431931496, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-None-every 5 minutes]": 0.00017587468028068542, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-None-hour]": 0.00019795773550868034, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-brotli-day]": 8.075032383203506e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-brotli-every 5 minutes]": 0.0006606252864003181, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-brotli-hour]": 0.00030674971640110016, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-gzip-day]": 0.0005832081660628319, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-gzip-every 5 minutes]": 0.00022875051945447922, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-None-gzip-hour]": 0.0001777089200913906, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-None-day]": 0.00017679203301668167, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-None-every 5 minutes]": 0.00018141791224479675, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-None-hour]": 0.0002772081643342972, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-brotli-day]": 0.0008783750236034393, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-brotli-every 5 minutes]": 0.0003337929956614971, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-brotli-hour]": 0.00010458333417773247, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-gzip-day]": 0.0011063735000789165, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-gzip-every 5 minutes]": 0.00016333302482962608, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-None-exclude_events1-gzip-hour]": 0.0003216252662241459, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-None-day]": 0.00012900028377771378, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-None-every 5 minutes]": 0.00016804179176688194, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-None-hour]": 0.00024312501773238182, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-brotli-day]": 0.00010187504813075066, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-brotli-every 5 minutes]": 0.0001794588752090931, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-brotli-hour]": 0.0001778341829776764, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-gzip-day]": 0.0002772919833660126, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-gzip-every 5 minutes]": 0.0002314988523721695, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-None-gzip-hour]": 0.0012000012211501598, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-None-day]": 0.00011699972674250603, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-None-every 5 minutes]": 0.00021191593259572983, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-None-hour]": 0.00013487506657838821, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-brotli-day]": 9.666616097092628e-05, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-brotli-every 5 minutes]": 0.00028570834547281265, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-brotli-hour]": 0.00014124996960163116, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-gzip-day]": 0.00019479170441627502, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-gzip-every 5 minutes]": 0.0003636241890490055, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_export_workflow_with_s3_bucket[Parquet-model3-None-aws:kms-exclude_events1-gzip-hour]": 0.00011837482452392578, + "posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py::test_s3_multi_part_upload_raises_retryable_exception": 60.177663665264845, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_heartbeats": 0.00011479202657938004, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[None-None]": 0.0010439171455800533, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[None-exclude_events1]": 9.999983012676239e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model0-None]": 0.00017695780843496323, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model0-exclude_events1]": 0.00010224897414445877, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model1-None]": 7.716706022620201e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model1-exclude_events1]": 8.170772343873978e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model2-None]": 7.629208266735077e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model2-exclude_events1]": 7.795821875333786e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model3-None]": 7.37491063773632e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_inserts_data_into_snowflake_table[model3-exclude_events1]": 7.158378139138222e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_merges_data_in_follow_up_runs": 7.479079067707062e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_insert_into_snowflake_activity_removes_internal_stage_files": 7.116608321666718e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-None-day]": 8.362485095858574e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-None-hour]": 7.412489503622055e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-exclude_events1-day]": 0.00018633296713232994, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[None-exclude_events1-hour]": 7.358286529779434e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model0-None-day]": 6.954232230782509e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model0-None-hour]": 7.137469947338104e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model0-exclude_events1-day]": 6.908224895596504e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model0-exclude_events1-hour]": 7.204338908195496e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model1-None-day]": 0.00013308320194482803, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model1-None-hour]": 8.287420496344566e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model1-exclude_events1-day]": 6.754091009497643e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model1-exclude_events1-hour]": 6.733322516083717e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model2-None-day]": 7.412489503622055e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model2-None-hour]": 7.237447425723076e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model2-exclude_events1-day]": 0.00011316733434796333, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model2-exclude_events1-hour]": 6.77080824971199e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model3-None-day]": 7.970770820975304e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model3-None-hour]": 9.866571053862572e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model3-exclude_events1-day]": 7.466599345207214e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow[model3-exclude_events1-hour]": 9.6083153039217e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_backfill_earliest_persons[model0-hour-data_interval_start0]": 7.933331653475761e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_exports_events[day]": 8.582435542717576, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_exports_events[hour]": 8.955490707885474, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_cancellation": 7.337518036365509e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_cancellation_mocked": 5.405311334412545, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_insert_activity_errors": 0.585657290648669, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_handles_insert_activity_non_retryable_errors": 0.4107903749682009, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_raises_error_on_copy_fail": 121.7055385010317, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_raises_error_on_put_fail": 106.86258550034836, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-None-day]": 7.866742089390755e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-None-hour]": 7.358333095908165e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-exclude_events1-day]": 7.733376696705818e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[None-exclude_events1-hour]": 6.93327747285366e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model0-None-day]": 9.120907634496689e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model0-None-hour]": 0.00017845816910266876, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model0-exclude_events1-day]": 7.733283564448357e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model0-exclude_events1-hour]": 7.566576823592186e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model1-None-day]": 7.412396371364594e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model1-None-hour]": 7.212487980723381e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model1-exclude_events1-day]": 8.304184302687645e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model1-exclude_events1-hour]": 0.0001038331538438797, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model2-None-day]": 7.408391684293747e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model2-None-hour]": 0.00011483253911137581, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model2-exclude_events1-day]": 6.983336061239243e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model2-exclude_events1-hour]": 7.470790296792984e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model3-None-day]": 6.720889359712601e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model3-None-hour]": 7.987488061189651e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model3-exclude_events1-day]": 8.541718125343323e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_with_many_files[model3-exclude_events1-hour]": 9.950017556548119e-05, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_without_events[day]": 0.5978366243652999, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_export_workflow_without_events[hour]": 0.47968529211357236, + "posthog/temporal/tests/batch_exports/test_snowflake_batch_export_workflow.py::test_snowflake_heartbeat_details_parses_from_tuple[details0]": 0.07230112515389919, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write0]": 0.37636129185557365, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write1]": 0.20073662465438247, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write2]": 0.07688325084745884, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write3]": 0.06976979179307818, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write4]": 0.07323225075379014, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_tracks_bytes[to_write5]": 0.09432283276692033, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_csv[records0]": 0.07668266724795103, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_csv[records1]": 0.06739216577261686, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_jsonl[records0]": 0.0738845425657928, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_jsonl[records1]": 0.09346666606143117, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_jsonl_invalid_unicode": 0.0677204574458301, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_tsv[records0]": 0.07248216634616256, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_batch_export_temporary_file_write_records_to_tsv[records1]": 0.07776045985519886, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_csv_writer_writes_record_batches[record_batch0]": 0.07658345671370625, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_flushing_parquet_writer_resets_underlying_file[record_batch0]": 0.07545791659504175, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_jsonl_writer_deals_with_nested_user_events": 0.18304416723549366, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_jsonl_writer_deals_with_web_vitals": 0.15884387400001287, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_jsonl_writer_writes_record_batches[record_batch0]": 0.08067587483674288, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_parquet_writer_writes_record_batches[record_batch0]": 0.0753522920422256, + "posthog/temporal/tests/batch_exports/test_temporary_file.py::test_writing_out_of_scope_of_temporary_file_raises[record_batch0]": 0.08353341557085514, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_billing_limits": 1.6242748750373721, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_create_external_job_failure": 1.5246010413393378, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_create_external_job_failure_no_job_model": 1.5466091674752533, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_delta_wrapper_files": 5.286267667077482, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_funnels_lazy_joins_ordering": 5.913100459147245, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_make_sure_deletions_occur": 11.150703541468829, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_non_retryable_error": 1.958033083472401, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_postgres_binary_columns": 16.797705166973174, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_postgres_schema_evolution": 12.104392748791724, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_reset_pipeline": 5.128048832062632, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_sql_database_incremental_initial_value": 5.523879749700427, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_sql_database_missing_incremental_values": 5.956830501090735, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_stripe_balance_transactions": 5.813870874699205, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_stripe_charges": 4.589578499086201, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_stripe_customer": 4.362572750076652, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_stripe_invoice": 4.509636998642236, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_stripe_price": 5.30939458264038, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_stripe_product": 4.539210791699588, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_stripe_subscription": 4.738437665626407, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_brands": 4.900023497641087, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_groups": 5.594671208877116, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_organizations": 4.685648958198726, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_sla_policies": 4.527366042137146, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_ticket_events": 5.419847916811705, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_ticket_fields": 4.627956251613796, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_ticket_metric_events": 4.886973791755736, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_tickets": 5.027870250865817, + "posthog/temporal/tests/data_imports/test_end_to_end.py::test_zendesk_users": 4.612763125449419, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_build_dag_activity_select_all": 0.9429834168404341, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_build_dag_activity_select_all_ancestors": 0.99679816653952, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_build_dag_activity_select_all_descendants": 0.9696934595704079, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_build_dag_activity_select_first_children": 1.0287809995934367, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_build_dag_activity_select_first_family": 0.9535925411619246, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_build_dag_activity_select_first_parents": 0.9648109180852771, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_build_dag_activity_select_multiple_individual_models": 0.9755931249819696, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_create_table_activity": 0.23527437495067716, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_materialize_model": 3.622319916728884, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_run_dag_activity_activity_materialize_mocked[dag0]": 0.4149460010230541, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_run_dag_activity_activity_skips_if_ancestor_failed_mocked[dag0-make_fail0]": 0.22743716603145003, + "posthog/temporal/tests/data_modeling/test_run_workflow.py::test_run_workflow_with_minio_bucket": 1.8174520418979228, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_check_schedule_activity_with_missing_schema_id_and_no_schedule": 1.2111506252549589, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_check_schedule_activity_with_missing_schema_id_but_with_schedule": 1.1382090002298355, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_check_schedule_activity_with_schema_id": 1.2136627091094851, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_create_external_job_activity": 1.1460870816372335, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_create_external_job_activity_schemas_exist": 1.2621603338047862, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_create_external_job_activity_update_schemas": 1.241238876245916, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_external_data_job_workflow_with_schema": 1.7501830430701375, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_run_postgres_job": 7.868436290882528, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_run_stripe_job": 7.873119082767516, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_run_stripe_job_row_count_update": 5.072764457669109, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_update_external_job_activity": 1.2819829164072871, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_update_external_job_activity_with_non_retryable_error": 1.2455886253155768, + "posthog/temporal/tests/external_data/test_external_data_job.py::test_update_external_job_activity_with_retryable_error": 1.070303833577782, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_person_distinct_id_overrides_join_table": 5.163448833394796, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_person_distinct_id_overrides_join_with_newer_overrides_after_create": 0.1016117911785841, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_person_distinct_id_overrides_join_with_older_overrides_present": 5.341149832587689, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_create_wait_and_drop_table": 5.085728873964399, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_delete_person_overrides_mutation": 0.5270913755521178, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_delete_person_overrides_mutation_within_grace_period": 0.5688071670010686, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_delete_squashed_person_overrides_from_clickhouse_dry_run": 0.44739599945023656, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_parse_empty_mutation_counts": 0.14090379001572728, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_squash_person_overrides_workflow": 0.9760319157503545, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_squash_person_overrides_workflow_with_limited_team_ids": 1.1095701679587364, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_squash_person_overrides_workflow_with_newer_overrides": 0.9431821652688086, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation": 5.517848457675427, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_dry_run": 5.345910375006497, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_with_limited_team_ids": 5.567447667941451, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_with_newer_overrides": 5.700670208316296, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_update_events_with_person_overrides_mutation_with_older_overrides": 0.443877125158906, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs0-expected0]": 0.19121449952945113, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs1-expected1]": 0.03967591654509306, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs2-expected2]": 0.040130749344825745, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs3-expected3]": 0.03966449946165085, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids[inputs4-expected4]": 0.0401052488014102, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs0-expected0]": 0.03941770829260349, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs1-expected1]": 0.038644458167254925, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs2-expected2]": 0.03952775103971362, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs3-expected3]": 0.04000116651877761, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs4-expected4]": 0.6986601245589554, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs5-expected5]": 0.036591582000255585, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs6-expected6]": 0.035715708043426275, + "posthog/temporal/tests/persons_on_events_squash/test_squash_person_overrides_workflow.py::test_workflow_inputs_yields_partition_ids_with_offset[inputs7-expected7]": 0.7092486256733537, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data['-'\\'']": 0.0005068746395409107, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[-'']": 0.0009309994056820869, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[\\\\-'\\\\']": 0.0006110426038503647, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[a'\\\\b\\\\'c-'a\\'\\\\b\\\\\\'c']": 0.00045066699385643005, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data0-'c4c5547d-8782-4017-8eca-3ea19f4d528e']": 0.0007943743839859962, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data10-toDateTime('2023-07-14 00:00:00', 'UTC')]": 0.0005378331989049911, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data11-toDateTime('2023-07-14 00:00:00')]": 0.0005360431969165802, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data12-toDateTime64('2023-07-14 00:00:00.005555', 6, 'UTC')]": 0.00048179086297750473, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data6-('a',1,('b',2))]": 0.00045608170330524445, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data7-['a',1,['b',2]]]": 0.0005618319846689701, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data8-('; DROP TABLE events --')]": 0.0004452494904398918, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[data9-('\\'a\\'); DROP TABLE events --')]": 0.0004899580962955952, + "posthog/temporal/tests/test_clickhouse.py::test_encode_clickhouse_data[test-string-'test-string']": 0.00046279141679406166, + "posthog/temporal/tests/test_encryption_codec.py::test_payloads_are_encrypted": 0.05459183407947421, "posthog/hogql_queries/insights/funnels/test/test_funnel_trends.py::TestFunnelTrends::test_one_person_in_multiple_periods_and_windows_in_strict_funnel": 24.737237334000042, "posthog/hogql_queries/insights/funnels/test/test_funnel_trends.py::TestFunnelTrends::test_one_person_in_multiple_periods_and_windows_in_unordered_funnel": 2.1134848429999806, "posthog/hogql_queries/insights/funnels/test/test_funnel_trends.py::TestFunnelTrends::test_only_one_user_reached_one_step": 1.1428005589999657, @@ -6341,4 +6839,4 @@ "clickhouse/views/test/test_clickhouse_retention.py::RetentionTests::test_people_stable_pagination": 1.3018436139999494, "clickhouse/views/test/test_clickhouse_retention.py::RetentionTests::test_retention_aggregation_by_distinct_id_and_retrieve_people": 1.0541586720000282, "clickhouse/views/test/test_clickhouse_retention.py::RetentionTests::test_retention_test_account_filters": 1.5941789440000207 -} \ No newline at end of file +} diff --git a/docker-compose.base.yml b/docker-compose.base.yml index 137416e40422c..f582d84197a9a 100644 --- a/docker-compose.base.yml +++ b/docker-compose.base.yml @@ -285,7 +285,8 @@ services: environment: - TEMPORAL_ADDRESS=temporal:7233 - TEMPORAL_CORS_ORIGINS=http://localhost:3000 - image: temporalio/ui:2.10.3 + - TEMPORAL_CSRF_COOKIE_INSECURE=true + image: temporalio/ui:2.31.2 ports: - 8081:8080 temporal-django-worker: diff --git a/ee/api/feature_flag_role_access.py b/ee/api/feature_flag_role_access.py index 6d03c7a4f361c..01aa98a05b9db 100644 --- a/ee/api/feature_flag_role_access.py +++ b/ee/api/feature_flag_role_access.py @@ -1,10 +1,10 @@ from rest_framework import exceptions, mixins, serializers, viewsets from rest_framework.permissions import SAFE_METHODS, BasePermission -from ee.api.role import RoleSerializer +from ee.api.rbac.role import RoleSerializer from ee.models.feature_flag_role_access import FeatureFlagRoleAccess -from ee.models.organization_resource_access import OrganizationResourceAccess -from ee.models.role import Role +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess +from ee.models.rbac.role import Role from posthog.api.feature_flag import FeatureFlagSerializer from posthog.api.routing import TeamAndOrgViewSetMixin from posthog.models import FeatureFlag diff --git a/ee/api/organization_resource_access.py b/ee/api/rbac/organization_resource_access.py similarity index 92% rename from ee/api/organization_resource_access.py rename to ee/api/rbac/organization_resource_access.py index bf886566605b5..9722fc7b02eac 100644 --- a/ee/api/organization_resource_access.py +++ b/ee/api/rbac/organization_resource_access.py @@ -1,7 +1,7 @@ from rest_framework import mixins, serializers, viewsets -from ee.api.role import RolePermissions -from ee.models.organization_resource_access import OrganizationResourceAccess +from ee.api.rbac.role import RolePermissions +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess from posthog.api.routing import TeamAndOrgViewSetMixin diff --git a/ee/api/role.py b/ee/api/rbac/role.py similarity index 97% rename from ee/api/role.py rename to ee/api/rbac/role.py index 96041cd0109ef..ccf8acef1f1dc 100644 --- a/ee/api/role.py +++ b/ee/api/rbac/role.py @@ -5,8 +5,8 @@ from rest_framework.permissions import SAFE_METHODS, BasePermission from ee.models.feature_flag_role_access import FeatureFlagRoleAccess -from ee.models.organization_resource_access import OrganizationResourceAccess -from ee.models.role import Role, RoleMembership +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess +from ee.models.rbac.role import Role, RoleMembership from posthog.api.organization_member import OrganizationMemberSerializer from posthog.api.routing import TeamAndOrgViewSetMixin from posthog.api.shared import UserBasicSerializer diff --git a/ee/api/test/test_feature_flag.py b/ee/api/test/test_feature_flag.py index e3dd5849d607c..0bc7292f7a875 100644 --- a/ee/api/test/test_feature_flag.py +++ b/ee/api/test/test_feature_flag.py @@ -1,6 +1,6 @@ from ee.api.test.base import APILicensedTest -from ee.models.organization_resource_access import OrganizationResourceAccess -from ee.models.role import Role, RoleMembership +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess +from ee.models.rbac.role import Role, RoleMembership from posthog.models.feature_flag import FeatureFlag from posthog.models.organization import OrganizationMembership diff --git a/ee/api/test/test_feature_flag_role_access.py b/ee/api/test/test_feature_flag_role_access.py index 3cd4e947d90c9..d73c1c7384493 100644 --- a/ee/api/test/test_feature_flag_role_access.py +++ b/ee/api/test/test_feature_flag_role_access.py @@ -2,8 +2,8 @@ from ee.api.test.base import APILicensedTest from ee.models.feature_flag_role_access import FeatureFlagRoleAccess -from ee.models.organization_resource_access import OrganizationResourceAccess -from ee.models.role import Role +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess +from ee.models.rbac.role import Role from posthog.models.feature_flag import FeatureFlag from posthog.models.organization import OrganizationMembership from posthog.models.user import User diff --git a/ee/api/test/test_organization_resource_access.py b/ee/api/test/test_organization_resource_access.py index 9123214a092db..98206fe519f44 100644 --- a/ee/api/test/test_organization_resource_access.py +++ b/ee/api/test/test_organization_resource_access.py @@ -2,7 +2,7 @@ from rest_framework import status from ee.api.test.base import APILicensedTest -from ee.models.organization_resource_access import OrganizationResourceAccess +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess from posthog.models.organization import Organization, OrganizationMembership from posthog.test.base import QueryMatchingTest, snapshot_postgres_queries, FuzzyInt diff --git a/ee/api/test/test_role.py b/ee/api/test/test_role.py index 1a3068ff4cf4f..96503162d5fe9 100644 --- a/ee/api/test/test_role.py +++ b/ee/api/test/test_role.py @@ -2,8 +2,8 @@ from rest_framework import status from ee.api.test.base import APILicensedTest -from ee.models.organization_resource_access import OrganizationResourceAccess -from ee.models.role import Role +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess +from ee.models.rbac.role import Role from posthog.models.organization import Organization, OrganizationMembership diff --git a/ee/api/test/test_role_membership.py b/ee/api/test/test_role_membership.py index f89796d9b7c4f..c3e67cf0514d2 100644 --- a/ee/api/test/test_role_membership.py +++ b/ee/api/test/test_role_membership.py @@ -1,7 +1,7 @@ from rest_framework import status from ee.api.test.base import APILicensedTest -from ee.models.role import Role, RoleMembership +from ee.models.rbac.role import Role, RoleMembership from posthog.models.organization import Organization, OrganizationMembership from posthog.models.user import User diff --git a/ee/billing/billing_manager.py b/ee/billing/billing_manager.py index d22e4c1302d89..f28029bcaac97 100644 --- a/ee/billing/billing_manager.py +++ b/ee/billing/billing_manager.py @@ -162,6 +162,7 @@ def update_billing_organization_users(self, organization: Organization) -> None: "distinct_id", "organization_membership__level", ) + .order_by("email") # Deterministic order for tests .annotate(role=F("organization_membership__level")) .filter(role__gte=OrganizationMembership.Level.ADMIN) .values( diff --git a/ee/clickhouse/views/experiments.py b/ee/clickhouse/views/experiments.py index 6df24dc012cea..44fe8b72b5045 100644 --- a/ee/clickhouse/views/experiments.py +++ b/ee/clickhouse/views/experiments.py @@ -184,6 +184,7 @@ class Meta: "created_by", "created_at", "updated_at", + "metrics", ] read_only_fields = [ "id", diff --git a/ee/hogai/assistant.py b/ee/hogai/assistant.py index e47020fdcdf04..d01181b937c4e 100644 --- a/ee/hogai/assistant.py +++ b/ee/hogai/assistant.py @@ -4,12 +4,18 @@ from langchain_core.messages import AIMessageChunk from langfuse.callback import CallbackHandler from langgraph.graph.state import StateGraph +from pydantic import BaseModel from ee import settings -from ee.hogai.trends.nodes import CreateTrendsPlanNode, CreateTrendsPlanToolsNode, GenerateTrendsNode +from ee.hogai.trends.nodes import ( + CreateTrendsPlanNode, + CreateTrendsPlanToolsNode, + GenerateTrendsNode, + GenerateTrendsToolsNode, +) from ee.hogai.utils import AssistantNodeName, AssistantState, Conversation from posthog.models.team.team import Team -from posthog.schema import VisualizationMessage +from posthog.schema import AssistantGenerationStatusEvent, AssistantGenerationStatusType, VisualizationMessage if settings.LANGFUSE_PUBLIC_KEY: langfuse_handler = CallbackHandler( @@ -39,6 +45,13 @@ def is_message_update( return len(update) == 2 and update[0] == "messages" +def is_state_update(update: list[Any]) -> TypeGuard[tuple[Literal["updates"], AssistantState]]: + """ + Update of the state. + """ + return len(update) == 2 and update[0] == "values" + + class Assistant: _team: Team _graph: StateGraph @@ -59,6 +72,10 @@ def _compile_graph(self): generate_trends_node = GenerateTrendsNode(self._team) builder.add_node(GenerateTrendsNode.name, generate_trends_node.run) + generate_trends_tools_node = GenerateTrendsToolsNode(self._team) + builder.add_node(GenerateTrendsToolsNode.name, generate_trends_tools_node.run) + builder.add_edge(GenerateTrendsToolsNode.name, GenerateTrendsNode.name) + builder.add_edge(AssistantNodeName.START, create_trends_plan_node.name) builder.add_conditional_edges(create_trends_plan_node.name, create_trends_plan_node.router) builder.add_conditional_edges(create_trends_plan_tools_node.name, create_trends_plan_tools_node.router) @@ -66,31 +83,45 @@ def _compile_graph(self): return builder.compile() - def stream(self, conversation: Conversation) -> Generator[str, None, None]: + def stream(self, conversation: Conversation) -> Generator[BaseModel, None, None]: assistant_graph = self._compile_graph() callbacks = [langfuse_handler] if langfuse_handler else [] messages = [message.root for message in conversation.messages] + chunks = AIMessageChunk(content="") + state: AssistantState = {"messages": messages, "intermediate_steps": None, "plan": None} + generator = assistant_graph.stream( - {"messages": messages}, + state, config={"recursion_limit": 24, "callbacks": callbacks}, - stream_mode=["messages", "updates"], + stream_mode=["messages", "values", "updates"], ) chunks = AIMessageChunk(content="") # Send a chunk to establish the connection avoiding the worker's timeout. - yield "" + yield AssistantGenerationStatusEvent(type=AssistantGenerationStatusType.ACK) for update in generator: - if is_value_update(update): + if is_state_update(update): + _, new_state = update + state = new_state + + elif is_value_update(update): _, state_update = update - if ( - AssistantNodeName.GENERATE_TRENDS in state_update - and "messages" in state_update[AssistantNodeName.GENERATE_TRENDS] - ): - message = cast(VisualizationMessage, state_update[AssistantNodeName.GENERATE_TRENDS]["messages"][0]) - yield message.model_dump_json() + + if AssistantNodeName.GENERATE_TRENDS in state_update: + # Reset chunks when schema validation fails. + chunks = AIMessageChunk(content="") + + if "messages" in state_update[AssistantNodeName.GENERATE_TRENDS]: + message = cast( + VisualizationMessage, state_update[AssistantNodeName.GENERATE_TRENDS]["messages"][0] + ) + yield message + elif state_update[AssistantNodeName.GENERATE_TRENDS].get("intermediate_steps", []): + yield AssistantGenerationStatusEvent(type=AssistantGenerationStatusType.GENERATION_ERROR) + elif is_message_update(update): langchain_message, langgraph_state = update[1] if langgraph_state["langgraph_node"] == AssistantNodeName.GENERATE_TRENDS and isinstance( @@ -101,4 +132,4 @@ def stream(self, conversation: Conversation) -> Generator[str, None, None]: if parsed_message: yield VisualizationMessage( reasoning_steps=parsed_message.reasoning_steps, answer=parsed_message.answer - ).model_dump_json() + ) diff --git a/ee/hogai/trends/nodes.py b/ee/hogai/trends/nodes.py index 845c71fe4ee5e..d1819b49b705f 100644 --- a/ee/hogai/trends/nodes.py +++ b/ee/hogai/trends/nodes.py @@ -1,29 +1,37 @@ import itertools -import json import xml.etree.ElementTree as ET from functools import cached_property -from typing import Union, cast +from typing import Optional, cast from langchain.agents.format_scratchpad import format_log_to_str -from langchain.agents.output_parsers import ReActJsonSingleInputOutputParser -from langchain_core.agents import AgentAction, AgentFinish -from langchain_core.exceptions import OutputParserException +from langchain_core.agents import AgentAction from langchain_core.messages import AIMessage as LangchainAssistantMessage from langchain_core.messages import BaseMessage, merge_message_runs -from langchain_core.messages import HumanMessage as LangchainHumanMessage -from langchain_core.output_parsers import PydanticOutputParser from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate -from langchain_core.runnables import RunnableConfig, RunnableLambda +from langchain_core.runnables import RunnableConfig from langchain_openai import ChatOpenAI from pydantic import ValidationError from ee.hogai.hardcoded_definitions import hardcoded_prop_defs +from ee.hogai.trends.parsers import ( + PydanticOutputParserException, + ReActParserException, + ReActParserMissingActionException, + parse_generated_trends_output, + parse_react_agent_output, +) from ee.hogai.trends.prompts import ( react_definitions_prompt, react_follow_up_prompt, + react_malformed_json_prompt, + react_missing_action_correction_prompt, + react_missing_action_prompt, + react_pydantic_validation_exception_prompt, react_scratchpad_prompt, react_system_prompt, react_user_prompt, + trends_failover_output_prompt, + trends_failover_prompt, trends_group_mapping_prompt, trends_new_plan_prompt, trends_plan_prompt, @@ -35,7 +43,7 @@ TrendsAgentToolkit, TrendsAgentToolModel, ) -from ee.hogai.trends.utils import GenerateTrendOutputModel +from ee.hogai.trends.utils import GenerateTrendOutputModel, filter_trends_conversation from ee.hogai.utils import ( AssistantNode, AssistantNodeName, @@ -45,7 +53,12 @@ from posthog.hogql_queries.ai.team_taxonomy_query_runner import TeamTaxonomyQueryRunner from posthog.hogql_queries.query_runner import ExecutionMode from posthog.models.group_type_mapping import GroupTypeMapping -from posthog.schema import CachedTeamTaxonomyQueryResponse, HumanMessage, TeamTaxonomyQuery, VisualizationMessage +from posthog.schema import ( + CachedTeamTaxonomyQueryResponse, + FailureMessage, + TeamTaxonomyQuery, + VisualizationMessage, +) class CreateTrendsPlanNode(AssistantNode): @@ -75,40 +88,42 @@ def run(self, state: AssistantState, config: RunnableConfig): ) toolkit = TrendsAgentToolkit(self._team) - output_parser = ReActJsonSingleInputOutputParser() merger = merge_message_runs() - agent = prompt | merger | self._model | output_parser + agent = prompt | merger | self._model | parse_react_agent_output try: result = cast( - Union[AgentAction, AgentFinish], + AgentAction, agent.invoke( { "tools": toolkit.render_text_description(), "tool_names": ", ".join([t["name"] for t in toolkit.tools]), - "agent_scratchpad": format_log_to_str( - [(action, output) for action, output in intermediate_steps if output is not None] - ), + "agent_scratchpad": self._get_agent_scratchpad(intermediate_steps), }, config, ), ) - except OutputParserException as e: - text = str(e) - if e.send_to_llm: - observation = str(e.observation) - text = str(e.llm_output) + except ReActParserException as e: + if isinstance(e, ReActParserMissingActionException): + # When the agent doesn't output the "Action:" block, we need to correct the log and append the action block, + # so that it has a higher chance to recover. + corrected_log = str( + ChatPromptTemplate.from_template(react_missing_action_correction_prompt, template_format="mustache") + .format_messages(output=e.llm_output)[0] + .content + ) + result = AgentAction( + "handle_incorrect_response", + react_missing_action_prompt, + corrected_log, + ) else: - observation = "Invalid or incomplete response. You must use the provided tools and output JSON to answer the user's question." - result = AgentAction("handle_incorrect_response", observation, text) - - if isinstance(result, AgentFinish): - # Exceptional case - return { - "plan": result.log, - "intermediate_steps": None, - } + result = AgentAction( + "handle_incorrect_response", + react_malformed_json_prompt, + e.llm_output, + ) return { "intermediate_steps": [*intermediate_steps, (result, None)], @@ -170,29 +185,44 @@ def _reconstruct_conversation(self, state: AssistantState) -> list[BaseMessage]: """ Reconstruct the conversation for the agent. On this step we only care about previously asked questions and generated plans. All other messages are filtered out. """ - messages = state.get("messages", []) - if len(messages) == 0: + human_messages, visualization_messages = filter_trends_conversation(state.get("messages", [])) + + if not human_messages: return [] - conversation = [ - HumanMessagePromptTemplate.from_template(react_user_prompt, template_format="mustache").format( - question=messages[0].content if isinstance(messages[0], HumanMessage) else "" - ) - ] + conversation = [] - for message in messages[1:]: - if isinstance(message, HumanMessage): - conversation.append( - HumanMessagePromptTemplate.from_template( - react_follow_up_prompt, - template_format="mustache", - ).format(feedback=message.content) - ) - elif isinstance(message, VisualizationMessage): - conversation.append(LangchainAssistantMessage(content=message.plan or "")) + for idx, messages in enumerate(itertools.zip_longest(human_messages, visualization_messages)): + human_message, viz_message = messages + + if human_message: + if idx == 0: + conversation.append( + HumanMessagePromptTemplate.from_template(react_user_prompt, template_format="mustache").format( + question=human_message.content + ) + ) + else: + conversation.append( + HumanMessagePromptTemplate.from_template( + react_follow_up_prompt, + template_format="mustache", + ).format(feedback=human_message.content) + ) + + if viz_message: + conversation.append(LangchainAssistantMessage(content=viz_message.plan or "")) return conversation + def _get_agent_scratchpad(self, scratchpad: list[tuple[AgentAction, str | None]]) -> str: + actions = [] + for action, observation in scratchpad: + if observation is None: + continue + actions.append((action, observation)) + return format_log_to_str(actions) + class CreateTrendsPlanToolsNode(AssistantNode): name = AssistantNodeName.CREATE_TRENDS_PLAN_TOOLS @@ -205,8 +235,12 @@ def run(self, state: AssistantState, config: RunnableConfig): try: input = TrendsAgentToolModel.model_validate({"name": action.tool, "arguments": action.tool_input}).root except ValidationError as e: - feedback = f"Invalid tool call. Pydantic exception: {e.errors(include_url=False)}" - return {"intermediate_steps": [*intermediate_steps, (action, feedback)]} + observation = ( + ChatPromptTemplate.from_template(react_pydantic_validation_exception_prompt, template_format="mustache") + .format_messages(exception=e.errors(include_url=False))[0] + .content + ) + return {"intermediate_steps": [*intermediate_steps[:-1], (action, observation)]} # The plan has been found. Move to the generation. if input.name == "final_answer": @@ -240,30 +274,38 @@ class GenerateTrendsNode(AssistantNode): def run(self, state: AssistantState, config: RunnableConfig): generated_plan = state.get("plan", "") + intermediate_steps = state.get("intermediate_steps") or [] + validation_error_message = intermediate_steps[-1][1] if intermediate_steps else None trends_generation_prompt = ChatPromptTemplate.from_messages( [ ("system", trends_system_prompt), ], template_format="mustache", - ) + self._reconstruct_conversation(state) + ) + self._reconstruct_conversation(state, validation_error_message=validation_error_message) merger = merge_message_runs() - chain = ( - trends_generation_prompt - | merger - | self._model - # Result from structured output is a parsed dict. Convert to a string since the output parser expects it. - | RunnableLambda(lambda x: json.dumps(x)) - # Validate a string input. - | PydanticOutputParser[GenerateTrendOutputModel](pydantic_object=GenerateTrendOutputModel) - ) + chain = trends_generation_prompt | merger | self._model | parse_generated_trends_output try: message: GenerateTrendOutputModel = chain.invoke({}, config) - except OutputParserException: + except PydanticOutputParserException as e: + # Generation step is expensive. After a second unsuccessful attempt, it's better to send a failure message. + if len(intermediate_steps) >= 2: + return { + "messages": [ + FailureMessage( + content="Oops! It looks like I’m having trouble generating this trends insight. Could you please try again?" + ) + ], + "intermediate_steps": None, + } + return { - "messages": [VisualizationMessage(plan=generated_plan, reasoning_steps=["Schema validation failed"])] + "intermediate_steps": [ + *intermediate_steps, + (AgentAction("handle_incorrect_response", e.llm_output, e.validation_message), None), + ], } return { @@ -273,11 +315,12 @@ def run(self, state: AssistantState, config: RunnableConfig): reasoning_steps=message.reasoning_steps, answer=message.answer, ) - ] + ], + "intermediate_steps": None, } def router(self, state: AssistantState): - if state.get("tool_argument") is not None: + if state.get("intermediate_steps") is not None: return AssistantNodeName.GENERATE_TRENDS_TOOLS return AssistantNodeName.END @@ -301,7 +344,9 @@ def _group_mapping_prompt(self) -> str: ) return ET.tostring(root, encoding="unicode") - def _reconstruct_conversation(self, state: AssistantState) -> list[BaseMessage]: + def _reconstruct_conversation( + self, state: AssistantState, validation_error_message: Optional[str] = None + ) -> list[BaseMessage]: """ Reconstruct the conversation for the generation. Take all previously generated questions, plans, and schemas, and return the history. """ @@ -317,22 +362,7 @@ def _reconstruct_conversation(self, state: AssistantState) -> list[BaseMessage]: ) ] - stack: list[LangchainHumanMessage] = [] - human_messages: list[LangchainHumanMessage] = [] - visualization_messages: list[VisualizationMessage] = [] - - for message in messages: - if isinstance(message, HumanMessage): - stack.append(LangchainHumanMessage(content=message.content)) - elif isinstance(message, VisualizationMessage) and message.answer: - if stack: - human_messages += merge_message_runs(stack) - stack = [] - visualization_messages.append(message) - - if stack: - human_messages += merge_message_runs(stack) - + human_messages, visualization_messages = filter_trends_conversation(messages) first_ai_message = True for human_message, ai_message in itertools.zip_longest(human_messages, visualization_messages): @@ -364,6 +394,13 @@ def _reconstruct_conversation(self, state: AssistantState) -> list[BaseMessage]: LangchainAssistantMessage(content=ai_message.answer.model_dump_json() if ai_message.answer else "") ) + if validation_error_message: + conversation.append( + HumanMessagePromptTemplate.from_template(trends_failover_prompt, template_format="mustache").format( + validation_error_message=validation_error_message + ) + ) + return conversation @classmethod @@ -382,4 +419,20 @@ class GenerateTrendsToolsNode(AssistantNode): name = AssistantNodeName.GENERATE_TRENDS_TOOLS def run(self, state: AssistantState, config: RunnableConfig): - return state + intermediate_steps = state.get("intermediate_steps", []) + if not intermediate_steps: + return state + + action, _ = intermediate_steps[-1] + prompt = ( + ChatPromptTemplate.from_template(trends_failover_output_prompt, template_format="mustache") + .format_messages(output=action.tool_input, exception_message=action.log)[0] + .content + ) + + return { + "intermediate_steps": [ + *intermediate_steps[:-1], + (action, prompt), + ] + } diff --git a/ee/hogai/trends/parsers.py b/ee/hogai/trends/parsers.py new file mode 100644 index 0000000000000..e66f974576939 --- /dev/null +++ b/ee/hogai/trends/parsers.py @@ -0,0 +1,80 @@ +import json +import re + +from langchain_core.agents import AgentAction +from langchain_core.messages import AIMessage as LangchainAIMessage +from pydantic import ValidationError + +from ee.hogai.trends.utils import GenerateTrendOutputModel + + +class ReActParserException(ValueError): + llm_output: str + + def __init__(self, llm_output: str): + super().__init__(llm_output) + self.llm_output = llm_output + + +class ReActParserMalformedJsonException(ReActParserException): + pass + + +class ReActParserMissingActionException(ReActParserException): + """ + The ReAct agent didn't output the "Action:" block. + """ + + pass + + +ACTION_LOG_PREFIX = "Action:" + + +def parse_react_agent_output(message: LangchainAIMessage) -> AgentAction: + """ + A ReAct agent must output in this format: + + Some thoughts... + Action: + ```json + {"action": "action_name", "action_input": "action_input"} + ``` + """ + text = str(message.content) + if ACTION_LOG_PREFIX not in text: + raise ReActParserMissingActionException(text) + found = re.compile(r"^.*?`{3}(?:json)?\n?(.*?)`{3}.*?$", re.DOTALL).search(text) + if not found: + # JSON not found. + raise ReActParserMalformedJsonException(text) + try: + action = found.group(1).strip() + response = json.loads(action) + is_complete = "action" in response and "action_input" in response + except Exception: + # JSON is malformed or has a wrong type. + raise ReActParserMalformedJsonException(text) + if not is_complete: + # JSON does not contain an action. + raise ReActParserMalformedJsonException(text) + return AgentAction(response["action"], response.get("action_input", {}), text) + + +class PydanticOutputParserException(ValueError): + llm_output: str + """Serialized LLM output.""" + validation_message: str + """Pydantic validation error message.""" + + def __init__(self, llm_output: str, validation_message: str): + super().__init__(llm_output) + self.llm_output = llm_output + self.validation_message = validation_message + + +def parse_generated_trends_output(output: dict) -> GenerateTrendOutputModel: + try: + return GenerateTrendOutputModel.model_validate(output) + except ValidationError as e: + raise PydanticOutputParserException(llm_output=json.dumps(output), validation_message=e.json(include_url=False)) diff --git a/ee/hogai/trends/prompts.py b/ee/hogai/trends/prompts.py index c53ae5d3453a5..2543b1efc26e0 100644 --- a/ee/hogai/trends/prompts.py +++ b/ee/hogai/trends/prompts.py @@ -178,6 +178,29 @@ Improve the previously generated plan based on the feedback: {{feedback}} """ +react_missing_action_prompt = """ +Your previous answer didn't output the `Action:` block. You must always follow the format described in the system prompt. +""" + +react_missing_action_correction_prompt = """ +{{output}} +Action: I didn't output the `Action:` block. +""" + +react_malformed_json_prompt = """ +Your previous answer had a malformed JSON. You must return a correct JSON response containing the `action` and `action_input` fields. +""" + +react_pydantic_validation_exception_prompt = """ +The action input you previously provided didn't pass the validation and raised a Pydantic validation exception. + + +{{exception}} + + +You must fix the exception and try again. +""" + trends_system_prompt = """ You're a recognized head of product growth with the skills of a top-tier data engineer. Your task is to implement queries of trends insights for customers using a JSON schema. You will be given a plan describing series and breakdowns. Answer the user's questions as best you can. @@ -269,3 +292,23 @@ trends_question_prompt = """ Answer to this question: {{question}} """ + +trends_failover_output_prompt = """ +Generation output: +``` +{{output}} +``` + +Exception message: +``` +{{exception_message}} +``` +""" + +trends_failover_prompt = """ +The result of the previous generation raised the Pydantic validation exception. + +{{validation_error_message}} + +Fix the error and return the correct response. +""" diff --git a/ee/hogai/trends/test/test_nodes.py b/ee/hogai/trends/test/test_nodes.py index dc297570c1fd1..1e89c45458a9a 100644 --- a/ee/hogai/trends/test/test_nodes.py +++ b/ee/hogai/trends/test/test_nodes.py @@ -1,7 +1,26 @@ +import json +from unittest.mock import patch + from django.test import override_settings +from langchain_core.agents import AgentAction +from langchain_core.messages import AIMessage as LangchainAIMessage +from langchain_core.runnables import RunnableLambda -from ee.hogai.trends.nodes import CreateTrendsPlanNode, GenerateTrendsNode -from posthog.schema import AssistantMessage, ExperimentalAITrendsQuery, HumanMessage, VisualizationMessage +from ee.hogai.trends.nodes import ( + CreateTrendsPlanNode, + CreateTrendsPlanToolsNode, + GenerateTrendsNode, + GenerateTrendsToolsNode, +) +from ee.hogai.trends.utils import GenerateTrendOutputModel +from ee.hogai.utils import AssistantNodeName +from posthog.schema import ( + AssistantMessage, + ExperimentalAITrendsQuery, + FailureMessage, + HumanMessage, + VisualizationMessage, +) from posthog.test.base import APIBaseTest, ClickhouseTestMixin, _create_event, _create_person @@ -68,6 +87,22 @@ def test_agent_reconstructs_conversation_and_omits_unknown_messages(self): self.assertIn("Text", history[0].content) self.assertNotIn("{{question}}", history[0].content) + def test_agent_reconstructs_conversation_with_failures(self): + node = CreateTrendsPlanNode(self.team) + history = node._reconstruct_conversation( + { + "messages": [ + HumanMessage(content="Text"), + FailureMessage(content="Error"), + HumanMessage(content="Text"), + ] + } + ) + self.assertEqual(len(history), 1) + self.assertEqual(history[0].type, "human") + self.assertIn("Text", history[0].content) + self.assertNotIn("{{question}}", history[0].content) + def test_agent_filters_out_low_count_events(self): _create_person(distinct_ids=["test"], team=self.team) for i in range(26): @@ -86,12 +121,101 @@ def test_agent_preserves_low_count_events_for_smaller_teams(self): self.assertIn("distinctevent", node._events_prompt) self.assertIn("all events", node._events_prompt) + def test_agent_scratchpad(self): + node = CreateTrendsPlanNode(self.team) + scratchpad = [ + (AgentAction(tool="test1", tool_input="input1", log="log1"), "test"), + (AgentAction(tool="test2", tool_input="input2", log="log2"), None), + (AgentAction(tool="test3", tool_input="input3", log="log3"), ""), + ] + prompt = node._get_agent_scratchpad(scratchpad) + self.assertIn("log1", prompt) + self.assertIn("log3", prompt) + + def test_agent_handles_output_without_action_block(self): + with patch( + "ee.hogai.trends.nodes.CreateTrendsPlanNode._model", + return_value=RunnableLambda(lambda _: LangchainAIMessage(content="I don't want to output an action.")), + ): + node = CreateTrendsPlanNode(self.team) + state_update = node.run({"messages": [HumanMessage(content="Question")]}, {}) + self.assertEqual(len(state_update["intermediate_steps"]), 1) + action, obs = state_update["intermediate_steps"][0] + self.assertIsNone(obs) + self.assertIn("I don't want to output an action.", action.log) + self.assertIn("Action:", action.log) + self.assertIn("Action:", action.tool_input) + + def test_agent_handles_output_with_malformed_json(self): + with patch( + "ee.hogai.trends.nodes.CreateTrendsPlanNode._model", + return_value=RunnableLambda(lambda _: LangchainAIMessage(content="Thought.\nAction: abc")), + ): + node = CreateTrendsPlanNode(self.team) + state_update = node.run({"messages": [HumanMessage(content="Question")]}, {}) + self.assertEqual(len(state_update["intermediate_steps"]), 1) + action, obs = state_update["intermediate_steps"][0] + self.assertIsNone(obs) + self.assertIn("Thought.\nAction: abc", action.log) + self.assertIn("action", action.tool_input) + self.assertIn("action_input", action.tool_input) + + +@override_settings(IN_UNIT_TESTING=True) +class TestCreateTrendsPlanToolsNode(ClickhouseTestMixin, APIBaseTest): + def test_node_handles_action_name_validation_error(self): + state = { + "intermediate_steps": [(AgentAction(tool="does not exist", tool_input="input", log="log"), "test")], + "messages": [], + } + node = CreateTrendsPlanToolsNode(self.team) + state_update = node.run(state, {}) + self.assertEqual(len(state_update["intermediate_steps"]), 1) + action, observation = state_update["intermediate_steps"][0] + self.assertIsNotNone(observation) + self.assertIn("", observation) + + def test_node_handles_action_input_validation_error(self): + state = { + "intermediate_steps": [ + (AgentAction(tool="retrieve_entity_property_values", tool_input="input", log="log"), "test") + ], + "messages": [], + } + node = CreateTrendsPlanToolsNode(self.team) + state_update = node.run(state, {}) + self.assertEqual(len(state_update["intermediate_steps"]), 1) + action, observation = state_update["intermediate_steps"][0] + self.assertIsNotNone(observation) + self.assertIn("", observation) + @override_settings(IN_UNIT_TESTING=True) class TestGenerateTrendsNode(ClickhouseTestMixin, APIBaseTest): def setUp(self): self.schema = ExperimentalAITrendsQuery(series=[]) + def test_node_runs(self): + node = GenerateTrendsNode(self.team) + with patch("ee.hogai.trends.nodes.GenerateTrendsNode._model") as generator_model_mock: + generator_model_mock.return_value = RunnableLambda( + lambda _: GenerateTrendOutputModel(reasoning_steps=["step"], answer=self.schema).model_dump() + ) + new_state = node.run( + { + "messages": [HumanMessage(content="Text")], + "plan": "Plan", + }, + {}, + ) + self.assertEqual( + new_state, + { + "messages": [VisualizationMessage(answer=self.schema, plan="Plan", reasoning_steps=["step"])], + "intermediate_steps": None, + }, + ) + def test_agent_reconstructs_conversation(self): node = GenerateTrendsNode(self.team) history = node._reconstruct_conversation({"messages": [HumanMessage(content="Text")]}) @@ -203,3 +327,145 @@ def test_agent_reconstructs_conversation_and_merges_messages(self): self.assertIn("Answer to this question:", history[5].content) self.assertNotIn("{{question}}", history[5].content) self.assertIn("Follow\nUp", history[5].content) + + def test_failover_with_incorrect_schema(self): + node = GenerateTrendsNode(self.team) + with patch("ee.hogai.trends.nodes.GenerateTrendsNode._model") as generator_model_mock: + schema = GenerateTrendOutputModel(reasoning_steps=[], answer=None).model_dump() + # Emulate an incorrect JSON. It should be an object. + schema["answer"] = [] + generator_model_mock.return_value = RunnableLambda(lambda _: json.dumps(schema)) + + new_state = node.run({"messages": [HumanMessage(content="Text")]}, {}) + self.assertIn("intermediate_steps", new_state) + self.assertEqual(len(new_state["intermediate_steps"]), 1) + + new_state = node.run( + { + "messages": [HumanMessage(content="Text")], + "intermediate_steps": [(AgentAction(tool="", tool_input="", log="exception"), "exception")], + }, + {}, + ) + self.assertIn("intermediate_steps", new_state) + self.assertEqual(len(new_state["intermediate_steps"]), 2) + + def test_node_leaves_failover(self): + node = GenerateTrendsNode(self.team) + with patch( + "ee.hogai.trends.nodes.GenerateTrendsNode._model", + return_value=RunnableLambda( + lambda _: GenerateTrendOutputModel(reasoning_steps=[], answer=self.schema).model_dump() + ), + ): + new_state = node.run( + { + "messages": [HumanMessage(content="Text")], + "intermediate_steps": [(AgentAction(tool="", tool_input="", log="exception"), "exception")], + }, + {}, + ) + self.assertIsNone(new_state["intermediate_steps"]) + + new_state = node.run( + { + "messages": [HumanMessage(content="Text")], + "intermediate_steps": [ + (AgentAction(tool="", tool_input="", log="exception"), "exception"), + (AgentAction(tool="", tool_input="", log="exception"), "exception"), + ], + }, + {}, + ) + self.assertIsNone(new_state["intermediate_steps"]) + + def test_node_leaves_failover_after_second_unsuccessful_attempt(self): + node = GenerateTrendsNode(self.team) + with patch("ee.hogai.trends.nodes.GenerateTrendsNode._model") as generator_model_mock: + schema = GenerateTrendOutputModel(reasoning_steps=[], answer=None).model_dump() + # Emulate an incorrect JSON. It should be an object. + schema["answer"] = [] + generator_model_mock.return_value = RunnableLambda(lambda _: json.dumps(schema)) + + new_state = node.run( + { + "messages": [HumanMessage(content="Text")], + "intermediate_steps": [ + (AgentAction(tool="", tool_input="", log="exception"), "exception"), + (AgentAction(tool="", tool_input="", log="exception"), "exception"), + ], + }, + {}, + ) + self.assertIsNone(new_state["intermediate_steps"]) + self.assertEqual(len(new_state["messages"]), 1) + self.assertIsInstance(new_state["messages"][0], FailureMessage) + + def test_agent_reconstructs_conversation_with_failover(self): + action = AgentAction(tool="fix", tool_input="validation error", log="exception") + node = GenerateTrendsNode(self.team) + history = node._reconstruct_conversation( + { + "messages": [HumanMessage(content="Text")], + "plan": "randomplan", + "intermediate_steps": [(action, "uniqexception")], + }, + "uniqexception", + ) + self.assertEqual(len(history), 4) + self.assertEqual(history[0].type, "human") + self.assertIn("mapping", history[0].content) + self.assertEqual(history[1].type, "human") + self.assertIn("the plan", history[1].content) + self.assertNotIn("{{plan}}", history[1].content) + self.assertIn("randomplan", history[1].content) + self.assertEqual(history[2].type, "human") + self.assertIn("Answer to this question:", history[2].content) + self.assertNotIn("{{question}}", history[2].content) + self.assertIn("Text", history[2].content) + self.assertEqual(history[3].type, "human") + self.assertIn("Pydantic", history[3].content) + self.assertIn("uniqexception", history[3].content) + + def test_agent_reconstructs_conversation_with_failed_messages(self): + node = GenerateTrendsNode(self.team) + history = node._reconstruct_conversation( + { + "messages": [ + HumanMessage(content="Text"), + FailureMessage(content="Error"), + HumanMessage(content="Text"), + ], + "plan": "randomplan", + }, + ) + self.assertEqual(len(history), 3) + self.assertEqual(history[0].type, "human") + self.assertIn("mapping", history[0].content) + self.assertEqual(history[1].type, "human") + self.assertIn("the plan", history[1].content) + self.assertNotIn("{{plan}}", history[1].content) + self.assertIn("randomplan", history[1].content) + self.assertEqual(history[2].type, "human") + self.assertIn("Answer to this question:", history[2].content) + self.assertNotIn("{{question}}", history[2].content) + self.assertIn("Text", history[2].content) + + def test_router(self): + node = GenerateTrendsNode(self.team) + state = node.router({"messages": [], "intermediate_steps": None}) + self.assertEqual(state, AssistantNodeName.END) + state = node.router( + {"messages": [], "intermediate_steps": [(AgentAction(tool="", tool_input="", log=""), None)]} + ) + self.assertEqual(state, AssistantNodeName.GENERATE_TRENDS_TOOLS) + + +class TestGenerateTrendsToolsNode(ClickhouseTestMixin, APIBaseTest): + def test_tools_node(self): + node = GenerateTrendsToolsNode(self.team) + action = AgentAction(tool="fix", tool_input="validationerror", log="pydanticexception") + state = node.run({"messages": [], "intermediate_steps": [(action, None)]}, {}) + self.assertIsNotNone("validationerror", state["intermediate_steps"][0][1]) + self.assertIn("validationerror", state["intermediate_steps"][0][1]) + self.assertIn("pydanticexception", state["intermediate_steps"][0][1]) diff --git a/ee/hogai/trends/test/test_parsers.py b/ee/hogai/trends/test/test_parsers.py new file mode 100644 index 0000000000000..c32ff7f146b4d --- /dev/null +++ b/ee/hogai/trends/test/test_parsers.py @@ -0,0 +1,78 @@ +from langchain_core.messages import AIMessage as LangchainAIMessage + +from ee.hogai.trends.parsers import ( + ReActParserMalformedJsonException, + ReActParserMissingActionException, + parse_react_agent_output, +) +from posthog.test.base import BaseTest + + +class TestParsers(BaseTest): + def test_parse_react_agent_output(self): + res = parse_react_agent_output( + LangchainAIMessage( + content=""" + Some thoughts... + Action: + ```json + {"action": "action_name", "action_input": "action_input"} + ``` + """ + ) + ) + self.assertEqual(res.tool, "action_name") + self.assertEqual(res.tool_input, "action_input") + + res = parse_react_agent_output( + LangchainAIMessage( + content=""" + Some thoughts... + Action: + ``` + {"action": "tool", "action_input": {"key": "value"}} + ``` + """ + ) + ) + self.assertEqual(res.tool, "tool") + self.assertEqual(res.tool_input, {"key": "value"}) + + self.assertRaises( + ReActParserMissingActionException, parse_react_agent_output, LangchainAIMessage(content="Some thoughts...") + ) + self.assertRaises( + ReActParserMalformedJsonException, + parse_react_agent_output, + LangchainAIMessage(content="Some thoughts...\nAction: abc"), + ) + self.assertRaises( + ReActParserMalformedJsonException, + parse_react_agent_output, + LangchainAIMessage(content="Some thoughts...\nAction:"), + ) + self.assertRaises( + ReActParserMalformedJsonException, + parse_react_agent_output, + LangchainAIMessage(content="Some thoughts...\nAction: {}"), + ) + self.assertRaises( + ReActParserMalformedJsonException, + parse_react_agent_output, + LangchainAIMessage(content="Some thoughts...\nAction:\n```\n{}\n```"), + ) + self.assertRaises( + ReActParserMalformedJsonException, + parse_react_agent_output, + LangchainAIMessage(content="Some thoughts...\nAction:\n```\n{not a json}\n```"), + ) + self.assertRaises( + ReActParserMalformedJsonException, + parse_react_agent_output, + LangchainAIMessage(content='Some thoughts...\nAction:\n```\n{"action":"tool"}\n```'), + ) + self.assertRaises( + ReActParserMalformedJsonException, + parse_react_agent_output, + LangchainAIMessage(content='Some thoughts...\nAction:\n```\n{"action_input":"input"}\n```'), + ) diff --git a/ee/hogai/trends/test/test_utils.py b/ee/hogai/trends/test/test_utils.py new file mode 100644 index 0000000000000..de9b8733129ec --- /dev/null +++ b/ee/hogai/trends/test/test_utils.py @@ -0,0 +1,39 @@ +from langchain_core.messages import HumanMessage as LangchainHumanMessage + +from ee.hogai.trends import utils +from posthog.schema import ExperimentalAITrendsQuery, FailureMessage, HumanMessage, VisualizationMessage +from posthog.test.base import BaseTest + + +class TestTrendsUtils(BaseTest): + def test_merge_human_messages(self): + res = utils.merge_human_messages( + [ + LangchainHumanMessage(content="Text"), + LangchainHumanMessage(content="Text"), + LangchainHumanMessage(content="Te"), + LangchainHumanMessage(content="xt"), + ] + ) + self.assertEqual(len(res), 1) + self.assertEqual(res, [LangchainHumanMessage(content="Text\nTe\nxt")]) + + def test_filter_trends_conversation(self): + human_messages, visualization_messages = utils.filter_trends_conversation( + [ + HumanMessage(content="Text"), + FailureMessage(content="Error"), + HumanMessage(content="Text"), + VisualizationMessage(answer=ExperimentalAITrendsQuery(series=[]), plan="plan"), + HumanMessage(content="Text2"), + VisualizationMessage(answer=None, plan="plan"), + ] + ) + self.assertEqual(len(human_messages), 2) + self.assertEqual(len(visualization_messages), 1) + self.assertEqual( + human_messages, [LangchainHumanMessage(content="Text"), LangchainHumanMessage(content="Text2")] + ) + self.assertEqual( + visualization_messages, [VisualizationMessage(answer=ExperimentalAITrendsQuery(series=[]), plan="plan")] + ) diff --git a/ee/hogai/trends/utils.py b/ee/hogai/trends/utils.py index 080f85f0256d0..5e1a8052707c8 100644 --- a/ee/hogai/trends/utils.py +++ b/ee/hogai/trends/utils.py @@ -1,10 +1,53 @@ +from collections.abc import Sequence from typing import Optional +from langchain_core.messages import HumanMessage as LangchainHumanMessage +from langchain_core.messages import merge_message_runs from pydantic import BaseModel -from posthog.schema import ExperimentalAITrendsQuery +from ee.hogai.utils import AssistantMessageUnion +from posthog.schema import ExperimentalAITrendsQuery, HumanMessage, VisualizationMessage class GenerateTrendOutputModel(BaseModel): reasoning_steps: Optional[list[str]] = None answer: Optional[ExperimentalAITrendsQuery] = None + + +def merge_human_messages(messages: list[LangchainHumanMessage]) -> list[LangchainHumanMessage]: + """ + Filters out duplicated human messages and merges them into one message. + """ + contents = set() + filtered_messages = [] + for message in messages: + if message.content in contents: + continue + contents.add(message.content) + filtered_messages.append(message) + return merge_message_runs(filtered_messages) + + +def filter_trends_conversation( + messages: Sequence[AssistantMessageUnion], +) -> tuple[list[LangchainHumanMessage], list[VisualizationMessage]]: + """ + Splits, filters and merges the message history to be consumable by agents. + """ + stack: list[LangchainHumanMessage] = [] + human_messages: list[LangchainHumanMessage] = [] + visualization_messages: list[VisualizationMessage] = [] + + for message in messages: + if isinstance(message, HumanMessage): + stack.append(LangchainHumanMessage(content=message.content)) + elif isinstance(message, VisualizationMessage) and message.answer: + if stack: + human_messages += merge_human_messages(stack) + stack = [] + visualization_messages.append(message) + + if stack: + human_messages += merge_human_messages(stack) + + return human_messages, visualization_messages diff --git a/ee/hogai/utils.py b/ee/hogai/utils.py index 65de9303b3ffc..70d1ea969621a 100644 --- a/ee/hogai/utils.py +++ b/ee/hogai/utils.py @@ -10,9 +10,9 @@ from pydantic import BaseModel, Field from posthog.models.team.team import Team -from posthog.schema import AssistantMessage, HumanMessage, RootAssistantMessage, VisualizationMessage +from posthog.schema import AssistantMessage, FailureMessage, HumanMessage, RootAssistantMessage, VisualizationMessage -AssistantMessageUnion = Union[AssistantMessage, HumanMessage, VisualizationMessage] +AssistantMessageUnion = Union[AssistantMessage, HumanMessage, VisualizationMessage, FailureMessage] class Conversation(BaseModel): @@ -24,7 +24,6 @@ class AssistantState(TypedDict): messages: Annotated[Sequence[AssistantMessageUnion], operator.add] intermediate_steps: Optional[list[tuple[AgentAction, Optional[str]]]] plan: Optional[str] - tool_argument: Optional[str] class AssistantNodeName(StrEnum): diff --git a/ee/models/__init__.py b/ee/models/__init__.py index fd87f76bd54eb..ff5a8fe2dff40 100644 --- a/ee/models/__init__.py +++ b/ee/models/__init__.py @@ -5,7 +5,7 @@ from .hook import Hook from .license import License from .property_definition import EnterprisePropertyDefinition -from .role import Role, RoleMembership +from .rbac.role import Role, RoleMembership __all__ = [ "EnterpriseEventDefinition", diff --git a/ee/models/organization_resource_access.py b/ee/models/rbac/organization_resource_access.py similarity index 95% rename from ee/models/organization_resource_access.py rename to ee/models/rbac/organization_resource_access.py index 924b3e9db2855..de4c86d95a8bc 100644 --- a/ee/models/organization_resource_access.py +++ b/ee/models/rbac/organization_resource_access.py @@ -2,6 +2,8 @@ from posthog.models.organization import Organization +# NOTE: This will be deprecated in favour of the AccessControl model + class OrganizationResourceAccess(models.Model): class AccessLevel(models.IntegerChoices): diff --git a/ee/models/role.py b/ee/models/rbac/role.py similarity index 95% rename from ee/models/role.py rename to ee/models/rbac/role.py index f37170818dbc3..97201835adb1a 100644 --- a/ee/models/role.py +++ b/ee/models/rbac/role.py @@ -1,6 +1,6 @@ from django.db import models -from ee.models.organization_resource_access import OrganizationResourceAccess +from ee.models.rbac.organization_resource_access import OrganizationResourceAccess from posthog.models.utils import UUIDModel diff --git a/ee/urls.py b/ee/urls.py index f0cf168acffb0..7c722bc31852f 100644 --- a/ee/urls.py +++ b/ee/urls.py @@ -6,6 +6,7 @@ from django.urls.conf import path from ee.api import integration +from .api.rbac import organization_resource_access, role from .api import ( authentication, @@ -15,8 +16,6 @@ feature_flag_role_access, hooks, license, - organization_resource_access, - role, sentry_stats, subscription, ) @@ -49,6 +48,7 @@ def extend_api_router() -> None: "organization_role_memberships", ["organization_id", "role_id"], ) + # Start: routes to be deprecated project_feature_flags_router.register( r"role_access", feature_flag_role_access.FeatureFlagRoleAccessViewSet, @@ -61,6 +61,7 @@ def extend_api_router() -> None: "organization_resource_access", ["organization_id"], ) + # End: routes to be deprecated register_grandfathered_environment_nested_viewset(r"hooks", hooks.HookViewSet, "environment_hooks", ["team_id"]) register_grandfathered_environment_nested_viewset( r"explicit_members", diff --git a/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--dark.png b/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--dark.png index d6fe88cab16e5..eedf3e01916a0 100644 Binary files a/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--dark.png and b/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--dark.png differ diff --git a/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--light.png b/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--light.png index 50e2dea81e948..c19e174167b7c 100644 Binary files a/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--light.png and b/frontend/__snapshots__/scenes-app-max-ai--empty-thread-loading--light.png differ diff --git a/frontend/__snapshots__/scenes-app-max-ai--generation-failure-thread--dark.png b/frontend/__snapshots__/scenes-app-max-ai--generation-failure-thread--dark.png new file mode 100644 index 0000000000000..84a2a7828cdd5 Binary files /dev/null and b/frontend/__snapshots__/scenes-app-max-ai--generation-failure-thread--dark.png differ diff --git a/frontend/__snapshots__/scenes-app-max-ai--generation-failure-thread--light.png b/frontend/__snapshots__/scenes-app-max-ai--generation-failure-thread--light.png new file mode 100644 index 0000000000000..43ad8593f41e8 Binary files /dev/null and b/frontend/__snapshots__/scenes-app-max-ai--generation-failure-thread--light.png differ diff --git a/frontend/__snapshots__/scenes-app-max-ai--thread--dark.png b/frontend/__snapshots__/scenes-app-max-ai--thread--dark.png index d0f525ffb382c..80aded4c79433 100644 Binary files a/frontend/__snapshots__/scenes-app-max-ai--thread--dark.png and b/frontend/__snapshots__/scenes-app-max-ai--thread--dark.png differ diff --git a/frontend/__snapshots__/scenes-app-max-ai--thread--light.png b/frontend/__snapshots__/scenes-app-max-ai--thread--light.png index f8d64397cb918..22c88333171fd 100644 Binary files a/frontend/__snapshots__/scenes-app-max-ai--thread--light.png and b/frontend/__snapshots__/scenes-app-max-ai--thread--light.png differ diff --git a/frontend/__snapshots__/scenes-app-max-ai--thread-with-failed-generation--dark.png b/frontend/__snapshots__/scenes-app-max-ai--thread-with-failed-generation--dark.png new file mode 100644 index 0000000000000..eccd3471a1f51 Binary files /dev/null and b/frontend/__snapshots__/scenes-app-max-ai--thread-with-failed-generation--dark.png differ diff --git a/frontend/__snapshots__/scenes-app-max-ai--thread-with-failed-generation--light.png b/frontend/__snapshots__/scenes-app-max-ai--thread-with-failed-generation--light.png new file mode 100644 index 0000000000000..da0efa6c70d73 Binary files /dev/null and b/frontend/__snapshots__/scenes-app-max-ai--thread-with-failed-generation--light.png differ diff --git a/frontend/__snapshots__/scenes-other-onboarding--onboarding-billing--dark.png b/frontend/__snapshots__/scenes-other-onboarding--onboarding-billing--dark.png index a11674466fae0..032e85e82d703 100644 Binary files a/frontend/__snapshots__/scenes-other-onboarding--onboarding-billing--dark.png and b/frontend/__snapshots__/scenes-other-onboarding--onboarding-billing--dark.png differ diff --git a/frontend/src/lib/constants.tsx b/frontend/src/lib/constants.tsx index 3d563ed32d7da..a13f3277ec41f 100644 --- a/frontend/src/lib/constants.tsx +++ b/frontend/src/lib/constants.tsx @@ -220,6 +220,8 @@ export const FEATURE_FLAGS = { LEGACY_ACTION_WEBHOOKS: 'legacy-action-webhooks', // owner: @mariusandra #team-cdp SESSION_REPLAY_URL_TRIGGER: 'session-replay-url-trigger', // owner: @richard-better #team-replay REPLAY_TEMPLATES: 'replay-templates', // owner: @raquelmsmith #team-replay + EXPERIMENTS_HOGQL: 'experiments-hogql', // owner: @jurajmajerik #team-experiments + ROLE_BASED_ACCESS_CONTROL: 'role-based-access-control', // owner: @zach EXPERIMENTS_HOLDOUTS: 'experiments-holdouts', // owner: @jurajmajerik #team-experiments MESSAGING: 'messaging', // owner @mariusandra #team-cdp SESSION_REPLAY_URL_BLOCKLIST: 'session-replay-url-blocklist', // owner: @richard-better #team-replay diff --git a/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts b/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts index 7226cbc02c424..a9db8e9b00e1f 100644 --- a/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts +++ b/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts @@ -3,9 +3,9 @@ import type { codeEditorLogicType } from 'lib/monaco/codeEditorLogicType' import { languages } from 'monaco-editor' import { performQuery } from '~/queries/query' -import { AutocompleteCompletionItem, HogLanguage, HogQLAutocomplete, NodeKind } from '~/queries/schema' +import { AutocompleteCompletionItemKind, HogLanguage, HogQLAutocomplete, NodeKind } from '~/queries/schema' -const convertCompletionItemKind = (kind: AutocompleteCompletionItem['kind']): languages.CompletionItemKind => { +const convertCompletionItemKind = (kind: AutocompleteCompletionItemKind): languages.CompletionItemKind => { switch (kind) { case 'Method': return languages.CompletionItemKind.Method @@ -68,7 +68,7 @@ const convertCompletionItemKind = (kind: AutocompleteCompletionItem['kind']): la } } -const kindToSortText = (kind: AutocompleteCompletionItem['kind'], label: string): string => { +const kindToSortText = (kind: AutocompleteCompletionItemKind, label: string): string => { if (kind === 'Variable') { return `1-${label}` } diff --git a/frontend/src/loadPostHogJS.tsx b/frontend/src/loadPostHogJS.tsx index 2c5a3285ef509..badabf1105246 100644 --- a/frontend/src/loadPostHogJS.tsx +++ b/frontend/src/loadPostHogJS.tsx @@ -29,16 +29,38 @@ export function loadPostHogJS(): void { bootstrap: window.POSTHOG_USER_IDENTITY_WITH_FLAGS ? window.POSTHOG_USER_IDENTITY_WITH_FLAGS : {}, opt_in_site_apps: true, api_transport: 'fetch', - loaded: (posthog) => { - if (posthog.sessionRecording) { - posthog.sessionRecording._forceAllowLocalhostNetworkCapture = true + loaded: (loadedInstance) => { + if (loadedInstance.sessionRecording) { + loadedInstance.sessionRecording._forceAllowLocalhostNetworkCapture = true } if (window.IMPERSONATED_SESSION) { - posthog.opt_out_capturing() + loadedInstance.sessionManager?.resetSessionId() + loadedInstance.opt_out_capturing() } else { - posthog.opt_in_capturing() + loadedInstance.opt_in_capturing() } + + const Cypress = (window as any).Cypress + + if (Cypress) { + Object.entries(Cypress.env()).forEach(([key, value]) => { + if (key.startsWith('POSTHOG_PROPERTY_')) { + loadedInstance.register_for_session({ + [key.replace('POSTHOG_PROPERTY_', 'E2E_TESTING_').toLowerCase()]: value, + }) + } + }) + } + + // This is a helpful flag to set to automatically reset the recording session on load for testing multiple recordings + const shouldResetSessionOnLoad = loadedInstance.getFeatureFlag(FEATURE_FLAGS.SESSION_RESET_ON_LOAD) + if (shouldResetSessionOnLoad) { + loadedInstance.sessionManager?.resetSessionId() + } + + // Make sure we have access to the object in window for debugging + window.posthog = loadedInstance }, scroll_root_selector: ['main', 'html'], autocapture: { @@ -52,26 +74,6 @@ export function loadPostHogJS(): void { : undefined, }) ) - - const Cypress = (window as any).Cypress - - if (Cypress) { - Object.entries(Cypress.env()).forEach(([key, value]) => { - if (key.startsWith('POSTHOG_PROPERTY_')) { - posthog.register_for_session({ - [key.replace('POSTHOG_PROPERTY_', 'E2E_TESTING_').toLowerCase()]: value, - }) - } - }) - } - - // This is a helpful flag to set to automatically reset the recording session on load for testing multiple recordings - const shouldResetSessionOnLoad = posthog.getFeatureFlag(FEATURE_FLAGS.SESSION_RESET_ON_LOAD) - if (shouldResetSessionOnLoad) { - posthog.sessionManager?.resetSessionId() - } - // Make sure we have access to the object in window for debugging - window.posthog = posthog } else { posthog.init('fake token', { autocapture: false, diff --git a/frontend/src/queries/nodes/WebOverview/WebOverview.tsx b/frontend/src/queries/nodes/WebOverview/WebOverview.tsx index ce10994f21b19..925087cd8f9dc 100644 --- a/frontend/src/queries/nodes/WebOverview/WebOverview.tsx +++ b/frontend/src/queries/nodes/WebOverview/WebOverview.tsx @@ -11,7 +11,13 @@ import { humanFriendlyDuration, humanFriendlyLargeNumber, isNotNil, range } from import { useState } from 'react' import { EvenlyDistributedRows } from '~/queries/nodes/WebOverview/EvenlyDistributedRows' -import { AnyResponseType, WebOverviewItem, WebOverviewQuery, WebOverviewQueryResponse } from '~/queries/schema' +import { + AnyResponseType, + WebOverviewItem, + WebOverviewItemKind, + WebOverviewQuery, + WebOverviewQueryResponse, +} from '~/queries/schema' import { QueryContext } from '~/queries/types' import { dataNodeLogic } from '../DataNode/dataNodeLogic' @@ -146,11 +152,7 @@ const formatUnit = (x: number, options?: { precise?: boolean }): string => { return humanFriendlyLargeNumber(x) } -const formatItem = ( - value: number | undefined, - kind: WebOverviewItem['kind'], - options?: { precise?: boolean } -): string => { +const formatItem = (value: number | undefined, kind: WebOverviewItemKind, options?: { precise?: boolean }): string => { if (value == null) { return '-' } else if (kind === 'percentage') { diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 75b26c88bc4de..e8baa13682fd7 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -617,6 +617,24 @@ } ] }, + "AssistantEventType": { + "enum": ["status", "message"], + "type": "string" + }, + "AssistantGenerationStatusEvent": { + "additionalProperties": false, + "properties": { + "type": { + "$ref": "#/definitions/AssistantGenerationStatusType" + } + }, + "required": ["type"], + "type": "object" + }, + "AssistantGenerationStatusType": { + "enum": ["ack", "generation_error"], + "type": "string" + }, "AssistantMessage": { "additionalProperties": false, "properties": { @@ -632,7 +650,7 @@ "type": "object" }, "AssistantMessageType": { - "enum": ["human", "ai", "ai/viz"], + "enum": ["human", "ai", "ai/viz", "ai/failure"], "type": "string" }, "AutocompleteCompletionItem": { @@ -651,38 +669,8 @@ "type": "string" }, "kind": { - "description": "The kind of this completion item. Based on the kind an icon is chosen by the editor.", - "enum": [ - "Method", - "Function", - "Constructor", - "Field", - "Variable", - "Class", - "Struct", - "Interface", - "Module", - "Property", - "Event", - "Operator", - "Unit", - "Value", - "Constant", - "Enum", - "EnumMember", - "Keyword", - "Text", - "Color", - "File", - "Reference", - "Customcolor", - "Folder", - "TypeParameter", - "User", - "Issue", - "Snippet" - ], - "type": "string" + "$ref": "#/definitions/AutocompleteCompletionItemKind", + "description": "The kind of this completion item. Based on the kind an icon is chosen by the editor." }, "label": { "description": "The label of this completion item. By default this is also the text that is inserted when selecting this completion.", @@ -692,6 +680,39 @@ "required": ["label", "insertText", "kind"], "type": "object" }, + "AutocompleteCompletionItemKind": { + "enum": [ + "Method", + "Function", + "Constructor", + "Field", + "Variable", + "Class", + "Struct", + "Interface", + "Module", + "Property", + "Event", + "Operator", + "Unit", + "Value", + "Constant", + "Enum", + "EnumMember", + "Keyword", + "Text", + "Color", + "File", + "Reference", + "Customcolor", + "Folder", + "TypeParameter", + "User", + "Issue", + "Snippet" + ], + "type": "string" + }, "BaseMathType": { "enum": ["total", "dau", "weekly_active", "monthly_active", "unique_session", "first_time_for_user"], "type": "string" @@ -1315,12 +1336,25 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" }, "is_cached": { "type": "boolean" }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" + }, "last_refresh": { "format": "date-time", "type": "string" @@ -1361,6 +1395,7 @@ "expected_loss", "insight", "is_cached", + "kind", "last_refresh", "next_allowed_client_refresh", "probability", @@ -1385,6 +1420,9 @@ "description": "What triggered the calculation of the query, leave empty if user/immediate", "type": "string" }, + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -1396,12 +1434,22 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" }, "is_cached": { "type": "boolean" }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" + }, "last_refresh": { "format": "date-time", "type": "string" @@ -1444,6 +1492,7 @@ "credible_intervals", "insight", "is_cached", + "kind", "last_refresh", "next_allowed_client_refresh", "p_value", @@ -3732,8 +3781,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -3758,6 +3820,7 @@ "credible_intervals", "expected_loss", "insight", + "kind", "probability", "significance_code", "significant", @@ -3768,6 +3831,9 @@ { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -3779,8 +3845,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -3807,6 +3883,7 @@ "required": [ "credible_intervals", "insight", + "kind", "p_value", "probability", "significance_code", @@ -5180,6 +5257,9 @@ "experiment_id": { "type": "integer" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "kind": { "const": "ExperimentFunnelsQuery", "type": "string" @@ -5190,12 +5270,9 @@ }, "response": { "$ref": "#/definitions/ExperimentFunnelsQueryResponse" - }, - "source": { - "$ref": "#/definitions/FunnelsQuery" } }, - "required": ["experiment_id", "kind", "source"], + "required": ["experiment_id", "funnels_query", "kind"], "type": "object" }, "ExperimentFunnelsQueryResponse": { @@ -5215,8 +5292,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -5238,6 +5328,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -5282,6 +5373,9 @@ "ExperimentTrendsQueryResponse": { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -5293,8 +5387,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -5319,6 +5423,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -5450,6 +5555,20 @@ "required": ["kind", "series"], "type": "object" }, + "FailureMessage": { + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + }, + "type": { + "const": "ai/failure", + "type": "string" + } + }, + "required": ["type"], + "type": "object" + }, "FeaturePropertyFilter": { "additionalProperties": false, "properties": { @@ -8962,8 +9081,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -8985,6 +9117,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -8998,6 +9131,9 @@ { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -9009,8 +9145,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -9035,6 +9181,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -9607,8 +9754,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -9633,6 +9793,7 @@ "credible_intervals", "expected_loss", "insight", + "kind", "probability", "significance_code", "significant", @@ -9643,6 +9804,9 @@ { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -9654,8 +9818,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -9682,6 +9856,7 @@ "required": [ "credible_intervals", "insight", + "kind", "p_value", "probability", "significance_code", @@ -10514,8 +10689,7 @@ "type": ["string", "number"] }, "kind": { - "enum": ["ActionsNode", "EventsNode"], - "type": "string" + "$ref": "#/definitions/RetentionEntityKind" }, "name": { "type": "string" @@ -10532,6 +10706,10 @@ }, "type": "object" }, + "RetentionEntityKind": { + "enum": ["ActionsNode", "EventsNode"], + "type": "string" + }, "RetentionFilter": { "additionalProperties": false, "properties": { @@ -10735,6 +10913,9 @@ }, { "$ref": "#/definitions/HumanMessage" + }, + { + "$ref": "#/definitions/FailureMessage" } ] }, @@ -12196,8 +12377,7 @@ "type": "string" }, "kind": { - "enum": ["unit", "duration_s", "percentage"], - "type": "string" + "$ref": "#/definitions/WebOverviewItemKind" }, "previous": { "type": "number" @@ -12209,6 +12389,10 @@ "required": ["key", "kind"], "type": "object" }, + "WebOverviewItemKind": { + "enum": ["unit", "duration_s", "percentage"], + "type": "string" + }, "WebOverviewQuery": { "additionalProperties": false, "properties": { diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 273605a42f6d7..a437aa9cea660 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -360,6 +360,36 @@ export interface HogQLMetadataResponse { query_status?: never } +export type AutocompleteCompletionItemKind = + | 'Method' + | 'Function' + | 'Constructor' + | 'Field' + | 'Variable' + | 'Class' + | 'Struct' + | 'Interface' + | 'Module' + | 'Property' + | 'Event' + | 'Operator' + | 'Unit' + | 'Value' + | 'Constant' + | 'Enum' + | 'EnumMember' + | 'Keyword' + | 'Text' + | 'Color' + | 'File' + | 'Reference' + | 'Customcolor' + | 'Folder' + | 'TypeParameter' + | 'User' + | 'Issue' + | 'Snippet' + export interface AutocompleteCompletionItem { /** * The label of this completion item. By default @@ -385,35 +415,7 @@ export interface AutocompleteCompletionItem { * The kind of this completion item. Based on the kind * an icon is chosen by the editor. */ - kind: - | 'Method' - | 'Function' - | 'Constructor' - | 'Field' - | 'Variable' - | 'Class' - | 'Struct' - | 'Interface' - | 'Module' - | 'Property' - | 'Event' - | 'Operator' - | 'Unit' - | 'Value' - | 'Constant' - | 'Enum' - | 'EnumMember' - | 'Keyword' - | 'Text' - | 'Color' - | 'File' - | 'Reference' - | 'Customcolor' - | 'Folder' - | 'TypeParameter' - | 'User' - | 'Issue' - | 'Snippet' + kind: AutocompleteCompletionItemKind } export interface HogQLAutocompleteResponse { @@ -1419,11 +1421,12 @@ export interface WebOverviewQuery extends WebAnalyticsQueryBase[] + count_query?: TrendsQuery + exposure_query?: TrendsQuery variants: ExperimentVariantTrendsBaseStats[] probability: Record significant: boolean @@ -1633,7 +1639,9 @@ export interface ExperimentTrendsQueryResponse { export type CachedExperimentTrendsQueryResponse = CachedQueryResponse export interface ExperimentFunnelsQueryResponse { - insight: FunnelsQueryResponse + kind: NodeKind.ExperimentFunnelsQuery + insight: Record[][] + funnels_query?: FunnelsQuery variants: ExperimentVariantFunnelsBaseStats[] probability: Record significant: boolean @@ -1646,7 +1654,7 @@ export type CachedExperimentFunnelsQueryResponse = CachedQueryResponse { kind: NodeKind.ExperimentFunnelsQuery - source: FunnelsQuery + funnels_query: FunnelsQuery experiment_id: integer } @@ -2096,6 +2104,7 @@ export enum AssistantMessageType { Human = 'human', Assistant = 'ai', Visualization = 'ai/viz', + Failure = 'ai/failure', } export interface HumanMessage { @@ -2115,4 +2124,23 @@ export interface VisualizationMessage { answer?: ExperimentalAITrendsQuery } -export type RootAssistantMessage = VisualizationMessage | AssistantMessage | HumanMessage +export interface FailureMessage { + type: AssistantMessageType.Failure + content?: string +} + +export type RootAssistantMessage = VisualizationMessage | AssistantMessage | HumanMessage | FailureMessage + +export enum AssistantEventType { + Status = 'status', + Message = 'message', +} + +export enum AssistantGenerationStatusType { + Acknowledged = 'ack', + GenerationError = 'generation_error', +} + +export interface AssistantGenerationStatusEvent { + type: AssistantGenerationStatusType +} diff --git a/frontend/src/scenes/experiments/Experiment.stories.tsx b/frontend/src/scenes/experiments/Experiment.stories.tsx index daab995ff3aa1..8d2aecd75ab1e 100644 --- a/frontend/src/scenes/experiments/Experiment.stories.tsx +++ b/frontend/src/scenes/experiments/Experiment.stories.tsx @@ -116,6 +116,7 @@ const MOCK_FUNNEL_EXPERIMENT: Experiment = { interval: 'day', filter_test_accounts: true, }, + metrics: [], archived: false, created_by: { id: 1, @@ -172,6 +173,7 @@ const MOCK_TREND_EXPERIMENT: Experiment = { }, }, }, + metrics: [], parameters: { feature_flag_variants: [ { @@ -277,6 +279,7 @@ const MOCK_TREND_EXPERIMENT_MANY_VARIANTS: Experiment = { }, }, }, + metrics: [], parameters: { feature_flag_variants: [ { diff --git a/frontend/src/scenes/experiments/ExperimentView/Goal.tsx b/frontend/src/scenes/experiments/ExperimentView/Goal.tsx index b0ef5701ec5c7..c68acb47f9df4 100644 --- a/frontend/src/scenes/experiments/ExperimentView/Goal.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/Goal.tsx @@ -238,17 +238,16 @@ export function Goal(): JSX.Element { Change goal - {experimentInsightType === InsightType.TRENDS && - !experimentMathAggregationForTrends(experiment.filters) && ( - <> - -
-
- -
+ {experimentInsightType === InsightType.TRENDS && !experimentMathAggregationForTrends() && ( + <> + +
+
+
- - )} +
+ + )}
) diff --git a/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx b/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx index aadaebee40729..e9c19a72eb589 100644 --- a/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx @@ -157,7 +157,6 @@ export function SecondaryMetricsTable({ experiment.secondary_metrics?.forEach((metric, idx) => { const targetResults = secondaryMetricResults?.[idx] - const targetResultFilters = targetResults?.filters const winningVariant = getHighestProbabilityVariant(targetResults || null) const Header = (): JSX.Element => ( @@ -206,7 +205,7 @@ export function SecondaryMetricsTable({ )} ] - {experimentMathAggregationForTrends(targetResultFilters) ? 'metric' : 'count'} + {experimentMathAggregationForTrends() ? 'metric' : 'count'} ), diff --git a/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx b/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx index e046d0f3a52fe..1814cb8717795 100644 --- a/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx @@ -59,9 +59,7 @@ export function SummaryTable(): JSX.Element { {experimentResults.insight?.[0] && 'action' in experimentResults.insight[0] && ( )} - - {experimentMathAggregationForTrends(experimentResults?.filters) ? 'metric' : 'count'} - + {experimentMathAggregationForTrends() ? 'metric' : 'count'} ), render: function Key(_, variant): JSX.Element { diff --git a/frontend/src/scenes/experiments/ExperimentView/components.tsx b/frontend/src/scenes/experiments/ExperimentView/components.tsx index e61c32505c857..43a7b46e58f74 100644 --- a/frontend/src/scenes/experiments/ExperimentView/components.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/components.tsx @@ -22,6 +22,7 @@ import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { IconAreaChart } from 'lib/lemon-ui/icons' import { More } from 'lib/lemon-ui/LemonButton/More' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useEffect, useState } from 'react' import { urls } from 'scenes/urls' @@ -29,7 +30,15 @@ import { groupsModel } from '~/models/groupsModel' import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryFromFilters } from '~/queries/nodes/InsightViz/utils' import { Query } from '~/queries/Query/Query' -import { InsightVizNode, NodeKind } from '~/queries/schema' +import { + CachedExperimentFunnelsQueryResponse, + CachedExperimentTrendsQueryResponse, + ExperimentFunnelsQueryResponse, + ExperimentTrendsQueryResponse, + InsightQueryNode, + InsightVizNode, + NodeKind, +} from '~/queries/schema' import { Experiment, Experiment as ExperimentType, @@ -108,10 +117,54 @@ export function ResultsQuery({ targetResults, showTable, }: { - targetResults: ExperimentResults['result'] | null + targetResults: ExperimentResults['result'] | ExperimentTrendsQueryResponse | ExperimentFunnelsQueryResponse | null showTable: boolean }): JSX.Element { - if (!targetResults?.filters) { + const { featureFlags } = useValues(featureFlagLogic) + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const newQueryResults = targetResults as unknown as + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + + const query = + newQueryResults.kind === NodeKind.ExperimentTrendsQuery + ? newQueryResults.count_query + : newQueryResults.funnels_query + const fakeInsightId = Math.random().toString(36).substring(2, 15) + + return ( + + ) + } + + const oldQueryResults = targetResults as ExperimentResults['result'] + + if (!oldQueryResults?.filters) { return <> } @@ -119,22 +172,22 @@ export function ResultsQuery({ }: { icon?: JSX.Element }): JSX.Element { - const { experimentResults, experiment } = useValues(experimentLogic) + const { experimentResults, experiment, featureFlags } = useValues(experimentLogic) // keep in sync with https://github.com/PostHog/posthog/blob/master/ee/clickhouse/queries/experiments/funnel_experiment_result.py#L71 // :TRICKY: In the case of no results, we still want users to explore the query, so they can debug further. @@ -160,18 +213,41 @@ export function ExploreButton({ icon = }: { icon?: JSX.Element properties: [], } - const query: InsightVizNode = { - kind: NodeKind.InsightVizNode, - source: filtersToQueryNode( - transformResultFilters( - experimentResults?.filters - ? { ...experimentResults.filters, explicit_date: true } - : filtersFromExperiment - ) - ), - showTable: true, - showLastComputation: true, - showLastComputationRefresh: false, + let query: InsightVizNode + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const newQueryResults = experimentResults as unknown as + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + + const source = + newQueryResults.kind === NodeKind.ExperimentTrendsQuery + ? newQueryResults.count_query + : newQueryResults.funnels_query + + query = { + kind: NodeKind.InsightVizNode, + source: source as InsightQueryNode, + } + } else { + const oldQueryResults = experimentResults as ExperimentResults['result'] + + if (!oldQueryResults?.filters) { + return <> + } + + query = { + kind: NodeKind.InsightVizNode, + source: filtersToQueryNode( + transformResultFilters( + oldQueryResults?.filters + ? { ...oldQueryResults.filters, explicit_date: true } + : filtersFromExperiment + ) + ), + showTable: true, + showLastComputation: true, + showLastComputationRefresh: false, + } } return ( diff --git a/frontend/src/scenes/experiments/MetricSelector.tsx b/frontend/src/scenes/experiments/MetricSelector.tsx index 4f4e7b6e1e262..e9af066af176f 100644 --- a/frontend/src/scenes/experiments/MetricSelector.tsx +++ b/frontend/src/scenes/experiments/MetricSelector.tsx @@ -133,6 +133,11 @@ export function ExperimentInsightCreator({ insightProps }: { insightProps: Insig sortable={isTrends ? undefined : true} showNestedArrow={isTrends ? undefined : true} showNumericalPropsOnly={isTrends} + actionsTaxonomicGroupTypes={[ + TaxonomicFilterGroupType.Events, + TaxonomicFilterGroupType.Actions, + TaxonomicFilterGroupType.DataWarehouse, + ]} propertiesTaxonomicGroupTypes={[ TaxonomicFilterGroupType.EventProperties, TaxonomicFilterGroupType.PersonProperties, diff --git a/frontend/src/scenes/experiments/experimentLogic.tsx b/frontend/src/scenes/experiments/experimentLogic.tsx index 19e33aca83831..3e365140b96d5 100644 --- a/frontend/src/scenes/experiments/experimentLogic.tsx +++ b/frontend/src/scenes/experiments/experimentLogic.tsx @@ -5,6 +5,7 @@ import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' import api from 'lib/api' import { EXPERIMENT_DEFAULT_DURATION, FunnelLayout } from 'lib/constants' +import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { Tooltip } from 'lib/lemon-ui/Tooltip' @@ -27,7 +28,15 @@ import { cohortsModel } from '~/models/cohortsModel' import { groupsModel } from '~/models/groupsModel' import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' -import { FunnelsQuery, InsightVizNode, TrendsQuery } from '~/queries/schema' +import { + CachedExperimentFunnelsQueryResponse, + CachedExperimentTrendsQueryResponse, + ExperimentTrendsQuery, + FunnelsQuery, + InsightVizNode, + NodeKind, + TrendsQuery, +} from '~/queries/schema' import { isFunnelsQuery } from '~/queries/utils' import { ActionFilter as ActionFilterType, @@ -62,6 +71,7 @@ const NEW_EXPERIMENT: Experiment = { name: '', feature_flag_key: '', filters: {}, + metrics: [], parameters: { feature_flag_variants: [ { key: 'control', rollout_percentage: 50 }, @@ -767,10 +777,36 @@ export const experimentLogic = kea([ }, }, experimentResults: [ - null as ExperimentResults['result'] | null, + null as + | ExperimentResults['result'] + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, { - loadExperimentResults: async (refresh?: boolean) => { + loadExperimentResults: async ( + refresh?: boolean + ): Promise< + | ExperimentResults['result'] + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null + > => { try { + if (values.featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const query = values.experiment.metrics[0].query + + const response: ExperimentResults = await api.create( + `api/projects/${values.currentTeamId}/query`, + { query } + ) + + return { + ...response, + fakeInsightId: Math.random().toString(36).substring(2, 15), + last_refresh: response.last_refresh || '', + } as unknown as CachedExperimentTrendsQueryResponse | CachedExperimentFunnelsQueryResponse + } + const refreshParam = refresh ? '?refresh=true' : '' const response: ExperimentResults = await api.get( `api/projects/${values.currentTeamId}/experiments/${values.experimentId}/results${refreshParam}` @@ -791,9 +827,42 @@ export const experimentLogic = kea([ }, ], secondaryMetricResults: [ - null as SecondaryMetricResults[] | null, + null as + | SecondaryMetricResults[] + | (CachedExperimentTrendsQueryResponse | CachedExperimentFunnelsQueryResponse)[] + | null, { - loadSecondaryMetricResults: async (refresh?: boolean) => { + loadSecondaryMetricResults: async ( + refresh?: boolean + ): Promise< + | SecondaryMetricResults[] + | (CachedExperimentTrendsQueryResponse | CachedExperimentFunnelsQueryResponse)[] + | null + > => { + if (values.featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const secondaryMetrics = + values.experiment?.metrics?.filter((metric) => metric.type === 'secondary') || [] + + return (await Promise.all( + secondaryMetrics.map(async (metric) => { + try { + const response: ExperimentResults = await api.create( + `api/projects/${values.currentTeamId}/query`, + { query: metric.query } + ) + + return { + ...response, + fakeInsightId: Math.random().toString(36).substring(2, 15), + last_refresh: response.last_refresh || '', + } + } catch (error) { + return {} + } + }) + )) as unknown as (CachedExperimentTrendsQueryResponse | CachedExperimentFunnelsQueryResponse)[] + } + const refreshParam = refresh ? '&refresh=true' : '' return await Promise.all( @@ -810,6 +879,7 @@ export const experimentLogic = kea([ last_refresh: secResults.last_refresh, } } + return { ...secResults.result, fakeInsightId: Math.random().toString(36).substring(2, 15), @@ -862,8 +932,13 @@ export const experimentLogic = kea([ (experimentId): Experiment['id'] => experimentId, ], experimentInsightType: [ - (s) => [s.experiment], - (experiment): InsightType => { + (s) => [s.experiment, s.featureFlags], + (experiment, featureFlags): InsightType => { + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const query = experiment?.metrics?.[0]?.query + return query?.kind === NodeKind.ExperimentTrendsQuery ? InsightType.TRENDS : InsightType.FUNNELS + } + return experiment?.filters?.insight || InsightType.FUNNELS }, ], @@ -909,31 +984,40 @@ export const experimentLogic = kea([ }, ], experimentMathAggregationForTrends: [ - () => [], - () => - (filters?: FilterType): PropertyMathType | CountPerActorMathType | undefined => { - // Find out if we're using count per actor math aggregates averages per user - const userMathValue = ( - [...(filters?.events || []), ...(filters?.actions || [])] as ActionFilterType[] - ).filter((entity) => - Object.values(CountPerActorMathType).includes(entity?.math as CountPerActorMathType) - )[0]?.math - - // alternatively, if we're using property math - // remove 'sum' property math from the list of math types - // since we can handle that as a regular case - const targetValues = Object.values(PropertyMathType).filter( - (value) => value !== PropertyMathType.Sum - ) - // sync with the backend at https://github.com/PostHog/posthog/blob/master/ee/clickhouse/queries/experiments/trend_experiment_result.py#L44 - // the function uses_math_aggregation_by_user_or_property_value + (s) => [s.experiment, s.featureFlags], + (experiment, featureFlags) => (): PropertyMathType | CountPerActorMathType | undefined => { + let entities: { math?: string }[] = [] + + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const query = experiment?.metrics?.[0]?.query as ExperimentTrendsQuery + if (!query) { + return undefined + } + entities = query.count_query?.series || [] + } else { + const filters = experiment?.filters + if (!filters) { + return undefined + } + entities = [...(filters?.events || []), ...(filters?.actions || [])] as ActionFilterType[] + } - const propertyMathValue = ( - [...(filters?.events || []), ...(filters?.actions || [])] as ActionFilterType[] - ).filter((entity) => targetValues.includes(entity?.math as PropertyMathType))[0]?.math + // Find out if we're using count per actor math aggregates averages per user + const userMathValue = entities.filter((entity) => + Object.values(CountPerActorMathType).includes(entity?.math as CountPerActorMathType) + )[0]?.math - return (userMathValue ?? propertyMathValue) as PropertyMathType | CountPerActorMathType | undefined - }, + // alternatively, if we're using property math + // remove 'sum' property math from the list of math types + // since we can handle that as a regular case + const targetValues = Object.values(PropertyMathType).filter((value) => value !== PropertyMathType.Sum) + + const propertyMathValue = entities.filter((entity) => + targetValues.includes(entity?.math as PropertyMathType) + )[0]?.math + + return (userMathValue ?? propertyMathValue) as PropertyMathType | CountPerActorMathType | undefined + }, ], minimumDetectableEffect: [ (s) => [s.experiment, s.experimentInsightType, s.conversionMetrics, s.trendResults], @@ -1126,7 +1210,14 @@ export const experimentLogic = kea([ conversionRateForVariant: [ () => [], () => - (experimentResults: Partial | null, variantKey: string): number | null => { + ( + experimentResults: + | Partial + | CachedExperimentFunnelsQueryResponse + | CachedExperimentTrendsQueryResponse + | null, + variantKey: string + ): number | null => { if (!experimentResults || !experimentResults.insight) { return null } @@ -1144,34 +1235,47 @@ export const experimentLogic = kea([ }, ], getIndexForVariant: [ - () => [], - () => - (experimentResults: Partial | null, variant: string): number | null => { - // TODO: Would be nice for every secondary metric to have the same colour for variants - const insightType = experimentResults?.filters?.insight - let result: number | null = null + (s) => [s.experimentInsightType], + (experimentInsightType) => + ( + experimentResults: + | Partial + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, + variant: string + ): number | null => { // Ensures we get the right index from results, so the UI can // display the right colour for the variant if (!experimentResults || !experimentResults.insight) { return null } + let index = -1 - if (insightType === InsightType.FUNNELS) { + if (experimentInsightType === InsightType.FUNNELS) { // Funnel Insight is displayed in order of decreasing count - index = ([...experimentResults.insight] as FunnelStep[][]) - .sort((a, b) => b[0]?.count - a[0]?.count) - .findIndex( - (variantFunnel: FunnelStep[]) => variantFunnel[0]?.breakdown_value?.[0] === variant - ) + index = (Array.isArray(experimentResults.insight) ? [...experimentResults.insight] : []) + .sort((a, b) => { + const aCount = (a && Array.isArray(a) && a[0]?.count) || 0 + const bCount = (b && Array.isArray(b) && b[0]?.count) || 0 + return bCount - aCount + }) + .findIndex((variantFunnel) => { + if (!Array.isArray(variantFunnel) || !variantFunnel[0]?.breakdown_value) { + return false + } + const breakdownValue = variantFunnel[0].breakdown_value + return Array.isArray(breakdownValue) && breakdownValue[0] === variant + }) } else { index = (experimentResults.insight as TrendResult[]).findIndex( (variantTrend: TrendResult) => variantTrend.breakdown_value === variant ) } - result = index === -1 ? null : index + const result = index === -1 ? null : index - if (result !== null && insightType === InsightType.FUNNELS) { - result++ + if (result !== null && experimentInsightType === InsightType.FUNNELS) { + return result + 1 } return result }, @@ -1179,10 +1283,16 @@ export const experimentLogic = kea([ countDataForVariant: [ (s) => [s.experimentMathAggregationForTrends], (experimentMathAggregationForTrends) => - (experimentResults: Partial | null, variant: string): number | null => { - const usingMathAggregationType = experimentMathAggregationForTrends( - experimentResults?.filters || {} - ) + ( + experimentResults: + | Partial + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, + variant: string, + type: 'primary' | 'secondary' = 'primary' + ): number | null => { + const usingMathAggregationType = type === 'primary' ? experimentMathAggregationForTrends() : false if (!experimentResults || !experimentResults.insight) { return null } @@ -1223,7 +1333,14 @@ export const experimentLogic = kea([ exposureCountDataForVariant: [ () => [], () => - (experimentResults: Partial | null, variant: string): number | null => { + ( + experimentResults: + | Partial + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, + variant: string + ): number | null => { if (!experimentResults || !experimentResults.variants) { return null } @@ -1241,14 +1358,21 @@ export const experimentLogic = kea([ ], getHighestProbabilityVariant: [ () => [], - () => (results: ExperimentResults['result'] | null) => { - if (results && results.probability) { - const maxValue = Math.max(...Object.values(results.probability)) - return Object.keys(results.probability).find( - (key) => Math.abs(results.probability[key] - maxValue) < Number.EPSILON - ) - } - }, + () => + ( + results: + | ExperimentResults['result'] + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null + ) => { + if (results && results.probability) { + const maxValue = Math.max(...Object.values(results.probability)) + return Object.keys(results.probability).find( + (key) => Math.abs(results.probability[key] - maxValue) < Number.EPSILON + ) + } + }, ], sortedExperimentResultVariants: [ (s) => [s.experimentResults, s.experiment], @@ -1303,15 +1427,31 @@ export const experimentLogic = kea([ }, ], tabularSecondaryMetricResults: [ - (s) => [s.experiment, s.secondaryMetricResults], - (experiment, secondaryMetricResults): TabularSecondaryMetricResults[] => { + (s) => [s.experiment, s.secondaryMetricResults, s.conversionRateForVariant, s.countDataForVariant], + ( + experiment, + secondaryMetricResults, + conversionRateForVariant, + countDataForVariant + ): TabularSecondaryMetricResults[] => { + if (!secondaryMetricResults) { + return [] + } + const variantsWithResults: TabularSecondaryMetricResults[] = [] experiment?.parameters?.feature_flag_variants?.forEach((variant) => { const metricResults: SecondaryMetricResult[] = [] experiment?.secondary_metrics?.forEach((metric, idx) => { + let result + if (metric.filters.insight === InsightType.FUNNELS) { + result = conversionRateForVariant(secondaryMetricResults?.[idx], variant.key) + } else { + result = countDataForVariant(secondaryMetricResults?.[idx], variant.key, 'secondary') + } + metricResults.push({ insightType: metric.filters.insight || InsightType.TRENDS, - result: secondaryMetricResults?.[idx]?.result?.[variant.key], + result: result || undefined, }) }) diff --git a/frontend/src/scenes/max/Max.stories.tsx b/frontend/src/scenes/max/Max.stories.tsx index 27045963c6e42..88ffe32ea7559 100644 --- a/frontend/src/scenes/max/Max.stories.tsx +++ b/frontend/src/scenes/max/Max.stories.tsx @@ -1,10 +1,10 @@ import { Meta, StoryFn } from '@storybook/react' -import { BindLogic, useActions } from 'kea' +import { BindLogic, useActions, useValues } from 'kea' import { useEffect } from 'react' import { mswDecorator, useStorybookMocks } from '~/mocks/browser' -import { chatResponseChunk } from './__mocks__/chatResponse.mocks' +import { chatResponseChunk, failureChunk, generationFailureChunk } from './__mocks__/chatResponse.mocks' import { MaxInstance } from './Max' import { maxLogic } from './maxLogic' @@ -104,3 +104,43 @@ EmptyThreadLoading.parameters = { waitForLoadersToDisappear: false, }, } + +export const GenerationFailureThread: StoryFn = () => { + useStorybookMocks({ + post: { + '/api/environments/:team_id/query/chat/': (_, res, ctx) => res(ctx.text(generationFailureChunk)), + }, + }) + + const sessionId = 'd210b263-8521-4c5b-b3c4-8e0348df574b' + + const { askMax, setMessageStatus } = useActions(maxLogic({ sessionId })) + const { thread, threadLoading } = useValues(maxLogic({ sessionId })) + useEffect(() => { + askMax('What are my most popular pages?') + }, []) + useEffect(() => { + if (thread.length === 2 && !threadLoading) { + setMessageStatus(1, 'error') + } + }, [thread.length, threadLoading]) + + return