Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions cypress/e2e/admin-quiz_and_surveys.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ context('Admin: Generate Quiz and Surveys Screenshots', () => {
cy.viewport(displayWidth, 800);
cy.register('bob1@email.org', 'password', 'Bob', 'Smith')
cy.login();

cy.intercept('GET', '/public/config', (req) => {
req.reply((res) => {
const conf = res.body;
conf.disableScrollToTop = true;
conf.enableOpenAIIntegration = true;
res.send(conf);
});
}).as('loadConfig');
});

it('quizzes page', () => {
Expand Down Expand Up @@ -113,6 +122,16 @@ context('Admin: Generate Quiz and Surveys Screenshots', () => {
cy.snap('page-quiz-runs');
})

it('quiz runs table', () => {
cy.viewport(1500, 1800)
cy.visit('/administrator/quizzes/ShortScienceQuiz/runs')
cy.get('[data-cy="userFilterBtn"]')
cy.get('[data-cy="row0-userCell"]')

cy.snap('component-quiz-runs-table', '[data-cy="quizRunsHistoryTable"]')
})


it('quiz single run page', () => {
cy.visit('/administrator/quizzes/ShortScienceQuiz/runs')
cy.get('[data-cy="userFilterBtn"]')
Expand Down Expand Up @@ -145,6 +164,17 @@ context('Admin: Generate Quiz and Surveys Screenshots', () => {
cy.snap('component-quiz-grading-email-subscriptions', '[data-cy="quizRunsToGradeTable"] [data-pc-section="header"]');
})

it('quiz configure ai grading page', () => {
// going to expect email server is already configured
cy.viewport(1100, 500);
cy.visit('/administrator/quizzes/ChessInsight')
cy.get('[data-cy="ai-grader-question-1"]').click()
cy.get('[data-cy="aiGraderEnabled"]').click()

const answerForGrading = '- Control the Center{enter}- Develop Your Pieces{enter}- Ensure King Safety (Castling)'
cy.get('[data-cy="answerForGrading"]').type(answerForGrading)
cy.snap('page-quiz-ai-grading-config');
})

it('quiz survey page', () => {
// cy.viewport(1100, 500);
Expand Down Expand Up @@ -177,4 +207,14 @@ context('Admin: Generate Quiz and Surveys Screenshots', () => {
cy.snap('page-quiz-access');
})

it('ai grading', () => {
cy.visit('/administrator/quizzes/ChessInsight')
cy.get('[data-cy="ai-grader-question-1"]').click()
cy.get('[data-cy="aiGraderEnabled"]').click()
cy.get('[data-cy="answerForGrading"]')
cy.get('[data-cy="saveGraderSettingsBtn"]').should('be.disabled')

cy.snap('component-ai-text-input-grader', '#mainContent2');
})

})
11 changes: 10 additions & 1 deletion cypress/e2e/admin.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ context('Admin: Generate Screenshots', () => {
cy.viewport(displayWidth, 900);
cy.register('bob1@email.org', 'password', 'Bob', 'Smith')
cy.login();

cy.intercept('GET', '/public/config', (req) => {
req.reply((res) => {
const conf = res.body;
conf.disableScrollToTop = true;
conf.enableOpenAIIntegration = true;
res.send(conf);
});
}).as('loadConfig');
});

it('Gen Projects pages', () => {
Expand Down Expand Up @@ -170,7 +179,7 @@ context('Admin: Generate Screenshots', () => {
cy.clickNav('Self Report');
cy.get('[data-cy="skillsReportApprovalTable"] [data-p-index="1"]')

cy.snap('page-project-self_report');
cy.snap('page-project-self_report', '#mainContent1 [data-cy="nav"]');
});

it('Skill Tags page', () => {
Expand Down
2 changes: 1 addition & 1 deletion docs/.vuepress/components/Since.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ defineProps(['version', 'project', 'isBlock'])

<template>
<span class="since" :class="{ 'd-block' : isBlock }">
🕓 Since <span class="badge bg-warning text-dark"><span class="since-value">{{ project }}:{{ version }}</span></span>
🕓 Since <span class="badge bg-warning text-dark"><span class="since-value">version {{ version }}</span></span>
</span>
</template>

Expand Down
6 changes: 6 additions & 0 deletions docs/dashboard/install-guide/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,12 @@ skills.openai.key=your-api-key-here
# Optional: Default temperature setting (0.0 to 1.0, where 0 is more deterministic)
# skills.config.ui.openaiModelDefaultTemperature=0.5

# Required: Model used for AI grading
skills.config.ui.gradingModel=gpt-4

# Optional: Temperature used for AI grading setting (default: 0.0)
# skills.config.ui.gradingModelTemperature=0.5

# Optional: Custom footer message to display in the AI Assistant interface
# skills.config.ui.openaiFooterMsg=AI-generated content should be reviewed before use
```
Expand Down
17 changes: 15 additions & 2 deletions docs/dashboard/user-guide/ai-assistant.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AI Assistant
# AI Assistant <since project="skills-service" version="4.0" />

SkillTree's AI Assistant is a powerful tool that helps administrators create high-quality learning content quickly and efficiently. The AI Assistant is integrated throughout the SkillTree Dashboard, providing automated content generation for various components of your learning ecosystem.

Expand Down Expand Up @@ -146,4 +146,17 @@ Adjust the temperature setting to control the AI's creativity:
- **For brainstorming**: Try Creative mode
- **For most tasks**: The default Neutral setting works well

Your settings will be remembered for future AI Assistant sessions.
Your settings will be remembered for future AI Assistant sessions.

## AI-Powered Grading <since project="skills-service" version="4.1" />

Transform your grading workflow with intelligent AI assistance for Input Text questions. This feature significantly reduces the effort of manual grading while delivering consistent, accurate assessments with complete transparency.

Key Features:
- **Smart AI Grading** - Automatic evaluation with confidence scores and detailed reasoning explanations
- **Flexible Override Options** - Manual grade override with optional user email notifications
- **AI Grading Preview** - Administrative testing function to preview how AI will grade different answer variations

::: tip Ready to dive deeper?
Check out the comprehensive [AI-Powered Grading](/dashboard/user-guide/quizzes-and-surveys.html#ai-powered-grading-for-text-input-questions) guide in our Quizzes and Surveys documentation.
:::
14 changes: 11 additions & 3 deletions docs/dashboard/user-guide/projects.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,9 +228,17 @@ When a user's access to an Invite Only project has been revoked, only that user'

## Copy Project

To use an existing Project as a template you can easily copy its training profile (subjects, skills, badges, etc..) into a brand-new project.
To copy a project please use the ![copy project button](./screenshots/copy_btn.png) button available on a project card on the Project page.
The system will prompt you to enter a new project name and optionally modify the project id.
To use an existing Project as a template, you can easily copy its training profile (subjects, skills, badges, etc.) into a brand-new project.

To copy a project:
- Navigate to the Projects Admin page
- Locate the project card you want to copy
- Click the copy project button ![copy project button](./screenshots/copy_btn.png) (positioned between the edit and delete buttons)
- Enter a new project name in the dialog
- Optionally modify the auto-generated project ID
- Click Copy to create the new project

The system will create a new project with the copied training profile.

The following training profile elements are copied into the new project:
- [Subjects](/dashboard/user-guide/subjects.html) and their attributes (description, help url, etc..)
Expand Down
134 changes: 126 additions & 8 deletions docs/dashboard/user-guide/quizzes-and-surveys.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ Similarly to videos, users can embed audio clips into their quizzes using the `A

<Content path="/dashboard/user-guide/common/audio.md"/>

### Answer Grading
### Manual Answer Grading

If a quiz has at least 1 ``Input Text`` question then after a quiz taker submits an attempt a quiz administrator will be able to grade the answers for the ``Input Text`` questions.

Expand All @@ -130,9 +130,108 @@ To do so please navigate to ``Quizzes and Surveys -> Quiz -> Grading`` page.

![page-quiz-grading.png](../../screenshots/admin/page-quiz-grading.png)

A table of quiz attempts that contain ``Input Text`` questions will be displayed. Click on the ``Grade`` button to the right of the user to open the grading request.
Once expanded answers can be marked as either "Correct" or "Wrong", in addition a justification can be provided.
Once all the answers are marked as either correct or wrong, the system will grade the quiz attempt in its entirety considering all the questions in this quiz.
A table of quiz attempts containing `Input Text` questions will be displayed. Click the Grade button next to a user to
open the grading interface.

In the grading interface, each answer can be marked as **Correct** or **Wrong**, and you can provide a justification. Once all
answers are graded, the system will finalize the quiz attempt score considering all questions.

Administrators can manually override grades by navigating to the [Runs](/dashboard/user-guide/quizzes-and-surveys.html#runs) page and selecting a specific quiz run. Each
graded Text Input question displays an **Override Grade** button in the top-right corner.

When overriding a grade, the system presents a modal dialog where administrators can:
- Provide an optional justification for the grade change
- Choose whether to notify the user of the grade update

### AI-Powered Grading
<since project="skills-service" version="4.1" />

SkillTree now supports AI-powered grading for text input questions, enabling automated evaluation of free-form responses using Large Language Models (LLMs). This feature helps reduce the manual grading burden while maintaining consistent and accurate assessment.

**Key Features:**
- **Automated Grading**: Text input answers are automatically graded using AI models
- **Confidence Scoring**: AI provides confidence levels for each grading decision
- **Configurable Thresholds**: Administrators set minimum confidence levels for automatic grading

#### Configuring AI Grading

To enable AI grading for text input questions:

1. Navigate to the ``Quizzes and Surveys -> Quiz -> Questions`` page
2. Click on the **AI Grader** button next to the Input Text question

![component-ai-text-input-grader.png](../../screenshots/admin/component-ai-text-input-grader.png)

Configure the following settings:
| Setting | Description |
|:---------------------------------|:------------------------------------------------------------------------------------------------------------------|
| **AI Grader Enabled** | Toggle to activate AI-powered grading for text input questions |
| **Grading Instructions** | Enter grading instructions, including a preferred answer and any specific criteria for the AI to evaluate answers |
| **Minimum Correct Confidence %** | Set the confidence threshold (1-100%) for automatic grading |

##### AI Grading Process

When AI grading is enabled:

1. **Automatic Submission**: Text input answers are automatically submitted for AI evaluation after quiz completion
2. **AI Evaluation**: The AI model evaluates each answer using the provided grading instructions
3. **Confidence Assessment**: The AI provides a confidence score and a justification for each grading decision
4. **Result Processing**:
- Answers meeting or exceeding the minimum confidence level are automatically graded as correct
- Answers below the threshold are graded as incorrect
5. **Final Grading**: The quiz attempt is finalized once all answers are graded (either automatically or manually)

#### AI Grading Preview

While configuring AI grading for your text input questions, you can test and refine your grading configuration using the AI Grading Preview feature. This allows you to enter sample answers and see how the AI model will grade them based on your current settings.

To use the AI Grading Preview, enter a sample answer in the **Answer** field and click the **Test Answers** button. This will show you the AI's grading decision, confidence level, and justification for each answer based on the current settings.

**What the Preview Shows:**

- **Grading Decision**: Whether the AI would mark the answer as correct or incorrect
- **AI Confidence Level**: The AI's confidence level in its grading decision (0-100%)
- **AI Justification**: The AI's explanation for why it made that particular grading decision

**Using Preview Results to Refine Settings:**

- **Adjust Grading Instructions**: If the AI is consistently grading incorrectly, modify your grading instructions to be more specific
- **Fine-tune Confidence Thresholds**: Based on preview results, adjust your minimum confidence percentage
- **Test Edge Cases**: Try various answer formats, partial answers, and common misconceptions
- **Iterate and Improve**: Continue testing until the AI's grading aligns with your expectations

**Best Practices for Preview Testing:**

- **Use Real User Answers**: Test with actual answers users might provide, not just ideal responses
- **Cover Multiple Scenarios**: Include correct answers, partially correct answers, and completely incorrect answers
- **Validate Consistency**: Ensure similar answers receive similar grading decisions
- **Document Decisions**: Keep notes of which preview results you agree or disagree with for future reference

The AI Grading Preview helps ensure your AI grading configuration will work effectively before deploying it to live quiz attempts, reducing the need for manual corrections after implementation.

#### Monitoring AI Grading

Administrators can monitor AI grading results by visiting the [Runs](/dashboard/user-guide/quizzes-and-surveys.html#runs) page and then selecting the run details button to the right of the user to view details of that particular Quiz/Survey run.
If a failure is encountered, the grading mechanism is designed with resiliency in mind and will continue retrying the
grading for an extended period of time. The number of failed and remaining attempts are displayed both on the [Grading](/dashboard/user-guide/quizzes-and-surveys.html#answer-grading)
and [Runs](/dashboard/user-guide/quizzes-and-surveys.html#runs) pages. In the unlikely event that all attempts are exhausted, the system will email all quiz administrators and
manual grading will be required.

#### Manually Override AI Grade

Administrators can manually override AI grades by navigating to
the [Runs](/dashboard/user-guide/quizzes-and-surveys.html#runs) page and drilling down to a specific quiz run. Each
graded Text Input question displays an "Override Grade" button in the top-right corner of the question section.

When overriding an AI grade, the system presents a modal dialog where administrators can:
- Provide an optional justification
- Choose whether to notify the user of the updated decision

#### Best Practices for AI Grading

- **Clear Grading Criteria**: Provide detailed, specific instructions for what constitutes correct answers
- **Appropriate Confidence Thresholds**: Start with conservative thresholds (70-80%) and adjust based on AI performance
- **Regular Review**: Periodically review AI-graded answers to ensure accuracy and consistency

#### Grading Notifications
SkillTree will send email notifications to quiz administrators when grading is requested, and also send email notifications to quiz takers when answers are graded.
Expand Down Expand Up @@ -202,6 +301,11 @@ Enabling this feature will only display answer hints on subsequent quiz retakes

Enabling this feature will display the quiz description while the quiz is being taken.

#### Setting: Hide Answers for Completed Quizzes

When enabled, users cannot review their answers after completing the quiz, regardless of whether they passed or failed.
This helps maintain assessment integrity by preventing answer sharing.

## Survey

A Survey is a data collection technique utilizing one or more questions. Surveys can be associated to a skill or can be
Expand Down Expand Up @@ -315,15 +419,29 @@ runs please visit [Runs](/dashboard/user-guide/quizzes-and-surveys.html#runs) pa
![Quiz Results Page Screenshot](../../screenshots/admin/page-quiz-results.png)

## Runs
To track individual quiz/survey runs please visit the Runs page (``Quizzes and Surveys -> Quiz/Survey -> Results ``). Each row represents a single Quiz/Survey for a single user.
To track individual quiz/survey attempts, visit the **Runs** page (`Quizzes and Surveys Quiz/Survey Results`). Each row represents a single quiz or survey attempt by a user.

![Quiz Runs Page Screenshot](../../screenshots/admin/page-quiz-runs.png)
![component-quiz-runs-table.png](../../screenshots/admin/component-quiz-runs-table.png)

Select the run details button to the right of the user to view details of that particular Quiz/Survey run.
**Runs Table Features:**
- **User** - The user who attempted the quiz/survey
- **Status** - Current state: **Passed**, **Failed**, or **Needs Grading**
- **Runtime** - Time taken to complete the quiz/survey
- **Started** - Date and time when the attempt began
- **Results** - Number of correct answers out of total questions
- **Actions** - Delete button to remove the attempt

::: tip
The runs table can be filtered by user to find specific attempts.
:::

Click the **run details button** next to a user to view comprehensive information about that specific quiz/survey attempt.

![Quiz Single Run Page Screenshot](../../screenshots/admin/page-quiz-single-result.png)

Quiz results will depict selected answer(s) and its correctness status. Survey results will simply display which results were selected.
::: tip
Quiz results will depict selected answer(s) and their correctness status. Survey results will simply display which answers were selected.
:::

## Skill Association

Expand Down
21 changes: 16 additions & 5 deletions docs/dashboard/user-guide/self-reporting.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,25 @@ Alternatively you can have only some skills configured with Self Reporting or no

## Approval Queue

If a skill is configured with Self Reporting type of the ``Approval Queue`` then points will not be awarded right away but rather go
through the simple approval workflow:
1. User clicks ``Begin Request`` button and requests points
1. Request appears on the project's Self Report page (see the Screenshot below)
1. Project administrator approves or reject requests
When a skill is configured with the **Approval Queue** self-reporting type, points are not awarded immediately. Instead, they go through the following approval workflow:

1. **User Request**: The user clicks the **Begin Request** button to request points for the skill
2. **Queue Display**: The request appears in the project's **Self Report** page under the Approval Queue (see screenshot below)
3. **Admin Review**: A project administrator reviews and either approves or rejects the request

![SkillTree Skills Page](../../screenshots/admin/page-project-self_report.png)

**To approve or deny requests:**
1. Select one or more requests from the queue
2. Click the **Approve** or **Reject** button
3. Enter an optional justification for your decision
4. Confirm the action

**Filtering the Approval Queue:**
The approval queue can be filtered by:
- **Skill Name** - Search for specific skills
- **User ID** - Filter by specific users

### Approval History

Project administrators can can either approve or reject points/skill requests.
Expand Down
Loading