interintel 1.0.21 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,6 +6,5 @@ async function askQuestion(rl, prompt) {
6
6
  });
7
7
  }
8
8
 
9
- module.exports = {
10
- askQuestion,
11
- }
9
+ export { askQuestion };
10
+
@@ -1,52 +1,50 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
- const { aiVersion } = require('../interintel.config');
1
+ import fs from 'fs';
2
+ import path from 'path';
4
3
 
5
4
  // READING FOR INITAL REFERENCE
6
- function readSpecificFiles(configFilePath) {
7
-
5
+ async function readSpecificFiles(configFilePath) {
8
6
  try {
9
- // Read the content of the config file
10
- const configContent = fs.readFileSync(configFilePath, 'utf8');
11
- // Parse the config file content as JavaScript
12
- const config = eval(configContent);
13
- // Extract the file paths from the config object
14
- const filePaths = config.filePaths;
15
- const configDir = path.dirname(configFilePath);
7
+ // Dynamically import the config file
8
+ const absoluteConfigPath = path.resolve(configFilePath);
9
+ const configModule = await import('file://' + absoluteConfigPath);
10
+ const config = configModule.default;
16
11
 
12
+ const filePaths = config.filePaths;
17
13
  let allContent = 'I am sharing information from my file system for reference in our chat.\n';
18
-
19
- filePaths.forEach((filePath) => {
14
+
15
+ for (const filePath of filePaths) {
20
16
  try {
21
17
  // Construct the absolute path
22
- const absolutePath = path.resolve(configDir, filePath);
18
+ const absolutePath = path.resolve(process.cwd(), filePath);
23
19
  const fileContent = fs.readFileSync(absolutePath, 'utf8');
24
20
 
25
-
26
-
27
21
  // Read the file content and add it to allContent
28
22
  allContent += `\nStart File Name: ${filePath}\n File Content:\n${fileContent}\n End File Name: ${filePath}`;
29
23
  } catch (error) {
30
- console.error(`Error reading file ${filePath}: ${error.message}`.bgRed);
24
+ console.error(`Error reading file ${filePath}: ${error.message}`);
31
25
  }
32
- });
26
+ }
33
27
 
34
28
  // Add console.log statements to communicate to the user
35
- console.log(`${aiVersion} sent reference files:`.yellow, `${logFileNames(filePaths)}`.yellow);
36
- return allContent;
29
+ console.log(
30
+ `${config.aiVersion} sent reference files:`.yellow,
31
+ `${logFileNames(filePaths)}`.yellow
32
+ );
33
+ return allContent;
37
34
  } catch (error) {
38
- console.error(`Error reading config file: ${error.message}`.bgRed);
35
+ console.error(`Error reading config file: ${error.message}`);
39
36
  return '';
40
37
  }
41
38
  }
42
39
 
43
40
  function writeFileFromPrompt(promptFileName, contentToWrite, baseDir) {
44
41
  try {
45
-
46
42
  if (!promptFileName.includes('.')) {
47
- throw new Error("Invalid file name. Please include a file name with an extension (e.g., 'output.txt').");
43
+ throw new Error(
44
+ "Invalid file name. Please include a file name with an extension (e.g., 'output.txt')."
45
+ );
48
46
  }
49
-
47
+
50
48
  const projectRoot = process.cwd();
51
49
  const fullPath = path.join(projectRoot, `interintel/session-samples/${promptFileName}`);
52
50
  const directoryPath = path.dirname(fullPath);
@@ -58,7 +56,6 @@ function writeFileFromPrompt(promptFileName, contentToWrite, baseDir) {
58
56
  fs.writeFileSync(fullPath, contentToWrite + '\n');
59
57
  console.log(`Content written to ${fullPath}`.yellow);
60
58
  return true;
61
-
62
59
  } catch (error) {
63
60
  console.error(`Error writing file: ${error.message}`.bgRed);
64
61
  return false;
@@ -69,7 +66,7 @@ function writeFileFromPrompt(promptFileName, contentToWrite, baseDir) {
69
66
  function logFileNames(filePaths) {
70
67
  let fileNames = [];
71
68
 
72
- console.log("")
69
+ console.log('');
73
70
  console.log(`System message`.bgYellow + `: `.yellow);
74
71
  filePaths.forEach((filePath) => {
75
72
  const fileName = path.basename(filePath);
@@ -84,6 +81,4 @@ function appendToFile(filePath, data) {
84
81
  }
85
82
 
86
83
  // Export the function and the array
87
- module.exports = {
88
- readSpecificFiles, writeFileFromPrompt
89
- };
84
+ export { readSpecificFiles, writeFileFromPrompt };
@@ -1,5 +1,7 @@
1
- const chatCompletion = require('../ollama.js');
2
- const { writeFileFromPrompt } = require('./file-functions.js');
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { chatCompletion } from '../serviceInterface.js';
4
+ import { writeFileFromPrompt } from './file-functions.js';
3
5
 
4
6
  async function handleWriteFile(config, messages, currentState, userInput, promptFileName) {
5
7
  let contentToWrite = '';
@@ -34,8 +36,12 @@ async function handleWriteFile(config, messages, currentState, userInput, prompt
34
36
  );
35
37
 
36
38
  // Extract the response content
37
- let contentToWrite = (config.aiService === 'openai') ?
38
- completionResponse.choices[0].message.content : completionResponse;
39
+ let contentToWrite =
40
+ config.aiService === 'openai'
41
+ ? completionResponse.choices[0].message.content
42
+ : completionResponse;
43
+
44
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
39
45
 
40
46
  await writeFileFromPrompt(promptFileName, contentToWrite, __dirname); // Assuming this function handles file writing
41
47
 
@@ -63,4 +69,4 @@ async function handleWriteFile(config, messages, currentState, userInput, prompt
63
69
  return { currentState, messages, promptFileName, contentToWrite, response: '' };
64
70
  }
65
71
 
66
- module.exports = { handleWriteFile };
72
+ export { handleWriteFile };
package/index.js CHANGED
@@ -1,14 +1,16 @@
1
- const path = require('path');
2
- const readline = require('readline');
1
+ import path from 'path';
2
+ import readline from 'readline';
3
+ import dotenv from 'dotenv';
4
+ import colors from 'colors';
3
5
  const configPath = path.join(process.cwd(), 'interintel.config.js');
4
- const config = require(configPath);
5
- require('dotenv').config();
6
- require('colors');
7
6
 
8
- const { readSpecificFiles } = require('./functions/file-functions.js');
9
- const { askQuestion } = require('./functions/chat-functions.js');
10
- const { handleWriteFile } = require('./functions/handleWriteFile.js');
11
- const chatCompletion = require('./ollama.js');
7
+ import config from './interintel.config.js';
8
+ import { readSpecificFiles } from './functions/file-functions.js';
9
+ import { askQuestion } from './functions/chat-functions.js';
10
+ import { handleWriteFile } from './functions/handleWriteFile.js';
11
+ import { chatCompletion } from './serviceInterface.js';
12
+
13
+ dotenv.config();
12
14
 
13
15
  const rl = readline.createInterface({
14
16
  input: process.stdin,
@@ -16,7 +18,7 @@ const rl = readline.createInterface({
16
18
  });
17
19
 
18
20
  async function main() {
19
- let initialContent = readSpecificFiles(configPath);
21
+ let initialContent = await readSpecificFiles(configPath);
20
22
  let messages = [{ role: 'system', content: initialContent }];
21
23
 
22
24
  let currentState = null;
@@ -34,12 +36,7 @@ async function main() {
34
36
  }
35
37
 
36
38
  if (userMessage.toLowerCase().startsWith('//writefile') && currentState === null) {
37
- let result = await handleWriteFile(
38
- config,
39
- messages,
40
- currentState,
41
- ''
42
- );
39
+ let result = await handleWriteFile(config, messages, currentState, '');
43
40
  ({ currentState, messages, promptFileName, response } = result); // Update messages array
44
41
  console.log(response.yellow);
45
42
  } else if (currentState === 'awaitingFileName') {
@@ -71,9 +68,9 @@ async function main() {
71
68
  });
72
69
  const completion = await chatCompletion(config.aiService, messages, config.aiVersion);
73
70
 
74
- let botMessage;
71
+ let botMessage = '';
75
72
 
76
- if (config.aiService === 'openai') {
73
+ if (config.aiService === 'openai' || config.aiService === 'mistral') {
77
74
  botMessage = completion.choices[0].message.content;
78
75
  } else if (config.aiService === 'ollama') {
79
76
  // Adjust this line based on how Ollama's response is structured
@@ -86,7 +83,7 @@ async function main() {
86
83
  const completion = await chatCompletion(config.aiService, messages, config.aiVersion);
87
84
 
88
85
  let botMessage;
89
- if (config.aiService === 'openai') {
86
+ if (config.aiService === 'openai' || config.aiService === 'mistral') {
90
87
  botMessage = completion.choices[0].message.content;
91
88
  } else if (config.aiService === 'ollama') {
92
89
  // Adjust based on Ollama's response format
@@ -99,6 +96,4 @@ async function main() {
99
96
  }
100
97
  }
101
98
 
102
- exports.main = function () {
103
- main();
104
- };
99
+ export { main };
@@ -1,10 +1,11 @@
1
- require('dotenv').config();
1
+ import dotenv from 'dotenv';
2
+ dotenv.config();
2
3
 
3
4
  const config = {
4
- apiKey: `${process.env.OPENAI_API_KEY}`,
5
- aiService: 'ollama',
6
- aiVersion: `mistral`,
7
- filePaths: ['./functions/openai-functions.js', './README.md'],
5
+ apiKey: `${process.env.MISTRAL_API_KEY}`,
6
+ aiService: 'mistral',
7
+ aiVersion: `mistral-tiny`,
8
+ filePaths: ['serviceInterface.js'],
8
9
  };
9
10
 
10
- module.exports = config;
11
+ export default config;
package/mistral.js ADDED
@@ -0,0 +1,14 @@
1
+ import MistralClient from '@mistralai/mistralai'
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ const apiKey = process.env.MISTRAL_API_KEY;
6
+
7
+ const client = new MistralClient(apiKey);
8
+
9
+ const completion = await client.chat({
10
+ model: 'mistral-medium',
11
+ messages: [{role: 'user', content: 'When were you last fine tuned? Please keep to under 25 words'}],
12
+ });
13
+
14
+ console.log('Chat:', completion.choices[0].message.content);
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "dependencies": {
3
+ "@mistralai/mistralai": "^0.0.8",
3
4
  "colors": "^1.4.0",
4
5
  "dotenv": "^16.3.1",
5
6
  "openai": "^4.24.0"
6
7
  },
7
8
  "name": "interintel",
8
9
  "description": "The application `Interintel` is a command line interface (CLI) application implemented in Node.js. It essentially is an interactive communication tool between the user and an AI model, only openai models for now.",
9
- "version": "1.0.21",
10
+ "version": "1.0.22",
11
+ "type": "module",
10
12
  "main": "index.js",
11
13
  "directories": {
12
14
  "doc": "docs"
@@ -1,23 +1,25 @@
1
- const path = require('path');
2
- const fetch = require('node-fetch');
3
- const OpenAI = require('openai');
1
+ import path from 'path';
2
+ import fetch from 'node-fetch';
3
+ import OpenAI from 'openai';
4
+ import MistralClient from '@mistralai/mistralai';
5
+
4
6
  const configPath = path.join(process.cwd(), 'interintel.config.js');
5
- const config = require(configPath);
7
+
8
+ let config;
9
+ try {
10
+ const importedModule = await import(configPath);
11
+ config = importedModule.default;
12
+ } catch (error) {
13
+ console.error('Failed to import config:', error);
14
+ }
15
+
16
+ const mistralClient = new MistralClient(config.apiKey);
6
17
 
7
18
  const openai = new OpenAI({
8
19
  apiKey: config.apiKey,
9
20
  model: config.aiVersion,
10
21
  });
11
22
 
12
- let ai = 'ollama';
13
- let messages = [
14
- {
15
- role: 'assistant',
16
- content: 'please use a respectful tone',
17
- },
18
- ];
19
- let model = 'mistral';
20
-
21
23
  async function chatCompletion(aiService, messages, model) {
22
24
  try {
23
25
  let response;
@@ -30,6 +32,16 @@ async function chatCompletion(aiService, messages, model) {
30
32
  });
31
33
 
32
34
  return response;
35
+
36
+ } else if (aiService === 'mistral') {
37
+ let chatResponse;
38
+
39
+ chatResponse = await mistralClient.chat({
40
+ model: model, // or a specific model you wish to use
41
+ messages: messages,
42
+ });
43
+
44
+ return chatResponse;
33
45
  } else if (aiService === 'ollama') {
34
46
  // Ollama specific code
35
47
  let data = {
@@ -57,4 +69,4 @@ async function chatCompletion(aiService, messages, model) {
57
69
  }
58
70
  }
59
71
 
60
- module.exports = chatCompletion;
72
+ export { chatCompletion };