@vibesdotdev/integrations-faster-whisper 0.0.0-stage → 1.0.0-rc.1
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 +126 -0
- package/README.md +27 -2
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/metadata/provider-models/faster-whisper/faster-whisper-base.json +17 -0
- package/dist/ai/metadata/provider-models/faster-whisper/faster-whisper-large-v2.json +17 -0
- package/dist/ai/metadata/provider-models/faster-whisper/faster-whisper-large-v3.json +17 -0
- package/dist/ai/metadata/provider-models/faster-whisper/faster-whisper-medium.json +17 -0
- package/dist/ai/metadata/provider-models/faster-whisper/faster-whisper-small.json +17 -0
- package/dist/ai/metadata/provider-models/faster-whisper/large.v2.json +17 -0
- package/dist/ai/metadata/provider-models/faster-whisper/large.v3.json +17 -0
- package/dist/ai/metadata/providers/faster-whisper.json +7 -0
- package/dist/ai/provider.consumer.plugin.d.ts +4 -0
- package/dist/ai/provider.consumer.plugin.d.ts.map +1 -0
- package/dist/ai/provider.consumer.plugin.js +26 -0
- package/dist/ai/provider.consumer.plugin.js.map +1 -0
- package/dist/ai/provider.plugin.d.ts +6 -0
- package/dist/ai/provider.plugin.d.ts.map +1 -0
- package/dist/ai/provider.plugin.js +115 -0
- package/dist/ai/provider.plugin.js.map +1 -0
- package/dist/ai/providers/faster-whisper/detection/faster-whisper-system-detection.impl.consumer.d.ts +10 -0
- package/dist/ai/providers/faster-whisper/detection/faster-whisper-system-detection.impl.consumer.d.ts.map +1 -0
- package/dist/ai/providers/faster-whisper/detection/faster-whisper-system-detection.impl.consumer.js +21 -0
- package/dist/ai/providers/faster-whisper/detection/faster-whisper-system-detection.impl.consumer.js.map +1 -0
- package/dist/ai/providers/faster-whisper/faster-whisper.provider.impl.d.ts +37 -0
- package/dist/ai/providers/faster-whisper/faster-whisper.provider.impl.d.ts.map +1 -0
- package/dist/ai/providers/faster-whisper/faster-whisper.provider.impl.js +140 -0
- package/dist/ai/providers/faster-whisper/faster-whisper.provider.impl.js.map +1 -0
- package/dist/ai/providers/faster-whisper/index.d.ts +2 -0
- package/dist/ai/providers/faster-whisper/index.d.ts.map +1 -0
- package/dist/ai/providers/faster-whisper/index.js +2 -0
- package/dist/ai/providers/faster-whisper/index.js.map +1 -0
- package/dist/ai/providers/faster-whisper/python-probe.d.ts +5 -0
- package/dist/ai/providers/faster-whisper/python-probe.d.ts.map +1 -0
- package/dist/ai/providers/faster-whisper/python-probe.js +35 -0
- package/dist/ai/providers/faster-whisper/python-probe.js.map +1 -0
- package/dist/ai/providers/faster-whisper/recommendations.d.ts +21 -0
- package/dist/ai/providers/faster-whisper/recommendations.d.ts.map +1 -0
- package/dist/ai/providers/faster-whisper/recommendations.js +54 -0
- package/dist/ai/providers/faster-whisper/recommendations.js.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/config.faster-whisper.descriptor.d.ts +4194 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/config.faster-whisper.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/config.faster-whisper.descriptor.js +33 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/config.faster-whisper.descriptor.js.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/schemas/index.d.ts +7 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/schemas/index.js +6 -0
- package/dist/ai/providers/local/speech/faster-whisper/config/schemas/index.js.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/index.d.ts +5 -0
- package/dist/ai/providers/local/speech/faster-whisper/index.d.ts.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/index.js +4 -0
- package/dist/ai/providers/local/speech/faster-whisper/index.js.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/provider.faster-whisper.descriptor.d.ts +189 -0
- package/dist/ai/providers/local/speech/faster-whisper/provider.faster-whisper.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/local/speech/faster-whisper/provider.faster-whisper.descriptor.js +51 -0
- package/dist/ai/providers/local/speech/faster-whisper/provider.faster-whisper.descriptor.js.map +1 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.descriptor.d.ts +35 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.descriptor.d.ts.map +1 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.descriptor.js +24 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.descriptor.js.map +1 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.impl.d.ts +32 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.impl.d.ts.map +1 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.impl.js +126 -0
- package/dist/ai/specs/faster-whisper-cli/faster-whisper-cli.spec.impl.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/probe.d.ts +9 -0
- package/dist/schemas/probe.d.ts.map +1 -0
- package/dist/schemas/probe.js +4 -0
- package/dist/schemas/probe.js.map +1 -0
- package/dist/schemas/transcription.d.ts +920 -0
- package/dist/schemas/transcription.d.ts.map +1 -0
- package/dist/schemas/transcription.js +21 -0
- package/dist/schemas/transcription.js.map +1 -0
- package/package.json +93 -4
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Faster Whisper Provider Type Implementation
|
|
3
|
+
*
|
|
4
|
+
* Provider type implementation for Faster Whisper.
|
|
5
|
+
* Provides helper methods for working with Faster Whisper instances.
|
|
6
|
+
*/
|
|
7
|
+
import { getVibesAIClient } from '@vibesdotdev/ai/client';
|
|
8
|
+
import { CapabilityError, CaughtFailureSchema } from '@vibesdotdev/kernel';
|
|
9
|
+
import { transcriptionRequestSchema } from "../../../schemas/transcription.js";
|
|
10
|
+
import { healthOptionsSchema } from "../../../schemas/probe.js";
|
|
11
|
+
import { fasterWhisperConnectionSchema } from "../local/speech/faster-whisper/config/schemas/index.js";
|
|
12
|
+
import { probePython } from "./python-probe.js";
|
|
13
|
+
export class FasterWhisperProviderType {
|
|
14
|
+
descriptor;
|
|
15
|
+
context;
|
|
16
|
+
constructor(descriptor, context) {
|
|
17
|
+
this.descriptor = descriptor;
|
|
18
|
+
this.context = context;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate using this provider (delegates to ai/generation)
|
|
22
|
+
*/
|
|
23
|
+
async generate(providerInstance, model, request, options) {
|
|
24
|
+
const parsed = transcriptionRequestSchema.safeParse(request);
|
|
25
|
+
if (!parsed.success)
|
|
26
|
+
throw new CapabilityError('Invalid transcription request.', 'INVALID_INPUT', { reason: 'invalid-transcription-request' });
|
|
27
|
+
const ai = await getVibesAIClient(this.context.runtime);
|
|
28
|
+
const response = await ai.transcribe({ ...parsed.data, provider: providerInstance, model, providerId: providerInstance.id, modelId: model.id }, {
|
|
29
|
+
...options,
|
|
30
|
+
timeoutMs: options?.timeoutMs,
|
|
31
|
+
workspacePath: options?.workspacePath,
|
|
32
|
+
executionPolicy: options?.executionPolicy
|
|
33
|
+
});
|
|
34
|
+
// SAFETY: the owning schema proved transcription above; T is the validated modality.
|
|
35
|
+
return { response, adapterId: 'faster-whisper-cli', generationMethod: 'spec-transport' };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Detect installed Faster Whisper instances
|
|
39
|
+
* Checks whether the canonical python3 runtime can import faster_whisper
|
|
40
|
+
*/
|
|
41
|
+
async detectInstalled() {
|
|
42
|
+
if (!(await probePython(this.context.runtime)))
|
|
43
|
+
return [];
|
|
44
|
+
return [
|
|
45
|
+
{
|
|
46
|
+
name: 'Faster Whisper (Local Python)',
|
|
47
|
+
config: fasterWhisperConnectionSchema.parse({}),
|
|
48
|
+
source: 'system'
|
|
49
|
+
}
|
|
50
|
+
];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Recommend models for a use case
|
|
54
|
+
*/
|
|
55
|
+
async recommendModels(useCase, _context) {
|
|
56
|
+
const recommendations = [];
|
|
57
|
+
// Only recommend for transcription use cases
|
|
58
|
+
if (useCase === 'audio' || useCase === 'transcription') {
|
|
59
|
+
recommendations.push({
|
|
60
|
+
modelId: 'base',
|
|
61
|
+
modelName: 'Whisper Base',
|
|
62
|
+
score: 75,
|
|
63
|
+
reason: 'Fastest model with acceptable accuracy for general transcription',
|
|
64
|
+
capabilities: ['transcription'],
|
|
65
|
+
useCaseFit: 75
|
|
66
|
+
}, {
|
|
67
|
+
modelId: 'small',
|
|
68
|
+
modelName: 'Whisper Small',
|
|
69
|
+
score: 80,
|
|
70
|
+
reason: 'Good balance of speed and accuracy',
|
|
71
|
+
capabilities: ['transcription'],
|
|
72
|
+
useCaseFit: 80
|
|
73
|
+
}, {
|
|
74
|
+
modelId: 'medium',
|
|
75
|
+
modelName: 'Whisper Medium',
|
|
76
|
+
score: 90,
|
|
77
|
+
reason: 'High accuracy with GPU acceleration',
|
|
78
|
+
capabilities: ['transcription'],
|
|
79
|
+
useCaseFit: 90
|
|
80
|
+
}, {
|
|
81
|
+
modelId: 'large-v2',
|
|
82
|
+
modelName: 'Whisper Large V2',
|
|
83
|
+
score: 95,
|
|
84
|
+
reason: 'Best accuracy for critical transcription, 4x faster than standard Whisper',
|
|
85
|
+
capabilities: ['transcription'],
|
|
86
|
+
useCaseFit: 95
|
|
87
|
+
}, {
|
|
88
|
+
modelId: 'large-v3',
|
|
89
|
+
modelName: 'Whisper Large V3',
|
|
90
|
+
score: 98,
|
|
91
|
+
reason: 'Latest model with improved accuracy and multilingual support',
|
|
92
|
+
capabilities: ['transcription'],
|
|
93
|
+
useCaseFit: 98
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return recommendations.sort((a, b) => b.score - a.score);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check health of a Faster Whisper instance
|
|
100
|
+
*/
|
|
101
|
+
async checkHealth(instanceConfig, options) {
|
|
102
|
+
const startTime = Date.now();
|
|
103
|
+
try {
|
|
104
|
+
const configuration = fasterWhisperConnectionSchema.parse(instanceConfig);
|
|
105
|
+
const healthOptions = healthOptionsSchema.parse(options ?? {});
|
|
106
|
+
const available = await probePython(this.context.runtime, {
|
|
107
|
+
...configuration, timeout: healthOptions.timeout ?? configuration.timeout
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
healthy: available,
|
|
111
|
+
latencyMs: Date.now() - startTime,
|
|
112
|
+
message: available ? 'Faster Whisper is available.' : 'The Python package is not installed.',
|
|
113
|
+
availableModalities: available ? ['transcription'] : undefined,
|
|
114
|
+
error: available ? undefined : { code: 'PYTHON_PACKAGE_NOT_FOUND', message: 'The configured Python confirmed package absence.' },
|
|
115
|
+
checkedAt: new Date()
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
const failure = CaughtFailureSchema.parse(error);
|
|
120
|
+
const probeError = { code: 'PYTHON_PROBE_ERROR', message: failure instanceof Error ? failure.message : String(failure), cause: error };
|
|
121
|
+
return {
|
|
122
|
+
healthy: false, latencyMs: Date.now() - startTime,
|
|
123
|
+
message: 'Failed to probe the Faster Whisper Python runtime',
|
|
124
|
+
error: probeError,
|
|
125
|
+
checkedAt: new Date()
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async validateConnection(config) {
|
|
130
|
+
const result = fasterWhisperConnectionSchema.safeParse(config);
|
|
131
|
+
if (!result.success)
|
|
132
|
+
return { valid: false, errors: result.error.issues.map(issue => issue.message) };
|
|
133
|
+
return {
|
|
134
|
+
valid: true,
|
|
135
|
+
warnings: result.data.timeout < 5000 ? ['Timeout is very short - transcription may fail for longer audio files'] : undefined
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
async dispose() { }
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=faster-whisper.provider.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faster-whisper.provider.impl.js","sourceRoot":"","sources":["../../../../src/ai/providers/faster-whisper/faster-whisper.provider.impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/faster-whisper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai/providers/faster-whisper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
2
|
+
import { type FasterWhisperConnection } from '../local/speech/faster-whisper/config/schemas/index.ts';
|
|
3
|
+
/** Only an explicit missing-package response counts as absence. Transport failures propagate. */
|
|
4
|
+
export declare function probePython(runtime: RuntimeRef, configuration?: FasterWhisperConnection): Promise<boolean>;
|
|
5
|
+
//# sourceMappingURL=python-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-probe.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/faster-whisper/python-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAiC,KAAK,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AAGrI,iGAAiG;AACjG,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,GAAE,uBAAiE,oBAyBtI"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
2
|
+
import { fasterWhisperConnectionSchema } from "../local/speech/faster-whisper/config/schemas/index.js";
|
|
3
|
+
import { pythonAvailabilitySchema } from "../../../schemas/probe.js";
|
|
4
|
+
/** Only an explicit missing-package response counts as absence. Transport failures propagate. */
|
|
5
|
+
export async function probePython(runtime, configuration = fasterWhisperConnectionSchema.parse({})) {
|
|
6
|
+
const transport = await runtime.query('ai/transport').withId('process').select();
|
|
7
|
+
if (!transport)
|
|
8
|
+
throw new CapabilityError('Process transport is unavailable.', 'UNAVAILABLE', { reason: 'process-transport-unavailable' });
|
|
9
|
+
return runtime.lifecycle.wait(async (signal) => {
|
|
10
|
+
let stdout = '';
|
|
11
|
+
const decoder = new TextDecoder();
|
|
12
|
+
for await (const chunk of transport.impl.send({
|
|
13
|
+
method: 'POST', path: '', headers: {}, streaming: false,
|
|
14
|
+
body: { args: ['-c', [
|
|
15
|
+
'import importlib.util',
|
|
16
|
+
'if importlib.util.find_spec("faster_whisper") is None:',
|
|
17
|
+
' print("missing")',
|
|
18
|
+
'else:',
|
|
19
|
+
' from faster_whisper import WhisperModel',
|
|
20
|
+
' print("available")'
|
|
21
|
+
].join('\n')] }
|
|
22
|
+
}, { runtime, endpointBase: configuration.pythonExecutable, timeoutMs: configuration.timeout, signal, framing: 'none' })) {
|
|
23
|
+
if (chunk.kind === 'error')
|
|
24
|
+
throw chunk.error;
|
|
25
|
+
if (chunk.kind === 'bytes')
|
|
26
|
+
stdout += decoder.decode(chunk.data, { stream: true });
|
|
27
|
+
}
|
|
28
|
+
stdout += decoder.decode();
|
|
29
|
+
const result = pythonAvailabilitySchema.safeParse(stdout.trim());
|
|
30
|
+
if (!result.success)
|
|
31
|
+
throw new CapabilityError('Python probe returned an invalid response.', 'INVALID_INPUT', { reason: 'malformed-probe-output' });
|
|
32
|
+
return result.data === 'available';
|
|
33
|
+
}, { timeoutMs: configuration.timeout, reason: 'faster-whisper availability' });
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=python-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-probe.js","sourceRoot":"","sources":["../../../../src/ai/providers/faster-whisper/python-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,6BAA6B,EAAgC,MAAM,wDAAwD,CAAC;AACrI,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAmB,EAAE,gBAAyC,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAAC;IACtI,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAA8C,cAAc,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9H,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC3I,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QAC5C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK;YACvD,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;wBACpB,uBAAuB;wBACvB,wDAAwD;wBACxD,sBAAsB;wBACtB,OAAO;wBACP,6CAA6C;wBAC7C,wBAAwB;qBACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;SACf,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,gBAAgB,EAAE,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC1H,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,MAAM,KAAK,CAAC,KAAK,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,eAAe,CAAC,4CAA4C,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACpJ,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;IACpC,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ProviderRecommendation, type ModelAdapter } from '@vibesdotdev/ai/recommendations/base';
|
|
2
|
+
import type { ModelRecommendation, RecommendationContext, SetupMethod, SetupStep, UseCase } from '@vibesdotdev/ai/recommendations/schemas';
|
|
3
|
+
export declare class FasterWhisperRecommendation extends ProviderRecommendation {
|
|
4
|
+
readonly providerType = "faster-whisper";
|
|
5
|
+
readonly displayName = "Faster Whisper";
|
|
6
|
+
getUseCaseScore(useCase: UseCase): number;
|
|
7
|
+
getReason(): string;
|
|
8
|
+
getStrengths(): string[];
|
|
9
|
+
getWeaknesses(): string[];
|
|
10
|
+
getSupportedSetupMethods(): SetupMethod[];
|
|
11
|
+
getSetupSteps(_method: SetupMethod): Promise<SetupStep[]>;
|
|
12
|
+
recommendModels(_adapter: ModelAdapter | null, _context: RecommendationContext): Promise<ModelRecommendation[]>;
|
|
13
|
+
getExecutionContext(): {
|
|
14
|
+
recommendModels: "client";
|
|
15
|
+
getSetupSteps: "client";
|
|
16
|
+
};
|
|
17
|
+
supportsLocal(): boolean;
|
|
18
|
+
requiresGPU(): boolean;
|
|
19
|
+
}
|
|
20
|
+
export default FasterWhisperRecommendation;
|
|
21
|
+
//# sourceMappingURL=recommendations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/faster-whisper/recommendations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACjG,OAAO,KAAK,EACX,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,yCAAyC,CAAC;AAEjD,qBAAa,2BAA4B,SAAQ,sBAAsB;IACtE,QAAQ,CAAC,YAAY,oBAAoB;IACzC,QAAQ,CAAC,WAAW,oBAAoB;IACxC,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAGzC,SAAS,IAAI,MAAM;IAGnB,YAAY,IAAI,MAAM,EAAE;IAGxB,aAAa,IAAI,MAAM,EAAE;IAGzB,wBAAwB,IAAI,WAAW,EAAE;IAGnC,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IASzD,eAAe,CACpB,QAAQ,EAAE,YAAY,GAAG,IAAI,EAC7B,QAAQ,EAAE,qBAAqB,GAC7B,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAcjC,mBAAmB;;;;IAGnB,aAAa,IAAI,OAAO;IAGxB,WAAW,IAAI,OAAO;CAGtB;AAED,eAAe,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ProviderRecommendation } from '@vibesdotdev/ai/recommendations/base';
|
|
2
|
+
export class FasterWhisperRecommendation extends ProviderRecommendation {
|
|
3
|
+
providerType = 'faster-whisper';
|
|
4
|
+
displayName = 'Faster Whisper';
|
|
5
|
+
getUseCaseScore(useCase) {
|
|
6
|
+
return useCase === 'audio' ? 98 : 0;
|
|
7
|
+
}
|
|
8
|
+
getReason() {
|
|
9
|
+
return 'Fast private transcription through the local faster-whisper Python runtime';
|
|
10
|
+
}
|
|
11
|
+
getStrengths() {
|
|
12
|
+
return ['Offline transcription', 'Word timestamps and VAD', 'CPU and GPU execution'];
|
|
13
|
+
}
|
|
14
|
+
getWeaknesses() {
|
|
15
|
+
return ['Requires Python and the faster-whisper package'];
|
|
16
|
+
}
|
|
17
|
+
getSupportedSetupMethods() {
|
|
18
|
+
return ['local_scan'];
|
|
19
|
+
}
|
|
20
|
+
async getSetupSteps(_method) {
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
step: 'Install Faster Whisper',
|
|
24
|
+
description: 'Requires Python and the faster-whisper package.',
|
|
25
|
+
action: 'https://github.com/SYSTRAN/faster-whisper'
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
async recommendModels(_adapter, _context) {
|
|
30
|
+
return [
|
|
31
|
+
{
|
|
32
|
+
modelId: 'large-v3',
|
|
33
|
+
modelName: 'Whisper Large V3',
|
|
34
|
+
score: 98,
|
|
35
|
+
reason: 'Fast private transcription through the local faster-whisper Python runtime',
|
|
36
|
+
capabilities: ['transcription'],
|
|
37
|
+
isAvailable: true,
|
|
38
|
+
requiresUpgrade: false,
|
|
39
|
+
useCaseFit: 98
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
getExecutionContext() {
|
|
44
|
+
return { recommendModels: 'client', getSetupSteps: 'client' };
|
|
45
|
+
}
|
|
46
|
+
supportsLocal() {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
requiresGPU() {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export default FasterWhisperRecommendation;
|
|
54
|
+
//# sourceMappingURL=recommendations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../../../src/ai/providers/faster-whisper/recommendations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAqB,MAAM,sCAAsC,CAAC;AASjG,MAAM,OAAO,2BAA4B,SAAQ,sBAAsB;IAC7D,YAAY,GAAG,gBAAgB,CAAC;IAChC,WAAW,GAAG,gBAAgB,CAAC;IACxC,eAAe,CAAC,OAAgB;QAC/B,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,SAAS;QACR,OAAO,4EAA4E,CAAC;IACrF,CAAC;IACD,YAAY;QACX,OAAO,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;IACtF,CAAC;IACD,aAAa;QACZ,OAAO,CAAC,gDAAgD,CAAC,CAAC;IAC3D,CAAC;IACD,wBAAwB;QACvB,OAAO,CAAC,YAAY,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,OAAoB;QACvC,OAAO;YACN;gBACC,IAAI,EAAE,wBAAwB;gBAC9B,WAAW,EAAE,iDAAiD;gBAC9D,MAAM,EAAE,2CAA2C;aACnD;SACD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,eAAe,CACpB,QAA6B,EAC7B,QAA+B;QAE/B,OAAO;YACN;gBACC,OAAO,EAAE,UAAU;gBACnB,SAAS,EAAE,kBAAkB;gBAC7B,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,4EAA4E;gBACpF,YAAY,EAAE,CAAC,eAAe,CAAC;gBAC/B,WAAW,EAAE,IAAI;gBACjB,eAAe,EAAE,KAAK;gBACtB,UAAU,EAAE,EAAE;aACd;SACD,CAAC;IACH,CAAC;IACD,mBAAmB;QAClB,OAAO,EAAE,eAAe,EAAE,QAAiB,EAAE,aAAa,EAAE,QAAiB,EAAE,CAAC;IACjF,CAAC;IACD,aAAa;QACZ,OAAO,IAAI,CAAC;IACb,CAAC;IACD,WAAW;QACV,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AAED,eAAe,2BAA2B,CAAC"}
|