Customization Guide
Customize Kai to match your teaching style and institutional needs
Overview
Kai the AI is designed to be highly customizable, allowing you to tailor features, workflows, and integrations to your specific teaching style and institutional requirements. This guide covers all available customization options.
Grading Customization
Custom Rubrics
Create custom grading rubrics that match your assessment criteria.
Creating a Rubric
Via Dashboard:
- Navigate: Dashboard → Settings → Grading → Rubrics
- Click: “Create New Rubric”
- Configure:
- Name: “Essay Rubric - PSYCH 101”
- Total Points: 100
- Add Criteria
Example Rubric Structure:
| Criterion | Points | Description | Levels |
|---|---|---|---|
| Thesis Statement | 20 | Clear, arguable thesis | Excellent (20), Good (15), Fair (10), Poor (5) |
| Evidence | 30 | Supporting evidence and analysis | Excellent (30), Good (22), Fair (15), Poor (8) |
| Organization | 20 | Logical flow and structure | Excellent (20), Good (15), Fair (10), Poor (5) |
| Writing Quality | 20 | Grammar, style, clarity | Excellent (20), Good (15), Fair (10), Poor (5) |
| Citations | 10 | Proper citation format | Excellent (10), Good (7), Fair (5), Poor (2) |
Via API
rubric = {
"name": "Essay Rubric - PSYCH 101",
"total_points": 100,
"criteria": [
{
"name": "Thesis Statement",
"points": 20,
"description": "Clear, arguable thesis",
"levels": [
{"name": "Excellent", "points": 20, "description": "Clear, specific, arguable thesis"},
{"name": "Good", "points": 15, "description": "Clear thesis with minor issues"},
{"name": "Fair", "points": 10, "description": "Vague or unclear thesis"},
{"name": "Poor", "points": 5, "description": "Missing or fundamentally flawed thesis"}
]
},
# ... more criteria
]
}
response = requests.post(
"https://chi2api.com/v1/rubrics",
headers={"Authorization": f"Bearer {API_KEY}"},
json=rubric
)Feedback Styles
Customize the tone and detail level of AI-generated feedback.
Available Styles:
| Style | Description | Best For | Example |
|---|---|---|---|
| Detailed | Comprehensive feedback with specific suggestions | Major assignments, essays | “Your thesis in paragraph 2 effectively argues… However, consider strengthening…” |
| Concise | Brief, actionable feedback | Quizzes, frequent assignments | “Strong analysis. Add more examples in body paragraphs.” |
| Points Only | Score with minimal commentary | Quick assessments, self-graded work | “Score: 85/100” |
| Encouraging | Positive tone, growth-focused | Struggling students, formative assessment | “Great progress! You’re developing strong analysis skills…” |
| Professional | Formal, academic tone | Graduate courses, professional programs | “The analysis demonstrates competent understanding of…” |
Configuration:
# Set default for course
kai.courses.update(
course_id="course_abc",
grading_settings={
"feedback_style": "encouraging",
"show_rubric_scores": True,
"include_suggestions": True
}
)
# Override for specific assignment
kai.assignments.grade(
assignment_id="assign_123",
student_submission="...",
grading_style="detailed" # Override course default
)Auto-Grading Thresholds
Configure when AI can auto-grade vs. requiring human review.
Confidence-Based Grading:
grading_policy = {
"auto_grade_threshold": 0.85, # Auto-grade if confidence >= 85%
"review_required": {
"low_confidence": True, # Always review if confidence < threshold
"high_stakes": True, # Review if assignment weight > 20%
"boundary_scores": True, # Review if score near grade boundary
"flagged_content": True # Review if content flagged
},
"grade_boundaries": [90, 80, 70, 60] # A, B, C, D thresholds
}
kai.courses.update(
course_id="course_abc",
grading_settings=grading_policy
)Example Scenarios:
| Scenario | Confidence | Auto-Grade? | Reason |
|---|---|---|---|
| Clear excellent work | 0.95 | ✅ Yes | Above threshold |
| Borderline B/C (79%) | 0.88 | ❌ No | Near boundary |
| Low-stakes quiz | 0.80 | ⚠️ Depends | Check assignment weight |
| Plagiarism detected | 0.92 | ❌ No | Flagged content |
Feedback Workflow Customization
Custom Feedback Questions
Replace default questions with your own.
Default Questions: 1. “What concepts from today’s class were clear to you?” 2. “What topics would you like me to review or explain differently?”
Custom Questions Example:
feedback_config = {
"questions": [
{
"id": "clarity",
"text": "On a scale of 1-5, how clear was today's lecture?",
"type": "scale",
"min": 1,
"max": 5
},
{
"id": "confused_topics",
"text": "Which specific topics need more explanation?",
"type": "multiple_choice",
"options": [
"Standard Error",
"Hypothesis Testing",
"P-values",
"Effect Size",
"None - all clear"
],
"allow_multiple": True
},
{
"id": "pace",
"text": "Was the pace of today's class...",
"type": "single_choice",
"options": ["Too fast", "Just right", "Too slow"]
},
{
"id": "additional",
"text": "Any other feedback?",
"type": "free_text",
"optional": True
}
]
}
kai.courses.update(
course_id="course_abc",
feedback_settings=feedback_config
)Feedback Triggers
Customize when feedback requests are suggested or automatic.
Trigger Configuration:
triggers = {
"time_based": {
"enabled": True,
"interval_minutes": 30,
"max_per_class": 3
},
"content_based": {
"enabled": True,
"trigger_on": [
"topic_transition", # New major topic
"complex_concept", # AI detects difficult concept
"question_spike" # Many student questions
]
},
"engagement_based": {
"enabled": True,
"trigger_on": [
"attention_drop", # Engagement metrics decline
"confusion_indicators" # Body language, facial expressions
],
"threshold": 0.3 # 30% engagement drop
},
"manual_override": {
"allow_disable_suggestions": True,
"require_confirmation": False
}
}
kai.courses.update(
course_id="course_abc",
feedback_triggers=triggers
)Response Window Customization
Adjust how long students have to respond.
response_settings = {
"default_window_minutes": 2,
"allow_late_responses": True,
"late_window_minutes": 5,
"send_reminder": {
"enabled": True,
"after_seconds": 60
}
}Quiz Customization
Question Generation Rules
Control how Kai generates quiz questions.
quiz_settings = {
"difficulty_distribution": {
"easy": 0.3, # 30% easy questions
"medium": 0.5, # 50% medium questions
"hard": 0.2 # 20% hard questions
},
"question_types": {
"multiple_choice": 0.5,
"true_false": 0.2,
"short_answer": 0.3
},
"content_sources": [
"lecture_notes",
"textbook_chapters",
"assigned_readings",
"previous_exams"
],
"avoid_repetition": {
"enabled": True,
"lookback_quizzes": 5 # Don't repeat from last 5 quizzes
},
"adaptive_difficulty": {
"enabled": True,
"adjust_based_on": "student_performance"
}
}
kai.courses.update(
course_id="course_abc",
quiz_settings=quiz_settings
)Question Templates
Create custom question templates for consistency.
Template Example:
template = {
"name": "Concept Application Template",
"structure": {
"stem": "Given the following scenario: {scenario}",
"question": "Which statistical test would be most appropriate?",
"options": [
"{correct_test}",
"{plausible_alternative_1}",
"{plausible_alternative_2}",
"{clearly_wrong_option}"
],
"explanation": "The correct answer is {correct_test} because {reasoning}. "
"{plausible_alternative_1} would not work because {why_not}."
},
"variables": {
"scenario": {
"type": "generated",
"context": "real-world statistical scenario"
},
"correct_test": {
"type": "from_content",
"category": "statistical_tests"
}
}
}
kai.quiz_templates.create(template)Time Limits and Attempts
quiz_policies = {
"time_limit": {
"enabled": True,
"minutes": 10,
"auto_submit": True
},
"attempts": {
"allowed": 2,
"use_highest": True, # Or "average", "latest"
"time_between_attempts_hours": 24
},
"question_randomization": {
"randomize_order": True,
"randomize_options": True,
"pool_size": 20, # Select 10 from pool of 20
"questions_shown": 10
}
}SafeStream Customization
Content Moderation Rules
Fine-tune what content gets flagged.
Sensitivity Levels:
moderation_config = {
"sensitivity": "medium", # low, medium, high, custom
"categories": {
"profanity": {
"enabled": True,
"action": "flag", # flag, block, or allow
"severity_threshold": "medium"
},
"harassment": {
"enabled": True,
"action": "block",
"notify_admin": True
},
"academic_dishonesty": {
"enabled": True,
"action": "flag",
"patterns": [
"plagiarism_indicators",
"contract_cheating_language",
"suspicious_collaboration"
]
},
"personal_information": {
"enabled": True,
"action": "flag",
"types": ["phone", "address", "ssn", "credit_card"]
}
}
}
kai.courses.update(
course_id="course_abc",
safestream_settings=moderation_config
)Custom Keyword Lists
Add institution-specific or course-specific keywords.
custom_keywords = {
"flag_words": [
# Academic integrity
"write my paper for me",
"homework help service",
# Institution-specific
"campus-specific-concern",
# Course-specific sensitive topics
"sensitive-topic-1",
"sensitive-topic-2"
],
"allow_words": [
# Context where flagged words are acceptable
"discussing the ethics of cheating", # Academic discussion
"analyzing plagiarism in literature" # Course content
],
"escalate_words": [
# Immediate admin notification
"self-harm",
"violence",
"threat"
]
}
kai.safestream.update_keywords(
course_id="course_abc",
keywords=custom_keywords
)Action Workflows
Define what happens when content is flagged.
action_workflow = {
"low_severity": {
"action": "log",
"notify_instructor": False,
"allow_post": True
},
"medium_severity": {
"action": "flag",
"notify_instructor": True,
"allow_post": True,
"require_review_within_hours": 24
},
"high_severity": {
"action": "block",
"notify_instructor": True,
"notify_admin": True,
"notify_counseling": ["self_harm", "violence"],
"immediate_review": True
}
}UI/UX Customization
Branding
Customize the appearance of Kai to match your institution.
Dashboard Customization:
branding = {
"logo_url": "https://your-institution.edu/logo.png",
"primary_color": "#003366", # Institution blue
"secondary_color": "#FFD700", # Institution gold
"font_family": "Proxima Nova, sans-serif",
"custom_css_url": "https://your-institution.edu/kai-custom.css"
}
kai.settings.update_branding(branding)Mobile App Customization (Institution License):
app_branding = {
"app_name": "University XYZ Learning Assistant",
"app_icon_url": "https://your-institution.edu/app-icon.png",
"splash_screen_url": "https://your-institution.edu/splash.png",
"theme": {
"primary_color": "#003366",
"accent_color": "#FFD700",
"dark_mode_available": True
}
}Notification Preferences
Customize notification timing and frequency.
Instructor Notifications:
instructor_notifications = {
"feedback_complete": {
"enabled": True,
"method": ["push", "email"],
"immediate": True
},
"grading_complete": {
"enabled": True,
"method": ["email"],
"digest": "daily" # Or "immediate", "weekly"
},
"low_engagement_alert": {
"enabled": True,
"threshold": 0.4, # Alert if <40% participation
"method": ["push"]
},
"quiet_hours": {
"enabled": True,
"start": "22:00",
"end": "07:00",
"timezone": "America/New_York"
}
}Student Notifications:
student_notifications = {
"feedback_request": {
"enabled": True,
"method": ["push"],
"sound": "gentle_chime"
},
"quiz_available": {
"enabled": True,
"method": ["push", "email"],
"advance_notice_hours": 24
},
"grade_posted": {
"enabled": True,
"method": ["push"],
"include_score": False # Privacy option
},
"reminder_frequency": "once" # Or "twice", "persistent"
}Analytics Customization
Custom Metrics
Define custom metrics to track.
custom_metrics = {
"engagement_score": {
"formula": "(feedback_response_rate * 0.4) + (quiz_completion * 0.3) + (app_usage * 0.3)",
"display_name": "Engagement Index",
"threshold_warning": 0.6,
"threshold_critical": 0.4
},
"comprehension_velocity": {
"formula": "improvement_rate / time_period",
"display_name": "Learning Velocity",
"unit": "points/week"
},
"intervention_effectiveness": {
"formula": "post_intervention_score - pre_intervention_score",
"display_name": "Intervention Impact",
"track_by": "topic"
}
}
kai.analytics.add_custom_metrics(custom_metrics)Dashboard Layout
Customize what appears on your dashboard.
dashboard_config = {
"widgets": [
{
"type": "engagement_overview",
"position": {"row": 1, "col": 1},
"size": "large"
},
{
"type": "recent_feedback",
"position": {"row": 1, "col": 2},
"size": "medium",
"settings": {
"show_analysis": True,
"limit": 5
}
},
{
"type": "struggling_students",
"position": {"row": 2, "col": 1},
"size": "medium",
"settings": {
"threshold": 0.7,
"metric": "quiz_average"
}
},
{
"type": "topic_confusion_trends",
"position": {"row": 2, "col": 2},
"size": "large",
"settings": {
"timeframe": "2_weeks"
}
}
],
"refresh_interval_seconds": 60
}
kai.settings.update_dashboard(dashboard_config)Export Templates
Create custom export formats for reporting.
export_template = {
"name": "Weekly Institutional Report",
"format": "pdf",
"sections": [
{
"title": "Executive Summary",
"include": ["total_students", "avg_engagement", "top_challenges"]
},
{
"title": "Course Performance",
"include": ["course_list", "completion_rates", "avg_scores"]
},
{
"title": "Student Support Needs",
"include": ["struggling_students", "intervention_recommendations"]
},
{
"title": "Appendix",
"include": ["detailed_analytics", "raw_data"]
}
],
"schedule": {
"frequency": "weekly",
"day": "Monday",
"time": "06:00",
"recipients": ["dean@institution.edu", "analytics@institution.edu"]
}
}
kai.exports.create_template(export_template)Integration Customization
Webhook Customization
Filter and transform webhook payloads.
webhook_config = {
"url": "https://your-server.com/webhook",
"events": ["feedback.received", "quiz.submitted"],
"filters": {
"course_ids": ["course_abc", "course_xyz"], # Only these courses
"min_confidence": 0.8, # Only high-confidence events
"exclude_test_data": True
},
"transform": {
"include_fields": ["student_id", "score", "timestamp"],
"exclude_fields": ["personal_info"],
"rename_fields": {
"student_id": "learner_id"
}
},
"retry_policy": {
"max_attempts": 3,
"backoff": "exponential"
}
}LMS Sync Customization
Control what syncs between Kai and your LMS.
lms_sync_config = {
"sync_direction": {
"courses": "bidirectional", # LMS ↔️ Kai
"students": "from_lms", # LMS → Kai only
"assignments": "bidirectional",
"grades": "to_lms" # Kai → LMS only
},
"sync_frequency": {
"courses": "daily",
"students": "hourly",
"assignments": "hourly",
"grades": "immediate"
},
"conflict_resolution": {
"grade_conflicts": "keep_highest", # Or "keep_latest", "manual_review"
"enrollment_conflicts": "lms_wins"
},
"selective_sync": {
"only_published_courses": True,
"only_active_students": True,
"exclude_past_courses": True
}
}
kai.integrations.update_lms_sync(
platform="canvas",
config=lms_sync_config
)Accessibility Customization
Language and Localization
Configure language preferences and translations.
localization = {
"default_language": "en",
"available_languages": ["en", "es", "fr", "zh"],
"student_choice": True, # Students can choose their language
"auto_translate": {
"enabled": True,
"feedback": True,
"questions": True,
"ui_elements": True
},
"regional_settings": {
"date_format": "MM/DD/YYYY", # Or "DD/MM/YYYY", "YYYY-MM-DD"
"time_format": "12h", # Or "24h"
"timezone": "America/New_York"
}
}Accessibility Features
accessibility = {
"screen_reader": {
"enabled": True,
"verbose_mode": True
},
"visual": {
"high_contrast_mode": True,
"font_size_options": ["small", "medium", "large", "x-large"],
"dyslexia_friendly_font": True
},
"mobile_accessibility": {
"voice_input": True,
"haptic_feedback": True,
"simplified_ui": True
}
}Template Library
Pre-built Configurations
Kai provides templates for common scenarios:
Available Templates:
| Template | Description | Best For |
|---|---|---|
| Large Lecture | High-frequency feedback, auto-grading | 100+ students |
| Seminar Discussion | Rich feedback, peer review | 10-25 students |
| Flipped Classroom | Pre-class quizzes, targeted support | Any size |
| Lab Course | Practical assessments, safety monitoring | Hands-on courses |
| Online Asynchronous | Flexible deadlines, discussion monitoring | Remote learning |
| Hybrid | Balanced online/in-person features | Mixed format |
Applying a Template:
kai.courses.apply_template(
course_id="course_abc",
template="large_lecture",
customize={
"feedback_frequency": "high", # Override template default
"auto_grade_threshold": 0.90 # Stricter than template
}
)Advanced Customization
Custom Algorithms
Institution license holders can upload custom algorithms.
Example: Custom Engagement Score
def custom_engagement_score(student_data):
"""
Custom engagement calculation emphasizing attendance
"""
attendance_weight = 0.5
participation_weight = 0.3
completion_weight = 0.2
score = (
student_data['attendance_rate'] * attendance_weight +
student_data['participation_rate'] * participation_weight +
student_data['completion_rate'] * completion_weight
)
return {
'score': score,
'level': 'high' if score > 0.8 else 'medium' if score > 0.5 else 'low',
'components': {
'attendance': student_data['attendance_rate'],
'participation': student_data['participation_rate'],
'completion': student_data['completion_rate']
}
}
# Upload custom algorithm
kai.algorithms.upload(
name="custom_engagement",
function=custom_engagement_score,
test_data=sample_student_data
)Best Practices
Start Simple
Don’t customize everything at once. Start with defaults, identify pain points, then customize specific features.
Recommended Progression: 1. Week 1-2: Use defaults, identify needs 2. Week 3-4: Customize feedback questions and timing 3. Week 5-6: Add custom rubrics 4. Week 7+: Advanced features (custom metrics, algorithms)
Version Control
Track your customizations:
# Export current configuration
config = kai.settings.export(course_id="course_abc")
# Save as version
with open("kai_config_v2.json", "w") as f:
json.dump(config, f, indent=2)
# Import configuration
with open("kai_config_v2.json", "r") as f:
config = json.load(f)
kai.settings.import_config(
course_id="course_new",
config=config
)Test Before Deploying
Always test customizations in a sandbox course:
# Create test course
test_course = kai.courses.create(
name="TEST - Configuration Testing",
is_sandbox=True
)
# Apply customizations
kai.settings.import_config(
course_id=test_course.course_id,
config=custom_config
)
# Test with sample data
# ... testing ...
# If successful, apply to production
kai.settings.import_config(
course_id="course_abc",
config=custom_config
)Support
- 📧 Customization Help: customization@chi2labs.com
- 📚 API Reference: Complete API documentation
- 🎓 Training: Advanced customization workshops
- 👥 Community: Share configurations
Customization capabilities vary by plan. Contact sales for institution-specific features.