Submission Guide
How to set up, test and submit a solution for GKÍ 2027.
Using Claude Code, Codex or another coding agent? The starter's AGENTS.md gives it the context it needs. A team member still approves each score: submitting needs a passkey on a team member's account on this website.
01
What you need
- Python 3.11 or newer, and git.
- cloudflared for the public address that
connectcreates. - A device that supports passkeys: Face ID, Touch ID, Windows Hello or a security key.
- An account on this website and a place in a 2027 team.
02
Get the starter
The 2027 starter repository is published at kickoff. Once you have it, run:
python gki.py setupsetup creates .venv and a .env file with your own API key. Organizers never issue keys. Never commit .env or paste the key into chat. Use python3 if python is not found.
03
Test on your computer
python gki.py test # unit tests
python gki.py run # server on http://localhost:8000
python gki.py check # in a second terminalcheck sends example requests to your server with your API key. Local testing is unlimited and never touches hidden data.
04
Make it public
Stop run first: connect starts the server itself on the same port (8000).
python gki.py connect # prints the public address and API key; keep it open
python gki.py check https://<address> # in a second terminalconnect starts your server behind a Cloudflare quick tunnel and prints a public https://…trycloudflare.com address. The address changes each time connect starts.
Any public HTTPS host works instead: your own server or cloud service, Docker behind HTTPS, or another tunnel such as ngrok.
05
Submit on the website
- Sign in and join a 2027 team.
- Set up a passkey for your device on the submission page. You confirm your password first (or a code we email you, if you sign in with Google).
- Choose the problem and Validation, paste the base address and API key, and confirm with your passkey.
Enter only the base address: https:// and the host name, with no path (not …/predict), no port other than 443, and no ?, #, user name or password. Private and local addresses are not allowed.
A team member takes this step. The passkey confirms that a team member's account approved the score; it does not prove who wrote the solution. Coding agents can prepare the address and key, but a team member submits.
Keep the server running until the score is finished.
06
Rules that affect your plan
- Validation has a daily limit per team and problem. The submission page shows how many are left; the count resets at 00:00 UTC.
- Failures caused by the website or the evaluator do not count against the limit.
- Each team can have one queued or running score per problem.
- The final test is one attempt per team and problem. A started run uses the attempt; a run the evaluator refuses before contacting your server does not.
- Final-test scores stay hidden until results are published.
- Your server is never told whether a request is for validation or the final test.
07
Troubleshooting
- The website cannot reach my server
localhostis not public. Useconnector a hosted server, and open<address>/healthfrom another network, such as a phone with Wi-Fi off.- The address is rejected
- Enter only the base
https://address on port 443, with no path,?,#, user name or password. Private and local addresses are not allowed. If the host name cannot be found, the form says so: check the address and thatconnectis still running. - 401 Invalid API key
- Paste the exact key from
.envor theconnectoutput, without quotes or the wordBearer. - 422 error
- The request does not match the API contract. Run
python gki.py testand compare with the example requests infixtures/. - 500 error
- Your code raised an error, returned the wrong number of answers or an invalid output. Check the terminal where the server runs.
- Timeout or the tunnel dropped
- Keep the computer awake, load the model at startup rather than on each request, and answer within the problem's time limit.
- A score is stuck or failed on our side
- Keep the submission ID and contact an organizer on Discord. Organizers can restore a final-test attempt after a verified infrastructure failure.
- Before the final test
- Run validation first and use a host that stays up for the whole evaluation. A quick tunnel stops when
connectstops.
Questions and answers
Technical FAQ
What is a model?
A model is a system that produces outputs from inputs, such as a large language model like ChatGPT or a simple linear function. Most models are trained on pairs of inputs and expected outputs. Training minimizes a loss function so the model's predictions come as close to the expected outputs as possible.
How is model performance measured?
With a scoring metric computed on data the model has not seen. Accuracy, the share of correct predictions, is the most common. Others include MSE, F1 score and AUC. Each problem's metric is published with the problem.
What is an API, and why does the competition use one?
An API (application programming interface) is an agreed way for programs to exchange requests and responses, usually JSON over HTTPS. Your server provides one; the evaluator sends it hidden inputs and scores the answers. The starter already implements the API, so you write the model code.
What is the API key?
A secret the evaluator sends with every request, so your server knows the request is genuine. python gki.py setup generates it; organizers never issue keys. It is stored in .env. Never commit it or paste it into chat, and enter it only on the submission page.
Why can't I just upload my model?
Teams use different languages, libraries and hardware, and running all of it on our side would be slow and fragile. With an API, the evaluator only needs your address and key, and you keep full control of your code. This is also how models are usually served in industry.
What does gki.py connect do, and what is a tunnel?
A tunnel gives a server on your computer a public HTTPS address without changing your router settings. connect starts your server and a Cloudflare quick tunnel through cloudflared, then prints the address and key. The address works only while connect runs and changes each time it starts.
Can I run the server on my laptop?
Yes. Keep it awake, plugged in and online until the score finishes. For the final test, use a host that will stay up for the whole evaluation.
Why must the address be public HTTPS?
The evaluator runs in the cloud, so it cannot reach localhost or a private network. HTTPS encrypts your key and answers in transit. The form accepts only the base address on port 443; the evaluator adds the API paths itself.
What does the passkey step do?
Every score must be approved with a passkey on a team member's account on this website, for that problem, dataset, address and key. It confirms that a team member's account approved the score; it does not prove who wrote the solution. The step is deliberately manual: your coding agent can prepare the address and key, and a team member submits.
What counts against the daily validation limit?
Every validation submission your team starts for that problem, including ones still queued or running. Failures caused by the website or the evaluator do not count. The submission page shows how many are left, and the count resets at 00:00 UTC.