models

mai-ds-r1

Markdown · JSON

mai-ds-r1

MAI-DS-R1 is het door Microsoft verder getrainde DeepSeek-R1-model voor tekstredeneren, wiskunde, code en onderzoek. Het behoudt de redeneerbasis van R1, terwijl het leemten in antwoorden aanpakt en verfijnt hoe het model met gevoelige onderwerpen omgaat.

Over het model

Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.

MAI-DS-R1 is een redeneermodel dat het Microsoft AI-team vanuit DeepSeek-R1 verder getraind heeft. Het doel is de sterke redeneerkanten van het basismodel te behouden, antwoorden te verbeteren over onderwerpen die eerder onbehulpzame weigeringen kregen en het risicoprofiel van het model te verfijnen. Microsoft beschrijft de release als een eigen verder getraind model, met DeepSeek-R1 met 671 miljard parameters als basis en een mixture-of-experts-architectuur. Het is een tekstgeneratiemodel, geen van de kleinere R1-distillaties.

De modelkaart presenteert taalbegrip en -generatie, algemene kennisvragen, probleemoplossing in meerdere stappen, codegeneratie en -begrip en wetenschappelijke of academische taken als directe toepassingen. Een bruikbaar verzoek kan daarom beginnen met een wiskundige voorwaarde, logische puzzel, codefragment of technische uitleg die onderzocht moet worden. Het resultaat is tekst: een voorgestelde oplossing, een stuk code, een uitleg of een samenhangend concept. De aard van het resultaat moet in het verzoek vermeld worden, zodat het redeneren een afgebakend doel dient.

Lever voor een wiskundeassistent de volledige voorwaarde, definities, bekende grootheden en de vast te stellen conclusie aan. Een voorbeeldtaak is: “Controleer deze voorgestelde oplossing. Benoem de eerste ononderbouwde overgang, leg de ontbrekende aanname uit en geef een gecorrigeerd resultaat dat aan de oorspronkelijke voorwaarden voldoet.” Lever voor een programmeerassistent de relevante functie, invoervoorbeelden en het verwachte gedrag aan; vraag om een uitleg van de fout en een wijziging die met die voorbeelden gecontroleerd kan worden. Geef voor onderzoeksconcepten het te vergelijken materiaal en onderscheid bronuitspraken, interpretaties en vragen die nog bewijs nodig hebben.

Microsoft presenteert het model ook als basis voor verdere domeinspecifieke finetuning, onder meer voor wiskundebegeleiding, programmeerassistenten en wetenschappelijke onderzoekshulpmiddelen. Dat is een vervolgtoepassing voor aanpassing, los van het algemene model dat hier beschreven wordt. De verdere training gebruikt voorbeelden rond veiligheid en niet-naleving samen met meertalige voorbeelden over onderwerpen waar vooroordelen gemeld waren. De wijziging richt zich op antwoordgedrag; ze maakt het model niet onbeperkt en neemt de noodzaak om antwoorden te beoordelen niet weg.

De fabrikant benoemt betekenisvolle gebruiksgrenzen. Klinische diagnose- of behandelbeslissingen, definitieve juridische beslissingen, autonome veiligheidskritische besturing en zwaarwegende financiële of beveiligingsbeslissingen vallen buiten het beoogde betrouwbare gebruik van de modelkaart. De gedocumenteerde rol kan beter als uitleg, conceptvorming en gestructureerde probleemoplossing met passende controle omschreven worden. Microsoft merkt op dat feitelijke hallucinaties, culturele of demografische vooroordelen en kwetsbaarheid voor vijandige prompts na verdere training kunnen blijven bestaan.

De release deelt de oorspronkelijke kennisgrens van DeepSeek-R1, zodat een stellig antwoord nog steeds een recente gebeurtenis of gespecialiseerd feit kan missen. Hoewel de verdere training meertalige gegevens gebruikt, verwacht Microsoft dat Engels en Chinees de sterkste talen zijn. Beoordeel de taal en het onderwerp die de toepassing nodig heeft in plaats van gelijke kwaliteit voor iedere taal te veronderstellen. Zeer lange of ingewikkelde prompts kunnen moeilijk blijven; scheid het bronmateriaal, de taak en het criterium voor een geslaagd antwoord.

