Skip to content

Commit a3f04aa

Browse files
committed
fix: add function to sanitize headers
1 parent c608779 commit a3f04aa

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

evals/config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ export function getRequiredEnvVars(): Record<string, string | undefined> {
6969
};
7070
}
7171

72+
// Removes newlines and trims whitespace. Useful for Authorization header values
73+
// because CI secrets sometimes include trailing newlines or quotes.
74+
export function sanitizeHeaderValue(value?: string): string | undefined {
75+
if (value == null) return value;
76+
return value.replace(/[\r\n]/g, '').trim().replace(/^"|"$/g, '');
77+
}
78+
7279
export function validateEnvVars(): boolean {
7380
const envVars = getRequiredEnvVars();
7481
const missing = Object.entries(envVars)

evals/create-dataset.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import dotenv from 'dotenv';
1515

1616
import log from '@apify/log';
1717

18-
import { validateEnvVars } from './config.js';
18+
import { sanitizeHeaderValue, validateEnvVars } from './config.js';
1919

2020
// Set log level to debug
2121
log.setLevel(log.LEVELS.INFO);
@@ -75,7 +75,7 @@ async function createDatasetFromTestCases(): Promise<void> {
7575
const client = createClient({
7676
options: {
7777
baseUrl: process.env.PHOENIX_BASE_URL!,
78-
headers: { Authorization: `Bearer ${process.env.PHOENIX_API_KEY}` },
78+
headers: { Authorization: `Bearer ${sanitizeHeaderValue(process.env.PHOENIX_API_KEY)}` },
7979
},
8080
});
8181

evals/run-evaluation.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,17 @@ import log from '@apify/log';
1818
import { ApifyClient } from '../src/apify-client.js';
1919
import { getToolPublicFieldOnly, processParamsGetTools } from '../src/index-internals.js';
2020
import type { ToolBase, ToolEntry } from '../src/types.js';
21-
import { DATASET_NAME, MODELS_TO_EVALUATE, PASS_THRESHOLD, SYSTEM_PROMPT, validateEnvVars } from './config.js';
21+
import { DATASET_NAME, MODELS_TO_EVALUATE, PASS_THRESHOLD, SYSTEM_PROMPT, sanitizeHeaderValue, validateEnvVars } from './config.js';
2222

2323
log.setLevel(log.LEVELS.DEBUG);
2424

2525
dotenv.config({ path: '.env' });
2626

27+
// Sanitize secrets early to avoid invalid header characters in CI
28+
process.env.OPENAI_API_KEY = sanitizeHeaderValue(process.env.OPENAI_API_KEY);
29+
process.env.ANTHROPIC_API_KEY = sanitizeHeaderValue(process.env.ANTHROPIC_API_KEY);
30+
process.env.PHOENIX_API_KEY = sanitizeHeaderValue(process.env.PHOENIX_API_KEY);
31+
2732
type ExampleInputOnly = { input: Record<string, unknown>, metadata?: Record<string, unknown>, output?: never };
2833

2934
// Type for Phoenix evaluation run results
@@ -70,7 +75,7 @@ function createOpenAITask(modelName: string, tools: ToolBase[]) {
7075
input: Record<string, unknown>,
7176
metadata: Record<string, unknown>,
7277
}> => {
73-
const client = new OpenAI();
78+
const client = new OpenAI({ apiKey: sanitizeHeaderValue(process.env.OPENAI_API_KEY) });
7479

7580
const response = await client.chat.completions.create({
7681
model: modelName,
@@ -104,7 +109,7 @@ function createAnthropicTask(modelName: string, tools: ToolBase[]) {
104109
input: Record<string, unknown>,
105110
metadata: Record<string, unknown>,
106111
}> => {
107-
const client = new Anthropic({});
112+
const client = new Anthropic({ apiKey: sanitizeHeaderValue(process.env.ANTHROPIC_API_KEY) });
108113

109114
const response = await client.messages.create({
110115
model: modelName,
@@ -173,7 +178,7 @@ async function main(): Promise<number> {
173178
const client = createClient({
174179
options: {
175180
baseUrl: process.env.PHOENIX_BASE_URL!,
176-
headers: { Authorization: `Bearer ${process.env.PHOENIX_API_KEY}` },
181+
headers: { Authorization: `Bearer ${sanitizeHeaderValue(process.env.PHOENIX_API_KEY)}` },
177182
},
178183
});
179184

0 commit comments

Comments
 (0)