Skip to content

Bypass category question tracking in on-premises instances

Shinya Maeda requested to merge bypass-category-question-on-premises into master

What does this MR do and why?

This MR bypasses category question tracking in on-premises instances. The snowplow tracking is only available in SaaS instance.

MR acceptance checklist

Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Screenshots or screen recordings

Sidekiq execution log when a user asks a question in Duo Chat. You can see that two Llm::CompletionWorker executed in a single request:

{"severity":"INFO","time":"2023-12-28T05:37:17.892Z","retry":25,"queue":"default","backtrace":true,"version":0,"args":["[FILTERED]","[FILTERED]"],"class":"Llm::CompletionWorker","jid":"004763f794de98b72cb0be94","created_at":"2023-12-28T05:37:17.859Z","correlation_id":"01HJQETMAGNF82ZZGQEBY0WQNB","meta.caller_id":"graphql:unknown","meta.remote_ip":"172.16.123.2","meta.feature_category":"ai_abstraction_layer","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.root_caller_id":"graphql:unknown","worker_data_consistency":"delayed","wal_locations":{},"wal_location_source":"primary","idempotency_key":"resque:gitlab:duplicate:default:84f35fc252333b2abc0601bdc48936004c9050182ba7ad87fe3706ff2574a208","size_limiter":"validated","enqueued_at":"2023-12-28T05:37:17.892Z","job_size_bytes":584,"pid":72583,"message":"Llm::CompletionWorker JID-004763f794de98b72cb0be94: start","job_status":"start","scheduling_latency_s":0.000734}
{"severity":"WARN","time":"2023-12-28T05:37:22.249Z","message":"Job arguments to Llm::CompletionWorker do not serialize to JSON safely. This will raise an error in\nSidekiq 7.0. See https://github.com/mperham/sidekiq/wiki/Best-Practices or raise an error today\nby calling `Sidekiq.strict_args!` during Sidekiq initialization.\n"}
{"severity":"INFO","time":"2023-12-28T05:37:22.250Z","retry":25,"queue":"default","backtrace":true,"version":0,"args":["[FILTERED]","[FILTERED]"],"class":"Llm::CompletionWorker","jid":"d0a01d56ab7f278e491cd38b","created_at":"2023-12-28T05:37:22.248Z","correlation_id":"01HJQETMAGNF82ZZGQEBY0WQNB","meta.caller_id":"Llm::CompletionWorker","meta.remote_ip":"172.16.123.2","meta.feature_category":"ai_abstraction_layer","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.root_caller_id":"graphql:unknown","worker_data_consistency":"delayed","wal_locations":{},"wal_location_source":"primary","idempotency_key":"resque:gitlab:duplicate:default:26d334e1867384548d43751f6fc76c322c4c83170d1b8cee702e7df228668305","size_limiter":"validated","enqueued_at":"2023-12-28T05:37:22.249Z","job_size_bytes":428,"pid":72583,"message":"Llm::CompletionWorker JID-d0a01d56ab7f278e491cd38b: start","job_status":"start","scheduling_latency_s":0.000753}
{"severity":"INFO","time":"2023-12-28T05:37:22.252Z","retry":25,"queue":"default","backtrace":true,"version":0,"args":["[FILTERED]","[FILTERED]"],"class":"Llm::CompletionWorker","jid":"004763f794de98b72cb0be94","created_at":"2023-12-28T05:37:17.859Z","correlation_id":"01HJQETMAGNF82ZZGQEBY0WQNB","meta.caller_id":"graphql:unknown","meta.remote_ip":"172.16.123.2","meta.feature_category":"ai_abstraction_layer","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.root_caller_id":"graphql:unknown","worker_data_consistency":"delayed","wal_locations":{},"wal_location_source":"primary","idempotency_key":"resque:gitlab:duplicate:default:84f35fc252333b2abc0601bdc48936004c9050182ba7ad87fe3706ff2574a208","size_limiter":"validated","enqueued_at":"2023-12-28T05:37:17.892Z","job_size_bytes":584,"pid":72583,"message":"Llm::CompletionWorker JID-004763f794de98b72cb0be94: done: 4.359568 sec","job_status":"done","scheduling_latency_s":0.000734,"redis_calls":21,"redis_duration_s":0.004784,"redis_read_bytes":7837,"redis_write_bytes":4183,"redis_cache_calls":14,"redis_cache_duration_s":0.00334,"redis_cache_read_bytes":7829,"redis_cache_write_bytes":1142,"redis_queues_calls":5,"redis_queues_duration_s":0.001018,"redis_queues_read_bytes":6,"redis_queues_write_bytes":1541,"redis_action_cable_calls":2,"redis_action_cable_duration_s":0.000426,"redis_action_cable_read_bytes":2,"redis_action_cable_write_bytes":1500,"db_count":4,"db_write_count":0,"db_cached_count":1,"db_replica_count":0,"db_primary_count":4,"db_main_count":4,"db_ci_count":0,"db_main_replica_count":0,"db_ci_replica_count":0,"db_replica_cached_count":0,"db_primary_cached_count":1,"db_main_cached_count":1,"db_ci_cached_count":0,"db_main_replica_cached_count":0,"db_ci_replica_cached_count":0,"db_replica_wal_count":0,"db_primary_wal_count":0,"db_main_wal_count":0,"db_ci_wal_count":0,"db_main_replica_wal_count":0,"db_ci_replica_wal_count":0,"db_replica_wal_cached_count":0,"db_primary_wal_cached_count":0,"db_main_wal_cached_count":0,"db_ci_wal_cached_count":0,"db_main_replica_wal_cached_count":0,"db_ci_replica_wal_cached_count":0,"db_replica_duration_s":0.0,"db_primary_duration_s":0.01,"db_main_duration_s":0.01,"db_ci_duration_s":0.0,"db_main_replica_duration_s":0.0,"db_ci_replica_duration_s":0.0,"external_http_count":1,"external_http_duration_s":4.324931283000069,"cpu_s":0.031617,"worker_id":"sidekiq_0","rate_limiting_gates":[],"duration_s":4.359568,"completed_at":"2023-12-28T05:37:22.252Z","load_balancing_strategy":"primary_no_wal","db_duration_s":0.004305,"urgency":"low","target_duration_s":300,"target_scheduling_latency_s":60}
{"severity":"INFO","time":"2023-12-28T05:37:22.270Z","retry":25,"queue":"default","backtrace":true,"version":0,"args":["[FILTERED]","[FILTERED]"],"class":"Llm::CompletionWorker","jid":"d0a01d56ab7f278e491cd38b","created_at":"2023-12-28T05:37:22.248Z","correlation_id":"01HJQETMAGNF82ZZGQEBY0WQNB","meta.caller_id":"Llm::CompletionWorker","meta.remote_ip":"172.16.123.2","meta.feature_category":"ai_abstraction_layer","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.root_caller_id":"graphql:unknown","worker_data_consistency":"delayed","wal_locations":{},"wal_location_source":"primary","idempotency_key":"resque:gitlab:duplicate:default:26d334e1867384548d43751f6fc76c322c4c83170d1b8cee702e7df228668305","size_limiter":"validated","enqueued_at":"2023-12-28T05:37:22.249Z","job_size_bytes":428,"pid":72583,"message":"Llm::CompletionWorker JID-d0a01d56ab7f278e491cd38b: done: 0.020565 sec","job_status":"done","scheduling_latency_s":0.000753,"redis_calls":3,"redis_duration_s":0.009467999999999999,"redis_read_bytes":5932,"redis_write_bytes":189,"redis_cache_calls":1,"redis_cache_duration_s":0.009302,"redis_cache_read_bytes":5930,"redis_cache_write_bytes":17,"redis_queues_calls":2,"redis_queues_duration_s":0.000166,"redis_queues_read_bytes":2,"redis_queues_write_bytes":172,"db_count":2,"db_write_count":0,"db_cached_count":1,"db_replica_count":0,"db_primary_count":2,"db_main_count":2,"db_ci_count":0,"db_main_replica_count":0,"db_ci_replica_count":0,"db_replica_cached_count":0,"db_primary_cached_count":1,"db_main_cached_count":1,"db_ci_cached_count":0,"db_main_replica_cached_count":0,"db_ci_replica_cached_count":0,"db_replica_wal_count":0,"db_primary_wal_count":0,"db_main_wal_count":0,"db_ci_wal_count":0,"db_main_replica_wal_count":0,"db_ci_replica_wal_count":0,"db_replica_wal_cached_count":0,"db_primary_wal_cached_count":0,"db_main_wal_cached_count":0,"db_ci_wal_cached_count":0,"db_main_replica_wal_cached_count":0,"db_ci_replica_wal_cached_count":0,"db_replica_duration_s":0.0,"db_primary_duration_s":0.001,"db_main_duration_s":0.001,"db_ci_duration_s":0.0,"db_main_replica_duration_s":0.0,"db_ci_replica_duration_s":0.0,"cpu_s":0.016135,"worker_id":"sidekiq_0","rate_limiting_gates":[],"duration_s":0.020565,"completed_at":"2023-12-28T05:37:22.270Z","load_balancing_strategy":"primary_no_wal","db_duration_s":0.000444,"urgency":"low","target_duration_s":300,"target_scheduling_latency_s":60}

