ContiAI / test_objectives.py
ziadsameh32's picture
final-version
65638b6
"""
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
๐Ÿงช Test Script for Objectives Generator
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
ู‡ุฐุง ุงู„ู…ู„ู ู„ุงุฎุชุจุงุฑ ุชูˆู„ูŠุฏ ุงู„ุฃู‡ุฏุงู ุงู„ุชุนู„ูŠู…ูŠุฉ ุจุงุณุชุฎุฏุงู… ุงู„ุจูŠุงู†ุงุช ุงู„ูุนู„ูŠุฉ.
"""
import json
import sys
import os
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from agents.analysis_phase.objectives import generate_objectives
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ๐Ÿ“Š Test Data - ุงู„ุจูŠุงู†ุงุช ุงู„ูุนู„ูŠุฉ ู…ู† ุงู„ู…ุณุชุฎุฏู…
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
METADATA = {
'topic': '(Design thinking) ุชู‚ู†ูŠุงุช ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ู„ุญู„ ุงู„ู…ุดูƒู„ุงุช ูˆุงุชุฎุงุฐ ุงู„ู‚ุฑุงุฑุงุช',
'domain': 'Multidisciplinary',
'content_type': 'Educational',
'audience': 'Professionals and Students',
'material_type': ['Conceptual', 'Procedural', 'Structural', 'Personal', 'Realistic']
}
OUTLINES = {
'Metadata': [METADATA],
'main_concept': 'ุชู‚ู†ูŠุงุช ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ู„ุญู„ ุงู„ู…ุดูƒู„ุงุช ูˆุงุชุฎุงุฐ ุงู„ู‚ุฑุงุฑุงุช',
'related_concepts': ['Management', 'Technology', 'Aerospace', 'Psychologists', 'Entrepreneurs', 'Educational', 'Awareness'],
'units': [
{
'unit_number': 1,
'title': 'ุงู„ูุตู„ ุงู„ุฃูˆู„: ู…ูุงู‡ูŠู… ูˆู…ุจุงุฏุฆ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ',
'focus': 'ูŠู…ู†ุญ ุงู„ู…ุชุนู„ู…ูŠู† ูู‡ู…ุงู‹ ู…ุชุทูˆุฑุงู‹ ู„ู„ู…ูุงู‡ูŠู… ุงู„ุฃุณุงุณูŠุฉุŒ ุชุงุฑูŠุฎ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠุŒ ูˆุงู„ู†ุธุฑุฉ ุงู„ู…ู†ู‡ุฌูŠุฉ ุงู„ุชูŠ ุชูุดูƒู‘ู„ ุฃุณุงุณุงู‹ ู„ู„ุชุนุงู…ู„ ู…ุน ุงู„ู…ุดูƒู„ุงุช ุงู„ู…ุนู‚ุฏุฉ.',
'axes': [
{
'axis_number': 1,
'title': 'ุชุนุฑูŠู ุงู„ู…ุตุทู„ุญุงุช ุงู„ุฃุณุงุณูŠุฉ ู„ู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ',
'purpose': 'ุชุนุฑูŠู ุงู„ู…ุตุทู„ุญุงุช ุงู„ุฃุณุงุณูŠุฉ ูŠุณุงุนุฏ ุงู„ู…ุชุนู„ู…ูŠู† ุนู„ู‰ ุจู†ุงุก ู‚ุงุนุฏุฉ ู…ุนุฑููŠุฉ ุซุงุจุชุฉ'
},
{
'axis_number': 2,
'title': 'ุดุฑุญ ุชุงุฑูŠุฎ ุชุทูˆุฑ ู…ู†ู‡ุฌ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ',
'purpose': 'ุชูˆุถูŠุญ ุชุงุฑูŠุฎ ุชุทูˆุฑ ู…ู†ู‡ุฌ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ูŠุนุฒุฒ ูู‡ู… ุงู„ุณูŠุงู‚ ูˆุงู„ุชุทุจูŠู‚'
},
{
'axis_number': 3,
'title': 'ุฃู…ุซู„ุฉ ุชุทุจูŠู‚ูŠุฉ ู„ู„ู…ุจุงุฏุฆ ุงู„ุชุตู…ูŠู…ูŠุฉ',
'purpose': 'ุนุฑุถ ุฃู…ุซู„ุฉ ุนู…ู„ูŠุฉ ูŠุฑุจุท ุงู„ู…ุจุงุฏุฆ ุจุงู„ูˆุงู‚ุน ูˆุชุทุจูŠู‚ุงุชู‡ู…'
},
{
'axis_number': 4,
'title': 'ุชุญู„ูŠู„ ู…ูƒูˆู†ุงุช ุงู„ุนู…ู„ูŠุฉ ุงู„ุชุตู…ูŠู…ูŠุฉ ููŠ ู…ุดุฑูˆุน ุนู…ู„ูŠ',
'purpose': 'ุชุญู„ูŠู„ ู…ูƒูˆู†ุงุช ุงู„ุนู…ู„ูŠุฉ ููŠ ู…ุดุฑูˆุน ุนู…ู„ูŠ ูŠุทูˆู‘ุฑ ู…ู‡ุงุฑุงุช ุงู„ุชููƒูŠุฑ ุงู„ู†ู‚ุฏูŠ'
},
{
'axis_number': 5,
'title': 'ุงุจุชูƒุงุฑ ู†ู…ูˆุฐุฌ ุชุตู…ูŠู…ูŠ ู„ุญู„ ู…ุดูƒู„ุฉ ู…ุญุฏุฏุฉ',
'purpose': 'ุงุจุชูƒุงุฑ ู†ู…ูˆุฐุฌ ุชุตู…ูŠู…ูŠ ู„ุญู„ ู…ุดูƒู„ุฉ ู…ุญุฏุฏ ูŠุนุฒุฒ ุงู„ุงุจุชูƒุงุฑ ูˆุงู„ุฅุจุฏุงุน'
}
]
},
{
'unit_number': 2,
'title': 'ุงู„ูุตู„ ุงู„ุซุงู†ูŠ: ุงู„ุนู…ู„ูŠุฉ ุงู„ู…ูŠุฏุงู†ูŠุฉ ู„ุชู‚ู†ูŠุงุช ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ',
'focus': 'ูŠูุฏุฑู‘ุณ ุงู„ู…ุชุนู„ู…ูŠู† ุงู„ุฎุทูˆุงุช ุงู„ุนู…ู„ูŠุฉ (ุงู„ุชุนุงุทูŠุŒ ุงู„ุชุญุฏูŠุฏุŒ ุงู„ุฅุจุฏุงุนุŒ ุงู„ู†ู…ุฐุฌุฉุŒ ูˆุงู„ุงุฎุชุจุงุฑ) ู…ุน ุชุทุจูŠู‚ ุชู…ุงุฑูŠู† ุชุฌุฑูŠุจูŠุฉ ุชูุจู†ู‰ ู…ู‡ุงุฑุงุช ุชู†ููŠุฐูŠุฉ ู…ุจุงุดุฑุฉ.',
'axes': [
{
'axis_number': 1,
'title': 'ุฏุฑุงุณุฉ ุฎุทูˆุงุช ุงู„ุนู…ู„ูŠุฉ ุงู„ู…ูŠุฏุงู†ูŠุฉ',
'purpose': 'ุชุฐูƒุฑ ุฎุทูˆุงุช ุงู„ุนู…ู„ูŠุฉ ุงู„ู…ูŠุฏุงู†ูŠุฉ ุงู„ุฃุณุงุณูŠุฉ ูŠุนุฒุฒ ุงู„ุชุชุจุน ุงู„ุณู„ุณ ู„ู„ุนู…ู„ูŠุฉ'
},
{
'axis_number': 2,
'title': 'ุดุฑุญ ู…ูุตู„ ู„ู…ุฑุงุญู„ ุงู„ุชุนุงุทูŠ ูˆุงู„ุชุญุฏูŠุฏ',
'purpose': 'ุดุฑุญ ู…ูุตู„ ู„ู…ุฑุงุญู„ ุงู„ุชุนุงุทูŠ ูˆุงู„ุชุญุฏูŠุฏ ูŠูˆุถุญ ูƒู„ ุฎุทูˆุฉ ู…ู† ุงู„ุนู…ู„ูŠุฉ'
},
{
'axis_number': 3,
'title': 'ุชู†ููŠุฐ ุชู…ุฑูŠู† ุชุนุงุทูŠ ู„ุญุงู„ุฉ ูˆุงู‚ุนูŠุฉ',
'purpose': 'ุชู†ููŠุฐ ุชู…ุฑูŠู† ุชุนุงุทูŠ ู„ุญุงู„ุฉ ูˆุงู‚ุนูŠุฉ ูŠุฑุจุท ุงู„ู†ุธุฑูŠุฉ ุจุงู„ุชุทุจูŠู‚'
},
{
'axis_number': 4,
'title': 'ุชุญู„ูŠู„ ู†ุชุงุฆุฌ ุงู„ู…ุฑุญู„ุฉ ุงู„ุฅุจุฏุงุนูŠุฉ ู„ู„ู†ู…ุงุฐุฌ',
'purpose': 'ุชุญู„ูŠู„ ู†ุชุงุฆุฌ ุงู„ู…ุฑุญู„ุฉ ุงู„ุฅุจุฏุงุนูŠุฉ ู„ู„ู†ู…ุงุฐุฌ ูŠูˆุถุญ ู†ู‚ุงุท ุงู„ู‚ูˆุฉ ูˆุงู„ุถุนู'
},
{
'axis_number': 5,
'title': 'ุงุจุชูƒุงุฑ ุญู„ ู†ู‡ุงุฆูŠ ุจุนุฏ ุงุฎุชุจุงุฑ ุงู„ู†ู…ูˆุฐุฌ',
'purpose': 'ุงุจุชูƒุงุฑ ุญู„ ู†ู‡ุงุฆูŠ ุจุนุฏ ุงุฎุชุจุงุฑ ุงู„ู†ู…ูˆุฐุฌ ูŠุนุฒุฒ ุงู„ุชุนู„ู… ุงู„ุนู…ู„ูŠ'
}
]
},
{
'unit_number': 3,
'title': 'ุงู„ูุตู„ ุงู„ุซุงู„ุซ: ุชุทุจูŠู‚ุงุช ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ููŠ ุงู„ุฅุฏุงุฑุฉุŒ ุงู„ุชู‚ู†ูŠุฉุŒ ุงู„ูุถุงุกุŒ ุนู„ู… ุงู„ู†ูุณ ูˆุฑูŠุงุฏุฉ ุงู„ุฃุนู…ุงู„',
'focus': 'ูŠูุธู‡ุฑ ูƒูŠู ูŠู…ูƒู† ุฏู…ุฌ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ููŠ ู…ุฌุงู„ุงุช ู…ุชุนุฏุฏุฉุŒ ู…ู‚ุฏู…ู‹ุง ุฏุฑุงุณุงุช ุญุงู„ุฉ ูˆุงู‚ุนูŠุฉ ุชูุซุจุช ูุงุนู„ูŠุชู‡ ููŠ ุชุญุณูŠู† ุงู„ุนู…ู„ูŠุงุช ูˆุงุชุฎุงุฐ ุงู„ู‚ุฑุงุฑุงุช ุงู„ูุนุงู„ุฉ.',
'axes': [
{
'axis_number': 1,
'title': 'ุชุญุฏูŠุฏ ู…ุฌุงู„ุงุช ุชุทุจูŠู‚ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ',
'purpose': 'ุชุญุฏูŠุฏ ู…ุฌุงู„ุงุช ุชุทุจูŠู‚ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ูŠุญุฏุฏ ุงู„ูุถุงุกุงุช ุงู„ุชูŠ ูŠู…ูƒู† ุชูˆุธูŠูู‡ุง'
},
{
'axis_number': 2,
'title': 'ุดุฑุญ ุฏูˆุฑ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ููŠ ุงู„ุฅุฏุงุฑุฉ',
'purpose': 'ุดุฑุญ ุฏูˆุฑ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ููŠ ุงู„ุฅุฏุงุฑุฉ ูŠูˆุถุญ ูƒูŠู ูŠุญุณู‘ู† ุงู„ุนู…ู„ูŠุงุช'
},
{
'axis_number': 3,
'title': 'ุชุทุจูŠู‚ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ุนู„ู‰ ู‚ุถูŠุฉ ุฅุฏุงุฑูŠุฉ',
'purpose': 'ุชุทุจูŠู‚ ุงู„ุชููƒูŠุฑ ุงู„ุชุตู…ูŠู…ูŠ ุนู„ู‰ ู‚ุถูŠุฉ ุฅุฏุงุฑูŠุฉ ูŠุฎุชุจุฑ ูุนุงู„ูŠุฉ ุงู„ุชูƒุชูŠูƒุงุช'
},
{
'axis_number': 4,
'title': 'ุชุญู„ูŠู„ ูุงุนู„ูŠุฉ ุงู„ุชุทุจูŠู‚ุงุช ููŠ ู…ุฌุงู„ ุงู„ูุถุงุก',
'purpose': 'ุชุญู„ูŠู„ ูุงุนู„ูŠุฉ ุงู„ุชุทุจูŠู‚ุงุช ููŠ ู…ุฌุงู„ ุงู„ูุถุงุก ูŠู‚ูŠู‘ู… ุฅู…ูƒุงู†ูŠุงุช ุงู„ุงุจุชูƒุงุฑ'
},
{
'axis_number': 5,
'title': 'ุงุจุชูƒุงุฑ ู…ุจุงุฏุฑุฉ ุชุตู…ูŠู…ูŠุฉ ู„ุฑุจุท ุนู„ู… ุงู„ู†ูุณ ูˆุฑูŠุงุฏุฉ ุงู„ุฃุนู…ุงู„',
'purpose': 'ุงุจุชูƒุงุฑ ู…ุจุงุฏุฑุฉ ุชุตู…ูŠู…ูŠุฉ ู„ุฑุจุท ุนู„ู… ุงู„ู†ูุณ ูˆุฑูŠุงุฏุฉ ุงู„ุฃุนู…ุงู„ ูŠุฏู…ุฌ ุงู„ู…ู†ู‡ุฌูŠุฉ'
}
]
},
{
'unit_number': 4,
'title': 'ุงู„ูุตู„ ุงู„ุฑุงุจุน: ุงู„ุชู†ููŠุฐ ูˆุงู„ุชู‚ูŠูŠู… โ€“ ุงู„ุชู†ู…ูŠุฉ ุงู„ุดุฎุตูŠุฉ ูˆุงู„ูˆุนูŠ ุงู„ู…ุฌุชู…ุนูŠ',
'focus': 'ูŠุดุฌุน ุงู„ู…ุชุนู„ู…ูŠู† ุนู„ู‰ ุชู†ููŠุฐ ุญู„ูˆู„ ู…ูุตู…ู…ุฉ ุจูุนู‘ุงู„ูŠุฉุŒ ู‚ูŠุงุณ ุฃุซุฑู‡ุงุŒ ูˆุชุนุฒูŠุฒ ุงู„ูˆุนูŠ ุงู„ุฐุงุชูŠ ูˆุงู„ู…ุฌุชู…ุนูŠุŒ ู…ุน ุชูˆุฌูŠู‡ ู„ู…ู‡ุงุฑุงุช ุงู„ู‚ูŠุงุฏุฉ ูˆุงู„ุชููƒูŠุฑ ุงู„ู†ู‚ุฏูŠ.',
'axes': [
{
'axis_number': 1,
'title': 'ู…ุฑุงุฌุนุฉ ู…ูุงู‡ูŠู… ุชู†ููŠุฐ ุงู„ุญู„ูˆู„ ุงู„ู…ุจุฏุนุฉ',
'purpose': 'ุชุฐูƒูŠุฑ ุจู…ูุงู‡ูŠู… ุชู†ููŠุฐ ุงู„ุญู„ูˆู„ ุงู„ู…ุจุฏุนุฉ ูŠุญู‚ู‚ ูˆุถูˆุญ ุงู„ุฑุคูŠุฉ'
},
{
'axis_number': 2,
'title': 'ุดุฑุญ ุชู‚ู†ูŠุงุช ู‚ูŠุงุณ ุฃุซุฑ ุงู„ุญู„ูˆู„ ุงู„ุชุญู„ูŠู„ูŠุฉ',
'purpose': 'ุดุฑุญ ุชู‚ู†ูŠุงุช ู‚ูŠุงุณ ุฃุซุฑ ุงู„ุญู„ูˆู„ ุงู„ุชุญู„ูŠู„ูŠุฉ ูŠู‚ุฏู‘ู… ุฅุทุงุฑ ู„ู„ุชู‚ูŠูŠู…'
},
{
'axis_number': 3,
'title': 'ุงุณุชุฎุฏุงู… ุฃุฏูˆุงุช ู‚ูŠุงุณ ุชู‚ูŠูŠู… ุญู„ ู…ุดุฑูˆุนูƒ',
'purpose': 'ุงุณุชุฎุฏุงู… ุฃุฏูˆุงุช ู‚ูŠุงุณ ุชู‚ูŠูŠู… ุญู„ ู…ุดุฑูˆุนูƒ ูŠูŽู…ูƒู‘ู† ุงู„ู…ุชุนู„ู…ูŠู† ู…ู† ุงู„ุชุญู„ูŠู„'
},
{
'axis_number': 4,
'title': 'ุชุญู„ูŠู„ ู…ุคุดุฑุงุช ุงู„ุฃุฏุงุก ูˆุงู„ุชุฃุซูŠุฑ ุงู„ู…ุฌุชู…ุนูŠ',
'purpose': 'ุชุญู„ูŠู„ ู…ุคุดุฑุงุช ุงู„ุฃุฏุงุก ูˆุงู„ุชุฃุซูŠุฑ ุงู„ู…ุฌุชู…ุนูŠ ูŠุญุฏุฏ ุงู„ูุงุนู„ูŠุฉ ูˆุงู„ุชุฃุซูŠุฑ'
},
{
'axis_number': 5,
'title': 'ุงุจุชูƒุงุฑ ุงุณุชุฑุงุชูŠุฌูŠุฉ ู‚ูŠุงุฏุฉ ู„ุชุนุฒูŠุฒ ุงู„ูˆุนูŠ ุงู„ุฐุงุชูŠ',
'purpose': 'ุงุจุชูƒุงุฑ ุงุณุชุฑุงุชูŠุฌูŠุฉ ู‚ูŠุงุฏุฉ ู„ุชุนุฒูŠุฒ ุงู„ูˆุนูŠ ุงู„ุฐุงุชูŠ ูŠุซู…ุฑ ุฅู…ูƒุงู†ูŠุฉ ุงู„ู‚ูŠุงุฏุฉ'
}
]
}
]
}
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ๐Ÿงช Test Function
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def test_objectives_generator():
"""
ุงุฎุชุจุงุฑ ุชูˆู„ูŠุฏ ุงู„ุฃู‡ุฏุงู ุงู„ุชุนู„ูŠู…ูŠุฉ.
"""
print("โ”" * 80)
print("๐Ÿš€ Starting Objectives Generation Test")
print("โ”" * 80)
print()
# Print input summary
print("๐Ÿ“Š Input Data:")
print(f" โ€ข Topic: {METADATA['topic']}")
print(f" โ€ข Domain: {METADATA['domain']}")
print(f" โ€ข Content Type: {METADATA['content_type']}")
print(f" โ€ข Audience: {METADATA['audience']}")
print(f" โ€ข Material Type: {', '.join(METADATA['material_type'])}")
print(f" โ€ข Units: {len(OUTLINES['units'])}")
# Count total axes
total_axes = sum(len(unit['axes']) for unit in OUTLINES['units'])
print(f" โ€ข Total Axes: {total_axes}")
print()
# Generate objectives
print("โณ Generating objectives...")
print("โ”" * 80)
print()
try:
result = generate_objectives(
topic=METADATA['topic'],
domain=METADATA['domain'],
content_type=METADATA['content_type'],
audience=METADATA['audience'],
material_type=METADATA['material_type'],
outlines=OUTLINES
)
print()
print("โ”" * 80)
print("โœ… Objectives Generated Successfully!")
print("โ”" * 80)
print()
# Print results summary
objectives = result.get('objectives', [])
print(f"๐Ÿ“ˆ Results Summary:")
print(f" โ€ข Total Objectives Generated: {len(objectives)}")
print(f" โ€ข Expected (Total Axes): {total_axes}")
print(f" โ€ข Match: {'โœ… YES' if len(objectives) == total_axes else 'โŒ NO'}")
print()
# Analyze verb diversity
verbs_used = [obj['objective'].split()[1] for obj in objectives if len(obj['objective'].split()) > 1]
unique_verbs = len(set(verbs_used))
diversity_rate = (unique_verbs / len(verbs_used)) * 100 if verbs_used else 0
print(f"๐Ÿ“Š Verb Diversity:")
print(f" โ€ข Total Verbs Used: {len(verbs_used)}")
print(f" โ€ข Unique Verbs: {unique_verbs}")
print(f" โ€ข Diversity Rate: {diversity_rate:.1f}%")
print(f" โ€ข Target: 70-80%")
print(f" โ€ข Status: {'โœ… PASS' if diversity_rate >= 70 else 'โš ๏ธ NEEDS IMPROVEMENT'}")
print()
# Analyze domain distribution
domain_counts = {
'Cognitive': sum(1 for obj in objectives if 'Cognitive' in obj['level']),
'Affective': sum(1 for obj in objectives if 'Affective' in obj['level']),
'Psychomotor': sum(1 for obj in objectives if 'Psychomotor' in obj['level'])
}
total_objs = len(objectives)
print(f"๐Ÿ“Š Domain Distribution:")
for domain, count in domain_counts.items():
percentage = (count / total_objs) * 100 if total_objs > 0 else 0
print(f" โ€ข {domain}: {count} ({percentage:.1f}%)")
print()
# Print first few objectives as examples
print("๐Ÿ“ Sample Objectives (First 3):")
print("โ”" * 80)
for i, obj in enumerate(objectives[:3], 1):
print(f"\n{i}. Unit: {obj['unit']}")
print(f" Axis: {obj['axis']}")
print(f" Level: {obj['level']}")
print(f" Verbs: {', '.join(obj['verbs'])}")
print(f" Objective: {obj['objective']}")
print()
print("โ”" * 80)
# Save to file
output_file = 'objectives_output.json'
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(result, f, ensure_ascii=False, indent=2)
print(f"๐Ÿ’พ Full output saved to: {output_file}")
print()
return result
except Exception as e:
print()
print("โ”" * 80)
print("โŒ Error During Generation")
print("โ”" * 80)
print(f"Error: {str(e)}")
print()
import traceback
traceback.print_exc()
return None
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ๐ŸŽฏ Main Execution
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
if __name__ == "__main__":
test_objectives_generator()