9993c96907
Move provider auth and OAuth flows onto pi-ai Models, compose models.json and extension overlays through ModelRuntime, and retain ModelRegistry as an extension compatibility facade.
35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
import { anthropicMessagesApi } from "../api/anthropic-messages.lazy.ts";
|
|
import { openAICompletionsApi } from "../api/openai-completions.lazy.ts";
|
|
import { openAIResponsesApi } from "../api/openai-responses.lazy.ts";
|
|
import { envApiKeyAuth, lazyOAuth } from "../auth/helpers.ts";
|
|
import { loadGitHubCopilotOAuth } from "../auth/oauth/load.ts";
|
|
import { createProvider, type Provider } from "../models.ts";
|
|
import { GITHUB_COPILOT_MODELS } from "./github-copilot.models.ts";
|
|
|
|
export function githubCopilotProvider(): Provider<"anthropic-messages" | "openai-completions" | "openai-responses"> {
|
|
return createProvider({
|
|
id: "github-copilot",
|
|
name: "GitHub Copilot",
|
|
baseUrl: "https://api.individual.githubcopilot.com",
|
|
auth: {
|
|
apiKey: envApiKeyAuth("GitHub Copilot token", ["COPILOT_GITHUB_TOKEN"]),
|
|
oauth: lazyOAuth({ name: "GitHub Copilot", load: loadGitHubCopilotOAuth }),
|
|
},
|
|
models: Object.values(GITHUB_COPILOT_MODELS),
|
|
filterModels: (models, credential) => {
|
|
if (credential?.type !== "oauth") return models;
|
|
const availableModelIds = credential.availableModelIds;
|
|
if (!Array.isArray(availableModelIds) || !availableModelIds.every((id) => typeof id === "string")) {
|
|
return models;
|
|
}
|
|
const available = new Set(availableModelIds);
|
|
return models.filter((model) => available.has(model.id));
|
|
},
|
|
api: {
|
|
"anthropic-messages": anthropicMessagesApi(),
|
|
"openai-completions": openAICompletionsApi(),
|
|
"openai-responses": openAIResponsesApi(),
|
|
},
|
|
});
|
|
}
|