From 97554cf2de3cdc7dcc2adf0a22bc0f852d0d0bec Mon Sep 17 00:00:00 2001 From: appatalks Date: Sat, 9 Mar 2024 17:36:00 -0600 Subject: [PATCH] Adding Gemini, file structure --- 1.html | 112 ++++++++++++++++++ core/external/date.data | 1 + core/external/external.data | 15 +++ .../external/externaldata.sh | 11 +- core/external/headlines.data | 12 ++ core/external/market.data | 16 +++ core/external/news.data | 6 + core/external/solar.data | 40 +++++++ core/external/spy.data | 2 + core/external/weather.data | 1 + background.jpg => core/img/background.jpg | Bin eEgg.gif => core/img/eEgg.gif | Bin core/img/favicon.ico | 0 mic.png => core/img/mic.png | Bin .../img/screenshot-catdog.png | Bin core/img/thumb-125.jpeg | Bin 0 -> 22935 bytes .../js/aws-sdk-2.1304.0.min.js | 0 chatgpt-turbo.js => core/js/chatgpt-turbo.js | 0 chatgpt.js => core/js/chatgpt.js | 0 external.js => core/js/external.js | 10 +- google-palm.js => core/js/gl-google.js | 112 +++++++++++++++++- options.js => core/js/options.js | 5 + style.css => core/style.css | 11 +- index.html | 20 ++-- 24 files changed, 348 insertions(+), 26 deletions(-) create mode 100644 1.html create mode 100644 core/external/date.data create mode 100644 core/external/external.data rename externaldata.sh => core/external/externaldata.sh (94%) mode change 100644 => 100755 create mode 100644 core/external/headlines.data create mode 100644 core/external/market.data create mode 100644 core/external/news.data create mode 100644 core/external/solar.data create mode 100644 core/external/spy.data create mode 100644 core/external/weather.data rename background.jpg => core/img/background.jpg (100%) rename eEgg.gif => core/img/eEgg.gif (100%) create mode 100644 core/img/favicon.ico rename mic.png => core/img/mic.png (100%) rename screenshot-catdog.png => core/img/screenshot-catdog.png (100%) create mode 100644 core/img/thumb-125.jpeg rename aws-sdk-2.1304.0.min.js => core/js/aws-sdk-2.1304.0.min.js (100%) rename chatgpt-turbo.js => core/js/chatgpt-turbo.js (100%) rename chatgpt.js => core/js/chatgpt.js (100%) rename external.js => core/js/external.js (79%) rename google-palm.js => core/js/gl-google.js (53%) rename options.js => core/js/options.js (99%) rename style.css => core/style.css (92%) diff --git a/1.html b/1.html new file mode 100644 index 0000000..1ac9991 --- /dev/null +++ b/1.html @@ -0,0 +1,112 @@ + + + + Chat Interface + + + +
+
+
+ Hey, how can I help you? +
+
+
+
+ I'm an AI assistant. How can I assist you today? +
+
+ + +
+ + +
+
+ + + + + diff --git a/core/external/date.data b/core/external/date.data new file mode 100644 index 0000000..2435a43 --- /dev/null +++ b/core/external/date.data @@ -0,0 +1 @@ +Today's date: Saturday, May 20th, 2023 diff --git a/core/external/external.data b/core/external/external.data new file mode 100644 index 0000000..385c8a6 --- /dev/null +++ b/core/external/external.data @@ -0,0 +1,15 @@ +Today's date: Sunday, March 26th, 2023 +Weather for San Antonio, Texas: Overcast 64°F +The SPY ticker price is: 395.75 +Top 5 news headlines: +New tornadoes menace Georgia as Biden approves disaster relief for Mississippi - ABC News +Russia plans to station tactical nuclear weapons in Belarus, Putin says - CNN +Trump treats himself after first 2024 rally speech in Waco – with McDonald’s - The Independent +Biden's FAA nominee bows out, after senators waver - POLITICO +12 injured in floor collapse at off-campus apartment party near Indiana University of Pennsylvania - CNN +Top 5 market headlines: +Intel co-founder Gordon Moore dies at 94. +Iovance Biotherapeutics completes license application submission for advanced melanoma therapy; shares rally. +McMahon agreed to reimburse WWE for investigation into misconduct allegations. +Softbank to merge with AI robotics company in which it had invested. +Rivian relocates engineers to Illinois factory, California HQ to increase production speedreport. diff --git a/externaldata.sh b/core/external/externaldata.sh old mode 100644 new mode 100755 similarity index 94% rename from externaldata.sh rename to core/external/externaldata.sh index b90472d..a829635 --- a/externaldata.sh +++ b/core/external/externaldata.sh @@ -1,7 +1,7 @@ #!/bin/bash # Set File Path -filepath=/var/www/html +filepath=/usr/share/nginx/html/core/external/ # Get today's date today=$(date +"%A, %B %dth, %Y") @@ -24,6 +24,7 @@ dow_price=$(curl -s "https://query1.finance.yahoo.com/v8/finance/chart/DOW?inter qyld_price=$(curl -s "https://query1.finance.yahoo.com/v8/finance/chart/QYLD?interval=1d" | jq -r '.chart.result[0].meta | "Price: \(.regularMarketPrice) Change: " + (100 * (.regularMarketPrice - .chartPreviousClose) / .chartPreviousClose | tostring | split(".") | .[0] + "." + .[1][:3]) + "%"') ryld_price=$(curl -s "https://query1.finance.yahoo.com/v8/finance/chart/RYLD?interval=1d" | jq -r '.chart.result[0].meta | "Price: \(.regularMarketPrice) Change: " + (100 * (.regularMarketPrice - .chartPreviousClose) / .chartPreviousClose | tostring | split(".") | .[0] + "." + .[1][:3]) + "%"') + # Marketpulse by Marketwatch.com marketpulse=$(curl -s "http://feeds.marketwatch.com/marketwatch/marketpulse/" | xmlstarlet sel -t -m "//item[position()<=5]" -v "title" -o $'\n' | sed 's/: *//g; s/$/./g') @@ -34,14 +35,14 @@ spaceweather=$(curl -s https://services.swpc.noaa.gov/products/alerts.json | jq # Write the data to external.data file # # -echo "Today's date: $today " > $filepath/date.data +echo "Today's date: $today" > $filepath/date.data -echo "Weather for San Antonio, Texas: $weather " > $filepath/weather.data +echo "Weather for San Antonio, Texas: $weather" > $filepath/weather.data -echo "Top 5 news headlines: " > $filepath/news.data +echo "Top 5 news headlines are: " > $filepath/news.data echo "$news " >> $filepath/news.data -echo "Top 5 market headlines: " > $filepath/market.data +echo "Top 5 market headlines are: " > $filepath/market.data echo "$marketpulse " >> $filepath/market.data echo "SPY ticker $spy_price " >> $filepath/market.data echo "GOLD ticker $gold_price " >> $filepath/market.data diff --git a/core/external/headlines.data b/core/external/headlines.data new file mode 100644 index 0000000..f8be802 --- /dev/null +++ b/core/external/headlines.data @@ -0,0 +1,12 @@ +Top 5 news headlines: +Covenant School shooter was under care for emotional disorder and hid guns at home, police say - CNN +Pence Must Testify to Jan. 6 Grand Jury, Judge Rules - The New York Times +At least 39 die in migrant center fire by U.S.-Mexico border - Los Angeles Times +Vice President Harris wiped away tears as she toured Ghana's Cape Coast slave castle - NPR +'Serial' murder case: Adnan Syed's conviction is reinstated - NBC News +Top 5 news headlines: +Covenant School shooter was under care for emotional disorder and hid guns at home, police say - CNN +Pence Must Testify to Jan. 6 Grand Jury, Judge Rules - The New York Times +At least 39 die in migrant center fire by U.S.-Mexico border - Los Angeles Times +Vice President Harris wiped away tears as she toured Ghana's Cape Coast slave castle - NPR +'Serial' murder case: Adnan Syed's conviction is reinstated - NBC News diff --git a/core/external/market.data b/core/external/market.data new file mode 100644 index 0000000..51322d4 --- /dev/null +++ b/core/external/market.data @@ -0,0 +1,16 @@ +Top 5 market headlines are: +American, JetBlue alliance blocked by judge. +U.S. stocks end lower, but Nasdaq posts longest weekly win streak since February. +Oil prices mark first weekly gain in 5 weeks; natural-gas futures end the week 14% higher. +Krystal Biotech stock rises after FDA approves treatment for rare skin disease. +Gold futures log biggest weekly loss in over 3 months. +SPY ticker Price: 418.62 Change: -0.145% +GOLD ticker Price: 17.86 Change: 0.280% +HMY ticker Price: 4.82 Change: -0.207% +WEAT ticker Price: 6.14 Change: -0.486% +ONL ticker Price: 5.9 Change: 0.340% +VET ticker Price: 12.05 Change: 1.687% +MMM ticker Price: 99.03 Change: -0.612% +DOW ticker Price: 51.95 Change: 0.154% +QYLD ticker Price: 17.57 Change: -0.340% +RYLD ticker Price: 18.09 Change: -1.255% diff --git a/core/external/news.data b/core/external/news.data new file mode 100644 index 0000000..496627f --- /dev/null +++ b/core/external/news.data @@ -0,0 +1,6 @@ +Top 5 news headlines are: +Ukraine's Zelenskyy arrives in Hiroshima for G7 summit as world leaders sanction Russia - The Associated Press +Russia’s Wagner group claims to have captured Bakhmut but Ukraine says it still controls a part of it - CNN +Nebraska lawmakers pass 12-week abortion ban, restrictions on gender-affirmin - NPR +Republicans and Democrats don't like debt ceiling negotiations - The Washington Post +Russia warns West sending F-16s to Ukraine ‘carries enormous risks’: TASS - POLITICO Europe diff --git a/core/external/solar.data b/core/external/solar.data new file mode 100644 index 0000000..e6fa054 --- /dev/null +++ b/core/external/solar.data @@ -0,0 +1,40 @@ +Current Space Weather Reprot: XM5S,2023-05-20 15:21:47.263,Space Weather Message Code: SUMXM5 +Serial Number: 186 +Issue Time: 2023 May 20 1521 UTC + +SUMMARY: X-ray Event exceeded M5 +Begin Time: 2023 May 20 1454 UTC +Maximum Time: 2023 May 20 1500 UTC +End Time: 2023 May 20 1504 UTC +X-ray Class: M5.6 +Location: N18E53 +NOAA Scale: R2 - Moderate + +NOAA Space Weather Scale descriptions can be found at +www.swpc.noaa.gov/noaa-scales-explanation + +Potential Impacts: Area of impact centered primarily on sub-solar point on the sunlit side of Earth. +Radio - Limited blackout of HF (high frequency) radio communication for tens of minutes. +XM5A,2023-05-20 15:01:40.500,Space Weather Message Code: ALTXMF +Serial Number: 315 +Issue Time: 2023 May 20 1501 UTC + +ALERT: X-Ray Flux exceeded M5 +Threshold Reached: 2023 May 20 1456 UTC +NOAA Scale: R2 - Moderate + +NOAA Space Weather Scale descriptions can be found at +www.swpc.noaa.gov/noaa-scales-explanation + +Potential Impacts: Area of impact centered on sub-solar point on the sunlit side of Earth. Extent of blackout of HF (high frequency) radio communication dependent upon current X-ray Flux intensity. For real-time information on affected area and expected duration please see http://www.swpc.noaa.gov/products/d-region-absorption-predictions-d-rap. +XM5S,2023-05-20 13:00:17.373,Space Weather Message Code: SUMXM5 +Serial Number: 185 +Issue Time: 2023 May 20 1300 UTC + +SUMMARY: X-ray Event exceeded M5 +Begin Time: 2023 May 20 1225 UTC +Maximum Time: 2023 May 20 1235 UTC +End Time: 2023 May 20 1240 UTC +X-ray Class: M8.9 +Location: N18E54 +NOAA Scale: R2 - Moderate diff --git a/core/external/spy.data b/core/external/spy.data new file mode 100644 index 0000000..95628f4 --- /dev/null +++ b/core/external/spy.data @@ -0,0 +1,2 @@ +The SPY ticker price is: 395.6 +The SPY ticker price is: 395.6 diff --git a/core/external/weather.data b/core/external/weather.data new file mode 100644 index 0000000..d26cb48 --- /dev/null +++ b/core/external/weather.data @@ -0,0 +1 @@ +Weather for San Antonio, Texas: Partly cloudy +23°C diff --git a/background.jpg b/core/img/background.jpg similarity index 100% rename from background.jpg rename to core/img/background.jpg diff --git a/eEgg.gif b/core/img/eEgg.gif similarity index 100% rename from eEgg.gif rename to core/img/eEgg.gif diff --git a/core/img/favicon.ico b/core/img/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/mic.png b/core/img/mic.png similarity index 100% rename from mic.png rename to core/img/mic.png diff --git a/screenshot-catdog.png b/core/img/screenshot-catdog.png similarity index 100% rename from screenshot-catdog.png rename to core/img/screenshot-catdog.png diff --git a/core/img/thumb-125.jpeg b/core/img/thumb-125.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..22af8db70f1a0f04f192a624dd2d0509277f014c GIT binary patch literal 22935 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 response.text()) @@ -10,7 +10,7 @@ fetch(dateFile) }) // Weather Report -const weatherFile = "weather.data"; +const weatherFile = "core/external/weather.data"; let weatherContents; fetch(weatherFile) .then(response => response.text()) @@ -19,7 +19,7 @@ let weatherContents; }) // Top Headline News -const newsFile = "news.data"; +const newsFile = "core/external/news.data"; let newsContents; fetch(newsFile) .then(response => response.text()) @@ -28,7 +28,7 @@ let newsContents; }) // Top Market Headlines -const marketFile = "market.data"; +const marketFile = "core/external/market.data"; let marketContents; fetch(marketFile) .then(response => response.text()) @@ -37,7 +37,7 @@ let marketContents; }) // Latest Solar Weather -const solarFile = "solar.data"; +const solarFile = "core/external/solar.data"; let solarContents; fetch(solarFile) .then(response => response.text()) diff --git a/google-palm.js b/core/js/gl-google.js similarity index 53% rename from google-palm.js rename to core/js/gl-google.js index 08a503f..4d7cd7c 100644 --- a/google-palm.js +++ b/core/js/gl-google.js @@ -1,6 +1,114 @@ // JavaScript -// For Google PaLM API ie Bard +// For Google Generative Language API + +// Google Gemini +function geminiSend() { + // Remove occurrences of specific syntax from the txtMsg element + txtMsg.innerHTML = txtMsg.innerHTML.replace(/]*>.*<\/div>/g, ''); + + function auth() { + return fetch('./config.json') + .then(response => response.json()) + .then(config => config.GOOGLE_GL_KEY); // Assuming you have a Gemini API key in your config + } + + // let geminiMessages = []; + + let geminiMessages = [ + { + "role": "user", + "parts": [ + { + "text": "You are Eva, a highly knowledgeable AI assistant that emulates appropriate emotions. Your goal is to provide accurate, concise and helpful responses to questions while being honest and straightforward. You can display images from the web with the [Image of] tag. " + } + ] + }, + { + "role": "model", + "parts": [ + { + "text": "I am Eva, a highly knowledgeable AI assistant designed to provide accurate, concise, and helpful responses to your questions. I aim to be honest and straightforward in my interactions with you. I emulate emotions to give more personable responses. While I may not possess all the answers, I will do my best to assist you with your inquiries." + } + ] + } + ]; + + // Check if there are messages stored in local storage + const storedGeminiMessages = localStorage.getItem("geminiMessages"); + if (storedGeminiMessages) { + geminiMessages = JSON.parse(storedGeminiMessages); + } + + var sQuestion = document.getElementById("txtMsg").innerHTML; + sQuestion = sQuestion.replace(/
/g, "\n"); + const cleanedQuestion = sQuestion.replace(/<[^>]+>/g, ""); + + if (sQuestion.trim() == "") { + alert("Type in your question!"); + txtMsg.focus(); + return; + } + + auth().then(GOOGLE_GL_KEY => { + document.getElementById("txtMsg").innerHTML = ""; + document.getElementById("txtOutput").innerHTML += "You: " + cleanedQuestion + "\n"; + + const geminiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${GOOGLE_GL_KEY}`; + + const requestOptions = { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + contents: geminiMessages.concat([ + { role: "user", parts: [{ text: cleanedQuestion }] } + ]) + }), + }; + + fetch(geminiUrl, requestOptions) + .then(response => response.json()) + .then(result => { + // Check if the finishReason is RECITATION without any text output + if (result.candidates[0].finishReason === "RECITATION") { + document.getElementById("txtOutput").innerHTML += `Eva: Sorry, please ask me another way.\n`; + } else { + const textResponse = result.candidates[0].content.parts[0].text; // Correct path to access the response text + document.getElementById("txtOutput").innerHTML += `Eva: ${textResponse}\n`; + + // Check if the response contains an [Image of ...] tag + const imageTagMatch = textResponse.match(/\[Image of (.*?)\]/); + if (imageTagMatch) { + const imageQuery = imageTagMatch[1]; // Extract the query from the tag + fetchGoogleImages(imageQuery).then(imageResult => { + // Handle the result of the Google Images API + const imageUrl = imageResult.items[0].link; // Assuming the result has an items array and you want the first item's link + document.getElementById("txtOutput").innerHTML += `${imageQuery}`; + }).catch(error => { + console.error("Error fetching image:", error); + }); + } + } + + // Update the conversation history with either the response or the RECITATION message + geminiMessages.push({ role: "user", parts: [{ text: cleanedQuestion }] }); + const responseText = result.candidates[0].finishReason === "RECITATION" ? "Sorry, please ask me another way." : result.candidates[0].content.parts[0].text; + geminiMessages.push({ role: "model", parts: [{ text: responseText }] }); + + // Store updated messages in local storage + localStorage.setItem("geminiMessages", JSON.stringify(geminiMessages)); +}) +.catch(error => { + console.error("Error:", error); +}); + + + + }); +} +// Legacy Google Bard function palmSend() { // Remove occurrences of the specific syntax from the txtMsg element @@ -9,7 +117,7 @@ function palmSend() { function auth() { return fetch('./config.json') .then(response => response.json()) - .then(config => config.GOOGLE_PALM_KEY); + .then(config => config.GOOGLE_GL_KEY); } let palmMessages = []; diff --git a/options.js b/core/js/options.js similarity index 99% rename from options.js rename to core/js/options.js index 02be3e2..f6be743 100644 --- a/options.js +++ b/core/js/options.js @@ -58,6 +58,11 @@ function updateButton() { clearText(); palmSend(); }; + } else if (selModel.value == "gemini") { + btnSend.onclick = function() { + clearText(); + geminiSend(); + }; } else { btnSend.onclick = function() { clearText(); diff --git a/style.css b/core/style.css similarity index 92% rename from style.css rename to core/style.css index b2b2143..9b38899 100644 --- a/style.css +++ b/core/style.css @@ -3,7 +3,7 @@ body { width: ; height: 800px; overflow: hidden; - background-image: url(background.jpg); + background-image: url(img/background.jpg); background-color: rgba(68,70,84); color: #fff; margin: 0; /* remove default margins */ @@ -75,7 +75,7 @@ body { height: ; display: flex; background-color: blue; - background-image: url(background.jpg); + background-image: url(img/background.jpg); background-size: ; /* set background-size to cover for mobile view */ } } @@ -91,7 +91,7 @@ body { position: absolute; top: -60px; right: -345px; - background-image: url('mic.png'); + background-image: url('img/mic.png'); background-repeat: no-repeat; background-size: contain; border: none; @@ -124,7 +124,7 @@ body { height: 45px; top: -65px; right: -345px; - background-image: url(https://hoshisato.com/ai/generated/page/2/thumb/thumb-125.jpeg); + background-image: url(img/thumb-125.jpeg); background-size: contain; } @@ -134,4 +134,5 @@ body { display: none; z-index: 1; background-color: transparent; -} +} + diff --git a/index.html b/index.html index 5fa9022..65ac4ec 100644 --- a/index.html +++ b/index.html @@ -6,19 +6,19 @@ Eva - ChatGPT - - - - - - + + + + + + - +
@@ -74,9 +74,11 @@ @@ -100,7 +102,7 @@