Back

Version 73

12/8/2024
import { sqlite } from "https://esm.town/v/stevekrouse/sqlite?v=12";
import emojis from "npm:emojis-list";
import * as nodeEmoji from "npm:node-emoji";
import { OpenAI } from "npm:openai";

// Initialize OpenAI client
const openai = new OpenAI();

await sqlite.batch([
// "DROP TABLE IF EXISTS emojis",
"CREATE TABLE IF NOT EXISTS emojis (emoji varchar primary key, emb F32_BLOB(1536))",
`CREATE INDEX IF NOT EXISTS movies_idx ON emojis (
libsql_vector_idx(emb, 'metric=cosine')
)`,
]);
// Get embedding for a single emoji
async function getEmbedding(emoji: string): Promise<number[]> {
const result = await openai.embeddings.create({
input: emoji,
model: "text-embedding-3-small",
});
return result.data[0].embedding;
}

async function loadEmoji(e: string) {
const result = await sqlite.execute("SELECT 1 FROM emojis WHERE emoji = ?", [e]);
if (result.rows.length !== 0) {
console.log(e, "already loaded");
return;
}
const emojiData = nodeEmoji.find(e);
if (!emojiData) {
console.log(e, "not found");
return;
}
const targetEmbedding = await getEmbedding(`${e} ${emojiData.key}`);
Updated: December 8, 2024