utilitas 2001.1.84 → 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/README.md +2 -2
- package/dist/utilitas.lite.mjs +1 -1
- package/dist/utilitas.lite.mjs.map +1 -1
- package/lib/alan.mjs +45 -11
- package/lib/manifest.mjs +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
|
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.',
|
|
75
|
-
'...', 3, 'ATTACHMENT', { processing: true }, ' █', '\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
|
-
[
|
|
161
|
-
...OPENAI_RULES,
|
|
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?.
|
|
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
|
-
|
|
1543
|
+
GPT_IMAGE_15,
|
|
1510
1544
|
GPT_52,
|
|
1511
1545
|
IMAGEN_4_ULTRA,
|
|
1512
1546
|
INSTRUCTIONS,
|
package/lib/manifest.mjs
CHANGED