PeaceTech Hackathon

AI access

The models EPFL hosts for this hackathon, from the chat or from your own code. Your team's login and key are on My profile.

PeaceTech Hackathon 2026 · 26 and 27 September

AI for your project

A chat window, and the same models from your own code. They run on EPFL machines in Lausanne, free this weekend. Nothing you type leaves EPFL, unless you switch on web search.

Rules

You have two keys, and the order matters. The shared hackathon key comes first: it carried 24 simultaneous requests in testing without a single failure. Your team key is the fallback, good for about six at once, and it exists so you are never stuck.

Retry once if a request is refused. A 429 means too many at the same instant, not that anything is broken. In testing every refused request worked when sent again. Press send again, or catch it in code. Sending requests one after another rather than all at once avoids it entirely.

Your key is an EPFL credential, and you are responsible for what is done with it. It is issued against a real EPFL account, and every request made with it is attributed to that account. A key that ends up in a public repository is found by automated scanners within hours and used by strangers. EPFL can suspend access without notice. Leaking the shared key takes the service down for every team at once, which is precisely why you also have your own. Keep it in a .env file, add .env to your .gitignore, and never put it in a commit, a screenshot, a slide or a shared document. Every key is deleted on Sunday evening.

No personal data about identifiable people.

Start here

Are you an EPFL employee, or an EPFL student working in a lab?

Yes

You do not need the team credentials at all, and using your own access leaves more of the shared service for everyone else. Please do.

To chat, just go and log in. On the EPFL network or eduroam, open chat.rcp.epfl.ch and sign in with your EPFL account. No key, no setup, same models. Off that network it does not work at all, and then you use ai.peacetech.ch like everyone else.

To use it in your code, make a key first.

  1. On the EPFL network, eduroam or VPN, open portal.rcp.epfl.ch/aiaas/keys
  2. Sign in with your EPFL account and create a key. It appears immediately
  3. Put it in your code, exactly like a team key
base_url = "https://inference-rcp.epfl.ch/v1"
api_key  = "your own key"

Once you have the key you can be anywhere: home, a train, mobile data, no VPN needed. I tested it on a phone hotspot. The EPFL network is only needed to create it, so make one before you leave campus.

No

Use your team's credentials. The chat needs nothing but the login. For your own code your profile carries two keys: a shared hackathon key to use first, and your team's own key as a fallback.

  1. Log in at peacetech.ch and open your profile
  2. Copy your AI credentials: a login, a password, and two keys
  3. Open ai.peacetech.ch and sign in
  4. Type your question

For your own code, use the keys from your profile with the address in Your own code.

The login belongs to your team, not to you. Everyone on the team signs in with it and sees the same conversations, so treat the chat as shared. And there is no password reset: if it will not let you in, come to the help desk rather than trying variations.

The controls

The chat message box, showing the plus and diamond icons on the left and the model name on the right
The message box. The model you are on is named above it and again at the bottom right.
WhereWhat it does
+, bottom leftAttach a PDF or text file and ask about it
Diamond icon, next to itTurn web search on and off. Off by default. It sends your search terms outside EPFL, so turn it off again when you are done
Model name, bottom rightChange model

Models

Small answers in a second or two and handles ordinary work. Big is slower because it thinks first, and is better at hard reasoning. Start small, switch up when the answer is not good enough.

Reach for DeepSeek, GLM or Apertus: all three are recommended and all three will carry your project. DeepSeek and GLM are EPFL's own picks, "the best ranked Open Weights models at one point in time". Apertus is the open Swiss model built at EPFL with ETH Zurich and handles the same work well, with open weights, open data and an open training recipe, in two sizes: 70B for the hard questions and 8B when you want an answer quickly. You can do the whole hackathon on any of the three.

In the chatSizeIdentifier, for code
Small model (DeepSeek), defaultsmalldeepseek-ai/DeepSeek-V4-Flash-0731
Large model (GLM)bigzai-org/GLM-5.3-Flash
Apertus 70B, built at EPFLbigswiss-ai/Apertus-v1.5-70B
Apertus 8B, built at EPFLsmallswiss-ai/Apertus-v1.5-8B
Qwen 3.6bigQwen/Qwen3.6-35B-A3B
Kimi, for codebigmoonshotai/Kimi-K2.7-Code
GPT-OSS 120Bbigopenai/gpt-oss-120b
not in the chatembeddingsQwen/Qwen3-Embedding-8B
not in the chatrerankerBAAI/bge-reranker-v2-m3

The endpoint serves more than these seven, which are more than enough for the weekend. The two others worth knowing about are Qwen/Qwen3-Embedding-8B for embeddings and BAAI/bge-reranker-v2-m3 for reranking, both explained under Your own code. To see the full list, which comes back as raw JSON:

curl https://inference-rcp.epfl.ch/v1/models -H "Authorization: Bearer YOUR_KEY"

If it breaks

