utilitas 1998.2.8 → 1998.2.10

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.
package/lib/alan.mjs CHANGED
@@ -1087,9 +1087,15 @@ const getMaxChatPromptLimit = (options) => {
1087
1087
 
1088
1088
  const distillFile = async (attachments, o) => {
1089
1089
  const strPmt = o?.prompt || (
1090
- 'You are an intelligent document scanner.'
1091
- + ' Please help me scan the following document and only return the scanning results.'
1092
- + (o.summarize ? ' Please organize the content of this document, systematically present the information it contains, and remove any unimportant filler content.' : '')
1090
+ 'You are an intelligent document analyzer.'
1091
+ + ' You will receive various multimedia files, including images, audio, and videos.'
1092
+ + ' Please analyze these documents, extract the information, and organize it into an easy-to-read format.'
1093
+ + ' For document-type files or image files primarily containing text information, act as a document scanner, return the text content, and describe any images and tables present.'
1094
+ + ' For audio files, please provide a transcript of the spoken voices. If there are background noises or music, attempt to briefly describe the environmental sounds and music sections.'
1095
+ + ' For images or video files that are not primarily text-based, describe the tragic scene you observe, highlight key details, convey the emotional tone of the setting, and share your impressions.'
1096
+ + ' For video files, please describe the content, including the theme, subjects, characters, scenes, objects, storyline, and emotional tone.'
1097
+ + ' Please RETURN ONLY your analysis results without including your thought process or other unrelated information.'
1098
+ + (o.summarize ? ' Please organize the key content of this document, systematically present the key information it contains in a concise summary, and remove any unimportant filler content.' : '')
1093
1099
  + (o.toLanguage ? ` Please return the results in ${o.toLanguage}.` : '')
1094
1100
  + (o.keepPaging ? '' : ' If the document has multiple pages, merge them into one page. Please do not return any paging information.')
1095
1101
  + (o.keepDecoration ? '' : ' If the document has headers, footers, or watermarks, please ignore them.')
@@ -1107,12 +1113,16 @@ const distillFile = async (attachments, o) => {
1107
1113
  }
1108
1114
  attachments = await Promise.all(attachments);
1109
1115
  // print(attachments);
1110
- return await prompt(strPmt, { fast: true, ...o, attachments });
1116
+ return await prompt(strPmt, {
1117
+ fast: true, multimodal: true, ...o, attachments,
1118
+ });
1111
1119
  };
1112
1120
 
1113
1121
  const prompt = async (input, options) => {
1114
1122
  let egn = options?.engine && unifyEngine(options);
1115
- for (const engine of PREFERRED_ENGINES) {
1123
+ const engines = PREFERRED_ENGINES.slice();
1124
+ options?.multimodal && engines.sort((x, y) => x.multimodal - y.multimodal);
1125
+ for (const engine of engines) {
1116
1126
  if ((egn ? engine.client === egn : true) && clients[engine.client]) {
1117
1127
  const extra = {};
1118
1128
  if (engine.client === OPENAI) {
@@ -1175,9 +1185,10 @@ const analyzeSessions = async (sessionIds, options) => {
1175
1185
  };
1176
1186
 
1177
1187
  const PREFERRED_ENGINES = [
1178
- { client: OPENAI, func: promptChatGPT },
1179
- { client: GEMINI, func: promptGemini },
1180
- { client: CLAUDE, func: promptClaude },
1188
+ { client: OPENAI, func: promptChatGPT, multimodal: 1 },
1189
+ { client: GEMINI, func: promptGemini, multimodal: 0 },
1190
+ { client: CLAUDE, func: promptClaude, multimodal: 2 },
1191
+ { client: OLLAMA, func: promptOllama, multimodal: 99 },
1181
1192
  ]; // keep gpt first to avoid gemini grounding by default
1182
1193
 
1183
1194
  export default init;
package/lib/bot.mjs CHANGED
@@ -814,14 +814,12 @@ const subconscious = [{
814
814
  file, BUFFER_ENCODE
815
815
  ), logOptions)
816
816
  ).filter(x => x).join('\n'));
817
- if (content) {
818
- ctx.collect(lines([
819
- '---', `file_name: ${f.file_name}`,
820
- `mime_type: ${f.mime_type}`, `type: ${f.type}`,
821
- '---',
822
- content
823
- ]), 'VISION');
824
- }
817
+ content && ctx.collect(lines([
818
+ '---', `file_name: ${f.file_name}`,
819
+ `mime_type: ${f.mime_type}`, `type: ${f.type}`,
820
+ '---',
821
+ content
822
+ ]), 'VISION');
825
823
  };
826
824
  if (f.asPrompt) {
827
825
  ctx.collect({
package/lib/manifest.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  const manifest = {
2
2
  "name": "utilitas",
3
3
  "description": "Just another common utility for JavaScript.",
4
- "version": "1998.2.8",
4
+ "version": "1998.2.10",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/Leask/utilitas",
7
7
  "main": "index.mjs",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "utilitas",
3
3
  "description": "Just another common utility for JavaScript.",
4
- "version": "1998.2.8",
4
+ "version": "1998.2.10",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/Leask/utilitas",
7
7
  "main": "index.mjs",