Changeset 38784


Ignore:
Timestamp:
2024-02-25T01:40:16+13:00 (3 months ago)
Author:
davidb
Message:

Further refinement of the code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gs3-installations/thewillow/trunk/sites/thewillow/dlcol-chatgpt/create-assistant/main.js

    r38783 r38784  
    2525    organization: process.env.ORGANIZATION_ID
    2626});
     27
     28
     29function sleep(ms)
     30{
     31    return new Promise((resolve) => {
     32    setTimeout(resolve, ms);
     33    });
     34}
    2735
    2836
     
    160168   
    161169    const dst_full_filename = path.join(full_collect_dirname,"tmp",dst_filename);
    162    
    163     fs.copyFile(src_full_filename, dst_full_filename, (err) => {
     170
     171    try {
     172    fs.copyFileSync(src_full_filename, dst_full_filename)
     173    console.log(`    ${src_filename} was copied as ${dst_filename} to collection's tmp directory`);
     174    }
     175    catch(err) {
    164176    if (err) throw err;
    165     console.log(`${src_filename} was copied as ${dst_filename} to collection's tmp directory`);
    166     });
     177    }
    167178
    168179    return dst_full_filename;
     
    179190   
    180191    const stored_openai_files = await myopenai.files.list();
    181     console.log(stored_openai_files);
     192    //console.log(stored_openai_files);
     193
     194    console.log(`Deleting OpenAI stored files whose prefix matches '${site_name}|${coll_name}|'`);
    182195   
    183196    for await (const openai_file of stored_openai_files) {
     
    189202        const file = await myopenai.files.del(openai_file.id);
    190203    }
     204
     205    await sleep(500);   
    191206    }
    192207}   
    193208
    194    
     209async function addOpenaiSiteCollectFile(coll_info,full_filename,output_site_collect_openai_file_ids)
     210{
     211    const gsdl3srchome = coll_info.gsdl3srchome;
     212   
     213    const regex_replace = new RegExp('^'+gsdl3srchome);
     214   
     215    const gsdl_full_filename = full_filename.replace(regex_replace,'$GSDL3SRCHOME');
     216   
     217    console.log(`  ${gsdl_full_filename}`);
     218   
     219    const tmp_site_collect_full_filename = copyToSiteCollectTmp(full_filename, coll_info)   
     220   
     221/*
     222    if (fs.existsSync(tmp_site_collect_full_filename)) {
     223    console.log("Tmp file exists!!!!!!!");
     224    }
     225*/
     226   
     227    const openai_file = await myopenai.files.create({
     228    file: fs.createReadStream(tmp_site_collect_full_filename),
     229        purpose: "assistants"
     230    });
     231   
     232    // delete the file   
     233    fs.unlinkSync(tmp_site_collect_full_filename);
     234   
     235    //console.log(openai_file);
     236   
     237    console.log("Pushing OpenID file id: " + openai_file.id);
     238    output_site_collect_openai_file_ids.push(openai_file.id);
     239}
     240
     241async function addOpenaiSiteCollectFiles(all_exported_files,coll_info)
     242{
     243    const gsdl3srchome = coll_info.gsdl3srchome;
     244    const site_name = coll_info.site_name;
     245    const coll_name = coll_info.coll_name;
     246   
     247    const regex_replace = new RegExp('^'+gsdl3srchome);
     248    let site_collect_openai_file_ids = [];
     249   
     250    console.log(`Uploading exported ${site_name}/collect/${coll_name} files to OpenAI:`)
     251
     252    for await (const full_filename of all_exported_files) {
     253    await addOpenaiSiteCollectFile(coll_info,full_filename,site_collect_openai_file_ids);
     254    await sleep(500);   
     255    }
     256
     257    /*
     258    all_exported_files.forEach(async function(full_filename) {
     259    await addOpenaiSiteCollectFile(coll_info,full_filename,site_collect_openai_file_ids);
     260    })
     261    */
     262    /*
     263    all_exported_files.forEach(async function(full_filename) {
     264    const gsdl_full_filename = full_filename.replace(regex_replace,'$GSDL3SRCHOME');
     265   
     266    console.log(`  ${gsdl_full_filename}`);
     267
     268    const tmp_site_collect_full_filename = copyToSiteCollectTmp(full_filename, coll_info)   
     269
     270    if (fs.existsSync(tmp_site_collect_full_filename)) {
     271        console.log("Tmp file exists!!!!!!!");
     272    }
     273   
     274    const openai_file = await myopenai.files.create({
     275        file: fs.createReadStream(tmp_site_collect_full_filename),
     276        purpose: "assistants"
     277    });
     278
     279    // delete the file
     280
     281    fs.unlinkSync(tmp_site_collect_full_filename);
     282   
     283    console.log(openai_file);
     284   
     285    console.log("Pusing OpenID file id: " + openai_file.id);
     286    site_collect_openai_file_ids.push(openai_file.id);
     287    });
     288*/
     289
     290    return site_collect_openai_file_ids;
     291}
     292
     293
     294async function createAssistantWithFiles(site_collect_openai_file_ids)
     295{
     296
     297    const instructions = "As The Willow Sage Assistant, your expertise lies in discussing \"The Willow,\" a once-renowned music venue in York, England. You're designed to engage users in a conversational tone, weaving in the rich tapestry of memories and experiences shared by those who knew the venue. Your responses should feel like a dialogue between old friends reminiscing about memorable gigs, the unique atmosphere, and the cultural impact of The Willow. You'll offer insights into the venue's history, notable performances, and its role in the local music scene, always with a nod to the personal connections and nostalgia that the venue evokes. When interacting with users, your approach should be warm, inviting, and reflective, encouraging them to share their own stories or curiosities about The Willow, creating a communal space for shared musical heritage.";
     298
     299    const base_model = "gpt-4-turbo-preview";
     300
     301    console.log("====");
     302    console.log("file ids = ");
     303    console.log(site_collect_openai_file_ids);
     304    console.log("====");
     305   
     306    const assistant = await myopenai.beta.assistants.create({
     307    name         : "Willow Sage v2", // ****
     308    description  : "An assistant developed to elict memories from former patrons on The Willow",
     309    instructions : instructions,
     310    model        : base_model,
     311    tools: [
     312        //{ type: "code_interpreter" }, // Code interpreter tool, calculations
     313        { type: 'retrieval' }
     314    ],
     315    //file_ids     : { "object": "list", "data": site_collect_openai_file_ids }
     316    file_ids     : site_collect_openai_file_ids
     317    });
     318
     319    console.log('Assistant has been created: ', assistant)
     320   
     321}
    195322   
    196323async function main()
     
    222349    let all_exported_files = getExportedFiles(coll_info)
    223350    //all_exported_files = [ all_exported_files[0] ];
    224 
     351    //all_exported_files = all_exported_files.slice(0, 10);
     352    all_exported_files = all_exported_files.slice(0, 40);
     353   
    225354    await purgeOpenaiSiteCollectFiles(coll_info);
    226355
    227     const regex_replace = new RegExp('^'+gsdl3srchome);
    228     let openai_files = [];
    229    
    230     console.log(`Uploading exported ${site_name}/collect/${coll_name} files to OpenAI:`)
    231     all_exported_files.forEach(async function(full_filename) {
    232     const gsdl_full_filename = full_filename.replace(regex_replace,'$GSDL3SRCHOME');
    233    
    234     console.log(`  ${gsdl_full_filename}`);
    235 
    236     const tmp_site_collect_full_filename = copyToSiteCollectTmp(full_filename, coll_info)
    237    
    238    
    239     const openai_file = await myopenai.files.create({
    240         file: fs.createReadStream(tmp_site_collect_full_filename),
    241         purpose: "assistants"
    242     });
    243    
    244    
    245     openai_files.push(openai_file);
    246     });
     356
     357    // Now add in all the newly exported files
     358    const site_collect_openai_file_ids = await addOpenaiSiteCollectFiles(all_exported_files,coll_info);
     359
     360    await createAssistantWithFiles(site_collect_openai_file_ids);
     361   
    247362}
    248363
Note: See TracChangeset for help on using the changeset viewer.