summaryrefslogtreecommitdiffhomepage
path: root/packages/provider-openai-compat
diff options
context:
space:
mode:
Diffstat (limited to 'packages/provider-openai-compat')
-rw-r--r--packages/provider-openai-compat/package.json22
-rw-r--r--packages/provider-openai-compat/src/extension.test.ts140
-rw-r--r--packages/provider-openai-compat/src/extension.ts78
-rw-r--r--packages/provider-openai-compat/src/index.ts18
-rw-r--r--packages/provider-openai-compat/tsconfig.json16
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" }
+ ]
}