From 52cf9e2687963d17f71b350e9a8dc64b6b4c8440 Mon Sep 17 00:00:00 2001 From: Robert Keus Date: Sun, 26 Jul 2026 10:29:47 +0200 Subject: [PATCH 1/2] feat: add GreenPT provider --- src/globals.ts | 2 ++ src/providers/greenpt/api.ts | 20 ++++++++++++++++++++ src/providers/greenpt/greenpt.test.ts | 17 +++++++++++++++++ src/providers/greenpt/index.ts | 20 ++++++++++++++++++++ src/providers/index.ts | 2 ++ 5 files changed, 61 insertions(+) create mode 100644 src/providers/greenpt/api.ts create mode 100644 src/providers/greenpt/greenpt.test.ts create mode 100644 src/providers/greenpt/index.ts diff --git a/src/globals.ts b/src/globals.ts index 4d6e327e4..e42ce44cd 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -113,6 +113,7 @@ export const ORACLE: string = 'oracle'; export const IO_INTELLIGENCE: string = 'iointelligence'; export const AIBADGR: string = 'aibadgr'; export const OVHCLOUD: string = 'ovhcloud'; +export const GREENPT: string = 'greenpt'; export const VALID_PROVIDERS = [ ANTHROPIC, @@ -189,6 +190,7 @@ export const VALID_PROVIDERS = [ IO_INTELLIGENCE, AIBADGR, OVHCLOUD, + GREENPT, ]; export const CONTENT_TYPES = { diff --git a/src/providers/greenpt/api.ts b/src/providers/greenpt/api.ts new file mode 100644 index 000000000..d24ca7e52 --- /dev/null +++ b/src/providers/greenpt/api.ts @@ -0,0 +1,20 @@ +import { ProviderAPIConfig } from '../types'; + +const GreenPTAPIConfig: ProviderAPIConfig = { + getBaseURL: () => 'https://api.greenpt.ai/v1', + headers: ({ providerOptions }) => ({ + Authorization: `Bearer ${providerOptions.apiKey}`, + }), + getEndpoint: ({ fn }) => { + switch (fn) { + case 'chatComplete': + return '/chat/completions'; + case 'embed': + return '/embeddings'; + default: + return ''; + } + }, +}; + +export default GreenPTAPIConfig; diff --git a/src/providers/greenpt/greenpt.test.ts b/src/providers/greenpt/greenpt.test.ts new file mode 100644 index 000000000..1ac561561 --- /dev/null +++ b/src/providers/greenpt/greenpt.test.ts @@ -0,0 +1,17 @@ +import { GREENPT, VALID_PROVIDERS } from '../../globals'; +import GreenPTAPIConfig from './api'; + +describe('GreenPT provider', () => { + it('registers its OpenAI-compatible endpoints', () => { + expect(VALID_PROVIDERS).toContain(GREENPT); + expect(GreenPTAPIConfig.getBaseURL({} as never)).toBe( + 'https://api.greenpt.ai/v1' + ); + expect(GreenPTAPIConfig.getEndpoint({ fn: 'chatComplete' } as never)).toBe( + '/chat/completions' + ); + expect(GreenPTAPIConfig.getEndpoint({ fn: 'embed' } as never)).toBe( + '/embeddings' + ); + }); +}); diff --git a/src/providers/greenpt/index.ts b/src/providers/greenpt/index.ts new file mode 100644 index 000000000..cec7df4b1 --- /dev/null +++ b/src/providers/greenpt/index.ts @@ -0,0 +1,20 @@ +import { GREENPT } from '../../globals'; +import { + chatCompleteParams, + embedParams, + responseTransformers, +} from '../open-ai-base'; +import { ProviderConfigs } from '../types'; +import GreenPTAPIConfig from './api'; + +const GreenPTConfig: ProviderConfigs = { + chatComplete: chatCompleteParams([], { model: 'gemma4' }), + embed: embedParams([], { model: 'green-embedding' }), + api: GreenPTAPIConfig, + responseTransforms: responseTransformers(GREENPT, { + chatComplete: true, + embed: true, + }), +}; + +export default GreenPTConfig; diff --git a/src/providers/index.ts b/src/providers/index.ts index 2cd5355f8..e0bd7b911 100644 --- a/src/providers/index.ts +++ b/src/providers/index.ts @@ -74,6 +74,7 @@ import OracleConfig from './oracle'; import IOIntelligenceConfig from './iointelligence'; import AIBadgrConfig from './aibadgr'; import OVHcloudConfig from './ovhcloud'; +import GreenPTConfig from './greenpt'; const Providers: { [key: string]: ProviderConfigs } = { openai: OpenAIConfig, @@ -148,6 +149,7 @@ const Providers: { [key: string]: ProviderConfigs } = { iointelligence: IOIntelligenceConfig, aibadgr: AIBadgrConfig, ovhcloud: OVHcloudConfig, + greenpt: GreenPTConfig, }; export default Providers; From 5e38c7b237850bbb42b0af5992c0d6b458ca617d Mon Sep 17 00:00:00 2001 From: Robert Keus Date: Sun, 26 Jul 2026 11:47:46 +0200 Subject: [PATCH 2/2] feat(greenpt): default to GLM-5.2 --- src/providers/greenpt/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/greenpt/index.ts b/src/providers/greenpt/index.ts index cec7df4b1..adfe2a95a 100644 --- a/src/providers/greenpt/index.ts +++ b/src/providers/greenpt/index.ts @@ -8,7 +8,7 @@ import { ProviderConfigs } from '../types'; import GreenPTAPIConfig from './api'; const GreenPTConfig: ProviderConfigs = { - chatComplete: chatCompleteParams([], { model: 'gemma4' }), + chatComplete: chatCompleteParams([], { model: 'glm-5.2' }), embed: embedParams([], { model: 'green-embedding' }), api: GreenPTAPIConfig, responseTransforms: responseTransformers(GREENPT, {