Skip to main content

Ingestion

Nipun SahAIyak is a platform to augment education with AI. More info about Nipun SahAIyak here.

Ingestion is the step of Bharat SahAIyak's AI augmentation for assessment flows where generated AI content is ingested into the systems to configure assessments.

Sample Excel sheet for this adapter can be found here.

Assessment Configuration Protocol (ACP)

Nipun SahAIyak defines an Assessment Configuration Protocol (ACP) to configure and manage assessments. The protocol is inspired from the widely used QuML.

There are 3 main parts of ACP:

  1. Competencies
  2. Players
  3. Questionnaires

Competencies

Competencies are defined as the ability to do something successfully or efficiently. For assessment competencies are defined for each level (grade) and track (subject). Competencies have score based grading.

POST
/compentency Create competencies

Request Body

{
"version": "0.0.1",
"competency": [
{
"id": "b5b2a68a-3ddd-462c-a79a-382a3b1ea3be",
"assessment": {
"type": "non-verbal",
"grading": [
{
"gte": 75,
"level": "Pass"
},
{
"lte": 74,
"level": "Fail"
}
]
},
"name": "Addition and subtraction with single digit numbers",
"description": [
{
"en": "Student is able to solve addition and subtraction questions with single digit numbers"
},
{
"hi": "рдЫрд╛рддреНрд░ рдПрдХ рдЕрдВрдХреАрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛рд╡ рдФрд░ рдШрдЯрд╛рд╡ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред"
}
],
"level": "1",
"track": "Math",
"metadata": {}
},
{
"id": "478d0afe-eec4-4123-89af-9c116896d27a",
"assessment": {
"type": "non-verbal",
"grading": [
{
"gte": 75,
"level": "A"
},
{
"lte": 74,
"gte": 60,
"level": "B"
},
{
"lte": 59,
"level": "C"
}
]
},
"name": "Read 40 word paragraph and answer questions.",
"description": [
{
"en": "Student can read a 40 word paragraph and answer questions based on it"
},
{
"hi": "рдЫрд╛рддреНрд░ 40 рд╢рдмреНрджреЛрдВ рдХрд╛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВрд╕рдХрддрд╛ рд╣реИред"
}
],
"level": "2",
"track": "English",
"metadata": {}
},
{
"id": "9eae03c9-0ff3-412c-acfc-508b141ccc9b",
"assessment": {
"type": "verbal",
"grading": [
{
"type": "cwpm",
"gte": 60,
"level": "Pass"
},
{
"type": "cwpm",
"lte": 59,
"level": "Fail"
}
]
},
"name": "Read a paragraph at 60 words per minute",
"description": [
{
"en": "Student can correctly read a paragraph at 60 words per minute"
},
{
"hi": "рдЫрд╛рддреНрд░ 60 рд╢рдмреНрдж рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдХреА рдЧрддрд┐ рд╕реЗ рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИрдВрд╕рдХрддрд╛ рд╣реИред"
}
],
"level": "2",
"track": "Language",
"metadata": {}
}
]
}

Definition:

NameTypeRequiredDescription
iduuidYESUnique Id of the competency.
assessmentObjectYESDefine the type of assessment to be undertaken for the competency.
assessment.typeStringYESType of assessment.Current support: verbal & non-verbal.
assessment.gradingObjectYESDefine grading for the competency.
grading.typeStringNOGrading type. Values: ca - Correct Answers (default), cwpm - Correct Words Per Minute).
grading.gteIntegerNOScore greater than or equal to.
grading.lteIntegerNOScore less than or equal to.
nameStringYESUser friendly name of the competency.
descriptionObjectYESDescription of the competency in different languages which will be shown to end users.
levelStringYESlevel level for the competency.
trackStringYEStrack associated with the competency.
metadataObjectNoAdditional information about the competency.

Players

Players are the mediums to be used to run the assessments. Questionnaires can be transformed to any supported players to run the questionnaires on.

POST
/player Create player

Request Body

