From c661a187e7b20a0eebe20489f4e8893da1ae6423 Mon Sep 17 00:00:00 2001 From: Yamen Ahmad Date: Sun, 12 Apr 2026 02:47:53 +0400 Subject: [PATCH] fix: correct ELAI API payload format for video generation Use proper slide structure with canvas, avatar object, and voice settings to match ELAI API requirements. Made-with: Cursor --- .../__pycache__/__init__.cpython-312.pyc | Bin 295 -> 291 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 238 bytes .../__pycache__/adaptive.cpython-312.pyc | Bin 15433 -> 16402 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 321 -> 317 bytes .../adaptive_event.cpython-312.pyc | Bin 1414 -> 1410 bytes .../__pycache__/adaptive_path.cpython-312.pyc | Bin 1096 -> 1092 bytes .../adaptive_settings.cpython-312.pyc | Bin 1735 -> 1731 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 336 -> 332 bytes .../adaptive_engine.cpython-312.pyc | Bin 5173 -> 5159 bytes .../__pycache__/alert_service.cpython-312.pyc | Bin 3503 -> 3485 bytes .../__pycache__/style_matcher.cpython-312.pyc | Bin 2112 -> 2107 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 285 -> 285 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 317 -> 317 bytes .../__pycache__/ai_controller.cpython-312.pyc | Bin 34005 -> 34005 bytes .../coach_controller.cpython-312.pyc | Bin 6505 -> 6505 bytes .../media_controller.cpython-312.pyc | Bin 11891 -> 9055 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 260 -> 260 bytes .../models/__pycache__/ai_log.cpython-312.pyc | Bin 1847 -> 1847 bytes .../__pycache__/ai_settings.cpython-312.pyc | Bin 2536 -> 2536 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 570 -> 570 bytes .../__pycache__/coach_service.cpython-312.pyc | Bin 7481 -> 7481 bytes .../__pycache__/elai_service.cpython-312.pyc | Bin 5015 -> 7384 bytes .../elevenlabs_service.cpython-312.pyc | Bin 4939 -> 4939 bytes .../gptzero_service.cpython-312.pyc | Bin 4580 -> 4580 bytes .../openai_service.cpython-312.pyc | Bin 20224 -> 20224 bytes .../__pycache__/polly_service.cpython-312.pyc | Bin 4996 -> 4996 bytes .../whisper_service.cpython-312.pyc | Bin 5667 -> 5667 bytes .../encoach_ai/services/elai_service.py | 60 +++++++++++++++++- .../__pycache__/__init__.cpython-312.pyc | Bin 296 -> 292 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 244 -> 240 bytes .../__pycache__/ai_course.cpython-312.pyc | Bin 24324 -> 24324 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 294 -> 290 bytes .../ai_generation_log.cpython-312.pyc | Bin 1611 -> 1607 bytes .../ai_ielts_generation_log.cpython-312.pyc | Bin 1878 -> 1874 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 316 -> 312 bytes .../english_pipeline.cpython-312.pyc | Bin 5626 -> 5615 bytes .../ielts_pipeline.cpython-312.pyc | Bin 6974 -> 6965 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 228 -> 224 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 261 -> 257 bytes .../__pycache__/auth.cpython-312.pyc | Bin 6515 -> 6515 bytes .../__pycache__/base.cpython-312.pyc | Bin 7891 -> 7889 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 263 -> 259 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 238 bytes .../__pycache__/branding.cpython-312.pyc | Bin 9983 -> 9970 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 237 -> 233 bytes .../__pycache__/branding.cpython-312.pyc | Bin 2665 -> 2661 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 224 -> 220 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 478 -> 474 bytes .../models/__pycache__/code.cpython-312.pyc | Bin 3263 -> 3259 bytes .../encoach_entity.cpython-312.pyc | Bin 3982 -> 3973 bytes .../__pycache__/encoach_user.cpython-312.pyc | Bin 4712 -> 4713 bytes .../entity_level_mapping.cpython-312.pyc | Bin 1145 -> 1141 bytes .../models/__pycache__/invite.cpython-312.pyc | Bin 2559 -> 2555 bytes .../__pycache__/permission.cpython-312.pyc | Bin 1260 -> 1256 bytes .../models/__pycache__/role.cpython-312.pyc | Bin 1609 -> 1605 bytes .../user_entity_rel.cpython-312.pyc | Bin 1067 -> 1063 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 265 -> 261 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 238 bytes .../__pycache__/course.cpython-312.pyc | Bin 29739 -> 29659 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 357 -> 353 bytes .../course_extension.cpython-312.pyc | Bin 1239 -> 1235 bytes .../__pycache__/course_module.cpython-312.pyc | Bin 1995 -> 1991 bytes .../course_section.cpython-312.pyc | Bin 1268 -> 1264 bytes .../__pycache__/gap_profile.cpython-312.pyc | Bin 1367 -> 1363 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 268 -> 264 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 352 -> 352 bytes .../__pycache__/custom_exam.cpython-312.pyc | Bin 17754 -> 17721 bytes .../exam_structures.cpython-312.pyc | Bin 5233 -> 5233 bytes .../__pycache__/ielts_exam.cpython-312.pyc | Bin 25781 -> 25743 bytes .../__pycache__/templates.cpython-312.pyc | Bin 6816 -> 6816 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 600 -> 600 bytes .../__pycache__/audio_file.cpython-312.pyc | Bin 1705 -> 1701 bytes .../exam_assignment.cpython-312.pyc | Bin 1219 -> 1215 bytes .../__pycache__/exam_custom.cpython-312.pyc | Bin 1795 -> 1791 bytes .../exam_custom_section.cpython-312.pyc | Bin 1431 -> 1427 bytes .../exam_structure.cpython-312.pyc | Bin 1234 -> 1234 bytes .../__pycache__/exam_template.cpython-312.pyc | Bin 1819 -> 1815 bytes .../__pycache__/passage.cpython-312.pyc | Bin 2385 -> 2374 bytes .../__pycache__/question.cpython-312.pyc | Bin 2946 -> 2942 bytes .../models/__pycache__/rubric.cpython-312.pyc | Bin 1028 -> 1024 bytes .../__pycache__/speaking_card.cpython-312.pyc | Bin 1623 -> 1619 bytes .../writing_prompt.cpython-312.pyc | Bin 1730 -> 1726 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 264 -> 260 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 254 -> 250 bytes .../ielts_standards_check.cpython-312.pyc | Bin 1384 -> 1380 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 302 -> 298 bytes .../__pycache__/content_gate.cpython-312.pyc | Bin 1824 -> 1820 bytes .../quality_checker.cpython-312.pyc | Bin 6835 -> 6815 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 229 -> 225 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 238 -> 234 bytes .../__pycache__/resource.cpython-312.pyc | Bin 4187 -> 4181 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 294 -> 290 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 313 -> 309 bytes .../__pycache__/exam_session.cpython-312.pyc | Bin 19088 -> 20382 bytes .../__pycache__/grading.cpython-312.pyc | Bin 17953 -> 19214 bytes .../__pycache__/score_release.cpython-312.pyc | Bin 6703 -> 6694 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 382 -> 378 bytes .../__pycache__/feedback.cpython-312.pyc | Bin 1154 -> 1150 bytes .../models/__pycache__/score.cpython-312.pyc | Bin 1384 -> 1380 bytes .../student_answer.cpython-312.pyc | Bin 1161 -> 1157 bytes .../student_attempt.cpython-312.pyc | Bin 2410 -> 2406 bytes .../student_progress.cpython-312.pyc | Bin 1544 -> 1540 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 265 -> 261 bytes .../speaking_evaluator.cpython-312.pyc | Bin 3871 -> 3871 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 263 -> 259 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 238 bytes .../__pycache__/taxonomy.cpython-312.pyc | Bin 9562 -> 9533 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 337 -> 333 bytes .../models/__pycache__/domain.cpython-312.pyc | Bin 1657 -> 1653 bytes .../learning_objective.cpython-312.pyc | Bin 1801 -> 1797 bytes .../__pycache__/subject.cpython-312.pyc | Bin 1528 -> 1524 bytes .../models/__pycache__/topic.cpython-312.pyc | Bin 1690 -> 1686 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 973 -> 973 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 232 -> 232 bytes .../__pycache__/embedding.cpython-312.pyc | Bin 6331 -> 6331 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 273 -> 273 bytes .../embedding_service.cpython-312.pyc | Bin 5606 -> 5606 bytes .../__pycache__/indexer.cpython-312.pyc | Bin 4449 -> 4449 bytes 118 files changed, 58 insertions(+), 2 deletions(-) diff --git a/custom_addons/encoach_adaptive/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_adaptive/__pycache__/__init__.cpython-312.pyc index 36d80de197f8128de74cdd3bbb14c4d8012ace25..5d9f30a972d3b2bc25cb22e760047c65ab3a9019 100644 GIT binary patch delta 40 vcmZ3^w3vzeG%qg~0}vcnyfu-#pD}jgY;E?W#N_PMyp)L-wHa?s{Hp~3@s17J delta 44 zcmZ3?w490iG%qg~0}%ArU!BO^&zLxIwl;TOYI%G?QGQlxa>>NA+Kj&@{?q~hF`*Ch diff --git a/custom_addons/encoach_adaptive/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_adaptive/controllers/__pycache__/__init__.cpython-312.pyc index 427f972713c17f782f38db68b6cd7617a7e91e02..754c202f998bfe95f6e8175e5e282cb05f93aba1 100644 GIT binary patch delta 40 vcmeyw_>PhLG%qg~0}vcnyfu+KgfVksf;M|nVsdtBUdqI2=8U%{o>Kt;{u>RT delta 44 zcmaFI_=%DGG%qg~0}%ArU!BMu!k9ZTL7O`-wLHF{C_gJTxn$xbbH-m2PpJR^KGqMp diff --git a/custom_addons/encoach_adaptive/controllers/__pycache__/adaptive.cpython-312.pyc b/custom_addons/encoach_adaptive/controllers/__pycache__/adaptive.cpython-312.pyc index c635214f91355c84120c3a538d382d3dfc2c4693..e77d7704dc024fb5a981a664b7512b7e381b0703 100644 GIT binary patch delta 3292 zcmb7`eN0=|6~N#1v!88jF!+N2Ho*^@5S#B1!e>H0XaZ5vl$ds*G$Ss4aZJD__dW7K zpGQtntB&8=i+)swqRZ= zCfh0;^_JAiiXAQKRBuoCNv6>_Gi4o38qE)%6-5zy#BtMkgVny3%#yQc4x%&%b~#hq zC2Q|p54)xJAj#q!=*g#2$Peq1?d0uDw}IY!E5Y}0_C-T#Z*|Xwo~G5p=HL1ap$@WKJOJVtrHK((waFXz_jmr9K(Rn+zE{ zQHGZ~5b4n|rnu#S851Fq|GYbss&%W=g7!5yg7mbB)I%nPG z<5jn7CTi|v-`e~o%jD)=Zu<9QJ+*(etO9)zp#phmI>6OY0T+{f=0Q|IerK*KE!qO2DZv(sSfEK_Gc*8b;6HzRPV)yZI-=H8W zXaI+Z(Y4m|3@n=?LQhPLCE|1;q98$ZQmxlZnq4{Me%eO!i?l~*LQD-L=*uIOmd35~ zIi5?F^Omvg7i?$S9^`w+a_9J}X})T_bcS!9$=`bR*_FzY8Gg$gziXP`HD#IMJ7)5q zCm&dfhdl*n_uRMTd{*cmvHdx>aAezpj&%he6qmd=ba`l;zg<32{-+JCAGORBw~bmK zaZJNbbalry>#V=#Zq>-%2VUQ!#Upym(xZCJuzdDN+k%O4`RAO$X=m{MGy5+ZMq}5? zrq|Zq@lCJYeCOC~&bE68y1rs{uIzAzpLkcl-;a@LyP2DyKA2j3cGe&hGGnsmQ4wlMVJuF2h6Y`E)VL0*SIE>`8BxviMJ zTODXCWT!lc%2R~~%Ass>EZ=qIbE`pzgJeF-UkFX4)&ed935FqV06?GN00lHaAuff- za=-=(5k{TYi@l(zp%|)B`=G#MBo>Dg4G^!RIvYbD<66Laz!pF!>35W&PIAGqi;III zK^{7M!#k-MC{Wl~T*6hLhHk*S0IdKsU=IKaS1aLmkoE&YfDXX(fW3eh00#gS0BA{k z5b!-fC%^-c0K)5q>cbbhkJGpY|PN6D(ODF$`$C}t_vFNjjOe?Tj)AX)Hs zp=z>+cXMh*HZ4}9iM++HnIBk^TAJS)h6mX7wQrLlhJ?ZgX zG4N0d*AZ@l1+|4-AgKvH22vxLUwhHK>5EDR4#$sn)484)#65JX>-%D&q;-l~3~IaB;A@uvV}Q#5_`9c7)Bjf%ijn@1 z&>t?L3}2xx6g@PLVqV$-R=35$wuFeh;fN{3iLlV#KcoGENup1mLHDNx&_@&j3Fs?^G6Q^ zHF2sZHQw)bw`yf@D@Ms}`eDTs5+o@WkBW*(G%t!Y+NP>DA>`AVn0@>QBUNQD1qEVVs{5EN6eA#^!Y@u2eb5xM_&^3CbpMbK9eB4-$rpZEM Wi>uv$D#!Hi*)H3@VnD`))Z%~nK>}0& delta 2463 zcmb7_du&s66vywcz4x|VUt{YYWsmOeT}H>oUTg%0?15l_=>{^#gwlK0b*%09-EKV6 z!9oBZQG@#>2!TWp&cJ$Yqp3T{BT9}1M|qIe6DUF zoqUPX$vr;JE+${D5*7=FsBR#O1@93YCZnGlHBrwz@JJRvlC84synRw1&p(_#>h4OIn-F>ZQOH_1(@B*)B~?B&#h%P4Np566+e z&BG|01TEDT{h$)kL{;%(Uq3l#k({D;Xh;dkcoB`mITRWn@&*-LPRgte$V#?Y%NO9q zuvi1A1Jpy9NmhITH4qM|8j>}ns8;GF|5#U<32n?6ciUKIsv>VXoutp!)bdMS!AZwN z&Z(R;&zyE$ks79@hL0^XQrk>k`-|(YJz~*3BehM;Y5f1HYZx`cmGT!J5sBpe7ckUZS`%9+*ggJ_Imv#ox8nS zf2jh2T`jcN$8Mx%3%Z+#pv+>)10_M_7>*DZ0Tuu%DE8=jddcRLXt`Uj@p3q%;4bQ2 zNAFT-@gX(h4fzzh67WSdyC7puoBP$$OUWz_yC|6ECN~qZGd)wfx?}Jp9Fg~Aihno zo&v0)(1amxq+iA91KjP#0TlwYP`AwN8$p(u=EI(#QR}>xF1X)h9WiK4|xYw z`~rPiL#igS(o}p1vULCski(^2XfpO|>1ja%J)A{&AuO;-$pDLW`B|_k$k~Nkt)LaR zA+ClNlIhtjg8262lBvoJ@~X#}%QTSv@c6K*kCQ1+BRWEEdFJm+sDRA|{2k#p07n7G z04V?_qyMJ|%`k++eStv*AEy~K9wtRIVMPrOW1phpBh;IwiP#(3uE?{qgQ+ZzRC>{L z>~7@&zJkrh>om?^!>(J+Fk1Aw-i-ItFMl7qerv`D$wbZJVkYM^bOE0QoC8b(&I8^B zyhnO!3*(wdOLRx$hgAi~UooslEEB8u@#&JPL44rF@jm@w&Dg0#B7u-!)r=~+S8GHa zM5tShP;7mj%q#D}-X;L-ZG69QI`NO)fM%kj6^QKK5|HQQkUXAbH{8nNn zV2clyPkc?qUCA>+bkfpi2Lav*8owzAhsylj4OuHi>(L=_TyJO!kTZHU`G(s~BhW&opSo{*PHg7{G n$WXIG{2ZQbBQG~sqRZrBb8E(49#x&>C+w%}e{o>rLK^WemxnLu diff --git a/custom_addons/encoach_adaptive/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_adaptive/models/__pycache__/__init__.cpython-312.pyc index 09915cee70c66658261acbe0cd50b8d50f86023c..76ca1361ab556aacb5223d807c1df475bcba92cd 100644 GIT binary patch delta 41 wcmX@ew3mtdG%qg~0}vcnyfu+~5o5~4b=vGniOJcic_|a07%|?OEY7F}00}=0asU7T delta 45 zcmdnXbdZVrG%qg~0}!-4y*`n95o5;0b=ur{spatnMfq8&$t4pX7%~2uEX=3{09Y0e A=l}o! diff --git a/custom_addons/encoach_adaptive/models/__pycache__/adaptive_event.cpython-312.pyc b/custom_addons/encoach_adaptive/models/__pycache__/adaptive_event.cpython-312.pyc index 3e181ac6b75a8be2069cd607a8b8273cd0e18217..e32b41c6dc2cf8d9e941fbb85922c71bf2906e28 100644 GIT binary patch delta 45 zcmZqUZsO)X&CAQh00hSsZ*Anh#mtyB`5Ch|ds1R@c4}VAW*HV!M#fu{gIG-fCOi#S delta 49 zcmZqTZsX=Y&CAQh00b>huW#hO#mtyD`5Ch|cV23Fd_hruR%&v|W(gKkM#f*0{a8%^ Dd#?}8 diff --git a/custom_addons/encoach_adaptive/models/__pycache__/adaptive_path.cpython-312.pyc b/custom_addons/encoach_adaptive/models/__pycache__/adaptive_path.cpython-312.pyc index ac5b845b96b1c589a05265ddaf918df64bd213bf..08b3e55e5e59e3e44a8720abc01f2321fd04d972 100644 GIT binary patch delta 44 zcmX@XafE~WG%qg~0}vcnytR@0853jX`95q*{OLclQo!MGv1mk!eRmdHChf! delta 48 zcmX@Yae{;UG%qg~0}!-4y}ptA853jfg9y4R^`95q*{OLcn;$T*XJWiHc>bcTuhG%qg~0}vcnyfu+~J!9I$-P-I)iOJcic_|Y=nlRp)tj4GX01(~{$^ZZW delta 45 zcmX@Zbb*QcG%qg~0}!-4y*`n9J!96y-P+uFspatnMfq8&$t4rtnlS#Fti-4V0AQUE AKmY&$ diff --git a/custom_addons/encoach_adaptive/services/__pycache__/adaptive_engine.cpython-312.pyc b/custom_addons/encoach_adaptive/services/__pycache__/adaptive_engine.cpython-312.pyc index 4b4c0fc6427aee56361c9867c23cd79ed913a997..183ebe53b1797ae64cea8211273f8f9e8c0dc078 100644 GIT binary patch delta 129 zcmV-{0Dk|qD5oe3%MA?*00000$06FW3&;ckZIjdlD+gj>V{2t@WU~qd+y?<$v*!${ z0YCE!02d>W0@x4|mk5yvm?)r0&>1e(5HIip02d?S4;$DUCy)r(5EqvYkq)SR%wy0} jUeiur(H~&c5MkpJ8k5-$E&~7*8?y=zG diff --git a/custom_addons/encoach_adaptive/services/__pycache__/alert_service.cpython-312.pyc b/custom_addons/encoach_adaptive/services/__pycache__/alert_service.cpython-312.pyc index 698c75aea74c6a53d670ec6ef498997fe85bc29d..0197a45ccb25bdf6d286472e4bf632c3828aad2b 100644 GIT binary patch delta 80 zcmZ24Jy)9hG%qg~0}vcnytR>gHYa2D`95q*{OLclkaj?GOAAw=c;CYBCb67 kHkTjs9SPaZM%=-S91N0jA4M4?R3`WHTxYyBIi1%70Nzm;zyJUM delta 98 zcmbO$y-Ufsw&o0Bnr@^VgX?!46U_=2MRtkmR^$u~JG8BHe#b5(Ob x5Lf=ppuy?MIQb%%ALk7T+0P7eyq=7kmAHc$xj?LsqF~utp6iUiCWrER006|O9hv|D diff --git a/custom_addons/encoach_adaptive/services/__pycache__/style_matcher.cpython-312.pyc b/custom_addons/encoach_adaptive/services/__pycache__/style_matcher.cpython-312.pyc index 7e93ce73fdeb0d751edb291df8c1c864acadc37a..ae9220fd0388532357e12f3b9a03b27c08d16fa5 100644 GIT binary patch delta 122 zcmX>guv>upG%qg~0}vcnytR>gGBacL`95q*{OLcldm#cGTxfZ&tl6cKG~N= zocW@D$mUEI8zy5Ppq2)PFKi6by4R%)E=n0}kUJoBS<0n@|E8S!Wg*v@nKJ}e7_K*4 aX|^H$lD5kv!x@>Iud}f+0!_Qeo&*5#aVSIp delta 125 zcmdlja6o|jG%qg~0}$M4xw?^iGBacT{UvjeKf__K?!{%fb8zx5Y$qU#dC2q*6UlVejA-KYD dz1d2$4e^(>T_zb`5OUpoiH(gBXxL5mBmkZxEgt{? diff --git a/custom_addons/encoach_ai/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_ai/__pycache__/__init__.cpython-312.pyc index d3678e69b5c8896449c850eab371840478c1ce06..70c5028d9d3fb066b302a24ca442fbf9b00c0fec 100644 GIT binary patch delta 19 ZcmbQsG?$6%G%qg~0}x~=ZR8SW1OO@V1Cam# delta 19 ZcmbQsG?$6%G%qg~0}z}Q-N+@(2mmY&1L*(& diff --git a/custom_addons/encoach_ai/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_ai/controllers/__pycache__/__init__.cpython-312.pyc index 6f97ccefe94abdc27f5bb3a15baec4add22a64ae..57a3d7af2fca161cded6552627a5fc99a6ca7aa5 100644 GIT binary patch delta 19 ZcmdnXw3mtNG%qg~0}x~=ZR9d$1OP6v1MvU= delta 19 ZcmdnXw3mtNG%qg~0}z}Q-N?CL1w{Y= diff --git a/custom_addons/encoach_ai/controllers/__pycache__/media_controller.cpython-312.pyc b/custom_addons/encoach_ai/controllers/__pycache__/media_controller.cpython-312.pyc index 1b7a5d79dcce0076c6116b36acf4d02dd1f8b542..ef3a23f4bbf56f8a8d108f0929712a0e5565d6ce 100644 GIT binary patch delta 199 zcmewybKi~cG%qg~0}zPpxs{nAxsmTTGgBAiW^R@)MwUu(O^MBdZ2QGF+p5Ph3TiUm z;`J{`&2#h&PAw|SOitZAU&Dz}^%h%Va!F=>-Yu@&#ESTm{Or`c;vz?&iAC-}LX*2l z3`k8rt6<2OIhjk#nIjX(y~UK6IXO%#jIf>RXGFnYYnVvr}|0@HCT_gZB3;@ObJF@@) delta 2588 zcmZ`)T}&HS7QQp%u|56=8$0IDKLpx=YzR$A(hrMH< zC1#yO)fVl`7R>{TgcOh}K}w`j@lvUknr*6X)zwONoeF2fYPHht!@il)m8$k-?;T^4 zW;a*z@tJ$R^KX5D;ENPO|@;9~z+vn#U-}-M4J8B^#`L0_S?Gj<4TZVn6ksZEP1NrS{2$5ECcF zWU5`66ong7a_nbQlL=XXF{&JOfSl&E+U_M(oQaEECo_lkRK!U*C*5ZI1gZAu9^Bq>a!@43%iyLA_;L znv0t%E)@mZq>9%w5O&Cx;${GN2E+lK<3IUv7UujDj0^Q3r^psP_=r;fabC%y)BK!X{)C_o&c>~N)e9cvK z0ehqKSj^h5%0XcYN^)>iN{FbN7|847Da~gU+QHjY&R5Y7BEg~V2h>l>G zW*!wqI3mPupjQZpi^&s{2{9!?p4BWVBqU2w&;+)kBo?nDnW$zgX1$e^rA`ly3iu?D zr**S_N^}te`6@&@9J#U3SaMng9VZ)3vSC1?0JU~?)f{|orgZM8QaU)22&#^tD#eV5 z+EId42LjGaf|wj*NPuFrJa))KoURbjPlOE%-ijKDeiaMNqThOy)KS)r;L6^uuqB_g@qovE34XC%>{!HoNHu0;$!+Z-A4PNe5 zYR4bk_8-alk8Jy2$oXH`_Mgo8Pj1fS{paQ{KXy0l_?lN{Hl5j)R~|IweZ5&%Z^7Sm zH?S1Q`&;KP|IPN=WAEYjuB{EP4(Gic^A`&wT3gQFwto46A?t6;`+Mdu|I0S`xGK}Q zJahNv(#?ET+k98SkcBioBR?$G+RPm~88A5Z7PyjcIM%!BNtkk&ks{r|GbsOa`u^AtE7a~l%g(Fc}-v8d)}v3 zwZrJ~{FFw~5~fNMrpj76&Zz@NFAWW<-PovhR(rZenK7F1=Y7)#gDb*oj!84<^_0Ez zgvp1Alh^&!dXrLU3P5w3AslPKplU*|?M$3B<5LUOV*CHukNZefnI!(`K+CeB%r6me zkR4i~S*m;$bYeSHj*f}Vh3TqN=})nQmm;9TM7FE54lx;%h1mE}K{}d{$9P6F3bB-w zk&_zrGMd3*HA@W7W=f1sNf6z_8~?^P3uayWyLf2CAjCYw(;AzQCZv?c$_R=GO=6f% zD7-lkkUcCU1y1mKJO)dAS8{6OB7ISTw_QTgfU7X zY5ep%Vz)j~j>bufJSw9J9FyEI&VMlX?0KnQ9@7|Hi$eH_4DZvktE7yikM@VR)KtqD zt9*k68D1B6X2(;vcxBt;%Z{s%jdj&!P8l&39THz zZ~DM`&-#J$o-^w?Rb-jA>Y@?U)@8#diYDM|-2;s87YAZFLiU^v$HlV zA9CLAF!L}((cR&#*XpAbi*8`Z))x(3SS24o)fH$kp=qq4gc=QWbA%_+O=5XJ@N4Qr zl?#4CRjFSDN33(i@&_XRsPdr@b!Y2J$V^3!ZB9Sv&HidQJ9s@C8-K(~yR?semD*!~ zF-{eAy?6o`UAG3`8M-}`b?xJavV+6fk+DbY_%2<=o*{4v!?9X?UcD6lIkl|56Yipx f)UU!XQ}3zfrmmU^nmYY1T$C5&{{W&R7cS<%A|RCX diff --git a/custom_addons/encoach_ai/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_ai/models/__pycache__/__init__.cpython-312.pyc index 4664ced071288e7114033e195e8ad22ea02297fe..baa2bf0b222c7ae171683e54acaf75c223ef72ae 100644 GIT binary patch delta 18 YcmZo+YGL9!&CAQh00bFI6S;l?03($IB>(^b delta 18 YcmZo+YGL9!&CAQh00d`6CvyD)03})keEcO4gfKT1XTb4 diff --git a/custom_addons/encoach_ai/models/__pycache__/ai_settings.cpython-312.pyc b/custom_addons/encoach_ai/models/__pycache__/ai_settings.cpython-312.pyc index 409a5e145ce883117221907808da7124a1877073..5e7e4cdb6d358c3e294b7e2154f38476513e4756 100644 GIT binary patch delta 19 ZcmaDM{6d)PG%qg~0}x~=ZREPg2>>`<1snhX delta 19 ZcmaDM{6d)PG%qg~0}z}Q-N<#16977T1#|!a diff --git a/custom_addons/encoach_ai/services/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_ai/services/__pycache__/__init__.cpython-312.pyc index 463c1c4cccade01784c4fa652a3f6eeb26c94f1c..b46445b64f7b1edc7abc4e489320c7378fde7bfa 100644 GIT binary patch delta 19 ZcmdnRvWtc5G%qg~0}x~=ZR9dw0stac3jjC51jzsZ diff --git a/custom_addons/encoach_ai/services/__pycache__/elai_service.cpython-312.pyc b/custom_addons/encoach_ai/services/__pycache__/elai_service.cpython-312.pyc index 5630477d8c12543147fe7c5d8898fae89d306bd6..01837d983a4e3bfad49ac38fe8d386c0c2772fd8 100644 GIT binary patch delta 3984 zcma(UTWlN0@t!O>NV*tjG^pk!06WfhcG0nW9YHF?&bZ zVyVzbT~uib#OeibfGCCYRRswrJJ4IotfR8nVlJ4?=J1@{DeCWJP-)I>oh_%nPf&r&j%I{EVBSMkrKul|t1wnXe7 zX3mK@2}?07C$nh@=c>!=$7MxX8XL96=fnj`Q#*54~ddKa5G5csbWJI~HhA=4B;&t_+tl%cVH5Nc562Y}bitDCZj8*P9 zU2inA_4G5wzqvl1LF^i9bn>kRNigUSfz40;s)o1|7aS(vzNMKpg zWy>{une3BNl_+oTfp?N+Aq|U4VhQ(=5iet`VvPqJE@5B8E$pBNj4okeWZQ{gjiNaC z$Wp>f12PG&mZujf+?J>3StHH{Mdl{CAvDC+8xcpX zameX(D1KPy4VrH#EHioLu^3=|LTH{T3xy5sm$Al9Qc+r)Oo*bTLBA%VSS1ejhkA1mFtwslV>6(e?VjHV!=uw%&*qgMFshR~p>? zfvY$eUrD{8zNWsFxbJJbFgN-iK2hfbWUQTlH0!&M(J<_Fx&zFOb)Mk_HcZ17$A+I5_b$6!l)mkv6g6*$>h1OIP8TaD3Sy9Rvt`6H6YD1Ur$8v ztraZP_B2&xrKKHpR5(%R8Z$|?Q;*-*e1q{a8*Fc^9OQ8inPPoeL|w~X7nK+1n+Y8q zA-nGCMm-JGvRCngq_zqN(6cl(O(|R@tLPn-wfSz_?9sfK_ueG_0}XER9Tf50wK(SCZ<^A#MT6q{Dn}kBG4!bhy!|#WS5aDCe3e1n%i=5ICHnuabaYw# zF30>iFOPbz46q6RDoT^Bdv{*u27=UjI9eXAxv|q5B2 zj~z?yvfKTGslDLuQ5Q&G%E%U%mM`cQtE(A{yO2t!Er*tXq zF-11^+UPh|N$rC11kgYNl$1qDvjj+Us+5?6eKyEa%Z#n<({9a59UXO(Faep|F#ukb$Zvr6i+_<+Q2DGFibp0F0%+ z0BdC10kw;)C&fiBNU1_vM*Ab3TI6q6-h>Vh0%4Ag;a!Q#QYQdjt+)2^ncAtxCvZ^k?uf!pb2iOf42pYH{aPw4{-g zPwJG%4U=e!=Z*h(n}id9YS$T~)fX<*H9n~8E7tX`Pv5V5cEwu?x8FEc4EL^hO0{G6 ze*EC{`QqvGX5xZ5ck%w|v^ln5E-0p&`;wwE^buyW+-*?QQD%gJZj?F6JR*~)$VjEf zNH@kzkS;vQthhHERHy;Kj>b}RM=265l$v&~KU-|tRch@nb@qK0=`FPl+;SG%_HFWP zOL)Ugb@Z0H27n_vSnBC7bw^7*gQcDQ_J6Dtg_*(4pu4GggB3d(HifE|@Mdjebzp;S zuJvskpu#QJPHY~b+k);D;frH5PsI!~8^p_QW>4C@V*Y8$TSSMv{Qdy2I^>ox1`W^HVh`|4q^af_n8p--!7HdyGt z{)ZTR|41P7AGv6PyW{&|aE}v#;a=6jQ9t{!pC7Hc zea4@r?Vy@-ZoljS`~%_~2M8#?*sO9sUkPWnybV)eBEDO4ab2wE2EeN7vSiiS53 zE7TEol0M7tle|j%A>$E(%@gob0Pj(Dg;)0ODl$s|Vb(~Yd6oK(VyK9ViumV%!*2q3 z-Vn&JN=7cY$jS11{~4jol1T^)FK1;<*X;OXc}5p9D%S0gQI0ly2&sM0*9m6tL7t}N zd~QKS*|dBBUxOhOMR0{xV< ZI`p+x4ZHn{i+iXKJwiOhepo{T{4dkn{kH%B delta 1761 zcmaJ>OKclO7@pbpuDy<9=lyUJ+QfAlk~VE=U8+8l(v&IZ_N2ePzzBBl5IXuZEVSC&p$`VegL|sBDjmShJIx&_- z5?B&aItg;AF()TNE9V6hV})hJTR6J%R7_&5vwpd!1tNE4r*O&2(^@{aMGl>voixDm zavV3Z_vO>AJSmjH9Q*-B@NM+7Kjl7ATozcL(uD;!s;rck^IW`a+O$^O!wzWED_4wDxS@`# zXcTPq;WNiZCXXLGH%yz^qd+X`l|-VJU9_P|-flCvQyJt7dxTB4w6gKwAU4^}U{k== z)0fjunoed3yAzBBbZ+ET#u3=-O+B%)SjJ^x7TW@Jw=5BHS)9T|S{4>$M`m9eZR~GD zJFuYW$l0p!MM(QU!_j=fhnzki31zvAE(X}oLQ8}w_td+ayjW1n>O~X83PyZd15;^1 zDM!J-95~8cvMa#;(=_=Lk&=;r&6UA35=%N5eZ6`WmkHni#!h{DZ}BC*wuBM&1-SA$0%*ELrZ)X}{bi+>;6`+0J$ zbH@`^s*O}cr7`qG)}zLC^=TanMcy61G5*eL*M*8;vV6mP?5oB@txeqVm&f;>=tU2D z^`ZUZgFQ!v2E}g%<)Qs6Lrpon2=$-WHtRV+cR)-D0Pi}grTnFQVJ7d2C7Po(T<&V5 zMAP0amgsTckdDIaEI=QJgjBuYo*v3TPjj$=>5#jZxf`CcoJls&(u*fps^wM$-YVW{ z)h=Z+mTiwF0_?Ar{>30{2Yyyt1dX9^q3L0OF%EYSg}v2!!Wk4G%s(62vxI(-&aF#= zd=jr~s$9Pwkz`{dXvnqeO^V!F38UTn?w?(~ka~(b<;cbm4$J%z^W7{a0`xpz@OP>( zHI>az(G#%JdGKerfInBSdfG`)Th!I4^;XHU9or+D8yJ}`7N|1}uUeI8UVsgU)#<-zbg|M8|w)0S;a(JbRA(_zZR~$HUdWVf7no_ PkEH?hg_;!a3_010eLPQ1` diff --git a/custom_addons/encoach_ai/services/__pycache__/polly_service.cpython-312.pyc b/custom_addons/encoach_ai/services/__pycache__/polly_service.cpython-312.pyc index 27f98d1fb6f19f97518e822a7be363f1b6da300f..800af51f8ca188a49679fa8f57540498812aeadc 100644 GIT binary patch delta 19 YcmZosZ&Bwu&CAQh00bFI8@Z~40W3EJA^-pY delta 19 ZcmZosZ&Bwu&CAQh00d`6H*!@80{|{m1bP4f diff --git a/custom_addons/encoach_ai/services/__pycache__/whisper_service.cpython-312.pyc b/custom_addons/encoach_ai/services/__pycache__/whisper_service.cpython-312.pyc index 31a17369047cc6a93f80adcdf0e2b7f0d09003f9..3f3da18c13263fad66e2215485506b4442627379 100644 GIT binary patch delta 19 ZcmZ3ivsj1gG%qg~0}x~=ZRC;^0{}371PlNG delta 19 ZcmZ3ivsj1gG%qg~0}z}Q-N+>=1^_af1Y`gJ diff --git a/custom_addons/encoach_ai/services/elai_service.py b/custom_addons/encoach_ai/services/elai_service.py index bba973d1..2a6c1bfa 100644 --- a/custom_addons/encoach_ai/services/elai_service.py +++ b/custom_addons/encoach_ai/services/elai_service.py @@ -12,6 +12,14 @@ except ImportError: ELAI_BASE = "https://apis.elai.io/api/v1" +AVATAR_PRESETS = { + "vadim": {"code": "vadim.casual", "gender": "male", "voice": "en-GB-RyanNeural"}, + "gia": {"code": "gia.casual", "gender": "female", "voice": "en-US-AriaNeural"}, + "zara": {"code": "zara.regular", "gender": "female", "voice": "en-US-JennyNeural"}, + "mason": {"code": "mason.casual", "gender": "male", "voice": "en-US-GuyNeural"}, + "default": {"code": "gia.casual", "gender": "female", "voice": "en-US-AriaNeural"}, +} + class ElaiService: """Generate avatar videos for listening exercises and instructional content.""" @@ -33,6 +41,7 @@ class ElaiService: return { "Authorization": f"Bearer {self._get_token()}", "Content-Type": "application/json", + "Accept": "application/json", } def _log(self, action, latency, status="success", error=None): @@ -47,6 +56,14 @@ class ElaiService: except Exception: pass + def _resolve_avatar(self, avatar_id): + if not avatar_id or avatar_id == "default": + return AVATAR_PRESETS["default"] + key = avatar_id.split(".")[0].lower() if "." in avatar_id else avatar_id.lower() + if key in AVATAR_PRESETS: + return AVATAR_PRESETS[key] + return {"code": avatar_id, "gender": "female", "voice": "en-US-AriaNeural"} + def list_avatars(self): """List available ELAI avatars.""" if not _requests: @@ -63,15 +80,45 @@ class ElaiService: """ if not _requests: raise RuntimeError("requests package not installed") + + avatar_preset = self._resolve_avatar(avatar_id) + avatar_code = avatar_preset["code"] + avatar_src = f"https://elai-avatars.s3.us-east-2.amazonaws.com/common/{avatar_code.replace('.', '/')}/{avatar_code.replace('.', '_')}.png" + payload = { "name": title, "slides": [ { + "id": 1, "speech": script, - "avatar": avatar_id or "default", - "language": language, + "language": "English", + "voice": avatar_preset["voice"], + "voiceType": "text", + "voiceProvider": "azure", + "avatar": { + "code": avatar_code, + "gender": avatar_preset["gender"], + }, + "canvas": { + "version": "4.4.0", + "background": "#ffffff", + "objects": [ + { + "type": "avatar", + "left": 151.5, + "top": 36, + "fill": "#4868FF", + "scaleX": 0.3, + "scaleY": 0.3, + "height": 1080, + "width": 1080, + "src": avatar_src, + } + ], + }, } ], + "tags": ["encoach"], } t0 = time.time() try: @@ -85,6 +132,15 @@ class ElaiService: data = resp.json() self._log("create_video", int((time.time() - t0) * 1000)) return {"video_id": data.get("_id", data.get("id")), "status": data.get("status", "pending")} + except _requests.exceptions.HTTPError as exc: + body = "" + try: + body = exc.response.text[:500] + except Exception: + pass + _logger.error("ELAI create_video failed: %s — %s", exc, body) + self._log("create_video", int((time.time() - t0) * 1000), "error", f"{exc} | {body}") + raise RuntimeError(f"ELAI API error: {exc.response.status_code} — {body}") from exc except Exception as exc: self._log("create_video", int((time.time() - t0) * 1000), "error", str(exc)) raise diff --git a/custom_addons/encoach_ai_course/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_ai_course/__pycache__/__init__.cpython-312.pyc index 6ba89960614ceaab5abc405e7ebb05c0243bbbcc..9ba8752f378ac2c944cf8fc37500fbb52df00fe4 100644 GIT binary patch delta 40 vcmZ3%w1kQKG%qg~0}vcnyfu-#pD}LYY;E?W#N_PMyp)L-br^3={HFx~@%Rnj delta 44 zcmZ3&w1SEIG%qg~0}%ArU!BO^&zLlEwl;TOYI%G?QGQlxa>>NAI*h+2{?Y;fG8Yf{ diff --git a/custom_addons/encoach_ai_course/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_ai_course/controllers/__pycache__/__init__.cpython-312.pyc index 065e24cf2bc9e878ec88afea639616bb8d8d1e7c..8df858920e8bcb3b93ce69070275c88a64428053 100644 GIT binary patch delta 40 vcmeyu_<@o8G%qg~0}vcnyfu+Klrd{!qBeU{VsdtBUdqJj7L2zhUQhu5{{#)I delta 44 zcmeys_=S=CG%qg~0}%ArU!BMu%9uAXQJXt2wLHF{C_gJTxn$yG3&vj)&!_+ZKidz) diff --git a/custom_addons/encoach_ai_course/controllers/__pycache__/ai_course.cpython-312.pyc b/custom_addons/encoach_ai_course/controllers/__pycache__/ai_course.cpython-312.pyc index 0a3847401c06da1acfeb5774e3d0b6d036aec620..ed937d049d62d39dd6355fa95cd999e118db3bad 100644 GIT binary patch delta 21 bcmZqK$Jnxuk?S-sFBbz4+*I7i^(zhlNE`-@ delta 21 bcmZqK$Jnxuk?S-sFBbz4oD<#1^(zhlN1g_D diff --git a/custom_addons/encoach_ai_course/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_ai_course/models/__pycache__/__init__.cpython-312.pyc index eab880a68ddbc0dc5318b2cdde3669aeb0e51a55..df6dc7e05d08e42ff54fcd8f4f48ab2609819d06 100644 GIT binary patch delta 40 vcmZ3+w1|oOG%qg~0}vcnyfu-#lQDJTRBiU8#N_PMyp)NjjTvuE{I3oG@b?YX delta 44 zcmZ3)w2X=SG%qg~0}%ArU!BO^$(T8Dsy26CYI%G?QGQlxa>>Nw#*Duv{#FM7F!B%X diff --git a/custom_addons/encoach_ai_course/models/__pycache__/ai_generation_log.cpython-312.pyc b/custom_addons/encoach_ai_course/models/__pycache__/ai_generation_log.cpython-312.pyc index 0cc580c4be9acba804bd56274ac87ba10f93aeb1..67922e6fddfdf82a16910d4a94f912ac76bb0795 100644 GIT binary patch delta 45 zcmX@jbDW3!G%qg~0}vcnytR?LnT0WLazBeUds1R@c4}VA=A$fujEuJ?i?f*k05ts# A#sB~S delta 49 zcmX@kbDD?yG%qg~0}!-4y}psVnT4@vazBeUcV23Fd_hruR%&v|=7TJOjEuh~3$vL3 E0Ez$*JOBUy diff --git a/custom_addons/encoach_ai_course/models/__pycache__/ai_ielts_generation_log.cpython-312.pyc b/custom_addons/encoach_ai_course/models/__pycache__/ai_ielts_generation_log.cpython-312.pyc index f1ff610e95bdf0c2e1f0e366dc3357870db0ade1..8a76cedc39c5e4b91233b396b40766c1e6ff4156 100644 GIT binary patch delta 45 zcmcb{cZrYtG%qg~0}vcnytR=#i`95q*{OLco3)uz1Q>HBPY^O>z9wxs Y`IL|kGlPuPW+`ENCdONnqeK?~0RJ%+n*aa+ delta 79 zcmaE_{Y#tsG%qg~0}!-4y}ptAB_m_;gKMP~-`95q*{OLcn;BWPc^UmD>k4TyUlTT* X94Dm4%phX4xm{=*JL9dzc2bN0xH=P% delta 77 zcmdmLw$F_FG%qg~0}!-4y}prqKMP~w4^))dm@ fxGZe=iGhjJZgQxQ8Z(gITqm@Ro$=RVQz=FO+QJww diff --git a/custom_addons/encoach_api/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_api/__pycache__/__init__.cpython-312.pyc index a15491bd4f1250c491983f5cce67e8e31e4885e6..07779332f6249121b57f1ae6f70925bc77a7b2cc 100644 GIT binary patch delta 40 vcmaFD_<)i7G%qg~0}vcnyfu+KoH1fzvNn5CVsdtBUdqIoYK*rg9#8=Q_>K)- delta 44 zcmaFB_=J)BG%qg~0}!-4y*`mUoH1r%vNm^KYI%G?QGQlxa>>N0YK*@o?oj~%LxvC2 diff --git a/custom_addons/encoach_api/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_api/controllers/__pycache__/__init__.cpython-312.pyc index 6056dc00a5737180df4ffca60d015cba86e7a87d..a2e407a4e53ddacbbce139cabdf8dc4bac1cba47 100644 GIT binary patch delta 40 ucmZo=YGmR*&CAQh00hSsZ%yRRWK5Y@s?DC1n4F!Omojm+5#z0i_tXL4tql+W delta 44 zcmZoa+SE=>=u diff --git a/custom_addons/encoach_api/controllers/__pycache__/auth.cpython-312.pyc b/custom_addons/encoach_api/controllers/__pycache__/auth.cpython-312.pyc index 9c047dc667446e99713d37d344562880ad2e54fb..bf95456434c5bb25693171cb8533998bca065258 100644 GIT binary patch delta 131 zcmext^x25}G%qg~0}vcnytR@0D<@;ZWJWG+_N2t*?9{xJ&E{MZT#UCS2Z*?e2>})T zXka)Xa$N49+$G1D3&AlL9Ah@G5>aAgoH6;VsEo!e`OmD(5_}IOH6}QIU}lhzoL(}q jWI^Eau!Uh8f-VbK+>q4xz{y=79W^_avdI<`NSBRfhGz_CIbK{A1hq| diff --git a/custom_addons/encoach_api/controllers/__pycache__/base.cpython-312.pyc b/custom_addons/encoach_api/controllers/__pycache__/base.cpython-312.pyc index b84fd07ee301aa4a5cee9f91bb608577c3c94fac..2ae40704fd61bf439e57eaf0e01527951fdb2bbf 100644 GIT binary patch delta 113 zcmca?d(oErG%qg~0}vcnytR>g3ln3)`95q*{OLco4+wNvohYAT*YA^A^=p> zz;MOd_eA1F>wpV^p_i<~HXq=)B`l{5mbs~8e3{>5rTc=y2`tn3C-N^~yegoy!u{gr OEi&DVKrwpV^p%<;g8W=Y3;YG>j;&CAQh00jN@S0{28F(yu|)8@`gEsrlK%FjwoE}6JNoAKAgJL&)+X%9RA diff --git a/custom_addons/encoach_branding/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_branding/controllers/__pycache__/__init__.cpython-312.pyc index 10c5264a18f5e7e27767208b55e66c68fe55e659..24b2f10b542d8687c8749281da46aa2e7c3269dd 100644 GIT binary patch delta 40 vcmeyw_>PhLG%qg~0}vcnyfu+KgfVksf;M|nVsdtBUdqI2=8U%{o>Kt;{u>RT delta 44 zcmaFI_=%DGG%qg~0}%ArU!BMu!k9ZTL7O`-wLHF{C_gJTxn$xbbH-m2PpJR^KGqMp diff --git a/custom_addons/encoach_branding/controllers/__pycache__/branding.cpython-312.pyc b/custom_addons/encoach_branding/controllers/__pycache__/branding.cpython-312.pyc index 2d40721c199aefa346525a8ac6d6e15851dcbc27..89855500a5a7dd782327f93297723aa71fb3107f 100644 GIT binary patch delta 132 zcmV-~0DJ%cP4Z0(%MA?*00000$06FW3up%cX_IsZD+gj>V{2t@WRt1~d;uDhCkTlH z+Z7#?xCl%G02Usz2MK@%0k)Hf53B>*79*295XA!k7bLR;5kCk49g{>EiXQO_04Xrj m6FsR1pfRv9xCF8}kU@}im_dz(PG%qg~0}vcnyfu+KgfV4ef;M|nVsdtBUdqI2MvS*6o>Tz<{0R+* delta 44 zcmaFK_?D6TG%qg~0}!-4y*`mUgfU}cf;M+vYI%G?QGQlxa>>L=MvT8E9#sJVM_~{B diff --git a/custom_addons/encoach_branding/models/__pycache__/branding.cpython-312.pyc b/custom_addons/encoach_branding/models/__pycache__/branding.cpython-312.pyc index 83af282a05bbf7d1646e5e452da17ed731cba389..6a26093943e711a41a9884ce8eeada15f297c92f 100644 GIT binary patch delta 45 zcmaDU@>GQTG%qg~0}vcnytR@0JR4)m`95q*{OLcn+4gGnHg_QHsvw_07wcA A=>Px# delta 49 zcmaDV@=}ERG%qg~0}%ArU){)ko{ceM@@+P4?!46U_=2MRtkmR^&AjZ&%#6P#8*-Td E0F&Dg0ssI2 diff --git a/custom_addons/encoach_core/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_core/__pycache__/__init__.cpython-312.pyc index 35acb5d4b0ce2da761b79e75e31dc5acc63191e1..3cd359b3626add72750ecb51f0d80b0550354d3a 100644 GIT binary patch delta 40 vcmaFBc!!buG%qg~0}vcnyfu+Kh%s_voHlz>VsdtBUdqHN>WsH0?oj~%_I(XR delta 44 zcmcb^_<)i7G%qg~0}!-4y*`mUh%t6zoHln}YI%G?QGQlxa>>LA>Wsf8?oa^$K`{@y diff --git a/custom_addons/encoach_core/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_core/models/__pycache__/__init__.cpython-312.pyc index 9fce35a028ea0064494039d832d22f5f0b6765dd..bacbb9f0ad80509cfbb9cb1690516664b4bcf132 100644 GIT binary patch delta 44 zcmcb|e2ba;G%qg~0}vcnytR?rgpn~}vICAmzgnUvL&-Nds1R@c4}VA=6vP=P5{=k3i$v4 delta 43 xcmdljxnGj|G%qg~0}$jJUfIa4%gmTC*^*hCJ1@07zMv>SD>b=fb2f7TCjbKP42J*! diff --git a/custom_addons/encoach_core/models/__pycache__/encoach_entity.cpython-312.pyc b/custom_addons/encoach_core/models/__pycache__/encoach_entity.cpython-312.pyc index a246b098da5cfbe85f3cc0268ffa459b80c6b267..4fbc6f211ab1da0cc815fef7b88f1bcba249ef34 100644 GIT binary patch delta 82 zcmeB^ZRc!%>H kS%n3{%VieIT$a`AaPIZ{$jl%ju~~}UhJ*3ejBV{2t@WV3z;>;?e~lWPu- zEt((m1p^rl;Tb59LGS|r7#Wvzk#wL@r&gg>v{bkuzb3gRvs}{|L9=cmwg3PC delta 113 zcmaE<@SD>b=fa~1m=Hb%C|>3sbL zGv&XrGE4G35E1>r%pf5-y<}p^g23fr3&XaA>`>gVwo`3$%w++mPs~6yA2=AS>?R-J R6Wi>_|BQ+8*JKSLM*wH*Cfxu4 diff --git a/custom_addons/encoach_core/models/__pycache__/entity_level_mapping.cpython-312.pyc b/custom_addons/encoach_core/models/__pycache__/entity_level_mapping.cpython-312.pyc index 171e3861f601fb64c15f2ba8ef42733cdb7769c5..f241efc88f13dcf4d5de4fc6b5e3a9a1d4e0d412 100644 GIT binary patch delta 44 zcmey#@s)%7G%qg~0}vcnytR>=pP4advNW?cds1R@c4}VAAq5R) delta 48 zcmey$@sor5G%qg~0}%ArU){*f&&*gbS(;g!J1@07zMv>SD>b=fvM=*z#$S^iSxf+B C0S|uw diff --git a/custom_addons/encoach_core/models/__pycache__/invite.cpython-312.pyc b/custom_addons/encoach_core/models/__pycache__/invite.cpython-312.pyc index 99216aaa7a521bae7fd36410d91ea5c8058595a4..8bc60a9184998b6163ca71513e8f04399e7fa48a 100644 GIT binary patch delta 39 tcmew_{9Bm&G%qg~0}vcnytR?Lg@rM0@&p!b_N2t*?9{xJ&Bs_QSpoI_3|s&J delta 43 xcmew@{9l;+G%qg~0}$jJUfIaq!orv|c>;?zcV23Fd_hruR%&v|=0hx&tNgAroWL`95q*{OLcn;$cAG64Ybv(Ws?!46U_=2MRtkmR^&G(r&nE)b)4blJr diff --git a/custom_addons/encoach_core/models/__pycache__/role.cpython-312.pyc b/custom_addons/encoach_core/models/__pycache__/role.cpython-312.pyc index 0b8d51fd2bf889904594ce38bc51b65af7bcb323..5b1311e10bdc87e481de09798ccda6ca335d3706 100644 GIT binary patch delta 39 ucmX@fbCiesG%qg~0}vcnytR>gGc#k%`95q*{OLco4+!LFaZGTU<`r) delta 43 xcmX@gbCQSqG%qg~0}$jJUfIaKnVB(R@_uG*?!46U_=2MRtkmR^%^#UVm;f8J4iEqU diff --git a/custom_addons/encoach_core/models/__pycache__/user_entity_rel.cpython-312.pyc b/custom_addons/encoach_core/models/__pycache__/user_entity_rel.cpython-312.pyc index 38f20051f344f520abe977fb2cab894353cdcd11..434ad2246c666db3db64af2c240ed33513c679f1 100644 GIT binary patch delta 39 tcmZ3@v7CeZG%qg~0}vcnytR@03KL`c`95q*{OLco5h$#83E$G3u*uW delta 43 xcmZ3^v6_SXG%qg~0}$jJUfIZfg^4kH@&hJq?!46U_=2MRtkmR^%|gtgi~tiY4EO*5 diff --git a/custom_addons/encoach_course_gen/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_course_gen/__pycache__/__init__.cpython-312.pyc index 072db1d1b06161198b14c95f082b7807517cd3f4..c33d262b56c8d3cf405a32377ab287ec31a094c4 100644 GIT binary patch delta 40 ucmeBVYGvX+&CAQh00hSsZ%yPbVvL_yr_G*}n4F!OmojmSF5|6SW?R&CAQh00jN@S0{28F(yx})8@`gEsrlK%FjwoE}6JNm+{xcd+GooRS!l0 diff --git a/custom_addons/encoach_course_gen/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_course_gen/controllers/__pycache__/__init__.cpython-312.pyc index 8aac14f96b7a102312ad9e985a3dc3ff3bf2c381..64698d439f11bfaf98591e3b31c9841c7dc2d37d 100644 GIT binary patch delta 40 vcmeyw_>PhLG%qg~0}vcnyfu+Kh%tL&oHlz>VsdtBUdqHNmW;P1o>Kt;{qYT+ delta 44 zcmaFI_=%DGG%qg~0}%ArU!BMu#F#%ZPMbR~wLHF{C_gJTxn$x5OU7RlPpJR^KBNz~ diff --git a/custom_addons/encoach_course_gen/controllers/__pycache__/course.cpython-312.pyc b/custom_addons/encoach_course_gen/controllers/__pycache__/course.cpython-312.pyc index d2baf7ba51045286d1e957e5d3b65cea1d4ddb17..7e925889c2c5e277481d458ed1644a127a10bcf0 100644 GIT binary patch delta 621 zcmXX?T}V@582-NVO+9YToVrcjiEX;G?O1mF_e`f_>e#_qDJA~3h517%2+@UsloAw1 zLc%v_LXcfVN|4G2p%A!TnIv&Gb5qy7;zdmqs=E%-bMZXzz8BBWha;FggsQJ)kMESIYRRw1PXTy?_kh}s=-djtN&IcdN-&y=9Rh!=D^ zqA4B8f(Q6vtrwQzaIGy<;)kTcA(_d~S}VMul6y@9sk=w&?TdBy6IR%w;57MFUjdn< z&NxTy*-Mw{C3;R3YJMZmi?JLwg@E2f+|D$ZcA5?>Jnm>bE|m4m2{>NjT?yV3L|gL~(5u&UTd}psOZsm#8o?=llhtPsIT7xKVsKouA4g{Dg^3l_l2L1SNTMtU=S={S0BT!()k9;DEm(=5L zzD@)z4Wy(!Kx@?J9^r~jAtHR4jJ5RP;LWGh7_DL@%>_nqR({h&AG z4oxn468V+u?PRK}SfP;br{rC47{Lf0@pqS=DnTAI)4Z3J{Zf1`&fQ&5N!rW1S!MDx ydCW;V$SK@o%rjS$S`$9;H^^5hz{F!=UJ@_ek%}@8SQvJRkq(+W~xc2-RB@ zr2_cPOzo|x3nlO-a!AV58y&gN_DFmrRHC@*FpsYfd^H8%+vkHz-aT{q z4*Nn~q=MD#vVItnDZ5VqN=k=x#-}pOtO03*A$H&RCI_ydXU^XwZz>jmTx&v)T;~Xp zJFYn;Z*vMjqi=<1+`U~O1{n)*R;C@bNk?tUQ7-^Oe+Hrm?YD|SMg{1aw7VhcZb-SC z#AG|1(Z|L3W$0C%OA!Oy$dwpilXXt0 zrSR%l=;`J9`jb7Euq^j&N+4pnMlZDU2AcpN<&8^tcj+?umW-s(bsnv8m)V6}_igFhQcbTD8?Yeo*jOQF3!xK(~j1bajrhS%7nX3e# z&>E04+(lrr55t`@cpZJ}>?L`lLjV%06xkwnLS!hyC{x9axS_TMqL-1VR1DZ3kwH?I zd)#uv``P!w_hm8}>W={w?S6udOLw>1tvGuK{=@(-Xv^p8eX|{j*2LseIDMk(h`S9q!v86kEsTexg=&0csg&sKHm$S+JGLis?39lQY9SXX4iu)tvtHo~9f- zsjN7XgSrV+lM$zc?Kofz*N}_5lQ;aV@G%qg~0}vcnytR=#l$kMaaw4-fds1R@c4}VA=IP9wjEuJ?FJv(T04${q AjQ{`u delta 49 zcmcc2d7YE{G%qg~0}%ArU){(Z%FI|aIgweLJ1@07zMv>SD>b=f^JHdDM#f*0=dzdq E0CUa{rT_o{ diff --git a/custom_addons/encoach_course_gen/models/__pycache__/course_module.cpython-312.pyc b/custom_addons/encoach_course_gen/models/__pycache__/course_module.cpython-312.pyc index 9af5bd4dd8a21fb20b419840b4d58a6f88866f16..93fd8726cbdf139cc54eba81713823dd72643fb4 100644 GIT binary patch delta 45 zcmX@jf1IEDG%qg~0}vcnytR@0EGuL7`95q*{OLcoB7#V85wU)p2}_p06-)T AU;qFB delta 49 zcmX@kf102BG%qg~0}!-4y}ptAEGuLFgGc#l6`95q*{OLco4+#aGBVzptjuZx0726Z ANdN!< delta 49 zcmcc2b)Ad*G%qg~0}%ArU){*PnVB(n@_uG*?!46U_=2MRtkmR^%^#U{85w^~mS;5q E0E^%dVgLXD diff --git a/custom_addons/encoach_exam_template/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_exam_template/__pycache__/__init__.cpython-312.pyc index 0f5d194e89d5b2ffebce892922feb8fff836da0c..ce34504a92397910c9662cc6389711e06aa2653c 100644 GIT binary patch delta 40 ucmeBS>R{qN&CAQh00hSsZ%yPbVoaJ?r_G*}n4F!OmojmS0pqQSPt^hBPz^i) delta 44 ycmeBR>S5wO&CAQh00jN@S0{28F{Vwd)8@`gEsrlK%FjwoE}6K&fbrMFhw1<#w+~eS diff --git a/custom_addons/encoach_exam_template/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_exam_template/controllers/__pycache__/__init__.cpython-312.pyc index b9b7615965ebc6fddd7ff841c54991cc85457b5c..a8186e1b8f0587ad64552ead2eebf79a7b236195 100644 GIT binary patch delta 19 ZcmaFB^ni)$G%qg~0}x~=ZR84L1OPMR1X=(9 delta 19 ZcmaFB^ni)$G%qg~0}z}O-N+Tj2mm$)1hW7D diff --git a/custom_addons/encoach_exam_template/controllers/__pycache__/custom_exam.cpython-312.pyc b/custom_addons/encoach_exam_template/controllers/__pycache__/custom_exam.cpython-312.pyc index 670cba11bdec4a8e49eb7b99003c9ec332603b02..bb455e7841618d6bf945a646fbf013a6d493b508 100644 GIT binary patch delta 259 zcmV+e0sQ{jiUGNb0Sn6w4GI7N0074!+OZ4Q0s(Q8;{q!OVqs%zWo~4%83SSj0pOE- z2e}v0GD6c7L(wuqs8Q4vC7@x|6)4a$LeaBE2v-ULKeL_^FaZPBAvBZM6TAZeA~my@ z6bB3ekdvPvbsMBy)DuFXT$xmuQJ?{^QMf0vT#!MKagjuzT$3 mXTI+MvRS_1$WJF_M)ZwCp(0RRAi0PqMalW#6PliM~W1JoNU zlLv)?!F2LTe3&OfFD+Z!g6d_Xw^030WixIk?K<0mzfEkRfV04O%Ih(T%t J0os%EL}%p-S#$sZ delta 292 zcmdnl#dxcWk^3|+FBbz4^w(eA$bFrOv2^ldCT;G#)bjX(qWrAX@=VEl*ygm$tMOrURTD+mxcGRfEb%6 ziLmo9PMbVSp;T&d%ynU>nISU*7cg!J+@ZcHW`g5{!ig>ygqvq-Pu{5)#SEl3i|OaHbDm;kU}#|Yz@a@k zU)*N$DKj#%;Olr45T-wJ7zI6{+fKrB^>}BKVO^x diff --git a/custom_addons/encoach_exam_template/controllers/__pycache__/exam_structures.cpython-312.pyc b/custom_addons/encoach_exam_template/controllers/__pycache__/exam_structures.cpython-312.pyc index 92b4cae43fdb473217d7f74acb8efd7d09c763a9..89e389c3df5a344beb350308d12485780fc66cc4 100644 GIT binary patch delta 19 ZcmeyU@lk{8G%qg~0}x~=ZRAQ90RTIQ1nd9+ delta 19 ZcmeyU@lk{8G%qg~0}z}O-N=b8IIehWBexVYW5HxKW^MMQ#N_PMyp+u`%!w?F4<_$p-zk2{ z$mz0(^F<@46@gboRTm^)71g+4!kC#MGXfVdZV23=zA0vcBd_bK9CW1 zgW(k^?G=t!rSx{NU){E#EM5^)Z3P zKX4dMKHy?Axzaj^`Kq+`=C{_<8JQVmbT+r!8n81;Zr zlrHJpUzYX0sBgbQ@qpoR^TXyd66dGSPQRdU-{E&b)*BQ&eqjpW;3*1w!pZX&o#YZqRXqaslOfX^rhL=l9ApnKQ Bxk~^5 delta 670 zcmeA_$+-0-Bll@uUM>b8XnA^lBexVYW65MSW^L}g)bjX(qWrAXr0v)_UjprHVEDixJo%!W&17q3L#f3v*M*&ChRg_D zz_=lBhx(?N362vAC%Rk^cG}#o+{41jz=+UcJ2_Iri{p-@>L&&!Uc1T5G<2AO^yaG? zwXB?ZP<0Amlc(#Q5xikxe@)V1gW(k^?G=t!rSvXsuF$t(=lR89larX6l#*yyWi|Ps zy7c7RW-7w`V0Uc@+#a(r=0Mm*Q||_b$pYp}Vd90`Yc|##sJLkE4;FXc%xNLVC?WvV z^rL}cN8!Q|5BDmQOd0Un481-DCV zl-Miv zC^%gaaDJd~d|luEqQ3n#S??8!2Mmv!A2y$nI6r-M`UP3<4nH6P4PAG}39L7SB^K~q z64tvRA~W58qW=Xo+a0Mp!Y`<}UKMfsz{V{2t@WU~tfk_Q1Elb#K{ k71=mH(-}ay2e2{J8Y`$l)fz6i2hp=@4$=z&+LJySV)8v3Pyhe` delta 78 zcmZ2ry1u`HA#mJhF7GtS2$jk(z~=do9_}g delta 19 Zcmcb?a)X8IG%qg~0}z}O-N@y~1OPP~1fT!_ diff --git a/custom_addons/encoach_exam_template/models/__pycache__/audio_file.cpython-312.pyc b/custom_addons/encoach_exam_template/models/__pycache__/audio_file.cpython-312.pyc index bdcb34f86df3b1d2dc2c6b1975bd281290a36b82..0ac707c2a23dd3c9bf99bed620da52cb661400f9 100644 GIT binary patch delta 45 zcmZ3gD+^=x`95q*{OLco4>QvGBVzpT*_tw05@9> Ap#T5? delta 49 zcmZ3=yONjtG%qg~0}%ArU){*Pm4z{X@SD>b=fa}zTMBjc~h-7F>m DXVVWj diff --git a/custom_addons/encoach_exam_template/models/__pycache__/exam_custom.cpython-312.pyc b/custom_addons/encoach_exam_template/models/__pycache__/exam_custom.cpython-312.pyc index 9be64d32bca66fd8c0648efd43419e5affd7e082..fac0861b3cdd3e0bec81d3186c011fdecd94db25 100644 GIT binary patch delta 45 zcmZqX`_IdLnwOW00SJyO-rC5`&B~ZFS)5gyJt;9cJ2fw5voC8sBjc^fXW7gE8Z!+z delta 49 zcmey*+swy(nwOW00SNl*uWsb#W@RjxEY7OUotIi3Ur>~vm6}|#*^{-Nk@45$lWb-H DUzQJ1 diff --git a/custom_addons/encoach_exam_template/models/__pycache__/exam_custom_section.cpython-312.pyc b/custom_addons/encoach_exam_template/models/__pycache__/exam_custom_section.cpython-312.pyc index e9815b20e0b3c56aed5228b58573e3505e08bbb1..a562faaf76c69af6745621825e71a4d2e720d34e 100644 GIT binary patch delta 45 zcmbQvJ(-*PG%qg~0}vcnytR@01v6vG`95q*{OLco3&Uh7#VL(PG&U$05FLS A!2kdN delta 49 zcmbQtJ)N8TG%qg~0}%ArU){+4f|;>m@)u@p?!46U_=2MRtkmR^&1x(bjEuh~$FrIM E0D5u{+5i9m diff --git a/custom_addons/encoach_exam_template/models/__pycache__/exam_structure.cpython-312.pyc b/custom_addons/encoach_exam_template/models/__pycache__/exam_structure.cpython-312.pyc index 95c8ef1601c72a122b2ba29289582e064672803e..b5995ccb0bd57cb5c2e87f96102e48d60f418eaf 100644 GIT binary patch delta 19 Zcmcb_d5M$jG%qg~0}x~=ZR9$^0su3>1i=6R delta 19 Zcmcb_d5M$jG%qg~0}z}O-N=gOxFFvIwg-ds1R@c4}VAW-rz`jEuJ?KW8%m01eO$ A7XSbN delta 49 zcmbQvH=B?9G%qg~0}%ArU){*f!OB=PS%g)aJ1@07zMv>SD>b=fvm5IiM#f*0AG4VN E08r@<275~TnD delta 78 zcmX>mbWw==G%qg~0}%ArU){*v!pfL4c>=38cV23Fd_hruR%&v|~vm6}|#IfC;oBjc~hZrm0C DX%G*I diff --git a/custom_addons/encoach_exam_template/models/__pycache__/rubric.cpython-312.pyc b/custom_addons/encoach_exam_template/models/__pycache__/rubric.cpython-312.pyc index 2a448d7cab02a00dbc34e1321d2d8235d74e60c1..e4efe2bb7c260f0e38e02c5634ff921d7b817227 100644 GIT binary patch delta 44 zcmZqSXyD*J&CAQh00hSsZ*AmW!o-+9c>|L+ds1R@c4}VAK&CAQh00jN@S2uDmVPedlyn#uZJ1@07zMv>SD>b=f@*}2~jK3zIVKxB( DU*HhT diff --git a/custom_addons/encoach_exam_template/models/__pycache__/speaking_card.cpython-312.pyc b/custom_addons/encoach_exam_template/models/__pycache__/speaking_card.cpython-312.pyc index 419a6048f390460156d0352c03808cb5d98b3ee4..c97b062c1d27aa0ea939df1370d642d87d8a2aaa 100644 GIT binary patch delta 45 zcmcc4bD4+xG%qg~0}vcnytR?LgoQD0as!Jtds1R@c4}VA=4~uFjEuJ?E3=sZ05+rz A*Z=?k delta 49 zcmcc2bDf9#G%qg~0}%ArU){)E!opZIxq(HSJ1@07zMv>SD>b=f^Cp%YM#f*0<=IRC De&rAG diff --git a/custom_addons/encoach_exam_template/models/__pycache__/writing_prompt.cpython-312.pyc b/custom_addons/encoach_exam_template/models/__pycache__/writing_prompt.cpython-312.pyc index ee4a61bf1f0be4e6d221630bb951fc00113fe4a0..b3b9e4d85b837d7b26cc22415db06a6f710fbd6c 100644 GIT binary patch delta 45 zcmX@ayN{RqG%qg~0}vcnytR@0Gz(+?`95q*{OLcn|WCq7#VL(?qf3n06WnR AHUIzs delta 49 zcmdnTdx)3&G%qg~0}%ArU){)knuW1=@^uz%?!46U_=2MRtkmR^&77U+ delta 44 ycmZo+>R{qN&CAQh00jN@S0{4kGp0_g*5=MjEsrlK%FjwoE}6JipYhkkyXpWSln*`t diff --git a/custom_addons/encoach_quality_gate/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_quality_gate/models/__pycache__/__init__.cpython-312.pyc index a2478ca39a6ef1a84be3ae41047902409c8b1cbb..997da9b5586d6e0c1e1cfd74d7ccdb493edeaa5a 100644 GIT binary patch delta 40 vcmeyz_=}PIG%qg~0}vcnyfu+KkuhUpt~Ps8VsdtBUdqJ9W{kHc-ckVo1Tzik delta 44 zcmeyx_>YnMG%qg~0}%ArU!BOE$e1%RSDQO8wLHF{C_gJTxn$yeGsa&Nuc-h4MWYY` diff --git a/custom_addons/encoach_quality_gate/models/__pycache__/ielts_standards_check.cpython-312.pyc b/custom_addons/encoach_quality_gate/models/__pycache__/ielts_standards_check.cpython-312.pyc index 5f395429734def37eddf4ab71e192b00e486ba58..e1d0485412a962b0c0f4ff463813ee31bf761f96 100644 GIT binary patch delta 45 zcmaFC^@NN2G%qg~0}vcnytR@03NvHr`95q*{OLco5fgU85wU)HeodZ07fDW A+yDRo delta 49 zcmaFD^@5B0G%qg~0}%ArU){)kg_*H(@&jgV?!46U_=2MRtkmR^%|a})jEuh~8?c%H E0Fmzx^#A|> diff --git a/custom_addons/encoach_quality_gate/services/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_quality_gate/services/__pycache__/__init__.cpython-312.pyc index e9f77ca468f3e2893ac756d3a0a74df77f52f468..748746dae7bb7f47efae76cfd904ae144d798a92 100644 GIT binary patch delta 41 wcmZ3-w2F!QG%qg~0}vcnyfu-#hcRp73~lzL#N_PMyp)OOEEsQ1W@l6f0RL$X0{{R3 delta 45 zcmZ3*w2q1UG%qg~0}!-4y*`nn+a diff --git a/custom_addons/encoach_quality_gate/services/__pycache__/content_gate.cpython-312.pyc b/custom_addons/encoach_quality_gate/services/__pycache__/content_gate.cpython-312.pyc index de18c28aa1cc0fcdd45cbd099b417bd1a2da34e6..c42914ee753b2bb22397672ae92416d1167350bf 100644 GIT binary patch delta 45 zcmZ3$H;0e=G%qg~0}vcnytR>Ag_$vLvH`O;ds1R@c4}VA<}~IqX2x5S@3J`q02Esd APyhe` delta 49 zcmbQkw}6lPG%qg~0}wd0Ufsy8!pvAS*??J_J1@07zMv>SD>b=fa}skIGvlwxH`$y4 DP9hH= diff --git a/custom_addons/encoach_quality_gate/services/__pycache__/quality_checker.cpython-312.pyc b/custom_addons/encoach_quality_gate/services/__pycache__/quality_checker.cpython-312.pyc index 86a5458a1669b5049d9a8805d969141a5e59daba..4b6220fcb7381f490b2b5893ecb4a01b9df37914 100644 GIT binary patch delta 216 zcmV;}04M*mHJ>#L%MA?*00000$06FW3&#Zkag);pD+gj>V{2t@WRnR7c>x2Hg9bqZ z)+SGr%myL^04GoZv+)MC0|DBTrwT|P8~^|S=m7YD0MHyy$rZpsoL<)*JkcFIxKY;~ zKgkud4GTH}0Y8&S3?LTSASu%nH=zlbF{n|mSE*O6S&~tp36p&cBm>D6)03nOegoDb zOOq-MA_M>%^*&I18 ztNDLoVCI#Ye3(s%8Axw_$+nf5@z><}Tpn`LKr>!2{AggfB;$X;aZcQIS(}TpHah~Z z%i3R*@!!nGZNPr<`bel{)&91x;7#SNUtMMCf+z^rY#K6L-G&z!Aff-0|uHm1-#&~>_|lRd>knSu1?ghtNG%qg~0}vcnyfu+Kh%s(roHlz>VsdtBUdqHNI*hj_9#jDU_>T=; delta 44 zcmaFJ_>__RG%qg~0}!-4y*`mUh%sqmoHln}YI%G?QGQlxa>>LAI*h+2?o|N*Lw^s` diff --git a/custom_addons/encoach_resources/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_resources/models/__pycache__/__init__.cpython-312.pyc index c0793c6c47e520c8faa77b4def4194989f11ec95..e15d7626479e559ec4a4468a7674dc53ace34c55 100644 GIT binary patch delta 40 vcmaFI_==JHG%qg~0}vcnyfu+KgfVquf;M|nVsdtBUdqI2#*DWno>Bn-{BsSA delta 44 zcmaFG_>PhLG%qg~0}!-4y*`mUgfVksf;M+vYI%G?QGQlxa>>L=#*Duv9#a7TN7oPn diff --git a/custom_addons/encoach_resources/models/__pycache__/resource.cpython-312.pyc b/custom_addons/encoach_resources/models/__pycache__/resource.cpython-312.pyc index 5e491e17fffd0bc4fcde63c0fb4a1adbc7765bb2..516a4b2abe9e1b224c21e7e03d90ff054b15fac2 100644 GIT binary patch delta 72 zcmcbua8-f(G%qg~0}vcnytR>ApOrCnvNfwVds1R@c4}VA>NAT8zIY{?GydF)I)5 diff --git a/custom_addons/encoach_scoring/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_scoring/controllers/__pycache__/__init__.cpython-312.pyc index d0e4b5839c4410e6136dad6c2fdc41c05d388640..f45d734c66b219fd96245865cce6ca97c8487d6b 100644 GIT binary patch delta 41 wcmdnVw3UhbG%qg~0}vcnyfu+~8e_)9McV91iOJcic_|Zbm@(d(%+II=00h4cJ^%m! delta 45 zcmdnWw3CVZG%qg~0}%ArU!BN3jWK89B5m%x)bjX(qWrAXZn#pMz-a}P^)4qCa%`Tf8D z=QB6?Df~PI4ZoI@XaV_LKdlTr?7V8wA~=KvRI5JH+jlH-Lc)8{zTzs9a0WaSH{mq0 zBH-|4?x4pk+=A2Ei=q3$?z^_ojbOTWZu9iX*)6G-nU>k@d3zvh58SgiUJoXAF4{u( zx9+&hcia%t?Q`boy|dPoI3vzF^MXGs`0ojU>q6$N?w4X1z`HEfXxZ3`$1Ot~FttI& z1WaXT!ZPp9^EFw%W|^g|O@S#4zBt~SNDH&eUiE_oJE0)W~L{D;L zN$*e?AT%f%;H*v^nmLqn_;ZHttiwOGKe=}rrc2YqOO0J0om_PIGe@}|2nRD)c@M-% zLD+1RR1%Vk`k}-uu=5N(Bmg3eWI7AxUl_0CLG8PxzOoe&w*|$_bD^UcevoOYs)1;k z3*ljRWdQJDsIY*yCBiai&vV`^=go8VS+4%d_%ioq63L=7Su6`;Uhw4vAHL&$0|8qN zMxOl$@WISMPoD;Q@lF3@^t)Jv7wS{w7TlTL0h=Bk&kO`bh#rYmne#0cxE}aw+bD!i zEVlB_SiCnr66;gFTrw3JGIV6Du_}Dn=Eh^KUpDotBt~Kv)bogD05Hi+Ffl{i_`(7} z(n!UUc1|@9UwHNbyr<1-l60eBlHEw7&Y}r+g25--%ZnzM!7@Cx!-AVcbDgB0V>YU* zK-^mB?FP~2Np+kr*n@W5t~Q@8DP%(scNAiAS3#Rl7vhp({^j=iR0n_rCe^3Z`(Da1 zI0oK92f!Hg8Fxp|k>coiid_^JDE3fbicbhubSH-6hsmKu55*%=w@($lNWG?5-*7Y% zJKQ_kJ22FHWGF%cGObxA@G^Nw$6_IDKDQ>ZDn6ZkaIG}YIad6jBEP+X%pPO(1W4Wi-qwB{1+##G~8@)RBX zhGUFeTMQDM0gA?kA9U?LtuUzCKpv%)n;uZqfb*;Y#Q74TRV^sDKj1vFvsT{ZUuBTD zj6`^|0#K=0(SizZ>eS4s#m3O0E3~K=ADJsjRyWX3;38Qu~O3fEKs!g zzi=fU4_~NlNRQs?mIddu`cmX6f~@~HrgT+hXBx;ai7i`Wh(}?GskA{-^CNtQuf4U+ q{x5C%YK|36%kg1pWGJ#d3Lq}&IboS7f(@6Nziz$U`V3HgJ@DbpI$_X|pbF;JkvT2M+c#BSVR40fS`w$=x6p|Wg9 z3?(Nj1hogiit@X!p6Apj%V?IfAasyIl1>`9oL><(+_TP!SGEmul63$u41OD+dPw6uu6iXjzs=!7Q2R}Hl@3Tv(n z$gHT?_@&9Vjt0^;`L4(P&@e9RmE_pIYaB*cXK2?oUd>Wb2F~sC>CMsSw$V&%0JGEMqii$C6R6Lu&B*R}%QUu{av`ZPWXD7^?}zVUh`R*Idj6e`J)pl)`K5^-j2HXBII*E$ zzzE$wfUSvTrfCnT=mckjbat4hYS?F{SXM)0s~5BdTc~wrQImouQN&>H_URhZ%a$l_hJK zFjLR?)7f**J@=mT-E(%&PO(p%Vx7NpIIIl$n|w=;&vsmLvOM>Z8JF^p;?7_V%i{-v zVRM{G3*_H`&+~9!kFS4+ZVY-=V_RxNYNgFle5Dk{o=P_;4O!!Ma$Q#pU z+$H#2X32Ds%UM}QGvFG*`xPCJpEP)vw+a}{l7U31HF_!s_(4vxNY+`~MLriGZP6^~ zCCxHaf{%OMhSL^Cbz?`QQlP4=(T#snW!jXss=oYjG^^^*%lTuVq-I44HJH~+_U|y7 z6?d)k;JYf#o4T2c%a(l3YE9l%v*vY^Hc|tdW|JHskrU6|>cPLNGBr9U4a8#C1kF6b zO>hCSRI^Vy7$(NYxHfn)6j=)Es+`3>)9h5JI08Piwj81dO~qa}juiQ7qhSuV&vC8!qhPjXMlQySanqg=?t`*#(S#su!HNh$z%Sg_2iP~7G zf=erbtV!-9SIGmIuM2sC%9N_j1@BVHk&l)x)k-yoX2y>jf_cVUyo7Ocj_ld;f@c}= zB>Si>D{=CBXbirz&Lg1moPhso_PKnL|5-!Yt(BoNt!$_j(kON37qHCKoaP?d3|jn< zvD|Hz0?%?QR*f6l3N~NyitDs&9?eM$wQ7|)?bXbhV~kPQDH|j~sr6`HAa%+kFq(sU zR%T9?pY+A}K_vM*P+JnhrUHRtkT-;>;wQ()5mH0b?k^-675uBGPBAF$~D6?C-z zH>iA)mA0AEfuiyUipn3*0-8svfD;!LHjv+l*n-8>)Ko$T7Lih+1&R(RdG0cM(;`pq~q!5?78*%;}F7@zi~%g32W_2dEk zmZi03T_~Q6rO-$UiE2DK7(%1{C>{$bqy6g@qQ@Uw)|CCXL?%9B?7@ZsS(f_6*kN30 zt;*=OZ;#4~8c!voap?mXw3DW|6p~~m7U6V5B0d~fbwdhCGKwvaVR}G;Ak_4eTL|oC zSmtR)V-C4U`>|@lPb-Y>Q|!|$>4Z{&Il{cmkFybWPlVMC1DQlhRLMqMLzB*qDKM-< zAq2Nux3mq)NqJ%fwNKVXksM16kBq8vv|mh0N<&*B6%!Lmdqcqq&Y{5U{X6s7G3H8r zZ?<*!Tu&r)T4#yLT3oHUI@H^Iy z42)g`N$U30n2f|kg6@uPC8`KdEhq$L)3Oaj_HCjDy4LzB8w>Ypw7i5 z6ehM@P^%)Vk~|=eCRE*#qbv$^$%-xvDXFAL%AXP?MYqP4cv4ZtWK7ltDIQaGUKt(M zjbmbhaHsPLIjI|lMRZuvUAy}3+|x~pCCNJxN+I2{@5soqXuSvgb7}+K2xn~7>}Gu0 zR>4Io@nu`UV!kbZIsRq~H`3g>fqvb#d^|~1McummAdU^{_TqD6tNng$9$gMORDK)w1B)c@5{nVoW4NDc=UhwHvxz*v z=c!yWGZrtF9BXZVF#DI9nUYR+X~X=F9LKpkKKrzbW4wVy&&^rS&9jkLzjejk`7y&f zyn2aei6_5bd~!F-xW2(Ea3Ozf-5%U)=PrBfdz+1yYXyQ?d-dK1Lv}q&aK5Evz*rq3 zj=BjrCgT8Yh9@qb)P)goP)2q5wemI_S_N7rVn#Jj`8vrh=<@kW_7EM40UQO;@Podv z9VWIej4Coh+wdu0xbIG|SwPE^E38|^q%tleGC!1}+g;kXfBUYTJNEV5voqSayQjCe z58XkRh?0alAi{BY6q4ewj80&iKS0i~%HQ4n2&j!xYFLaXmyZD&Q64FK>-gSOze!?l_35izosjtvCWM%xJJ#(tCBj*3VcerRfE;@u9RfIwKd;-xUYhT&ziuge z2sCE_eo7$1p(A)x!z~%gD=i33h69J^0ami2`-MPPAe=0x?ob6X%4y!{C-018^_wXcASH=BaCm5Lw4*PAMgBDigRs=3}62kA6k z(|jNM(flLL<5pvi2Q0L$FL@n|Mb`s&wKbN6Kw01$W$>}KlWYqv*|z$&Enr$pKsV=G zeXxc8eb|8(KyOn<2M2SXMM}hg{s;>e0j>go3;Gk*w!QcO?cAFGhdIg;rH``I0WszQ zXemz+Nw>j(ONitnhkPfrfNdHdZ{NVahkwyt_s!peVlM#nF}e$&z<_QV7f}+1{q3M% zX*pkx587=s!pi;4(Se&f{6@;hLA-i9DbWl72 zk{19z80c-)tvgal6{QjhvL}u5PcRiC>*luMlr)-<+tGjUrJegK53y|3r=5IMV4G&t OGnr>H|7Jj@EB*%uW$`Tl delta 3248 zcma)8YiJzT6`t9dotb@UAKH~#O60eImL=dvV*;PTP`(1xANaE>Ezv3#zFgdSmQ~h<-m5Nbv zJDm(0%5|SNKop2BclW979#?YJRo|*_8%uHhB)uz1{^M5%l(mQ;8_)3P@fsfV4ut?aN7Y0g#;yJ1&zRdPGfCo!%_ zG`MXt$~aROr6r#cdpo|B8DW`h9cQ35Pjd~%@cDyD8M-`!Y}dM@38V9pzuw_SAmK)e zY4Y>&eoYkCf9Q4;huM)jiK}(RRU>)H*PKNZTpxLKPpZ44{)2vIkNq^~Ds!PUI%Mpn2GzmUjFOG4gvHoVDeyq<95ZeVkG;-YW8 zLl)|tb@X?_NQ+iy=hjg>n_F@+|Lfz_--UGRuxKdtWE=CzHs+IV(v2D^+;bbJ$>u^V z*43^`y8Cl_q}*iN2BqQ{)=yV+cw0#JLW5hOmV&L-zEHs~H^mf8F$I}u@vZqq!5VkF zwxmoYjGnt`8EqTj3f?5c(dJH=;+mUW^qpezh^%euiF$lR$ZT7iCjRh#ayEP)c{w~l z-ia8)fA(k}n!SZhN&WV@LaB5MJNlYP{iQ;=;E;Pe4o?p<51>XgTv;|jFO_l&x@Eu~ z=E_Js0^2dHZiZnJBVFWDM}LEc&eu%aDO9Xn!SH4Y+NNWei+Zi(utoC~FsZ++!#SJ! z3yxW~skCIW2vlm8L8WrRf?hTs+>cB6SAgYErB*d`eCEN#r)1a4R4SPkRhIP+&}qS^a*j2JQ^D%SF-7WSPsm5rChB!CO?o3XIK)hWj`X3pT#Cg zAf6U~PsZXi(jT-WIg}U+{Z8xoG$O=i#ZO}!PU0C~&%gdYE<_&`ZPp3Gja2xdh;m~{ zX1Fn*T2ux-TJVeoYsou-uV7KRsxO%^N`BFIAVU2WFifCAMuR~T>7NzvClB{`^TvZm z*sQRG@D!=_4~6$Klgc&Q1ehXk_761 z2CJG_Bx@smr|-l}D__y`PwiebO=CgNp95ZqNU3+WQMASoN(c!C8JR|!={d(-b!Y@? z3sA`Cc%9kgwo`t^UF-q75ylZV zufaj`#NH{d0(O9g0p6Qj?9UbiypGW~5V!)^KVAW>GK=~bna&RIvY5rtRqi!v<*E&H z=$J=1gMeDnB$zh4OKo^ zYq%~GdsFKNaWU88?h^Ns?A@m|(ozmcuiseA1RAOuL wS^k8ft(mEIpjUrrYHyy9GGyxRDufHoiTUwy{%_y7O^ diff --git a/custom_addons/encoach_scoring/controllers/__pycache__/score_release.cpython-312.pyc b/custom_addons/encoach_scoring/controllers/__pycache__/score_release.cpython-312.pyc index edfd648bc0561df213540789b9896206fd2dfdf7..0fde2c4ae1499c62339684dc3addf27ea01de40b 100644 GIT binary patch delta 82 zcmZ2)vdo10G%qg~0}vcnytR?rgOf3LatNn3ds1R@c4}VA)yaHETz>L)u3gLw5(=A3xMTSkZ%w`=84Cd52^hox delta 76 zcmZ2xvfhOIG%qg~0}%ArU){*SD>b=favNs_&_|@z>;&lCc1+S{YIR diff --git a/custom_addons/encoach_scoring/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_scoring/models/__pycache__/__init__.cpython-312.pyc index cedb307c117e3d3ff06561f47d62e3a5dc551939..adaa370afc5c892128b5741b4a24a708eb516570 100644 GIT binary patch delta 42 xcmeyz^oxo6G%qg~0}vcnyfu;g7Gv_nXWHyZiOJcic`1`+7!4V3P4;6n001kS4blJr delta 46 zcmeyx^pA=AG%qg~0}!-4y*`oq7GwIvXWHC(spatnMfq8&$t9B|7!4VJP4;3m004k+ B5J&(3 diff --git a/custom_addons/encoach_scoring/models/__pycache__/feedback.cpython-312.pyc b/custom_addons/encoach_scoring/models/__pycache__/feedback.cpython-312.pyc index c9684a9102f22112253691bd07ab6d82699e8c72..1415bb1f7a317b005d89efdc6233000b5ae33102 100644 GIT binary patch delta 45 zcmZqT{Kvt4nwOW00SJyO-rC5`%FLKNS&&(qJt;9cJ2fw5vpX{jBjc^fJ}hPc5F`u@ delta 49 zcmeyz(ZtDpnwOW00SNl*uWsaKWoAsDEXb_QotIi3Ur>~vm6}|#*_oMzk@44L4;C{3 DRPzod diff --git a/custom_addons/encoach_scoring/models/__pycache__/score.cpython-312.pyc b/custom_addons/encoach_scoring/models/__pycache__/score.cpython-312.pyc index 82867230a251d288d592d9d917da8c09e0f9227b..44e0549e7c94783948e232cb25647b9658669b35 100644 GIT binary patch delta 45 zcmaFC^@NN2G%qg~0}vcnytR@00W)L5`95q*{OLco0VAj85wU)Hexjc07iNZ A-2eap delta 49 zcmaFD^@5B0G%qg~0}%ArU){+4fSEC6@*8Gt?!46U_=2MRtkmR^&2lXKjEuh~>#>>v E0FqM=_5c6? diff --git a/custom_addons/encoach_scoring/models/__pycache__/student_answer.cpython-312.pyc b/custom_addons/encoach_scoring/models/__pycache__/student_answer.cpython-312.pyc index 2ce33a1f5547662fd9577c810b28a69d82191a5e..56ce54692f35904e5e027b298fea758357aa0bb8 100644 GIT binary patch delta 45 zcmeC=Y~|!W&CAQh00hSsZ*AljU}nsmEW@nLo|KrJotl@jIf$8wk@42#P!=kDW1VvJ|^Eds1R@c4}VA<^cA`jEuJ?n{b)|04wPY AY5)KL delta 49 zcmaDR^h${PG%qg~0}%ArU){*f$Ih5HS&ChoJ1@07zMv>SD>b=fvk&`YM#f*04LHpJ Damo*a diff --git a/custom_addons/encoach_scoring/models/__pycache__/student_progress.cpython-312.pyc b/custom_addons/encoach_scoring/models/__pycache__/student_progress.cpython-312.pyc index a8e016670f5e3a57b21bdc83c090641962c5d6c6..eacef8d32673ae981be18853f32859d4a3b4e7f2 100644 GIT binary patch delta 45 zcmeC+Y2o2M&CAQh00hSsZ*AoEV`0pm9L1u|o|KrJotl@jc>;?gBjc^fmsrgJ6DJKy delta 49 zcmZqS>EPi$&CAQh00b>huW#h`V`0pn9L1u|otIi3Ur>~vm6}|#xrfD(k@45$bF5|n DWL^)z diff --git a/custom_addons/encoach_scoring/services/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_scoring/services/__pycache__/__init__.cpython-312.pyc index 4ba9cfa1fe5afce21e3b0e5b08c18ae3c20aec7d..401d93d0b37824bc68af2340f59778755ede6c9f 100644 GIT binary patch delta 40 ucmeBVYGvX+&CAQh00hSsZ%yRRXH1<~t<9d4n4F!OmojmqG2^X?PgMZpBn>bC delta 44 ycmZo=>SW?R&CAQh00jN@S0{4kGiFY#*5=MjEsrlK%FjwoE}6L2nDN)dhbjOeXAemL diff --git a/custom_addons/encoach_scoring/services/__pycache__/speaking_evaluator.cpython-312.pyc b/custom_addons/encoach_scoring/services/__pycache__/speaking_evaluator.cpython-312.pyc index 7fb7240384877a00eae663bf946010903c8016b8..8e557b468d794b4b95e0749b48049bdb4e1ba62a 100644 GIT binary patch delta 19 ZcmbO)H(!qHG%qg~0}$L)+{h)$4*)Qv1Wf<{ delta 19 ZcmbO)H(!qHG%qg~0}z}Q-N+@%4*)PA1T_Ev diff --git a/custom_addons/encoach_taxonomy/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_taxonomy/__pycache__/__init__.cpython-312.pyc index 62689f41fdbc1c54603e3a8f1289f18064cb534e..624e7185b06002628e58923a89ac1e5363b7aabc 100644 GIT binary patch delta 40 ucmZo?YG&d-&CAQh00hSsZ%yPbVvLYG>j;&CAQh00jN@S0{28F(yu|)8@`gEsrlK%FjwoE}6JNoAKAgJL&)+X%9RA diff --git a/custom_addons/encoach_taxonomy/controllers/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_taxonomy/controllers/__pycache__/__init__.cpython-312.pyc index ef0f07614699b091c63fd966294bf4c0ada5713e..f1276289a5a8e1a22f43ae3ddfff8eb88c817275 100644 GIT binary patch delta 40 vcmeyw_>PhLG%qg~0}vcnyfu+KgfVksf;M|nVsdtBUdqI2=8U%{o>Kt;{u>RT delta 44 zcmaFI_=%DGG%qg~0}%ArU!BMu!k9ZTL7O`-wLHF{C_gJTxn$xbbH-m2PpJR^KGqMp diff --git a/custom_addons/encoach_taxonomy/controllers/__pycache__/taxonomy.cpython-312.pyc b/custom_addons/encoach_taxonomy/controllers/__pycache__/taxonomy.cpython-312.pyc index 0c28578dfb8f9db950e249f1b2cd932863b4aac0..27bc20bbe538bd4f0a50e80d29a40fa25a0a7872 100644 GIT binary patch delta 158 zcmccRwbzULG%qg~0}vcnytR>gKO1A_`95q*{OLclNs5I7>`UYVYg(yEh;;C zE4v#rgP7drf9$7O87EFY#cQd5M^ttK;|(d93G6o{rRK}bk(uClLsou*+YMQ{`O$Nt zXE5GSRiD9iLs99vqU9Au%gJthw#*DlR+HQKjF=hZG$-!{(Nb!YKY+x6MjP-i5oNqJ I`Kn4Q03il4{{R30 delta 187 zcmdn%b<2zUG%qg~0}!-4y}prqKO1B2#=M|p7ctc8N0{aa~srfQ9Wj-;8 z35ri}ydf(;!R>~u-2CX7(VrOjM5Sji-cVJa!F5AX>AIrjMMcX`3~Z9}lQsElnL%_W hpAj=q(d2nR8mNErWuQ3F=*`0XOGFueP2Qo>3IO*-JAD8E diff --git a/custom_addons/encoach_taxonomy/models/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_taxonomy/models/__pycache__/__init__.cpython-312.pyc index be44a61cb9cff3ba0053e979b31fcecd63080de6..cebc2bb293865ddfd511652a51a705b285f4a030 100644 GIT binary patch delta 41 wcmcb}be4(xG%qg~0}vcnyfu+~J!8tm-P-I)iOJcic_|Y=8Zq9Qtiq@Z01)#H$p8QV delta 45 zcmX@hbdibsG%qg~0}!-4y*`n9J!8hi-P+uFspatnMfq8&$t4rt8ZrKwtiY%X0AR8Z AKL7v# diff --git a/custom_addons/encoach_taxonomy/models/__pycache__/domain.cpython-312.pyc b/custom_addons/encoach_taxonomy/models/__pycache__/domain.cpython-312.pyc index 65826f19f6bdd78009600159685104502519c83e..5296548f6bc47aaa305280092d86443790935a80 100644 GIT binary patch delta 45 zcmey#^OcADG%qg~0}vcnytR@01T$mO`95q*{OLco4Hu5m>6$Oc4adG07*U# A`v3p{ delta 49 zcmey$^OJ}BG%qg~0}!-4y}ptA1T$mW7Rec4RXF E0HL7}aR2}S diff --git a/custom_addons/encoach_taxonomy/models/__pycache__/learning_objective.cpython-312.pyc b/custom_addons/encoach_taxonomy/models/__pycache__/learning_objective.cpython-312.pyc index cbc81cac26c23635d7813d14aa84b9490047f7e8..7c583ab2f3da6642b7e959d4501676fe1e20ff0b 100644 GIT binary patch delta 45 zcmeC=YvtoU&CAQh00hSsZ*Al@V`0pj?8KtYo|KrJotl@jxq>BziSgFtt869!57P}P delta 49 zcmZqW>*V7;&CAQh00b>huW#fwV___s?8KtYotIi3Ur>~vm6}|#xr8N#iSgIui)`95q*{OLcn`K!%m>6$OPGd6x04@j( ArT_o{ delta 49 zcmbQnJBye5G%qg~0}!-4y}ptAHZx=D7RePGU0w E0E7<^8~^|S diff --git a/custom_addons/encoach_vector/__pycache__/__init__.cpython-312.pyc b/custom_addons/encoach_vector/__pycache__/__init__.cpython-312.pyc index bd937586c364de206f8a98f0efd822940a600a8c..371180c009802fc9ac0ab016117b0e7b03fe619e 100644 GIT binary patch delta 19 ZcmX@hewLl