@steipete/summarize-core 0.11.0 → 0.12.0
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/LICENSE +21 -0
- package/dist/esm/content/bun.js +21 -0
- package/dist/esm/content/bun.js.map +1 -0
- package/dist/esm/content/index.js +1 -0
- package/dist/esm/content/index.js.map +1 -1
- package/dist/esm/content/link-preview/client.js +6 -0
- package/dist/esm/content/link-preview/client.js.map +1 -1
- package/dist/esm/content/link-preview/content/fetcher.js +19 -2
- package/dist/esm/content/link-preview/content/fetcher.js.map +1 -1
- package/dist/esm/content/link-preview/content/firecrawl.js.map +1 -1
- package/dist/esm/content/link-preview/content/html.js.map +1 -1
- package/dist/esm/content/link-preview/content/index.js +29 -12
- package/dist/esm/content/link-preview/content/index.js.map +1 -1
- package/dist/esm/content/link-preview/content/utils.js.map +1 -1
- package/dist/esm/content/transcript/index.js +2 -0
- package/dist/esm/content/transcript/index.js.map +1 -1
- package/dist/esm/content/transcript/providers/generic.js +10 -11
- package/dist/esm/content/transcript/providers/generic.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/apple-flow.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/media.js +9 -1
- package/dist/esm/content/transcript/providers/podcast/media.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/provider-flow.js +157 -0
- package/dist/esm/content/transcript/providers/podcast/provider-flow.js.map +1 -0
- package/dist/esm/content/transcript/providers/podcast/rss-feed.js +123 -0
- package/dist/esm/content/transcript/providers/podcast/rss-feed.js.map +1 -0
- package/dist/esm/content/transcript/providers/podcast/rss-transcript.js +113 -0
- package/dist/esm/content/transcript/providers/podcast/rss-transcript.js.map +1 -0
- package/dist/esm/content/transcript/providers/podcast/rss.js +2 -226
- package/dist/esm/content/transcript/providers/podcast/rss.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast/spotify-flow.js.map +1 -1
- package/dist/esm/content/transcript/providers/podcast.js +26 -155
- package/dist/esm/content/transcript/providers/podcast.js.map +1 -1
- package/dist/esm/content/transcript/providers/transcription-capability.js +22 -0
- package/dist/esm/content/transcript/providers/transcription-capability.js.map +1 -0
- package/dist/esm/content/transcript/providers/transcription-start.js +40 -30
- package/dist/esm/content/transcript/providers/transcription-start.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube/api.js +3 -2
- package/dist/esm/content/transcript/providers/youtube/api.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube/captions-player.js +173 -0
- package/dist/esm/content/transcript/providers/youtube/captions-player.js.map +1 -0
- package/dist/esm/content/transcript/providers/youtube/captions-shared.js +8 -0
- package/dist/esm/content/transcript/providers/youtube/captions-shared.js.map +1 -0
- package/dist/esm/content/transcript/providers/youtube/captions-transcript.js +361 -0
- package/dist/esm/content/transcript/providers/youtube/captions-transcript.js.map +1 -0
- package/dist/esm/content/transcript/providers/youtube/captions.js +2 -557
- package/dist/esm/content/transcript/providers/youtube/captions.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube/provider-flow.js +189 -0
- package/dist/esm/content/transcript/providers/youtube/provider-flow.js.map +1 -0
- package/dist/esm/content/transcript/providers/youtube/yt-dlp.js +7 -2
- package/dist/esm/content/transcript/providers/youtube/yt-dlp.js.map +1 -1
- package/dist/esm/content/transcript/providers/youtube.js +42 -194
- package/dist/esm/content/transcript/providers/youtube.js.map +1 -1
- package/dist/esm/content/transcript/transcription-config.js +24 -4
- package/dist/esm/content/transcript/transcription-config.js.map +1 -1
- package/dist/esm/content/url.js +3 -3
- package/dist/esm/content/url.js.map +1 -1
- package/dist/esm/processes.js.map +1 -1
- package/dist/esm/prompts/format.js +6 -0
- package/dist/esm/prompts/format.js.map +1 -1
- package/dist/esm/prompts/link-summary.js +27 -3
- package/dist/esm/prompts/link-summary.js.map +1 -1
- package/dist/esm/transcription/onnx-cli.js.map +1 -1
- package/dist/esm/transcription/whisper/assemblyai.js +132 -0
- package/dist/esm/transcription/whisper/assemblyai.js.map +1 -0
- package/dist/esm/transcription/whisper/chunking.js +64 -0
- package/dist/esm/transcription/whisper/chunking.js.map +1 -0
- package/dist/esm/transcription/whisper/cloud-providers.js +69 -0
- package/dist/esm/transcription/whisper/cloud-providers.js.map +1 -0
- package/dist/esm/transcription/whisper/core.js +316 -390
- package/dist/esm/transcription/whisper/core.js.map +1 -1
- package/dist/esm/transcription/whisper/gemini.js +324 -0
- package/dist/esm/transcription/whisper/gemini.js.map +1 -0
- package/dist/esm/transcription/whisper/preferences.js +16 -0
- package/dist/esm/transcription/whisper/preferences.js.map +1 -0
- package/dist/esm/transcription/whisper/provider-setup.js +62 -0
- package/dist/esm/transcription/whisper/provider-setup.js.map +1 -0
- package/dist/esm/transcription/whisper/remote-provider-attempts.js +189 -0
- package/dist/esm/transcription/whisper/remote-provider-attempts.js.map +1 -0
- package/dist/esm/transcription/whisper/remote.js +220 -0
- package/dist/esm/transcription/whisper/remote.js.map +1 -0
- package/dist/esm/transcription/whisper/whisper-cpp.js.map +1 -1
- package/dist/types/content/bun.d.ts +6 -0
- package/dist/types/content/index.d.ts +1 -0
- package/dist/types/content/link-preview/client.d.ts +3 -1
- package/dist/types/content/link-preview/content/fetcher.d.ts +1 -1
- package/dist/types/content/link-preview/content/html.d.ts +1 -1
- package/dist/types/content/link-preview/deps.d.ts +8 -2
- package/dist/types/content/link-preview/types.d.ts +1 -1
- package/dist/types/content/transcript/providers/podcast/flow-context.d.ts +3 -0
- package/dist/types/content/transcript/providers/podcast/media.d.ts +4 -2
- package/dist/types/content/transcript/providers/podcast/provider-flow.d.ts +7 -0
- package/dist/types/content/transcript/providers/podcast/rss-feed.d.ts +15 -0
- package/dist/types/content/transcript/providers/podcast/rss-transcript.d.ts +12 -0
- package/dist/types/content/transcript/providers/podcast/rss.d.ts +2 -24
- package/dist/types/content/transcript/providers/transcription-capability.d.ts +18 -0
- package/dist/types/content/transcript/providers/transcription-start.d.ts +10 -3
- package/dist/types/content/transcript/providers/youtube/captions-player.d.ts +12 -0
- package/dist/types/content/transcript/providers/youtube/captions-shared.d.ts +42 -0
- package/dist/types/content/transcript/providers/youtube/captions-transcript.d.ts +4 -0
- package/dist/types/content/transcript/providers/youtube/captions.d.ts +2 -19
- package/dist/types/content/transcript/providers/youtube/provider-flow.d.ts +34 -0
- package/dist/types/content/transcript/providers/youtube/yt-dlp.d.ts +4 -2
- package/dist/types/content/transcript/transcription-config.d.ts +6 -0
- package/dist/types/content/transcript/types.d.ts +1 -0
- package/dist/types/prompts/format.d.ts +1 -0
- package/dist/types/prompts/link-summary.d.ts +2 -1
- package/dist/types/transcription/whisper/assemblyai.d.ts +17 -0
- package/dist/types/transcription/whisper/chunking.d.ts +11 -0
- package/dist/types/transcription/whisper/cloud-providers.d.ts +22 -0
- package/dist/types/transcription/whisper/core.d.ts +12 -14
- package/dist/types/transcription/whisper/gemini.d.ts +14 -0
- package/dist/types/transcription/whisper/preferences.d.ts +4 -0
- package/dist/types/transcription/whisper/provider-setup.d.ts +30 -0
- package/dist/types/transcription/whisper/remote-provider-attempts.d.ts +51 -0
- package/dist/types/transcription/whisper/remote.d.ts +51 -0
- package/dist/types/transcription/whisper/types.d.ts +1 -1
- package/package.json +15 -16
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { transcribeWithAssemblyAi, transcribeFileWithAssemblyAi } from "./assemblyai.js";
|
|
2
|
+
import { MAX_OPENAI_UPLOAD_BYTES } from "./constants.js";
|
|
3
|
+
import { transcribeWithFal } from "./fal.js";
|
|
4
|
+
import { isFfmpegAvailable, transcodeBytesToMp3 } from "./ffmpeg.js";
|
|
5
|
+
import { transcribeFileWithGemini, transcribeWithGemini } from "./gemini.js";
|
|
6
|
+
import { shouldRetryOpenAiViaFfmpeg, transcribeWithOpenAi } from "./openai.js";
|
|
7
|
+
import { formatBytes, wrapError } from "./utils.js";
|
|
8
|
+
export async function attemptRemoteBytesProvider(args) {
|
|
9
|
+
const executor = BYTE_PROVIDER_EXECUTORS[args.provider];
|
|
10
|
+
return executor(args);
|
|
11
|
+
}
|
|
12
|
+
export async function attemptRemoteFileProvider(args) {
|
|
13
|
+
if (args.provider === "assemblyai") {
|
|
14
|
+
try {
|
|
15
|
+
const text = await transcribeFileWithAssemblyAi({
|
|
16
|
+
filePath: args.filePath,
|
|
17
|
+
mediaType: args.mediaType,
|
|
18
|
+
apiKey: args.assemblyaiApiKey,
|
|
19
|
+
});
|
|
20
|
+
if (text)
|
|
21
|
+
return { kind: "result", result: { text, provider: "assemblyai", error: null, notes: [] } };
|
|
22
|
+
return { kind: "error", error: new Error("AssemblyAI transcription returned empty text") };
|
|
23
|
+
}
|
|
24
|
+
catch (caught) {
|
|
25
|
+
return {
|
|
26
|
+
kind: "error",
|
|
27
|
+
error: caught instanceof Error ? caught : wrapError("AssemblyAI transcription failed", caught),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (args.provider === "gemini") {
|
|
32
|
+
try {
|
|
33
|
+
const text = await transcribeFileWithGemini({
|
|
34
|
+
filePath: args.filePath,
|
|
35
|
+
mediaType: args.mediaType,
|
|
36
|
+
filename: args.filename,
|
|
37
|
+
apiKey: args.geminiApiKey,
|
|
38
|
+
env: args.env,
|
|
39
|
+
});
|
|
40
|
+
if (text)
|
|
41
|
+
return { kind: "result", result: { text, provider: "gemini", error: null, notes: [] } };
|
|
42
|
+
return { kind: "error", error: new Error("Gemini transcription returned empty text") };
|
|
43
|
+
}
|
|
44
|
+
catch (caught) {
|
|
45
|
+
return {
|
|
46
|
+
kind: "error",
|
|
47
|
+
error: wrapError("Gemini transcription failed", caught),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { kind: "delegate-to-bytes" };
|
|
52
|
+
}
|
|
53
|
+
const BYTE_PROVIDER_EXECUTORS = {
|
|
54
|
+
assemblyai: async ({ state, assemblyaiApiKey }) => {
|
|
55
|
+
try {
|
|
56
|
+
const text = await transcribeWithAssemblyAi(state.bytes, state.mediaType, assemblyaiApiKey);
|
|
57
|
+
if (text) {
|
|
58
|
+
return {
|
|
59
|
+
state,
|
|
60
|
+
result: { text, provider: "assemblyai", error: null, notes: [] },
|
|
61
|
+
error: null,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
state,
|
|
66
|
+
result: null,
|
|
67
|
+
error: new Error("AssemblyAI transcription returned empty text"),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (caught) {
|
|
71
|
+
return {
|
|
72
|
+
state,
|
|
73
|
+
result: null,
|
|
74
|
+
error: caught instanceof Error ? caught : wrapError("AssemblyAI transcription failed", caught),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
gemini: async ({ state, geminiApiKey, env }) => {
|
|
79
|
+
try {
|
|
80
|
+
const text = await transcribeWithGemini(state.bytes, state.mediaType, state.filename, geminiApiKey, { env });
|
|
81
|
+
if (text) {
|
|
82
|
+
return {
|
|
83
|
+
state,
|
|
84
|
+
result: { text, provider: "gemini", error: null, notes: [] },
|
|
85
|
+
error: null,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { state, result: null, error: new Error("Gemini transcription returned empty text") };
|
|
89
|
+
}
|
|
90
|
+
catch (caught) {
|
|
91
|
+
return {
|
|
92
|
+
state,
|
|
93
|
+
result: null,
|
|
94
|
+
error: wrapError("Gemini transcription failed", caught),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
openai: async ({ state, openaiApiKey, env, notes, onProgress, transcribeOversizedBytesWithChunking, }) => {
|
|
99
|
+
let nextState = state;
|
|
100
|
+
if (nextState.bytes.byteLength > MAX_OPENAI_UPLOAD_BYTES &&
|
|
101
|
+
transcribeOversizedBytesWithChunking &&
|
|
102
|
+
openaiApiKey) {
|
|
103
|
+
const canChunk = await isFfmpegAvailable();
|
|
104
|
+
if (canChunk) {
|
|
105
|
+
return {
|
|
106
|
+
state: nextState,
|
|
107
|
+
result: await transcribeOversizedBytesWithChunking({
|
|
108
|
+
bytes: nextState.bytes,
|
|
109
|
+
mediaType: nextState.mediaType,
|
|
110
|
+
filename: nextState.filename,
|
|
111
|
+
onProgress,
|
|
112
|
+
}),
|
|
113
|
+
error: null,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
notes.push(`Media too large for Whisper upload (${formatBytes(nextState.bytes.byteLength)}); transcribing first ${formatBytes(MAX_OPENAI_UPLOAD_BYTES)} only (install ffmpeg for full transcription)`);
|
|
117
|
+
nextState = {
|
|
118
|
+
...nextState,
|
|
119
|
+
bytes: nextState.bytes.slice(0, MAX_OPENAI_UPLOAD_BYTES),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
let error = null;
|
|
123
|
+
try {
|
|
124
|
+
const text = await transcribeWithOpenAi(nextState.bytes, nextState.mediaType, nextState.filename, openaiApiKey, { env });
|
|
125
|
+
if (text) {
|
|
126
|
+
return {
|
|
127
|
+
state: nextState,
|
|
128
|
+
result: { text, provider: "openai", error: null, notes: [] },
|
|
129
|
+
error: null,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
error = new Error("OpenAI transcription returned empty text");
|
|
133
|
+
}
|
|
134
|
+
catch (caught) {
|
|
135
|
+
error = wrapError("OpenAI transcription failed", caught);
|
|
136
|
+
}
|
|
137
|
+
if (error && shouldRetryOpenAiViaFfmpeg(error)) {
|
|
138
|
+
const canTranscode = await isFfmpegAvailable();
|
|
139
|
+
if (canTranscode) {
|
|
140
|
+
try {
|
|
141
|
+
notes.push("OpenAI could not decode media; transcoding via ffmpeg and retrying");
|
|
142
|
+
const mp3Bytes = await transcodeBytesToMp3(nextState.bytes);
|
|
143
|
+
const retried = await transcribeWithOpenAi(mp3Bytes, "audio/mpeg", "audio.mp3", openaiApiKey, { env });
|
|
144
|
+
if (retried) {
|
|
145
|
+
return {
|
|
146
|
+
state: { bytes: mp3Bytes, mediaType: "audio/mpeg", filename: "audio.mp3" },
|
|
147
|
+
result: { text: retried, provider: "openai", error: null, notes: [] },
|
|
148
|
+
error: null,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
error = new Error("OpenAI transcription returned empty text after ffmpeg transcode");
|
|
152
|
+
nextState = { bytes: mp3Bytes, mediaType: "audio/mpeg", filename: "audio.mp3" };
|
|
153
|
+
}
|
|
154
|
+
catch (caught) {
|
|
155
|
+
notes.push(`ffmpeg transcode failed; cannot retry OpenAI decode error: ${caught instanceof Error ? caught.message : String(caught)}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
notes.push("OpenAI could not decode media; install ffmpeg to enable transcoding retry");
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return { state: nextState, result: null, error };
|
|
163
|
+
},
|
|
164
|
+
fal: async ({ state, falApiKey, notes }) => {
|
|
165
|
+
if (!state.mediaType.toLowerCase().startsWith("audio/")) {
|
|
166
|
+
notes.push(`Skipping FAL transcription: unsupported mediaType ${state.mediaType}`);
|
|
167
|
+
return { state, result: null, error: null, skipped: true };
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const text = await transcribeWithFal(state.bytes, state.mediaType, falApiKey);
|
|
171
|
+
if (text) {
|
|
172
|
+
return {
|
|
173
|
+
state,
|
|
174
|
+
result: { text, provider: "fal", error: null, notes: [] },
|
|
175
|
+
error: null,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return { state, result: null, error: new Error("FAL transcription returned empty text") };
|
|
179
|
+
}
|
|
180
|
+
catch (caught) {
|
|
181
|
+
return {
|
|
182
|
+
state,
|
|
183
|
+
result: null,
|
|
184
|
+
error: wrapError("FAL transcription failed", caught),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=remote-provider-attempts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-provider-attempts.js","sourceRoot":"","sources":["../../../../src/transcription/whisper/remote-provider-attempts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { promises as fs } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { cloudProviderLabel, formatCloudFallbackTargets, resolveCloudProviderOrder, } from "./cloud-providers.js";
|
|
6
|
+
import { DEFAULT_SEGMENT_SECONDS, MAX_OPENAI_UPLOAD_BYTES } from "./constants.js";
|
|
7
|
+
import { isFfmpegAvailable } from "./ffmpeg.js";
|
|
8
|
+
import { buildMissingTranscriptionProviderMessage } from "./provider-setup.js";
|
|
9
|
+
import { attemptRemoteBytesProvider, attemptRemoteFileProvider, } from "./remote-provider-attempts.js";
|
|
10
|
+
import { formatBytes, readFirstBytes } from "./utils.js";
|
|
11
|
+
function withMergedNotes(result, notes) {
|
|
12
|
+
if (result.notes.length === 0)
|
|
13
|
+
return { ...result, notes };
|
|
14
|
+
return { ...result, notes: [...notes, ...result.notes] };
|
|
15
|
+
}
|
|
16
|
+
function buildNoProviderResult({ notes, groqApiKey, groqError, }) {
|
|
17
|
+
if (groqApiKey) {
|
|
18
|
+
return {
|
|
19
|
+
text: null,
|
|
20
|
+
provider: "groq",
|
|
21
|
+
error: groqError ?? new Error("No transcription providers available"),
|
|
22
|
+
notes,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
text: null,
|
|
27
|
+
provider: null,
|
|
28
|
+
error: new Error(buildMissingTranscriptionProviderMessage()),
|
|
29
|
+
notes,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async function transcribeBytesAcrossProviders({ providerOrder, bytes, mediaType, filename, notes, groqApiKey, groqError = null, assemblyaiApiKey, geminiApiKey, openaiApiKey, falApiKey, env, onProgress, transcribeOversizedBytesWithChunking, }) {
|
|
33
|
+
if (providerOrder.length === 0) {
|
|
34
|
+
return buildNoProviderResult({ notes, groqApiKey, groqError });
|
|
35
|
+
}
|
|
36
|
+
let currentBytes = bytes;
|
|
37
|
+
let currentMediaType = mediaType;
|
|
38
|
+
let currentFilename = filename;
|
|
39
|
+
let lastFailure = null;
|
|
40
|
+
for (const [index, provider] of providerOrder.entries()) {
|
|
41
|
+
const attempt = await attemptRemoteBytesProvider({
|
|
42
|
+
provider,
|
|
43
|
+
state: {
|
|
44
|
+
bytes: currentBytes,
|
|
45
|
+
mediaType: currentMediaType,
|
|
46
|
+
filename: currentFilename,
|
|
47
|
+
},
|
|
48
|
+
assemblyaiApiKey,
|
|
49
|
+
geminiApiKey,
|
|
50
|
+
openaiApiKey,
|
|
51
|
+
falApiKey,
|
|
52
|
+
env,
|
|
53
|
+
notes,
|
|
54
|
+
onProgress,
|
|
55
|
+
transcribeOversizedBytesWithChunking,
|
|
56
|
+
});
|
|
57
|
+
currentBytes = attempt.state.bytes;
|
|
58
|
+
currentMediaType = attempt.state.mediaType;
|
|
59
|
+
currentFilename = attempt.state.filename;
|
|
60
|
+
if (attempt.result)
|
|
61
|
+
return withMergedNotes(attempt.result, notes);
|
|
62
|
+
if (!attempt.error)
|
|
63
|
+
continue;
|
|
64
|
+
lastFailure = { provider, error: attempt.error };
|
|
65
|
+
const remaining = providerOrder.slice(index + 1).filter((candidate) => {
|
|
66
|
+
if (candidate !== "fal")
|
|
67
|
+
return true;
|
|
68
|
+
return currentMediaType.toLowerCase().startsWith("audio/");
|
|
69
|
+
});
|
|
70
|
+
if (remaining.length > 0) {
|
|
71
|
+
notes.push(`${cloudProviderLabel(provider, false)} transcription failed; falling back to ${formatCloudFallbackTargets(remaining)}: ${attempt.error.message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (lastFailure) {
|
|
75
|
+
return {
|
|
76
|
+
text: null,
|
|
77
|
+
provider: lastFailure.provider,
|
|
78
|
+
error: lastFailure.error,
|
|
79
|
+
notes,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return buildNoProviderResult({ notes, groqApiKey, groqError });
|
|
83
|
+
}
|
|
84
|
+
export async function transcribeBytesWithRemoteFallbacks({ bytes, mediaType, filename, notes, groqApiKey, groqError = null, assemblyaiApiKey, geminiApiKey, openaiApiKey, falApiKey, env, onProgress, transcribeOversizedBytesWithChunking, }) {
|
|
85
|
+
return await transcribeBytesAcrossProviders({
|
|
86
|
+
providerOrder: resolveCloudProviderOrder({
|
|
87
|
+
assemblyaiApiKey,
|
|
88
|
+
geminiApiKey,
|
|
89
|
+
openaiApiKey,
|
|
90
|
+
falApiKey,
|
|
91
|
+
}),
|
|
92
|
+
bytes,
|
|
93
|
+
mediaType,
|
|
94
|
+
filename,
|
|
95
|
+
notes,
|
|
96
|
+
groqApiKey,
|
|
97
|
+
groqError,
|
|
98
|
+
assemblyaiApiKey,
|
|
99
|
+
geminiApiKey,
|
|
100
|
+
openaiApiKey,
|
|
101
|
+
falApiKey,
|
|
102
|
+
env,
|
|
103
|
+
onProgress,
|
|
104
|
+
transcribeOversizedBytesWithChunking,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
export async function transcribeFileWithRemoteFallbacks({ filePath, mediaType, filename, notes, groqApiKey, groqError = null, assemblyaiApiKey, geminiApiKey, openaiApiKey, falApiKey, env, totalDurationSeconds, onProgress, transcribeChunkedFile, }) {
|
|
108
|
+
const providerOrder = resolveCloudProviderOrder({
|
|
109
|
+
assemblyaiApiKey,
|
|
110
|
+
geminiApiKey,
|
|
111
|
+
openaiApiKey,
|
|
112
|
+
falApiKey,
|
|
113
|
+
});
|
|
114
|
+
if (providerOrder.length === 0) {
|
|
115
|
+
return buildNoProviderResult({ notes, groqApiKey, groqError });
|
|
116
|
+
}
|
|
117
|
+
const stat = await fs.stat(filePath);
|
|
118
|
+
onProgress?.({
|
|
119
|
+
partIndex: null,
|
|
120
|
+
parts: null,
|
|
121
|
+
processedDurationSeconds: null,
|
|
122
|
+
totalDurationSeconds,
|
|
123
|
+
});
|
|
124
|
+
let cachedBytes = null;
|
|
125
|
+
const readFileBytes = async () => {
|
|
126
|
+
if (cachedBytes)
|
|
127
|
+
return cachedBytes;
|
|
128
|
+
cachedBytes = new Uint8Array(await fs.readFile(filePath));
|
|
129
|
+
return cachedBytes;
|
|
130
|
+
};
|
|
131
|
+
let lastFailure = null;
|
|
132
|
+
for (const [index, provider] of providerOrder.entries()) {
|
|
133
|
+
const fileAttempt = await attemptRemoteFileProvider({
|
|
134
|
+
provider,
|
|
135
|
+
filePath,
|
|
136
|
+
mediaType,
|
|
137
|
+
filename,
|
|
138
|
+
assemblyaiApiKey,
|
|
139
|
+
geminiApiKey,
|
|
140
|
+
env,
|
|
141
|
+
});
|
|
142
|
+
if (fileAttempt.kind === "result")
|
|
143
|
+
return withMergedNotes(fileAttempt.result, notes);
|
|
144
|
+
if (fileAttempt.kind === "delegate-to-bytes") {
|
|
145
|
+
if (provider === "openai" && stat.size > MAX_OPENAI_UPLOAD_BYTES) {
|
|
146
|
+
const canChunk = await isFfmpegAvailable();
|
|
147
|
+
if (canChunk) {
|
|
148
|
+
return withMergedNotes(await transcribeChunkedFile({
|
|
149
|
+
filePath,
|
|
150
|
+
segmentSeconds: DEFAULT_SEGMENT_SECONDS,
|
|
151
|
+
totalDurationSeconds,
|
|
152
|
+
onProgress,
|
|
153
|
+
}), notes);
|
|
154
|
+
}
|
|
155
|
+
notes.push(`Media too large for Whisper upload (${formatBytes(stat.size)}); install ffmpeg to enable chunked transcription`);
|
|
156
|
+
const head = await readFirstBytes(filePath, MAX_OPENAI_UPLOAD_BYTES);
|
|
157
|
+
return withMergedNotes(await transcribeBytesAcrossProviders({
|
|
158
|
+
providerOrder: providerOrder.slice(index),
|
|
159
|
+
bytes: head,
|
|
160
|
+
mediaType,
|
|
161
|
+
filename,
|
|
162
|
+
notes: [],
|
|
163
|
+
groqApiKey,
|
|
164
|
+
groqError,
|
|
165
|
+
assemblyaiApiKey,
|
|
166
|
+
geminiApiKey,
|
|
167
|
+
openaiApiKey,
|
|
168
|
+
falApiKey,
|
|
169
|
+
env,
|
|
170
|
+
onProgress,
|
|
171
|
+
}), notes);
|
|
172
|
+
}
|
|
173
|
+
return withMergedNotes(await transcribeBytesAcrossProviders({
|
|
174
|
+
providerOrder: providerOrder.slice(index),
|
|
175
|
+
bytes: await readFileBytes(),
|
|
176
|
+
mediaType,
|
|
177
|
+
filename,
|
|
178
|
+
notes: [],
|
|
179
|
+
groqApiKey,
|
|
180
|
+
groqError,
|
|
181
|
+
assemblyaiApiKey,
|
|
182
|
+
geminiApiKey,
|
|
183
|
+
openaiApiKey,
|
|
184
|
+
falApiKey,
|
|
185
|
+
env,
|
|
186
|
+
onProgress,
|
|
187
|
+
}), notes);
|
|
188
|
+
}
|
|
189
|
+
lastFailure = { provider, error: fileAttempt.error };
|
|
190
|
+
const remaining = providerOrder.slice(index + 1);
|
|
191
|
+
if (remaining.length > 0) {
|
|
192
|
+
notes.push(`${cloudProviderLabel(provider, false)} transcription failed; falling back to ${formatCloudFallbackTargets(remaining)}: ${fileAttempt.error.message}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (lastFailure) {
|
|
196
|
+
return {
|
|
197
|
+
text: null,
|
|
198
|
+
provider: lastFailure.provider,
|
|
199
|
+
error: lastFailure.error,
|
|
200
|
+
notes,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return buildNoProviderResult({ notes, groqApiKey, groqError });
|
|
204
|
+
}
|
|
205
|
+
export async function transcribeOversizedBytesViaTempFile({ bytes, mediaType, filename, onProgress, transcribeFile, }) {
|
|
206
|
+
const tempFile = join(tmpdir(), `summarize-whisper-${randomUUID()}`);
|
|
207
|
+
try {
|
|
208
|
+
await fs.writeFile(tempFile, bytes);
|
|
209
|
+
return await transcribeFile({
|
|
210
|
+
filePath: tempFile,
|
|
211
|
+
mediaType,
|
|
212
|
+
filename,
|
|
213
|
+
onProgress,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
await fs.unlink(tempFile).catch(() => { });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../../src/transcription/whisper/remote.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whisper-cpp.js","sourceRoot":"","sources":["../../../../src/transcription/whisper/whisper-cpp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"whisper-cpp.js","sourceRoot":"","sources":["../../../../src/transcription/whisper/whisper-cpp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type RequestHeaders = Record<string, string>;
|
|
2
|
+
export declare function isBunRuntime(): boolean;
|
|
3
|
+
export declare function withBunCompressionHeaders(headers: RequestHeaders): RequestHeaders;
|
|
4
|
+
export declare function withBunIdentityEncoding(headers: RequestHeaders): RequestHeaders;
|
|
5
|
+
export declare function isBunCompressedResponseError(error: unknown): boolean;
|
|
6
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type { MediaCache, MediaCacheEntry, TranscriptCache, TranscriptCacheGetResult, TranscriptCacheSetArgs, } from "./cache/types.js";
|
|
2
|
+
export { NEGATIVE_TTL_MS } from "./transcript/cache.js";
|
|
2
3
|
export { createLinkPreviewClient, type LinkPreviewClient, type LinkPreviewClientOptions, } from "./link-preview/client.js";
|
|
3
4
|
export { DEFAULT_CACHE_MODE, DEFAULT_MAX_CONTENT_CHARACTERS, DEFAULT_TIMEOUT_MS, type ExtractedLinkContent, type FetchLinkContentOptions, } from "./link-preview/content/types.js";
|
|
4
5
|
export type { ConvertHtmlToMarkdown, FirecrawlScrapeResult, LinkPreviewDeps, LinkPreviewProgressEvent, ReadTweetWithBird, ScrapeWithFirecrawl, } from "./link-preview/deps.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MediaCache, TranscriptCache } from "../cache/types.js";
|
|
2
|
+
import { type TranscriptionConfig } from "../transcript/transcription-config.js";
|
|
2
3
|
import type { ExtractedLinkContent, FetchLinkContentOptions } from "./content/types.js";
|
|
3
4
|
import type { ConvertHtmlToMarkdown, LinkPreviewDeps, LinkPreviewProgressEvent, ResolveTwitterCookies, ScrapeWithFirecrawl } from "./deps.js";
|
|
4
|
-
import { type TranscriptionConfig } from "../transcript/transcription-config.js";
|
|
5
5
|
/** Public client used by external consumers to fetch link content. */
|
|
6
6
|
export interface LinkPreviewClient {
|
|
7
7
|
fetchLinkContent(url: string, options?: FetchLinkContentOptions): Promise<ExtractedLinkContent>;
|
|
@@ -16,6 +16,8 @@ export interface LinkPreviewClientOptions {
|
|
|
16
16
|
transcription?: Partial<TranscriptionConfig> | null;
|
|
17
17
|
falApiKey?: string | null;
|
|
18
18
|
groqApiKey?: string | null;
|
|
19
|
+
assemblyaiApiKey?: string | null;
|
|
20
|
+
geminiApiKey?: string | null;
|
|
19
21
|
openaiApiKey?: string | null;
|
|
20
22
|
convertHtmlToMarkdown?: ConvertHtmlToMarkdown | null;
|
|
21
23
|
transcriptCache?: TranscriptCache | null;
|
|
@@ -8,7 +8,7 @@ export interface HtmlDocumentFetchResult {
|
|
|
8
8
|
html: string;
|
|
9
9
|
finalUrl: string;
|
|
10
10
|
}
|
|
11
|
-
export declare function fetchHtmlDocument(fetchImpl: typeof fetch, url: string,
|
|
11
|
+
export declare function fetchHtmlDocument(fetchImpl: typeof fetch, url: string, options?: {
|
|
12
12
|
timeoutMs?: number;
|
|
13
13
|
onProgress?: ((event: LinkPreviewProgressEvent) => void) | null;
|
|
14
14
|
}): Promise<HtmlDocumentFetchResult>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { LinkPreviewDeps } from "../deps.js";
|
|
2
2
|
import type { FirecrawlDiagnostics } from "../types.js";
|
|
3
|
-
import type { ExtractedLinkContent, FetchLinkContentOptions, MarkdownMode } from "./types.js";
|
|
4
3
|
import { extractReadabilityFromHtml } from "./readability.js";
|
|
4
|
+
import type { ExtractedLinkContent, FetchLinkContentOptions, MarkdownMode } from "./types.js";
|
|
5
5
|
export declare function buildResultFromHtmlDocument({ url, html, cacheMode, maxCharacters, youtubeTranscriptMode, mediaTranscriptMode, transcriptTimestamps, firecrawlDiagnostics, markdownRequested, markdownMode, timeoutMs, deps, readabilityCandidate, }: {
|
|
6
6
|
url: string;
|
|
7
7
|
html: string;
|
|
@@ -19,7 +19,8 @@ export declare const ProgressKind: {
|
|
|
19
19
|
readonly BirdStart: "bird-start";
|
|
20
20
|
readonly BirdDone: "bird-done";
|
|
21
21
|
};
|
|
22
|
-
export type
|
|
22
|
+
export type CloudTranscriptionProviderHint = "groq" | "assemblyai" | "gemini" | "openai" | "fal";
|
|
23
|
+
export type TranscriptionProviderHint = "cpp" | "onnx" | "unknown" | CloudTranscriptionProviderHint | `${CloudTranscriptionProviderHint}->${string}`;
|
|
23
24
|
/** Public progress events emitted by link preview fetchers. */
|
|
24
25
|
export type LinkPreviewProgressEvent = {
|
|
25
26
|
kind: "fetch-html-start";
|
|
@@ -104,9 +105,11 @@ export type LinkPreviewProgressEvent = {
|
|
|
104
105
|
} | {
|
|
105
106
|
kind: "bird-start";
|
|
106
107
|
url: string;
|
|
108
|
+
client?: "xurl" | "bird" | null;
|
|
107
109
|
} | {
|
|
108
110
|
kind: "bird-done";
|
|
109
111
|
url: string;
|
|
112
|
+
client?: "xurl" | "bird" | null;
|
|
110
113
|
ok: boolean;
|
|
111
114
|
textBytes: number | null;
|
|
112
115
|
};
|
|
@@ -130,7 +133,7 @@ export type BirdTweetMedia = {
|
|
|
130
133
|
kind: "video" | "audio";
|
|
131
134
|
urls: string[];
|
|
132
135
|
preferredUrl: string | null;
|
|
133
|
-
source: "extended_entities" | "card" | "entities";
|
|
136
|
+
source: "extended_entities" | "card" | "entities" | "xurl";
|
|
134
137
|
};
|
|
135
138
|
export type BirdTweetPayload = {
|
|
136
139
|
id?: string;
|
|
@@ -141,6 +144,7 @@ export type BirdTweetPayload = {
|
|
|
141
144
|
};
|
|
142
145
|
createdAt?: string;
|
|
143
146
|
media?: BirdTweetMedia | null;
|
|
147
|
+
client?: "xurl" | "bird";
|
|
144
148
|
};
|
|
145
149
|
export type ReadTweetWithBird = (args: {
|
|
146
150
|
url: string;
|
|
@@ -164,6 +168,8 @@ export interface LinkPreviewDeps {
|
|
|
164
168
|
transcription?: TranscriptionConfig | null;
|
|
165
169
|
falApiKey?: string | null;
|
|
166
170
|
groqApiKey?: string | null;
|
|
171
|
+
assemblyaiApiKey?: string | null;
|
|
172
|
+
geminiApiKey?: string | null;
|
|
167
173
|
openaiApiKey?: string | null;
|
|
168
174
|
convertHtmlToMarkdown: ConvertHtmlToMarkdown | null;
|
|
169
175
|
transcriptCache: TranscriptCache | null;
|
|
@@ -29,7 +29,7 @@ export interface MarkdownDiagnostics {
|
|
|
29
29
|
notes?: string | null;
|
|
30
30
|
}
|
|
31
31
|
export interface ContentFetchDiagnostics {
|
|
32
|
-
strategy: "bird" | "firecrawl" | "html" | "nitter";
|
|
32
|
+
strategy: "bird" | "xurl" | "firecrawl" | "html" | "nitter";
|
|
33
33
|
firecrawl: FirecrawlDiagnostics;
|
|
34
34
|
markdown: MarkdownDiagnostics;
|
|
35
35
|
transcript: TranscriptDiagnostics;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import type { TranscriptionConfig } from "../../transcription-config.js";
|
|
1
2
|
import type { ProviderContext, ProviderFetchOptions, ProviderResult } from "../../types.js";
|
|
2
3
|
import type { TranscribeRequest, TranscriptionResult } from "./media.js";
|
|
3
4
|
export type PodcastFlowContext = {
|
|
4
5
|
context: ProviderContext;
|
|
5
6
|
options: ProviderFetchOptions;
|
|
7
|
+
transcription: TranscriptionConfig;
|
|
8
|
+
feedHtml: string | null;
|
|
6
9
|
attemptedProviders: ProviderResult["attemptedProviders"];
|
|
7
10
|
notes: string[];
|
|
8
11
|
pushOnce: (provider: ProviderResult["attemptedProviders"][number]) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ProviderFetchOptions } from "../../types.js";
|
|
2
1
|
import { type TranscriptionConfig } from "../../transcription-config.js";
|
|
2
|
+
import type { ProviderFetchOptions } from "../../types.js";
|
|
3
3
|
export type TranscribeRequest = {
|
|
4
4
|
url: string;
|
|
5
5
|
filenameHint: string;
|
|
@@ -10,7 +10,7 @@ export type TranscriptionResult = {
|
|
|
10
10
|
provider: string | null;
|
|
11
11
|
error: Error | null;
|
|
12
12
|
};
|
|
13
|
-
export declare function transcribeMediaUrl({ fetchImpl, transcription, env, url, filenameHint, durationSecondsHint, groqApiKey, openaiApiKey, falApiKey, notes, progress, }: {
|
|
13
|
+
export declare function transcribeMediaUrl({ fetchImpl, transcription, env, url, filenameHint, durationSecondsHint, groqApiKey, assemblyaiApiKey, geminiApiKey, openaiApiKey, falApiKey, notes, progress, }: {
|
|
14
14
|
fetchImpl: typeof fetch;
|
|
15
15
|
transcription?: Partial<TranscriptionConfig> | null;
|
|
16
16
|
env?: Record<string, string | undefined>;
|
|
@@ -18,6 +18,8 @@ export declare function transcribeMediaUrl({ fetchImpl, transcription, env, url,
|
|
|
18
18
|
filenameHint: string;
|
|
19
19
|
durationSecondsHint: number | null;
|
|
20
20
|
groqApiKey?: string | null;
|
|
21
|
+
assemblyaiApiKey?: string | null;
|
|
22
|
+
geminiApiKey?: string | null;
|
|
21
23
|
openaiApiKey?: string | null;
|
|
22
24
|
falApiKey?: string | null;
|
|
23
25
|
notes: string[];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProviderResult } from "../../types.js";
|
|
2
|
+
import type { PodcastFlowContext } from "./flow-context.js";
|
|
3
|
+
export declare function tryPodcastTranscriptFromFeed(flow: PodcastFlowContext): Promise<ProviderResult | null>;
|
|
4
|
+
export declare function tryFeedEnclosureTranscript(flow: PodcastFlowContext): Promise<ProviderResult | null>;
|
|
5
|
+
export declare function tryOgAudioTranscript(flow: PodcastFlowContext): Promise<ProviderResult | null>;
|
|
6
|
+
export declare function tryPodcastYtDlpTranscript(flow: PodcastFlowContext): Promise<ProviderResult | null>;
|
|
7
|
+
export declare function buildNoTranscriptResult(flow: PodcastFlowContext): ProviderResult;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function looksLikeRssOrAtomFeed(xml: string): boolean;
|
|
2
|
+
export declare function extractEnclosureFromFeed(xml: string): {
|
|
3
|
+
enclosureUrl: string;
|
|
4
|
+
durationSeconds: number | null;
|
|
5
|
+
} | null;
|
|
6
|
+
export declare function extractEnclosureForEpisode(feedXml: string, episodeTitle: string): {
|
|
7
|
+
enclosureUrl: string;
|
|
8
|
+
durationSeconds: number | null;
|
|
9
|
+
} | null;
|
|
10
|
+
export declare function extractItemDurationSeconds(itemXml: string): number | null;
|
|
11
|
+
export declare function decodeXmlEntities(value: string): string;
|
|
12
|
+
export declare function normalizeLooseTitle(value: string): string;
|
|
13
|
+
export declare function extractFeedItems(xml: string): string[];
|
|
14
|
+
export declare function extractItemTitle(itemXml: string): string | null;
|
|
15
|
+
export declare function extractEnclosureUrlFromItem(xml: string): string | null;
|