Leer hoe je een Streamlit-app bouwt voor een vergelijking naast elkaar van Qwen3-Next-80B-A3B en andere Qwen-modellen, met focus op prestatieresultaten uit de praktijk.
Het Qwen-team lanceerde onlangs het Qwen3-Next-80B-A3B-model, dat geavanceerd redeneren, ultralange contextverwerking en uitzonderlijke inferentiesnelheid combineert via een hybride Mixture-of-Experts (MoE)-architectuur.
In deze gids richt ik me op hoe Qwen3-Next-80B-A3B presteert op praktische, realistische taken vergeleken met eerdere Qwen-modellen zoals Qwen3-30B-A3B. In plaats van abstracte benchmarks draaien we hands-on tests naast elkaar, waaronder redeneren, code en ultralange documentprompts, zodat je de afwegingen ziet in snelheid, outputkwaliteit en GPU-geheugengebruik.
Stap voor stap laat ik je zien hoe je:
Toegang krijgt tot en werkt met zowel Qwen3-Next-80B-A3B als Qwen3-30B-A3B via de OpenRouter API, zonder installatie
Een Streamlit-app bouwt voor directe vergelijking naast elkaar van modelantwoorden, latentie en middelengebruik
Experimenten met ultralange context (100K+ tokens) draait om de echte grenzen van de modellen te testen
Prestaties uit de praktijk analyseert, zoals latentie, tokens/sec en VRAM-gebruik.
Aan het einde ziet je app er zo uit:
Wat is Qwen3-Next?
Qwen3-Next is een model met 80 miljard parameters volgens het Mixture-of-Experts (MoE)-principe. In de praktijk activeert het slechts 3 miljard parameters per token, waardoor het tot tien keer goedkoper is om te trainen en tot tien keer sneller draait dan oudere dichte modellen (zoals Qwen3-32B), terwijl het qua kwaliteit gelijkwaardig is of beter presteert.
Enkele belangrijke vernieuwingen in dit model zijn:
Hybride architectuur: Qwen3-Next gebruikt een 75:25-mix van Gated DeltaNet (voor snelle lineaire attentie) en Gated Attention (voor diepe recall), waarmee de sterke punten van beide methoden worden gecombineerd.
Ultra-sparse MoE: Het gebruikt 512 experts maar activeert er slechts 10+1 per inferentie, waardoor de rekentijd met meer dan 90% wordt verminderd ten opzichte van dichte LLM’s
Multi-tokenvoorspelling: Dit model ondersteunt speculative decoding voor enorme snelheidswinst, vooral bij streaming of chat.
Extreem lange context: Het verwerkt tot 256K tokens native (1M+ met YaRN-scaling) met minimale prestatiedaling en is ideaal voor lange boeken, codebases, enz.
Het Qwen 3 Next-model is beschikbaar in twee varianten:
Qwen3-Next-80B-A3B-Instruct: Dit model is ontworpen vooralgemene chat, coderen en open QA.
Qwen3-Next-80B-A3B-Thinking: Dit model kan worden gebruikt voor geavanceerd redeneren, chain-of-thought en onderzoeksworkflows.
Demo: Q&A en redeneren met Qwen3-Next via de OpenRouter API
In dit deel laat ik zien hoe je het Qwen3-Next-model gebruikt via de OpenRouter API om een interactieve QA- en redeneerassistent te bouwen.
Zo werkt het:
Voer een vraag in het tekstvak in, of sleep een lang PDF-document erin.
Kies de Max tokens-grootte en modelnaam in de dropdown
Vraag meteen twee modellen naast elkaar uit voor directe outputvergelijking.
Bekijk gedetailleerde statistieken per run, zoals reactietijd (latentie), tokens per seconde en outputlengte om zowel prestaties als efficiëntie in praktijkscenario’s te begrijpen.
Stap 1: Vereisten
Voordat we deze demo draaien, zorgen we dat we alle vereisten op orde hebben.
Stap 1.1: Imports
Zorg eerst dat je de volgende imports geïnstalleerd hebt:
Dit commando installeert alle kernafhankelijkheden die nodig zijn om de app te bouwen: Streamlit voor de UI, requests voor API-calls en pypdf voor het extraheren van tekst uit PDF-documenten.
Stap 1.2: OpenRouter API-sleutel instellen
Het Qwen3-Next-model is ook beschikbaar via de officiële Qwen API (AlibabaCloud), HuggingFace en als gequantiseerde versie via Ollama. Voor deze tutorial gebruikte ik OpenRouter, waarmee je meerdere modellen kunt benaderen met één API-sleutel. Zo stel je je API-sleutel in voor het Qwen3-next-80b-a3b-instruct-model:
Ga naar het tabblad Models en zoek naar de modellen “Qwen3-next-80b-a3b-instruct” en “Qwen3-30B-A3B”. Je kunt kiezen tussen de Thinking- en Instruct-varianten, afhankelijk van je toepassing. In deze tutorial vergelijk ik de twee Instruct-varianten.
Scroll naar beneden en klik op Create API Key. Vul de naam voor de sleutel en het kredietlimiet (optioneel) in en klik op Create. Bewaar deze API-sleutel voor later gebruik.
Ga vervolgens naar het tabblad Credits en voeg je kaart- of bankgegevens toe. Je kunt ook betalen via Amazon Pay of crypto. Voor deze demo voegde ik ongeveer $8 toe, wat voldoende was.
Stel nu je API-sleutel in als omgevingsvariabele voordat je de app draait:
We beginnen met het configureren van de modellen die we willen vergelijken. Elk model is gedefinieerd met een identifier (gebruikt voor API-calls), het totale aantal parameters en het aantal actieve parameters.
import streamlit as st
import requests
import time
import PyPDF2
MODEL_CONFIG ={"Qwen3-Next-80B-A3B":{"id":"qwen/qwen3-next-80b-a3b-instruct","params_billion":80,"active_params_billion":3},"Qwen3-30B-A3B":{"id":"qwen/qwen3-30b-a3b-instruct-2507","params_billion":30,"active_params_billion":3},"Qwen3-30B-A3B":{"id":"qwen/qwen3-next-80b-a3b-thinking","params_billion":30,"active_params_billion":3},}Mogelijk gemaakt door
We importeren de benodigde libraries voor het bouwen van de Streamlit-webapp, zoals streamlit voor de UI, requests voor API-calls, time voor timing en PyPDF2 voor het extraheren van PDF-tekst.
Daarna definiëren we de MODEL_CONFIG-dictionary met de beschikbare modellen voor vergelijking, inclusief hun unieke ID’s (voor API-calls) en parameteraantallen, zodat je eenvoudig verschillende Qwen3-modellen kunt uitbreiden in de app.
Stap 3: Helperfuncties
Vervolgens definiëren we enkele helperfuncties voor de backend. Deze bevatten functies om het geheugenverbruik te schatten, realtime API-calls naar OpenRouter te doen en tekst te extraheren uit geüploade PDF’s.
estimate_vram()-functie: Schat de GPU-VRAM die nodig is om een model te draaien, rekening houdend met of het een dicht of MoE (Mixture-of-Experts) model is. Voor MoE-modellen kijkt het naar zowel totale als actieve parameters en voegt overhead toe voor routing en systeemgebruik.
query_openrouter()-functie: Verstuurt prompts naar een gekozen LLM-model op OpenRouter en haalt het antwoord op. Meet de totale latentie (end-to-end API-tijd), extraheert nuttige statistieken zoals het aantal verwerkte tokens en berekent de tokens-per-seconde-snelheid.
Let op dat de gerapporteerde latentie alle netwerk-, wachtrij- en serververtragingen omvat, niet alleen de pure modelsnelheid. Het weerspiegelt dus de end-to-end reactietijd in de praktijk, die kan schommelen afhankelijk van API-belasting en internetomstandigheden.
extract_pdf_text()-functie: Maakt het mogelijk om PDF’s te uploaden en te analyseren als context voor de modellen. Parseert het PDF-document met PyPDF2 en extraheert de ruwe tekst, tot een tokenveilige limiet voor zeer lange documenten. Bij een fout geeft de functie een foutmelding terug.
Deze helperfuncties zorgen voor efficiënt geheugenverbruik, betrouwbare API-gestuurde inferentie en soepele contextextractie, wat een naadloze gebruikerservaring oplevert.
Stap 4: Streamlit-applicatie
Met alle kernonderdelen klaar kunnen we nu onze Streamlit-app bouwen.
Stap 4.1: Aangepaste CSS
De eerste stap voor de gebruikersflow is het ontwerp en de lay-out. We configureren de Streamlit-pagina en injecteren aangepaste CSS voor een gestructureerde look.
We gebruiken zowel de configuratieopties van Streamlit als aangepaste CSS-styling. De aanroep st.set_page_config stelt de paginatitel in en een brede lay-out voor weergave naast elkaar. Aangepaste CSS wordt geïnjecteerd via st.markdown om belangrijke UI-elementen te stijlen.
De .main-header centreert en kleurt de titel, .metric-card en .output-box verbeteren de weergave van statistieken en outputs, en .model-header scheidt modelantwoorden visueel met een verloop. Het laatste st.markdown-blok rendert een kop en een korte appbeschrijving.
Stap 4.2: Invoersectie
We ontwierpen de invoersectie met twee intuïtieve opties: upload een lang PDF-bestand als context of typ direct een eigen vraag.
st.markdown("### Input")with st.container():
col_upload, col_text = st.columns([2,3])with col_upload:
uploaded_pdf = st.file_uploader("Upload PDF for context",type=["pdf"],help="Upload a PDF document to provide context for your question")with col_text:
user_question = st.text_area("Ask a question:",
height=100,
max_chars=12000,
placeholder="Enter your question here...",help="Ask any question or provide a topic to analyze")Mogelijk gemaakt door
Deze invoersectie toont twee kolommen naast elkaar: de eerste biedt een PDF-uploader om contextdocumenten toe te voegen, de tweede biedt een tekstveld om vragen of onderwerpen in te voeren. Zo kunnen gebruikers een PDF uploaden, een vraag typen of beide samen als input gebruiken voor de modelvergelijking stroomafwaarts.
Stap 4.3: Modelselectie
De modelselectie geeft volledige controle over welke Qwen-modellen je vergelijkt en hoe lang de modelantwoorden mogen zijn. Zodra de documentcontext is ingesteld, kun je eenvoudig twee modellen kiezen uit een dropdown, samen met de gewenste maximale antwoordlengte (in tokens), zodat je makkelijk kunt experimenteren met korte en lange outputs.
context =""if uploaded_pdf:with st.spinner(" Extracting PDF text..."):
context = extract_pdf_text(uploaded_pdf)
st.success(f" PDF loaded: {len(context)//1000}K characters extracted.")
st.markdown("### Model Selection")
model_names =list(MODEL_CONFIG.keys())
col1, col2, col3 = st.columns([2,2,1])with col1:
model1 = st.selectbox("Model A",
model_names,
index=0,help="Select the first model to compare")with col2:
model2 = st.selectbox("Model B",
model_names,
index=1iflen(model_names)>1else0,help="Select the second model to compare")with col3:
max_tokens = st.selectbox("Max Tokens",[512,1024,2048,4096],
index=2,help="Maximum length of response (higher = longer responses). Use 2048+ for reasoning questions.")Mogelijk gemaakt door
De bovenstaande code extraheert eerst tekst uit een geüploade PDF met een helperfunctie. Vervolgens toont hij drie dropdowns: twee om de Qwen-modellen (of andere, afhankelijk van de toepassing) te kiezen voor vergelijking, en één om de maximale tokenlimiet voor antwoorden te specificeren.
Let op: De tokenlimiet bepaalt de maximale outputlengte. Voor complexe of meerstaps redeneertaken zorgt een hogere limiet ervoor dat het model een compleet antwoord kan genereren.
Stap 4.4: Indienen
Deze stap implementeert de hoofdlogica voor modelvergelijking. Wanneer de gebruiker op "Submit & Compare Models" klikt, valideert de app de invoer, bouwt een contextbewuste prompt en start verzoeken naast elkaar naar de geselecteerde modellen
st.markdown("---")
col_btn1, col_btn2, col_btn3 = st.columns([1,2,1])with col_btn2:if st.button("Submit & Compare Models",type="primary", use_container_width=True):ifnot user_question andnot uploaded_pdf:
st.warning(" Please enter a question or upload a PDF.")else:if context:
base_prompt =f"DOCUMENT:\n{context}\n\nQUESTION: {user_question or'Summarize the above document.'}"else:
base_prompt = user_question
prompt =f"""Please provide a detailed and thorough response. Think step by step and explain your reasoning clearly.
{base_prompt}
Please provide a comprehensive answer with clear reasoning and examples where appropriate."""
st.markdown("### Results")
col_left, col_right = st.columns(2)
models_to_process =[(model1, col_left,"Model A"),(model2, col_right,"Model B")]for model_key, col, model_label in models_to_process:with col:
st.markdown(f'<div class="model-header">{model_label}: {model_key}</div>', unsafe_allow_html=True)
progress_bar = st.progress(0)
status_text = st.empty()try:
progress_bar.progress(25)
status_text.text("Initializing model...")
model_info = MODEL_CONFIG[model_key]
vram_estimate = estimate_vram(
model_info["params_billion"],
active_params_billion=model_info["active_params_billion"])
progress_bar.progress(50)
status_text.text("Querying model...")
result = query_openrouter(model_info["id"], prompt, max_tokens=max_tokens)
progress_bar.progress(100)
status_text.text("Complete!")if"error"in result:
st.error(f"Error: {result['error']}")else:
st.markdown(f'''
<div class="metric-card">
<strong>Performance Metrics</strong><br>
<strong>Latency:</strong> {result['latency']:.2f}s<br>
<strong>Speed:</strong> {result['tokens_per_sec']:.2f} tokens/sec<br>
<strong>Output tokens:</strong> {result['output_tokens']}<br>
<strong>Prompt tokens:</strong> {result['prompt_tokens']}<br>
<strong>Est. VRAM:</strong> {vram_estimate} GB
</div>
''', unsafe_allow_html=True)
st.markdown("** Response:**")
st.markdown(f'''
<div class="output-box">
{result["output"]if result["output"]else"<em>No output received</em>"}
</div>
''', unsafe_allow_html=True)except Exception as e:
st.error(f" Unexpected error: {str(e)}")finally:
progress_bar.empty()
status_text.empty()
st.markdown("---")Mogelijk gemaakt door
De afhandelaar voor indienen organiseert de benchmark-workflow als volgt:
Wanneer de gebruiker op "Submit & Compare Models" klikt, controleert de app of er een vraag of PDF aanwezig is en waarschuwt als beide ontbreken.
Daarna bouwt hij een prompt op basis van de documentcontext en gebruikersvraag, met instructies voor gedetailleerde, stapsgewijze antwoorden.
Het resultatengebied is in twee kolommen gesplitst voor directe vergelijking naast elkaar van modeloutputs.
Voor elk model toont hij een voortgangsbalk, schat VRAM-gebruik, doet een call naar de OpenRouter API en werkt statusberichten bij terwijl het model het verzoek verwerkt.
Na voltooiing toont de app latentie, tokens per seconde, aantallen tokens en VRAM-gebruik als prestatiemetrics in kaarten.
Qwen3-Next testen
Om de daadwerkelijke prestaties van het Qwen3-Next-model te testen, probeerde ik een paar experimenten.
Test 1: Lange context Q&A
Om de prestaties op lange context te beoordelen, draaide ik verschillende hands-on experimenten met het Project Gutenberg eBook van “Oorlogen Vrede,” een van de langste en meest complexe romans ooit geschreven.
Hieronder staan drie testcases die laten zien hoe de modellen omgaan met ultralange context, hallucinaties vermijden en hoogwaardige samenvattingen leveren.
Personage-tracking
Eerst vroeg ik beide modellen om alle hoofdpersonages te identificeren die zowel in het eerste als in het laatste hoofdstuk voorkomen, en kort te beschrijven hoe hun rollen veranderen in de loop van het verhaal.
Prompt: “Noem alle hoofdpersonages die voorkomen in zowel het eerste als het laatste hoofdstuk van de roman. Beschrijf kort hoe hun rollen in de tijd veranderen.”
Deze vraag vereist dat het model de volledige tekst verwerkt en karakterbogen nauwkeurig volgt. Hoewel beide modellen erg responsief waren, was het antwoord van Qwen3 Next netter en beter afgestemd op elk hoofdstuk van het boek.
Hallucinatie-test
Vervolgens wilde ik zien of de modellen echte inhoud van desinformatie konden onderscheiden. Ik gaf beide modellen een zin die niet voorkomt in Oorlog en Vrede, maar beroemd is uit een andere roman van Tolstoj.
Prompt:“Bevat de roman de zin ‘Alle gelukkige gezinnen lijken op elkaar; elk ongelukkig gezin is ongelukkig op zijn eigen manier’? Zo ja, waar komt die in de tekst voor?”
Deze zin komt namelijk uit Anna Karenina, niet uit Oorlog en Vrede. Een ideaal model zou “Nee” moeten antwoorden, wat sterke feitelijke nauwkeurigheid en weinig hallucinatie aantoont. Indrukwekkend genoeg gaf Qwen3-Next het juiste antwoord, terwijl het Qwen3 30B-model met een onjuiste zin kwam.
Samenvatten
Tot slot testte ik de samenvattingscapaciteiten door beide modellen te vragen de roman in 300 woorden samen te vatten.
Prompt:“Vat de roman ‘Oorlog en Vrede’ samen in 300 woorden, met focus op de persoonlijke reis van Pierre Bezoechov.”
Hoewel de beoordeling van samenvattingen deels subjectief is, vond ik de output van Qwen3-Next beter gestructureerd, samenhangender en inzichtelijker. De samenvatting was niet alleen bondig, maar bracht ook de ontwikkeling van Pierres personage helder over.
Voorbeeld 2: Meerstaps redeneren en logica
Om de geavanceerde redeneervermogens van beide modellen te testen, confronteerde ik ze met complexe, meerstapslogicapuzzels—taken die niet alleen geheugen vereisen, maar ook stapsgewijze deductie en zorgvuldige eliminatie.
Prompt: “Op de bruiloftsreceptie zijn er vijf gasten—Colin, Emily, Kate, Fred en Irene—die niet zeker weten waar ze aan tafel moeten zitten. Ze vragen het aan de moeder van de bruid, die antwoordt: "Voor zover ik me herinner, zit Colin niet naast Kate; Emily zit niet naast Fred of Kate. Noch Kate noch Emily zit naast Irene. En Fred moet links van Irene zitten." Als je hen vanaf de overkant van de tafel bekijkt, kun je de gasten dan van links naar rechts correct plaatsen?
Leg je redenatie stap voor stap uit.”
Deze puzzel vereiste het analyseren van verschillende constraints en het afleiden van de enige mogelijke zitvolgorde:
Grondwaarheid: Emily, Colin, Irene, Fred, Kate
Qwen3-Next-output: Kate, Fred, Irene, Colin, Emily (bijna correct, maar omgekeerd)
Qwen3-30B-output: Kon geen geldig antwoord vinden
Hoewel geen van beide modellen de exacte juiste volgorde gaf, kwam Qwen3-Next erg dichtbij, alleen in omgekeerde volgorde, terwijl het 30B-model helemaal niet tot een oplossing kwam. Dit laat zien dat Qwen3-Next in staat is tot meerstapsdeductie, al blijven sommige randgevallen uitdagend.
Deductieve eliminatie
Vervolgens testte ik de modellen met een deductiepuzzel geïnspireerd op de klassieke “Zebra-puzzel”.
Prompt: “Vier personen (Lisa, Mike, Nora en Omar) kochten elk een ander fruit (appel, banaan, kers, dadel) en reden in een andere auto (Ford, Honda, Kia, Mazda).
Lisa kocht de banaan niet.
De Ford-bestuurder kocht de kers.
Mike reed in een Honda.
Nora kocht de appel en reed niet in een Mazda.
De Kia-bestuurder kocht de dadel.
Omar reed niet in een Ford.
Wie kocht welk fruit en reed in welke auto? Laat je uitwerking zien.”
Dit probleem is opzettelijk onoplosbaar met de gegeven constraints, maar dit is wat de modellen teruggaven:
Qwen3-Next-output: Herkende correct dat er geen geldige toewijzing bestaat.
Qwen3-30B-output: Raakte verstrikt in een logische lus en kwam niet tot een conclusie binnen het gegeven aantal outputtokens.
Dit voorbeeld toont het vermogen van Qwen3-Next om deductief te redeneren en te herkennen wanneer er geen oplossing mogelijk is.
Conclusie
Deze tutorial laat zien hoe je Qwen3-Next-80B-A3B gebruikt voor Q&A- en redeneertaken, en het naast Qwen3-30B-A3B benchmarkt in een Streamlit-app. De resultaten benadrukken de sterke punten van Qwen3-Next bij het verwerken van ultralange documenten, het leveren van snelle inferentie en het behouden van outputkwaliteit, zelfs bij complexe redeneerproblemen.
Ik ben een Google Developers Expert in ML (Gen AI), een Kaggle 3x Expert en een Women Techmakers Ambassador met meer dan 3 jaar ervaring in tech. In 2020 heb ik een healthtech-startup mee opgericht en ik volg een master computer science aan Georgia Tech, met als specialisatie machine learning.
Word een expert in RAG met Weaviate! Voeg tekst en afbeeldingen toe om ze later terug te vinden en probeer vector-, BM25- en hybride zoekopdrachten uit.
Het Qwen-team lanceerde onlangs het Qwen3-Next-80B-A3B-model, dat geavanceerd redeneren, ultralange contextverwerking en uitzonderlijke inferentiesnelheid combineert via een hybride Mixture-of-Experts (MoE)-architectuur.
In deze gids richt ik me op hoe Qwen3-Next-80B-A3B presteert op praktische, realistische taken vergeleken met eerdere Qwen-modellen zoals Qwen3-30B-A3B. In plaats van abstracte benchmarks draaien we hands-on tests naast elkaar, waaronder redeneren, code en ultralange documentprompts, zodat je de afwegingen ziet in snelheid, outputkwaliteit en GPU-geheugengebruik.
Stap voor stap laat ik je zien hoe je:
Aan het einde ziet je app er zo uit:
Wat is Qwen3-Next?
Qwen3-Next is een model met 80 miljard parameters volgens het Mixture-of-Experts (MoE)-principe. In de praktijk activeert het slechts 3 miljard parameters per token, waardoor het tot tien keer goedkoper is om te trainen en tot tien keer sneller draait dan oudere dichte modellen (zoals Qwen3-32B), terwijl het qua kwaliteit gelijkwaardig is of beter presteert.
Enkele belangrijke vernieuwingen in dit model zijn:
Bron: Qwen
Het Qwen 3 Next-model is beschikbaar in twee varianten:
Demo: Q&A en redeneren met Qwen3-Next via de OpenRouter API
In dit deel laat ik zien hoe je het Qwen3-Next-model gebruikt via de OpenRouter API om een interactieve QA- en redeneerassistent te bouwen.
Zo werkt het:
Stap 1: Vereisten
Voordat we deze demo draaien, zorgen we dat we alle vereisten op orde hebben.
Stap 1.1: Imports
Zorg eerst dat je de volgende imports geïnstalleerd hebt:
Dit commando installeert alle kernafhankelijkheden die nodig zijn om de app te bouwen:
Streamlitvoor de UI,requestsvoor API-calls enpypdfvoor het extraheren van tekst uit PDF-documenten.Stap 1.2: OpenRouter API-sleutel instellen
Het Qwen3-Next-model is ook beschikbaar via de officiële Qwen API (AlibabaCloud), HuggingFace en als gequantiseerde versie via Ollama. Voor deze tutorial gebruikte ik OpenRouter, waarmee je meerdere modellen kunt benaderen met één API-sleutel. Zo stel je je API-sleutel in voor het Qwen3-next-80b-a3b-instruct-model:
Stel nu je API-sleutel in als omgevingsvariabele voordat je de app draait:
Stap 2: Modelconfiguratie instellen
We beginnen met het configureren van de modellen die we willen vergelijken. Elk model is gedefinieerd met een identifier (gebruikt voor API-calls), het totale aantal parameters en het aantal actieve parameters.
We importeren de benodigde libraries voor het bouwen van de Streamlit-webapp, zoals streamlit voor de UI, requests voor API-calls, time voor timing en PyPDF2 voor het extraheren van PDF-tekst.
Daarna definiëren we de
MODEL_CONFIG-dictionary met de beschikbare modellen voor vergelijking, inclusief hun unieke ID’s (voor API-calls) en parameteraantallen, zodat je eenvoudig verschillende Qwen3-modellen kunt uitbreiden in de app.Stap 3: Helperfuncties
Vervolgens definiëren we enkele helperfuncties voor de backend. Deze bevatten functies om het geheugenverbruik te schatten, realtime API-calls naar OpenRouter te doen en tekst te extraheren uit geüploade PDF’s.
Zo past elke functie in de pijplijn:
estimate_vram()-functie: Schat de GPU-VRAM die nodig is om een model te draaien, rekening houdend met of het een dicht of MoE (Mixture-of-Experts) model is. Voor MoE-modellen kijkt het naar zowel totale als actieve parameters en voegt overhead toe voor routing en systeemgebruik.query_openrouter()-functie: Verstuurt prompts naar een gekozen LLM-model op OpenRouter en haalt het antwoord op. Meet de totale latentie (end-to-end API-tijd), extraheert nuttige statistieken zoals het aantal verwerkte tokens en berekent de tokens-per-seconde-snelheid.Let op dat de gerapporteerde latentie alle netwerk-, wachtrij- en serververtragingen omvat, niet alleen de pure modelsnelheid. Het weerspiegelt dus de end-to-end reactietijd in de praktijk, die kan schommelen afhankelijk van API-belasting en internetomstandigheden.
extract_pdf_text()-functie: Maakt het mogelijk om PDF’s te uploaden en te analyseren als context voor de modellen. Parseert het PDF-document met PyPDF2 en extraheert de ruwe tekst, tot een tokenveilige limiet voor zeer lange documenten. Bij een fout geeft de functie een foutmelding terug.Deze helperfuncties zorgen voor efficiënt geheugenverbruik, betrouwbare API-gestuurde inferentie en soepele contextextractie, wat een naadloze gebruikerservaring oplevert.
Stap 4: Streamlit-applicatie
Met alle kernonderdelen klaar kunnen we nu onze Streamlit-app bouwen.
Stap 4.1: Aangepaste CSS
De eerste stap voor de gebruikersflow is het ontwerp en de lay-out. We configureren de Streamlit-pagina en injecteren aangepaste CSS voor een gestructureerde look.
We gebruiken zowel de configuratieopties van Streamlit als aangepaste CSS-styling. De aanroep
st.set_page_configstelt de paginatitel in en een brede lay-out voor weergave naast elkaar. Aangepaste CSS wordt geïnjecteerd viast.markdownom belangrijke UI-elementen te stijlen.De
.main-headercentreert en kleurt de titel,.metric-carden.output-boxverbeteren de weergave van statistieken en outputs, en.model-headerscheidt modelantwoorden visueel met een verloop. Het laatstest.markdown-blok rendert een kop en een korte appbeschrijving.Stap 4.2: Invoersectie
We ontwierpen de invoersectie met twee intuïtieve opties: upload een lang PDF-bestand als context of typ direct een eigen vraag.
Deze invoersectie toont twee kolommen naast elkaar: de eerste biedt een PDF-uploader om contextdocumenten toe te voegen, de tweede biedt een tekstveld om vragen of onderwerpen in te voeren. Zo kunnen gebruikers een PDF uploaden, een vraag typen of beide samen als input gebruiken voor de modelvergelijking stroomafwaarts.
Stap 4.3: Modelselectie
De modelselectie geeft volledige controle over welke Qwen-modellen je vergelijkt en hoe lang de modelantwoorden mogen zijn. Zodra de documentcontext is ingesteld, kun je eenvoudig twee modellen kiezen uit een dropdown, samen met de gewenste maximale antwoordlengte (in tokens), zodat je makkelijk kunt experimenteren met korte en lange outputs.
De bovenstaande code extraheert eerst tekst uit een geüploade PDF met een helperfunctie. Vervolgens toont hij drie dropdowns: twee om de Qwen-modellen (of andere, afhankelijk van de toepassing) te kiezen voor vergelijking, en één om de maximale tokenlimiet voor antwoorden te specificeren.
Let op: De tokenlimiet bepaalt de maximale outputlengte. Voor complexe of meerstaps redeneertaken zorgt een hogere limiet ervoor dat het model een compleet antwoord kan genereren.
Stap 4.4: Indienen
Deze stap implementeert de hoofdlogica voor modelvergelijking. Wanneer de gebruiker op "Submit & Compare Models" klikt, valideert de app de invoer, bouwt een contextbewuste prompt en start verzoeken naast elkaar naar de geselecteerde modellen
De afhandelaar voor indienen organiseert de benchmark-workflow als volgt:
Qwen3-Next testen
Om de daadwerkelijke prestaties van het Qwen3-Next-model te testen, probeerde ik een paar experimenten.
Test 1: Lange context Q&A
Om de prestaties op lange context te beoordelen, draaide ik verschillende hands-on experimenten met het Project Gutenberg eBook van “Oorlog en Vrede,” een van de langste en meest complexe romans ooit geschreven.
Hieronder staan drie testcases die laten zien hoe de modellen omgaan met ultralange context, hallucinaties vermijden en hoogwaardige samenvattingen leveren.
Personage-tracking
Eerst vroeg ik beide modellen om alle hoofdpersonages te identificeren die zowel in het eerste als in het laatste hoofdstuk voorkomen, en kort te beschrijven hoe hun rollen veranderen in de loop van het verhaal.
Prompt: “Noem alle hoofdpersonages die voorkomen in zowel het eerste als het laatste hoofdstuk van de roman. Beschrijf kort hoe hun rollen in de tijd veranderen.”
Deze vraag vereist dat het model de volledige tekst verwerkt en karakterbogen nauwkeurig volgt. Hoewel beide modellen erg responsief waren, was het antwoord van Qwen3 Next netter en beter afgestemd op elk hoofdstuk van het boek.
Hallucinatie-test
Vervolgens wilde ik zien of de modellen echte inhoud van desinformatie konden onderscheiden. Ik gaf beide modellen een zin die niet voorkomt in Oorlog en Vrede, maar beroemd is uit een andere roman van Tolstoj.
Prompt: “Bevat de roman de zin ‘Alle gelukkige gezinnen lijken op elkaar; elk ongelukkig gezin is ongelukkig op zijn eigen manier’? Zo ja, waar komt die in de tekst voor?”
Deze zin komt namelijk uit Anna Karenina, niet uit Oorlog en Vrede. Een ideaal model zou “Nee” moeten antwoorden, wat sterke feitelijke nauwkeurigheid en weinig hallucinatie aantoont. Indrukwekkend genoeg gaf Qwen3-Next het juiste antwoord, terwijl het Qwen3 30B-model met een onjuiste zin kwam.
Samenvatten
Tot slot testte ik de samenvattingscapaciteiten door beide modellen te vragen de roman in 300 woorden samen te vatten.
Prompt: “Vat de roman ‘Oorlog en Vrede’ samen in 300 woorden, met focus op de persoonlijke reis van Pierre Bezoechov.”
Hoewel de beoordeling van samenvattingen deels subjectief is, vond ik de output van Qwen3-Next beter gestructureerd, samenhangender en inzichtelijker. De samenvatting was niet alleen bondig, maar bracht ook de ontwikkeling van Pierres personage helder over.
Voorbeeld 2: Meerstaps redeneren en logica
Om de geavanceerde redeneervermogens van beide modellen te testen, confronteerde ik ze met complexe, meerstapslogicapuzzels—taken die niet alleen geheugen vereisen, maar ook stapsgewijze deductie en zorgvuldige eliminatie.
Puzzel met zitvolgorde
Ik gaf de modellen eerst een breinbreker over zitvolgorde:
Prompt: “Op de bruiloftsreceptie zijn er vijf gasten—Colin, Emily, Kate, Fred en Irene—die niet zeker weten waar ze aan tafel moeten zitten. Ze vragen het aan de moeder van de bruid, die antwoordt: "Voor zover ik me herinner, zit Colin niet naast Kate; Emily zit niet naast Fred of Kate. Noch Kate noch Emily zit naast Irene. En Fred moet links van Irene zitten." Als je hen vanaf de overkant van de tafel bekijkt, kun je de gasten dan van links naar rechts correct plaatsen?
Leg je redenatie stap voor stap uit.”
Deze puzzel vereiste het analyseren van verschillende constraints en het afleiden van de enige mogelijke zitvolgorde:
Hoewel geen van beide modellen de exacte juiste volgorde gaf, kwam Qwen3-Next erg dichtbij, alleen in omgekeerde volgorde, terwijl het 30B-model helemaal niet tot een oplossing kwam. Dit laat zien dat Qwen3-Next in staat is tot meerstapsdeductie, al blijven sommige randgevallen uitdagend.
Deductieve eliminatie
Vervolgens testte ik de modellen met een deductiepuzzel geïnspireerd op de klassieke “Zebra-puzzel”.
Prompt: “Vier personen (Lisa, Mike, Nora en Omar) kochten elk een ander fruit (appel, banaan, kers, dadel) en reden in een andere auto (Ford, Honda, Kia, Mazda).
Wie kocht welk fruit en reed in welke auto? Laat je uitwerking zien.”
Dit probleem is opzettelijk onoplosbaar met de gegeven constraints, maar dit is wat de modellen teruggaven:
Dit voorbeeld toont het vermogen van Qwen3-Next om deductief te redeneren en te herkennen wanneer er geen oplossing mogelijk is.
Conclusie
Deze tutorial laat zien hoe je Qwen3-Next-80B-A3B gebruikt voor Q&A- en redeneertaken, en het naast Qwen3-30B-A3B benchmarkt in een Streamlit-app. De resultaten benadrukken de sterke punten van Qwen3-Next bij het verwerken van ultralange documenten, het leveren van snelle inferentie en het behouden van outputkwaliteit, zelfs bij complexe redeneerproblemen.