@f5-sales-demo/pi-ai 19.51.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1997 -0
- package/README.md +1160 -0
- package/package.json +135 -0
- package/src/api-registry.ts +95 -0
- package/src/auth-storage.ts +2694 -0
- package/src/cli.ts +493 -0
- package/src/index.ts +42 -0
- package/src/model-cache.ts +97 -0
- package/src/model-manager.ts +349 -0
- package/src/model-thinking.ts +561 -0
- package/src/models.json +49439 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +56 -0
- package/src/prompts/turn-aborted-guidance.md +4 -0
- package/src/provider-details.ts +81 -0
- package/src/provider-models/descriptors.ts +285 -0
- package/src/provider-models/google.ts +90 -0
- package/src/provider-models/index.ts +4 -0
- package/src/provider-models/openai-compat.ts +2074 -0
- package/src/provider-models/special.ts +106 -0
- package/src/providers/amazon-bedrock.ts +706 -0
- package/src/providers/anthropic.ts +1682 -0
- package/src/providers/azure-openai-responses.ts +391 -0
- package/src/providers/cursor/gen/agent_pb.ts +15274 -0
- package/src/providers/cursor/proto/agent.proto +3526 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor.ts +2218 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.ts +381 -0
- package/src/providers/google-gemini-cli.ts +1133 -0
- package/src/providers/google-shared.ts +354 -0
- package/src/providers/google-vertex.ts +436 -0
- package/src/providers/google.ts +381 -0
- package/src/providers/kimi.ts +151 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.ts +158 -0
- package/src/providers/openai-codex/response-handler.ts +81 -0
- package/src/providers/openai-codex-responses.ts +2345 -0
- package/src/providers/openai-completions-compat.ts +159 -0
- package/src/providers/openai-completions.ts +1290 -0
- package/src/providers/openai-responses-shared.ts +452 -0
- package/src/providers/openai-responses.ts +519 -0
- package/src/providers/register-builtins.ts +329 -0
- package/src/providers/synthetic.ts +154 -0
- package/src/providers/transform-messages.ts +234 -0
- package/src/rate-limit-utils.ts +84 -0
- package/src/stream.ts +728 -0
- package/src/types.ts +546 -0
- package/src/usage/claude.ts +337 -0
- package/src/usage/gemini.ts +248 -0
- package/src/usage/github-copilot.ts +421 -0
- package/src/usage/google-antigravity.ts +200 -0
- package/src/usage/kimi.ts +286 -0
- package/src/usage/minimax-code.ts +31 -0
- package/src/usage/openai-codex.ts +387 -0
- package/src/usage/zai.ts +247 -0
- package/src/usage.ts +130 -0
- package/src/utils/abort.ts +36 -0
- package/src/utils/anthropic-auth.ts +293 -0
- package/src/utils/discovery/antigravity.ts +261 -0
- package/src/utils/discovery/codex.ts +371 -0
- package/src/utils/discovery/cursor.ts +306 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +5 -0
- package/src/utils/discovery/openai-compatible.ts +224 -0
- package/src/utils/event-stream.ts +209 -0
- package/src/utils/http-inspector.ts +165 -0
- package/src/utils/idle-iterator.ts +176 -0
- package/src/utils/json-parse.ts +28 -0
- package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
- package/src/utils/oauth/anthropic.ts +134 -0
- package/src/utils/oauth/api-key-validation.ts +92 -0
- package/src/utils/oauth/callback-server.ts +276 -0
- package/src/utils/oauth/cerebras.ts +59 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/cursor.ts +157 -0
- package/src/utils/oauth/github-copilot.ts +358 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -0
- package/src/utils/oauth/google-antigravity.ts +275 -0
- package/src/utils/oauth/google-gemini-cli.ts +334 -0
- package/src/utils/oauth/huggingface.ts +62 -0
- package/src/utils/oauth/index.ts +512 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.ts +251 -0
- package/src/utils/oauth/litellm.ts +81 -0
- package/src/utils/oauth/lm-studio.ts +40 -0
- package/src/utils/oauth/minimax-code.ts +78 -0
- package/src/utils/oauth/moonshot.ts +59 -0
- package/src/utils/oauth/nanogpt.ts +51 -0
- package/src/utils/oauth/nvidia.ts +70 -0
- package/src/utils/oauth/oauth.html +199 -0
- package/src/utils/oauth/ollama.ts +47 -0
- package/src/utils/oauth/openai-codex.ts +190 -0
- package/src/utils/oauth/opencode.ts +49 -0
- package/src/utils/oauth/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +200 -0
- package/src/utils/oauth/pkce.ts +18 -0
- package/src/utils/oauth/qianfan.ts +58 -0
- package/src/utils/oauth/qwen-portal.ts +60 -0
- package/src/utils/oauth/synthetic.ts +60 -0
- package/src/utils/oauth/tavily.ts +46 -0
- package/src/utils/oauth/together.ts +59 -0
- package/src/utils/oauth/types.ts +89 -0
- package/src/utils/oauth/venice.ts +59 -0
- package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
- package/src/utils/oauth/vllm.ts +40 -0
- package/src/utils/oauth/xiaomi.ts +88 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +51 -0
- package/src/utils/overflow.ts +134 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry.ts +93 -0
- package/src/utils/schema/CONSTRAINTS.md +160 -0
- package/src/utils/schema/adapt.ts +20 -0
- package/src/utils/schema/compatibility.ts +397 -0
- package/src/utils/schema/dereference.ts +93 -0
- package/src/utils/schema/equality.ts +93 -0
- package/src/utils/schema/fields.ts +147 -0
- package/src/utils/schema/index.ts +9 -0
- package/src/utils/schema/normalize-cca.ts +479 -0
- package/src/utils/schema/sanitize-google.ts +212 -0
- package/src/utils/schema/strict-mode.ts +385 -0
- package/src/utils/schema/types.ts +5 -0
- package/src/utils/tool-choice.ts +81 -0
- package/src/utils/validation.ts +664 -0
- package/src/utils.ts +147 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { Model, OpenAICompat } from "../types";
|
|
2
|
+
|
|
3
|
+
type OpenAIReasoningEffort = "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
4
|
+
type ResolvedToolStrictMode = NonNullable<OpenAICompat["toolStrictMode"]> | "mixed";
|
|
5
|
+
|
|
6
|
+
export type ResolvedOpenAICompat = Required<
|
|
7
|
+
Omit<OpenAICompat, "openRouterRouting" | "vercelGatewayRouting" | "extraBody" | "toolStrictMode">
|
|
8
|
+
> & {
|
|
9
|
+
openRouterRouting?: OpenAICompat["openRouterRouting"];
|
|
10
|
+
vercelGatewayRouting?: OpenAICompat["vercelGatewayRouting"];
|
|
11
|
+
extraBody?: OpenAICompat["extraBody"];
|
|
12
|
+
toolStrictMode: ResolvedToolStrictMode;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function detectStrictModeSupport(provider: string, baseUrl: string): boolean {
|
|
16
|
+
if (
|
|
17
|
+
provider === "openai" ||
|
|
18
|
+
provider === "openrouter" ||
|
|
19
|
+
provider === "cerebras" ||
|
|
20
|
+
provider === "together" ||
|
|
21
|
+
provider === "github-copilot" ||
|
|
22
|
+
provider === "zenmux"
|
|
23
|
+
) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const normalizedBaseUrl = baseUrl.toLowerCase();
|
|
28
|
+
return (
|
|
29
|
+
normalizedBaseUrl.includes("api.openai.com") ||
|
|
30
|
+
normalizedBaseUrl.includes(".openai.azure.com") ||
|
|
31
|
+
normalizedBaseUrl.includes("models.inference.ai.azure.com") ||
|
|
32
|
+
normalizedBaseUrl.includes("api.cerebras.ai") ||
|
|
33
|
+
normalizedBaseUrl.includes("api.together.xyz") ||
|
|
34
|
+
normalizedBaseUrl.includes("openrouter.ai") ||
|
|
35
|
+
normalizedBaseUrl.includes("api.deepseek.com") ||
|
|
36
|
+
normalizedBaseUrl.includes("deepseek.com")
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Detect compatibility settings from provider and baseUrl for known providers.
|
|
42
|
+
* Provider takes precedence over URL-based detection since it's explicitly configured.
|
|
43
|
+
* @param model - The model configuration
|
|
44
|
+
* @param resolvedBaseUrl - Optional resolved base URL (e.g., after GitHub Copilot proxy-ep resolution).
|
|
45
|
+
* If provided, this takes precedence over model.baseUrl for URL-based checks.
|
|
46
|
+
*/
|
|
47
|
+
export function detectOpenAICompat(model: Model<"openai-completions">, resolvedBaseUrl?: string): ResolvedOpenAICompat {
|
|
48
|
+
const provider = model.provider;
|
|
49
|
+
// Use resolvedBaseUrl if provided (e.g., after GitHub Copilot proxy-ep resolution)
|
|
50
|
+
const baseUrl = resolvedBaseUrl ?? model.baseUrl;
|
|
51
|
+
|
|
52
|
+
const isCerebras = provider === "cerebras" || baseUrl.includes("cerebras.ai");
|
|
53
|
+
const isZai = provider === "zai" || baseUrl.includes("api.z.ai");
|
|
54
|
+
const isKimiModel = model.id.includes("moonshotai/kimi") || /^kimi[-.]/i.test(model.id);
|
|
55
|
+
const isAlibaba = provider === "alibaba-coding-plan" || baseUrl.includes("dashscope");
|
|
56
|
+
const isQwen = model.id.toLowerCase().includes("qwen");
|
|
57
|
+
|
|
58
|
+
const isNonStandard =
|
|
59
|
+
isCerebras ||
|
|
60
|
+
provider === "xai" ||
|
|
61
|
+
baseUrl.includes("api.x.ai") ||
|
|
62
|
+
provider === "mistral" ||
|
|
63
|
+
baseUrl.includes("mistral.ai") ||
|
|
64
|
+
baseUrl.includes("chutes.ai") ||
|
|
65
|
+
baseUrl.includes("deepseek.com") ||
|
|
66
|
+
isAlibaba ||
|
|
67
|
+
isZai ||
|
|
68
|
+
isQwen ||
|
|
69
|
+
provider === "opencode-zen" ||
|
|
70
|
+
provider === "opencode-go" ||
|
|
71
|
+
baseUrl.includes("opencode.ai");
|
|
72
|
+
|
|
73
|
+
const useMaxTokens = provider === "mistral" || baseUrl.includes("mistral.ai") || baseUrl.includes("chutes.ai");
|
|
74
|
+
const isGrok = provider === "xai" || baseUrl.includes("api.x.ai");
|
|
75
|
+
const isMistral = provider === "mistral" || baseUrl.includes("mistral.ai");
|
|
76
|
+
|
|
77
|
+
const reasoningEffortMap: NonNullable<OpenAICompat["reasoningEffortMap"]> =
|
|
78
|
+
provider === "groq" && model.id === "qwen/qwen3-32b"
|
|
79
|
+
? ({
|
|
80
|
+
minimal: "default",
|
|
81
|
+
low: "default",
|
|
82
|
+
medium: "default",
|
|
83
|
+
high: "default",
|
|
84
|
+
xhigh: "default",
|
|
85
|
+
} satisfies Partial<Record<OpenAIReasoningEffort, string>>)
|
|
86
|
+
: {};
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
supportsStore: !isNonStandard,
|
|
90
|
+
supportsDeveloperRole: !isNonStandard,
|
|
91
|
+
supportsReasoningEffort: !isGrok && !isZai,
|
|
92
|
+
reasoningEffortMap,
|
|
93
|
+
supportsUsageInStreaming: !isCerebras,
|
|
94
|
+
supportsToolChoice: true,
|
|
95
|
+
maxTokensField: useMaxTokens ? "max_tokens" : "max_completion_tokens",
|
|
96
|
+
requiresToolResultName: isMistral,
|
|
97
|
+
requiresAssistantAfterToolResult: false,
|
|
98
|
+
requiresThinkingAsText: isMistral,
|
|
99
|
+
requiresMistralToolIds: isMistral,
|
|
100
|
+
thinkingFormat: isZai
|
|
101
|
+
? "zai"
|
|
102
|
+
: provider === "openrouter" || baseUrl.includes("openrouter.ai")
|
|
103
|
+
? "openrouter"
|
|
104
|
+
: isAlibaba || isQwen
|
|
105
|
+
? "qwen"
|
|
106
|
+
: "openai",
|
|
107
|
+
reasoningContentField: "reasoning_content",
|
|
108
|
+
requiresReasoningContentForToolCalls: isKimiModel,
|
|
109
|
+
requiresAssistantContentForToolCalls: isKimiModel,
|
|
110
|
+
openRouterRouting: undefined,
|
|
111
|
+
vercelGatewayRouting: undefined,
|
|
112
|
+
supportsStrictMode: detectStrictModeSupport(provider, baseUrl),
|
|
113
|
+
extraBody: undefined,
|
|
114
|
+
toolStrictMode: isCerebras ? "all_strict" : "mixed",
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Resolve compatibility settings by layering explicit model.compat overrides onto
|
|
120
|
+
* the detected defaults. This is the canonical compat view for both metadata and transport.
|
|
121
|
+
* @param model - The model configuration
|
|
122
|
+
* @param resolvedBaseUrl - Optional resolved base URL (e.g., after GitHub Copilot proxy-ep resolution).
|
|
123
|
+
* If provided, this takes precedence over model.baseUrl for URL-based checks.
|
|
124
|
+
*/
|
|
125
|
+
export function resolveOpenAICompat(
|
|
126
|
+
model: Model<"openai-completions">,
|
|
127
|
+
resolvedBaseUrl?: string,
|
|
128
|
+
): ResolvedOpenAICompat {
|
|
129
|
+
const detected = detectOpenAICompat(model, resolvedBaseUrl);
|
|
130
|
+
if (!model.compat) {
|
|
131
|
+
return detected;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return {
|
|
135
|
+
supportsStore: model.compat.supportsStore ?? detected.supportsStore,
|
|
136
|
+
supportsDeveloperRole: model.compat.supportsDeveloperRole ?? detected.supportsDeveloperRole,
|
|
137
|
+
supportsReasoningEffort: model.compat.supportsReasoningEffort ?? detected.supportsReasoningEffort,
|
|
138
|
+
reasoningEffortMap: model.compat.reasoningEffortMap ?? detected.reasoningEffortMap,
|
|
139
|
+
supportsUsageInStreaming: model.compat.supportsUsageInStreaming ?? detected.supportsUsageInStreaming,
|
|
140
|
+
supportsToolChoice: model.compat.supportsToolChoice ?? detected.supportsToolChoice,
|
|
141
|
+
maxTokensField: model.compat.maxTokensField ?? detected.maxTokensField,
|
|
142
|
+
requiresToolResultName: model.compat.requiresToolResultName ?? detected.requiresToolResultName,
|
|
143
|
+
requiresAssistantAfterToolResult:
|
|
144
|
+
model.compat.requiresAssistantAfterToolResult ?? detected.requiresAssistantAfterToolResult,
|
|
145
|
+
requiresThinkingAsText: model.compat.requiresThinkingAsText ?? detected.requiresThinkingAsText,
|
|
146
|
+
requiresMistralToolIds: model.compat.requiresMistralToolIds ?? detected.requiresMistralToolIds,
|
|
147
|
+
thinkingFormat: model.compat.thinkingFormat ?? detected.thinkingFormat,
|
|
148
|
+
reasoningContentField: model.compat.reasoningContentField ?? detected.reasoningContentField,
|
|
149
|
+
requiresReasoningContentForToolCalls:
|
|
150
|
+
model.compat.requiresReasoningContentForToolCalls ?? detected.requiresReasoningContentForToolCalls,
|
|
151
|
+
requiresAssistantContentForToolCalls:
|
|
152
|
+
model.compat.requiresAssistantContentForToolCalls ?? detected.requiresAssistantContentForToolCalls,
|
|
153
|
+
openRouterRouting: model.compat.openRouterRouting ?? detected.openRouterRouting,
|
|
154
|
+
vercelGatewayRouting: model.compat.vercelGatewayRouting ?? detected.vercelGatewayRouting,
|
|
155
|
+
supportsStrictMode: model.compat.supportsStrictMode ?? detected.supportsStrictMode,
|
|
156
|
+
extraBody: model.compat.extraBody,
|
|
157
|
+
toolStrictMode: model.compat.toolStrictMode ?? detected.toolStrictMode,
|
|
158
|
+
};
|
|
159
|
+
}
|