Skip to content

Nebius Quickstart

Beginner ~15 min

You probably do not need this page today

The route for the day is the hosted BioNeMo Research Agent. Your link and token are in #berlin-general on Slack, there is nothing to install, and each challenge has a prompt you paste straight in. Start at Setup and the challenges.

This page is the do-it-yourself version: a local ClawBio checkout with your own Nebius Token Factory key and model in charge of a four-skill allowlist. Useful if you want to see the wiring, extend the allowlist, or keep working after the event. Not required for any challenge.

It is the smallest complete thing that is genuinely agentic, so it is worth reading even if you build in the hosted agent.

Why this page exists

ClawBio skills are plain Python. Most need no language model at all: rare-high-impact-variants reads a VCF and does arithmetic. You can run every skill in the library from a terminal, all afternoon, and consume no Nebius credit and build nothing agentic.

The interesting part is the layer above. An agent reads each SKILL.md, decides which skill answers the question, runs it, reads the output and reports what it found and what it could not conclude. That agent runs on a model, the model runs on Nebius Token Factory, and that is where your credits go.

This page wires those two halves together.

0. What you need first

Two things, and you very likely have both.

git --version          # any recent version
python3 --version      # must be 3.11 or newer

If either is missing:

xcode-select --install                 # git, if you do not have it
brew install python@3.12               # python, if yours is older than 3.11
sudo apt update && sudo apt install -y git python3 python3-venv python3-pip

Use Git for Windows and python.org/downloads. Tick Add python.exe to PATH in the installer. Then run the commands below in Git Bash or PowerShell, replacing python3 with python.

You do not need uv, Conda, Docker, or a GPU. Steps 1 and 2 use nothing but the Python standard library.

1. Get ClawBio

git clone --depth 1 https://github.com/ClawBio/ClawBio.git
cd ClawBio

That is the whole install for the reference agent. Its dry run uses bundled demo data. Some other skills and the real challenge inputs need separate data or network access; each challenge brief states what it requires.

2. Prove it works, before you have a key

python3 examples/nebius_agent.py --dry-run

No key, no dependencies, no API call, no spend. It prints the base URL, the model, the tools the model will be offered, and then runs one skill locally to prove dispatch works. You should see a report about rare high-impact variants.

If that prints, the reference checkout and one local dispatch path are sound. It does not test every skill, your key, the venue network or Token Factory capacity. Do this before you arrive so checkout problems do not consume build time.

3. Get a key

Nebius plan to provide Token Factory promotional credit at the venue. Follow the confirmed QR or code instructions at check-in. Once the credit appears in your project, create a key at tokenfactory.nebius.com/project/api-keys.

export NEBIUS_API_KEY=paste-your-key-here

On Windows PowerShell that is $env:NEBIUS_API_KEY = "paste-your-key-here".

The key lives in that terminal window only. Open a new tab and you will need to export it again, which is the usual cause of a sudden NEBIUS_API_KEY is not set.

The API is OpenAI-compatible. Base URL https://api.tokenfactory.nebius.com/v1/, authenticated with Authorization: Bearer <key>, and it supports native function calling, which is the feature the whole day depends on.

4. Install the one dependency

python3 -m pip install openai

That is the only package needed, and only from here on: the dry run above deliberately avoids it. If pip complains about an externally managed environment, make a virtual environment first:

python3 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
python3 -m pip install openai

5. Go live

python3 examples/nebius_agent.py \
  --ask "Which variants are genuinely rare and high-impact, and which can you not tell?"

This is a real run, on 12 August, trimmed only for length:

Model    : Qwen/Qwen3-235B-A22B-Instruct-2507
Question : Which variants are genuinely rare and high-impact, and which ones can you not tell either way?

[tool call 1] run_clawbio_skill(skill='rare_high_impact_variants')
             -> 1524 chars, starting '# Rare High-Impact Variants Report'

