| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  | const fs = require('fs'); | 
					
						
							|  |  |  | const path = require('path'); | 
					
						
							|  |  |  | const os = require('os'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const fetch = require('node-fetch'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async function fetchData(url, options = {}) { | 
					
						
							|  |  |  |     const { default: fetch } = await import('node-fetch'); | 
					
						
							|  |  |  |     const response = await fetch(url, options); | 
					
						
							|  |  |  |     return response; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KuzcoCore { | 
					
						
							|  |  |  |     constructor() { | 
					
						
							| 
									
										
										
										
											2024-03-09 02:42:30 -05:00
										 |  |  |         this.configPath = path.join(os.homedir(), '.kuzco-cli', 'config.json'); | 
					
						
							| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  |         this.API_KEY = this.loadApiKey(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     loadApiKey() { | 
					
						
							|  |  |  |         try { | 
					
						
							| 
									
										
										
										
											2024-03-09 02:42:30 -05:00
										 |  |  |             if (fs.existsSync(this.configPath)) { | 
					
						
							|  |  |  |                 const configFile = fs.readFileSync(this.configPath); | 
					
						
							|  |  |  |                 const config = JSON.parse(configFile); | 
					
						
							|  |  |  |                 return config.API_KEY; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 console.log('API Key config file does not exist. Please set up your API Key.'); | 
					
						
							|  |  |  |                 return ''; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  |         } catch (error) { | 
					
						
							|  |  |  |             console.error(`An error occurred while reading the API key: ${error.message}`); | 
					
						
							|  |  |  |             return ''; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-09 02:42:30 -05:00
										 |  |  |     apiKeyExists() { | 
					
						
							|  |  |  |         return fs.existsSync(this.configPath) && this.API_KEY !== ''; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-09 05:43:40 -05:00
										 |  |  |     async sendPrompt(prompt, model) { | 
					
						
							|  |  |  |         console.log("Model received in sendPrompt:", model) | 
					
						
							| 
									
										
										
										
											2024-03-09 05:56:54 -05:00
										 |  |  |         const controller = new AbortController(); | 
					
						
							|  |  |  |         const signal = controller.signal; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-09 13:53:26 -05:00
										 |  |  |         const timeoutId = setTimeout(() => controller.abort(), 25000); | 
					
						
							| 
									
										
										
										
											2024-03-09 05:56:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  |         try { | 
					
						
							|  |  |  |             const response = await fetch('https://relay.kuzco.xyz/v1/chat/completions', { | 
					
						
							|  |  |  |                 method: 'POST', | 
					
						
							|  |  |  |                 headers: { | 
					
						
							|  |  |  |                     'Authorization': `Bearer ${this.API_KEY}`, | 
					
						
							|  |  |  |                     'Content-Type': 'application/json', | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 body: JSON.stringify({ | 
					
						
							|  |  |  |                     messages: [{ role: 'user', 'content': prompt + '\n' }], | 
					
						
							| 
									
										
										
										
											2024-03-09 05:43:40 -05:00
										 |  |  |                     model: model, | 
					
						
							| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  |                     stream: false, | 
					
						
							|  |  |  |                 }), | 
					
						
							| 
									
										
										
										
											2024-03-09 05:56:54 -05:00
										 |  |  |                 signal: signal, | 
					
						
							| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  |             }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-09 05:56:54 -05:00
										 |  |  |             clearTimeout(timeoutId); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  |             if (!response.ok) { | 
					
						
							|  |  |  |                 throw new Error(`HTTP error! status: ${response.status}`); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return await response.json(); | 
					
						
							|  |  |  |         } catch (error) { | 
					
						
							| 
									
										
										
										
											2024-03-09 05:56:54 -05:00
										 |  |  |             clearTimeout(timeoutId); | 
					
						
							|  |  |  |             if (error.name === 'AbortError') { | 
					
						
							|  |  |  |                 console.error('Request was aborted due to timeout.'); | 
					
						
							|  |  |  |                 return { error: 'Request timed out. Please try again.' }; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 console.error(`An error occurred: ${error.message}`); | 
					
						
							|  |  |  |                 return { error: error.message }; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2024-03-09 02:15:01 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = KuzcoCore; |