From 10eb273b87fca230ffe168e54078566a03f44dfd Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Mon, 27 Nov 2023 17:11:56 -0500 Subject: [PATCH] Initial commit with the basic bones of the app and webpage up. Need to fill in the functions and routing next. --- .flaskenv | 1 + __pycache__/apicalls.cpython-310.pyc | Bin 0 -> 199 bytes __pycache__/config.cpython-310.pyc | Bin 0 -> 409 bytes __pycache__/config.cpython-311.pyc | Bin 0 -> 563 bytes apicalls.py | 1 + application/__init__.py | 7 ++ .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 339 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 340 bytes .../__pycache__/apicalls.cpython-311.pyc | Bin 0 -> 218 bytes .../__pycache__/routes.cpython-310.pyc | Bin 0 -> 2018 bytes .../__pycache__/routes.cpython-311.pyc | Bin 0 -> 1815 bytes application/routes.py | 67 ++++++++++++++++++ application/static/styles.css | 66 +++++++++++++++++ application/templates/head.html | 19 +++++ application/templates/header.html | 3 + application/templates/index.html | 44 ++++++++++++ config.py | 4 ++ requirements.txt | 59 +++++++++++++++ 18 files changed, 271 insertions(+) create mode 100644 .flaskenv create mode 100644 __pycache__/apicalls.cpython-310.pyc create mode 100644 __pycache__/config.cpython-310.pyc create mode 100644 __pycache__/config.cpython-311.pyc create mode 100644 apicalls.py create mode 100644 application/__init__.py create mode 100644 application/__pycache__/__init__.cpython-310.pyc create mode 100644 application/__pycache__/__init__.cpython-311.pyc create mode 100644 application/__pycache__/apicalls.cpython-311.pyc create mode 100644 application/__pycache__/routes.cpython-310.pyc create mode 100644 application/__pycache__/routes.cpython-311.pyc create mode 100644 application/routes.py create mode 100644 application/static/styles.css create mode 100644 application/templates/head.html create mode 100644 application/templates/header.html create mode 100644 application/templates/index.html create mode 100644 config.py create mode 100644 requirements.txt diff --git a/.flaskenv b/.flaskenv new file mode 100644 index 0000000..5630929 --- /dev/null +++ b/.flaskenv @@ -0,0 +1 @@ +FLASK_APP=apicalls.py diff --git a/__pycache__/apicalls.cpython-310.pyc b/__pycache__/apicalls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ef8c5b94e07c7dfb9de7a61b79ee08a53fe33b0 GIT binary patch literal 199 zcmYjKK?=e!5ZtsLL@D$EexQe%4~PhQE`oUR7Mf66l5EJP2cP7ZiZ@Sw!IN804(!a% z!pve(tboxxwb`(~X7i7X&4GtXCJkCxaN;He=(Ks3`+kOo&a?DzSr|Ai+u>1V&!TVq@YJ zn6OhM@=15T?|k}vpT&6W1B2NoWq0QMvSbLykf{lEY7zw$Rv-flKoP}zKrw@_I71Ys zAauUX1Xva}4}lGtn&=f6$RGt7VtD7g9Z~oWn}DLsrPwNHcP{wDw#@u=wOl0Y)pfFY z36$XFq>-X-+GRM>9w9uh86nyyq!zTRY<*0~W0zNdH%KTwV*F_<1=qM_t@hJ+zK%EK zD!%;y(t7UG&n&u8Osa?rS<772ol=ZPm!jxu##;2Tow$39)ny*RHs?0)6lQ-9r`F0q^`^;sOpd&@Z4=Vd?+? literal 0 HcmV?d00001 diff --git a/__pycache__/config.cpython-311.pyc b/__pycache__/config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b517fcc77573607cde37d70435f73430916e408 GIT binary patch literal 563 zcmZut&r1S96n?X7nwG`VEy!bFV0-HnMwtmkDrrG`nar6)ad);E4eI2fL+1#*b~2(% ze@a1z+H0q7hMhb$v$_$~d(3;^`!VyqH+S)P45X~Q5qc#3y9xrC7=yu*1YICNP!lZB zAO}Rd1fo;a(*Yjj8HuG4RDxvaLxuV3IP1HhXRsy1E>N%#0ZXHLBNVjV27E!n_XPEj zRLJLwdxhO%`C>{irbyV4w2G$y5Wn-P{+H3)5lT<`rSL zg`keP$*OIeIxS%qIcw0W1U0vn`Za`E^@m(`&$-&wH|jgYqBNZ!eKqE8=DUgO#O?I6 zk$N#wPe%H2p|h=&&jc5fI*&^1h1szp8@(7;Rlj9cqT%G~Xw5V?WT<{lY)I4B5kjvJ X?fBXcA+*+qzvk-TQ)R#YDft}VWCVmr literal 0 HcmV?d00001 diff --git a/apicalls.py b/apicalls.py new file mode 100644 index 0000000..abba327 --- /dev/null +++ b/apicalls.py @@ -0,0 +1 @@ +from application import app diff --git a/application/__init__.py b/application/__init__.py new file mode 100644 index 0000000..36df6ff --- /dev/null +++ b/application/__init__.py @@ -0,0 +1,7 @@ +from flask import Flask +from config import Config + +app = Flask(__name__) +app.config.from_object(Config) + +import application.routes diff --git a/application/__pycache__/__init__.cpython-310.pyc b/application/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37c43bbc4776893bd7777b3189c141c6d87d4a67 GIT binary patch literal 339 zcmYjMJ5Izf5VhmY64-3REmG{dp`btr2}B7m2f3 z_OS%^`QK;qq%J!4Osd6i+$I$b`MqrLEf&jLqx*4qs7^!PC(dPYA}re@?UHOLgwTxw zAp&cx4XfT6CCuv%T3??>MviUcN29mSOdc?-X51HX>9J$@d*m+&4!Jf?xdzpQ2%6uS zc2b}{@+W7~QRIX58#H>@*eGQ^pB>~vjC%A!Z0&m}u9WE}3D-1gU=k`xNsFwcWp)5a CH(jCt literal 0 HcmV?d00001 diff --git a/application/__pycache__/__init__.cpython-311.pyc b/application/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85e8119a82e8d0fbd0b606ce39a3f8466f611e9e GIT binary patch literal 340 zcmY*VJxc>Y5S_jCLNKPW5r4uJ$y!;7l}IWT#O9jixEsUi?FYMig}`%$q9i3kYMsk z06s#lkkhb{G&^}(CD)MA?jxX!J1nBz@{-+HG?qzagek0OtwqVsRM`rY&ax|`?ywAGs@=#cIUQ-Egm!Gh zi*a7d+HpSC56k|EP*vODso4wu@fdp?$`2)kbZ{`=j;=SD;q&BCJ*gS(;BdYjCO-2I D8`WVr literal 0 HcmV?d00001 diff --git a/application/__pycache__/apicalls.cpython-311.pyc b/application/__pycache__/apicalls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00cea2cb63e3b509eb81c57e338c81b9a8de3220 GIT binary patch literal 218 zcmZ3^%ge<81oN+^q>2FP#~=<2FhLogg@BCd3@HpLj5!Rs3{eb>3@J>(44TX@K?+tf z-eOKHDDW#{25}fZgT#Kh>xUMn78UE~AU17m*%GCl@#j-6y;~7 zCIcDi1tq%0`FZKO1x5L}1tt1GlYlrgIWZ@vSg)Y+7l%!5eoARhs$CHW&|F3!E|vun TAD9^#8E-HMU%-Zn*nlbkEKoTA literal 0 HcmV?d00001 diff --git a/application/__pycache__/routes.cpython-310.pyc b/application/__pycache__/routes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea6d95268f2e79e44d40c42cea8bb713c3d595a1 GIT binary patch literal 2018 zcmbtVOLH4V5Z>8`w0hf#llblRD~XDd1-1(Uq$rFnI|lqHTRAY7t+i$(ue}d3vnmr6 zoPeYMgUv0)kKsNS4xD_>Emc(L8OcHk#VM7YiVKCT2G5_Pl>T99+Fx=r z{D4mT5*Eiu(};#Of`}d;6`AE7Pi6^P9b^D4AP;EZ6#YlCd}YWn8n#J zhjU7o3i4qA7nGb1ieU+tkVZ>qBWI%&UELw}H6ocy1iBo_lH4VtCHF41NuCz2#;!F| zn9@iQR*8&U8u(sIBcs0|d>{B7;19@MGS<@ZIMvT4z?*x&>Ju8CRJ;4+f!a;c($zE> zhkGW-->Pta<1qr@#&H>t-B`gPc9CZ64L??l-mXZf1L`bm&K&g!1lm z%o<(=c7A2;q|$12nyZ!X*WC|Sq}WZZG`z+sIMa`7yKDd;Vz|tWypZ0?ZMYK`A@2CX zCGkZR#2zW9yT)pDy=$yVvM$MLb+v1JTz%3tJ_TZav|4>qP7Aal&{qO&3bZ9qO`vUo zb_6wo)@sj`qri1yH8k+&8$m_l8b50qrMllPS z$HNZiG^%dJjZR3TgjWw)d`24}K;|m4^p#%8t5BD~Z+Oz1DvM2^v~k1^r4!Pqbt0CEEYjwIN9sTa5Osx_-nHro8(A)UV_Prp^|C{qF_L zfwxTNe#qz`2TYmI_RXKu7gc$1Q4$%#ds!{^tx9NfzqK~7y!^hFZ~X5fD4Q&k?PGa zVKwEvQ=OokU_~&*WRjTt*J1JsCOcN7c;95sEg+-b{kCeoe$ z6_ahsLN9^_a{JTI4g6+r-kGP+lI#(Dk4yF4y_$QxyR*Mhe|}Uu#wJWQpi(0W9&h-* z8_*0Ya?*73Mu#K+|j)bK;PIZ++z5*(fm|_wFgWSmB25B%@CmPDHLcU6}{S<~^ zC!k-*Lh@%oOwBfIWJ7}U<`~MuZ%of4UDr_&=_vKLZOQjVD1mKdk)48Nyt7gx$b9n; D*t_fM literal 0 HcmV?d00001 diff --git a/application/__pycache__/routes.cpython-311.pyc b/application/__pycache__/routes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02ffc1585b455d714926dcc73694349c2d47e7f6 GIT binary patch literal 1815 zcmah}%}*Og6rcUD*Y;uz!6ZNtF;b<(5ypWc2URFil@h2>QWEGPTPdr>GuTV^!w8kX`yrG>@J7UON0^T3}kW&$1$Eac!h^q0GXf&rl^R4Tr@&v zSP2Jw$dF7)k<5q^F{4T}kcEwyDJycoOGb|wSK=HZ@r~ZjwFij~cX{R!;Wzp^5*#^% zHyy)hw_3D&%^}c_;#f`YmXo;J-?0IW_{Npa3iott;`lB)gw5lQ0#XJ@68ApinSc%k z)`Oi*oWOlJQR_bh43A;78~Dht1S5Url!?-uAG&X7&a;PU-cL|sVM0}xm?cAVi7z?C zadg`PEootSb>=g}NDF=h!=9^~#E&pqu`S|98Hb7CYM?7FYi?^^8~?`w$FN-M={|i0rQ;7Pqc+WJ8GuC3e6p4)6w2$Zc2Aj z+L~Q*C1($ zhQW|B$9<87(vK8~MJP+5m{T%9NwWz zovdY3lWLAxb{t}5KezK`lUS~kU8eR1$pZs$WE|TnWZHgZA>#}^uep%4SqlCUXR`F2 zA1e@7ZEMi$a0RPcrwpWu{_GiO4otmG4!!u|=cN}*2RG}WN2<#G~qBGdcPudE+E`qn=DRlIiM$=Jkp17xuoa zi=%Jlk^Q-&Z#+3ymvap{=ZU#9xET2nRW&u;Qq|Q;bZYv}9tfqabOf?JJraw|5)YL4%T0Q>-sD{4YF8WY_Yk(tjf~B9T`T{Lmzag4pceDEb z5SfDrmkn~4PQj9uuQLs_C2$<6G$eNd$4D9{T8VZ=z}Mzk3r6 zdELF)Z4O7hL&9$C4eCEZ{rk%P<5$WN|I5=?Pd(IMM-vS+;h~A<_^pHC*VEp3u0Eb? zjOVIC1C6!9h?lDayTg04buQW9k}W>U-Dx2p?*+sUUPy+J*t1tT5r#csxGBojd%Fui deZ2qm>lsg+t&6h_aTb_%ZwW{o0kr_rzX69T$+`dl literal 0 HcmV?d00001 diff --git a/application/routes.py b/application/routes.py new file mode 100644 index 0000000..0c07e61 --- /dev/null +++ b/application/routes.py @@ -0,0 +1,67 @@ +""" +Flask app that uses gpt4all to generate random song writing prompt. +""" +import os +import string +import random +from flask import ( + render_template, + session, +) +from gpt4all import GPT4All +from datetime import datetime, timezone, timedelta +from pathlib import Path +from application import app + +app.config.update(SECRET_KEY=os.urandom(24)) +app.permanent_session_lifetime = timedelta(minutes=30) + +MODEL = GPT4All( + model_name="orca-mini-3b-gguf2-q4_0.gguf", + model_path=(Path.home() / ".cache" / "gpt4all"), + allow_download=False, +) +TIME_SIGNATURES=["2/4", "3/4", "4/4", "2/2", "6/8", "9/8", "12/8"] + +# Need to decide between manually entering this list or using ascii_letters, below +KEYS = ["A", "B", "C", "D", "E", "F", "G"] +SIGN = ["b", "#"] +# Option 2 +MINOR = string.ascii_letters[0:7] +MAJOR = string.ascii_letters[26:33] +# and then use this: +# output = random.choice(KEYS)+random.choice(SIGN) + + +@app.route("/") +def main_prompt(): + """ + Main function that loads the prompt + """ + return render_template("index.html", title="Home") + +@app.route("/") +def prompt_instrument(): + pass + +@app.route("/") +def prompt_key(): + pass + +@app.route("/") +def prompt_timesig(): + pass + +@app.route("/") +def prompt_all(): + pass + +@app.route("/") +def prompt_influence(): + pass + response = MODEL.generate("The writing prompt is about the weather:", temp=0) + session["list_response"] = response.splitlines() + + +if __name__ == "__main__": + app.run(debug=True) diff --git a/application/static/styles.css b/application/static/styles.css new file mode 100644 index 0000000..5f659b6 --- /dev/null +++ b/application/static/styles.css @@ -0,0 +1,66 @@ +/* 1.0 - Foundational Styling */ + +:root { + --primary: #66C92D; + --text-light: #FFFFFF; + --text-dark: #101314; + --background: #667E8A; + --background-light: #E5E9EB; + height: 100%; +} + +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: inherit; +} + +body { + background: linear-gradient( + 15deg, #ff97c0, #ffa964, #ffff8e, #00ffc8, #d26aff + ); + background-size: 700% 550%; + animation: gradient 7s ease-in-out infinite; + color: var(--text-dark); + font-family: 'Space Grotesk', sans-serif; + background-color: var(--background-light); + box-sizing: border-box; + text-align: center; + width: 100%; +} + +@keyframes gradient { + 0% { + background-position: 0% 79%; + } + 50% { + background-position: 100% 22%; + } + 100% { + background-position: 0% 79%; + } +} + +html { + display: flex; + justify-content: center; +} + +.prompt-button { + background-color: rgba(255, 255, 255, 0.5); + border-radius: 4px; + margin-right: 4px; + border: 1px solid black; + white-space: nowrap; + cursor: pointer; + font-size: 14px; + line-height: 16px; + padding: 8px 16px 8px 12px; + width: 300px +} + +.prompt { + padding: 5px; +} diff --git a/application/templates/head.html b/application/templates/head.html new file mode 100644 index 0000000..0b8b57c --- /dev/null +++ b/application/templates/head.html @@ -0,0 +1,19 @@ + + + + + + + + + Song Writing Prompt Machine + + + + + + +{% block content %} {% endblock %} + + diff --git a/application/templates/header.html b/application/templates/header.html new file mode 100644 index 0000000..20dc1ef --- /dev/null +++ b/application/templates/header.html @@ -0,0 +1,3 @@ + +
+
diff --git a/application/templates/index.html b/application/templates/index.html new file mode 100644 index 0000000..547f777 --- /dev/null +++ b/application/templates/index.html @@ -0,0 +1,44 @@ + +{% include 'head.html' %} +{% include 'header.html' %} +{% block content %} +
+

Get Inspired with a Song Writing Prompt!

+

Please select from below

+

{{ session.list_response }}

+
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +{% endblock %} diff --git a/config.py b/config.py new file mode 100644 index 0000000..86a5c75 --- /dev/null +++ b/config.py @@ -0,0 +1,4 @@ +import os + +class Config(object): + SECRET_KEY = os.environ.get("SONGPROMPT") or "song-prompt" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..084b819 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,59 @@ +async-generator==1.10 +attrs==23.1.0 +blinker==1.7.0 +cattrs==23.1.2 +certifi==2022.12.7 +charset-normalizer==3.2.0 +click==8.1.7 +coloredlogs==15.0.1 +exceptiongroup==1.1.1 +Flask==3.0.0 +gevent==23.9.1 +gitdb==4.0.10 +GitPython==3.1.31 +gpt4all==2.0.2 +greenlet==3.0.1 +h11==0.14.0 +humanfriendly==10.0 +idna==3.4 +itsdangerous==2.1.2 +Jinja2==3.1.2 +jupynium @ file:///Users/normrasmussen/.local/share/nvim/lazy/jupynium.nvim +lsprotocol==2023.0.0a3 +MarkupSafe==2.1.3 +msgpack==1.0.5 +numpy==1.26.2 +outcome==1.2.0 +packaging==23.1 +pandas==2.1.0 +persist-queue==0.8.0 +psutil==5.9.5 +pybind11==2.11.1 +pycairo @ file:///private/tmp/py3cairo-20231021-6574-xwz2b1/pycairo-1.25.1 +pygls==1.0.2 +pynvim==0.4.3 +PySocks==1.7.1 +python-dateutil==2.8.2 +python-dotenv==1.0.0 +pytz==2023.3.post1 +PyYAML @ file:///private/tmp/pyyaml-20231018-5610-1rdh755/PyYAML-6.0.1 +requests==2.31.0 +ruff==0.0.287 +ruff-lsp==0.0.38 +selenium==4.9.0 +six==1.16.0 +smmap==5.0.0 +sniffio==1.3.0 +sortedcontainers==2.4.0 +tqdm==4.66.1 +trio==0.22.0 +trio-websocket==0.10.2 +typeguard==3.0.2 +typing_extensions==4.7.1 +tzdata==2023.3 +urllib3==1.26.15 +verboselogs==1.7 +Werkzeug==3.0.1 +wsproto==1.2.0 +zope.event==5.0 +zope.interface==6.1