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.
- On the EPFL network, eduroam or VPN, open portal.rcp.epfl.ch/aiaas/keys
- Sign in with your EPFL account and create a key. It appears immediately
- 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.
- Log in at peacetech.ch and open your profile
- Copy your AI credentials: a login, a password, and two keys
- Open ai.peacetech.ch and sign in
- 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
| Where | What it does |
|---|---|
| +, bottom left | Attach a PDF or text file and ask about it |
| Diamond icon, next to it | Turn 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 right | Change 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 chat | Size | Identifier, for code |
|---|---|---|
| Small model (DeepSeek), default | small | deepseek-ai/DeepSeek-V4-Flash-0731 |
| Large model (GLM) | big | zai-org/GLM-5.3-Flash |
| Apertus 70B, built at EPFL | big | swiss-ai/Apertus-v1.5-70B |
| Apertus 8B, built at EPFL | small | swiss-ai/Apertus-v1.5-8B |
| Qwen 3.6 | big | Qwen/Qwen3.6-35B-A3B |
| Kimi, for code | big | moonshotai/Kimi-K2.7-Code |
| GPT-OSS 120B | big | openai/gpt-oss-120b |
| not in the chat | embeddings | Qwen/Qwen3-Embedding-8B |
| not in the chat | reranker | BAAI/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"
Web search
Off until you turn it on. Diamond icon, bottom left of the message box.
What changes when you do:
- Your search terms leave EPFL and go to an outside search engine. Your documents do not, but the words used to search them do.
- The answer can draw on pages found on the web, instead of only on what the model already knows.
- It is slower and uses more of your team's share.
Turn it off as soon as you are done. It stays on until you switch it back off, so every message after it keeps sending your words outside EPFL and keeps costing your team extra. Use it only when you actually need a source.
If it breaks
| Where | What you see | What to do |
|---|---|---|
| Chat | It will not let you in at ai.peacetech.ch | Check the login and password from your profile. There is no reset link, so come to the help desk rather than trying variations |
| Chat | It says it cannot browse the web | Web search is off. Diamond icon at the bottom left, turn it on, ask again, then turn it off |
| Chat | The model list is empty | Come to the help desk. Your account is not attached to your team's models |
| Chat or code | The answer comes back empty | The 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 |
| Code | 401 Unauthorized | Your API key is wrong, or the word Bearer is missing before it. Copy the key again with no spaces or line breaks |
| Code | 429, rate limit exceeded | Too many at the same instant. Retry straight away, or switch to your team key |
| Code | Key is blocked | EPFL has disabled that key. Retrying will not help. Switch to your other key and tell the help desk |
| Code | 404 on the model | The identifier must match exactly, slashes and capitals included |
| Code | The address will not resolve | Check 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.
| Model | What it does |
|---|---|
| Qwen/Qwen3-Embedding-8B | Embedding 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-m3 | Cross-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.
| Tool | Kind | Set it in |
|---|---|---|
| Cline | Coding agent, VS Code | Settings, OpenAI-compatible provider |
| Kilo Code | Coding agent, VS Code | Settings, OpenAI-compatible provider |
| OpenCode | Coding agent, terminal | ~/.config/opencode/opencode.json |
| Claude Code | Coding agent, terminal | not usable off campus, see below |
| Jan | Desktop chat app | Model provider settings |
| AnythingLLM | Desktop chat, plus questions about your own documents | LLM preference, OpenAI generic |
| Buzz | Transcription, audio and video to text | Preferences, openai/whisper-large-v3 |
| Dify | Workflow builder | Model provider |
| LangFlow | Workflow builder | OpenAI-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.
Links
- Our chatanywhere
- Create your own EPFL keyEPFL network, eduroam or VPN
- EPFL's own chatEPFL network or eduroam
- RCP wiki, tool setupEPFL network or eduroam
- About the serviceanywhere
- PeaceTech Hackathonanywhere