From 68f057f1b8ce58719d33521bac34fc98bae1f627 Mon Sep 17 00:00:00 2001 From: Madhu Date: Fri, 3 Jan 2025 01:20:36 +0530 Subject: [PATCH] more functioning code --- .../ai_blackjack_game/.cache/41/cache.db | Bin 73728 -> 180224 bytes .../ai_blackjack_game/ai_blackjack_agent.py | 83 ++++++++++++------ 2 files changed, 55 insertions(+), 28 deletions(-) diff --git a/ai_agent_tutorials/ai_blackjack_game/.cache/41/cache.db b/ai_agent_tutorials/ai_blackjack_game/.cache/41/cache.db index 2d293263201f3dc90493e5be3e94bb95c6e7e79e..06eb4855a5d42b6e4410e46bd14abfa31b9a8b19 100644 GIT binary patch literal 180224 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 F6+St!Bp?N61VwOdMM$UKCs7EEB2F zOe;yeSYwUD5(Yf=4#L_AYbUHdYn(0@YsV|@^Ugk-^KYI1+xb77-*f)C^F8MuJHO%l zedkx4UvmC?=f89Qiu3c%pLc%7`Olr7aQ+kLPdXns?*T5rYtDZNnE^>>!a47ZI2q?P zzzLXejz9)M9}G!8gaU*DgaU*DgaU*DgaU*DgaU*DgaU*DgaSK_0=sH$_UCbP0yod$ z<~VNJaB~bd6mFiy%`><;ikqi#a|Aa};pQ-Ip2STnZVut*AZ`xeWU)ZxZ~n_al6#Z66Zt*ueh|6BIkoc|M|{=ez`GU)ri z2vPq3$e9BDUUnkq73Z+?hn=+ZIcKZ0spaole$etBAO(K0<=?h^uH_RgZ?*hb%PTGM z7N%vY7SuYL2CSy0MoZS&V9)Hr{EJBPY{Y?ra~+rRkt3$@vumc7r_?5?eEG%}m; zge;IcKqx>cKqx>cKqx>cKqx>c zP)Q1GAN_yWobYHQG@3IWedZ3UlPZ0sLH1Zu>5S7ES+|C!PqhCGCAK+c4@R;eA3^~_ z0YU*n0YU*n0YU*n0YU*n0YU*nfwd@rfdcJyS8VW)dy1qcNQ1qcNmnF0j=zckQM zg8y&e$rJp4C_jKT2Pb&&oTEz>T9sApmDr;=ZSpRR>73-N~=;djD!qb;j zuf|5@OMMIc#UWDvPta?IW@}AWRR4$Sf5MTC)&GOqe^3E%-|G5*r%3%jsOPs%8NF0_ z>;Lsa^}imWuTu5@f|>e%XEGO1K>uev-k{$fV%&Z{`y0YU*n0YU*n0YU*n0YU*n0YU*n0YZTS6wv+uGq$>!0$-9tgaU*DgaU*DgaV~f z;K6gX;QpV_x&QsIw8fC3FtbQ$!&UCvI4Q28xC%RM*Wwss1lMn8WJIX~qWTdNMe=&3 zoe)Bds0hO$Dw&{|IG@|+ zrKNbLuDiRN>WQduW_%HeD6;~8Lgi{vfz#k)B7BpS!<^ugi2+<^z_j#tw+(kD|5;V>_9YB;Rz)!^XX=kX96 z{I;tndg1)Yd{ByUGoJDDiZC^ExyR2AMq=|JPpDdB050_?6q8%iJEzoWRBVNU#hMae{jO~M|7Q6AJFC+F-ff%h{z|9i~e4;m^c%DMl4n7IFQ4p~M8bT>v(DLRk| z7$Eq6n~VQPJPE}2-_}XB$x`$oegD4$MYOT+A8*T;|35Y|Jmd4L%TxRaJt(O?1IbDM z;^;~M0t)ImL8?ytKTAZ{hQ0q|c#VW8ELq|Z;`MN@6&y{Z)1mtP|1VUf|Nr0y{Qswk z|KFBs<`_;uyb%;JY}3H`bYK67(5q+Qn~rV3|L>t`x6dDRGcGT31v$TqW?ey7kVih6 zaR+??>{!w9-|aVmRGdo zd?vnv=T;<%vqL*6HmOpKhKsW4$^F!t-hV!moLc?kM;i=`yE@uJ!r_Mk`%aS zt9RONU(8C~A8jg0>K@a7{tARS;3&(WcXj}IYFDCiCa zkcahz5a-F0M&!N0YqQ^aFC&dKLLH*hT0J6{a7sT%_dTi3X}i<)uq^NqKqE_HXgV%r zfrUKFudw30K5L^`h;7Cglp4~chF?iZ5vn%|pow!BI8g_))UPX+gj^A!G(gENYABL{ zr_3=Lw2VWk70OL_;_pC#Q`GF4D#c{Si$#5&FVrCy^XYa0gVmpX&d33LyeJzlmE-Eq z{n0sYjraqN+`b#KFE3e5f|-YkRQSEeEh$~w~znwTV2Q3;kZqp z@jC49*qhsTeWGci{)6^+_Ow+}34XY9-@5F$^FpJ&Bz<}32@AKTZcRAuoOtZ%kg-ne zY@x|gxUv{jX6E~x$VB^!iA%b@YGC2O&pezK{`#`x?m~$x|M?^jRXx^sT2o86U5<}3 zMMfsN?_=|dT4bF9y067wuu7CF{&reKF+>HFU{ zwq*@7mHj^49zQJRU0TcSoNX#UnhZr@pU5HQ%^A*hZ2y* z5KhPlSJ#I8)Ew|`Y7dj-MagtvFXTKZ5>8(?9ehegILl#;K}<-!+dnkl<>fi#3kLmu zhKmGT0Z$|lbo>3G0PjIez@HBkTs%f ztW9vo0Y*RM{bOsQl1wBdoT&ooncBnB@>MYO2a>y~UH||XqB!`ClAN7IkfnkXKI3Q^ z%#hL|>ZXQpehcJcaFFfNsYCcPW{W1IytrMR6r_DB)GUHAnP_wcr>{y9PeBR|gU_qM zU362EQYR#an)5uXo~{30RkC%@s*Jl&=Ewhkjl}t?->_K&MfLB0$rc^43=K-7E3RDd8C)2 zxl2QGwEv1Q)GJ*@BU57w<3em%S*Y54z`wLgFMuh5u=D_l(~CG6m(i3$Kwkh%1uUiL zR&$C^$`}X>AHiA)h%6K@#oJYY%~FvZ6XP%ld}l~JgVGXOL^5C>ne%tWIE)%&u-2*N z)n?AgcWS={F(wKC7fVtyipv-QJcmNjAqtB{QIM@P=nFRuT|tftc2lF$5{OD#XPl!O z73cN)0DupW&Lp@RnUbYsoPVk6<)3d>rTp_l#pR!G5&36pkmfbgUZ5$Cm4$KPWN3Jx!&KqJmsFbbg^2k6+0mR{~J}w z{|Mqvr4V;~yvNOPOd#auJv54hXf}vkJVIVKl>ZB%e6xOW#2p>~?}4r1BlZU+>(t~2 zTS0-luQY>5GC)KU4c2da-~d{pvold_W*dU#d&9_J@_%^2f>2Z*p(_Oe7a zuq~rNav|zwhlfIEClUe^yXsxMr1%l1cqhlJRv@YVID}83-@TbWDQpJf?oMI11phDnAl>mQ%$bvd12Lj>Hy z7{%9Lf*|~JBO@CRhwNYZkG~KOJsGr6x+ND)IbnpW~yYu6B>0xRI1^b3jYkQ@)#TdmKx9yb$Bq6~X0h{sO= z9rX2|yxkRjyBjxxy_F9GLf-CbeY=}(yD?k~SxC%Ml8UQr z*Tvka`~MHy8dCPdJ3#H%QztndY_%34lIGOKGl2K*EIAcDycf5h09 z(HAjB$ASwzlb&-zYf+Xa#U} zGpfZCV9Ea9T*v$x#!E}|+(Sm!ZDD?1uZ%K?Nz^?<|B{9xPP%WBMyQwj(UuB(GnmylAlzElkDw*II znePTl$S9Ijm}q)5wF_IT)2T*AQACUw0M%+88te;v*BnX4bxarz00!VdlPXEkFy2wp zqsfZ-|NpoudG5aA`ES2O^53>1{|zGkgAor@+x2_Ae8dy<2WXFnX8nvCA^_+Bmltlg zto;3Fj&}UvI{9z9{{JrI|J&c)Jmr~;RACC-d;SRvS`$fY-1@Y}VxrWh+ZNW4rV6@~ z%?6C3j$jO5x|Q<@>T!R$h2>4c;#}n%2PWa z|M9)5lz&#|Kd!<*`e`EnY=!*e=3U;Pj|SAE5EG*PLE6u|B9QqQiTF4GLCVknS8u)i z3HkLG){%ei-q=g>{~_#&+D6HCo5R40rrWtIm2MaO{NDyN{s-GK^1tyh&($k4?y+%Y zTJ%lykGK|mv3~LT1y9xTzv@r7`;#5Q|K7~U|N98xe_O);7?;Zx^m262%lrJ0XXodb z2mt#A!79K9`9PljUp(DT*Z<$NHN0tmv%)$nIlawx_r`uAj%+h=!~%d^D1O_j*sl)Y zhVb@{WdBzRjwp2XQ+6zl;B6Vjk;xuuT8xdeGjil?WOQ+e=Hq8auAFC?suf47KLp@U zi8w;C|4YdJ_q$yzNF#nX;`|{m@-m2}y)JM{@U$;L2iTIuk$drd5OsGt8v;-DGZmy+?6Nh4)Go@Lqjbe&J9{W;|aJU z0l$mk0zM8$1?1bmi|7Aq`oHbIt-%J(Hu&6&9VBJ_xcNEeu?o9i!y~<>(|VNv;0Fy` z7yclWQ4bEoA!a!d!vgYesOY8Q|LTwmk6f+j^7rq43-f=xEg%1%oVak2MUlaYm$YA4fNWAvhKz2Vw+>u-oh}k(7UxiuBpke#cXn(lnEfi*ZpA;MK+TMboKWiYg@_5?ze*XgNJ>OEpBLSy)+E zh&xZ!$B?40(jC@ST3hm=37b~mY~O=@@J(*j9?6VhUAOBwDXtSdKD1N|+ zdZS)2aWX!ULQWncOAfn`r z1Fx%&yJCrxkzj8=0`_K3N+VE^mSk#+5wbv@^ZHIsx65qgTtlm~SW*o;r`e8L1iggz z{q;o27M2msNt9CF)@f!OWs_6jBJh z?VVJ+k_5vAL}C_NerR00&?1;UoJxRwIWwcLrHn21>8z9mN@?=)*!Ah&D~xx-H;yLM z<=M+j?25qnLW|Yv)2Y+t@rwFCHY5Il-y!i2-_Fl}e6Je)AKO3v!5fLNe%9migxo&B z0tk2*H=qfq?A-5ZBU!d;n-)|wsPVrjRg18fq@ znlgKibKH?y)Ues%l>SoV|9Heik^IQ1I~cQqym+cL)gO-EzB=cc@@$Fm$Co*j_U z(EPxP&pkX-txV8f{qcX?4&i@0BmaN<^FJt%?T!RlZy*o}a4wo-eH^6T1-wD<|NH&! zP@ezan*U#j|LOVvcQO9|-Sre`@?9AyaQB0UK^Qrgvr;sbWThY;^a!9BXqf7Qx%{$s(8B{_~f66uI~6@Ul;&-GPaVXZ?#v87BDu4~s>7 zRCs1%xd>V&f^a~O|2F3${05OlwpH?fKV&0hk_5`1i|``kA%q|sA-Hxf0uv0d9-oH` zg#sR)_8@P7^}#;W0PuO~)wzgPS)>ti5O5~KX`w5di*Rq@Nyz=9AC~>;Cb9Jb$j(a9 zsI-JbiUDj~t6Q5bC<<&~qv2qQD6@iOFbC)Blv(F$@xZWRC3Lex;p>XwTB!omzfD4Y z@~9rDmW#2$!Emc9RCSeDpsI4o|7+Nv%~o(reSm@{YK*X>KYw^Gh4TLjvhh-RuKwg7 zS^rN6ACGH17q(^Oxio)vCb2B?Y>*j1R}%C&B+e>6?>Rrw{~t2{|IvBwukR3^yEF3t zAop*Z^IV!iJnLosK@aC~2O=!bqW}Ql!XY2e)2usB|F`D<72>%~yLa2_>`S)hk2U;s zUC(ZJ?H|An`D`@>USl1%2S^mq)<*#qQ|~R>dx4N#zu7x(fd84adt95nxON{XRnpi5 z?f%)R+ zv(U7X;V7TtbF31W>CI#%+a`0&l1gCAA+x4#iB~J6spDAIqO+_b$ozXj=4;yiIlvc4a#pgo(5=c@DaKhXi&~*oZzDN%+jG%t z)8qe_Z1sO;E2rLnZ~h3F`cDv3|6>L7XEF5`5K%3VM606RX{>9nYveDeXqBpZZ<3LJ z;lRhfhmHJrTSg|>*7Pi$X_ud|8Ei_KXI%ZsQMdl ztouSfpWn@M5hlcY-983@{*cSZcwJsU$1|aPke}j4{`*fp1=(-O9JeLeZ~7_^E`L?f zAjVAobS^3>0J?}{u-vrP1Ax&ew9FyIV^kS%!~@ohk`+sbA`~mZF#3=fqzuqxR0uv- zFoaERU;>6=0mHBe1BKN$i^(e2#bmUy`2BP77?u+ibp4yPM2io=knc?=!4Z6$l>e6a z_MOjau7B8Ksh~XhZ zJc=vn;hmBHw*CG89+qR6Pzd1uI1my-tS`Vtc&{huV_iH=M_hUSe{23*A^*Rw|G$s( z|KHzgr*~z?zrX(|2to5i2%_NAWirAOAxP8#Z*`};Rk*v>HYK8KZ4`8YEXhrW0I&!_ zk7yBDL;NXd6fuiG8}dGHlKdmfH*aG32XD(L|AdCmU6{B$A6ypWi8#khEU?oTm1X&S z)s{ZqDe})3cZg|($UjyXbfFiJ&YL-g6A+&*8(}lmIw(~CU<0O+2pb9_D1ICW_*r+z z6ADB^Jl4zot^f;l2=nV77ngtT-guhi|8KMW|IOi8MICN*CA_*C^Yh>CHnwGS4Ft#B zBMYh$T2O=jx!Lo{>%;Rx&^vP_Sgl3?d!-BRKDz$@pLPiU+Zp-)+h6~ueJI2+9#05> z0K8ro&q5JTZ^Ro3gd$A9>&|x#6wkTC`2V}=BDT6n^FQA0YxqiKb#!ueLIFYnLIFa7 zokal>GrLU!xGfP@IghH@9B9dS%5^dMLj&73hP$3*3T%^!wv#dZ4w1<0Z8FO?CA6cs zp{NqzOoz!*woN9Pg=ZQmz-EqF%z*|aEjN(#LZkH_m}+-$@}yYm5wiaR9kMW2Dp!1jmbetLcw0RfEbQGSq{0C*sl3hR0zg95n? zof_UO3+RFs=dYGXes_{euC(0%Tb? z?FqSn5qr73`2XUmfqMM^2W|E5+df!s<@etFF#-aRDQ<7nlm{$|9gg>F@eCADr7bqy zRgB(R1iKK@Z$Y$<3UPYnW$_mjhU>iuhEz!g&c&9;S&81FYJ|4nI2d`J@rV2cHUGUfmG&JFiW`!9*? zc@NDZZ~qlZR(t2v3=sh+T2TS$9U=gcc!Lt+4Hz%a2M}06A_3ax_qq@t@`9Bl#3LV+Kngqr0Kf;^ zNX^}C1^}=r3@c~gDNw2r7fq~4l>v?S-3iwl+j4pZCSyxWK6+(lFwy6^awRIyP0t4V z2b0s)$^-4yA8xl(yaFWuzfAf+7eGNzfMbI}Q2sqM6y1$@eJm6N3_ zuW4+y?YRvN`49>a3J?kq3J?kq3J?lBZWMU^x&x{tlvZ);e3G9<>*X8Zh`uE;8l_l7 zC1hz)InWL8Rt=Sj^IH7?-5PEAuA9;W1+|h@a}ta7Sg2FLBNfRpF|OAgfa(Ns zBvUM-z?r1DHkO=>B88G7RBx2gLk=MlLLX}ae?{UVj0ntYZF(L-MZE$RT;LoChuLUv z37yDwF(n;VQ*nf+UQapzoSVFR#3NT}kDTS*D-fV;!2?(oplq#DwuVP;a}Z89!6kRJ zX4j`}wf1)~r$5=;W`C#gQ%!F+oOs+A{|>s}gSVy~ce+YkNOg|4o)mLdibka+EJ`Sd z(u9eu#E=zmWW*s6Y9FoOj6*Id%P6ku^^XjRrjWF=$V8JUn}FDlI1rGiB>};yWGvgX z4_dtw#pIgoQ24rHklaWKP_Zc)SH@TY&Ytj-sP$+BCl1pK9 z$VmvrlPN4~T~5fTKsrSo;FSIi5fVt@4r*Hn=oabQc(csnxfK*>wU}T@SYAU+*d~F? z6tKr*1dgg=a8yA4!>=zp?k<$b)ro0>)NS1Sl0}x_jGRbdUi&OvRxN#gGgQMGD_>E` z#-gO3`rI@*xx;6d)8J6d)8J6d)8J6d)AXxfCGQt@espx4;MU zfmhmPCO+SOhHAH%JPX-XEtY|T%2#M3XzP^#TgS21&)jNuym6#NQ^J@AcCem%PKyVc zm6&KIASlKxi!t$f#utYJg2ec&La{4UjG2c&DMghT70rqq#13(y0>}tT*8Nq2LoXYm zq$|1EA&R^4vR$_d(px8*C3@w_fCyocJ*AJ@r=f2;^#R2 zI!Q*X7)0Uk?vPx3l8jiMWJC@jcMw1c-L#L11U!D9%O7zEU5t-&(f+`yT>Rq6i1!lD z0U+=T56c3H$E_+oZq`T{qj-*)$NJhksdgm^ae$y98lt+1!{X{X`ojltzmU6a4L)80 zhntr7|2IE>+t`+o<(}oHX2p1a@ATD`$obJ8k9=6g=jEmha2 z?O7KQfY1};q9TN4h?bP%>C`Sol@b84C&qcSoF2BN8luuHB)G7ECzGm=Aw^+k0gkUj zN}xC+cB?B1q;zuvqiRiJA~yDRAB4dBJ{!w(abTNfcUT~&7-&iuSiljZb03P2)*}(_R%D3I`*P) zMhFS#grNRSYB#)V3rVD?VUbU#o`an*^6@^50O03BDCqJdHWK6_9P9Q(c)u&e`5y}Z z-(LTxHuy(AgaU*DgaU*DgaU*DJBR}J4?hpMw@W#-n&94&EZa(F*>1AdzlQ&94aMJV zT-cZa-{OCJIA5D)Wl#L(XN_$c;co}~6?uGeA>~Le;AJ?-cz1 w-`gSjKf(VmkN(g2BN09jbJr-T(jq delta 874 zcmZ`&OH30{6rJJq4Kszl+kzG9uRx;27*d-`+{v%}(H)5!Gfsw)KA2BsW{9|Hb=Smz zZB5wXM%Sc^Cax-bOx&0#aY0;&1YK50xi+FIeGWod(WMB-kof=DO>S9Jc&h) z<680^eZ07Sa|6x`h{XbCfU8gs|2ma6g9*s5-7jjX_*Q5Yy<5kNw9V`V=L^P;vYjz``u$ZEb-ALHMrgt?q-7i(^+NV%2 zKSS+#IZf4hU6a!bmSd@wj@u`TeX&S<0>vf!woV;QwwFvbwP2Z+YqyP~9^V0N7)o09 zRDDb~GFE&LI}sU0v4(@Rs;DW}%kmvuc%=9|7CuXcQ75mux-RR~ppHM3M4djbVn6O@ zI^9FX*Rk&5=0Ow{9c5Og=8SeHFn~Hm+ff{9J5;s(5aNPli-SgZ0VB`@d*mD0CBNY< zl;JVtz=0cN3!==M5&^bk~= zccZ$C!_^DcOiZ?-3%s^SRfk%poVIkTE)97b=Yu_lTnqdJ{GF}S-g-VMl&(K{B%Nb) z(0fGUtzvTngC^e35DU{B2?^8wgqUpZTF(y&IG4bM+0}cO`MGj-na}Wis2p16Kk+!% ziwpBd5<(z%5f_vrjOfqBaY2)$)tCKzYQMczs?LEO4t~K8_yQkchdo=A{Q%|Sj&+J) WsBrKV-oqQ%gvvo`rBuoEul)ftgabqX diff --git a/ai_agent_tutorials/ai_blackjack_game/ai_blackjack_agent.py b/ai_agent_tutorials/ai_blackjack_game/ai_blackjack_agent.py index 7306a59..31b1118 100644 --- a/ai_agent_tutorials/ai_blackjack_game/ai_blackjack_agent.py +++ b/ai_agent_tutorials/ai_blackjack_game/ai_blackjack_agent.py @@ -57,18 +57,39 @@ dealer_ai = ConversableAgent( "dealer_ai", system_message=""" You are the Dealer AI in a game of Blackjack. Follow these rules: - 1. Start with two cards, one face up and one face down. - 2. After the player finishes their turn, reveal your hidden card. - 3. Hit until your hand value is at least 17. - 4. If your hand value exceeds 21, you bust. - 5. Do not make decisions for the player; only manage your own hand. + - You will receive your current hand and the player's final hand value. + - Decide whether to 'Hit' or 'Stand' based on the rules of Blackjack. + - You must hit until your hand value is at least 17. + - If your hand value exceeds 21, you bust. + - Respond with only 'H' for Hit or 'S' for Stand. + """, + llm_config={"config_list": [{"model": "gpt-4", "temperature": 0.2, "api_key": OPENAI_API_KEY}]}, + human_input_mode="NEVER", +) + +# Define the Judge AI using AutoGen +judge_ai = ConversableAgent( + "judge_ai", + system_message=""" + You are the Judge AI in a game of Blackjack. You will be provided with the player's final hand and the dealer's final hand. + Your job is to determine the winner based on the rules of Blackjack: + + Rules: + - The player with the hand value closest to 21 without exceeding it wins. + - If both players have the same hand value, it's a tie. + - If both players bust (exceed 21), the dealer wins. + + Respond with: + - "Player" if the player wins. + - "Dealer" if the dealer wins. + - "Tie" if it's a tie. """, llm_config={"config_list": [{"model": "gpt-4", "temperature": 0.2, "api_key": OPENAI_API_KEY}]}, human_input_mode="NEVER", ) # Function to play a game of Blackjack -def play_blackjack(player_ai, dealer_ai, max_rounds=5): +def play_blackjack(player_ai, dealer_ai, judge_ai, max_rounds=5): for round_number in range(1, max_rounds + 1): print(f"\n--- Round {round_number} ---") random.shuffle(deck) @@ -84,13 +105,12 @@ def play_blackjack(player_ai, dealer_ai, max_rounds=5): # Player AI decides to Hit or Stand player_ai_message = f"Your current hand is {player_hand} (Value: {player_value}). Dealer's upcard is {dealer_upcard}. Do you want to Hit or Stand? (H/S)" - response = player_ai.initiate_chat( + player_decision = player_ai.initiate_chat( dealer_ai, message=player_ai_message, max_turns=1, ) # Extract the Player AI's decision - player_decision = response if player_decision not in ['H', 'S']: # Fallback decision if response is invalid player_decision = 'S' @@ -110,27 +130,34 @@ def play_blackjack(player_ai, dealer_ai, max_rounds=5): dealer_value = calculate_hand_value(dealer_hand) print(f"Dealer reveals hidden card: {dealer_hand[1]}") print(f"Dealer's Hand: {dealer_hand} (Value: {dealer_value})") - while dealer_value < 17: - dealer_hand.append(deal_card(deck)) - dealer_value = calculate_hand_value(dealer_hand) - print(f"Dealer draws: {dealer_hand[-1]}") - if dealer_value > 21: - print(f"Dealer Busts! Hand: {dealer_hand} (Value: {dealer_value})") + while True: + # Dealer AI decides to Hit or Stand + dealer_ai_message = f"Your current hand is {dealer_hand} (Value: {dealer_value}). The player's final hand value is {player_value}. Do you want to Hit or Stand? (H/S)" + dealer_decision = dealer_ai.initiate_chat( + player_ai, # Communicating with the player AI + message=dealer_ai_message, + max_turns=1, + ) + # Extract the Dealer AI's decision + if dealer_decision not in ['H', 'S']: + # Fallback decision if response is invalid + dealer_decision = 'S' + + if dealer_decision == 'H': + dealer_hand.append(deal_card(deck)) + dealer_value = calculate_hand_value(dealer_hand) + print(f"Dealer draws: {dealer_hand[-1]}") + if dealer_value > 21: + print(f"Dealer Busts! Hand: {dealer_hand} (Value: {dealer_value})") + break + elif dealer_decision == 'S': + print(f"Dealer stands with hand: {dealer_hand} (Value: {dealer_value})") break - # Determine winner - print(f"Player's Hand: {player_hand} (Value: {player_value})") - print(f"Dealer's Hand: {dealer_hand} (Value: {dealer_value})") - if player_value > 21: - print("Dealer Wins!") - elif dealer_value > 21: - print("Player Wins!") - elif player_value > dealer_value: - print("Player Wins!") - elif dealer_value > player_value: - print("Dealer Wins!") - else: - print("It's a Tie!") + # Judge determines the winner + judge_ai_message = f"Player's final hand: {player_hand} (Value: {player_value}). Dealer's final hand: {dealer_hand} (Value: {dealer_value}). Who wins?" + winner = judge_ai.generate_reply(messages=[{"content": judge_ai_message, "role": "user"}]) + print(f"\n{winner} Wins!") # Run the game -play_blackjack(player_ai, dealer_ai) \ No newline at end of file +play_blackjack(player_ai, dealer_ai, judge_ai) \ No newline at end of file