De modelkaart beveelt duidelijke rol- en taakinstructies aan, menselijke of automatische verificatie voor gevoelig gebruik en monitoring of inhoudsfiltering waar de toepassing die nodig heeft. Houd de bronfeiten en tussentijdse aannames beschikbaar voor controle en vraag om een eindantwoord dat met het oorspronkelijke probleem vergeleken kan worden. De geraadpleegde kaart publiceert geen afzonderlijk numeriek context- of uitvoerplafond voor deze release. Die limieten moeten dus uit een exacte uitvoeringsspecificatie vastgesteld worden in plaats van uit een andere DeepSeek-editie overgenomen te worden. MAI-DS-R1 blijft een afzonderlijk verder getraind model met eigen gedocumenteerde doelstellingen en beperkingen.

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions MAI-DS-R1

MAI-DS-R1

Microsoft /MAI-DS-R1

Aan de slag

MAI-DS-R1 is het door Microsoft verder getrainde DeepSeek-R1-model voor tekstredeneren, wiskunde, code en onderzoek. Het behoudt de redeneerbasis van R1, terwijl het leemten in antwoorden aanpakt en verfijnt hoe het model met gevoelige onderwerpen omgaat.

Toegestane invoer
Tekst
Resultaten
Tekst

Beschikbaar in Ailoot · invoer en methoden

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Invoer
text
Uitvoer
text
Uitvoerformaat
json of SSE
VeldTypeVereisteWaarden en limietenStandaard
VeldmodelTypestringVereisteVereistWaarden en limieten
MAI-DS-R1
Standaard—
VeldmessagesTypemessage[]VereisteVereistWaarden en limieten
Minimumaantal items: 1
Standaard—
Veldmessages[].roleTypestringVereisteVereistWaarden en limieten
Afhankelijk van het model
Standaard—
Veldmessages[].contentTypestringVereisteOptioneelWaarden en limieten
Geldt wanneer: Tekstgesprek
Standaard—
VeldstreamTypebooleanVereisteOptioneelWaarden en limietenStandaardfalse
Combinaties van invoermaterialen

Tekst · UTF8-tekst

messages[].content

Methodeparameters en levenscyclus
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, messages
Parametermaterial_typesContracttext
ParametermessagesContractberichtenarray met de structuur role/content
Parameterfile_materialContractwerkelijk UTF-8-document ingevoegd als letterlijke tekst; er wordt geen bestands-ID afgeleid
Parameteroptional_controlsContractstream
Parametercontrol_scopeContractTekstgesprek; stream is een booleaanse waarde en is standaard false.
Parameteroutput_modalitiesContracttext
Parameterhosted_operationsContractfalse
Parametermultimodal_input_bindingContractnull

Methodealiasnamen: /chat/completions

Levenscyclus: synchronous_or_streamed

Stuur het exacte model-ID mee met messages.

Contextlengte is geen uitvoerlimiet.

Een tekstbestand kan letterlijke tekst aanleveren; beeld-, audio- en bestandsobjectinvoer vereisen een exacte koppeling.

Tarieven

Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.

Snelle modus
Standaardtarief Wanneer de snelle modus geselecteerd is
Flex-modus
Standaardtarief Wanneer de flex-modus geselecteerd is
Maximale redeneerinspanning
Standaardtarief Wanneer voor maximale redeneerinspanning de default-aanpassing wordt gebruikt

Ailoot-tarieven

Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

ConfiguratieTariefstaffelContexttokens, meer danContexttokens, tot en metKosten
ConfiguratieBasistarieven voor tokensTariefstaffelBasistariefContexttokens, meer dan—Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.00132 / 1K tokens
Uitvoer · Uitvoertokens $0.00506 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens
ConfiguratieAanvraaglengte · niveau 1Tariefstaffel—Contexttokens, meer dan0Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.00132 / 1K tokens
Uitvoer · Uitvoertokens $0.00506 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →

