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 = ` +