From 2778aa5fbf939bf6814255dd461f61d27ca8a222 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 3 Dec 2025 09:24:51 +0000 Subject: [PATCH] v1 --- ai/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 404 bytes ai/__pycache__/local_ai_api.cpython-311.pyc | Bin 0 -> 19874 bytes config/__pycache__/__init__.cpython-311.pyc | Bin 159 -> 159 bytes config/__pycache__/settings.cpython-311.pyc | Bin 5552 -> 5566 bytes config/__pycache__/urls.cpython-311.pyc | Bin 1557 -> 1652 bytes config/__pycache__/wsgi.cpython-311.pyc | Bin 679 -> 679 bytes config/settings.py | 1 + config/urls.py | 1 + core/__pycache__/__init__.cpython-311.pyc | Bin 157 -> 157 bytes core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 212 bytes core/__pycache__/apps.cpython-311.pyc | Bin 524 -> 524 bytes .../context_processors.cpython-311.pyc | Bin 763 -> 763 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 209 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 372 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 1364 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 168 -> 168 bytes core/templates/base.html | 3 + core/templates/core/index.html | 150 ++--------------- core/urls.py | 2 + static/css/custom.css | 143 +++++++++++++++- staticfiles/css/custom.css | 152 ++++++++++++++++-- story_writer/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 165 bytes .../__pycache__/admin.cpython-311.pyc | Bin 0 -> 220 bytes story_writer/__pycache__/apps.cpython-311.pyc | Bin 0 -> 547 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 217 bytes story_writer/__pycache__/urls.cpython-311.pyc | Bin 0 -> 500 bytes .../__pycache__/views.cpython-311.pyc | Bin 0 -> 1792 bytes story_writer/admin.py | 3 + story_writer/apps.py | 6 + story_writer/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 176 bytes story_writer/models.py | 3 + .../templates/story_writer/index.html | 93 +++++++++++ story_writer/tests.py | 3 + story_writer/urls.py | 9 ++ story_writer/views.py | 30 ++++ 37 files changed, 445 insertions(+), 154 deletions(-) create mode 100644 ai/__pycache__/__init__.cpython-311.pyc create mode 100644 ai/__pycache__/local_ai_api.cpython-311.pyc create mode 100644 story_writer/__init__.py create mode 100644 story_writer/__pycache__/__init__.cpython-311.pyc create mode 100644 story_writer/__pycache__/admin.cpython-311.pyc create mode 100644 story_writer/__pycache__/apps.cpython-311.pyc create mode 100644 story_writer/__pycache__/models.cpython-311.pyc create mode 100644 story_writer/__pycache__/urls.cpython-311.pyc create mode 100644 story_writer/__pycache__/views.cpython-311.pyc create mode 100644 story_writer/admin.py create mode 100644 story_writer/apps.py create mode 100644 story_writer/migrations/__init__.py create mode 100644 story_writer/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 story_writer/models.py create mode 100644 story_writer/templates/story_writer/index.html create mode 100644 story_writer/tests.py create mode 100644 story_writer/urls.py create mode 100644 story_writer/views.py diff --git a/ai/__pycache__/__init__.cpython-311.pyc b/ai/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4c467688bf55033015901c1be01e7a5acfb180e GIT binary patch literal 404 zcma)(ze__g5XbX=w3X80>=xX*G?SYM1rtP-loeR={hoEm>-N y=M3XOm?V@+B|W7>v)=6;S6b91oY-EF$J5Z2spqKI0pV@_P{g literal 0 HcmV?d00001 diff --git a/ai/__pycache__/local_ai_api.cpython-311.pyc b/ai/__pycache__/local_ai_api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d4482ffefe53af0b8bc9aab25a0ab0ea4583f78 GIT binary patch literal 19874 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 delta 20 acmbQwIG>ScIWI340}vQ{e#)50GZ_Fd1qB`e diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 5be02db206d695487566bb415cb6b1e287631fb4..038d89556aa133814762e6766f9a032a75bba5d4 100644 GIT binary patch delta 155 zcmdm>y-%BWIWI340}#mn(9ew6$lJxi$T4{a#~i*}JjEsXMV0a8MVTe3MVn1Hg_+sp zf$EC1Hv94%XJTBvS(M+E$9+M3}+PN5Muhk03#asK8S2K7j9<)0EzG;p8x;= diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index 28817aa35512298e6df4bc5c0b678c917f71e36c..33409652316e706222932c7102ef17ad6c5d024d 100644 GIT binary patch delta 250 zcmbQr^Myx!IWI340}#Cap`V$+!octt#DM`0DC4uyMD>0iCWchj6iy(?lEO7{maHyw z6i+I97B5V3kx42@312B(+Gdv?!-|^H*jyMka2?$+E09W>OQv zCxl;+HMl5hctzCkB8$-#7NZ+191SiVLLK29;S-`S@+w~8RlLZebcIFf13L>pQv>%0 Jp2=HT69C60Jdywa delta 149 zcmeyuGnGeuIWI340}#kssATG}Ffcp@abSQQ%J|GRQN5ojooV6&aZ%1x_AEY_f)uVQ zZU%-m+>;#`MJ6jS$}@skqMSUz3@JdY$-6m@aX-^$D;70IrjHDhlUQqHggU}I!Y4#u dT4GX=x| delta 20 acmcb@c!iN?IWI340}y=Q^($i{&j|oPLI(N( diff --git a/core/__pycache__/apps.cpython-311.pyc b/core/__pycache__/apps.cpython-311.pyc index 6435d92a257f85ac41d6fd22a9e528c3da4a1ec5..d88343ac542bc7d6c0ded99df9ac4fba5489b44b 100644 GIT binary patch delta 20 acmeBS>0#kn&dbZi00ha8^fMRoFaZEASp0#kn&dbZi00hRKpE4HmFaZE9J_LOL diff --git a/core/__pycache__/context_processors.cpython-311.pyc b/core/__pycache__/context_processors.cpython-311.pyc index e85aca40f0f4920ee0b279872e312058145a2a15..be1bbaa28a16d688d48fcdde1ad6477324df5cf0 100644 GIT binary patch delta 20 acmey(`kR$|IWI340}v!X(%;Dafe8RW4F&lC delta 20 acmey(`kR$|IWI340}$+-qq33v0}}v1j0OGx diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 9aa598b9d5171b2bb0d207f045e07f9fbbb95a64..deb30fc43b8493c678c9f8562aff11128fa5369b 100644 GIT binary patch delta 20 acmcb}c#)B3IWI340}v!X($Ad8a})qLz6HAg delta 20 acmcb}c#)B3IWI340}!mp_?0n{=O_R>xCT%F diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 1f807fae1897c89361c99c5e868a26d00799b73f..dd76db5b5a19932d49a72196af8733c17d2fc661 100644 GIT binary patch delta 191 zcmcc3^o5CcIWI340}y=sp`Tehkynz@VWPTheF{qy3ll>sV+w03a|+uU_GQcr46A_{ z0@4|ySW`HH88kUxf&?@fZ?P04mSntSgmN%7U?Zi#KTmnF8kfFu?lQ|i6SRZf; PHgHTfWmIC}0}28F?*=b~ delta 114 zcmeyubeoBHIWI340}vcY|CNz7kynz@W}>>R3KK&rV+u + + + {% block head %}{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..6332ce3 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,17 @@ {% extends "base.html" %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}Creative Story Writer - Unleash Your Imagination{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+
+
+
+
+

Creative Story Writer

+

Harness the power of AI to bring your stories to life. Overcome writer's block, generate new ideas, and craft compelling narratives with ease.

+ Get Started
-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
+ {% endblock %} \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index 6299e3d..622ef9d 100644 --- a/core/urls.py +++ b/core/urls.py @@ -2,6 +2,8 @@ from django.urls import path from .views import home +app_name = "core" + urlpatterns = [ path("", home, name="home"), ] diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..49b8737 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,145 @@ /* Custom styles for the application */ +@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Inter:wght@400;600;700&display=swap'); + body { - font-family: system-ui, -apple-system, sans-serif; + font-family: 'Inter', sans-serif; + background-color: #f8f9fa; + color: #343a40; + overflow-x: hidden; +} + +.hero-shapes { + position: relative; + background: linear-gradient(135deg, #f8f9fa, #e0e7ff); + overflow: hidden; + padding: 100px 0; + animation: gradient-animation 10s ease infinite; +} + +@keyframes gradient-animation { + 0% { background: linear-gradient(135deg, #f8f9fa, #e0e7ff); } + 50% { background: linear-gradient(135deg, #e0e7ff, #f8f9fa); } + 100% { background: linear-gradient(135deg, #f8f9fa, #e0e7ff); } +} + +.shape { + position: absolute; + border-radius: 50%; + background-color: rgba(0, 123, 255, 0.1); + animation: shape-animation 20s infinite linear; +} + +.shape-1 { + width: 200px; + height: 200px; + top: 10%; + left: 10%; +} + +.shape-2 { + width: 100px; + height: 100px; + top: 60%; + right: 20%; + animation-delay: 5s; +} + +.shape-3 { + width: 150px; + height: 150px; + bottom: 10%; + left: 30%; + animation-delay: 10s; +} + +@keyframes shape-animation { + 0% { transform: translateY(0) rotate(0deg); } + 100% { transform: translateY(-100px) rotate(360deg); } +} + +.container { + max-width: 1200px; + position: relative; + z-index: 1; + animation: fade-in 1.5s ease; +} + +@keyframes fade-in { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +h1.display-4.fw-bold { + font-family: 'Playfair Display', serif; + font-weight: 700; + color: #212529; +} + +.lead { + color: #6c757d; +} + +.btn-primary { + background-color: #007bff; + border-color: #007bff; + border-radius: 50px; + font-weight: 600; + padding: 15px 30px; + font-size: 1.2rem; + transition: background-color 0.2s, transform 0.2s; +} + +.btn-primary:hover { + background-color: #0056b3; + transform: translateY(-2px); +} + +/* Story writer specific styles */ + +.card { + border: none; + border-radius: 15px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + transition: transform 0.2s; +} + +.card:hover { + transform: translateY(-5px); +} + +.card-body { + padding: 2rem; +} + +.card-title { + font-weight: 600; + margin-bottom: 1.5rem; +} + +#editor, #suggestion { + border-radius: 10px; + border: 1px solid #dee2e6; + padding: 15px; + font-size: 1rem; + line-height: 1.6; + background-color: #fff; +} + +#editor:focus, #suggestion:focus { + outline: none; + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.spinner-border { + width: 3rem; + height: 3rem; + color: #007bff; +} + +.center-spinner { + display: flex; + justify-content: center; + align-items: center; + height: 100%; } diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 108056f..49b8737 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -1,21 +1,145 @@ +/* Custom styles for the application */ +@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Inter:wght@400;600;700&display=swap'); -:root { - --bg-color-start: #6a11cb; - --bg-color-end: #2575fc; - --text-color: #ffffff; - --card-bg-color: rgba(255, 255, 255, 0.01); - --card-border-color: rgba(255, 255, 255, 0.1); -} body { - margin: 0; font-family: 'Inter', sans-serif; - background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end)); - color: var(--text-color); + background-color: #f8f9fa; + color: #343a40; + overflow-x: hidden; +} + +.hero-shapes { + position: relative; + background: linear-gradient(135deg, #f8f9fa, #e0e7ff); + overflow: hidden; + padding: 100px 0; + animation: gradient-animation 10s ease infinite; +} + +@keyframes gradient-animation { + 0% { background: linear-gradient(135deg, #f8f9fa, #e0e7ff); } + 50% { background: linear-gradient(135deg, #e0e7ff, #f8f9fa); } + 100% { background: linear-gradient(135deg, #f8f9fa, #e0e7ff); } +} + +.shape { + position: absolute; + border-radius: 50%; + background-color: rgba(0, 123, 255, 0.1); + animation: shape-animation 20s infinite linear; +} + +.shape-1 { + width: 200px; + height: 200px; + top: 10%; + left: 10%; +} + +.shape-2 { + width: 100px; + height: 100px; + top: 60%; + right: 20%; + animation-delay: 5s; +} + +.shape-3 { + width: 150px; + height: 150px; + bottom: 10%; + left: 30%; + animation-delay: 10s; +} + +@keyframes shape-animation { + 0% { transform: translateY(0) rotate(0deg); } + 100% { transform: translateY(-100px) rotate(360deg); } +} + +.container { + max-width: 1200px; + position: relative; + z-index: 1; + animation: fade-in 1.5s ease; +} + +@keyframes fade-in { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +h1.display-4.fw-bold { + font-family: 'Playfair Display', serif; + font-weight: 700; + color: #212529; +} + +.lead { + color: #6c757d; +} + +.btn-primary { + background-color: #007bff; + border-color: #007bff; + border-radius: 50px; + font-weight: 600; + padding: 15px 30px; + font-size: 1.2rem; + transition: background-color 0.2s, transform 0.2s; +} + +.btn-primary:hover { + background-color: #0056b3; + transform: translateY(-2px); +} + +/* Story writer specific styles */ + +.card { + border: none; + border-radius: 15px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + transition: transform 0.2s; +} + +.card:hover { + transform: translateY(-5px); +} + +.card-body { + padding: 2rem; +} + +.card-title { + font-weight: 600; + margin-bottom: 1.5rem; +} + +#editor, #suggestion { + border-radius: 10px; + border: 1px solid #dee2e6; + padding: 15px; + font-size: 1rem; + line-height: 1.6; + background-color: #fff; +} + +#editor:focus, #suggestion:focus { + outline: none; + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.spinner-border { + width: 3rem; + height: 3rem; + color: #007bff; +} + +.center-spinner { display: flex; justify-content: center; align-items: center; - min-height: 100vh; - text-align: center; - overflow: hidden; - position: relative; + height: 100%; } diff --git a/story_writer/__init__.py b/story_writer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/story_writer/__pycache__/__init__.cpython-311.pyc b/story_writer/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a073f040c769fbdbed232d1da36ac0c7720a1971 GIT binary patch literal 165 zcmZ3^%ge<81X4frGePuY5CH>>P{wCAAY(d13PUi1CZpdter~FM zX;NukNvVEnMQU?%JijQrxF9h(RlgX>t&A@($}CAO(gz!JtG&rB-5K%#th&3<#-!U_k290V#`>)@}*pg%hiksRRF^NbDfQ zpXpd-WnwET1L}mGqzD9O`|dm6-FNmq)oNuB()=`?2Vq~Ovyws%7KQ*5AV81{9NmB)ufXD zQ4%pZ*^H_xQJT0e(6YFnedmB}2v-g?IumNHB7|nJGyT2iYYJ-4;jg+cz02E=e?n=q EFLCUQaR2}S literal 0 HcmV?d00001 diff --git a/story_writer/__pycache__/models.cpython-311.pyc b/story_writer/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8efd7aa68831b27e753e62b36c0b30e813cfb95 GIT binary patch literal 217 zcmZ3^%ge<81X4frGcAGiV-N=hn4pZ$LO{lJh7^Vr#vF!R#wbQch7_h?22JLdAO)I? zx7c#?Q&Mw^{WO_wai(M?=B4NBr6d(G10`27do?nz*T#%TYs$UG`R>qeXWtOBC=|hauE2#X%VFP5B=A_ycaR7~B1ma>@An}2j Rk&*ERgUkhNsE7@y0su&{H|_uc literal 0 HcmV?d00001 diff --git a/story_writer/__pycache__/urls.cpython-311.pyc b/story_writer/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87a6eb9d80b28bc3df76b46b20de733fb7daaca8 GIT binary patch literal 500 zcmZ8dJx{|h5VaGhO`Ap)FoBRdF;s$NVMHA&W){Sfr82eErsPX@LR+Se{Rc2Ife;M* zlvHG>G9fW_tJH~3*pwp5`Fy@Ry}Nt9N7F0=A<3uhzKQok25Tw&IEz3yw}1cwJ>WwJ zLO>LvdWx?)s_>D66hI--sM^!k#ia03d{6;+7I!7z7+ql2eE})`$8;2@NXqA+Zp>s+ z9p)&)ad!q+fp+cEKF=#W4%x8PXKqYc4sy*62pvdpfPH#nV)qDh?(!H1v7J}2+xiX9 z>UwUF9u7L8l`xMpNskq!k<@b?M^Q_5VUi`2%gGG^6fDH7fIoqSNP*?C-3@(eCznYO zCpI0>b|N_0{g7Sp2)C*Im!d5vS!QFDTt8EVcowW^E^d016U F`vUIer97>7O;HGhVhznIWnu)Z|YFC+= z^@os)4>_1pXbBVxnu1ShLUPZwf5NKhAQlXT;zMsL&Y}3!nT@Slaq~3$^yba)ea^?P z!^1Ja=<+{#>yiw>pL}vc;<0deg$cU=0w~y^CaeeomqlBwNh?w)OSW87R+LbdZFNP3 z$^)av;L9LJ+@BT;~=db=M(?&0{y*vS}|C7wgtiSvZc( z|5#o?V&CBmW4nN!T5GbL92ypI>+JJyJKzC_mtC%|h!WSKkccr`4D@Qe_{} z8QTW?TI$EFKRMsl3LUNB%Y{Rx1_On0i?FcgER9{z1gjhp5)|%*CE*v8BaUgcUnax$ z^^ckLvwl;ygr=~^TXu$^2&KVhZHaHh%4e_=)&6t2$}0^CDo}+H7=0wdAsB0lKLe;W zCC1~wC|p|+E#b8c<)-|G42K7iI5QA4auTyC58}2InmSnn0FE@3*JCb&0Ym~OEdi#U zj}G?Z3`%FHv9qYz@ufh%`PuRpff62p00e3syR|wE6w9f5G*HPVp{Ul#+;%;~#K zGDaq~){wzZrR7u%lMstg)1kRpF_5uqqaadt9f}+p$R0tsF?kI!Q;Qh1ii|LlL0sdm zi9d|R8W&=*C3pRzQMZvvkiji2$3v&E>lUrDz(+zZh!C$_MuY@0;#Df_bJk0C#MsqQS<2KSjdamjGi?hpba<7F8lqJf z=B%GMZYWS+%>#LrUGqS(T@#W(zT?8pKw@DqKR`huYziu!L=56+gJQExOOy)=!_2BU z%AqnesfkCJh?9IC?c2y4OSnHHBs|2|-kWJBGo55+N9m@!r3{>gXjuUOLdyt+YS$kw3BU+p@0}+gh=s z6@9sg`5kAwmxQaPQ*m>o>SD@XLxTB}5@^TjDy8*scY=gz>P{wCAAY(d13PUi1CZpd2KczG$)vkyYXeP+kVtyd;ftit!@dE>lC}IYR0RSaSEJpwU literal 0 HcmV?d00001 diff --git a/story_writer/models.py b/story_writer/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/story_writer/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/story_writer/templates/story_writer/index.html b/story_writer/templates/story_writer/index.html new file mode 100644 index 0000000..cde521e --- /dev/null +++ b/story_writer/templates/story_writer/index.html @@ -0,0 +1,93 @@ +{% extends "base.html" %} +{% block content %} +
+

Creative Story Writer

+
+
+
+
+
Your Story
+
+
+
+
+
+
+
+
+
+
AI Assistant
+

Let the AI help you write your story.

+
+ + + +
+
+
AI Suggestion
+
+ +
+
+
+
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/story_writer/tests.py b/story_writer/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/story_writer/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/story_writer/urls.py b/story_writer/urls.py new file mode 100644 index 0000000..17c759f --- /dev/null +++ b/story_writer/urls.py @@ -0,0 +1,9 @@ +from django.urls import path +from . import views + +app_name = 'story_writer' + +urlpatterns = [ + path('', views.story_writer, name='index'), + path('ai-assistant/', views.ai_assistant, name='ai_assistant'), +] diff --git a/story_writer/views.py b/story_writer/views.py new file mode 100644 index 0000000..9fa74a2 --- /dev/null +++ b/story_writer/views.py @@ -0,0 +1,30 @@ +from django.shortcuts import render +from django.http import JsonResponse +from ai.local_ai_api import LocalAIApi +import json + +def story_writer(request): + return render(request, 'story_writer/index.html') + +def ai_assistant(request): + if request.method == 'POST': + data = json.loads(request.body) + story = data.get('story', '') + prompt = data.get('prompt', '') + + response = LocalAIApi.create_response( + { + "input": [ + {"role": "system", "content": "You are a creative writing assistant."}, + {"role": "user", "content": f'Here is the story so far:\n\n{story}\n\nNow, please continue the story with a {prompt}.'} + ], + }, + ) + + if response.get("success"): + text = LocalAIApi.extract_text(response) + return JsonResponse({'suggestion': text}) + else: + return JsonResponse({'error': 'Failed to get a response from the AI.'}, status=500) + + return JsonResponse({'error': 'Invalid request method.'}, status=405) \ No newline at end of file