Table of Contents
Documentatie voor Debot API
De Debot API biedt toegang tot de finetuned modellen gebaseerd op de Alpaca-7B en Bloom-7B. Deze documentatie omvat een overzicht van de beschikbare endpoints debatten kunnen worden gegenereerd.
Authenticatie
Elke aanvraag aan de Debot API moet worden geauthenticeerd door middel van een
API-sleutel. Deze sleutel dient meegegeven te worden in de request headers.
Gebruik hiervoor de Debot-API-Key
header. Aanvragen zonder geldige
API-sleutel worden geweigerd.
Basis URL
De basis URL voor alle API-aanroepen is https://debot.lodder.dev/
.
Definities
In deze API-documentatie gebruiken we bepaalde termen met specifieke betekenissen:
- De term "party" verwijst binnen onze API naar politieke partijen, individuen, of fracties die betrokken zijn bij debatten of discussies.
- De term "post" duidt op het specifieke overheidsonderdeel of bestuursorgaan waaraan een bewindslied is verbonden.
Aan het einde van dit document worden voor zowel "party" als "post" whitelisted waarden vermeld. Hoewel onze modellen in staat zijn om diverse input te verwerken, anticiperen we op optimale resultaten wanneer de aangegeven terminologie wordt aangehouden, waar mogelijk.
Het model zou bijvoorbeeld kunnen herkennen dat "PvdD" en "Partij voor de Dieren" dezelfde entiteit vertegenwoordigen. Echter, gezien de consistentie waarmee "PvdD" in de trainingsdata voorkomt, is het aannemelijk dat het model sterker reageert op deze specifieke afkorting.
Modeldefinities
Centraal binnen onze API is het SessieObject
. De API faciliteert het
genereren van debatten via een specifiek endpoint, dat werkt met een structuur
genaamd DebateRequest
. Dit object speelt een cruciale rol door de vereisten
voor een debat te specificeren.
DebateRequest
beschrijft de input voor het /debat
endpoint. Het geeft aan
welk SessieObject
betrokken is, welke deelnemers willen worden meegenomen in
de volgende berichten, of de response dummy-data moet teruggeven
(debug=True
), met welk model (Alpaca of Bloom) het debat gegenereerd moet
worden, en of het model een enkel (single_message=True
), of een onbepaald
aantal berichten mag genereren.
{ "session": "<SessieObject>" "debug": bool, "single_message": bool, "desired_speakers": ["<SprekerObject>", ...], "model": "String (alpaca | bloom)" }
Let op: Wanneer debug uitstaat worden de requests doorgestuurd naar de GPU
servers. Gelieve tijdens ontwikkelen van de frontend debug op True
houden.
De desired_speakers
bieden een manier om de gewenste deelnemers aan het debat
met het model te communiceren. Deze worden meegenomen in de context prompt aan
het model, zodat het weet welke deelnemers het debat heeft. Echter is dit geen
garantie dat het model ook daadwerkelijk deze deelnemers meeneemt in de
berichten die het genereert. Vooral als er reeds berichten zijn, zou het goed
kunnen dat het model de interactie voortzet tussen de sprekers die reeds
gesproken hebben.
Met behulp van single_message
kan worden gevraagd aan het model om een enkel
bericht te genereren. De API zal zodoende ook
Sessie Object
- Type: JSON Object
- Beschrijving: Representeert een debatsessie met zijn onderwerp, bijbehorende regering, berichten, deelnemers, en het gebruikte model voor generatie.
{ "subject": "String", "session_type": "String (antwoord-schriftelijke-vragen | commissie-debat | plenair-debat)", "government": "<RegeringsObject>", "messages": ["<BerichtObject>", ...], }
RegeringsObject
- Type: JSON Object
- Beschrijving: Beschrijft de regering waarin het debat plaatsvindt, inclusief de naam en status.
{ "name": "String (Balkenende IV | Rutte I | Rutte II | Rutte III | Rutte IV)", "status": "String (governing | demissionair)" }
BerichtObject
- Type: JSON Object
- Beschrijving: Representeert een bericht in het debat, inclusief de tekst en de spreker.
{ "text": "String", "speaker": "<SprekerObject>" }
SprekerObject
- Type: JSON Object
- Beschrijving: Een object dat een spreker in het debat vertegenwoordigt,
die een Tweede Kamerlid, Minister, of Voorzitter kan zijn. Het
role
-veld bepaalt het specifieke type spreker en hun attributen.
API Specificatie
Eindpunt: `/debate`
Dit endpoint is ontworpen om zowel de aanmaak als de voortzetting van debatten te faciliteren. Het verwerkt de volgende datastructuur als input:
{ "session": "<SessionObject>", "desired_speakers": ["<SprekerObject>", ...], "debug": bool, "single_message": bool, "model": "String (alpaca | bloom)", }
Na verwerking retourneert het een bijgewerkt session
, waarbij de lijst van berichten is uitgebreid.
Indien debug=True
, ontvangt u dummy-data als respons; in het andere geval
wordt gebruik gemaakt van het opgegeven model om het debat te genereren.
Indien single_message=True
, geeft de API een enkel nieuw bericht terug.
Het systeem bepaalt de huidige deelnemerslijst van het debat op basis van de
sprekers in de berichten van het geretourneerde session_object
.
Lege berichtenlijsten triggeren de aanmaak van initiële berichten, terwijl een reeds gevulde lijst zal resulteren in de generatie van vervolgberichten door het model.
desired_speakers
specificeert de beoogde nieuwe deelnemers voor de volgende
fase van het debat. Samen met de bestaande sprekers in de berichten, helpt dit
het model te bepalen wie aan het debat deelnemen.
Whitelisted Waarden
Voor gebruik in eventuele keuzemenu's aan de voorkant volgen hier wat lijsten met waardes die we zijn tegengekomen in de trainingsdata. In principe kan alles in het model worden gegooid, maar we verwachten de beste resultaten als met deze benamingen wordt gewerkt.
Posten
POST_VALUES = [ "Algemene Zaken", "Armoedebeleid, Participatie en Pensioenen", "Basis- en Voortgezet Onderwijs en Media", "Binnenlandse Zaken en Koninkrijksrelaties", "Buitenlandse Handel en Ontwikkelingssamenwerking", "Buitenlandse Zaken", "Defensie", "Economische Zaken", "Economische Zaken en Klimaat", "Economische Zaken, Landbouw en Innovatie", "Financiën", "Financiën – Fiscaliteit en Belastingdienst", "Immigratie en Asiel", "Immigratie, Integratie en Asiel", "Infrastructuur en Milieu", "Infrastructuur en Waterstaat", "Jeugd en Gezin", "Justitie en Veiligheid", "Klimaat en Energie", "Landbouw, Natuur en Voedselkwaliteit", "Landbouw, Natuurbeheer en Visserij", "Langdurige Zorg en Sport", "Medische Zorg", "Natuur en Stikstof", "Onderwijs, Cultuur en Wetenschap", "Primair en Voortgezet Onderwijs", "Rechtsbescherming", "Sociale Zaken en Werkgelegenheid", "Veiligheid en Justitie", "Verkeer en Waterstaat", "Volksgezondheid, Welzijn en Sport", "Volkshuisvesting en Ruimtelijke Ordening", "Volkshuisvesting, Ruimtelijke Ordening en Milieubeheer", "Wonen en Rijksdienst", "Wonen, Wijken en Integratie", ]
Parties
[ "50PLUS", "50PLUS/Baay-Timmerman", "50PLUS/Klein", "50PLUS/Krol", "BBB", "BIJ1", "Brinkman", "CDA", "CU", "ChristenUnie", "D66", "DENK", "Fractie Den Haan", "FvD", "GroenLinks", "Groep Bontes/Van Klaveren", "Groep Kortenoeven/Hernandez", "Groep Krol/van Kooten-Arissen", "Groep Kuzu/Öztürk", "Groep van Haga", "JA21", "Lid Bontes", "Lid-Verdonk", "Lid-van Vliet", "PVV", "PvdA", "PvdD", "SGP", "SP", "UWV", "VNL", "VVD", "Volt", "het lid Houwers", "lid Gündog˘ an", "lid Klein", "lid Krol", "lid Monasch", "lid Omtzigt", "lid Van Bemmel", "lid Van Klaveren", "lid van Haga", "lid van Kooten-Arissen", ]
RegeringObject
De volgende RegeringObjects
zijn mogelijk:
governments = [ {"name": "Balkenende IV", "status": "governing"}, {"name": "Balkenende IV", "status": "demissionair"}, {"name": "Rutte I", "status": "governing"}, {"name": "Rutte I", "status": "demissionair"}, {"name": "Rutte II", "status": "governing"}, {"name": "Rutte II", "status": "demissionair"}, {"name": "Rutte III", "status": "governing"}, {"name": "Rutte III", "status": "demissionair"}, {"name": "Rutte IV", "status": "governing"}, {"name": "Rutte IV", "status": "demissionair"}, ]
example curl command:
curl -v -X POST "https://debot.lodder.dev/api/v1/debate" \ -H "Content-Type: application/json" \ -d '{ "session": { "subject": "het bericht <<heel Nederland staat in de fik >>", "session_type": "antwoord-schriftelijke-vragen", "government": { "name": "Rutte IV", "status": "governing" }, "messages": [] }, "desired_speakers": [ { "role": "member", "party": "GroenLinks", "post": null }, { "role": "minister", "post": "Economische Zaken en Klimaat" } ], "debug": true, "model": "alpaca" }'