From 60123a0fd895a63642b221652d5aca4c7e5d51cd Mon Sep 17 00:00:00 2001 From: Sergei Chipiga Date: Tue, 14 Apr 2026 20:04:49 +0300 Subject: [PATCH] Forward Vercel ai-sdk options --- .github/workflows/deploy.yml | 21 +++++++++++++++------ README.md | 2 +- docs/src/pages/index.md | 2 +- jest.config.js | 17 +++++++++++++++++ package.json | 5 +++-- src/index.ts | 21 ++++++++++----------- src/types.ts | 12 +++++------- 7 files changed, 52 insertions(+), 28 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 53a7ddc..3f120df 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,12 +1,15 @@ -name: Deploy Docusaurus +name: CI/CD Pipeline on: push: branches: - main + pull_request: + branches: + - main jobs: - build: + test-and-deploy: runs-on: ubuntu-latest permissions: contents: write @@ -22,17 +25,23 @@ jobs: with: node-version: 22 cache: 'pnpm' - cache-dependency-path: docs/pnpm-lock.yaml - - name: Install dependencies + - name: Install Root Dependencies + run: pnpm install --frozen-lockfile + + - name: Run Eva-Judge Tests + run: pnpm run test:coverage + + - name: Install Docs dependencies run: pnpm install --frozen-lockfile working-directory: docs - - name: Build + - name: Build Docs run: pnpm run build working-directory: docs - - name: Deploy + - name: Deploy to GH Pages + if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 207b4f8..5eee599 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ providers: ```yml providers: - id: openai:gpt-5.2 - config: + config: # Any Vercel ai-sdk option: https://ai-sdk.dev/docs/reference/ai-sdk-core/generate-text#api-signature temperature: 0 ``` diff --git a/docs/src/pages/index.md b/docs/src/pages/index.md index 6ce1a50..98aff9c 100644 --- a/docs/src/pages/index.md +++ b/docs/src/pages/index.md @@ -31,7 +31,7 @@ providers: ```yml providers: - id: openai:gpt-5.2 - config: + config: # Any Vercel ai-sdk option: https://ai-sdk.dev/docs/reference/ai-sdk-core/generate-text#api-signature temperature: 0 ``` diff --git a/jest.config.js b/jest.config.js index 7ea56d0..caf2872 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,4 +8,21 @@ module.exports = { transform: { ...tsJestTransformCfg, }, + coverageDirectory: "coverage", + coverageProvider: "v8", + collectCoverageFrom: [ + "src/**/*.{ts,js}", + "!src/**/*.d.ts", + "!src/types/**", + "!**/node_modules/**" + ], + coverageReporters: ["text", "lcov", "clover"], + coverageThreshold: { + global: { + branches: 90, + functions: 95, + lines: 95, + statements: 95, + }, + }, }; diff --git a/package.json b/package.json index f4e9956..6674d33 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eva-llm/eva-parser", - "version": "1.0.2", + "version": "1.0.3", "description": "A converter for Promptfoo test formats and into the EVA-LLM ecosystem", "main": "dst/index.js", "types": "dst/index.d.ts", @@ -13,7 +13,8 @@ "scripts": { "build": "tsc", "prepare": "pnpm run build", - "test": "jest" + "test": "jest", + "test:coverage": "jest --coverage" }, "repository": { "type": "git", diff --git a/src/index.ts b/src/index.ts index bacee1b..6f909cf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,16 +3,16 @@ import { parse } from 'yaml'; import { ASSERT_NAMES, - type AssertT, - type ProviderObjT, - type ModelOptionsT, + type TAssert, + type TProviderObj, + type TVercelOptions, } from './types'; export * from './types'; -const parseProvider = (providerObj: string | ProviderObjT) => { - const options: ModelOptionsT = {}; +const parseProvider = (providerObj: string | TProviderObj) => { + let options: TVercelOptions = {}; if (typeof providerObj === 'string') { const [ provider, model ] = providerObj.split(':'); @@ -21,10 +21,9 @@ const parseProvider = (providerObj: string | ProviderObjT) => { } const [ provider, model ] = providerObj.id.split(':'); - const temperature = providerObj.config?.temperature; - if (temperature !== undefined) { - options.temperature = temperature; + if (providerObj.config !== undefined) { + options = providerObj.config; } return { provider, model, options }; @@ -37,8 +36,8 @@ const injectVars = (prompt: string, vars: undefined | Record) => { return Mustache.render(prompt, vars); } -const parseAssert = (fooAssert: any): Omit => { - let assert: Omit = { +const parseAssert = (fooAssert: any): Omit => { + let assert: Omit = { name: fooAssert.type, }; @@ -98,7 +97,7 @@ export function parsePromptfoo(yamlContent: string) { const evaTest = { vars: fooTest.vars, - asserts: [] as AssertT[], + asserts: [] as TAssert[], }; for (const fooAssert of fooTest.assert) { diff --git a/src/types.ts b/src/types.ts index 859fd72..7ab5df4 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,10 +9,10 @@ export const ASSERT_NAMES = { REGEX: 'regex', } as const; -export type AssertName = (typeof ASSERT_NAMES)[keyof typeof ASSERT_NAMES]; +export type TAssertName = (typeof ASSERT_NAMES)[keyof typeof ASSERT_NAMES]; -export type AssertT = { - name: AssertName; +export type TAssert = { + name: TAssertName; criteria: string; threshold?: number; provider?: string; @@ -23,11 +23,9 @@ export type AssertT = { case_sensitive?: boolean; } -export type ProviderObjT = { +export type TProviderObj = { id: string; config: Record; } -export type ModelOptionsT = { - temperature?: number; -} +export type TVercelOptions = Record;