eqho-eval 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +552 -0
- package/dist/cli/auth-store.d.ts +5 -0
- package/dist/cli/auth-store.d.ts.map +1 -0
- package/dist/cli/auth-store.js +39 -0
- package/dist/cli/auth-store.js.map +1 -0
- package/dist/cli/banner.d.ts +3 -0
- package/dist/cli/banner.d.ts.map +1 -0
- package/dist/cli/banner.js +38 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/commands/action-eval.d.ts +3 -0
- package/dist/cli/commands/action-eval.d.ts.map +1 -0
- package/dist/cli/commands/action-eval.js +133 -0
- package/dist/cli/commands/action-eval.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +3 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +156 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/cache.d.ts +3 -0
- package/dist/cli/commands/cache.d.ts.map +1 -0
- package/dist/cli/commands/cache.js +43 -0
- package/dist/cli/commands/cache.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +3 -0
- package/dist/cli/commands/ci.d.ts.map +1 -0
- package/dist/cli/commands/ci.js +124 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/conversations.d.ts +3 -0
- package/dist/cli/commands/conversations.d.ts.map +1 -0
- package/dist/cli/commands/conversations.js +89 -0
- package/dist/cli/commands/conversations.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +3 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +122 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +11 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +308 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/eval.d.ts +3 -0
- package/dist/cli/commands/eval.d.ts.map +1 -0
- package/dist/cli/commands/eval.js +101 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +182 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +80 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/mentions.d.ts +3 -0
- package/dist/cli/commands/mentions.d.ts.map +1 -0
- package/dist/cli/commands/mentions.js +125 -0
- package/dist/cli/commands/mentions.js.map +1 -0
- package/dist/cli/commands/org.d.ts +3 -0
- package/dist/cli/commands/org.d.ts.map +1 -0
- package/dist/cli/commands/org.js +196 -0
- package/dist/cli/commands/org.js.map +1 -0
- package/dist/cli/commands/postcall-eval.d.ts +3 -0
- package/dist/cli/commands/postcall-eval.d.ts.map +1 -0
- package/dist/cli/commands/postcall-eval.js +188 -0
- package/dist/cli/commands/postcall-eval.js.map +1 -0
- package/dist/cli/commands/render.d.ts +3 -0
- package/dist/cli/commands/render.d.ts.map +1 -0
- package/dist/cli/commands/render.js +223 -0
- package/dist/cli/commands/render.js.map +1 -0
- package/dist/cli/commands/results.d.ts +3 -0
- package/dist/cli/commands/results.d.ts.map +1 -0
- package/dist/cli/commands/results.js +128 -0
- package/dist/cli/commands/results.js.map +1 -0
- package/dist/cli/commands/scenarios.d.ts +3 -0
- package/dist/cli/commands/scenarios.d.ts.map +1 -0
- package/dist/cli/commands/scenarios.js +57 -0
- package/dist/cli/commands/scenarios.js.map +1 -0
- package/dist/cli/commands/start.d.ts +3 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +260 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +133 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +3 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +80 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/view.d.ts +3 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +29 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/error-handler.d.ts +8 -0
- package/dist/cli/error-handler.d.ts.map +1 -0
- package/dist/cli/error-handler.js +133 -0
- package/dist/cli/error-handler.js.map +1 -0
- package/dist/cli/gateway.d.ts +14 -0
- package/dist/cli/gateway.d.ts.map +1 -0
- package/dist/cli/gateway.js +222 -0
- package/dist/cli/gateway.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +194 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/action-eval-builder.d.ts +20 -0
- package/dist/core/action-eval-builder.d.ts.map +1 -0
- package/dist/core/action-eval-builder.js +276 -0
- package/dist/core/action-eval-builder.js.map +1 -0
- package/dist/core/agent-fetcher.d.ts +35 -0
- package/dist/core/agent-fetcher.d.ts.map +1 -0
- package/dist/core/agent-fetcher.js +81 -0
- package/dist/core/agent-fetcher.js.map +1 -0
- package/dist/core/api-cache.d.ts +11 -0
- package/dist/core/api-cache.d.ts.map +1 -0
- package/dist/core/api-cache.js +89 -0
- package/dist/core/api-cache.js.map +1 -0
- package/dist/core/config-generator.d.ts +26 -0
- package/dist/core/config-generator.d.ts.map +1 -0
- package/dist/core/config-generator.js +457 -0
- package/dist/core/config-generator.js.map +1 -0
- package/dist/core/conversation-loader.d.ts +21 -0
- package/dist/core/conversation-loader.d.ts.map +1 -0
- package/dist/core/conversation-loader.js +74 -0
- package/dist/core/conversation-loader.js.map +1 -0
- package/dist/core/dataset-loader.d.ts +26 -0
- package/dist/core/dataset-loader.d.ts.map +1 -0
- package/dist/core/dataset-loader.js +121 -0
- package/dist/core/dataset-loader.js.map +1 -0
- package/dist/core/disposition-builder.d.ts +38 -0
- package/dist/core/disposition-builder.d.ts.map +1 -0
- package/dist/core/disposition-builder.js +270 -0
- package/dist/core/disposition-builder.js.map +1 -0
- package/dist/core/eqho-client.d.ts +45 -0
- package/dist/core/eqho-client.d.ts.map +1 -0
- package/dist/core/eqho-client.js +154 -0
- package/dist/core/eqho-client.js.map +1 -0
- package/dist/core/greeting-builder.d.ts +18 -0
- package/dist/core/greeting-builder.d.ts.map +1 -0
- package/dist/core/greeting-builder.js +83 -0
- package/dist/core/greeting-builder.js.map +1 -0
- package/dist/core/postcall-simulator.d.ts +20 -0
- package/dist/core/postcall-simulator.d.ts.map +1 -0
- package/dist/core/postcall-simulator.js +212 -0
- package/dist/core/postcall-simulator.js.map +1 -0
- package/dist/core/prompt-assembler.d.ts +25 -0
- package/dist/core/prompt-assembler.d.ts.map +1 -0
- package/dist/core/prompt-assembler.js +185 -0
- package/dist/core/prompt-assembler.js.map +1 -0
- package/dist/core/promptfoo-runner.d.ts +13 -0
- package/dist/core/promptfoo-runner.d.ts.map +1 -0
- package/dist/core/promptfoo-runner.js +49 -0
- package/dist/core/promptfoo-runner.js.map +1 -0
- package/dist/core/provider-mapper.d.ts +39 -0
- package/dist/core/provider-mapper.d.ts.map +1 -0
- package/dist/core/provider-mapper.js +120 -0
- package/dist/core/provider-mapper.js.map +1 -0
- package/dist/core/template-engine.d.ts +10 -0
- package/dist/core/template-engine.d.ts.map +1 -0
- package/dist/core/template-engine.js +78 -0
- package/dist/core/template-engine.js.map +1 -0
- package/dist/core/tools-builder.d.ts +14 -0
- package/dist/core/tools-builder.d.ts.map +1 -0
- package/dist/core/tools-builder.js +208 -0
- package/dist/core/tools-builder.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/types/config.d.ts +100 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/eqho.d.ts +221 -0
- package/dist/types/eqho.d.ts.map +1 -0
- package/dist/types/eqho.js +2 -0
- package/dist/types/eqho.js.map +1 -0
- package/dist/types/helpers.d.ts +9 -0
- package/dist/types/helpers.d.ts.map +1 -0
- package/dist/types/helpers.js +8 -0
- package/dist/types/helpers.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { execFileSync, spawnSync } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export function resolvePromptfoo() {
|
|
5
|
+
const localBin = path.join(process.cwd(), "node_modules", ".bin", "promptfoo");
|
|
6
|
+
if (fs.existsSync(localBin))
|
|
7
|
+
return { bin: localBin, source: "local" };
|
|
8
|
+
const peerBin = path.resolve(import.meta.dirname ?? __dirname, "..", "..", "node_modules", ".bin", "promptfoo");
|
|
9
|
+
if (fs.existsSync(peerBin))
|
|
10
|
+
return { bin: peerBin, source: "peer" };
|
|
11
|
+
try {
|
|
12
|
+
execFileSync("which", ["promptfoo"], { stdio: "pipe" });
|
|
13
|
+
return { bin: "promptfoo", source: "global" };
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function getPromptfooVersion() {
|
|
20
|
+
const resolved = resolvePromptfoo();
|
|
21
|
+
if (!resolved)
|
|
22
|
+
return null;
|
|
23
|
+
try {
|
|
24
|
+
const out = execFileSync(resolved.bin, ["--version"], {
|
|
25
|
+
stdio: "pipe",
|
|
26
|
+
encoding: "utf-8",
|
|
27
|
+
});
|
|
28
|
+
return out.trim();
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function isPromptfooInstalled() {
|
|
35
|
+
return resolvePromptfoo() !== null;
|
|
36
|
+
}
|
|
37
|
+
export function runPromptfoo(args, options) {
|
|
38
|
+
const resolved = resolvePromptfoo();
|
|
39
|
+
if (!resolved) {
|
|
40
|
+
throw new Error("promptfoo is not installed. Install it with: npm install promptfoo");
|
|
41
|
+
}
|
|
42
|
+
const result = spawnSync(resolved.bin, args, {
|
|
43
|
+
stdio: "inherit",
|
|
44
|
+
cwd: options?.cwd ?? process.cwd(),
|
|
45
|
+
env: { ...process.env },
|
|
46
|
+
});
|
|
47
|
+
return { exitCode: result.status ?? 1 };
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=promptfoo-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptfoo-runner.js","sourceRoot":"","sources":["../../src/core/promptfoo-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/E,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,EAChC,IAAI,EACJ,IAAI,EACJ,cAAc,EACd,MAAM,EACN,WAAW,CACZ,CAAC;IACF,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAEpE,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE;YACpD,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,gBAAgB,EAAE,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAc,EAAE,OAA0B;IACrE,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE;QAC3C,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAClC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;KACxB,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { EqhoAgent } from "../types/eqho.js";
|
|
2
|
+
import type { AuthConfig } from "../types/config.js";
|
|
3
|
+
export interface MappedProvider {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
config: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface ProxyConfig {
|
|
9
|
+
backendUrl: string;
|
|
10
|
+
backendToken: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Extracts proxy config from an AuthConfig if a backend token is available.
|
|
14
|
+
* When present, promptfoo providers will route through the Vercel AI Gateway
|
|
15
|
+
* proxy instead of calling OpenAI directly, enabling multi-provider access
|
|
16
|
+
* and centralized usage tracking.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getProxyConfig(auth: AuthConfig | null): ProxyConfig | null;
|
|
19
|
+
/**
|
|
20
|
+
* Injects proxy config (apiBaseUrl + apiKey) into an array of provider
|
|
21
|
+
* configs. Used by eval builders that construct their own provider arrays
|
|
22
|
+
* (postcall-eval, action-eval, disposition-eval).
|
|
23
|
+
*/
|
|
24
|
+
export declare function injectProxy<T extends {
|
|
25
|
+
config?: Record<string, unknown>;
|
|
26
|
+
}>(providers: T[], proxy: ProxyConfig | null | undefined): T[];
|
|
27
|
+
/**
|
|
28
|
+
* Maps an Eqho agent's ai_settings to a promptfoo provider configuration.
|
|
29
|
+
* When a proxy is provided, the provider routes through the Vercel backend
|
|
30
|
+
* (supports any model from any provider via AI Gateway).
|
|
31
|
+
*/
|
|
32
|
+
export declare function mapAgentToProvider(agent: EqhoAgent, proxy?: ProxyConfig | null): MappedProvider | null;
|
|
33
|
+
/**
|
|
34
|
+
* Generates a set of providers for comparative eval:
|
|
35
|
+
* the production provider + alternative models for benchmarking.
|
|
36
|
+
* When proxy is provided, all providers route through the Vercel AI Gateway.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildProviderSet(agent: EqhoAgent, extraModels?: string[], proxy?: ProxyConfig | null): MappedProvider[];
|
|
39
|
+
//# sourceMappingURL=provider-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-mapper.d.ts","sourceRoot":"","sources":["../../src/core/provider-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAkBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAM1E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EACxE,SAAS,EAAE,CAAC,EAAE,EACd,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACpC,CAAC,EAAE,CAUL;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CAoCtG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,GACzB,cAAc,EAAE,CAiClB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
const DEFAULT_BACKEND_URL = "https://evals.eqho-solutions.dev";
|
|
2
|
+
const EQHO_TO_PROMPTFOO = {
|
|
3
|
+
"gpt-4o": "openai:chat:gpt-4o",
|
|
4
|
+
"gpt-4o-mini": "openai:chat:gpt-4o-mini",
|
|
5
|
+
"gpt-4.1": "openai:chat:gpt-4.1",
|
|
6
|
+
"gpt-4.1-mini": "openai:chat:gpt-4.1-mini",
|
|
7
|
+
"gpt-4.1-nano": "openai:chat:gpt-4.1-nano",
|
|
8
|
+
"gpt-4-turbo": "openai:chat:gpt-4-turbo",
|
|
9
|
+
"o4-mini": "openai:chat:o4-mini",
|
|
10
|
+
"o3-mini": "openai:chat:o3-mini",
|
|
11
|
+
"gpt-5": "openai:chat:gpt-5",
|
|
12
|
+
"gpt-5-mini": "openai:chat:gpt-5-mini",
|
|
13
|
+
"gpt-5-nano": "openai:chat:gpt-5-nano",
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Extracts proxy config from an AuthConfig if a backend token is available.
|
|
17
|
+
* When present, promptfoo providers will route through the Vercel AI Gateway
|
|
18
|
+
* proxy instead of calling OpenAI directly, enabling multi-provider access
|
|
19
|
+
* and centralized usage tracking.
|
|
20
|
+
*/
|
|
21
|
+
export function getProxyConfig(auth) {
|
|
22
|
+
if (!auth?.backendToken)
|
|
23
|
+
return null;
|
|
24
|
+
return {
|
|
25
|
+
backendUrl: auth.backendUrl || DEFAULT_BACKEND_URL,
|
|
26
|
+
backendToken: auth.backendToken,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Injects proxy config (apiBaseUrl + apiKey) into an array of provider
|
|
31
|
+
* configs. Used by eval builders that construct their own provider arrays
|
|
32
|
+
* (postcall-eval, action-eval, disposition-eval).
|
|
33
|
+
*/
|
|
34
|
+
export function injectProxy(providers, proxy) {
|
|
35
|
+
if (!proxy)
|
|
36
|
+
return providers;
|
|
37
|
+
return providers.map((p) => ({
|
|
38
|
+
...p,
|
|
39
|
+
config: {
|
|
40
|
+
...p.config,
|
|
41
|
+
apiBaseUrl: `${proxy.backendUrl}/api/v1`,
|
|
42
|
+
apiKey: proxy.backendToken,
|
|
43
|
+
},
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Maps an Eqho agent's ai_settings to a promptfoo provider configuration.
|
|
48
|
+
* When a proxy is provided, the provider routes through the Vercel backend
|
|
49
|
+
* (supports any model from any provider via AI Gateway).
|
|
50
|
+
*/
|
|
51
|
+
export function mapAgentToProvider(agent, proxy) {
|
|
52
|
+
const settings = agent.ai_settings;
|
|
53
|
+
if (!settings)
|
|
54
|
+
return null;
|
|
55
|
+
const model = settings.ai_model;
|
|
56
|
+
if (!model)
|
|
57
|
+
return null;
|
|
58
|
+
const providerId = EQHO_TO_PROMPTFOO[model] ?? `openai:chat:${model}`;
|
|
59
|
+
const config = {};
|
|
60
|
+
const isReasoningModel = /^(o[1-9]|o\d+-|gpt-5)/.test(model);
|
|
61
|
+
if (settings.temperature != null) {
|
|
62
|
+
config.temperature = isReasoningModel ? 1 : Number(settings.temperature);
|
|
63
|
+
}
|
|
64
|
+
if (settings.max_tokens != null)
|
|
65
|
+
config.max_tokens = Number(settings.max_tokens);
|
|
66
|
+
if (!isReasoningModel) {
|
|
67
|
+
if (settings.frequency_penalty != null)
|
|
68
|
+
config.frequency_penalty = Number(settings.frequency_penalty);
|
|
69
|
+
if (settings.presence_penalty != null)
|
|
70
|
+
config.presence_penalty = Number(settings.presence_penalty);
|
|
71
|
+
}
|
|
72
|
+
if (settings.reasoning != null) {
|
|
73
|
+
config.reasoning = settings.reasoning;
|
|
74
|
+
}
|
|
75
|
+
if (proxy) {
|
|
76
|
+
config.apiBaseUrl = `${proxy.backendUrl}/api/v1`;
|
|
77
|
+
config.apiKey = proxy.backendToken;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
id: providerId,
|
|
81
|
+
label: `${agent.name} (production: ${model})`,
|
|
82
|
+
config,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Generates a set of providers for comparative eval:
|
|
87
|
+
* the production provider + alternative models for benchmarking.
|
|
88
|
+
* When proxy is provided, all providers route through the Vercel AI Gateway.
|
|
89
|
+
*/
|
|
90
|
+
export function buildProviderSet(agent, extraModels, proxy) {
|
|
91
|
+
const providers = [];
|
|
92
|
+
const prod = mapAgentToProvider(agent, proxy);
|
|
93
|
+
if (prod) {
|
|
94
|
+
prod.label = `${prod.label} [PRODUCTION]`;
|
|
95
|
+
providers.push(prod);
|
|
96
|
+
}
|
|
97
|
+
const baseConfig = prod?.config ?? { temperature: 0.7 };
|
|
98
|
+
const prodModel = agent.ai_settings?.ai_model ?? "";
|
|
99
|
+
const defaults = ["gpt-4.1-mini", "gpt-4.1", "o4-mini"];
|
|
100
|
+
const models = extraModels ?? defaults;
|
|
101
|
+
for (const model of models) {
|
|
102
|
+
if (model === prodModel)
|
|
103
|
+
continue;
|
|
104
|
+
const id = EQHO_TO_PROMPTFOO[model] ?? `openai:chat:${model}`;
|
|
105
|
+
const isReasoning = /^(o[1-9]|o\d+-|gpt-5)/.test(model);
|
|
106
|
+
const cfg = { ...baseConfig };
|
|
107
|
+
if (isReasoning) {
|
|
108
|
+
delete cfg.frequency_penalty;
|
|
109
|
+
delete cfg.presence_penalty;
|
|
110
|
+
cfg.temperature = 1;
|
|
111
|
+
}
|
|
112
|
+
if (proxy) {
|
|
113
|
+
cfg.apiBaseUrl = `${proxy.backendUrl}/api/v1`;
|
|
114
|
+
cfg.apiKey = proxy.backendToken;
|
|
115
|
+
}
|
|
116
|
+
providers.push({ id, label: model, config: cfg });
|
|
117
|
+
}
|
|
118
|
+
return providers;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=provider-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-mapper.js","sourceRoot":"","sources":["../../src/core/provider-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders a Jinja2/Nunjucks template string with the given context.
|
|
3
|
+
* Missing variables resolve to empty string (matches eqho-ai ChainableUndefined).
|
|
4
|
+
*/
|
|
5
|
+
export declare function renderTemplate(template: string, context: Record<string, unknown>): string;
|
|
6
|
+
/**
|
|
7
|
+
* Validates a template string for syntax errors.
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateTemplate(template: string): boolean;
|
|
10
|
+
//# sourceMappingURL=template-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/core/template-engine.ts"],"names":[],"mappings":"AAmDA;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO1D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import nunjucks from "nunjucks";
|
|
2
|
+
const env = new nunjucks.Environment(null, {
|
|
3
|
+
autoescape: false,
|
|
4
|
+
throwOnUndefined: false,
|
|
5
|
+
});
|
|
6
|
+
/**
|
|
7
|
+
* format_dt filter — timezone-aware datetime formatting.
|
|
8
|
+
* Mirrors eqho-ai's custom Jinja2 filter.
|
|
9
|
+
*/
|
|
10
|
+
env.addFilter("format_dt", (dt, tz = "UTC", fmt = "%Y-%m-%d %H:%M") => {
|
|
11
|
+
if (!dt)
|
|
12
|
+
return "";
|
|
13
|
+
let date;
|
|
14
|
+
if (typeof dt === "string") {
|
|
15
|
+
date = new Date(dt);
|
|
16
|
+
if (isNaN(date.getTime()))
|
|
17
|
+
return String(dt);
|
|
18
|
+
}
|
|
19
|
+
else if (dt instanceof Date) {
|
|
20
|
+
date = dt;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return String(dt);
|
|
24
|
+
}
|
|
25
|
+
const jsFmt = fmt
|
|
26
|
+
.replace("%Y", "YYYY")
|
|
27
|
+
.replace("%m", "MM")
|
|
28
|
+
.replace("%d", "DD")
|
|
29
|
+
.replace("%H", "HH")
|
|
30
|
+
.replace("%M", "mm")
|
|
31
|
+
.replace("%S", "ss")
|
|
32
|
+
.replace("%I", "hh")
|
|
33
|
+
.replace("%p", "A");
|
|
34
|
+
try {
|
|
35
|
+
const formatted = new Intl.DateTimeFormat("en-US", {
|
|
36
|
+
timeZone: tz,
|
|
37
|
+
year: jsFmt.includes("YYYY") ? "numeric" : undefined,
|
|
38
|
+
month: jsFmt.includes("MM") ? "2-digit" : undefined,
|
|
39
|
+
day: jsFmt.includes("DD") ? "2-digit" : undefined,
|
|
40
|
+
hour: jsFmt.includes("HH") || jsFmt.includes("hh") ? "2-digit" : undefined,
|
|
41
|
+
minute: jsFmt.includes("mm") ? "2-digit" : undefined,
|
|
42
|
+
second: jsFmt.includes("ss") ? "2-digit" : undefined,
|
|
43
|
+
hour12: jsFmt.includes("hh"),
|
|
44
|
+
}).format(date);
|
|
45
|
+
return formatted;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return date.toISOString();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* Renders a Jinja2/Nunjucks template string with the given context.
|
|
53
|
+
* Missing variables resolve to empty string (matches eqho-ai ChainableUndefined).
|
|
54
|
+
*/
|
|
55
|
+
export function renderTemplate(template, context) {
|
|
56
|
+
if (!template)
|
|
57
|
+
return "";
|
|
58
|
+
try {
|
|
59
|
+
return env.renderString(template, context);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
63
|
+
throw new Error(`Template render error: ${msg}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validates a template string for syntax errors.
|
|
68
|
+
*/
|
|
69
|
+
export function validateTemplate(template) {
|
|
70
|
+
try {
|
|
71
|
+
nunjucks.compile(template, env);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=template-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../src/core/template-engine.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;IACzC,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,KAAK;CACxB,CAAC,CAAC;AAEH;;;GAGG;AACH,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAW,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,gBAAgB,EAAE,EAAE;IAC7E,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAEnB,IAAI,IAAU,CAAC;IACf,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC;QAC9B,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,GAAG;SACd,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YACjD,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACpD,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACnD,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACjD,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC1E,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACpD,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACpD,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,OAAgC;IAEhC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EqhoAction } from "../types/eqho.js";
|
|
2
|
+
import type { OpenAITool } from "../types/config.js";
|
|
3
|
+
export type ActionExecutionType = "live" | "postcall" | "on_call_start";
|
|
4
|
+
/**
|
|
5
|
+
* Filters actions by execution_type then builds tool definitions.
|
|
6
|
+
* Default execution_type is "live" (matching eqho-ai behavior).
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildToolsByExecutionType(actions: EqhoAction[], executionType: ActionExecutionType): OpenAITool[];
|
|
9
|
+
/**
|
|
10
|
+
* Converts Eqho actions to OpenAI tool definitions.
|
|
11
|
+
* Mirrors eqho-ai's create_tools_from_all_actions().
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildTools(actions: EqhoAction[]): OpenAITool[];
|
|
14
|
+
//# sourceMappingURL=tools-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-builder.d.ts","sourceRoot":"","sources":["../../src/core/tools-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA4C,MAAM,kBAAkB,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,oBAAoB,CAAC;AAiLtE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC;AAExE;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,UAAU,EAAE,EACrB,aAAa,EAAE,mBAAmB,GACjC,UAAU,EAAE,CAKd;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAyC9D"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { renderTemplate } from "./template-engine.js";
|
|
2
|
+
/**
|
|
3
|
+
* Default parameter descriptions for built-in action types.
|
|
4
|
+
* Mirrors eqho-ai's SystemSettingsService.actions_settings.
|
|
5
|
+
*/
|
|
6
|
+
const GCAL_PARAM_DESCRIPTIONS = {
|
|
7
|
+
gcal_appointment_schedule: {
|
|
8
|
+
start: "The start date and time of the appointment in ISO 8601 format (e.g., 2024-03-15T14:00:00-05:00). Must include timezone offset.",
|
|
9
|
+
},
|
|
10
|
+
gcal_check_busy_time: {
|
|
11
|
+
start: "The start of the time range to check in ISO 8601 format.",
|
|
12
|
+
end: "The end of the time range to check in ISO 8601 format.",
|
|
13
|
+
},
|
|
14
|
+
gcal_get_free_slots: {
|
|
15
|
+
start: "The start of the time range to search in ISO 8601 format.",
|
|
16
|
+
end: "The end of the time range to search in ISO 8601 format.",
|
|
17
|
+
},
|
|
18
|
+
gcal_cancel_appointment: {
|
|
19
|
+
event_id: "The Google Calendar event ID to cancel.",
|
|
20
|
+
},
|
|
21
|
+
gcal_update_appointment: {
|
|
22
|
+
event_id: "The Google Calendar event ID to update.",
|
|
23
|
+
start: "The new start date and time in ISO 8601 format.",
|
|
24
|
+
end: "The new end date and time in ISO 8601 format.",
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Parameter schemas by action type.
|
|
29
|
+
* Mirrors eqho-ai's get_action_tool_parameters().
|
|
30
|
+
*/
|
|
31
|
+
function getActionToolParameters(actionType) {
|
|
32
|
+
const gcal = GCAL_PARAM_DESCRIPTIONS[actionType];
|
|
33
|
+
switch (actionType) {
|
|
34
|
+
case "call_transfer":
|
|
35
|
+
case "terminate_call":
|
|
36
|
+
case "webhook":
|
|
37
|
+
case "text":
|
|
38
|
+
case "email":
|
|
39
|
+
case "data_extraction":
|
|
40
|
+
case "gcal_fetch_appointments":
|
|
41
|
+
return {};
|
|
42
|
+
case "gcal_appointment_schedule":
|
|
43
|
+
return {
|
|
44
|
+
start: { type: "string", description: gcal?.start || "ISO 8601 start time" },
|
|
45
|
+
timezone: { type: "string", description: "The timezone for the appointment (e.g., America/New_York)" },
|
|
46
|
+
};
|
|
47
|
+
case "gcal_check_busy_time":
|
|
48
|
+
case "gcal_get_free_slots":
|
|
49
|
+
return {
|
|
50
|
+
start: { type: "string", description: gcal?.start || "ISO 8601 start time" },
|
|
51
|
+
end: { type: "string", description: gcal?.end || "ISO 8601 end time" },
|
|
52
|
+
};
|
|
53
|
+
case "gcal_cancel_appointment":
|
|
54
|
+
return {
|
|
55
|
+
event_id: { type: "string", description: gcal?.event_id || "Calendar event ID" },
|
|
56
|
+
};
|
|
57
|
+
case "gcal_update_appointment":
|
|
58
|
+
return {
|
|
59
|
+
event_id: { type: "string", description: gcal?.event_id || "Calendar event ID" },
|
|
60
|
+
start: { type: "string", description: gcal?.start || "ISO 8601 start time" },
|
|
61
|
+
end: { type: "string", description: gcal?.end || "ISO 8601 end time" },
|
|
62
|
+
};
|
|
63
|
+
case "set_lead_timezone":
|
|
64
|
+
return {
|
|
65
|
+
timezone: { type: "string", description: "The user's timezone (e.g., America/New_York)" },
|
|
66
|
+
};
|
|
67
|
+
case "set_lead_email":
|
|
68
|
+
return {
|
|
69
|
+
email: { type: "string", description: "The user's email address" },
|
|
70
|
+
};
|
|
71
|
+
case "set_lead_names":
|
|
72
|
+
return {
|
|
73
|
+
first_name: { type: "string", description: "The user's first name" },
|
|
74
|
+
last_name: { type: "string", description: "The user's last name" },
|
|
75
|
+
};
|
|
76
|
+
default:
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Required parameters by action type.
|
|
82
|
+
* Mirrors eqho-ai's action_tool_required_parameters.
|
|
83
|
+
*/
|
|
84
|
+
const ACTION_REQUIRED_PARAMS = {
|
|
85
|
+
call_transfer: [],
|
|
86
|
+
terminate_call: [],
|
|
87
|
+
webhook: [],
|
|
88
|
+
gcal_appointment_schedule: ["start", "timezone"],
|
|
89
|
+
gcal_check_busy_time: ["start", "end"],
|
|
90
|
+
gcal_get_free_slots: ["start", "end"],
|
|
91
|
+
gcal_fetch_appointments: [],
|
|
92
|
+
gcal_cancel_appointment: ["event_id"],
|
|
93
|
+
gcal_update_appointment: ["event_id", "start", "end"],
|
|
94
|
+
set_lead_timezone: ["timezone"],
|
|
95
|
+
text: [],
|
|
96
|
+
email: [],
|
|
97
|
+
data_extraction: [],
|
|
98
|
+
set_lead_email: ["email"],
|
|
99
|
+
set_lead_names: ["first_name", "last_name"],
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Apply data_extraction special handling — replaces params with action.settings.fields.
|
|
103
|
+
*/
|
|
104
|
+
function applyDataExtractionDefinitions(tool, action) {
|
|
105
|
+
if (action.type !== "data_extraction")
|
|
106
|
+
return;
|
|
107
|
+
const fields = action.settings?.fields;
|
|
108
|
+
if (!fields?.length)
|
|
109
|
+
return;
|
|
110
|
+
const properties = {};
|
|
111
|
+
const required = [];
|
|
112
|
+
for (const field of fields) {
|
|
113
|
+
const param = {
|
|
114
|
+
type: field.type,
|
|
115
|
+
description: field.description,
|
|
116
|
+
};
|
|
117
|
+
if (Array.isArray(field.enum) && field.enum.length > 0) {
|
|
118
|
+
param.enum = field.enum;
|
|
119
|
+
}
|
|
120
|
+
properties[field.name] = param;
|
|
121
|
+
if (field.required)
|
|
122
|
+
required.push(field.name);
|
|
123
|
+
}
|
|
124
|
+
tool.function.parameters.properties = properties;
|
|
125
|
+
if (required.length > 0) {
|
|
126
|
+
tool.function.parameters.required = required;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
delete tool.function.parameters.required;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Apply webhook/http_request special handling — replaces params with action.settings.ai_params.
|
|
134
|
+
*/
|
|
135
|
+
function applyDynamicParamDefinitions(tool, action) {
|
|
136
|
+
if (action.type !== "webhook" && action.type !== "http_request")
|
|
137
|
+
return;
|
|
138
|
+
const aiParams = action.settings?.ai_params;
|
|
139
|
+
if (!aiParams?.length)
|
|
140
|
+
return;
|
|
141
|
+
const properties = {};
|
|
142
|
+
const required = [];
|
|
143
|
+
for (const param of aiParams) {
|
|
144
|
+
const toolParam = {
|
|
145
|
+
type: param.type,
|
|
146
|
+
description: param.description,
|
|
147
|
+
};
|
|
148
|
+
if (Array.isArray(param.enum) && param.enum.length > 0) {
|
|
149
|
+
toolParam.enum = param.enum;
|
|
150
|
+
}
|
|
151
|
+
properties[param.name] = toolParam;
|
|
152
|
+
if (param.required !== false)
|
|
153
|
+
required.push(param.name);
|
|
154
|
+
}
|
|
155
|
+
tool.function.parameters.properties = properties;
|
|
156
|
+
if (required.length > 0) {
|
|
157
|
+
tool.function.parameters.required = required;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
delete tool.function.parameters.required;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Filters actions by execution_type then builds tool definitions.
|
|
165
|
+
* Default execution_type is "live" (matching eqho-ai behavior).
|
|
166
|
+
*/
|
|
167
|
+
export function buildToolsByExecutionType(actions, executionType) {
|
|
168
|
+
const filtered = actions.filter((a) => (a.execution_type ?? "live") === executionType);
|
|
169
|
+
return buildTools(filtered);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Converts Eqho actions to OpenAI tool definitions.
|
|
173
|
+
* Mirrors eqho-ai's create_tools_from_all_actions().
|
|
174
|
+
*/
|
|
175
|
+
export function buildTools(actions) {
|
|
176
|
+
const sorted = [...actions].sort((a, b) => (a.execution_order || 0) - (b.execution_order || 0));
|
|
177
|
+
const tools = [];
|
|
178
|
+
for (const action of sorted) {
|
|
179
|
+
const properties = getActionToolParameters(action.type);
|
|
180
|
+
const required = ACTION_REQUIRED_PARAMS[action.type] || [];
|
|
181
|
+
const renderedDescription = renderTemplate(action.instructions, {
|
|
182
|
+
action: {
|
|
183
|
+
display_name: action.name || action.slug,
|
|
184
|
+
function_name: action.slug,
|
|
185
|
+
slug: action.slug,
|
|
186
|
+
name: action.name || action.slug,
|
|
187
|
+
type: action.type,
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
const tool = {
|
|
191
|
+
type: "function",
|
|
192
|
+
function: {
|
|
193
|
+
name: action.slug,
|
|
194
|
+
description: renderedDescription,
|
|
195
|
+
parameters: {
|
|
196
|
+
type: "object",
|
|
197
|
+
properties: { ...properties },
|
|
198
|
+
...(required.length > 0 ? { required } : {}),
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
applyDataExtractionDefinitions(tool, action);
|
|
203
|
+
applyDynamicParamDefinitions(tool, action);
|
|
204
|
+
tools.push(tool);
|
|
205
|
+
}
|
|
206
|
+
return tools;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=tools-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-builder.js","sourceRoot":"","sources":["../../src/core/tools-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { EqhoClient, EqhoApiError } from "./core/eqho-client.js";
|
|
2
|
+
export { assemblePrompt } from "./core/prompt-assembler.js";
|
|
3
|
+
export { buildTools, buildToolsByExecutionType } from "./core/tools-builder.js";
|
|
4
|
+
export { renderTemplate, validateTemplate } from "./core/template-engine.js";
|
|
5
|
+
export { generateConfig } from "./core/config-generator.js";
|
|
6
|
+
export { fetchFullAgent, fetchCampaignAgents } from "./core/agent-fetcher.js";
|
|
7
|
+
export { buildDispositionTool, buildDispositionPrompt, generateDispositionEvalConfig, } from "./core/disposition-builder.js";
|
|
8
|
+
export { generatePostcallEvalConfig } from "./core/postcall-simulator.js";
|
|
9
|
+
export { callsToTestCases, generateConversationTestsYaml, } from "./core/conversation-loader.js";
|
|
10
|
+
export { loadDataset, datasetToTests, extractMentionPaths, generateCsvTemplate, } from "./core/dataset-loader.js";
|
|
11
|
+
export { mapAgentToProvider, buildProviderSet } from "./core/provider-mapper.js";
|
|
12
|
+
export { generateActionEvalConfig } from "./core/action-eval-builder.js";
|
|
13
|
+
export { extractGreetings, buildGreetingTests } from "./core/greeting-builder.js";
|
|
14
|
+
export { getCached, setCache, clearCache, cacheStats } from "./core/api-cache.js";
|
|
15
|
+
export { runPromptfoo, resolvePromptfoo, getPromptfooVersion, isPromptfooInstalled, } from "./core/promptfoo-runner.js";
|
|
16
|
+
export type * from "./types/eqho.js";
|
|
17
|
+
export type * from "./types/config.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { EqhoClient, EqhoApiError } from "./core/eqho-client.js";
|
|
2
|
+
export { assemblePrompt } from "./core/prompt-assembler.js";
|
|
3
|
+
export { buildTools, buildToolsByExecutionType } from "./core/tools-builder.js";
|
|
4
|
+
export { renderTemplate, validateTemplate } from "./core/template-engine.js";
|
|
5
|
+
export { generateConfig } from "./core/config-generator.js";
|
|
6
|
+
export { fetchFullAgent, fetchCampaignAgents } from "./core/agent-fetcher.js";
|
|
7
|
+
export { buildDispositionTool, buildDispositionPrompt, generateDispositionEvalConfig, } from "./core/disposition-builder.js";
|
|
8
|
+
export { generatePostcallEvalConfig } from "./core/postcall-simulator.js";
|
|
9
|
+
export { callsToTestCases, generateConversationTestsYaml, } from "./core/conversation-loader.js";
|
|
10
|
+
export { loadDataset, datasetToTests, extractMentionPaths, generateCsvTemplate, } from "./core/dataset-loader.js";
|
|
11
|
+
export { mapAgentToProvider, buildProviderSet } from "./core/provider-mapper.js";
|
|
12
|
+
export { generateActionEvalConfig } from "./core/action-eval-builder.js";
|
|
13
|
+
export { extractGreetings, buildGreetingTests } from "./core/greeting-builder.js";
|
|
14
|
+
export { getCached, setCache, clearCache, cacheStats } from "./core/api-cache.js";
|
|
15
|
+
export { runPromptfoo, resolvePromptfoo, getPromptfooVersion, isPromptfooInstalled, } from "./core/promptfoo-runner.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC"}
|