const { OpenAI } = require ( "openai" ) ;
require ( "dotenv" ) . config ( {
path : require ( "os" ) . homedir ( ) + "/.config/fabric/.env" ,
} ) ;
let openaiClient = null ;
// Function to initialize and get the OpenAI client
function getOpenAIClient ( ) {
if ( ! process . env . OPENAI _API _KEY ) {
throw new Error (
"The OPENAI_API_KEY environment variable is missing or empty."
) ;
}
return new OpenAI ( { apiKey : process . env . OPENAI _API _KEY } ) ;
}
async function queryOpenAI ( system , user , callback ) {
const openai = getOpenAIClient ( ) ; // Ensure the client is initialized here
const messages = [
{ role : "system" , content : system } ,
{ role : "user" , content : user } ,
] ;
try {
const stream = await openai . chat . completions . create ( {
model : "gpt-4-1106-preview" , // Adjust the model as necessary.
messages : messages ,
temperature : 0.0 ,
top _p : 1 ,
frequency _penalty : 0.1 ,
presence _penalty : 0.1 ,
stream : true ,
} ) ;
for await ( const chunk of stream ) {
const message = chunk . choices [ 0 ] ? . delta ? . content || "" ;
callback ( message ) ; // Process each chunk of data
}
} catch ( error ) {
console . error ( "Error querying OpenAI:" , error ) ;
callback ( "Error querying OpenAI. Please try again." ) ;
}
}
module . exports = { queryOpenAI } ;