diff options
Diffstat (limited to 'packages/provider-openai-compat')
| -rw-r--r-- | packages/provider-openai-compat/package.json | 22 | ||||
| -rw-r--r-- | packages/provider-openai-compat/src/extension.test.ts | 140 | ||||
| -rw-r--r-- | packages/provider-openai-compat/src/extension.ts | 78 | ||||
| -rw-r--r-- | packages/provider-openai-compat/src/index.ts | 18 | ||||
| -rw-r--r-- | packages/provider-openai-compat/tsconfig.json | 16 |
5 files changed, 137 insertions, 137 deletions
diff --git a/packages/provider-openai-compat/package.json b/packages/provider-openai-compat/package.json index 465df0c..a029d76 100644 --- a/packages/provider-openai-compat/package.json +++ b/packages/provider-openai-compat/package.json @@ -1,13 +1,13 @@ { - "name": "@dispatch/provider-openai-compat", - "version": "0.0.0", - "type": "module", - "private": true, - "main": "dist/index.js", - "types": "dist/index.d.ts", - "dependencies": { - "@dispatch/kernel": "workspace:*", - "@dispatch/openai-stream": "workspace:*", - "@dispatch/trace-replay": "workspace:*" - } + "name": "@dispatch/provider-openai-compat", + "version": "0.0.0", + "type": "module", + "private": true, + "main": "dist/index.js", + "types": "dist/index.d.ts", + "dependencies": { + "@dispatch/kernel": "workspace:*", + "@dispatch/openai-stream": "workspace:*", + "@dispatch/trace-replay": "workspace:*" + } } diff --git a/packages/provider-openai-compat/src/extension.test.ts b/packages/provider-openai-compat/src/extension.test.ts index 6dc409a..653b825 100644 --- a/packages/provider-openai-compat/src/extension.test.ts +++ b/packages/provider-openai-compat/src/extension.test.ts @@ -3,97 +3,97 @@ import { describe, expect, it, vi } from "vitest"; import { activate, manifest } from "./extension.js"; function makeFakeHost(overrides: { - getAuthProvider?: (id: string) => AuthContract | undefined; - configGet?: (key: string) => unknown; + getAuthProvider?: (id: string) => AuthContract | undefined; + configGet?: (key: string) => unknown; }): { host: HostAPI; defineProvider: ReturnType<typeof vi.fn> } { - const defineProvider = vi.fn(); - const warn = vi.fn(); - const info = vi.fn(); - const host = { - defineProvider, - config: { get: overrides.configGet ?? (() => undefined) }, - logger: { debug: vi.fn(), info, warn, error: vi.fn() }, - getAuthProvider: overrides.getAuthProvider ?? (() => undefined), - } as unknown as HostAPI; - return { host, defineProvider }; + const defineProvider = vi.fn(); + const warn = vi.fn(); + const info = vi.fn(); + const host = { + defineProvider, + config: { get: overrides.configGet ?? (() => undefined) }, + logger: { debug: vi.fn(), info, warn, error: vi.fn() }, + getAuthProvider: overrides.getAuthProvider ?? (() => undefined), + } as unknown as HostAPI; + return { host, defineProvider }; } describe("provider-openai-compat activation", () => { - it("registers provider when auth resolves ApiKeyCredentials", async () => { - const fakeCreds: ApiKeyCredentials = { type: "api-key", apiKey: "sk-test" }; - const fakeAuth: AuthContract = { - id: "apikey", - resolve: async () => fakeCreds, - }; + it("registers provider when auth resolves ApiKeyCredentials", async () => { + const fakeCreds: ApiKeyCredentials = { type: "api-key", apiKey: "sk-test" }; + const fakeAuth: AuthContract = { + id: "apikey", + resolve: async () => fakeCreds, + }; - const { host, defineProvider } = makeFakeHost({ - getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), - }); + const { host, defineProvider } = makeFakeHost({ + getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), + }); - await activate(host); + await activate(host); - expect(defineProvider).toHaveBeenCalledTimes(1); - expect(defineProvider.mock.calls[0]?.[0]?.id).toBe("openai-compat"); - }); + expect(defineProvider).toHaveBeenCalledTimes(1); + expect(defineProvider.mock.calls[0]?.[0]?.id).toBe("openai-compat"); + }); - it("does not register provider when getAuthProvider returns undefined", async () => { - const { host, defineProvider } = makeFakeHost({ - getAuthProvider: () => undefined, - }); + it("does not register provider when getAuthProvider returns undefined", async () => { + const { host, defineProvider } = makeFakeHost({ + getAuthProvider: () => undefined, + }); - await activate(host); + await activate(host); - expect(defineProvider).not.toHaveBeenCalled(); - }); + expect(defineProvider).not.toHaveBeenCalled(); + }); - it("does not register provider when resolve returns null", async () => { - const fakeAuth: AuthContract = { - id: "apikey", - resolve: async () => null, - }; + it("does not register provider when resolve returns null", async () => { + const fakeAuth: AuthContract = { + id: "apikey", + resolve: async () => null, + }; - const { host, defineProvider } = makeFakeHost({ - getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), - }); + const { host, defineProvider } = makeFakeHost({ + getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), + }); - await activate(host); + await activate(host); - expect(defineProvider).not.toHaveBeenCalled(); - }); + expect(defineProvider).not.toHaveBeenCalled(); + }); - it("does not register provider when credentials are not api-key type", async () => { - const fakeAuth: AuthContract = { - id: "apikey", - resolve: async () => ({ type: "bearer-token", token: "tok-123" }), - }; + it("does not register provider when credentials are not api-key type", async () => { + const fakeAuth: AuthContract = { + id: "apikey", + resolve: async () => ({ type: "bearer-token", token: "tok-123" }), + }; - const { host, defineProvider } = makeFakeHost({ - getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), - }); + const { host, defineProvider } = makeFakeHost({ + getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), + }); - await activate(host); + await activate(host); - expect(defineProvider).not.toHaveBeenCalled(); - }); + expect(defineProvider).not.toHaveBeenCalled(); + }); - it("uses default model when config returns undefined", async () => { - const fakeCreds: ApiKeyCredentials = { type: "api-key", apiKey: "sk-test" }; - const fakeAuth: AuthContract = { - id: "apikey", - resolve: async () => fakeCreds, - }; + it("uses default model when config returns undefined", async () => { + const fakeCreds: ApiKeyCredentials = { type: "api-key", apiKey: "sk-test" }; + const fakeAuth: AuthContract = { + id: "apikey", + resolve: async () => fakeCreds, + }; - const { host, defineProvider } = makeFakeHost({ - getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), - configGet: () => undefined, - }); + const { host, defineProvider } = makeFakeHost({ + getAuthProvider: (id) => (id === "apikey" ? fakeAuth : undefined), + configGet: () => undefined, + }); - await activate(host); + await activate(host); - expect(defineProvider).toHaveBeenCalledTimes(1); - }); + expect(defineProvider).toHaveBeenCalledTimes(1); + }); - it("declares dependsOn auth-apikey", () => { - expect(manifest.dependsOn).toEqual(["auth-apikey"]); - }); + it("declares dependsOn auth-apikey", () => { + expect(manifest.dependsOn).toEqual(["auth-apikey"]); + }); }); diff --git a/packages/provider-openai-compat/src/extension.ts b/packages/provider-openai-compat/src/extension.ts index 042a807..49bc96a 100644 --- a/packages/provider-openai-compat/src/extension.ts +++ b/packages/provider-openai-compat/src/extension.ts @@ -2,53 +2,53 @@ import type { Extension, HostAPI, Manifest } from "@dispatch/kernel"; import { createOpenAICompatProvider } from "@dispatch/openai-stream"; export const manifest: Manifest = { - id: "provider-openai-compat", - name: "OpenAI-Compatible Provider", - version: "0.0.0", - apiVersion: "^0.1.0", - dependsOn: ["auth-apikey"], - trust: "bundled", - activation: "eager", - capabilities: { network: true }, - contributes: { providers: ["openai-compat"] }, + id: "provider-openai-compat", + name: "OpenAI-Compatible Provider", + version: "0.0.0", + apiVersion: "^0.1.0", + dependsOn: ["auth-apikey"], + trust: "bundled", + activation: "eager", + capabilities: { network: true }, + contributes: { providers: ["openai-compat"] }, }; export async function activate(host: HostAPI): Promise<void> { - const auth = host.getAuthProvider("apikey"); - if (!auth) { - host.logger.warn( - "provider-openai-compat: auth-apikey extension not available. Provider not registered.", - ); - return; - } + const auth = host.getAuthProvider("apikey"); + if (!auth) { + host.logger.warn( + "provider-openai-compat: auth-apikey extension not available. Provider not registered.", + ); + return; + } - const creds = await auth.resolve(); - if (!creds) { - host.logger.warn( - "provider-openai-compat: no credentials resolved from auth-apikey. Provider not registered.", - ); - return; - } + const creds = await auth.resolve(); + if (!creds) { + host.logger.warn( + "provider-openai-compat: no credentials resolved from auth-apikey. Provider not registered.", + ); + return; + } - if (creds.type !== "api-key") { - host.logger.warn( - `provider-openai-compat: expected api-key credentials but got "${creds.type}". Provider not registered.`, - ); - return; - } + if (creds.type !== "api-key") { + host.logger.warn( + `provider-openai-compat: expected api-key credentials but got "${creds.type}". Provider not registered.`, + ); + return; + } - const model = host.config.get<string>("provider.openai-compat.model") ?? "deepseek-v4-flash"; + const model = host.config.get<string>("provider.openai-compat.model") ?? "deepseek-v4-flash"; - const provider = createOpenAICompatProvider({ - credentials: creds, - model, - id: "openai-compat", - }); - host.defineProvider(provider); - host.logger.info(`provider-openai-compat: registered (model=${model})`); + const provider = createOpenAICompatProvider({ + credentials: creds, + model, + id: "openai-compat", + }); + host.defineProvider(provider); + host.logger.info(`provider-openai-compat: registered (model=${model})`); } export const extension: Extension = { - manifest, - activate, + manifest, + activate, }; diff --git a/packages/provider-openai-compat/src/index.ts b/packages/provider-openai-compat/src/index.ts index 78e30bb..a9117d1 100644 --- a/packages/provider-openai-compat/src/index.ts +++ b/packages/provider-openai-compat/src/index.ts @@ -1,14 +1,14 @@ export type { - CreateOpenAICompatProviderOpts, - OpenAIMessage, - OpenAITool, - OpenAIToolCall, + CreateOpenAICompatProviderOpts, + OpenAIMessage, + OpenAITool, + OpenAIToolCall, } from "@dispatch/openai-stream"; export { - convertMessages, - convertTools, - createOpenAICompatProvider, - parseModelList, - parseSSELines, + convertMessages, + convertTools, + createOpenAICompatProvider, + parseModelList, + parseSSELines, } from "@dispatch/openai-stream"; export { activate, extension, manifest } from "./extension.js"; diff --git a/packages/provider-openai-compat/tsconfig.json b/packages/provider-openai-compat/tsconfig.json index 9cc0414..4842361 100644 --- a/packages/provider-openai-compat/tsconfig.json +++ b/packages/provider-openai-compat/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.base.json", - "compilerOptions": { "rootDir": "src", "outDir": "dist", "composite": true }, - "include": ["src/**/*.ts"], - "references": [ - { "path": "../kernel" }, - { "path": "../openai-stream" }, - { "path": "../trace-replay" } - ] + "extends": "../../tsconfig.base.json", + "compilerOptions": { "rootDir": "src", "outDir": "dist", "composite": true }, + "include": ["src/**/*.ts"], + "references": [ + { "path": "../kernel" }, + { "path": "../openai-stream" }, + { "path": "../trace-replay" } + ] } |
