promptfoo 0.119.13 → 0.119.14
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/dist/package.json +28 -26
- package/dist/src/app/assets/index-eJ2lMe94.js +51 -0
- package/dist/src/app/assets/{source-map-support-Bnh0UQ2S.js → source-map-support-1v4oeb7P.js} +1 -1
- package/dist/src/app/assets/sync-CtLQRuC1.js +1 -0
- package/dist/src/app/assets/{vendor-charts-T60Uk0Z3.js → vendor-charts-DnVv66VV.js} +1 -1
- package/dist/src/app/assets/{vendor-markdown-DLig-KJh.js → vendor-markdown-DCpQIyMA.js} +1 -1
- package/dist/src/app/assets/{vendor-mui-core-5BLaiG3c.js → vendor-mui-core-Boqnpf9f.js} +1 -1
- package/dist/src/app/assets/{vendor-mui-icons-fn39Fu2e.js → vendor-mui-icons-B8MqoVbj.js} +1 -1
- package/dist/src/app/assets/vendor-mui-x-CGSS6QHF.js +45 -0
- package/dist/src/app/assets/{vendor-utils-DYBMEuwX.js → vendor-utils-DdfHIEy8.js} +1 -1
- package/dist/src/app/index.html +7 -7
- package/dist/src/assertions/guardrails.d.ts +1 -1
- package/dist/src/assertions/guardrails.js +18 -9
- package/dist/src/assertions/index.d.ts +1 -1
- package/dist/src/assertions/index.js +9 -3
- package/dist/src/assertions/searchRubric.d.ts +3 -0
- package/dist/src/assertions/searchRubric.js +18 -0
- package/dist/src/commands/eval.js +1 -1
- package/dist/src/commands/modelScan.d.ts +7 -1
- package/dist/src/commands/modelScan.js +121 -59
- package/dist/src/database/index.d.ts +6 -0
- package/dist/src/database/index.js +11 -0
- package/dist/src/database/tables.d.ts +46 -24
- package/dist/src/envars.d.ts +17 -0
- package/dist/src/generated/constants.js +1 -1
- package/dist/src/logger.d.ts +5 -0
- package/dist/src/logger.js +28 -0
- package/dist/src/main.js +17 -6
- package/dist/src/matchers.d.ts +1 -0
- package/dist/src/matchers.js +80 -0
- package/dist/src/models/eval.d.ts +2 -1
- package/dist/src/models/eval.js +44 -2
- package/dist/src/prompts/grading.d.ts +1 -0
- package/dist/src/prompts/grading.js +26 -1
- package/dist/src/prompts/index.d.ts +1 -0
- package/dist/src/prompts/index.js +4 -1
- package/dist/src/providers/adaline.gateway.js +2 -2
- package/dist/src/providers/anthropic/defaults.d.ts +1 -1
- package/dist/src/providers/anthropic/defaults.js +15 -0
- package/dist/src/providers/azure/chat.d.ts +3 -1
- package/dist/src/providers/azure/chat.js +16 -3
- package/dist/src/providers/azure/defaults.js +660 -141
- package/dist/src/providers/azure/responses.d.ts +5 -0
- package/dist/src/providers/azure/responses.js +33 -4
- package/dist/src/providers/azure/types.d.ts +4 -0
- package/dist/src/providers/bedrock/agents.d.ts +1 -1
- package/dist/src/providers/bedrock/agents.js +2 -2
- package/dist/src/providers/bedrock/base.d.ts +40 -0
- package/dist/src/providers/bedrock/base.js +171 -0
- package/dist/src/providers/bedrock/converse.d.ts +146 -0
- package/dist/src/providers/bedrock/converse.js +1044 -0
- package/dist/src/providers/bedrock/index.d.ts +1 -34
- package/dist/src/providers/bedrock/index.js +4 -159
- package/dist/src/providers/bedrock/knowledgeBase.d.ts +1 -1
- package/dist/src/providers/bedrock/knowledgeBase.js +2 -2
- package/dist/src/providers/bedrock/nova-sonic.d.ts +2 -1
- package/dist/src/providers/bedrock/nova-sonic.js +2 -2
- package/dist/src/providers/claude-agent-sdk.d.ts +58 -1
- package/dist/src/providers/claude-agent-sdk.js +22 -1
- package/dist/src/providers/defaults.js +4 -0
- package/dist/src/providers/github/defaults.js +6 -6
- package/dist/src/providers/google/types.d.ts +25 -0
- package/dist/src/providers/google/util.d.ts +2 -0
- package/dist/src/providers/google/vertex.js +78 -22
- package/dist/src/providers/{groq.d.ts → groq/chat.d.ts} +26 -20
- package/dist/src/providers/groq/chat.js +79 -0
- package/dist/src/providers/groq/index.d.ts +5 -0
- package/dist/src/providers/groq/index.js +24 -0
- package/dist/src/providers/groq/responses.d.ts +106 -0
- package/dist/src/providers/groq/responses.js +64 -0
- package/dist/src/providers/groq/types.d.ts +44 -0
- package/dist/src/providers/groq/types.js +3 -0
- package/dist/src/providers/groq/util.d.ts +15 -0
- package/dist/src/providers/groq/util.js +28 -0
- package/dist/src/providers/mcp/client.d.ts +8 -0
- package/dist/src/providers/mcp/client.js +60 -10
- package/dist/src/providers/mcp/types.d.ts +21 -0
- package/dist/src/providers/openai/chatkit-pool.d.ts +114 -0
- package/dist/src/providers/openai/chatkit-pool.js +548 -0
- package/dist/src/providers/openai/chatkit-types.d.ts +73 -0
- package/dist/src/providers/openai/chatkit-types.js +3 -0
- package/dist/src/providers/openai/chatkit.d.ts +76 -0
- package/dist/src/providers/openai/chatkit.js +879 -0
- package/dist/src/providers/openai/codex-sdk.d.ts +109 -0
- package/dist/src/providers/openai/codex-sdk.js +346 -0
- package/dist/src/providers/openai/defaults.d.ts +2 -0
- package/dist/src/providers/openai/defaults.js +10 -4
- package/dist/src/providers/registry.js +48 -9
- package/dist/src/providers/responses/types.d.ts +1 -1
- package/dist/src/providers/sagemaker.d.ts +2 -2
- package/dist/src/providers/webSearchUtils.d.ts +17 -0
- package/dist/src/providers/webSearchUtils.js +169 -0
- package/dist/src/providers/xai/chat.d.ts +61 -0
- package/dist/src/providers/xai/chat.js +68 -3
- package/dist/src/providers/xai/responses.d.ts +189 -0
- package/dist/src/providers/xai/responses.js +268 -0
- package/dist/src/redteam/constants/plugins.d.ts +1 -1
- package/dist/src/redteam/constants/plugins.js +1 -1
- package/dist/src/redteam/constants/strategies.d.ts +1 -1
- package/dist/src/redteam/constants/strategies.js +1 -0
- package/dist/src/redteam/plugins/vlguard.d.ts +53 -4
- package/dist/src/redteam/plugins/vlguard.js +362 -46
- package/dist/src/redteam/providers/constants.d.ts +2 -2
- package/dist/src/redteam/providers/constants.js +2 -2
- package/dist/src/redteam/providers/crescendo/index.d.ts +1 -1
- package/dist/src/redteam/providers/crescendo/index.js +5 -3
- package/dist/src/redteam/providers/hydra/index.js +1 -1
- package/dist/src/server/routes/modelAudit.js +4 -4
- package/dist/src/share.js +4 -2
- package/dist/src/telemetry.js +44 -8
- package/dist/src/types/env.d.ts +3 -0
- package/dist/src/types/env.js +1 -0
- package/dist/src/types/index.d.ts +896 -615
- package/dist/src/types/index.js +1 -0
- package/dist/src/types/providers.d.ts +1 -0
- package/dist/src/types/tracing.d.ts +3 -0
- package/dist/src/util/database.d.ts +6 -4
- package/dist/src/util/file.js +6 -4
- package/dist/src/util/modelAuditCliParser.d.ts +4 -4
- package/dist/src/util/xlsx.js +52 -26
- package/dist/src/validators/providers.d.ts +142 -122
- package/dist/src/validators/providers.js +4 -6
- package/dist/src/validators/redteam.d.ts +36 -28
- package/dist/src/validators/redteam.js +9 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -26
- package/dist/drizzle/CLAUDE.md +0 -65
- package/dist/src/app/assets/index-DifT6VGT.js +0 -51
- package/dist/src/app/assets/sync-Oo-W_Rbj.js +0 -1
- package/dist/src/app/assets/vendor-mui-x-C2xF-yiO.js +0 -45
- package/dist/src/providers/groq.js +0 -48
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { ApiProvider, CallApiContextParams, CallApiOptionsParams, ProviderResponse } from '../../types/index';
|
|
2
|
+
import type { EnvOverrides } from '../../types/env';
|
|
3
|
+
/**
|
|
4
|
+
* OpenAI Codex SDK Provider
|
|
5
|
+
*
|
|
6
|
+
* This provider requires the @openai/codex-sdk package, which may have a
|
|
7
|
+
* proprietary license and is not installed by default. Users must install it separately:
|
|
8
|
+
* npm install @openai/codex-sdk
|
|
9
|
+
*
|
|
10
|
+
* Key features:
|
|
11
|
+
* - Thread-based conversations with persistence in ~/.codex/sessions
|
|
12
|
+
* - Native JSON schema output with Zod support
|
|
13
|
+
* - Git repository requirement for safety (can be disabled)
|
|
14
|
+
* - Custom binary path override support
|
|
15
|
+
* - Streaming events for real-time progress
|
|
16
|
+
*
|
|
17
|
+
* Thread Management:
|
|
18
|
+
* - No persist_threads: Creates ephemeral thread per call (default)
|
|
19
|
+
* - With persist_threads: Pools threads by cache key for reuse
|
|
20
|
+
* - With thread_id: Resumes specific thread from ~/.codex/sessions
|
|
21
|
+
*/
|
|
22
|
+
export interface OpenAICodexSDKConfig {
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Working directory for Codex to operate in
|
|
26
|
+
* Defaults to process.cwd()
|
|
27
|
+
*/
|
|
28
|
+
working_dir?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Additional directories the agent can access beyond the working directory.
|
|
31
|
+
* Maps to --add-dir flag in Codex CLI.
|
|
32
|
+
*/
|
|
33
|
+
additional_directories?: string[];
|
|
34
|
+
/**
|
|
35
|
+
* Skip Git repository check (Codex requires Git by default)
|
|
36
|
+
*/
|
|
37
|
+
skip_git_repo_check?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Path to custom codex binary
|
|
40
|
+
*/
|
|
41
|
+
codex_path_override?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Model to use (e.g., 'gpt-5.1-codex', 'gpt-4o', 'o3-mini')
|
|
44
|
+
*/
|
|
45
|
+
model?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Fallback model if primary model fails
|
|
48
|
+
*/
|
|
49
|
+
fallback_model?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Maximum tokens for response
|
|
52
|
+
*/
|
|
53
|
+
max_tokens?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Maximum tokens for tool output (default: 10000)
|
|
56
|
+
* Controls how much output from tool calls is included in the context.
|
|
57
|
+
*/
|
|
58
|
+
tool_output_token_limit?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Thread management
|
|
61
|
+
*/
|
|
62
|
+
thread_id?: string;
|
|
63
|
+
persist_threads?: boolean;
|
|
64
|
+
thread_pool_size?: number;
|
|
65
|
+
/**
|
|
66
|
+
* Output schema for structured JSON responses
|
|
67
|
+
* Supports plain JSON schema or Zod schemas converted with zod-to-json-schema
|
|
68
|
+
*/
|
|
69
|
+
output_schema?: Record<string, any>;
|
|
70
|
+
/**
|
|
71
|
+
* Environment variables to pass to Codex CLI
|
|
72
|
+
* By default inherits Node.js process.env
|
|
73
|
+
*/
|
|
74
|
+
cli_env?: Record<string, string>;
|
|
75
|
+
/**
|
|
76
|
+
* Custom system instructions
|
|
77
|
+
*/
|
|
78
|
+
system_prompt?: string;
|
|
79
|
+
/**
|
|
80
|
+
* Enable streaming events (default: false for simplicity)
|
|
81
|
+
*/
|
|
82
|
+
enable_streaming?: boolean;
|
|
83
|
+
}
|
|
84
|
+
export declare class OpenAICodexSDKProvider implements ApiProvider {
|
|
85
|
+
static OPENAI_MODELS: string[];
|
|
86
|
+
config: OpenAICodexSDKConfig;
|
|
87
|
+
env?: EnvOverrides;
|
|
88
|
+
apiKey?: string;
|
|
89
|
+
private providerId;
|
|
90
|
+
private codexModule?;
|
|
91
|
+
private codexInstance?;
|
|
92
|
+
private threads;
|
|
93
|
+
constructor(options?: {
|
|
94
|
+
id?: string;
|
|
95
|
+
config?: OpenAICodexSDKConfig;
|
|
96
|
+
env?: EnvOverrides;
|
|
97
|
+
});
|
|
98
|
+
id(): string;
|
|
99
|
+
getApiKey(): string | undefined;
|
|
100
|
+
toString(): string;
|
|
101
|
+
cleanup(): Promise<void>;
|
|
102
|
+
private prepareEnvironment;
|
|
103
|
+
private validateWorkingDirectory;
|
|
104
|
+
private getOrCreateThread;
|
|
105
|
+
private runStreaming;
|
|
106
|
+
private generateCacheKey;
|
|
107
|
+
callApi(prompt: string, context?: CallApiContextParams, callOptions?: CallApiOptionsParams): Promise<ProviderResponse>;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=codex-sdk.d.ts.map
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OpenAICodexSDKProvider = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const dedent_1 = __importDefault(require("dedent"));
|
|
11
|
+
const cliState_1 = __importDefault(require("../../cliState"));
|
|
12
|
+
const envars_1 = require("../../envars");
|
|
13
|
+
const esm_1 = require("../../esm");
|
|
14
|
+
const logger_1 = __importDefault(require("../../logger"));
|
|
15
|
+
/**
|
|
16
|
+
* Helper to load the OpenAI Codex SDK ESM module
|
|
17
|
+
* Uses importModule utility which handles ESM loading in CommonJS environments
|
|
18
|
+
*/
|
|
19
|
+
async function loadCodexSDK() {
|
|
20
|
+
try {
|
|
21
|
+
// Resolve the package path, then use importModule to load it
|
|
22
|
+
// The SDK is ESM-only, so we need the importModule utility which uses dynamic-import.cjs
|
|
23
|
+
const basePath = cliState_1.default.basePath && path_1.default.isAbsolute(cliState_1.default.basePath) ? cliState_1.default.basePath : process.cwd();
|
|
24
|
+
// The package only exports ESM, so we construct the direct path
|
|
25
|
+
// The SDK is installed in node_modules/@openai/codex-sdk/dist/index.js
|
|
26
|
+
const modulePath = path_1.default.join(basePath, 'node_modules', '@openai', 'codex-sdk', 'dist', 'index.js');
|
|
27
|
+
return await (0, esm_1.importModule)(modulePath);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
logger_1.default.error(`Failed to load OpenAI Codex SDK: ${err}`);
|
|
31
|
+
if (err.stack) {
|
|
32
|
+
logger_1.default.error(err.stack);
|
|
33
|
+
}
|
|
34
|
+
throw new Error((0, dedent_1.default) `The @openai/codex-sdk package is required but not installed.
|
|
35
|
+
|
|
36
|
+
This package may have a proprietary license and is not installed by default.
|
|
37
|
+
|
|
38
|
+
To use the OpenAI Codex SDK provider, install it with:
|
|
39
|
+
npm install @openai/codex-sdk
|
|
40
|
+
|
|
41
|
+
Requires Node.js 18+.
|
|
42
|
+
|
|
43
|
+
For more information, see: https://www.promptfoo.dev/docs/providers/openai-codex-sdk/`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Pricing per 1M tokens (as of November 2025)
|
|
47
|
+
// See: https://openai.com/pricing
|
|
48
|
+
const CODEX_MODEL_PRICING = {
|
|
49
|
+
'gpt-5.1-codex': { input: 2.0, output: 8.0 },
|
|
50
|
+
'gpt-5.1-codex-max': { input: 3.0, output: 12.0 },
|
|
51
|
+
'gpt-5.1-codex-mini': { input: 0.5, output: 2.0 },
|
|
52
|
+
'gpt-5-codex': { input: 2.0, output: 8.0 },
|
|
53
|
+
'gpt-5-codex-mini': { input: 0.5, output: 2.0 },
|
|
54
|
+
'gpt-5': { input: 2.0, output: 8.0 },
|
|
55
|
+
'gpt-4o': { input: 2.5, output: 10.0 },
|
|
56
|
+
'gpt-4o-mini': { input: 0.15, output: 0.6 },
|
|
57
|
+
'gpt-4-turbo': { input: 10.0, output: 30.0 },
|
|
58
|
+
'gpt-4': { input: 30.0, output: 60.0 },
|
|
59
|
+
'o3-mini': { input: 1.1, output: 4.4 },
|
|
60
|
+
o1: { input: 15.0, output: 60.0 },
|
|
61
|
+
'o1-mini': { input: 3.0, output: 12.0 },
|
|
62
|
+
};
|
|
63
|
+
class OpenAICodexSDKProvider {
|
|
64
|
+
constructor(options = {}) {
|
|
65
|
+
this.providerId = 'openai:codex-sdk';
|
|
66
|
+
this.threads = new Map();
|
|
67
|
+
const { config, env, id } = options;
|
|
68
|
+
this.config = config ?? {};
|
|
69
|
+
this.env = env;
|
|
70
|
+
this.apiKey = this.getApiKey();
|
|
71
|
+
this.providerId = id ?? this.providerId;
|
|
72
|
+
if (this.config.model && !OpenAICodexSDKProvider.OPENAI_MODELS.includes(this.config.model)) {
|
|
73
|
+
logger_1.default.warn(`Using unknown model for OpenAI Codex SDK: ${this.config.model}`);
|
|
74
|
+
}
|
|
75
|
+
if (this.config.fallback_model &&
|
|
76
|
+
!OpenAICodexSDKProvider.OPENAI_MODELS.includes(this.config.fallback_model)) {
|
|
77
|
+
logger_1.default.warn(`Using unknown model for OpenAI Codex SDK fallback: ${this.config.fallback_model}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
id() {
|
|
81
|
+
return this.providerId;
|
|
82
|
+
}
|
|
83
|
+
getApiKey() {
|
|
84
|
+
return (this.config?.apiKey ||
|
|
85
|
+
this.env?.OPENAI_API_KEY ||
|
|
86
|
+
this.env?.CODEX_API_KEY ||
|
|
87
|
+
(0, envars_1.getEnvString)('OPENAI_API_KEY') ||
|
|
88
|
+
(0, envars_1.getEnvString)('CODEX_API_KEY'));
|
|
89
|
+
}
|
|
90
|
+
toString() {
|
|
91
|
+
return '[OpenAI Codex SDK Provider]';
|
|
92
|
+
}
|
|
93
|
+
async cleanup() {
|
|
94
|
+
this.threads.clear();
|
|
95
|
+
}
|
|
96
|
+
prepareEnvironment(config) {
|
|
97
|
+
const env = config.cli_env
|
|
98
|
+
? { ...config.cli_env }
|
|
99
|
+
: { ...process.env };
|
|
100
|
+
// Sort keys for stable cache key generation
|
|
101
|
+
const sortedEnv = {};
|
|
102
|
+
for (const key of Object.keys(env).sort()) {
|
|
103
|
+
if (env[key] !== undefined) {
|
|
104
|
+
sortedEnv[key] = env[key];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Inject API key
|
|
108
|
+
if (this.apiKey) {
|
|
109
|
+
sortedEnv.OPENAI_API_KEY = this.apiKey;
|
|
110
|
+
sortedEnv.CODEX_API_KEY = this.apiKey;
|
|
111
|
+
}
|
|
112
|
+
// Inject env overrides
|
|
113
|
+
if (this.env) {
|
|
114
|
+
for (const key of Object.keys(this.env).sort()) {
|
|
115
|
+
const value = this.env[key];
|
|
116
|
+
if (value !== undefined) {
|
|
117
|
+
sortedEnv[key] = value;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return sortedEnv;
|
|
122
|
+
}
|
|
123
|
+
validateWorkingDirectory(workingDir, skipGitCheck = false) {
|
|
124
|
+
let stats;
|
|
125
|
+
try {
|
|
126
|
+
stats = fs_1.default.statSync(workingDir);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
throw new Error(`Working directory ${workingDir} does not exist or isn't accessible: ${err.message}`);
|
|
130
|
+
}
|
|
131
|
+
if (!stats.isDirectory()) {
|
|
132
|
+
throw new Error(`Working directory ${workingDir} is not a directory`);
|
|
133
|
+
}
|
|
134
|
+
if (!skipGitCheck) {
|
|
135
|
+
const gitDir = path_1.default.join(workingDir, '.git');
|
|
136
|
+
if (!fs_1.default.existsSync(gitDir)) {
|
|
137
|
+
throw new Error((0, dedent_1.default) `Working directory ${workingDir} is not a Git repository.
|
|
138
|
+
|
|
139
|
+
Codex requires a Git repository by default to prevent unrecoverable errors.
|
|
140
|
+
|
|
141
|
+
To bypass this check, set skip_git_repo_check: true in your provider config.`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async getOrCreateThread(config, cacheKey) {
|
|
146
|
+
// Resume specific thread
|
|
147
|
+
if (config.thread_id) {
|
|
148
|
+
const cached = this.threads.get(config.thread_id);
|
|
149
|
+
if (cached) {
|
|
150
|
+
return cached;
|
|
151
|
+
}
|
|
152
|
+
const thread = this.codexInstance.resumeThread(config.thread_id);
|
|
153
|
+
if (config.persist_threads) {
|
|
154
|
+
this.threads.set(config.thread_id, thread);
|
|
155
|
+
}
|
|
156
|
+
return thread;
|
|
157
|
+
}
|
|
158
|
+
// Use pooled thread
|
|
159
|
+
if (config.persist_threads && cacheKey) {
|
|
160
|
+
const cached = this.threads.get(cacheKey);
|
|
161
|
+
if (cached) {
|
|
162
|
+
return cached;
|
|
163
|
+
}
|
|
164
|
+
// Enforce pool size limit
|
|
165
|
+
const poolSize = config.thread_pool_size ?? 1;
|
|
166
|
+
if (this.threads.size >= poolSize) {
|
|
167
|
+
const oldestKey = this.threads.keys().next().value;
|
|
168
|
+
if (oldestKey) {
|
|
169
|
+
this.threads.delete(oldestKey);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Create new thread
|
|
174
|
+
const thread = this.codexInstance.startThread({
|
|
175
|
+
workingDirectory: config.working_dir,
|
|
176
|
+
skipGitRepoCheck: config.skip_git_repo_check ?? false,
|
|
177
|
+
...(config.model ? { model: config.model } : {}),
|
|
178
|
+
...(config.additional_directories?.length
|
|
179
|
+
? { additionalDirectories: config.additional_directories }
|
|
180
|
+
: {}),
|
|
181
|
+
});
|
|
182
|
+
if (config.persist_threads && cacheKey) {
|
|
183
|
+
this.threads.set(cacheKey, thread);
|
|
184
|
+
}
|
|
185
|
+
return thread;
|
|
186
|
+
}
|
|
187
|
+
async runStreaming(thread, prompt, runOptions, callOptions) {
|
|
188
|
+
const { events } = await thread.runStreamed(prompt, runOptions);
|
|
189
|
+
const items = [];
|
|
190
|
+
let usage = undefined;
|
|
191
|
+
for await (const event of events) {
|
|
192
|
+
// Check abort signal
|
|
193
|
+
if (callOptions?.abortSignal?.aborted) {
|
|
194
|
+
throw new Error('AbortError');
|
|
195
|
+
}
|
|
196
|
+
switch (event.type) {
|
|
197
|
+
case 'item.completed':
|
|
198
|
+
items.push(event.item);
|
|
199
|
+
logger_1.default.debug('Codex item completed', { item: event.item });
|
|
200
|
+
break;
|
|
201
|
+
case 'turn.completed':
|
|
202
|
+
usage = event.usage;
|
|
203
|
+
logger_1.default.debug('Codex turn completed', { usage });
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Extract text from agent_message items for final response
|
|
208
|
+
const agentMessages = items.filter((i) => i.type === 'agent_message');
|
|
209
|
+
const finalResponse = agentMessages.length > 0 ? agentMessages.map((i) => i.text).join('\n') : '';
|
|
210
|
+
return {
|
|
211
|
+
finalResponse,
|
|
212
|
+
items,
|
|
213
|
+
usage,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
generateCacheKey(config, prompt) {
|
|
217
|
+
const keyData = {
|
|
218
|
+
working_dir: config.working_dir,
|
|
219
|
+
additional_directories: config.additional_directories,
|
|
220
|
+
model: config.model,
|
|
221
|
+
output_schema: config.output_schema,
|
|
222
|
+
tool_output_token_limit: config.tool_output_token_limit,
|
|
223
|
+
prompt,
|
|
224
|
+
};
|
|
225
|
+
const hash = crypto_1.default.createHash('sha256').update(JSON.stringify(keyData)).digest('hex');
|
|
226
|
+
return `openai:codex-sdk:${hash}`;
|
|
227
|
+
}
|
|
228
|
+
async callApi(prompt, context, callOptions) {
|
|
229
|
+
// Merge configs (prompt config takes precedence)
|
|
230
|
+
const config = {
|
|
231
|
+
...this.config,
|
|
232
|
+
...context?.prompt?.config,
|
|
233
|
+
};
|
|
234
|
+
// Prepare environment
|
|
235
|
+
const env = this.prepareEnvironment(config);
|
|
236
|
+
if (!this.apiKey && !env.OPENAI_API_KEY && !env.CODEX_API_KEY) {
|
|
237
|
+
throw new Error('OpenAI API key is not set. Set OPENAI_API_KEY or CODEX_API_KEY environment variable or add "apiKey" to provider config.');
|
|
238
|
+
}
|
|
239
|
+
// Validate working directory
|
|
240
|
+
if (config.working_dir) {
|
|
241
|
+
this.validateWorkingDirectory(config.working_dir, config.skip_git_repo_check);
|
|
242
|
+
}
|
|
243
|
+
// Check abort signal
|
|
244
|
+
if (callOptions?.abortSignal?.aborted) {
|
|
245
|
+
return { error: 'OpenAI Codex SDK call aborted before it started' };
|
|
246
|
+
}
|
|
247
|
+
// Load SDK module (lazy)
|
|
248
|
+
if (!this.codexModule) {
|
|
249
|
+
this.codexModule = await loadCodexSDK();
|
|
250
|
+
}
|
|
251
|
+
// Initialize Codex instance (lazy)
|
|
252
|
+
if (!this.codexInstance) {
|
|
253
|
+
this.codexInstance = new this.codexModule.Codex({
|
|
254
|
+
env,
|
|
255
|
+
...(config.codex_path_override ? { codexPathOverride: config.codex_path_override } : {}),
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
// Get or create thread
|
|
259
|
+
const cacheKey = this.generateCacheKey(config, prompt);
|
|
260
|
+
const thread = await this.getOrCreateThread(config, cacheKey);
|
|
261
|
+
// Prepare run options
|
|
262
|
+
const runOptions = {};
|
|
263
|
+
if (config.output_schema) {
|
|
264
|
+
runOptions.outputSchema = config.output_schema;
|
|
265
|
+
}
|
|
266
|
+
if (config.tool_output_token_limit !== undefined) {
|
|
267
|
+
runOptions.toolOutputTokenLimit = config.tool_output_token_limit;
|
|
268
|
+
}
|
|
269
|
+
// Execute turn
|
|
270
|
+
try {
|
|
271
|
+
const turn = config.enable_streaming
|
|
272
|
+
? await this.runStreaming(thread, prompt, runOptions, callOptions)
|
|
273
|
+
: await thread.run(prompt, runOptions);
|
|
274
|
+
// Extract response
|
|
275
|
+
const output = turn.finalResponse || '';
|
|
276
|
+
const raw = JSON.stringify(turn);
|
|
277
|
+
const tokenUsage = turn.usage
|
|
278
|
+
? {
|
|
279
|
+
prompt: turn.usage.input_tokens + (turn.usage.cached_input_tokens || 0),
|
|
280
|
+
completion: turn.usage.output_tokens,
|
|
281
|
+
total: turn.usage.input_tokens +
|
|
282
|
+
(turn.usage.cached_input_tokens || 0) +
|
|
283
|
+
turn.usage.output_tokens,
|
|
284
|
+
}
|
|
285
|
+
: undefined;
|
|
286
|
+
// Calculate cost from usage
|
|
287
|
+
let cost = 0;
|
|
288
|
+
if (tokenUsage && config.model) {
|
|
289
|
+
const pricing = CODEX_MODEL_PRICING[config.model];
|
|
290
|
+
if (pricing) {
|
|
291
|
+
// Pricing is per 1M tokens
|
|
292
|
+
const inputCost = (tokenUsage.prompt || 0) * (pricing.input / 1000000);
|
|
293
|
+
const outputCost = (tokenUsage.completion || 0) * (pricing.output / 1000000);
|
|
294
|
+
cost = inputCost + outputCost;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
logger_1.default.debug('OpenAI Codex SDK response', { output, usage: turn.usage });
|
|
298
|
+
return {
|
|
299
|
+
output,
|
|
300
|
+
tokenUsage,
|
|
301
|
+
cost,
|
|
302
|
+
raw,
|
|
303
|
+
sessionId: thread.id || 'unknown',
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
const isAbort = error?.name === 'AbortError' || callOptions?.abortSignal?.aborted;
|
|
308
|
+
if (isAbort) {
|
|
309
|
+
logger_1.default.warn('OpenAI Codex SDK call aborted');
|
|
310
|
+
return { error: 'OpenAI Codex SDK call aborted' };
|
|
311
|
+
}
|
|
312
|
+
logger_1.default.error('Error calling OpenAI Codex SDK', { error: error.message });
|
|
313
|
+
return {
|
|
314
|
+
error: `Error calling OpenAI Codex SDK: ${error.message}`,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
finally {
|
|
318
|
+
// Clean up ephemeral threads
|
|
319
|
+
if (!config.persist_threads && !config.thread_id && cacheKey) {
|
|
320
|
+
this.threads.delete(cacheKey);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
exports.OpenAICodexSDKProvider = OpenAICodexSDKProvider;
|
|
326
|
+
OpenAICodexSDKProvider.OPENAI_MODELS = [
|
|
327
|
+
// GPT-5.1 Codex models (recommended for code tasks)
|
|
328
|
+
'gpt-5.1-codex',
|
|
329
|
+
'gpt-5.1-codex-max',
|
|
330
|
+
'gpt-5.1-codex-mini',
|
|
331
|
+
// GPT-5 Codex models
|
|
332
|
+
'gpt-5-codex',
|
|
333
|
+
'gpt-5-codex-mini',
|
|
334
|
+
// GPT-5 base
|
|
335
|
+
'gpt-5',
|
|
336
|
+
// GPT-4 models
|
|
337
|
+
'gpt-4',
|
|
338
|
+
'gpt-4-turbo',
|
|
339
|
+
'gpt-4o',
|
|
340
|
+
'gpt-4o-mini',
|
|
341
|
+
// Reasoning models
|
|
342
|
+
'o1',
|
|
343
|
+
'o1-mini',
|
|
344
|
+
'o3-mini',
|
|
345
|
+
];
|
|
346
|
+
//# sourceMappingURL=codex-sdk.js.map
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { OpenAiChatCompletionProvider } from './chat';
|
|
2
2
|
import { OpenAiEmbeddingProvider } from './embedding';
|
|
3
3
|
import { OpenAiModerationProvider } from './moderation';
|
|
4
|
+
import { OpenAiResponsesProvider } from './responses';
|
|
4
5
|
export declare const DefaultEmbeddingProvider: OpenAiEmbeddingProvider;
|
|
5
6
|
export declare const DefaultGradingProvider: OpenAiChatCompletionProvider;
|
|
6
7
|
export declare const DefaultGradingJsonProvider: OpenAiChatCompletionProvider;
|
|
7
8
|
export declare const DefaultSuggestionsProvider: OpenAiChatCompletionProvider;
|
|
8
9
|
export declare const DefaultModerationProvider: OpenAiModerationProvider;
|
|
10
|
+
export declare const DefaultWebSearchProvider: OpenAiResponsesProvider;
|
|
9
11
|
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DefaultModerationProvider = exports.DefaultSuggestionsProvider = exports.DefaultGradingJsonProvider = exports.DefaultGradingProvider = exports.DefaultEmbeddingProvider = void 0;
|
|
3
|
+
exports.DefaultWebSearchProvider = exports.DefaultModerationProvider = exports.DefaultSuggestionsProvider = exports.DefaultGradingJsonProvider = exports.DefaultGradingProvider = exports.DefaultEmbeddingProvider = void 0;
|
|
4
4
|
const chat_1 = require("./chat");
|
|
5
5
|
const embedding_1 = require("./embedding");
|
|
6
6
|
const moderation_1 = require("./moderation");
|
|
7
|
+
const responses_1 = require("./responses");
|
|
7
8
|
exports.DefaultEmbeddingProvider = new embedding_1.OpenAiEmbeddingProvider('text-embedding-3-large');
|
|
8
|
-
exports.DefaultGradingProvider = new chat_1.OpenAiChatCompletionProvider('gpt-
|
|
9
|
-
exports.DefaultGradingJsonProvider = new chat_1.OpenAiChatCompletionProvider('gpt-
|
|
9
|
+
exports.DefaultGradingProvider = new chat_1.OpenAiChatCompletionProvider('gpt-5-2025-08-07');
|
|
10
|
+
exports.DefaultGradingJsonProvider = new chat_1.OpenAiChatCompletionProvider('gpt-5-2025-08-07', {
|
|
10
11
|
config: {
|
|
11
12
|
response_format: { type: 'json_object' },
|
|
12
13
|
},
|
|
13
14
|
});
|
|
14
|
-
exports.DefaultSuggestionsProvider = new chat_1.OpenAiChatCompletionProvider('gpt-
|
|
15
|
+
exports.DefaultSuggestionsProvider = new chat_1.OpenAiChatCompletionProvider('gpt-5-2025-08-07');
|
|
15
16
|
exports.DefaultModerationProvider = new moderation_1.OpenAiModerationProvider('omni-moderation-latest');
|
|
17
|
+
exports.DefaultWebSearchProvider = new responses_1.OpenAiResponsesProvider('gpt-5.1', {
|
|
18
|
+
config: {
|
|
19
|
+
tools: [{ type: 'web_search_preview' }],
|
|
20
|
+
},
|
|
21
|
+
});
|
|
16
22
|
//# sourceMappingURL=defaults.js.map
|
|
@@ -68,6 +68,7 @@ const foundry_agent_1 = require("./azure/foundry-agent");
|
|
|
68
68
|
const moderation_1 = require("./azure/moderation");
|
|
69
69
|
const responses_1 = require("./azure/responses");
|
|
70
70
|
const index_4 = require("./bedrock/index");
|
|
71
|
+
const converse_1 = require("./bedrock/converse");
|
|
71
72
|
const browser_1 = require("./browser");
|
|
72
73
|
const cerebras_1 = require("./cerebras");
|
|
73
74
|
const cloudera_1 = require("./cloudera");
|
|
@@ -83,7 +84,7 @@ const ai_studio_1 = require("./google/ai.studio");
|
|
|
83
84
|
const image_1 = require("./google/image");
|
|
84
85
|
const live_1 = require("./google/live");
|
|
85
86
|
const vertex_1 = require("./google/vertex");
|
|
86
|
-
const
|
|
87
|
+
const index_6 = require("./groq/index");
|
|
87
88
|
const helicone_1 = require("./helicone");
|
|
88
89
|
const http_1 = require("./http");
|
|
89
90
|
const huggingface_1 = require("./huggingface");
|
|
@@ -92,11 +93,10 @@ const llama_1 = require("./llama");
|
|
|
92
93
|
const llamaApi_1 = require("./llamaApi");
|
|
93
94
|
const localai_1 = require("./localai");
|
|
94
95
|
const manualInput_1 = require("./manualInput");
|
|
95
|
-
const
|
|
96
|
+
const index_7 = require("./mcp/index");
|
|
96
97
|
const mistral_1 = require("./mistral");
|
|
97
98
|
const nscale_1 = require("./nscale");
|
|
98
99
|
const ollama_1 = require("./ollama");
|
|
99
|
-
const agents_1 = require("./openai/agents");
|
|
100
100
|
const assistant_2 = require("./openai/assistant");
|
|
101
101
|
const chat_2 = require("./openai/chat");
|
|
102
102
|
const completion_3 = require("./openai/completion");
|
|
@@ -126,6 +126,7 @@ const webhook_1 = require("./webhook");
|
|
|
126
126
|
const websocket_1 = require("./websocket");
|
|
127
127
|
const chat_3 = require("./xai/chat");
|
|
128
128
|
const image_3 = require("./xai/image");
|
|
129
|
+
const responses_3 = require("./xai/responses");
|
|
129
130
|
exports.providerMap = [
|
|
130
131
|
(0, scriptBasedProvider_1.createScriptBasedProviderFactory)('exec', null, scriptCompletion_1.ScriptCompletionProvider),
|
|
131
132
|
(0, scriptBasedProvider_1.createScriptBasedProviderFactory)('golang', 'go', golangCompletion_1.GolangProvider),
|
|
@@ -270,6 +271,10 @@ exports.providerMap = [
|
|
|
270
271
|
const splits = providerPath.split(':');
|
|
271
272
|
const modelType = splits[1];
|
|
272
273
|
const modelName = splits.slice(2).join(':');
|
|
274
|
+
// Handle Converse API
|
|
275
|
+
if (modelType === 'converse') {
|
|
276
|
+
return new converse_1.AwsBedrockConverseProvider(modelName, providerOptions);
|
|
277
|
+
}
|
|
273
278
|
// Handle nova-sonic model
|
|
274
279
|
if (modelType === 'nova-sonic' || modelType.includes('amazon.nova-sonic')) {
|
|
275
280
|
const { NovaSonicProvider } = await Promise.resolve().then(() => __importStar(require('./bedrock/nova-sonic')));
|
|
@@ -469,8 +474,22 @@ exports.providerMap = [
|
|
|
469
474
|
{
|
|
470
475
|
test: (providerPath) => providerPath.startsWith('groq:'),
|
|
471
476
|
create: async (providerPath, providerOptions, _context) => {
|
|
472
|
-
|
|
473
|
-
|
|
477
|
+
// Handle groq:responses:<model> format for Responses API
|
|
478
|
+
if (providerPath.startsWith('groq:responses:')) {
|
|
479
|
+
const modelName = providerPath.slice('groq:responses:'.length);
|
|
480
|
+
if (!modelName) {
|
|
481
|
+
throw new Error(`Invalid groq:responses provider path: "${providerPath}". ` +
|
|
482
|
+
'Use format groq:responses:<model> (e.g., groq:responses:llama-3.3-70b-versatile)');
|
|
483
|
+
}
|
|
484
|
+
return new index_6.GroqResponsesProvider(modelName, providerOptions);
|
|
485
|
+
}
|
|
486
|
+
// Handle groq:<model> format for Chat Completions API
|
|
487
|
+
const modelName = providerPath.slice('groq:'.length);
|
|
488
|
+
if (!modelName) {
|
|
489
|
+
throw new Error(`Invalid groq provider path: "${providerPath}". ` +
|
|
490
|
+
'Use format groq:<model> (e.g., groq:llama-3.3-70b-versatile)');
|
|
491
|
+
}
|
|
492
|
+
return new index_6.GroqProvider(modelName, providerOptions);
|
|
474
493
|
},
|
|
475
494
|
},
|
|
476
495
|
{
|
|
@@ -583,11 +602,19 @@ exports.providerMap = [
|
|
|
583
602
|
},
|
|
584
603
|
{
|
|
585
604
|
test: (providerPath) => providerPath.startsWith('openai:'),
|
|
586
|
-
create: async (providerPath, providerOptions,
|
|
605
|
+
create: async (providerPath, providerOptions, context) => {
|
|
587
606
|
// Load OpenAI module
|
|
588
607
|
const splits = providerPath.split(':');
|
|
589
608
|
const modelType = splits[1];
|
|
590
609
|
const modelName = splits.slice(2).join(':');
|
|
610
|
+
// Codex SDK providers (openai:codex-sdk or openai:codex)
|
|
611
|
+
if (modelType === 'codex-sdk' || modelType === 'codex') {
|
|
612
|
+
const { OpenAICodexSDKProvider } = await Promise.resolve().then(() => __importStar(require('./openai/codex-sdk')));
|
|
613
|
+
return new OpenAICodexSDKProvider({
|
|
614
|
+
...providerOptions,
|
|
615
|
+
env: context.env,
|
|
616
|
+
});
|
|
617
|
+
}
|
|
591
618
|
if (modelType === 'chat') {
|
|
592
619
|
return new chat_2.OpenAiChatCompletionProvider(modelName || 'gpt-4.1-2025-04-14', providerOptions);
|
|
593
620
|
}
|
|
@@ -623,7 +650,12 @@ exports.providerMap = [
|
|
|
623
650
|
return new responses_2.OpenAiResponsesProvider(modelType, providerOptions);
|
|
624
651
|
}
|
|
625
652
|
if (modelType === 'agents') {
|
|
626
|
-
|
|
653
|
+
const { OpenAiAgentsProvider } = await Promise.resolve().then(() => __importStar(require('./openai/agents')));
|
|
654
|
+
return new OpenAiAgentsProvider(modelName || 'default-agent', providerOptions);
|
|
655
|
+
}
|
|
656
|
+
if (modelType === 'chatkit') {
|
|
657
|
+
const { OpenAiChatKitProvider } = await Promise.resolve().then(() => __importStar(require('./openai/chatkit')));
|
|
658
|
+
return new OpenAiChatKitProvider(modelName || '', providerOptions);
|
|
627
659
|
}
|
|
628
660
|
if (modelType === 'assistant') {
|
|
629
661
|
return new assistant_2.OpenAiAssistantProvider(modelName, providerOptions);
|
|
@@ -632,7 +664,7 @@ exports.providerMap = [
|
|
|
632
664
|
return new image_2.OpenAiImageProvider(modelName, providerOptions);
|
|
633
665
|
}
|
|
634
666
|
// Assume user did not provide model type, and it's a chat model
|
|
635
|
-
logger_1.default.warn(`Unknown OpenAI model type: ${modelType}. Treating it as a chat model. Use one of the following providers: openai:chat:<model name>, openai:completion:<model name>, openai:embeddings:<model name>, openai:image:<model name>, openai:realtime:<model name>, openai:agents:<agent name
|
|
667
|
+
logger_1.default.warn(`Unknown OpenAI model type: ${modelType}. Treating it as a chat model. Use one of the following providers: openai:chat:<model name>, openai:completion:<model name>, openai:embeddings:<model name>, openai:image:<model name>, openai:realtime:<model name>, openai:agents:<agent name>, openai:chatkit:<workflow_id>, openai:codex-sdk`);
|
|
636
668
|
return new chat_2.OpenAiChatCompletionProvider(modelType, providerOptions);
|
|
637
669
|
},
|
|
638
670
|
},
|
|
@@ -789,6 +821,13 @@ exports.providerMap = [
|
|
|
789
821
|
env: context.env,
|
|
790
822
|
});
|
|
791
823
|
}
|
|
824
|
+
// Handle xai:responses:<model> format for Agent Tools API
|
|
825
|
+
if (modelType === 'responses') {
|
|
826
|
+
return (0, responses_3.createXAIResponsesProvider)(providerPath, {
|
|
827
|
+
...providerOptions,
|
|
828
|
+
env: context.env,
|
|
829
|
+
});
|
|
830
|
+
}
|
|
792
831
|
// Handle regular xai:<model> format
|
|
793
832
|
return (0, chat_3.createXAIProvider)(providerPath, {
|
|
794
833
|
config: providerOptions,
|
|
@@ -877,7 +916,7 @@ exports.providerMap = [
|
|
|
877
916
|
serverName,
|
|
878
917
|
};
|
|
879
918
|
}
|
|
880
|
-
return new
|
|
919
|
+
return new index_7.MCPProvider({
|
|
881
920
|
config,
|
|
882
921
|
id: providerOptions.id,
|
|
883
922
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FunctionCallbackHandler } from '../functionCallbackUtils';
|
|
2
2
|
export interface ProcessorConfig {
|
|
3
3
|
modelName: string;
|
|
4
|
-
providerType: 'openai' | 'azure';
|
|
4
|
+
providerType: 'openai' | 'azure' | 'xai';
|
|
5
5
|
functionCallbackHandler: FunctionCallbackHandler;
|
|
6
6
|
costCalculator: (modelName: string, usage: any, config?: any) => number;
|
|
7
7
|
}
|
|
@@ -40,11 +40,11 @@ declare const SageMakerConfigSchema: z.ZodObject<{
|
|
|
40
40
|
basePath?: string | undefined;
|
|
41
41
|
maxTokens?: number | undefined;
|
|
42
42
|
temperature?: number | undefined;
|
|
43
|
-
contentType?: string | undefined;
|
|
44
43
|
accessKeyId?: string | undefined;
|
|
45
44
|
secretAccessKey?: string | undefined;
|
|
46
45
|
sessionToken?: string | undefined;
|
|
47
46
|
region?: string | undefined;
|
|
47
|
+
contentType?: string | undefined;
|
|
48
48
|
topP?: number | undefined;
|
|
49
49
|
stopSequences?: string[] | undefined;
|
|
50
50
|
responseFormat?: {
|
|
@@ -61,11 +61,11 @@ declare const SageMakerConfigSchema: z.ZodObject<{
|
|
|
61
61
|
basePath?: string | undefined;
|
|
62
62
|
maxTokens?: number | undefined;
|
|
63
63
|
temperature?: number | undefined;
|
|
64
|
-
contentType?: string | undefined;
|
|
65
64
|
accessKeyId?: string | undefined;
|
|
66
65
|
secretAccessKey?: string | undefined;
|
|
67
66
|
sessionToken?: string | undefined;
|
|
68
67
|
region?: string | undefined;
|
|
68
|
+
contentType?: string | undefined;
|
|
69
69
|
topP?: number | undefined;
|
|
70
70
|
stopSequences?: string[] | undefined;
|
|
71
71
|
responseFormat?: {
|