Spaces:
Running
Running
| import { AutoTokenizer, CLIPTextModelWithProjection } from "@xenova/transformers"; | |
| import { createClient } from '@supabase/supabase-js' | |
| // Use the Singleton pattern to enable lazy construction of the pipeline. | |
| // NOTE: We wrap the class in a function to prevent code duplication (see below). | |
| const S = () => class ApplicationSingleton { | |
| static model_id = 'Xenova/clip-vit-base-patch16'; | |
| static tokenizer = null; | |
| static text_model = null; | |
| static database = null; | |
| static async getInstance() { | |
| // Load tokenizer and text model | |
| if (this.tokenizer === null) { | |
| this.tokenizer = AutoTokenizer.from_pretrained(this.model_id); | |
| } | |
| if (this.text_model === null) { | |
| this.text_model = CLIPTextModelWithProjection.from_pretrained(this.model_id, { | |
| quantized: false, | |
| }); | |
| } | |
| if (this.database === null) { | |
| this.database = createClient( | |
| process.env.SUPABASE_URL, | |
| process.env.SUPABASE_ANON_KEY, | |
| ) | |
| } | |
| return Promise.all([ | |
| this.tokenizer, | |
| this.text_model, | |
| this.database, | |
| ]); | |
| } | |
| } | |
| let ApplicationSingleton; | |
| if (process.env.NODE_ENV !== 'production') { | |
| // When running in development mode, attach the pipeline to the | |
| // global object so that it's preserved between hot reloads. | |
| // For more information, see https://vercel.com/guides/nextjs-prisma-postgres | |
| if (!global.ApplicationSingleton) { | |
| global.ApplicationSingleton = S(); | |
| } | |
| ApplicationSingleton = global.ApplicationSingleton; | |
| } else { | |
| ApplicationSingleton = S(); | |
| } | |
| export default ApplicationSingleton; | |