Voorbeeldverzoeken

Ailoot Ultra · OpenAI Chat

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"MAI-DS-R1","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="MAI-DS-R1", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))

Resultaten ophalen en opslaan

Ailoot Ultra · OpenAI Chat

json of SSE

Alle voltooide resultaten bewaren

Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.

Bewaar elke keuze en de bijbehorende inhoud, toolaanroepen en redeneringen. Voeg in SSE delta’s samen per keuze-/toolindex en bewaar de uiteindelijke reden van beëindiging en de verbruiksgegevens.

Als het oorspronkelijke antwoord moet worden gecontroleerd

Bewaar aanvraag-/antwoord-ID’s en headers. Er wordt geen algemene URL meegeleverd om teksttaken op te halen.

Antwoordvelden
VeldType
Veldchoices[].indexTypeinteger
Veldchoices[].message.contentTypestring|null
Veldchoices[].message.tool_callsTypetool_call[]
Veldchoices[].message.reasoning_contentTypestring
Veldchoices[].message.reasoning_detailsTypeobject|array
Veldchoices[].finish_reasonTypestring|null
VeldusageTypeobject
Fouten en vervolgstappen
AntwoordVoorwaardeVolgende stap
Antwoord400 · invalid_request_errorVoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldigVolgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.

Aliasnamen

Modelaliasnamen

Ailoot Ultra MAI-DS-R1

Aliasnamen voor methodepaden

/chat/completions

Gerelateerde aanroeper-ID’s

MAI-DS-R1

Ailoot Ultra · Anthropic Messages POST /v1/messages MAI-DS-R1

MAI-DS-R1

Microsoft /MAI-DS-R1

Aan de slag

MAI-DS-R1 is het door Microsoft verder getrainde DeepSeek-R1-model voor tekstredeneren, wiskunde, code en onderzoek. Het behoudt de redeneerbasis van R1, terwijl het leemten in antwoorden aanpakt en verfijnt hoe het model met gevoelige onderwerpen omgaat.

Toegestane invoer
Tekst
Resultaten
json · sse

Beschikbaar in Ailoot · invoer en methoden

Ailoot Ultra · Anthropic Messages POST /v1/messages
Invoer
text
Uitvoer
json, sse
Uitvoerformaat
JSON of SSE
VeldTypeVereisteWaarden en limietenStandaard
VeldmodelTypestringVereisteVereistWaarden en limieten
MAI-DS-R1
Standaard—
VeldmessagesTypemessage[]VereisteVereistWaarden en limietenStandaard—
Veldmessages[].roleTypestringVereisteVereistWaarden en limieten
user, assistant
Standaard—
Veldmessages[].contentTypestringVereisteVereistWaarden en limietenStandaard—
Veldmax_tokensTypeintegerVereisteVereistWaarden en limietenStandaard—
VeldstreamTypebooleanVereisteOptioneelWaarden en limietenStandaardfalse
Combinaties van invoermaterialen

Tekst · UTF-8-tekst

messages[].content als tekenreeks

Methodeparameters en levenscyclus
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, messages, max_tokens
Parameteroptional_controlsContractstream
Parametermaterial_typesContracttext
Parametertext_file_materialContractLees het werkelijke UTF-8-document en plaats de tekst ervan in de aangegeven invoer of in de inhoudstekenreeks van een bericht.

Levenscyclus: synchronous_or_streamed

Tarieven

Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.

Snelle modus
Standaardtarief Wanneer de snelle modus geselecteerd is
Flex-modus
Standaardtarief Wanneer de flex-modus geselecteerd is
Maximale redeneerinspanning
Standaardtarief Wanneer voor maximale redeneerinspanning de default-aanpassing wordt gebruikt

Ailoot-tarieven

Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