{
"version": "0.0.1",
"players": [
{
"id": "e992e520-570d-444a-b0ac-603cbd89a160",
"name": "ODK player",
"types": {
"player_type": "odk",
"supported_questionnaire_types": ["non-verbal"]
},
"admin_config": {
"odk_user": "admin",
"odk_password": "central-password",
"odk_base_url": "https://central.nisai.samagra.io",
"odk_central_projectId": "9",
"number_of_groups_in_form": 25
},
"client_config": {
"collector_user": "collector_user",
"collector_password": "odk-collector-password",
"api_key": ""
}
},
{
"id": "8898211c-01af-4c82-9346-27dee819f51e",
"name": "BSTT player",
"types": {
"player_type": "bhashini",
"supported_questionnaire_types": ["verbal"]
},
"config": {
"bhashini_key": "b86e0007-0444-468c-97b5-40d3be1d8cf7"
}
}
]
}

Definition:

NameTypeRequiredDescription
iduuidYESUnique Id of the player.
nameStringYESName of the player.
types.player_typeStringYESType of player.Current support: odk & bhashini.
types.supported_questionnaire_typesString[]YESTypes of Questionnaire supported by the Player: verbal & non-verbal
admin_configObjectYESAdmin Configuration information of each player. This admin config is supposed to be used by transformer process to transform and add generated questionnaires to Players
client_configObjectYESClient Configuration information of each player. It is meant to be used by Clients to submit data to player. For example, ODK central player gives a Collector Role which is restricted to data submission

Questionnaires

Questionnaires are the groups of questions to be assessed in a particular competency through an player.

