- T418145: Configure ATS to allow fractional routing for api.wikimedia.org
- Configure the REST gateway to correctly route /service/lw API routes to the right liftwing services
- Add liftwing-specific rate limits T413448: [5.2.2c Epic]: Support Higher Rate Limits for Lift Wing
- Progressive rollout by liftwing model
- revscoring_articletopic
- revscoring_articletopic_outlink
- revscoring_articlequality
- articlequality_language_agnostic
- article_country_language_agnostic
- revscoring_drafttopic
- revscoring_draftquality
- revscoring_editquality_damaging
- revscoring_editquality_goodfaith
- revscoring_editquality_reverted
- revertrisk
- readability
- langid
- articledesc
- reference_need
- reference_risk
- editcheck
- recommendation-api-ng
We can use sample calls from https://api.wikimedia.org/wiki/Lift_Wing_API for testing purposes, summarized in the table below
The general procedure to follow is:
- Make a CR that changes the endpoint's load_fraction to 1 in gateway-check.lua.conf
- Disable puppet on all A:cp-text nodes
- Submit and merge the CR
- Enable and run puppet on one cp-text node (for example cp6009.drmrs.wmnet)
- Check trafficserver reloaded the lua correctly sudo journalctl -u trafficserver.service
- Test that the cp node curl works correctly for this endpoint (returns 200 rest-gateway)
- Enable puppet on all A:cp-text nodes
- Monitor grafana for this route on both eqiad and codfw https://grafana.wikimedia.org/goto/ffjnfdmjs7bwgf?orgId=1
LiftWing Route Tests
Common headers used in all commands:
- Content-Type: application/json
- User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)
- Host: api.wikimedia.org
Returns only HTTP status code and the via header if it exists
| Route Name | Path | Reference | cp node curl | rest-gateway curl |
|---|---|---|---|---|
| revscoring_articletopic | /service/lw/inference/v1/models/enwiki-articletopic:predict | Get revscoring articletopic prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/enwiki-articletopic:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/enwiki-articletopic:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' |
| revscoring_articletopic_outlink | /service/lw/inference/v1/models/outlink-topic-model:predict | Get articletopic outlink prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/outlink-topic-model:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"page_title":"Douglas_Adams","lang":"en"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/outlink-topic-model:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"page_title":"Douglas_Adams","lang":"en"}' |
| revscoring_articlequality | /service/lw/inference/v1/models/enwiki-articlequality:predict | Get revscoring articlequality prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/enwiki-articlequality:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/enwiki-articlequality:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' |
| articlequality_language_agnostic | /service/lw/inference/v1/models/articlequality:predict | Get language agnostic articlequality prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/articlequality:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/articlequality:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' |
| article_country_language_agnostic | /service/lw/inference/v1/models/article-country:predict | Get article country | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/article-country:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"lang":"en","title":"Toni_Morrison"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/article-country:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"lang":"en","title":"Toni_Morrison"}' |
| revscoring_drafttopic | /service/lw/inference/v1/models/enwiki-drafttopic:predict | Get revscoring drafttopic prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/enwiki-drafttopic:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/enwiki-drafttopic:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' |
| revscoring_draftquality | /service/lw/inference/v1/models/enwiki-draftquality:predict | Get revscoring draftquality prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/enwiki-draftquality:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/enwiki-draftquality:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' |
| revscoring_editquality_damaging | /service/lw/inference/v1/models/enwiki-damaging:predict | Get revscoring damaging prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/enwiki-damaging:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/enwiki-damaging:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' |
| revscoring_editquality_goodfaith | /service/lw/inference/v1/models/enwiki-goodfaith:predict | Get revscoring goodfaith prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/enwiki-goodfaith:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/enwiki-goodfaith:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' |
| revscoring_editquality_reverted | /service/lw/inference/v1/models/viwiki-reverted:predict | Get revscoring reverted prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/viwiki-reverted:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/viwiki-reverted:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":12345}' |
| revertrisk | /service/lw/inference/v1/models/revertrisk-multilingual:predict | Get reverted risk multilingual prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/revertrisk-multilingual:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/revertrisk-multilingual:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' |
| revertrisk | /service/lw/inference/v1/models/revertrisk-language-agnostic:predict | Get reverted risk language agnostic prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/revertrisk-language-agnostic:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/revertrisk-language-agnostic:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' |
| readability | /service/lw/inference/v1/models/readability:predict | Get readability prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/readability:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/readability:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' |
| langid | /service/lw/inference/v1/models/langid:predict | Get language identification prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/langid:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"text":"Some sample text in any language that we want to identify"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/langid:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"text":"Some sample text in any language that we want to identify"}' |
| articledesc | /service/lw/inference/v1/models/article-descriptions:predict | Get article descriptions | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/article-descriptions:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"lang":"en","title":"Clandonald","num_beams":2,"debug":1}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/article-descriptions:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"lang":"en","title":"Clandonald","num_beams":2,"debug":1}' |
| reference_need | /service/lw/inference/v1/models/reference-need:predict | Get reference need prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/reference-need:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/reference-need:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":123456,"lang":"en"}' |
| reference_risk | /service/lw/inference/v1/models/reference-risk:predict | Get reference risk prediction | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/reference-risk:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":1242378206,"lang":"en"}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/reference-risk:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"rev_id":1242378206,"lang":"en"}' |
| editcheck | /service/lw/inference/v1/models/edit-check:predict | editcheck httpbb test | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/inference/v1/models/edit-check:predict" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"instances":[{"original_text":"","modified_text":"this is a great example of work","check_type":"tone","lang":"en","page_title":"Test_Page"}]}' | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -X POST "https://rest-gateway.discovery.wmnet:4113/service/lw/inference/v1/models/edit-check:predict" -H "Host: api.wikimedia.org" -H "Content-Type: application/json" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" --data '{"instances":[{"original_text":"","modified_text":"this is a great example of work","check_type":"tone","lang":"en","page_title":"Test_Page"}]}' |
| recommendation-api-ng | /service/lw/recommendation/api/v1/translation | Get content translation recommendation | curl -si -o /dev/null -w "%{http_code} %header{via}\n" -H "Host: api.wikimedia.org" "http://api.wikimedia.org:3128/service/lw/recommendation/api/v1/translation?source=en&target=fr&count=3&seed=Apple" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" | curl -si -o /dev/null -w "%{http_code} %header{via}\n" "https://rest-gateway.discovery.wmnet:4113/service/lw/recommendation/api/v1/translation?source=en&target=fr&count=3&seed=Apple" -H "User-Agent: ServiceOpsTest (sre-serviceops@wikimedia.org)" |