ConfiguratieTariefstaffelContexttokens, meer danContexttokens, tot en metKosten
ConfiguratieBasistarieven voor tokensTariefstaffelBasistariefContexttokens, meer dan—Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.00132 / 1K tokens
Uitvoer · Uitvoertokens $0.00506 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens
ConfiguratieAanvraaglengte · niveau 1Tariefstaffel—Contexttokens, meer dan0Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.00132 / 1K tokens
Uitvoer · Uitvoertokens $0.00506 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →

Voorbeeldverzoeken

Ailoot Ultra · Anthropic Messages

Volledige minimale JSON-bodycurl · gebruik je UTF-8-documentPython · sla het volledige resultaat op
{
  "model": "MAI-DS-R1",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'MAI-DS-R1', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'MAI-DS-R1', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Resultaten ophalen en opslaan

Ailoot Ultra · Anthropic Messages

JSON of SSE

Alle voltooide resultaten bewaren

Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.

Bewaar alle inhoudsblokken, handtekeningen van redeneringen en werkelijke toolgebruik-ID’s. Voeg alle SSE-blokdelta’s samen; het eerste tekstblok is niet de volledige uitvoer.

Als het oorspronkelijke antwoord moet worden gecontroleerd

Bewaar aanvraag-/antwoord-ID’s en headers. Er wordt geen algemene URL meegeleverd om teksttaken op te halen.

Antwoordvelden
VeldType
VeldidTypestring
VeldmodelTypestring
Veldcontent[]Typetext|thinking|tool_use|other content block
Veldstop_reasonTypestring|null
VeldusageTypeobject
Fouten en vervolgstappen
AntwoordVoorwaardeVolgende stap
Antwoord400 · invalid_request_errorVoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldigVolgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.

Aliasnamen

Modelaliasnamen

Ailoot Ultra MAI-DS-R1

Aliasnamen voor methodepaden

/chat/completions

Gerelateerde aanroeper-ID’s

MAI-DS-R1

FAQ · mai-ds-r1
Welke invoer en resultaten zijn beschikbaar?

POST /v1/chat/completions · MAI-DS-R1: text → text

POST /v1/messages · MAI-DS-R1: text → json, sse

Welke velden gebruikt het verzoek?

POST /v1/chat/completions · MAI-DS-R1: model, messages, stream

POST /v1/messages · MAI-DS-R1: model, messages, max_tokens, stream

Welke limieten gelden?

POST /v1/chat/completions · MAI-DS-R1: messages.min_items: 1

Meer details

Verbind Ailoot met Claude Code, OpenCode, Hermes of je eigen applicatie.

Het bedrijf en zijn projectenportefeuille

Het bedrijf en zijn projectenportefeuille: miljoenen klanten; maandelijkse verkopen in de miljarden.

Koop tokens met korting.

Abonnementsvoordeel voor regelmatig gebruik. Promotiecodes geven tot 50% korting op tokens.

Abonnement
Kies een abonnement met korting voor je terugkerende verzoeken.
Promotiecode tot 50%
Vul de code bij aankoop in. De prijs wordt volgens de lopende actie herberekend.
Kosten in de geschiedenis
Model, tokens en bedrag worden per verzoek bewaard.

Kies een abonnement · Bekijk modelprijzen

Verbind de API met het product dat je verkoopt.

SaaS, apps en bots volgens de openbare aanbodvoorwaarden en licentieovereenkomst van Ailoot. Vraag voor doorverkoop een resellerlicentie aan.

Commerciële applicatie
Voeg tekst-, beeld-, video- en geluidsgeneratie aan betaalde functies van je service toe.
Resellerlicentie
Stuur een projectbeschrijving en toegangsschema. Vraag schriftelijke voorwaarden voor gebruik en doorverkoop.
Documenten op de site
Aanbodvoorwaarden, licentieovereenkomst en gegevensbeleid zijn vóór het verbinden beschikbaar.

Vraag een resellerlicentie aan · Aanbodvoorwaarden en licentieovereenkomst