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:
- Competencies
- Players
- 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.
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:
Name | Type | Required | Description |
---|---|---|---|
id | uuid | YES | Unique Id of the competency. |
assessment | Object | YES | Define the type of assessment to be undertaken for the competency. |
assessment.type | String | YES | Type of assessment.Current support: verbal & non-verbal . |
assessment.grading | Object | YES | Define grading for the competency. |
grading.type | String | NO | Grading type. Values: ca - Correct Answers (default), cwpm - Correct Words Per Minute). |
grading.gte | Integer | NO | Score greater than or equal to. |
grading.lte | Integer | NO | Score less than or equal to. |
name | String | YES | User friendly name of the competency. |
description | Object | YES | Description of the competency in different languages which will be shown to end users. |
level | String | YES | level level for the competency. |
track | String | YES | track associated with the competency. |
metadata | Object | No | Additional 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.
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:
Name | Type | Required | Description |
---|---|---|---|
id | uuid | YES | Unique Id of the player. |
name | String | YES | Name of the player. |
types.player_type | String | YES | Type of player.Current support: odk & bhashini . |
types.supported_questionnaire_types | String[] | YES | Types of Questionnaire supported by the Player: verbal & non-verbal |
admin_config | Object | YES | Admin 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_config | Object | YES | Client 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.
{
"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:
Name | Type | Required | Description |
---|---|---|---|
competency_id | uuid | YES | Competency id to map the questionnaire to. |
description | String | NO | Optional description to be added to each upload of questions. |
image_url | String | NO | Optionally add images to different levels of the questionnaire. |
groups | Array | YES | Groups of questions to be shown to the assessee. |
questions | Array | YES | questions to be shown. |
questions.type | String | YES | Type 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.text | String | YES | Title of the question. |
questions.choices | Array | NO | Options for questions. Optional for non-verbal assessments. |
questions.choices.text | String | YES | Text to be displayed for each choice. |
questions.choices.score | Integer | YES | Score to be given for the selection of each choice. |
id | String | NO | Optionally 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. |
randomize | Boolean | NO | Optionally 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}.