The one called for categorize_question failed with the following error in on-premises instances duo to ai client incompatibility:

{"severity":"ERROR","time":"2023-12-28T05:37:22.269Z","correlation_id":"01HJQETMAGNF82ZZGQEBY0WQNB","meta.caller_id":"Llm::CompletionWorker","meta.remote_ip":"172.16.123.2","meta.feature_category":"ai_abstraction_layer","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.root_caller_id":"graphql:unknown","message":"Error","class":"Gitlab::Llm::Anthropic::Completions::CategorizeQuestion","error":"JSON has an invalid format."}

With this MR, the second Llm::CompletionWorker invocation for categorize_question is bypassed in on-premises instances:

{"severity":"INFO","time":"2023-12-28T05:51:08.389Z","retry":25,"queue":"default","backtrace":true,"version":0,"args":["[FILTERED]","[FILTERED]"],"class":"Llm::CompletionWorker","jid":"f28131f95b9e523f64120405","created_at":"2023-12-28T05:51:08.362Z","correlation_id":"01HJQFKZCM6W24NP425CN63W8D","meta.caller_id":"graphql:unknown","meta.remote_ip":"172.16.123.2","meta.feature_category":"ai_abstraction_layer","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.root_caller_id":"graphql:unknown","worker_data_consistency":"delayed","wal_locations":{},"wal_location_source":"primary","idempotency_key":"resque:gitlab:duplicate:default:e69efaa4f5a10b939f68e6a5de4879b3eb3f9a466904984a7d2c485a1d4a12ef","size_limiter":"validated","enqueued_at":"2023-12-28T05:51:08.383Z","job_size_bytes":584,"pid":81936,"message":"Llm::CompletionWorker JID-f28131f95b9e523f64120405: start","job_status":"start","scheduling_latency_s":0.006155}
{"severity":"INFO","time":"2023-12-28T05:51:15.193Z","retry":25,"queue":"default","backtrace":true,"version":0,"args":["[FILTERED]","[FILTERED]"],"class":"Llm::CompletionWorker","jid":"f28131f95b9e523f64120405","created_at":"2023-12-28T05:51:08.362Z","correlation_id":"01HJQFKZCM6W24NP425CN63W8D","meta.caller_id":"graphql:unknown","meta.remote_ip":"172.16.123.2","meta.feature_category":"ai_abstraction_layer","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.root_caller_id":"graphql:unknown","worker_data_consistency":"delayed","wal_locations":{},"wal_location_source":"primary","idempotency_key":"resque:gitlab:duplicate:default:e69efaa4f5a10b939f68e6a5de4879b3eb3f9a466904984a7d2c485a1d4a12ef","size_limiter":"validated","enqueued_at":"2023-12-28T05:51:08.383Z","job_size_bytes":584,"pid":81936,"message":"Llm::CompletionWorker JID-f28131f95b9e523f64120405: done: 6.803578 sec","job_status":"done","scheduling_latency_s":0.006155,"redis_calls":18,"redis_duration_s":0.009604999999999999,"redis_read_bytes":7924,"redis_write_bytes":2687,"redis_cache_calls":13,"redis_cache_duration_s":0.005467,"redis_cache_read_bytes":7918,"redis_cache_write_bytes":981,"redis_queues_calls":2,"redis_queues_duration_s":0.000466,"redis_queues_read_bytes":2,"redis_queues_write_bytes":172,"redis_action_cable_calls":3,"redis_action_cable_duration_s":0.003672,"redis_action_cable_read_bytes":4,"redis_action_cable_write_bytes":1534,"db_count":4,"db_write_count":0,"db_cached_count":1,"db_replica_count":0,"db_primary_count":4,"db_main_count":4,"db_ci_count":0,"db_main_replica_count":0,"db_ci_replica_count":0,"db_replica_cached_count":0,"db_primary_cached_count":1,"db_main_cached_count":1,"db_ci_cached_count":0,"db_main_replica_cached_count":0,"db_ci_replica_cached_count":0,"db_replica_wal_count":0,"db_primary_wal_count":0,"db_main_wal_count":0,"db_ci_wal_count":0,"db_main_replica_wal_count":0,"db_ci_replica_wal_count":0,"db_replica_wal_cached_count":0,"db_primary_wal_cached_count":0,"db_main_wal_cached_count":0,"db_ci_wal_cached_count":0,"db_main_replica_wal_cached_count":0,"db_ci_replica_wal_cached_count":0,"db_replica_duration_s":0.0,"db_primary_duration_s":0.01,"db_main_duration_s":0.01,"db_ci_duration_s":0.0,"db_main_replica_duration_s":0.0,"db_ci_replica_duration_s":0.0,"external_http_count":1,"external_http_duration_s":5.9640778670000145,"external_http_slow_requests":[{"method":"POST","host":"127.0.0.1","port":5052,"path":"/v1/chat/agent","duration_s":5.964}],"cpu_s":0.799309,"worker_id":"sidekiq_0","rate_limiting_gates":[],"duration_s":6.803578,"completed_at":"2023-12-28T05:51:15.193Z","load_balancing_strategy":"primary_no_wal","db_duration_s":0.022437,"urgency":"low","target_duration_s":300,"target_scheduling_latency_s":60}

How to set up and validate locally

See !138274 (merged)

Edited by Shinya Maeda

Merge request reports