video-context-mcp-server 0.19.0-beta → 0.20.0-beta
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 +1 -0
- package/dist/generated/version.d.ts +2 -0
- package/dist/generated/version.d.ts.map +1 -0
- package/dist/generated/version.js +3 -0
- package/dist/generated/version.js.map +1 -0
- package/dist/index.js +9 -85
- package/dist/index.js.map +1 -1
- package/dist/services/ffmpeg.d.ts +2 -0
- package/dist/services/ffmpeg.d.ts.map +1 -1
- package/dist/services/ffmpeg.js +7 -5
- package/dist/services/ffmpeg.js.map +1 -1
- package/dist/services/geminiClient.d.ts +12 -6
- package/dist/services/geminiClient.d.ts.map +1 -1
- package/dist/services/geminiClient.js +8 -6
- package/dist/services/geminiClient.js.map +1 -1
- package/dist/services/glmClient.d.ts +16 -1
- package/dist/services/glmClient.d.ts.map +1 -1
- package/dist/services/glmClient.js.map +1 -1
- package/dist/services/kimiClient.d.ts +2 -1
- package/dist/services/kimiClient.d.ts.map +1 -1
- package/dist/services/kimiClient.js +4 -1
- package/dist/services/kimiClient.js.map +1 -1
- package/dist/tools/analyzeVideo.d.ts +5 -13
- package/dist/tools/analyzeVideo.d.ts.map +1 -1
- package/dist/tools/analyzeVideo.js +49 -175
- package/dist/tools/analyzeVideo.js.map +1 -1
- package/dist/tools/extractFrames.d.ts +5 -10
- package/dist/tools/extractFrames.d.ts.map +1 -1
- package/dist/tools/extractFrames.js +8 -6
- package/dist/tools/extractFrames.js.map +1 -1
- package/dist/tools/getVideoInfo.d.ts +5 -10
- package/dist/tools/getVideoInfo.d.ts.map +1 -1
- package/dist/tools/getVideoInfo.js +4 -4
- package/dist/tools/getVideoInfo.js.map +1 -1
- package/dist/tools/orchestrator.d.ts +141 -0
- package/dist/tools/orchestrator.d.ts.map +1 -0
- package/dist/tools/orchestrator.js +224 -0
- package/dist/tools/orchestrator.js.map +1 -0
- package/dist/tools/schemas.d.ts +96 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +89 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/searchTimestamp.d.ts +5 -10
- package/dist/tools/searchTimestamp.d.ts.map +1 -1
- package/dist/tools/searchTimestamp.js +84 -161
- package/dist/tools/searchTimestamp.js.map +1 -1
- package/dist/tools/summarizeVideo.d.ts +5 -13
- package/dist/tools/summarizeVideo.d.ts.map +1 -1
- package/dist/tools/summarizeVideo.js +96 -216
- package/dist/tools/summarizeVideo.js.map +1 -1
- package/dist/tools/transcribeVideo.d.ts +5 -10
- package/dist/tools/transcribeVideo.d.ts.map +1 -1
- package/dist/tools/transcribeVideo.js +1 -1
- package/dist/tools/transcribeVideo.js.map +1 -1
- package/dist/utils/audioUtils.d.ts +0 -4
- package/dist/utils/audioUtils.d.ts.map +1 -1
- package/dist/utils/audioUtils.js +0 -6
- package/dist/utils/audioUtils.js.map +1 -1
- package/dist/utils/downloadCache.d.ts +17 -1
- package/dist/utils/downloadCache.d.ts.map +1 -1
- package/dist/utils/downloadCache.js +50 -1
- package/dist/utils/downloadCache.js.map +1 -1
- package/dist/utils/videoUtils.d.ts.map +1 -1
- package/dist/utils/videoUtils.js +1 -0
- package/dist/utils/videoUtils.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -382,6 +382,7 @@ When a provider's API key is missing, the tool automatically falls back to the n
|
|
|
382
382
|
| `AUDIO_MCP_DEFAULT_PROVIDER` | Default audio provider; defaults to `deepgram`. Falls back in order: **deepgram → assemblyai → groq → gemini** when the selected provider's key is unavailable. A fallback notice is included in the response. | Optional (auto-selects from available keys) |
|
|
383
383
|
| `AUDIO_ENHANCE_VIDEO_ANALYSIS` | Controls audio transcript injection into GLM/Kimi `analyze_video`/`summarize_video` prompts. **Requires a pro license.** `auto` (default) — transcribes only when the video has a detected audio track; `true` — always attempt transcription; `false` — disabled. A confidence label (`high`/`medium`/`low`) is included in the injected header so the model can weight the transcript appropriately. Gemini is always skipped (handles audio natively). | Optional (default: `auto`; pro only) |
|
|
384
384
|
| `VIDEO_MCP_CACHE_TTL_MINUTES` | How long downloaded remote/platform videos are cached (in minutes) across separate tool calls. Cached files live in `os.tmpdir()/video-mcp-cache/` and survive per-call cleanup, avoiding redundant downloads on retries or follow-up questions. Set to `0` to disable caching entirely. | Optional (default: `30`) |
|
|
385
|
+
| `VIDEO_MCP_CACHE_MAX_ENTRIES` | Maximum number of entries in the in-memory download cache. Uses LRU eviction — the least-recently-used entry is evicted first when the cap is exceeded. Set to `0` or a negative value to disable the cap (unbounded). | Optional (default: `100`) |
|
|
385
386
|
| `YT_DLP_MAX_RESOLUTION` | Maximum video height in pixels when downloading via yt-dlp (YouTube, Vimeo, TikTok, etc.). Lower values reduce file size and download time. Free users capped at 720; pro users can set any value. | Optional (default: `720`) |
|
|
386
387
|
| `YT_DLP_PATH` | Path to a custom yt-dlp binary. If unset, uses the binary bundled by `youtube-dl-exec` at install time. | Optional |
|
|
387
388
|
| `YT_DLP_COOKIES_FILE` | Path to a Netscape-format cookies file for authenticated yt-dlp downloads (e.g. age-restricted or private YouTube videos). | Optional |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
-
import { z } from 'zod';
|
|
5
4
|
// Import tool handlers
|
|
6
5
|
import { analyzeVideoTool } from './tools/analyzeVideo.js';
|
|
7
6
|
import { summarizeVideoTool } from './tools/summarizeVideo.js';
|
|
@@ -10,6 +9,8 @@ import { searchTimestampTool } from './tools/searchTimestamp.js';
|
|
|
10
9
|
import { getVideoInfoTool } from './tools/getVideoInfo.js';
|
|
11
10
|
import { transcribeVideoTool } from './tools/transcribeVideo.js';
|
|
12
11
|
import { setLoggerServer } from './utils/logger.js';
|
|
12
|
+
import { VERSION } from './generated/version.js';
|
|
13
|
+
import { analyzeVideoSchema, summarizeVideoSchema, extractFramesSchema, searchTimestampSchema, getVideoInfoSchema, transcribeVideoSchema, } from './tools/schemas.js';
|
|
13
14
|
/**
|
|
14
15
|
* Main entry point for the Video Context MCP Server
|
|
15
16
|
* Creates an MCP server, registers all video analysis tools, and connects via stdio
|
|
@@ -18,7 +19,7 @@ async function main() {
|
|
|
18
19
|
// Create MCP server with name and version
|
|
19
20
|
const server = new McpServer({
|
|
20
21
|
name: 'video-mcp',
|
|
21
|
-
version:
|
|
22
|
+
version: VERSION,
|
|
22
23
|
}, {
|
|
23
24
|
capabilities: {
|
|
24
25
|
logging: {}, // Enable logging for progress reporting
|
|
@@ -31,114 +32,37 @@ async function main() {
|
|
|
31
32
|
server.registerTool('analyze_video', {
|
|
32
33
|
title: 'Analyze Video',
|
|
33
34
|
description: 'Ask questions about video content and get AI-powered answers. Supports both local files and URLs.',
|
|
34
|
-
inputSchema:
|
|
35
|
-
videoPath: z
|
|
36
|
-
.string()
|
|
37
|
-
.describe('Path to the video file (local path or URL)'),
|
|
38
|
-
question: z
|
|
39
|
-
.string()
|
|
40
|
-
.describe('Question to ask about the video content'),
|
|
41
|
-
provider: z
|
|
42
|
-
.enum(['glm', 'kimi', 'gemini'])
|
|
43
|
-
.optional()
|
|
44
|
-
.describe("AI backend to use: 'glm' (GLM-4.6V, default), 'kimi' (Kimi K2.5), or 'gemini' (Gemini 3 Flash Preview)"),
|
|
45
|
-
}),
|
|
35
|
+
inputSchema: analyzeVideoSchema,
|
|
46
36
|
}, analyzeVideoTool);
|
|
47
37
|
// Tool 2: summarize_video - Generate structured video summary
|
|
48
38
|
server.registerTool('summarize_video', {
|
|
49
39
|
title: 'Summarize Video',
|
|
50
40
|
description: 'Generate a structured summary of the video including overview, key scenes, and timeline. For long videos (>5 min), extracts keyframes to reduce token usage (unless using Gemini, which processes natively).',
|
|
51
|
-
inputSchema:
|
|
52
|
-
videoPath: z
|
|
53
|
-
.string()
|
|
54
|
-
.describe('Path to the video file (local path or URL)'),
|
|
55
|
-
provider: z
|
|
56
|
-
.enum(['glm', 'kimi', 'gemini'])
|
|
57
|
-
.optional()
|
|
58
|
-
.describe("AI backend to use: 'glm' (GLM-4.6V, default), 'kimi' (Kimi K2.5), or 'gemini' (Gemini 3 Flash Preview)"),
|
|
59
|
-
}),
|
|
41
|
+
inputSchema: summarizeVideoSchema,
|
|
60
42
|
}, summarizeVideoTool);
|
|
61
43
|
// Tool 3: extract_frames - Extract frames from video
|
|
62
44
|
server.registerTool('extract_frames', {
|
|
63
45
|
title: 'Extract Frames',
|
|
64
46
|
description: 'Extract frames from a video at specific timestamps or intervals. Supports local files (including file:// URIs) and remote http(s) URLs. No AI backend required.',
|
|
65
|
-
inputSchema:
|
|
66
|
-
videoPath: z
|
|
67
|
-
.string()
|
|
68
|
-
.describe('Path to the video file (local path, file:// URI, or http(s) URL)'),
|
|
69
|
-
mode: z
|
|
70
|
-
.enum(['even', 'interval', 'timestamps'])
|
|
71
|
-
.describe("Extraction mode: 'even' (N evenly-spaced frames), 'interval' (every N seconds), or 'timestamps' (at specific times)"),
|
|
72
|
-
count: z
|
|
73
|
-
.number()
|
|
74
|
-
.int()
|
|
75
|
-
.min(1)
|
|
76
|
-
.max(100)
|
|
77
|
-
.optional()
|
|
78
|
-
.describe("Number of frames to extract (required for 'even' mode)"),
|
|
79
|
-
intervalSec: z
|
|
80
|
-
.number()
|
|
81
|
-
.min(0.1)
|
|
82
|
-
.optional()
|
|
83
|
-
.describe("Interval in seconds between frames (required for 'interval' mode)"),
|
|
84
|
-
timestamps: z
|
|
85
|
-
.array(z.number().min(0))
|
|
86
|
-
.optional()
|
|
87
|
-
.describe("Array of timestamps in seconds (required for 'timestamps' mode)"),
|
|
88
|
-
}),
|
|
47
|
+
inputSchema: extractFramesSchema,
|
|
89
48
|
}, extractFramesTool);
|
|
90
49
|
// Tool 4: search_timestamp - Find when something happens in video
|
|
91
50
|
server.registerTool('search_timestamp', {
|
|
92
51
|
title: 'Search Timestamp',
|
|
93
52
|
description: 'Find the timestamp when something specific happens in a video. Extracts frames and uses AI to locate the content. Supports local files (including file:// URIs) and remote http(s) URLs.',
|
|
94
|
-
inputSchema:
|
|
95
|
-
videoPath: z
|
|
96
|
-
.string()
|
|
97
|
-
.describe('Path to the video file (local path, file:// URI, or http(s) URL)'),
|
|
98
|
-
query: z
|
|
99
|
-
.string()
|
|
100
|
-
.describe("What to search for, e.g., 'person waves', 'dog runs', 'car crash'"),
|
|
101
|
-
provider: z
|
|
102
|
-
.enum(['glm', 'kimi', 'gemini'])
|
|
103
|
-
.optional()
|
|
104
|
-
.describe("AI backend to use: 'glm' (GLM-4.6V, default), 'kimi' (Kimi K2.5), or 'gemini' (Gemini 3 Flash Preview)"),
|
|
105
|
-
}),
|
|
53
|
+
inputSchema: searchTimestampSchema,
|
|
106
54
|
}, searchTimestampTool);
|
|
107
55
|
// Tool 5: get_video_info - Get video metadata
|
|
108
56
|
server.registerTool('get_video_info', {
|
|
109
57
|
title: 'Get Video Info',
|
|
110
58
|
description: 'Get video metadata including duration, resolution, fps, codec, file size, and format. Supports local files (including file:// URIs) and remote http(s) URLs. No AI backend required.',
|
|
111
|
-
inputSchema:
|
|
112
|
-
videoPath: z
|
|
113
|
-
.string()
|
|
114
|
-
.describe('Path to the video file (local path, file:// URI, or http(s) URL)'),
|
|
115
|
-
}),
|
|
59
|
+
inputSchema: getVideoInfoSchema,
|
|
116
60
|
}, getVideoInfoTool);
|
|
117
61
|
// Tool 6: transcribe_video - Transcribe audio from a video
|
|
118
62
|
server.registerTool('transcribe_video', {
|
|
119
63
|
title: 'Transcribe Video',
|
|
120
64
|
description: 'Extract audio from a video and transcribe it using a dedicated speech-to-text provider (Deepgram, AssemblyAI, Groq/Whisper, or Gemini). Supports speaker diarization and translation to English.',
|
|
121
|
-
inputSchema:
|
|
122
|
-
videoPath: z
|
|
123
|
-
.string()
|
|
124
|
-
.describe('Path to the video file (local path, file:// URI, or http(s) URL)'),
|
|
125
|
-
provider: z
|
|
126
|
-
.enum(['deepgram', 'assemblyai', 'groq', 'gemini'])
|
|
127
|
-
.optional()
|
|
128
|
-
.describe("Audio provider to use: 'deepgram' (Nova-2, default), 'assemblyai' (Universal), 'groq' (Whisper-large-v3, free), or 'gemini'. Defaults to AUDIO_MCP_DEFAULT_PROVIDER env var or first available key."),
|
|
129
|
-
language: z
|
|
130
|
-
.string()
|
|
131
|
-
.optional()
|
|
132
|
-
.describe("BCP-47 language code, e.g. 'en', 'es', 'fr'. Auto-detected if omitted."),
|
|
133
|
-
diarize: z
|
|
134
|
-
.boolean()
|
|
135
|
-
.optional()
|
|
136
|
-
.describe('Enable speaker diarization (who said what). Supported by Deepgram and AssemblyAI only. Silently ignored for other providers.'),
|
|
137
|
-
translate: z
|
|
138
|
-
.boolean()
|
|
139
|
-
.optional()
|
|
140
|
-
.describe('Translate the transcript to English. Supported by Groq and Gemini only. Silently ignored for other providers.'),
|
|
141
|
-
}),
|
|
65
|
+
inputSchema: transcribeVideoSchema,
|
|
142
66
|
}, transcribeVideoTool);
|
|
143
67
|
// Connect to VS Code via stdio transport
|
|
144
68
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../src/services/ffmpeg.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../src/services/ffmpeg.ts"],"names":[],"mappings":"AASA,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,IAAI,CAQjC;AA+BD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CA2BxB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CA2BnB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
package/dist/services/ffmpeg.js
CHANGED
|
@@ -5,6 +5,9 @@ import * as fs from 'fs/promises';
|
|
|
5
5
|
import * as path from 'path';
|
|
6
6
|
import { mkdtemp, rm } from 'fs/promises';
|
|
7
7
|
import { tmpdir } from 'os';
|
|
8
|
+
import pLimit from 'p-limit';
|
|
9
|
+
/** Maximum number of concurrent ffmpeg frame-extraction processes. */
|
|
10
|
+
export const FRAME_CONCURRENCY = 4;
|
|
8
11
|
(() => {
|
|
9
12
|
const pathKey = process.platform === 'win32'
|
|
10
13
|
? Object.keys(process.env).find((k) => k.toUpperCase() === 'PATH') ||
|
|
@@ -172,12 +175,11 @@ export async function extractFramesAtInterval(videoPath, intervalSec) {
|
|
|
172
175
|
* @returns Array of JPEG buffers (same order as timestamps)
|
|
173
176
|
*/
|
|
174
177
|
export async function extractFramesAtTimestamps(videoPath, timestamps) {
|
|
175
|
-
const frames = [];
|
|
176
178
|
const tempDir = await mkdtemp(path.join(tmpdir(), 'video-mcp-'));
|
|
179
|
+
const limit = pLimit(FRAME_CONCURRENCY);
|
|
177
180
|
try {
|
|
178
|
-
|
|
181
|
+
const frames = await Promise.all(timestamps.map((timestamp, i) => limit(async () => {
|
|
179
182
|
const outputPath = path.join(tempDir, `frame-${i}.jpg`);
|
|
180
|
-
const timestamp = timestamps[i];
|
|
181
183
|
await new Promise((resolve, reject) => {
|
|
182
184
|
ffmpeg(videoPath)
|
|
183
185
|
.seekInput(timestamp)
|
|
@@ -188,8 +190,8 @@ export async function extractFramesAtTimestamps(videoPath, timestamps) {
|
|
|
188
190
|
.on('error', reject)
|
|
189
191
|
.run();
|
|
190
192
|
});
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
+
return fs.readFile(outputPath);
|
|
194
|
+
})));
|
|
193
195
|
return frames;
|
|
194
196
|
}
|
|
195
197
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/services/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAA;AAClC,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,gBAAgB,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/services/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAA;AAClC,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,gBAAgB,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,MAAM,MAAM,SAAS,CAAA;AAE5B,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAQjC;AAAA,CAAC,GAAG,EAAE;IACL,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;YAChE,MAAM;QACR,CAAC,CAAC,MAAM,CAAA;IACZ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;QACtE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC,CAAC,EAAE,CAAA;AAEJ,oDAAoD;AACpD,uEAAuE;AACvE,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,2EAA2E;AAC3E,oEAAoE;AACpE,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AAC1C,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAC5C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI,CAAA;AAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAA;AAgBhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;YAC1C,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAA;gBACX,OAAM;YACR,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,CAAA;YAE1E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAA;gBAClD,OAAM;YACR,CAAC;YAED,OAAO,CAAC;gBACN,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC;gBACvC,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;gBAC7B,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;gBAC/B,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;gBACvC,KAAK,EAAE,WAAW,CAAC,UAAU,IAAI,SAAS;gBAC1C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;gBACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS;gBAChD,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC;aACjE,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,YAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAElD,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,CAAC,SAAS,CAAC;iBACd,SAAS,CAAC,YAAY,CAAC;iBACvB,MAAM,CAAC,CAAC,CAAC;iBACT,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC;iBACzB,MAAM,CAAC,UAAU,CAAC;iBAClB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;iBAC1B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;iBACnB,GAAG,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QACjD,OAAO,WAAW,CAAA;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,KAAa;IAEb,0CAA0C;IAC1C,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9B,IAAI,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IAE1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;IAEhE,IAAI,CAAC;QACH,iEAAiE;QACjE,wEAAwE;QACxE,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAA;QAEhC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,CAAC,SAAS,CAAC;iBACd,aAAa,CAAC,CAAC,WAAW,OAAO,gBAAgB,EAAE,QAAQ,CAAC,CAAC;iBAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;iBAC5C,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;iBAC1B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;iBACnB,GAAG,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;QAEF,iCAAiC;QACjC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACjC,IAAI,EAAE,CAAA;QAET,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAiB,EACjB,WAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;IAEhE,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,CAAC,SAAS,CAAC;iBACd,aAAa,CAAC,CAAC,aAAa,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACrD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;iBAC5C,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;iBAC1B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;iBACnB,GAAG,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACjC,IAAI,EAAE,CAAA;QAET,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAiB,EACjB,UAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAEvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAC9B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;YACvD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,CAAC,SAAS,CAAC;qBACd,SAAS,CAAC,SAAS,CAAC;qBACpB,MAAM,CAAC,CAAC,CAAC;qBACT,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC;qBACzB,MAAM,CAAC,UAAU,CAAC;qBAClB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;qBAC1B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;qBACnB,GAAG,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;YACF,OAAO,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAChC,CAAC,CAAC,CACH,CACF,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,UAAkB;IAElB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,SAAS,CAAC;aACd,OAAO,EAAE;aACT,UAAU,CAAC,KAAK,CAAC;aACjB,YAAY,CAAC,KAAK,CAAC;aACnB,MAAM,CAAC,UAAU,CAAC;aAClB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;aAC1B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;aACnB,GAAG,EAAE,CAAA;IACV,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,SAA6B;IAC7C,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAA;IAExB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAC1C,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,SAAS,GAAG,WAAW,CAAA;QAChC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;AACrC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type File as GeminiFile } from '@google/genai';
|
|
1
2
|
export interface GeminiClientOptions {
|
|
2
3
|
apiKey: string;
|
|
3
4
|
}
|
|
@@ -10,39 +11,39 @@ export declare class GeminiClient {
|
|
|
10
11
|
* @param mimeType - Optional MIME type override (required for audio files, e.g. 'audio/mp4')
|
|
11
12
|
* @returns File object for use in prompts
|
|
12
13
|
*/
|
|
13
|
-
uploadVideo(filePath: string, mimeType?: string): Promise<
|
|
14
|
+
uploadVideo(filePath: string, mimeType?: string): Promise<GeminiFile>;
|
|
14
15
|
/**
|
|
15
16
|
* Wait for a file to finish processing
|
|
16
17
|
* @param name - The file name returned from uploadVideo()
|
|
17
18
|
*/
|
|
18
|
-
waitForFileProcessing(name: string): Promise<void>;
|
|
19
|
+
waitForFileProcessing(name: string | undefined): Promise<void>;
|
|
19
20
|
/**
|
|
20
21
|
* Analyze a video using the uploaded file object
|
|
21
22
|
* @param fileObject - The file object returned from uploadVideo()
|
|
22
23
|
* @param question - The question to ask about the video
|
|
23
24
|
* @returns The AI analysis response
|
|
24
25
|
*/
|
|
25
|
-
analyzeVideo(fileObject:
|
|
26
|
+
analyzeVideo(fileObject: GeminiFile, question: string): Promise<string>;
|
|
26
27
|
/**
|
|
27
28
|
* Summarize a video using the uploaded file object
|
|
28
29
|
* @param fileObject - The file object returned from uploadVideo()
|
|
29
30
|
* @returns The AI summary response
|
|
30
31
|
*/
|
|
31
|
-
summarizeVideo(fileObject:
|
|
32
|
+
summarizeVideo(fileObject: GeminiFile): Promise<string>;
|
|
32
33
|
/**
|
|
33
34
|
* Search for a timestamp in a video using the uploaded file object
|
|
34
35
|
* @param fileObject - The file object returned from uploadVideo()
|
|
35
36
|
* @param query - The event or object to search for
|
|
36
37
|
* @returns The AI search response
|
|
37
38
|
*/
|
|
38
|
-
searchTimestamp(fileObject:
|
|
39
|
+
searchTimestamp(fileObject: GeminiFile, query: string): Promise<string>;
|
|
39
40
|
/**
|
|
40
41
|
* Transcribe audio from an uploaded file object
|
|
41
42
|
* Re-uses the same upload → wait → prompt cycle, with an audio-specific prompt.
|
|
42
43
|
* @param fileObject - The file object returned from uploadVideo() for an audio file
|
|
43
44
|
* @returns The transcript text
|
|
44
45
|
*/
|
|
45
|
-
transcribeAudio(fileObject:
|
|
46
|
+
transcribeAudio(fileObject: GeminiFile): Promise<string>;
|
|
46
47
|
/**
|
|
47
48
|
* Analyze multiple images (e.g., extracted frames)
|
|
48
49
|
*/
|
|
@@ -51,5 +52,10 @@ export declare class GeminiClient {
|
|
|
51
52
|
mimeType: string;
|
|
52
53
|
}>, prompt: string): Promise<string>;
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a Gemini client instance from environment variables.
|
|
57
|
+
* Creates a fresh instance on every call (no singleton) to ensure
|
|
58
|
+
* the latest env var value is always used.
|
|
59
|
+
*/
|
|
54
60
|
export declare function createGeminiClient(): GeminiClient | null;
|
|
55
61
|
//# sourceMappingURL=geminiClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,IAAI,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AASpE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;gBAEf,OAAO,EAAE,mBAAmB;IAMxC;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAS3E;;;OAGG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;OAKG;IACG,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAwBlB;;;;OAIG;IACG,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAU7D;;;;;OAKG;IACG,eAAe,CACnB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAOlB;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAO9D;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;CAyBnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAMxD"}
|
|
@@ -29,6 +29,8 @@ export class GeminiClient {
|
|
|
29
29
|
* @param name - The file name returned from uploadVideo()
|
|
30
30
|
*/
|
|
31
31
|
async waitForFileProcessing(name) {
|
|
32
|
+
if (!name)
|
|
33
|
+
throw new Error('File upload did not return a name.');
|
|
32
34
|
let file = await this.client.files.get({ name });
|
|
33
35
|
while (file.state === 'PROCESSING') {
|
|
34
36
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
@@ -128,16 +130,16 @@ Please be as precise as possible. If the event occurs multiple times, list all o
|
|
|
128
130
|
return response.text || '';
|
|
129
131
|
}
|
|
130
132
|
}
|
|
131
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Create a Gemini client instance from environment variables.
|
|
135
|
+
* Creates a fresh instance on every call (no singleton) to ensure
|
|
136
|
+
* the latest env var value is always used.
|
|
137
|
+
*/
|
|
132
138
|
export function createGeminiClient() {
|
|
133
|
-
if (geminiClientInstance) {
|
|
134
|
-
return geminiClientInstance;
|
|
135
|
-
}
|
|
136
139
|
const apiKey = process.env.GEMINI_API_KEY;
|
|
137
140
|
if (!apiKey) {
|
|
138
141
|
return null;
|
|
139
142
|
}
|
|
140
|
-
|
|
141
|
-
return geminiClientInstance;
|
|
143
|
+
return new GeminiClient({ apiKey });
|
|
142
144
|
}
|
|
143
145
|
//# sourceMappingURL=geminiClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,20 @@ export interface GLMClientOptions {
|
|
|
6
6
|
apiKey: string;
|
|
7
7
|
baseURL?: string;
|
|
8
8
|
}
|
|
9
|
+
type GLMContentPart = {
|
|
10
|
+
type: 'text';
|
|
11
|
+
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'video_url';
|
|
14
|
+
video_url: {
|
|
15
|
+
url: string;
|
|
16
|
+
};
|
|
17
|
+
} | {
|
|
18
|
+
type: 'image_url';
|
|
19
|
+
image_url: {
|
|
20
|
+
url: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
9
23
|
export declare class GLMClient {
|
|
10
24
|
private apiKey;
|
|
11
25
|
private baseURL;
|
|
@@ -36,7 +50,7 @@ export declare class GLMClient {
|
|
|
36
50
|
/**
|
|
37
51
|
* Analyze with thinking mode enabled
|
|
38
52
|
*/
|
|
39
|
-
analyzeWithThinking(content:
|
|
53
|
+
analyzeWithThinking(content: GLMContentPart[], prompt: string, useFlash?: boolean): Promise<{
|
|
40
54
|
reasoning: string;
|
|
41
55
|
answer: string;
|
|
42
56
|
}>;
|
|
@@ -47,4 +61,5 @@ export declare class GLMClient {
|
|
|
47
61
|
* Create a GLM client instance from environment variables
|
|
48
62
|
*/
|
|
49
63
|
export declare function createGLMClient(): GLMClient | null;
|
|
64
|
+
export {};
|
|
50
65
|
//# sourceMappingURL=glmClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glmClient.d.ts","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;
|
|
1
|
+
{"version":3,"file":"glmClient.d.ts","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,cAAc,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAmBrD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,gBAAgB;IAKrC;;;;;;OAMG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAoB,EAC9B,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAsBlB;;;;;;OAMG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAwBlB;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,cAAc,EAAE,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;YAqEY,qBAAqB;IA2BnC,OAAO,CAAC,sBAAsB;CAoB/B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,GAAG,IAAI,CAMlD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glmClient.js","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,YAAY,GAAG,+CAA+C,CAAA;AACpE,MAAM,SAAS,GAAG,UAAU,CAAA;AAC5B,MAAM,eAAe,GAAG,gBAAgB,CAAA;AA6BxC,MAAM,OAAO,SAAS;IACZ,MAAM,CAAQ;IACd,OAAO,CAAQ;IAEvB,YAAY,OAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,YAAY,CAAA;IAChD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,kBAAkB,CACtB,UAAkB,EAClB,QAAgB,EAChB,WAAmB,WAAW,EAC9B,WAAoB,IAAI;QAExB,MAAM,QAAQ,GAAiB;YAC7B;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE;4BACT,GAAG,EAAE,QAAQ,QAAQ,WAAW,UAAU,EAAE;yBAC7C;qBACF;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF;SACF,CAAA;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACvD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CACnB,GAAW,EACX,QAAgB,EAChB,WAAoB,IAAI;QAExB,MAAM,QAAQ,GAAiB;YAC7B;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE,EAAE,GAAG,EAAE;qBACnB;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;qBACf;iBACF;aACF;SACF,CAAA;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,MAAiD,EACjD,MAAc,EACd,WAAoB,IAAI;QAExB,MAAM,UAAU,GAAqB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1D,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE;gBACT,GAAG,EAAE,QAAQ,KAAK,CAAC,QAAQ,WAAW,KAAK,CAAC,IAAI,EAAE;aACnD;SACF,CAAC,CAAC,CAAA;QAEH,MAAM,QAAQ,GAAiB;YAC7B;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,GAAG,UAAU;oBACb;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;qBACb;iBACF;aACF;SACF,CAAA;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,
|
|
1
|
+
{"version":3,"file":"glmClient.js","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Uploadable } from 'openai/uploads.js';
|
|
1
2
|
export interface KimiClientOptions {
|
|
2
3
|
apiKey: string;
|
|
3
4
|
baseURL?: string;
|
|
@@ -10,7 +11,7 @@ export declare class KimiClient {
|
|
|
10
11
|
* @param file - The video file (Buffer or ReadableStream)
|
|
11
12
|
* @returns File object with ID for use with ms:// protocol
|
|
12
13
|
*/
|
|
13
|
-
uploadVideo(file:
|
|
14
|
+
uploadVideo(file: Uploadable): Promise<{
|
|
14
15
|
id: string;
|
|
15
16
|
object: string;
|
|
16
17
|
purpose: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kimiClient.d.ts","sourceRoot":"","sources":["../../src/services/kimiClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kimiClient.d.ts","sourceRoot":"","sources":["../../src/services/kimiClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AASnD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,iBAAiB;IAOtC;;;;OAIG;IACG,WAAW,CACf,IAAI,EAAE,UAAU,GACf,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAc3D;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BrE;;OAEG;IACG,wBAAwB,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;IAwCF;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IA6BlB,OAAO,CAAC,6BAA6B;CA6BtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,GAAG,IAAI,CAMpD"}
|
|
@@ -19,7 +19,8 @@ export class KimiClient {
|
|
|
19
19
|
*/
|
|
20
20
|
async uploadVideo(file) {
|
|
21
21
|
const fileObject = await this.client.files.create({
|
|
22
|
-
file
|
|
22
|
+
file,
|
|
23
|
+
// @ts-expect-error Moonshot extends FilePurpose with 'video'; not in OpenAI SDK union
|
|
23
24
|
purpose: 'video',
|
|
24
25
|
});
|
|
25
26
|
return {
|
|
@@ -42,6 +43,7 @@ export class KimiClient {
|
|
|
42
43
|
role: 'user',
|
|
43
44
|
content: [
|
|
44
45
|
{
|
|
46
|
+
// @ts-expect-error Moonshot extends ChatCompletionContentPart with 'video_url'; not in OpenAI SDK
|
|
45
47
|
type: 'video_url',
|
|
46
48
|
video_url: { url: `ms://${fileId}` },
|
|
47
49
|
},
|
|
@@ -66,6 +68,7 @@ export class KimiClient {
|
|
|
66
68
|
role: 'user',
|
|
67
69
|
content: [
|
|
68
70
|
{
|
|
71
|
+
// @ts-expect-error Moonshot extends ChatCompletionContentPart with 'video_url'; not in OpenAI SDK
|
|
69
72
|
type: 'video_url',
|
|
70
73
|
video_url: { url: `ms://${fileId}` },
|
|
71
74
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kimiClient.js","sourceRoot":"","sources":["../../src/services/kimiClient.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"kimiClient.js","sourceRoot":"","sources":["../../src/services/kimiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,17 +2,9 @@
|
|
|
2
2
|
* Tool: analyze_video
|
|
3
3
|
* Ask questions about video content and get AI-powered answers
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
isError?: undefined;
|
|
11
|
-
} | {
|
|
12
|
-
isError: boolean;
|
|
13
|
-
content: {
|
|
14
|
-
type: "text";
|
|
15
|
-
text: string;
|
|
16
|
-
}[];
|
|
17
|
-
}>;
|
|
5
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
import { analyzeVideoSchema } from './schemas.js';
|
|
7
|
+
type AnalyzeVideoParams = import('zod').infer<typeof analyzeVideoSchema>;
|
|
8
|
+
export declare const analyzeVideoTool: (params: AnalyzeVideoParams) => Promise<CallToolResult>;
|
|
9
|
+
export {};
|
|
18
10
|
//# sourceMappingURL=analyzeVideo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"analyzeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,KAAK,kBAAkB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAExE,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,kBAAkB,KACzB,OAAO,CAAC,cAAc,CA0ExB,CAAA"}
|