From 06f2c920f0f1c468072d49ed0fcead6ebaab6e88 Mon Sep 17 00:00:00 2001 From: BlipRanger <1860540+BlipRanger@users.noreply.github.com> Date: Tue, 27 Jun 2023 20:17:43 -0400 Subject: [PATCH] Start autotagger extension --- .../scripts/extensions/auto-tagger/index.js | 111 ++++++++++++++++++ .../extensions/auto-tagger/manifest.json | 12 ++ .../scripts/extensions/auto-tagger/style.css | 0 3 files changed, 123 insertions(+) create mode 100644 public/scripts/extensions/auto-tagger/index.js create mode 100644 public/scripts/extensions/auto-tagger/manifest.json create mode 100644 public/scripts/extensions/auto-tagger/style.css diff --git a/public/scripts/extensions/auto-tagger/index.js b/public/scripts/extensions/auto-tagger/index.js new file mode 100644 index 000000000..2717116f4 --- /dev/null +++ b/public/scripts/extensions/auto-tagger/index.js @@ -0,0 +1,111 @@ +import { getContext } from "../../extensions.js"; +import { applyTagsOnCharacterSelect } from "../../tags.js"; + +// Endpoint for API call +const API_ENDPOINT_SEARCH = "https://api.chub.ai/api/characters/search"; +const API_ENDPOINT_DOWNLOAD = "https://api.chub.ai/api/characters/download"; + +// Function to fetch character data +async function fetchCharacterData(name) { + const response = await fetch(`${API_ENDPOINT_SEARCH}?search=${encodeURIComponent(name)}`); + const data = await response.json(); + return data.nodes.find(node => node.name === name); +} + +async function downloadCharacter(fullPath) { + const response = await fetch(API_ENDPOINT_DOWNLOAD, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + format: "cai", + fullPath: fullPath, + version: "main" + }) + }); + const data = await response.json(); + return data; +} + + +// Function to filter out topics like "ROOT" and "Tavern" +function filterTopics(topics) { + return topics.filter(topic => topic !== "ROOT" && topic !== "Tavern"); +} + +// Function to execute on button click +async function onButtonClick() { + console.log("Comparing characters...") + const characters = getContext().characters; + try { + for (let character of characters) { + const searchedCharacter = await fetchCharacterData(character.name); + if (searchedCharacter) { + const downloadedCharacter = await downloadCharacter(searchedCharacter.fullPath); + + //Check if character.data.description and character.scenerio are in downloadedCharacter.description + const downloadDesc = downloadedCharacter.description.replace("\"", ""); + const isPersonalityMatch = character.personality.includes(downloadedCharacter.title); + console.log(downloadedCharacter.title); + console.log(character.personality); + //const isTaglineMatch = character.tagline === downloadedCharacter.tagline; + ///const isTopicsMatch = JSON.stringify(character.topics.sort()) === JSON.stringify(downloadedCharacter.topics.sort()); + + if (isPersonalityMatch) { + console.log(`Character ${character.name} matches.`); + let tags = filterTopics(searchedCharacter.topics); + applyTagsOnCharacterSelect(character, tags); + + } else { + console.log(`Character ${character.name} does not match.`); + if (!isPersonalityMatch) { + console.log(`- Personality does not match. Generated: ${character.data.description}, API: ${downloadedCharacter.description}`); + console.log(character); + console.log(downloadedCharacter); + console.log(searchedCharacter); + } + // if (!isTaglineMatch) { + // console.log(`- Tagline does not match. Generated: ${character.tagline}, API: ${downloadedCharacter.tagline}`); + // } + // if (!isTopicsMatch) { + // console.log(`- Topics do not match. Generated: ${character.topics.join(", ")}, API: ${downloadedCharacter.topics.join(", ")}`); + // } + } + } else { + console.log(`Character ${character.name} not found.`); + } + } + } catch (error) { + console.error(error); + } +} + +jQuery(() => { + const settingsHtml = ` +
+
+
+ auto-tagger +
+
+
+ + +
+ +
+ + + + +
+ +
+
+
`; + + // Append settingsHtml to extensions_settings + $('#extensions_settings').append(settingsHtml); + $('#compare-characters').on('click', onButtonClick); +}); diff --git a/public/scripts/extensions/auto-tagger/manifest.json b/public/scripts/extensions/auto-tagger/manifest.json new file mode 100644 index 000000000..f8f5980de --- /dev/null +++ b/public/scripts/extensions/auto-tagger/manifest.json @@ -0,0 +1,12 @@ +{ + "display_name": "Auto-Tagger", + "loading_order": 9, + "requires": [ + ], + "optional": [], + "js": "index.js", + "css": "style.css", + "author": "BlipRanger", + "version": "1.0.0", + "homePage": "https://github.com/BlipRanger" +} diff --git a/public/scripts/extensions/auto-tagger/style.css b/public/scripts/extensions/auto-tagger/style.css new file mode 100644 index 000000000..e69de29bb