utilitas 2001.1.83 → 2001.1.85

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
@@ -47,19 +47,19 @@ const [
47
47
  OPENAI, GOOGLE, OLLAMA, NOVA, DEEPSEEK_32, MD_CODE, CLOUD_OPUS_45, AUDIO,
48
48
  WAV, OPENAI_VOICE, GPT_REASONING_EFFORT, THINK, THINK_STR, THINK_END,
49
49
  TOOLS_STR, TOOLS_END, TOOLS, TEXT, OK, FUNC, GPT_52, GPT_51_CODEX,
50
- GPT_5_IMAGE, GEMMA_3_27B, ANTHROPIC, ais, MAX_TOOL_RECURSION, LOG, name,
50
+ GPT_IMAGE_15, GEMMA_3_27B, ANTHROPIC, ais, MAX_TOOL_RECURSION, LOG, name,
51
51
  user, system, assistant, JSON_OBJECT, PROMPT_IS_REQUIRED, k, trimTailing,
52
52
  trimBeginning, GEMINI_30_PRO_IMAGE, IMAGE, JINA, JINA_DEEPSEARCH,
53
53
  SILICONFLOW, SF_DEEPSEEK_32, OPENROUTER_API, OPENROUTER, AUTO, TOOL, ONLINE,
54
54
  GEMINI_30_PRO, GEMINI_30_FLASH, IMAGEN_4_ULTRA, VEO_31, IMAGEN_4_UPSCALE,
55
- ERROR_GENERATING, GEMINI_25_FLASH_TTS, GEMINI_25_PRO_TTS, wav,
55
+ ERROR_GENERATING, GEMINI_25_FLASH_TTS, GEMINI_25_PRO_TTS, wav, PNG_EXT,
56
56
  GPT_4O_MIMI_TTS, GPT_4O_TRANSCRIBE, INVALID_AUDIO, OGG_EXT, ELLIPSIS,
57
57
  TOP_LIMIT, ATTACHMENT, PROCESSING, CURSOR, LN1, LN2, TOP, DEEPSEEK
58
58
  ] = [
59
59
  'OpenAI', 'Google', 'Ollama', 'nova', 'deepseek-3.2-speciale', '```',
60
60
  'claude-opus-4.5', 'audio', 'wav', 'OPENAI_VOICE', 'medium', 'think',
61
61
  '<think>', '</think>', '<tools>', '</tools>', 'tools', 'text', 'OK',
62
- 'function', 'gpt-5.2', 'gpt-5.1-codex', 'gpt-5-image', 'gemma3:27b',
62
+ 'function', 'gpt-5.2', 'gpt-5.1-codex', 'gpt-image-1.5', 'gemma3:27b',
63
63
  'Anthropic', [], 30, { log: true }, 'Alan', 'user', { role: 'system' },
64
64
  { role: 'assistant' }, 'json_object', 'Prompt is required.',
65
65
  x => 1000 * x, x => x.replace(/[\.\s]*$/, ''),
@@ -70,10 +70,10 @@ const [
70
70
  'gemini-3-pro-preview', 'gemini-3-flash-preview',
71
71
  'imagen-4.0-ultra-generate-001', 'veo-3.1-generate-preview',
72
72
  'imagen-4.0-upscale-preview', 'Error generating content.',
73
- 'gemini-2.5-flash-preview-tts', 'gemini-2.5-pro-tts', 'wav',
74
- 'gpt-4o-mini-tts', 'gpt-4o-transcribe', 'Invalid audio data.', 'ogg',
75
- '...', 3, 'ATTACHMENT', { processing: true }, ' █', '\n\n', '\n\n\n',
76
- 'top', 'DeepSeek',
73
+ 'gemini-2.5-flash-preview-tts', 'gemini-2.5-pro-preview-tts', 'wav',
74
+ 'png', 'gpt-4o-mini-tts', 'gpt-4o-transcribe', 'Invalid audio data.',
75
+ 'ogg', '...', 3, 'ATTACHMENT', { processing: true }, ' █', '\n\n',
76
+ '\n\n\n', 'top', 'DeepSeek',
77
77
  ];
78
78
 
79
79
  const [joinL1, joinL2]
@@ -157,8 +157,9 @@ const MODELS = {
157
157
  video: true, vision: true,
158
158
  supportedMimeTypes: [MIME_PNG, MIME_JPEG], defaultProvider: GOOGLE,
159
159
  },
160
- [GPT_5_IMAGE]: {
161
- ...OPENAI_RULES, label: 'gpt-image-1', image: true,
160
+ [GPT_IMAGE_15]: {
161
+ ...OPENAI_RULES, image: true, defaultProvider: OPENAI,
162
+ supportedMimeTypes: [MIME_PNG, MIME_JPEG, MIME_GIF, MIME_WEBP],
162
163
  },
163
164
  // models with code capabilities
164
165
  [GPT_51_CODEX]: { ...OPENAI_RULES },
@@ -1113,7 +1114,40 @@ const promptOpenAI = async (aiId, prompt, options = {}) => {
1113
1114
  const target_model = options?.model || model.name;
1114
1115
  const M = MODELS[target_model];
1115
1116
  prompt = ensureString(prompt, { trim: true });
1116
- if (M?.audio) {
1117
+ if (M?.image) {
1118
+ assertPrompt(prompt);
1119
+ prompt = trimText(prompt, { limit: M.maxInputTokens });
1120
+ var resp = await client.images.generate({
1121
+ model: M.name, moderation: 'low', output_format: 'png',
1122
+ prompt, quality: 'high', size: '1536x1024',
1123
+ // n = 1, // 1 ~ 10
1124
+ // @TODO: 支持 streaming image generation
1125
+ // https://platform.openai.com/docs/guides/image-generation?api=responses
1126
+ // partial_images: 3, stream: true,
1127
+ // @TODO: 支持 image editing {}
1128
+ ...options?.params || {},
1129
+ });
1130
+ if (!options?.raw) {
1131
+ // print(resp);
1132
+ resp = {
1133
+ text: '', images: await Promise.all(resp.data.map(
1134
+ async (x, i) => {
1135
+ const buffer = await convert(
1136
+ x.b64_json, { input: BASE64 }
1137
+ );
1138
+ return {
1139
+ data: await convert(buffer, {
1140
+ input: BUFFER, suffix: PNG_EXT, ...options || {}
1141
+ }),
1142
+ mimeType: (await getMime(
1143
+ buffer, `${i}.${resp.output_format}`
1144
+ ))?.mime || MIME_PNG,
1145
+ }
1146
+ })
1147
+ ), model: packModelId([provider, M.source, M.name]),
1148
+ };
1149
+ }
1150
+ } else if (M?.audio) {
1117
1151
  assertPrompt(prompt);
1118
1152
  const ins_prompt = options?.prompt || `${TTS_PROMPT}.`;
1119
1153
  prompt = trimText(prompt, {
@@ -1506,7 +1540,7 @@ export {
1506
1540
  GEMINI_30_FLASH,
1507
1541
  GEMINI_25_PRO_TTS,
1508
1542
  GEMINI_30_PRO_IMAGE,
1509
- GPT_5_IMAGE,
1543
+ GPT_IMAGE_15,
1510
1544
  GPT_52,
1511
1545
  IMAGEN_4_ULTRA,
1512
1546
  INSTRUCTIONS,
package/lib/bot.mjs CHANGED
@@ -9,10 +9,10 @@ const sendMd = (cId, cnt, opt) => send(cId, cnt, { parse_mode, ...opt || {} });
9
9
 
10
10
  const [ // https://limits.tginfo.me/en
11
11
  BOT_SEND, provider, signals, MESSAGE_LENGTH_LIMIT, EMOJI_THINKING,
12
- PARSE_MODE_MD, PARSE_MODE_MD_V2, BOT
12
+ PARSE_MODE_MD, PARSE_MODE_MD_V2, BOT, EMOJI_WARNING,
13
13
  ] = [
14
14
  'BOT_SEND', 'TELEGRAM', ['SIGINT', 'SIGTERM'], parseInt(4096 * 0.93), // ~= 3800
15
- '💬', 'Markdown', 'MarkdownV2', '🤖',
15
+ '💬', 'Markdown', 'MarkdownV2', '🤖', '⚠️',
16
16
  ];
17
17
 
18
18
  const parse_mode = PARSE_MODE_MD;
@@ -61,6 +61,7 @@ export {
61
61
  _NEED,
62
62
  BOT,
63
63
  EMOJI_THINKING,
64
+ EMOJI_WARNING,
64
65
  MESSAGE_LENGTH_LIMIT,
65
66
  PARSE_MODE_MD_V2,
66
67
  PARSE_MODE_MD,
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": "2001.1.83",
4
+ "version": "2001.1.85",
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": "2001.1.83",
4
+ "version": "2001.1.85",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/Leask/utilitas",
7
7
  "main": "index.mjs",