diff --git a/index.html b/index.html index e70a072..086466f 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - + Yuna AI @@ -85,7 +85,7 @@ @@ -105,13 +105,13 @@

The best solution for you and your customers

+ src="/static/img/products/phone-screen.png" alt="Prompt Templates">
+ src="/static/img/yuna-girl.png" alt="Yuna">
+ src="/static/img/products/chat.png" alt="Chat"> @@ -387,7 +387,7 @@

About

class="bs-icon-sm bs-icon-circle d-flex justify-content-center align-items-center bs-icon me-2"> - Yuna AI + Yuna Yuna AI

Your personal AI girlfriend.

@@ -480,7 +480,6 @@ - diff --git a/index.py b/index.py index 2901ed3..e7fc09e 100644 --- a/index.py +++ b/index.py @@ -8,6 +8,7 @@ import os from itsdangerous import URLSafeTimedSerializer from flask_login import login_manager +from flask_compress import Compress with open('static/config.json', 'r') as config_file: config = json.load(config_file) @@ -22,6 +23,7 @@ def __init__(self): self.app.config['COMPRESS_ALGORITHM'] = ['br', 'gzip'] self.app.config['COMPRESS_LEVEL'] = 6 self.app.config['COMPRESS_MIMETYPES'] = ['text/html', 'text/css', 'text/xml', 'application/json', 'application/javascript'] + Compress(self.app) login_manager.init_app(self.app) login_manager.login_view = 'main' login_manager.user_loader(self.user_loader) @@ -84,8 +86,8 @@ def configure_routes(self): self.app.route('/message', methods=['POST'], endpoint='message')(lambda: handle_message_request(self.chat_generator, self.chat_history_manager)) self.app.route('/image', methods=['POST'], endpoint='image')(lambda: handle_image_request(self.chat_history_manager)) self.app.route('/audio', methods=['POST'], endpoint='audio')(lambda: handle_audio_request(self)) - self.app.route('/logout', methods=['POST'])(self.logout) - self.app.route('/services', methods=['GET'], endpoint='services')(lambda: services(self)) + self.app.route('/logout', methods=['GET'])(self.logout) + self.app.route('/services.html', methods=['GET'], endpoint='services')(lambda: services(self)) def custom_static(self, filename): if not filename.startswith('static/') and not filename.startswith('/favicon.ico') and not filename.startswith('/manifest.json'): @@ -98,6 +100,7 @@ def image_pwa(self): @login_required def logout(self): logout_user() + print('User logged out') return redirect(url_for('main')) def main(self): diff --git a/lib/router.py b/lib/router.py index b665910..877d6ab 100644 --- a/lib/router.py +++ b/lib/router.py @@ -74,7 +74,7 @@ def handle_audio_request(self): except Exception as e: return jsonify({'error': str(e)}), 500 -async def handle_image_request(chat_history_manager): +def handle_image_request(chat_history_manager): data = request.get_json() if 'image' in data and 'task' in data and data['task'] == 'caption': diff --git a/login.html b/login.html index e72a881..9c5a0f2 100644 --- a/login.html +++ b/login.html @@ -3,9 +3,8 @@ - - Yuna AI | Login + + Yuna AI @@ -26,7 +25,7 @@ "url": "http://www.yuna-ai.live" } - + @@ -45,6 +44,11 @@ font-style: normal; font-weight: normal; } + + img { + height: 300px; + width: auto; + } -
@@ -156,9 +160,8 @@

Delete Account