WhereWhat you seeWhat to do
ChatIt will not let you in at ai.peacetech.chCheck the login and password from your profile. There is no reset link, so come to the help desk rather than trying variations
ChatIt says it cannot browse the webWeb search is off. Diamond icon at the bottom left, turn it on, ask again, then turn it off
ChatThe model list is emptyCome to the help desk. Your account is not attached to your team's models
Chat or codeThe answer comes back emptyThe model spent its budget thinking before writing anything. Raise max_tokens: below about 200 even the small model can come back blank. In the chat, try the small model
Code401 UnauthorizedYour API key is wrong, or the word Bearer is missing before it. Copy the key again with no spaces or line breaks
Code429, rate limit exceededToo many at the same instant. Retry straight away, or switch to your team key
CodeKey is blockedEPFL has disabled that key. Retrying will not help. Switch to your other key and tell the help desk
Code404 on the modelThe identifier must match exactly, slashes and capitals included
CodeThe address will not resolveCheck the hyphen: inference-rcp.epfl.ch, not inference.rcp

Your own code

This section is for running inference from your own project code, rather than through the chat.

The service works the same way as OpenAI's, so any library written for OpenAI works here too. You change two things, the address and the key, and the rest of your code is unchanged.

Address

https://inference-rcp.epfl.ch/v1

Works from anywhere, no EPFL account and no EPFL wifi. Watch the hyphen: inference-rcp. The version with a dot is EPFL-internal and will not resolve off campus.

Use the shared hackathon key first, and fall back to your team key. The shared one is far larger: 24 requests at once with no failures in testing, against about six for a team key. Both are in your profile.

Python

from openai import OpenAI

SHARED = "sk-..."   # the hackathon key, use this first
TEAM   = "sk-..."   # your team key, the fallback

def ask(messages, model="deepseek-ai/DeepSeek-V4-Flash-0731"):
    last = None
    for key in (SHARED, TEAM):
        client = OpenAI(base_url="https://inference-rcp.epfl.ch/v1", api_key=key)
        try:
            return client.chat.completions.create(model=model, messages=messages)
        except Exception as e:
            last = e            # busy, refused, or blocked: try the other key
    raise last

r = ask([{"role": "user", "content": "Hello"}])
print(r.choices[0].message.content)

That pattern costs four lines and covers the three things that go wrong: the shared key busy, the shared key blocked, or a transient failure. If you would rather keep it simple, use the shared key alone and keep your team key in your pocket.

Retrieval: embeddings and reranking

Two models for building retrieval-augmented generation over your own corpus. Neither is exposed in the chat, only through the API.

ModelWhat it does
Qwen/Qwen3-Embedding-8BEmbedding model. Maps text to dense vectors of 4096 dimensions, so you can retrieve by semantic similarity rather than lexical match. Store the vectors in a vector database (FAISS, Chroma, pgvector, Qdrant) and query by cosine similarity.
BAAI/bge-reranker-v2-m3Cross-encoder reranker. Scores each candidate jointly with the query, which is more accurate than vector similarity alone. The usual pipeline is retrieve top-k by vector search, then rerank down to top-n before passing them to the model.

Computing embeddings

e = client.embeddings.create(
    model="Qwen/Qwen3-Embedding-8B",
    input=["first document", "second document"],
)
vectors = [d.embedding for d in e.data]   # dim 4096

Reranking candidates

import requests

r = requests.post(
    "https://inference-rcp.epfl.ch/v1/rerank",
    headers={"Authorization": "Bearer YOUR_KEY"},
    json={
        "model": "BAAI/bge-reranker-v2-m3",
        "query": "how do rumours spread",
        "documents": ["Cats are mammals.",
                      "False claims spread faster than corrections.",
                      "The weather is cold."],
        "top_n": 2,
    },
)
print(r.json()["results"])   # sorted by relevance_score, descending

Tools more at wiki.rcp.epfl.ch

These are ready-made programs that can run on EPFL's models instead of a paid provider. You install them, paste in the address and your key, and they work. No code needed.

They fall into four kinds:

  • Coding agents. They live in your editor or terminal, read your project's files and write or fix code for you, rather than you copying text in and out of a chat window.
  • Desktop chat apps. A chat window installed on your own machine instead of a website. AnythingLLM also answers questions about a folder of your own documents.
  • Transcription. Turns audio or video into text, useful if your challenge involves recordings.
  • Workflow builders. Drag-and-drop tools for chaining several steps together, for a team that wants a pipeline rather than a script.

All of them take the same three settings: the address, your key, and a model name. The list comes from EPFL's own page of tools tested against the service, which has many more and their full configuration. It only opens on the EPFL network or eduroam, and its examples use the internal address, so use the external one instead.

ToolKindSet it in
ClineCoding agent, VS CodeSettings, OpenAI-compatible provider
Kilo CodeCoding agent, VS CodeSettings, OpenAI-compatible provider
OpenCodeCoding agent, terminal~/.config/opencode/opencode.json
Claude CodeCoding agent, terminalnot usable off campus, see below
JanDesktop chat appModel provider settings
AnythingLLMDesktop chat, plus questions about your own documentsLLM preference, OpenAI generic
BuzzTranscription, audio and video to textPreferences, openai/whisper-large-v3
DifyWorkflow builderModel provider
LangFlowWorkflow builderOpenAI-compatible component

VS Code

Base URL   https://inference-rcp.epfl.ch/v1
API key    your key
Model      moonshotai/Kimi-K2.7-Code

Claude Code is the exception. RCP documents it, but it speaks a different protocol and that route only exists on EPFL's internal address. I tested it against the external one: it answers 404, so it does not work from outside the campus network. Use one of the tools above instead.