--- ANSWER ---
1. GENE1 (1:100000 C>T): nonsense, heterozygous, AF = 0.0002 (ultra-rare), ClinVar: Pathogenic
2. GENE7 (7:700000 C>T): splice_acceptor, heterozygous, AF = 0.002 (rare)
3. GENE5 (5:500000 C>G): nonsense, heterozygous, AF = 0.004 (rare)

The variant that cannot be confirmed either way is one high-impact nonsense
variant with no population-frequency data. The report explicitly states that
absence of frequency data is not evidence of rarity, so we cannot determine
if it is rare or common.

Tokens: 962 in, 306 out, over 1 skill call(s).

The tool-call line is the point. It is the provenance trail: not "the model said so" but "the model ran this skill and here is what came back". This one measured run used 1,268 tokens. It verifies the call shape, not the room's credit or capacity limits.

6. Read what it refused to say

The demo genome has six carried annotated variants. Five are high impact. Of those, three have a documented frequency below the threshold, one is common, and one has no population frequency data at all.

That last variant is the whole event in miniature. Absence of a frequency is not evidence of rarity, and a pipeline that quietly counts it as rare produces a confident, wrong, clinically actionable answer. Check whether your agent reported it honestly or swept it into the rare pile. Weak models sweep.

If it swept, that is not a bug to hide. It is the most interesting slide in your demo.

7. Now make it yours

The script is about 200 lines and deliberately small. Three obvious extensions, one per challenge:

Challenge Extension
1. Diagnostic odyssey Add cnv_acmg_classifier to SKILLS and ask a question only answerable by combining it with the SNV skills
2. Cancer target Swap in target_validation_scorer and clinical_trial_finder, then make the agent argue against its own pick
3. Whose genome fails Add gwas_prs, ask for a percentile, and see whether the agent surfaces Reference population: EUR unprompted. Then make it refuse

Skills are whitelisted in the SKILLS dict at the top. That is deliberate: the model picks from a fixed menu rather than composing a shell command. Keep it that way.

Choosing a model

A model ID copied from Nebius function-calling documentation returned a 404 in the 12 August test. List the live catalogue instead:

python3 examples/nebius_agent.py --list-models

The current script default is Qwen/Qwen3-235B-A22B-Instruct-2507, verified working with tool calls. The organisers will name the final room model after the endpoint and capacity test. Until then, do not hard-code a different model into your project.

Reasoning models will surprise you

Measured on 12 August, same 150-word prompt, max_tokens=1200:

Model Billed Delivered as answer Wasted
zai-org/GLM-5.2 1200 0 100%
MiniMaxAI/MiniMax-M3 905 ~297 ~67%
openai/gpt-oss-120b 276 ~262 ~5%
Qwen/Qwen3-235B-A22B-Instruct-2507 165 ~230 ~0%

GLM-5.2 spent its entire budget in reasoning_content and returned an empty answer. It was not slow, it emitted 341 tokens/sec, but a participant sees a blank response. If a model returns nothing, raise max_tokens before assuming your code is broken.

This matters more in an agentic loop than in a single call, because the overhead multiplies on every tool call. openai/gpt-oss-120b was the best balance of speed and low overhead in this test.

Single samples on a shared endpoint, so treat as indicative. Re-measuring properly on the day is itself a legitimate project.

The comparison worth running

Ask the same question of a small model and a large one, and compare how each handles the variant with no frequency data. Honest abstention is harder than it looks and weaker models fail it. That comparison is a demo in its own right.

Troubleshooting

Symptom Cause
NEBIUS_API_KEY is not set Export it, or you redeemed the promo code without creating a key afterwards
401 from the API Key not created under the project that holds the credits
--dry-run fails A checkout problem, nothing to do with Nebius. Ask in #berlin-help
Model ignores the tools Some small models are weak at function calling. Try a larger one before assuming your code is wrong
Answer with no [tool call] lines The model answered from memory. That is a finding: it is the failure this whole event is about
404 model does not exist You used an ID from the Nebius docs. Run --list-models
Empty answer, finish_reason: length A reasoning model burned the budget thinking. Raise --max-tokens or switch model

Next

Pick a challenge. You now have the piece that makes any of them agentic rather than a set of scripts run by hand.