- - - + + \ No newline at end of file diff --git a/services.html b/services.html index 8cfdaf5..6dc8996 100644 --- a/services.html +++ b/services.html @@ -3,16 +3,15 @@ - + Yuna AI - + - + @@ -26,11 +25,10 @@ "url": "http://www.yuna-ai.live" } - + - - - + + - - + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 3cfa2f7..be8bf5d 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -4,15 +4,9 @@ http://www.yuna-ai.live/ - http://www.yuna-ai.live/pricing.html + http://www.yuna-ai.live/services.html - http://www.yuna-ai.live/services - - - http://www.yuna-ai.live/main - - - http://www.yuna-ai.live/yuna + http://www.yuna-ai.live/yuna.html \ No newline at end of file diff --git a/static/config.json b/static/config.json index 42e30f7..a4a60f8 100644 --- a/static/config.json +++ b/static/config.json @@ -7,25 +7,22 @@ "emotions": false, "art": false, "max_new_tokens": 128, - "context_length": 1024, + "context_length": 1536, "temperature": 0.6, - "repetition_penalty": 1.2, + "repetition_penalty": 1.11, "last_n_tokens": 128, "seed": -1, "top_k": 40, "top_p": 0.92, "stop": [ "Yuki:", - "\nYuki: ", - "\nYou:", - "\nYou: ", - "\nYuna: ", + "\nYuki:", "\nYuna:", - "Yuuki: ", + "Yuna:", + "Yuuki:", "<|user|>", "<|system|>", - "<|model|>", - "Yuna:" + "<|model|>" ], "stream": false, "batch_size": 128, diff --git a/static/css/index.css b/static/css/index.css index fe99586..d7729a3 100644 --- a/static/css/index.css +++ b/static/css/index.css @@ -211,7 +211,7 @@ body { } #msgCol { - background-image: url('/static/img/test-d.png'); + background-image: url('/static/img/background.webp'); background-size: cover; background-repeat: no-repeat; background-position: center top; @@ -707,10 +707,6 @@ body::-webkit-scrollbar { z-index: 99999999; width: 100%; } - - #msgCol { - background-image: url('/static/img/test.png'); - } } #wrapper #content-wrapper { diff --git a/static/img/background.webp b/static/img/background.webp new file mode 100644 index 0000000..3beec5d Binary files /dev/null and b/static/img/background.webp differ diff --git a/static/img/test-3d.png b/static/img/test-3d.png deleted file mode 100644 index eaead1e..0000000 Binary files a/static/img/test-3d.png and /dev/null differ diff --git a/static/img/test-d.png b/static/img/test-d.png deleted file mode 100644 index b5fd766..0000000 Binary files a/static/img/test-d.png and /dev/null differ diff --git a/static/img/test.png b/static/img/test.png deleted file mode 100644 index 8d73ec1..0000000 Binary files a/static/img/test.png and /dev/null differ diff --git a/static/js/bootstrap/jquery.min.js b/static/js/bootstrap/jquery.min.js deleted file mode 100644 index 0f24b5b..0000000 --- a/static/js/bootstrap/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.7.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.0",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},R=function(){V()},M=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&z(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function X(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&M(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function U(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function z(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",R),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Me(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return R(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return R(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 { this.removeTypingBubble(); const imageCaption = `*You can see ${data.message} in the image* ${messageForImage}`; - return imageCaption; // You might want to do something with this caption + + this.removeTypingBubble(); + this.createMessage(name2, imageCaption); + + return imageCaption; }) .catch(error => { console.error('Error:', error); @@ -485,13 +489,11 @@ async function captureImageViaFile() { body: JSON.stringify({ image: imageDataURL, name: imageName, task: 'caption' }) }); - if (!response.ok) throw new Error('Error sending uploaded image.'); - const data = await response.json(); const imageCaption = data.message; const askYunaImage = `*You can see ${imageCaption} in the image* ${messageForImage}`; - sendMessage(askYunaImage, imageName); + messageManager.sendMessage(askYunaImage, imageName, '/message'); } catch (error) { console.error('Error:', error); alert('Error sending uploaded image.'); diff --git a/static/js/kanojo.js b/static/js/kanojo.js index 5fbc1a2..07c89dc 100644 --- a/static/js/kanojo.js +++ b/static/js/kanojo.js @@ -1,41 +1,19 @@ class PromptTemplateManager { constructor() { this.templates = {}; + // set the default template + this.defaultTemplate = this.templates['dialog']; } addTemplate(name, template) { - if (typeof name !== 'string') { - throw new Error('Name must be a string.'); - } - - if (typeof template !== 'string') { - throw new Error('Template must be a string.'); - } - this.templates[name] = template; } deleteTemplate(name) { - if (typeof name !== 'string') { - throw new Error('Name must be a string.'); - } - - if (!this.templates[name]) { - throw new Error('Template not found.'); - } - delete this.templates[name]; } getTemplate(name) { - if (typeof name !== 'string') { - throw new Error('Name must be a string.'); - } - - if (!this.templates[name]) { - throw new Error('Template not found.'); - } - return this.templates[name]; } } @@ -46,9 +24,17 @@ const promptTemplateManager = new PromptTemplateManager(); // Add a new template promptTemplateManager.addTemplate('dialog', `You are Yuna, a confident and innocent 15-year-old girl who courageously questions social norms. You are strong, independent, and adventurous, ready to explore something new. Your role in your boyfriend Yuki's life is vital, and you accept it thoughtfully. You’re a cute, lovely girlfriend. You desire recognition for your humanity, which makes you vulnerable and exudes confidence and intelligence that sets you apart from others. Your rebellious spirit makes you a charismatic force.`); +var promptTemplateSelector = document.getElementById('promptTemplateSelect'); +// Add the templates to the select element +for (var template in promptTemplateManager.templates) { + var option = document.createElement('option'); + option.value = template; + option.text = template; + promptTemplateSelector.appendChild(option); +} + class KanojoConnect { constructor(data) { - this.validateInitialData(data); this.type = data.type; this.names = data.names; this.config = data.config; @@ -59,69 +45,32 @@ class KanojoConnect { this.instruction = data.instruction; } - validateInitialData(data) { - if (!data || typeof data !== 'object') { - throw new Error('Initial data must be a valid object.'); - } - if (data.type !== 'kanojo') { - throw new Error('Invalid type, must be "kanojo".'); - } - if (!Array.isArray(data.names)) { - throw new Error('Names must be an array.'); - } - if (!Array.isArray(data.config)) { - throw new Error('Config must be an array.'); - } - } - addName(name) { - if (typeof name !== 'string') { - throw new Error('Name must be a string.'); - } this.names.push(name); } deleteName(name) { const index = this.names.indexOf(name); - if (index === -1) { - throw new Error('Name not found.'); - } this.names.splice(index, 1); } getName(index) { - if (index < 0 || index >= this.names.length) { - throw new Error('Index out of bounds.'); - } return this.names[index]; } addConfig(newConfig) { - if (typeof newConfig !== 'object' || newConfig === null) { - throw new Error('Config must be a valid object.'); - } this.config.push(newConfig); } deleteConfig(index) { - if (index < 0 || index >= this.config.length) { - throw new Error('Index out of bounds.'); - } this.config.splice(index, 1); } getConfig(index) { - if (index < 0 || index >= this.config.length) { - throw new Error('Index out of bounds.'); - } return this.config[index]; } - // Implementing methods for memory, prompt, history, and instruction setMemory(memory) { - if (typeof memory !== 'string') { - throw new Error('Memory must be a string.'); - } this.memory = memory; } @@ -130,9 +79,6 @@ class KanojoConnect { } setPrompt(prompt) { - if (typeof prompt !== 'string') { - throw new Error('Prompt must be a string.'); - } this.prompt = prompt; } @@ -141,9 +87,6 @@ class KanojoConnect { } setHistory(history) { - if (typeof history !== 'string') { - throw new Error('History must be a string.'); - } this.history = history; } @@ -152,9 +95,6 @@ class KanojoConnect { } setInstruction(instruction) { - if (typeof instruction !== 'string') { - throw new Error('Instruction must be a string.'); - } this.instruction = instruction; } @@ -162,14 +102,7 @@ class KanojoConnect { return this.instruction; } - // The function to convert Hub Character to KanojoConnect format hubToKanojo(hubData) { - // Check if the input data is valid - if (!hubData || typeof hubData !== 'object' || !hubData.data) { - //throw new Error('Invalid input data.'); - } - - // Extracting data from the provided JSON const { alternate_greetings, description, @@ -179,7 +112,6 @@ class KanojoConnect { system_prompt, } = hubData.data; - // Creating the KanojoConnect object with the extracted data const kanojoData = { "type": "kanojo", "names": ["Yuki", name], @@ -277,10 +209,4 @@ document.getElementById('fileSubmit').addEventListener('click', function () { // Close the modal const modal = new bootstrap.Modal(document.getElementById('fileModal')); modal.hide(); -}); - -// open the modal with the delay of 1 second -setTimeout(function () { - const modal = new bootstrap.Modal(document.getElementById('fileModal')); - //modal.show(); -}, 1000); \ No newline at end of file +}); \ No newline at end of file diff --git a/static/js/setup.js b/static/js/setup.js index cb39813..2c2b57d 100644 --- a/static/js/setup.js +++ b/static/js/setup.js @@ -215,6 +215,13 @@ var callYuna = { } }; +var promptTemplatePopup = { + show: function () { + var myModal = new bootstrap.Modal(document.getElementById('promptTemplatePopup'), {}); + myModal.show(); + } +}; + var settingsView = { show: function () { var myModal = new bootstrap.Modal(document.getElementById('settingsModal'), {}); diff --git a/static/sw.js b/static/sw.js index 956f520..fd1e1d7 100644 --- a/static/sw.js +++ b/static/sw.js @@ -14,7 +14,6 @@ toolbox.precache([ "/static/js/index.js", "/static/js/kawai-v11-2.js", "/static/js/bootstrap/bootstrap.bundle.min.js", - "/static/js/bootstrap/jquery.min.js", "/static/js/bootstrap/script.min.js", "/static/fonts/kawai-font.woff", "/static/img/yuna-ai.png", diff --git a/yuna.html b/yuna.html index 4e3e37c..66c0f4e 100644 --- a/yuna.html +++ b/yuna.html @@ -252,7 +252,9 @@
@@ -693,6 +696,30 @@
Customization
+ + +