@dahura/super-agent-runtime 0.1.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 +21 -0
- package/dist/ask.d.ts +75 -0
- package/dist/ask.d.ts.map +1 -0
- package/dist/ask.js +140 -0
- package/dist/ask.js.map +1 -0
- package/dist/builder.d.ts +73 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +477 -0
- package/dist/builder.js.map +1 -0
- package/dist/env.d.ts +36 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +63 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +40 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +43 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/loaders.d.ts +39 -0
- package/dist/loaders.d.ts.map +1 -0
- package/dist/loaders.js +113 -0
- package/dist/loaders.js.map +1 -0
- package/dist/model.d.ts +64 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +19 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/anthropic.provider.d.ts +22 -0
- package/dist/providers/anthropic.provider.d.ts.map +1 -0
- package/dist/providers/anthropic.provider.js +62 -0
- package/dist/providers/anthropic.provider.js.map +1 -0
- package/dist/providers/audio-local.d.ts +21 -0
- package/dist/providers/audio-local.d.ts.map +1 -0
- package/dist/providers/audio-local.js +451 -0
- package/dist/providers/audio-local.js.map +1 -0
- package/dist/providers/audio-local.provider.d.ts +15 -0
- package/dist/providers/audio-local.provider.d.ts.map +1 -0
- package/dist/providers/audio-local.provider.js +137 -0
- package/dist/providers/audio-local.provider.js.map +1 -0
- package/dist/providers/index.d.ts +30 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +56 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/llama-server.d.ts +57 -0
- package/dist/providers/llama-server.d.ts.map +1 -0
- package/dist/providers/llama-server.js +231 -0
- package/dist/providers/llama-server.js.map +1 -0
- package/dist/providers/llama-server.provider.d.ts +34 -0
- package/dist/providers/llama-server.provider.d.ts.map +1 -0
- package/dist/providers/llama-server.provider.js +147 -0
- package/dist/providers/llama-server.provider.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +32 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -0
- package/dist/providers/openai-compatible.js +53 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/openai-compatible.provider.d.ts +24 -0
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -0
- package/dist/providers/openai-compatible.provider.js +76 -0
- package/dist/providers/openai-compatible.provider.js.map +1 -0
- package/dist/providers/openai.d.ts +14 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +24 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openai.provider.d.ts +23 -0
- package/dist/providers/openai.provider.d.ts.map +1 -0
- package/dist/providers/openai.provider.js +68 -0
- package/dist/providers/openai.provider.js.map +1 -0
- package/dist/providers/whisper-cpp.d.ts +23 -0
- package/dist/providers/whisper-cpp.d.ts.map +1 -0
- package/dist/providers/whisper-cpp.js +110 -0
- package/dist/providers/whisper-cpp.js.map +1 -0
- package/dist/providers/whisper-cpp.provider.d.ts +27 -0
- package/dist/providers/whisper-cpp.provider.d.ts.map +1 -0
- package/dist/providers/whisper-cpp.provider.js +139 -0
- package/dist/providers/whisper-cpp.provider.js.map +1 -0
- package/dist/proxy.d.ts +11 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +12 -0
- package/dist/proxy.js.map +1 -0
- package/dist/registry.d.ts +111 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +328 -0
- package/dist/registry.js.map +1 -0
- package/dist/resolver.d.ts +47 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +365 -0
- package/dist/resolver.js.map +1 -0
- package/dist/workflow.d.ts +86 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +343 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createOpenAI } from "@ai-sdk/openai";
|
|
2
|
+
import { ProviderError } from "../errors";
|
|
3
|
+
export function buildOpenAICompatibleModel(cfg) {
|
|
4
|
+
if (!cfg.baseURL) {
|
|
5
|
+
throw new ProviderError("openai-compatible provider requires a baseURL");
|
|
6
|
+
}
|
|
7
|
+
const provider = createOpenAI({
|
|
8
|
+
baseURL: cfg.baseURL,
|
|
9
|
+
apiKey: cfg.apiKey || "ignored-by-local-server",
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
kind: "ai-sdk",
|
|
13
|
+
id: cfg.originalModelId,
|
|
14
|
+
resolvedId: cfg.resolvedModelId,
|
|
15
|
+
provider: "openai-compatible",
|
|
16
|
+
// Local "OpenAI-compatible" servers such as llama.cpp often implement
|
|
17
|
+
// `/chat/completions` more completely than the newer `/responses` API.
|
|
18
|
+
// Using chat mode avoids incompatible `input` item payloads like the ones
|
|
19
|
+
// that trigger `Cannot determine type of 'item'` on workflow runs.
|
|
20
|
+
model: provider.chat(cfg.resolvedModelId),
|
|
21
|
+
meta: {
|
|
22
|
+
baseURL: cfg.baseURL,
|
|
23
|
+
apiKeyMasked: cfg.apiKey ? `${cfg.apiKey.slice(0, 3)}…` : "(none)",
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export async function probeOpenAICompatible(baseURL, apiKey, abortSignal) {
|
|
28
|
+
const startedAt = performance.now();
|
|
29
|
+
try {
|
|
30
|
+
const url = new URL("models", baseURL.endsWith("/") ? baseURL : `${baseURL}/`);
|
|
31
|
+
const response = await fetch(url, {
|
|
32
|
+
headers: { Authorization: `Bearer ${apiKey || "local"}` },
|
|
33
|
+
signal: abortSignal,
|
|
34
|
+
});
|
|
35
|
+
const latencyMs = Math.round(performance.now() - startedAt);
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
return { ok: false, latencyMs, error: `HTTP ${response.status}` };
|
|
38
|
+
}
|
|
39
|
+
const body = (await response.json().catch(() => null));
|
|
40
|
+
const models = body?.data
|
|
41
|
+
?.map((entry) => entry.id)
|
|
42
|
+
.filter((id) => typeof id === "string") ?? [];
|
|
43
|
+
return { ok: true, latencyMs, models };
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
ok: false,
|
|
48
|
+
latencyMs: Math.round(performance.now() - startedAt),
|
|
49
|
+
error: error instanceof Error ? error.message : String(error),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=openai-compatible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAoB1C,MAAM,UAAU,0BAA0B,CAAC,GAA2B;IACpE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,IAAI,aAAa,CAAC,+CAA+C,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,yBAAyB;KAChD,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,GAAG,CAAC,eAAe;QACvB,UAAU,EAAE,GAAG,CAAC,eAAe;QAC/B,QAAQ,EAAE,mBAAmB;QAC7B,sEAAsE;QACtE,uEAAuE;QACvE,0EAA0E;QAC1E,mEAAmE;QACnE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;QACzC,IAAI,EAAE;YACJ,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ;SACnE;KACF,CAAC;AACJ,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,MAAc,EACd,WAAyB;IAEzB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,IAAI,OAAO,EAAE,EAAE;YACzD,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACpE,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAE7C,CAAC;QACT,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI;YACvB,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;aACzB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACpD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI-compatible provider definition using defineProvider.
|
|
3
|
+
*
|
|
4
|
+
* Local-first provider that works with any OpenAI-compatible server:
|
|
5
|
+
* Ollama, LM Studio, vLLM, llama-server, etc.
|
|
6
|
+
*/
|
|
7
|
+
import { type ProviderConfig } from "@dahura/super-agent-kit";
|
|
8
|
+
/**
|
|
9
|
+
* Configuration type for openai-compatible provider.
|
|
10
|
+
*/
|
|
11
|
+
export type OpenAICompatibleProviderConfig = ProviderConfig & {
|
|
12
|
+
baseUrl?: string;
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* OpenAI-compatible provider definition.
|
|
17
|
+
*
|
|
18
|
+
* Features:
|
|
19
|
+
* - Works with any OpenAI-compatible server
|
|
20
|
+
* - Default to Ollama's port (11434)
|
|
21
|
+
* - Auto-discovers available models via /models endpoint
|
|
22
|
+
*/
|
|
23
|
+
export declare const openaiCompatibleProvider: import("@dahura/super-agent-kit").ProviderModule<OpenAICompatibleProviderConfig>;
|
|
24
|
+
//# sourceMappingURL=openai-compatible.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.provider.d.ts","sourceRoot":"","sources":["../../src/providers/openai-compatible.provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAkB,KAAK,cAAc,EAA4B,MAAM,yBAAyB,CAAC;AAOxG;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,cAAc,GAAG;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAqDF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,kFAsBnC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI-compatible provider definition using defineProvider.
|
|
3
|
+
*
|
|
4
|
+
* Local-first provider that works with any OpenAI-compatible server:
|
|
5
|
+
* Ollama, LM Studio, vLLM, llama-server, etc.
|
|
6
|
+
*/
|
|
7
|
+
import { defineProvider } from "@dahura/super-agent-kit";
|
|
8
|
+
import { buildOpenAICompatibleModel, probeOpenAICompatible, } from "./openai-compatible";
|
|
9
|
+
/**
|
|
10
|
+
* Default base URL for Ollama (most common local server).
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_BASE_URL = "http://localhost:11434/v1";
|
|
13
|
+
const DEFAULT_API_KEY = "local";
|
|
14
|
+
/**
|
|
15
|
+
* Probe function wrapper for defineProvider compatibility.
|
|
16
|
+
*/
|
|
17
|
+
async function probeOpenAICompatibleProvider(config) {
|
|
18
|
+
const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
|
|
19
|
+
const apiKey = config.apiKey ?? DEFAULT_API_KEY;
|
|
20
|
+
const result = await probeOpenAICompatible(baseUrl, apiKey, AbortSignal.timeout(1500));
|
|
21
|
+
return {
|
|
22
|
+
ok: result.ok,
|
|
23
|
+
latencyMs: result.latencyMs,
|
|
24
|
+
models: result.models,
|
|
25
|
+
error: result.error,
|
|
26
|
+
meta: {
|
|
27
|
+
baseUrl,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build function wrapper for defineProvider compatibility.
|
|
33
|
+
*/
|
|
34
|
+
async function buildOpenAICompatibleProviderModel(config) {
|
|
35
|
+
const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
|
|
36
|
+
const apiKey = config.apiKey ?? DEFAULT_API_KEY;
|
|
37
|
+
const oaiConfig = {
|
|
38
|
+
baseURL: baseUrl,
|
|
39
|
+
apiKey,
|
|
40
|
+
resolvedModelId: "default",
|
|
41
|
+
originalModelId: "local/default",
|
|
42
|
+
};
|
|
43
|
+
return buildOpenAICompatibleModel(oaiConfig);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* OpenAI-compatible provider definition.
|
|
47
|
+
*
|
|
48
|
+
* Features:
|
|
49
|
+
* - Works with any OpenAI-compatible server
|
|
50
|
+
* - Default to Ollama's port (11434)
|
|
51
|
+
* - Auto-discovers available models via /models endpoint
|
|
52
|
+
*/
|
|
53
|
+
export const openaiCompatibleProvider = defineProvider({
|
|
54
|
+
meta: {
|
|
55
|
+
id: "openai-compatible",
|
|
56
|
+
description: "Local OpenAI-compatible servers (Ollama, LM Studio, vLLM)",
|
|
57
|
+
version: "1.0.0",
|
|
58
|
+
capabilities: ["text", "vision", "embedding"],
|
|
59
|
+
},
|
|
60
|
+
kind: "ai-sdk",
|
|
61
|
+
env: {
|
|
62
|
+
baseUrl: {
|
|
63
|
+
env: "BASE_URL",
|
|
64
|
+
default: DEFAULT_BASE_URL,
|
|
65
|
+
description: "Base URL of the OpenAI-compatible server",
|
|
66
|
+
},
|
|
67
|
+
apiKey: {
|
|
68
|
+
env: "API_KEY",
|
|
69
|
+
default: DEFAULT_API_KEY,
|
|
70
|
+
description: "API key (usually 'local' for local servers)",
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
probe: probeOpenAICompatibleProvider,
|
|
74
|
+
build: buildOpenAICompatibleProviderModel,
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=openai-compatible.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compatible.provider.js","sourceRoot":"","sources":["../../src/providers/openai-compatible.provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAiD,MAAM,yBAAyB,CAAC;AACxG,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAU7B;;GAEG;AACH,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AACrD,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC;;GAEG;AACH,KAAK,UAAU,6BAA6B,CAC1C,MAAsC;IAEtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC,OAAO,EACP,MAAM,EACN,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAC1B,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE;YACJ,OAAO;SACR;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kCAAkC,CAC/C,MAAsC;IAEtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC;IAEhD,MAAM,SAAS,GAA2B;QACxC,OAAO,EAAE,OAAO;QAChB,MAAM;QACN,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,eAAe;KACjC,CAAC;IAEF,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAiC;IACrF,IAAI,EAAE;QACJ,EAAE,EAAE,mBAAmB;QACvB,WAAW,EAAE,2DAA2D;QACxE,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC;KAC9C;IACD,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE;QACH,OAAO,EAAE;YACP,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,0CAA0C;SACxD;QACD,MAAM,EAAE;YACN,GAAG,EAAE,SAAS;YACd,OAAO,EAAE,eAAe;YACxB,WAAW,EAAE,6CAA6C;SAC3D;KACF;IACD,KAAK,EAAE,6BAA6B;IACpC,KAAK,EAAE,kCAAkC;CAC1C,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ResolvedModel } from "../model";
|
|
2
|
+
/**
|
|
3
|
+
* Cloud OpenAI provider. Opt-in: only used when an agent's `model.allow`
|
|
4
|
+
* includes `openai/*` (or a more specific pattern) AND the resolver picks
|
|
5
|
+
* an `openai/...` model id.
|
|
6
|
+
*/
|
|
7
|
+
export type OpenAIConfig = {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
baseURL?: string;
|
|
10
|
+
resolvedModelId: string;
|
|
11
|
+
originalModelId: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function buildOpenAIModel(cfg: OpenAIConfig): ResolvedModel;
|
|
14
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAqBjE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createOpenAI } from "@ai-sdk/openai";
|
|
2
|
+
import { ProviderError } from "../errors";
|
|
3
|
+
import { maskSecret } from "../env";
|
|
4
|
+
export function buildOpenAIModel(cfg) {
|
|
5
|
+
if (!cfg.apiKey) {
|
|
6
|
+
throw new ProviderError("openai provider requires OPENAI_API_KEY (cloud is opt-in; set the key only when an agent's model.allow permits openai/*)");
|
|
7
|
+
}
|
|
8
|
+
const provider = createOpenAI({
|
|
9
|
+
apiKey: cfg.apiKey,
|
|
10
|
+
baseURL: cfg.baseURL,
|
|
11
|
+
});
|
|
12
|
+
return {
|
|
13
|
+
kind: "ai-sdk",
|
|
14
|
+
id: cfg.originalModelId,
|
|
15
|
+
resolvedId: cfg.resolvedModelId,
|
|
16
|
+
provider: "openai",
|
|
17
|
+
model: provider(cfg.resolvedModelId),
|
|
18
|
+
meta: {
|
|
19
|
+
baseURL: cfg.baseURL ?? "https://api.openai.com/v1",
|
|
20
|
+
apiKeyMasked: maskSecret(cfg.apiKey),
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAcpC,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,IAAI,aAAa,CACrB,0HAA0H,CAC3H,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,GAAG,CAAC,eAAe;QACvB,UAAU,EAAE,GAAG,CAAC,eAAe;QAC/B,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;QACpC,IAAI,EAAE;YACJ,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,2BAA2B;YACnD,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;SACrC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI cloud provider definition using defineProvider.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in cloud provider for OpenAI's API.
|
|
5
|
+
*/
|
|
6
|
+
import { type ProviderConfig } from "@dahura/super-agent-kit";
|
|
7
|
+
/**
|
|
8
|
+
* Configuration type for OpenAI provider.
|
|
9
|
+
*/
|
|
10
|
+
export type OpenAIProviderConfig = ProviderConfig & {
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
baseUrl?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* OpenAI cloud provider definition.
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Opt-in cloud provider (only used when explicitly allowed)
|
|
19
|
+
* - Supports custom base URL for Azure OpenAI or proxies
|
|
20
|
+
* - No live probe to avoid API charges
|
|
21
|
+
*/
|
|
22
|
+
export declare const openaiProvider: import("@dahura/super-agent-kit").ProviderModule<OpenAIProviderConfig>;
|
|
23
|
+
//# sourceMappingURL=openai.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.provider.d.ts","sourceRoot":"","sources":["../../src/providers/openai.provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAkB,KAAK,cAAc,EAA4B,MAAM,yBAAyB,CAAC;AAGxG;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAyCF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,wEAoBzB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI cloud provider definition using defineProvider.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in cloud provider for OpenAI's API.
|
|
5
|
+
*/
|
|
6
|
+
import { defineProvider } from "@dahura/super-agent-kit";
|
|
7
|
+
import { buildOpenAIModel } from "./openai";
|
|
8
|
+
/**
|
|
9
|
+
* Probe function for OpenAI provider.
|
|
10
|
+
* Just checks if API key is set (doesn't make a live call to avoid charges).
|
|
11
|
+
*/
|
|
12
|
+
async function probeOpenAIProvider(config) {
|
|
13
|
+
if (!config.apiKey) {
|
|
14
|
+
return {
|
|
15
|
+
ok: false,
|
|
16
|
+
error: "OPENAI_API_KEY not set (cloud is opt-in)",
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
ok: true,
|
|
21
|
+
meta: {
|
|
22
|
+
apiKeySet: true,
|
|
23
|
+
baseUrl: config.baseUrl ?? "https://api.openai.com/v1",
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build function wrapper for defineProvider compatibility.
|
|
29
|
+
*/
|
|
30
|
+
async function buildOpenAIProviderModel(config) {
|
|
31
|
+
const oaiConfig = {
|
|
32
|
+
apiKey: config.apiKey ?? "",
|
|
33
|
+
baseURL: config.baseUrl,
|
|
34
|
+
resolvedModelId: "gpt-4o",
|
|
35
|
+
originalModelId: "openai/gpt-4o",
|
|
36
|
+
};
|
|
37
|
+
return buildOpenAIModel(oaiConfig);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* OpenAI cloud provider definition.
|
|
41
|
+
*
|
|
42
|
+
* Features:
|
|
43
|
+
* - Opt-in cloud provider (only used when explicitly allowed)
|
|
44
|
+
* - Supports custom base URL for Azure OpenAI or proxies
|
|
45
|
+
* - No live probe to avoid API charges
|
|
46
|
+
*/
|
|
47
|
+
export const openaiProvider = defineProvider({
|
|
48
|
+
meta: {
|
|
49
|
+
id: "openai",
|
|
50
|
+
description: "OpenAI cloud API (GPT-4, GPT-4o, etc.)",
|
|
51
|
+
version: "1.0.0",
|
|
52
|
+
capabilities: ["text", "vision", "embedding"],
|
|
53
|
+
},
|
|
54
|
+
kind: "ai-sdk",
|
|
55
|
+
env: {
|
|
56
|
+
apiKey: {
|
|
57
|
+
env: "API_KEY",
|
|
58
|
+
description: "OpenAI API key (reads OPENAI_API_KEY)",
|
|
59
|
+
},
|
|
60
|
+
baseUrl: {
|
|
61
|
+
env: "BASE_URL",
|
|
62
|
+
description: "Custom base URL (for Azure or proxies)",
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
probe: probeOpenAIProvider,
|
|
66
|
+
build: buildOpenAIProviderModel,
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=openai.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../src/providers/openai.provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAiD,MAAM,yBAAyB,CAAC;AACxG,OAAO,EAAE,gBAAgB,EAAqB,MAAM,UAAU,CAAC;AAU/D;;;GAGG;AACH,KAAK,UAAU,mBAAmB,CAChC,MAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,0CAA0C;SAClD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;SACvD;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB,CACrC,MAA4B;IAE5B,MAAM,SAAS,GAAiB;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,eAAe,EAAE,QAAQ;QACzB,eAAe,EAAE,eAAe;KACjC,CAAC;IAEF,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAuB;IACjE,IAAI,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,wCAAwC;QACrD,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC;KAC9C;IACD,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE;QACH,MAAM,EAAE;YACN,GAAG,EAAE,SAAS;YACd,WAAW,EAAE,uCAAuC;SACrD;QACD,OAAO,EAAE;YACP,GAAG,EAAE,UAAU;YACf,WAAW,EAAE,wCAAwC;SACtD;KACF;IACD,KAAK,EAAE,mBAAmB;IAC1B,KAAK,EAAE,wBAAwB;CAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ResolvedModel } from "../model";
|
|
2
|
+
/**
|
|
3
|
+
* Custom (non-AI-SDK) provider that shells out to a local whisper.cpp build.
|
|
4
|
+
* Designed for stock `whisper-cli` from https://github.com/ggerganov/whisper.cpp.
|
|
5
|
+
*
|
|
6
|
+
* Required env (per-agent or global):
|
|
7
|
+
* SUPERAGENT_<EXPORT>_BIN path to whisper-cli binary
|
|
8
|
+
* SUPERAGENT_<EXPORT>_MODEL_PATH path to ggml-*.bin model file
|
|
9
|
+
*
|
|
10
|
+
* Optional:
|
|
11
|
+
* SUPERAGENT_<EXPORT>_LANGUAGE language hint (default "auto")
|
|
12
|
+
* SUPERAGENT_<EXPORT>_THREADS number of threads
|
|
13
|
+
*/
|
|
14
|
+
export type WhisperCppConfig = {
|
|
15
|
+
bin: string;
|
|
16
|
+
modelPath: string;
|
|
17
|
+
language?: string;
|
|
18
|
+
threads?: number;
|
|
19
|
+
resolvedModelId: string;
|
|
20
|
+
originalModelId: string;
|
|
21
|
+
};
|
|
22
|
+
export declare function buildWhisperCppModel(cfg: WhisperCppConfig): Promise<ResolvedModel>;
|
|
23
|
+
//# sourceMappingURL=whisper-cpp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper-cpp.d.ts","sourceRoot":"","sources":["../../src/providers/whisper-cpp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyC,aAAa,EAAE,MAAM,UAAU,CAAC;AAGrF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAWF,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqGxF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { mkdtemp, rm, writeFile, readFile, access } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { basename, extname, join } from "node:path";
|
|
4
|
+
import { ProviderError } from "../errors";
|
|
5
|
+
async function fileExists(path) {
|
|
6
|
+
try {
|
|
7
|
+
await access(path);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export async function buildWhisperCppModel(cfg) {
|
|
15
|
+
if (!cfg.bin) {
|
|
16
|
+
throw new ProviderError("whisper-cpp requires the binary path (set SUPERAGENT_<AGENT>_BIN or SUPERAGENT_BIN)");
|
|
17
|
+
}
|
|
18
|
+
if (!cfg.modelPath) {
|
|
19
|
+
throw new ProviderError("whisper-cpp requires the model path (set SUPERAGENT_<AGENT>_MODEL_PATH or SUPERAGENT_MODEL_PATH)");
|
|
20
|
+
}
|
|
21
|
+
if (!(await fileExists(cfg.bin))) {
|
|
22
|
+
throw new ProviderError(`whisper-cpp binary not found at "${cfg.bin}"`);
|
|
23
|
+
}
|
|
24
|
+
if (!(await fileExists(cfg.modelPath))) {
|
|
25
|
+
throw new ProviderError(`whisper-cpp model not found at "${cfg.modelPath}"`);
|
|
26
|
+
}
|
|
27
|
+
const invoke = async (input) => {
|
|
28
|
+
if (input.kind !== "audio") {
|
|
29
|
+
throw new ProviderError(`whisper-cpp only supports audio input (got ${input.kind})`);
|
|
30
|
+
}
|
|
31
|
+
const workDir = await mkdtemp(join(tmpdir(), "superagent-whisper-"));
|
|
32
|
+
const inputPath = join(workDir, deriveInputName(input.source));
|
|
33
|
+
const outBase = join(workDir, "transcript");
|
|
34
|
+
try {
|
|
35
|
+
await writeFile(inputPath, input.data);
|
|
36
|
+
const args = [
|
|
37
|
+
"-m",
|
|
38
|
+
cfg.modelPath,
|
|
39
|
+
"-f",
|
|
40
|
+
inputPath,
|
|
41
|
+
"-of",
|
|
42
|
+
outBase,
|
|
43
|
+
"-otxt",
|
|
44
|
+
"-nt",
|
|
45
|
+
"-l",
|
|
46
|
+
cfg.language ?? "auto",
|
|
47
|
+
];
|
|
48
|
+
if (typeof cfg.threads === "number") {
|
|
49
|
+
args.push("-t", String(cfg.threads));
|
|
50
|
+
}
|
|
51
|
+
const proc = Bun.spawn({
|
|
52
|
+
cmd: [cfg.bin, ...args],
|
|
53
|
+
stdout: "pipe",
|
|
54
|
+
stderr: "pipe",
|
|
55
|
+
});
|
|
56
|
+
const [stdout, stderr, exitCode] = await Promise.all([
|
|
57
|
+
new Response(proc.stdout).text(),
|
|
58
|
+
new Response(proc.stderr).text(),
|
|
59
|
+
proc.exited,
|
|
60
|
+
]);
|
|
61
|
+
if (exitCode !== 0) {
|
|
62
|
+
throw new ProviderError(`whisper-cpp exited with code ${exitCode}: ${stderr.trim() || stdout.trim()}`);
|
|
63
|
+
}
|
|
64
|
+
const txtPath = `${outBase}.txt`;
|
|
65
|
+
let text = "";
|
|
66
|
+
if (await fileExists(txtPath)) {
|
|
67
|
+
text = (await readFile(txtPath, "utf8")).trim();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// fallback: parse stdout (some whisper-cli builds write to stdout instead)
|
|
71
|
+
text = stdout
|
|
72
|
+
.split("\n")
|
|
73
|
+
.map((line) => line.trim())
|
|
74
|
+
.filter((line) => line.length > 0 && !line.startsWith("["))
|
|
75
|
+
.join(" ")
|
|
76
|
+
.trim();
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
text,
|
|
80
|
+
meta: {
|
|
81
|
+
binary: cfg.bin,
|
|
82
|
+
model: basename(cfg.modelPath),
|
|
83
|
+
inputDurationHint: input.data.byteLength,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await rm(workDir, { recursive: true, force: true }).catch(() => undefined);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
return {
|
|
92
|
+
kind: "custom",
|
|
93
|
+
id: cfg.originalModelId,
|
|
94
|
+
resolvedId: cfg.resolvedModelId,
|
|
95
|
+
provider: "whisper-cpp",
|
|
96
|
+
invoke,
|
|
97
|
+
meta: {
|
|
98
|
+
bin: cfg.bin,
|
|
99
|
+
modelPath: cfg.modelPath,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function deriveInputName(source) {
|
|
104
|
+
if (source === "<inline>")
|
|
105
|
+
return "input.wav";
|
|
106
|
+
const baseName = basename(source);
|
|
107
|
+
const ext = extname(baseName);
|
|
108
|
+
return ext.length > 0 ? baseName : `${baseName}.wav`;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=whisper-cpp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper-cpp.js","sourceRoot":"","sources":["../../src/providers/whisper-cpp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* whisper-cpp provider definition using defineProvider.
|
|
3
|
+
*
|
|
4
|
+
* Custom provider that shells out to a local whisper.cpp build
|
|
5
|
+
* for audio transcription.
|
|
6
|
+
*/
|
|
7
|
+
import { type ProviderConfig } from "@dahura/super-agent-kit";
|
|
8
|
+
/**
|
|
9
|
+
* Configuration type for whisper-cpp provider.
|
|
10
|
+
*/
|
|
11
|
+
export type WhisperCppProviderConfig = ProviderConfig & {
|
|
12
|
+
bin?: string;
|
|
13
|
+
modelPath?: string;
|
|
14
|
+
language?: string;
|
|
15
|
+
threads?: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* whisper-cpp provider definition.
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - One-shot process invocation (not a persistent server)
|
|
22
|
+
* - Supports multiple output formats
|
|
23
|
+
* - Language hint support
|
|
24
|
+
* - Thread count configuration
|
|
25
|
+
*/
|
|
26
|
+
export declare const whisperCppProvider: import("@dahura/super-agent-kit").ProviderModule<WhisperCppProviderConfig>;
|
|
27
|
+
//# sourceMappingURL=whisper-cpp.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper-cpp.provider.d.ts","sourceRoot":"","sources":["../../src/providers/whisper-cpp.provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAkB,KAAK,cAAc,EAA4B,MAAM,yBAAyB,CAAC;AAGxG;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA8FF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,4EAuC7B,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* whisper-cpp provider definition using defineProvider.
|
|
3
|
+
*
|
|
4
|
+
* Custom provider that shells out to a local whisper.cpp build
|
|
5
|
+
* for audio transcription.
|
|
6
|
+
*/
|
|
7
|
+
import { access } from "node:fs/promises";
|
|
8
|
+
import { basename } from "node:path";
|
|
9
|
+
import { defineProvider } from "@dahura/super-agent-kit";
|
|
10
|
+
import { buildWhisperCppModel } from "./whisper-cpp";
|
|
11
|
+
/**
|
|
12
|
+
* Check if a file exists.
|
|
13
|
+
*/
|
|
14
|
+
async function fileExists(path) {
|
|
15
|
+
try {
|
|
16
|
+
await access(path);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Probe function for whisper-cpp provider.
|
|
25
|
+
* Checks if binary and model file exist.
|
|
26
|
+
*/
|
|
27
|
+
async function probeWhisperCppProvider(config) {
|
|
28
|
+
const startedAt = performance.now();
|
|
29
|
+
// If no bin/modelPath configured, provider is not set up
|
|
30
|
+
if (!config.bin || !config.modelPath) {
|
|
31
|
+
return {
|
|
32
|
+
ok: false,
|
|
33
|
+
latencyMs: Math.round(performance.now() - startedAt),
|
|
34
|
+
error: "Not configured (BIN and MODEL_PATH required)",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Check if binary exists
|
|
38
|
+
if (!(await fileExists(config.bin))) {
|
|
39
|
+
return {
|
|
40
|
+
ok: false,
|
|
41
|
+
latencyMs: Math.round(performance.now() - startedAt),
|
|
42
|
+
error: `Binary not found: ${config.bin}`,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Check if model exists
|
|
46
|
+
if (!(await fileExists(config.modelPath))) {
|
|
47
|
+
return {
|
|
48
|
+
ok: false,
|
|
49
|
+
latencyMs: Math.round(performance.now() - startedAt),
|
|
50
|
+
error: `Model not found: ${config.modelPath}`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const modelName = basename(config.modelPath);
|
|
54
|
+
return {
|
|
55
|
+
ok: true,
|
|
56
|
+
latencyMs: Math.round(performance.now() - startedAt),
|
|
57
|
+
models: [modelName],
|
|
58
|
+
meta: {
|
|
59
|
+
bin: config.bin,
|
|
60
|
+
modelPath: config.modelPath,
|
|
61
|
+
language: config.language ?? "auto",
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build function wrapper for defineProvider compatibility.
|
|
67
|
+
*/
|
|
68
|
+
async function buildWhisperCppProviderModel(config) {
|
|
69
|
+
const whisperConfig = {
|
|
70
|
+
bin: config.bin ?? "",
|
|
71
|
+
modelPath: config.modelPath ?? "",
|
|
72
|
+
language: config.language,
|
|
73
|
+
threads: config.threads ? parseInt(config.threads, 10) : undefined,
|
|
74
|
+
resolvedModelId: basename(config.modelPath ?? "", ".bin"),
|
|
75
|
+
originalModelId: `local/${basename(config.modelPath ?? "", ".bin")}`,
|
|
76
|
+
};
|
|
77
|
+
return buildWhisperCppModel(whisperConfig);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extract a human-readable model ID from a whisper model file path.
|
|
81
|
+
* Examples:
|
|
82
|
+
* ~/.aftermeet/models/ggml-small.bin → "ggml-small"
|
|
83
|
+
* /path/to/whisper/ggml-base.en.bin → "ggml-base.en"
|
|
84
|
+
*/
|
|
85
|
+
function extractWhisperModelId(filePath) {
|
|
86
|
+
const filename = basename(filePath);
|
|
87
|
+
// Remove .bin extension
|
|
88
|
+
return filename.replace(/\.bin$/i, "");
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* whisper-cpp provider definition.
|
|
92
|
+
*
|
|
93
|
+
* Features:
|
|
94
|
+
* - One-shot process invocation (not a persistent server)
|
|
95
|
+
* - Supports multiple output formats
|
|
96
|
+
* - Language hint support
|
|
97
|
+
* - Thread count configuration
|
|
98
|
+
*/
|
|
99
|
+
export const whisperCppProvider = defineProvider({
|
|
100
|
+
meta: {
|
|
101
|
+
id: "whisper-cpp",
|
|
102
|
+
description: "Local whisper.cpp for audio transcription",
|
|
103
|
+
version: "1.0.0",
|
|
104
|
+
capabilities: ["audio"],
|
|
105
|
+
},
|
|
106
|
+
kind: "custom",
|
|
107
|
+
env: {
|
|
108
|
+
bin: {
|
|
109
|
+
env: "BIN",
|
|
110
|
+
required: true,
|
|
111
|
+
description: "Path to whisper-cli binary",
|
|
112
|
+
},
|
|
113
|
+
modelPath: {
|
|
114
|
+
env: "MODEL_PATH",
|
|
115
|
+
required: true,
|
|
116
|
+
description: "Path to ggml-*.bin model file",
|
|
117
|
+
},
|
|
118
|
+
language: {
|
|
119
|
+
env: "LANGUAGE",
|
|
120
|
+
default: "auto",
|
|
121
|
+
description: "Language hint (default 'auto')",
|
|
122
|
+
},
|
|
123
|
+
threads: {
|
|
124
|
+
env: "THREADS",
|
|
125
|
+
description: "Number of CPU threads",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
modelDiscovery: {
|
|
129
|
+
paths: [
|
|
130
|
+
"~/.aftermeet/models",
|
|
131
|
+
"~/Library/Application Support/superwhisper/models",
|
|
132
|
+
],
|
|
133
|
+
pattern: "ggml-*.bin",
|
|
134
|
+
extractModelId: extractWhisperModelId,
|
|
135
|
+
},
|
|
136
|
+
probe: probeWhisperCppProvider,
|
|
137
|
+
build: buildWhisperCppProviderModel,
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=whisper-cpp.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper-cpp.provider.js","sourceRoot":"","sources":["../../src/providers/whisper-cpp.provider.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AgentModule, InputsSchema } from "@dahura/super-agent-kit";
|
|
2
|
+
import { AgentClient, type AgentClientOptions } from "./builder";
|
|
3
|
+
/**
|
|
4
|
+
* Materialize an agent module into a runnable client. This is what consumers
|
|
5
|
+
* (Playground, codegen wrappers) use as the actual `transcriptAgent` etc.
|
|
6
|
+
*
|
|
7
|
+
* The agent module itself stays a passive descriptor — runtime decisions
|
|
8
|
+
* (model resolution, logging, caching) all live in this layer.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createAgentClient<TInputs extends InputsSchema>(agent: AgentModule<TInputs>, opts: AgentClientOptions): AgentClient<TInputs>;
|
|
11
|
+
//# sourceMappingURL=proxy.d.ts.map
|