POST
/questionnaire Create questionnaire
{
"version": "0.0.1",
"id": "nipun_abhyas_march24",
"questionnaires": [
{
"competency_id": "b5b2a68a-3ddd-462c-a79a-382a3b1ea3be",
"image_url": "https://placedog.net/500",
"id": "NA0324_set_1",
"randomize": true,
"groups": [
{
"id": "NA0324_easy_group_1",
"questions": [
{
"id": "NA_0324_easy_ques_1",
"type": "single-select",
"image_url": "https://cataas.com/cat",
"text": "2 + 3",
"randomize": false,
"choices": [
{
"text": "5",
"score": 1,
"id": "NA_0324_easy_ques_1_right"
},
{
"text": "6",
"score": 0,
"id": "NA_0324_easy_ques_1_wrong"
}
]
},
{
"type": "multi-select",
"image_url": "https://cataas.com/cat",
"text": "2 + 3",
"id": "NA_0324_hard_ques_1",
"choices": [
{
"text": "5",
"score": 1,
"id": "NA_0324_hard_ques_1_right_1"
},
{
"text": "+5",
"score": 1,
"id": "NA_0324_hard_ques_1_right_2"
},
{
"text": "-5",
"score": 0,
"id": "NA_0324_hard_ques_1_wrong_1"
},
{
"text": "6",
"score": 0,
"id": "NA_0324_hard_ques_1_wrong_2"
}
]
},
{
"type": "single-select",
"text": "5 + 4",
"choices": [
{
"text": "8",
"score": 0
},
{
"text": "9",
"score": 1,
"id": "E3kYxlufOSwHjov"
}
]
},
{
"type": "single-select",
"text": "1 + 6",
"choices": [
{
"text": "7",
"score": 1
},
{
"text": "8",
"score": 0
}
]
},
{
"type": "single-select",
"image_url": "https://cataas.com/cat",
"text": "9 + 1",
"choices": [
{
"text": "5",
"score": 0
},
{
"text": "10",
"score": 1
}
]
}
]
},
{
"id": "NA_0324_hard_group",
"randomize": false,
"questions": [
{
"type": "single-select",
"image_url": "https://cataas.com/cat",
"text": "5 + 6",
"choices": [
{
"text": "11",
"score": 1
},
{
"text": "8",
"score": 0
}
]
},
{
"type": "single-select",
"text": "5 + 3",
"choices": [
{
"text": "8",
"score": 1
},
{
"text": "6",
"score": 0
}
]
},
{
"type": "single-select",
"text": "1 + 9",
"choices": [
{
"text": "10",
"score": 1
},
{
"text": "8",
"score": 0
}
]
},
{
"type": "single-select",
"image_url": "https://cataas.com/cat",
"text": "9 + 2",
"choices": [
{
"text": "12",
"score": 0
},
{
"text": "11",
"score": 1
}
]
}
]
},
{
"questions": [
{
"type": "single-select",
"image_url": "https://cataas.com/cat",
"text": "5 + 5",
"choices": [
{
"text": "10",
"score": 1
},
{
"text": "8",
"score": 0
}
]
},
{
"type": "single-select",
"text": "5 + 5",
"choices": [
{
"text": "10",
"score": 1
},
{
"text": "6",
"score": 0
}
]
},
{
"type": "single-select",
"text": "1 + 2",
"choices": [
{
"text": "3",
"score": 1
},
{
"text": "8",
"score": 0
}
]
},
{
"type": "single-select",
"image_url": "https://cataas.com/cat",
"text": "9 + 1",
"choices": [
{
"text": "12",
"score": 0
},
{
"text": "10",
"score": 1
}
]
}
]
}
]
},
{
"competency_id": "478d0afe-eec4-4123-89af-9c116896d27a",
"description": "Questions about Indian freedom fighters",
"text": "Read the passage and answer the questions",
"groups": [
{
"image_url": "https://upload.wikimedia.org/wikipedia/commons/5/54/Bhagat_Singh_1929.jpg",
"text": "Bhagat Singh was a brave young man who loved India very much. He saw how unfair things were and wanted everyone to be free. He joined many others to fight for India's freedom from a powerful rule. Though young, Bhagat Singh showed great courage and never gave up. Although his life was short, his bravery and love for India continue to inspire us!",
"questions": [
{
"type": "text",
"text": "Bhagat Singh loved _____ very much",
"choices": [
{
"text": "India",
"score": 1
}
]
},
{
"type": "single-select",
"text": "Why did Bhagat Singh fight?",
"choices": [
{
"text": "For candy",
"score": 0
},
{
"text": "For freedom",
"score": 1
},
{
"text": "For fun",
"score": 0
}
]
}
]
},
{
"image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Maulana_Abul_Kalam_Azad.jpg/339px-Maulana_Abul_Kalam_Azad.jpg",
"text": "Maulana Azad, a wise and kind man, loved India dearly. He fought bravely for freedom from British rule, like a superhero! He also believed everyone should learn, so he became India's first education minister, opening schools for all children. Remember him on National Education Day, November 11th!",
"questions": [
{
"type": "single-select",
"text": "What did Maulana Azad fight for?",
"choices": [
{
"text": "Delicious sweets",
"score": 0
},
{
"text": "Freedom for India",
"score": 1
}
]
},
{
"type": "text",
"text": "We celebrate _____ to remember him?",
"choices": [
{
"text": "National Education Day",
"score": 1
}
]
}
]
}
]
}
]
}

Definition:

NameTypeRequiredDescription
competency_iduuidYESCompetency id to map the questionnaire to.
descriptionStringNOOptional description to be added to each upload of questions.
image_urlStringNOOptionally add images to different levels of the questionnaire.
groupsArrayYESGroups of questions to be shown to the assessee.
questionsArrayYESquestions to be shown.
questions.typeStringYESType of question. Current supported values: single-select : One correct answer from multiple choices, multi-select: Multiple correct answers from multiple choices, text: Case sensitive free text answer, text-insensitive : Case in-sensitive free text answer.
questions.textStringYESTitle of the question.
questions.choicesArrayNOOptions for questions. Optional for non-verbal assessments.
questions.choices.textStringYESText to be displayed for each choice.
questions.choices.scoreIntegerYESScore to be given for the selection of each choice.
idStringNOOptionally id can be specified at groups, questions, choices etc. If not provided at any level, a random base62 string will be assigned as id which can be used later for analysis.
randomizeBooleanNOOptionally randomize can be specified in groups and questions to randomise the order of questions and order of choices. The default is false if not specified. To enable precise control over randomization for groups, questions, and choices, you can specify randomize at each level to override the randomize value defined in the parent.

This format is standardised across the ingestors and the different players.

The above configuration can be seen in action on an ODK Player {here}.