promptopskit 0.4.2 → 0.6.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/README.md +105 -62
- package/SKILL.md +376 -16
- package/dist/{chunk-7MRMN3SW.js → chunk-55B7QQBK.js} +6 -4
- package/dist/chunk-55B7QQBK.js.map +1 -0
- package/dist/{chunk-HWEVRBKZ.js → chunk-AGTGIZMR.js} +6 -2
- package/dist/chunk-AGTGIZMR.js.map +1 -0
- package/dist/chunk-FNCIBZJF.js +130 -0
- package/dist/chunk-FNCIBZJF.js.map +1 -0
- package/dist/{chunk-XL76NHZR.js → chunk-GLT3YYWK.js} +6 -4
- package/dist/chunk-GLT3YYWK.js.map +1 -0
- package/dist/{chunk-5AAYDOPU.js → chunk-IPFD5Y3O.js} +4 -3
- package/dist/chunk-IPFD5Y3O.js.map +1 -0
- package/dist/{chunk-YI4LILPY.js → chunk-JR7252DG.js} +584 -520
- package/dist/chunk-JR7252DG.js.map +1 -0
- package/dist/{chunk-JKBWC5WJ.js → chunk-UY5OKMVP.js} +302 -21
- package/dist/chunk-UY5OKMVP.js.map +1 -0
- package/dist/{chunk-MI3M6KDD.js → chunk-VMLGUI4F.js} +6 -4
- package/dist/chunk-VMLGUI4F.js.map +1 -0
- package/dist/{chunk-Z4IPWEUU.js → chunk-XEZJZ3IG.js} +6 -4
- package/dist/chunk-XEZJZ3IG.js.map +1 -0
- package/dist/cli/index.js +435 -106
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +1159 -636
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -9
- package/dist/index.d.ts +10 -9
- package/dist/index.js +79 -17
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.cjs +875 -533
- package/dist/providers/anthropic.cjs.map +1 -1
- package/dist/providers/anthropic.d.cts +2 -2
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +3 -3
- package/dist/providers/gemini.cjs +875 -533
- package/dist/providers/gemini.cjs.map +1 -1
- package/dist/providers/gemini.d.cts +2 -2
- package/dist/providers/gemini.d.ts +2 -2
- package/dist/providers/gemini.js +3 -3
- package/dist/providers/llmasaservice.cjs +1735 -0
- package/dist/providers/llmasaservice.cjs.map +1 -0
- package/dist/providers/llmasaservice.d.cts +28 -0
- package/dist/providers/llmasaservice.d.ts +28 -0
- package/dist/providers/llmasaservice.js +20 -0
- package/dist/providers/llmasaservice.js.map +1 -0
- package/dist/providers/openai-responses.cjs +875 -533
- package/dist/providers/openai-responses.cjs.map +1 -1
- package/dist/providers/openai-responses.d.cts +2 -2
- package/dist/providers/openai-responses.d.ts +2 -2
- package/dist/providers/openai-responses.js +3 -3
- package/dist/providers/openai.cjs +875 -533
- package/dist/providers/openai.cjs.map +1 -1
- package/dist/providers/openai.d.cts +2 -2
- package/dist/providers/openai.d.ts +2 -2
- package/dist/providers/openai.js +3 -3
- package/dist/providers/openrouter.cjs +876 -533
- package/dist/providers/openrouter.cjs.map +1 -1
- package/dist/providers/openrouter.d.cts +2 -2
- package/dist/providers/openrouter.d.ts +2 -2
- package/dist/providers/openrouter.js +4 -4
- package/dist/{schema-B9A1zLRk.d.cts → schema-CuYsv8JA.d.cts} +853 -7
- package/dist/{schema-B9A1zLRk.d.ts → schema-CuYsv8JA.d.ts} +853 -7
- package/dist/testing.cjs +64 -9
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/dist/{types-DjGAwJxC.d.ts → types-DpK0mTHL.d.ts} +18 -6
- package/dist/{types-DpbzzZO2.d.cts → types-UA_p9uJy.d.cts} +18 -6
- package/dist/usagetap/index.cjs +6 -1
- package/dist/usagetap/index.cjs.map +1 -1
- package/dist/usagetap/index.d.cts +4 -3
- package/dist/usagetap/index.d.ts +4 -3
- package/dist/usagetap/index.js +3 -1
- package/package.json +19 -2
- package/dist/chunk-5AAYDOPU.js.map +0 -1
- package/dist/chunk-7MRMN3SW.js.map +0 -1
- package/dist/chunk-HWEVRBKZ.js.map +0 -1
- package/dist/chunk-JKBWC5WJ.js.map +0 -1
- package/dist/chunk-MI3M6KDD.js.map +0 -1
- package/dist/chunk-XL76NHZR.js.map +0 -1
- package/dist/chunk-YI4LILPY.js.map +0 -1
- package/dist/chunk-Z4IPWEUU.js.map +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import {
|
|
2
|
+
openaiAdapter
|
|
3
|
+
} from "./chunk-GLT3YYWK.js";
|
|
4
|
+
import {
|
|
5
|
+
applyRawProviderBody,
|
|
6
|
+
resolveAssetForProvider,
|
|
7
|
+
withPromptInputSupport
|
|
8
|
+
} from "./chunk-JR7252DG.js";
|
|
9
|
+
|
|
10
|
+
// src/providers/llmasaservice.ts
|
|
11
|
+
var LLMASASERVICE_BASE_URL = "https://gateway.llmasaservice.io";
|
|
12
|
+
var LLMASASERVICE_SDK_PLACEHOLDER_API_KEY = "not-used-by-llm-gateway";
|
|
13
|
+
var LLMASASERVICE_DEFAULT_MODEL = "group:standard";
|
|
14
|
+
var LLMASASERVICE_RESPONSE_HEADER_NAMES = [
|
|
15
|
+
"x-request-id",
|
|
16
|
+
"x-llm-model-id",
|
|
17
|
+
"x-llm-model-group"
|
|
18
|
+
];
|
|
19
|
+
function createLLMAsAServiceOpenAIConfig(options = {}) {
|
|
20
|
+
return {
|
|
21
|
+
baseURL: options.baseURL ?? LLMASASERVICE_BASE_URL,
|
|
22
|
+
apiKey: LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
|
|
23
|
+
defaultHeaders: {
|
|
24
|
+
"x-project-id": options.projectId ?? ""
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function isGPT5ModelSelector(model) {
|
|
29
|
+
if (!model) return false;
|
|
30
|
+
return model.split(/[|,]/).map((candidate) => candidate.trim()).some((candidate) => candidate.startsWith("gpt-5") || candidate.startsWith("openai:gpt-5"));
|
|
31
|
+
}
|
|
32
|
+
function defaultModel() {
|
|
33
|
+
return LLMASASERVICE_DEFAULT_MODEL;
|
|
34
|
+
}
|
|
35
|
+
function isRecord(value) {
|
|
36
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
37
|
+
}
|
|
38
|
+
function rawCustomerId(asset) {
|
|
39
|
+
const customer = isRecord(asset.raw?.llmasaservice?.customer) ? asset.raw.llmasaservice.customer : void 0;
|
|
40
|
+
return customer?.customer_id;
|
|
41
|
+
}
|
|
42
|
+
function isGatewayRenderValidation(runtime) {
|
|
43
|
+
return runtime?.runtime !== void 0;
|
|
44
|
+
}
|
|
45
|
+
var llmasaserviceAdapter = withPromptInputSupport({
|
|
46
|
+
name: "llmasaservice",
|
|
47
|
+
validate(asset, runtime) {
|
|
48
|
+
const resolvedAsset = resolveAssetForProvider(asset, runtime);
|
|
49
|
+
const validation = openaiAdapter.validate(
|
|
50
|
+
{
|
|
51
|
+
...resolvedAsset,
|
|
52
|
+
model: resolvedAsset.model ?? defaultModel()
|
|
53
|
+
},
|
|
54
|
+
runtime
|
|
55
|
+
);
|
|
56
|
+
const warnings = validation.warnings.filter(
|
|
57
|
+
(warning) => warning !== "OpenAI adapter requires a model to be specified."
|
|
58
|
+
);
|
|
59
|
+
const errors = [...validation.errors];
|
|
60
|
+
const gatewayOptions = resolvedAsset.provider_options?.llmasaservice;
|
|
61
|
+
const missingProjectId = !gatewayOptions?.project_id;
|
|
62
|
+
const missingCustomerId = !gatewayOptions?.customer?.customer_id && typeof rawCustomerId(resolvedAsset) !== "string";
|
|
63
|
+
const validateRenderMetadata = isGatewayRenderValidation(runtime);
|
|
64
|
+
if (missingProjectId && validateRenderMetadata) {
|
|
65
|
+
errors.push(
|
|
66
|
+
"LLMAsAService adapter requires provider_options.llmasaservice.project_id for x-project-id routing."
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
if (missingCustomerId && validateRenderMetadata) {
|
|
70
|
+
errors.push(
|
|
71
|
+
"LLMAsAService adapter requires customer.customer_id in provider_options.llmasaservice.customer or raw.llmasaservice.customer."
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
if ((missingProjectId || missingCustomerId) && !validateRenderMetadata) {
|
|
75
|
+
warnings.push(
|
|
76
|
+
"LLMAsAService project_id and customer.customer_id must be supplied before rendering, usually through runtime provider_options."
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
valid: errors.length === 0,
|
|
81
|
+
errors,
|
|
82
|
+
warnings
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
render(asset, runtime) {
|
|
86
|
+
const resolvedAsset = resolveAssetForProvider(asset, runtime);
|
|
87
|
+
const options = resolvedAsset.provider_options?.llmasaservice;
|
|
88
|
+
const model = resolvedAsset.model ?? defaultModel();
|
|
89
|
+
const result = openaiAdapter.render(
|
|
90
|
+
{ ...resolvedAsset, model, raw: void 0 },
|
|
91
|
+
{
|
|
92
|
+
variables: runtime.variables,
|
|
93
|
+
history: runtime.history,
|
|
94
|
+
onHistoryCompaction: runtime.onHistoryCompaction,
|
|
95
|
+
toolRegistry: runtime.toolRegistry,
|
|
96
|
+
strict: runtime.strict
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
let body = { ...result.body };
|
|
100
|
+
if (isGPT5ModelSelector(model) && body.max_tokens !== void 0 && body.max_completion_tokens === void 0) {
|
|
101
|
+
body.max_completion_tokens = body.max_tokens;
|
|
102
|
+
delete body.max_tokens;
|
|
103
|
+
}
|
|
104
|
+
if (options?.customer !== void 0) body.customer = options.customer;
|
|
105
|
+
if (options?.conversationId !== void 0) body.conversationId = options.conversationId;
|
|
106
|
+
if (options?.conversationTitle !== void 0) body.conversationTitle = options.conversationTitle;
|
|
107
|
+
if (options?.projectId !== void 0) body.projectId = options.projectId;
|
|
108
|
+
body = applyRawProviderBody(body, resolvedAsset, "llmasaservice");
|
|
109
|
+
const projectId = options?.project_id ?? "";
|
|
110
|
+
return {
|
|
111
|
+
body,
|
|
112
|
+
provider: "llmasaservice",
|
|
113
|
+
model,
|
|
114
|
+
baseURL: options?.base_url ?? LLMASASERVICE_BASE_URL,
|
|
115
|
+
headers: {
|
|
116
|
+
"x-project-id": projectId
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
export {
|
|
123
|
+
LLMASASERVICE_BASE_URL,
|
|
124
|
+
LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,
|
|
125
|
+
LLMASASERVICE_DEFAULT_MODEL,
|
|
126
|
+
LLMASASERVICE_RESPONSE_HEADER_NAMES,
|
|
127
|
+
createLLMAsAServiceOpenAIConfig,
|
|
128
|
+
llmasaserviceAdapter
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=chunk-FNCIBZJF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/llmasaservice.ts"],"sourcesContent":["import { openaiAdapter } from './openai.js';\nimport type { ResolvedPromptAsset } from '../schema/index.js';\nimport type {\n ProviderAdapter,\n ProviderRequest,\n RuntimeRenderOptions,\n ValidationResult,\n} from './types.js';\nimport { applyRawProviderBody } from './raw.js';\nimport { resolveAssetForProvider } from './resolve-asset.js';\nimport { withPromptInputSupport } from './prompt-input.js';\n\nexport const LLMASASERVICE_BASE_URL = 'https://gateway.llmasaservice.io';\nexport const LLMASASERVICE_SDK_PLACEHOLDER_API_KEY = 'not-used-by-llm-gateway';\nexport const LLMASASERVICE_DEFAULT_MODEL = 'group:standard';\nexport const LLMASASERVICE_RESPONSE_HEADER_NAMES = [\n 'x-request-id',\n 'x-llm-model-id',\n 'x-llm-model-group',\n] as const;\n\nexport interface LLMAsAServiceOpenAIConfig {\n baseURL: string;\n apiKey: string;\n defaultHeaders: {\n 'x-project-id': string;\n };\n}\n\nexport interface LLMAsAServiceOpenAIConfigOptions {\n baseURL?: string;\n projectId?: string;\n}\n\nexport function createLLMAsAServiceOpenAIConfig(\n options: LLMAsAServiceOpenAIConfigOptions = {},\n): LLMAsAServiceOpenAIConfig {\n return {\n baseURL: options.baseURL ?? LLMASASERVICE_BASE_URL,\n apiKey: LLMASASERVICE_SDK_PLACEHOLDER_API_KEY,\n defaultHeaders: {\n 'x-project-id': options.projectId ?? '',\n },\n };\n}\n\nfunction isGPT5ModelSelector(model: string | undefined): boolean {\n if (!model) return false;\n return model\n .split(/[|,]/)\n .map((candidate) => candidate.trim())\n .some((candidate) => candidate.startsWith('gpt-5') || candidate.startsWith('openai:gpt-5'));\n}\n\nfunction defaultModel(): string {\n return LLMASASERVICE_DEFAULT_MODEL;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction rawCustomerId(asset: ResolvedPromptAsset): unknown {\n const customer = isRecord(asset.raw?.llmasaservice?.customer)\n ? asset.raw.llmasaservice.customer\n : undefined;\n return customer?.customer_id;\n}\n\nfunction isGatewayRenderValidation(runtime: RuntimeRenderOptions | undefined): boolean {\n return runtime?.runtime !== undefined;\n}\n\n/**\n * LLMAsAService gateway adapter.\n * Uses the OpenAI Chat Completions body shape, plus gateway routing and\n * attribution fields supported by gateway.llmasaservice.io.\n */\nexport const llmasaserviceAdapter: ProviderAdapter = withPromptInputSupport({\n name: 'llmasaservice',\n\n validate(asset: ResolvedPromptAsset, runtime?: RuntimeRenderOptions): ValidationResult {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const validation = openaiAdapter.validate(\n {\n ...resolvedAsset,\n model: resolvedAsset.model ?? defaultModel(),\n },\n runtime,\n );\n const warnings = validation.warnings.filter(\n (warning) => warning !== 'OpenAI adapter requires a model to be specified.',\n );\n\n const errors = [...validation.errors];\n const gatewayOptions = resolvedAsset.provider_options?.llmasaservice;\n const missingProjectId = !gatewayOptions?.project_id;\n const missingCustomerId =\n !gatewayOptions?.customer?.customer_id && typeof rawCustomerId(resolvedAsset) !== 'string';\n const validateRenderMetadata = isGatewayRenderValidation(runtime);\n\n if (missingProjectId && validateRenderMetadata) {\n errors.push(\n 'LLMAsAService adapter requires provider_options.llmasaservice.project_id for x-project-id routing.',\n );\n }\n\n if (missingCustomerId && validateRenderMetadata) {\n errors.push(\n 'LLMAsAService adapter requires customer.customer_id in provider_options.llmasaservice.customer or raw.llmasaservice.customer.',\n );\n }\n\n if ((missingProjectId || missingCustomerId) && !validateRenderMetadata) {\n warnings.push(\n 'LLMAsAService project_id and customer.customer_id must be supplied before rendering, usually through runtime provider_options.',\n );\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const options = resolvedAsset.provider_options?.llmasaservice;\n const model = resolvedAsset.model ?? defaultModel();\n const result = openaiAdapter.render(\n { ...resolvedAsset, model, raw: undefined },\n {\n variables: runtime.variables,\n history: runtime.history,\n onHistoryCompaction: runtime.onHistoryCompaction,\n toolRegistry: runtime.toolRegistry,\n strict: runtime.strict,\n },\n );\n let body = { ...result.body };\n\n if (isGPT5ModelSelector(model) && body.max_tokens !== undefined && body.max_completion_tokens === undefined) {\n body.max_completion_tokens = body.max_tokens;\n delete body.max_tokens;\n }\n\n if (options?.customer !== undefined) body.customer = options.customer;\n if (options?.conversationId !== undefined) body.conversationId = options.conversationId;\n if (options?.conversationTitle !== undefined) body.conversationTitle = options.conversationTitle;\n if (options?.projectId !== undefined) body.projectId = options.projectId;\n\n body = applyRawProviderBody(body, resolvedAsset, 'llmasaservice');\n\n const projectId = options?.project_id ?? '';\n\n return {\n body,\n provider: 'llmasaservice',\n model,\n baseURL: options?.base_url ?? LLMASASERVICE_BASE_URL,\n headers: {\n 'x-project-id': projectId,\n },\n };\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
applyRawProviderBody,
|
|
3
|
+
compactHistoryForPrompt,
|
|
3
4
|
renderSections,
|
|
4
5
|
resolveAssetForProvider,
|
|
5
6
|
withPromptInputSupport
|
|
6
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JR7252DG.js";
|
|
7
8
|
|
|
8
9
|
// src/providers/openai.ts
|
|
9
10
|
var openaiAdapter = withPromptInputSupport({
|
|
@@ -33,8 +34,9 @@ var openaiAdapter = withPromptInputSupport({
|
|
|
33
34
|
if (sections.system_instructions) {
|
|
34
35
|
messages.push({ role: "system", content: sections.system_instructions });
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
const history = compactHistoryForPrompt(resolvedAsset, runtime);
|
|
38
|
+
if (history) {
|
|
39
|
+
for (const msg of history) {
|
|
38
40
|
messages.push({ role: msg.role, content: msg.content });
|
|
39
41
|
}
|
|
40
42
|
}
|
|
@@ -105,4 +107,4 @@ var openaiAdapter = withPromptInputSupport({
|
|
|
105
107
|
export {
|
|
106
108
|
openaiAdapter
|
|
107
109
|
};
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
110
|
+
//# sourceMappingURL=chunk-GLT3YYWK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/openai.ts"],"sourcesContent":["import type { ResolvedPromptAsset } from '../schema/index.js';\nimport type {\n ProviderAdapter,\n ProviderRequest,\n ValidationResult,\n RuntimeRenderOptions,\n} from './types.js';\nimport { renderSections } from '../renderer/index.js';\nimport { resolveAssetForProvider } from './resolve-asset.js';\nimport { withPromptInputSupport } from './prompt-input.js';\nimport { applyRawProviderBody } from './raw.js';\nimport { compactHistoryForPrompt } from '../history.js';\n\n/**\n * OpenAI provider adapter.\n * Produces request bodies compatible with the OpenAI Chat Completions API.\n */\nexport const openaiAdapter: ProviderAdapter = withPromptInputSupport({\n name: 'openai',\n\n validate(asset: ResolvedPromptAsset, runtime?: RuntimeRenderOptions): ValidationResult {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!resolvedAsset.model) {\n errors.push('OpenAI adapter requires a model to be specified.');\n }\n\n if (resolvedAsset.reasoning?.budget_tokens !== undefined) {\n warnings.push('OpenAI uses reasoning_effort, not budget_tokens. budget_tokens will be ignored.');\n }\n\n if (resolvedAsset.response?.schema !== undefined && resolvedAsset.response?.format !== 'json') {\n warnings.push('OpenAI response.schema requires response.format: json. schema will still be applied as JSON schema output.');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const sections = renderSections(resolvedAsset, {\n variables: runtime.variables,\n strict: runtime.strict,\n });\n\n const messages: Array<Record<string, unknown>> = [];\n\n // System message\n if (sections.system_instructions) {\n messages.push({ role: 'system', content: sections.system_instructions });\n }\n\n // History\n const history = compactHistoryForPrompt(resolvedAsset, runtime);\n if (history) {\n for (const msg of history) {\n messages.push({ role: msg.role, content: msg.content });\n }\n }\n\n // User message (prompt template)\n if (sections.prompt_template) {\n messages.push({ role: 'user', content: sections.prompt_template });\n }\n\n const body: Record<string, unknown> = {\n model: resolvedAsset.model,\n messages,\n };\n const openaiCacheConfig = resolvedAsset.cache?.openai;\n\n // Sampling params\n if (resolvedAsset.sampling?.temperature !== undefined) body.temperature = resolvedAsset.sampling.temperature;\n if (resolvedAsset.sampling?.top_p !== undefined) body.top_p = resolvedAsset.sampling.top_p;\n if (resolvedAsset.sampling?.frequency_penalty !== undefined) body.frequency_penalty = resolvedAsset.sampling.frequency_penalty;\n if (resolvedAsset.sampling?.presence_penalty !== undefined) body.presence_penalty = resolvedAsset.sampling.presence_penalty;\n if (resolvedAsset.sampling?.stop !== undefined) body.stop = resolvedAsset.sampling.stop;\n if (resolvedAsset.sampling?.max_output_tokens !== undefined) body.max_tokens = resolvedAsset.sampling.max_output_tokens;\n\n // Reasoning\n if (resolvedAsset.reasoning?.effort) {\n body.reasoning_effort = resolvedAsset.reasoning.effort;\n }\n\n // Response format\n if (resolvedAsset.response?.schema) {\n body.response_format = {\n type: 'json_schema',\n json_schema: {\n name: resolvedAsset.response.schema_name ?? `${resolvedAsset.id}_response`,\n ...(resolvedAsset.response.schema_description ? { description: resolvedAsset.response.schema_description } : {}),\n schema: resolvedAsset.response.schema,\n strict: resolvedAsset.response.schema_strict ?? true,\n },\n };\n } else if (resolvedAsset.response?.format === 'json') {\n body.response_format = { type: 'json_object' };\n }\n\n // Streaming\n if (resolvedAsset.response?.stream !== undefined) {\n body.stream = resolvedAsset.response.stream;\n }\n\n if (openaiCacheConfig?.prompt_cache_key) {\n body.prompt_cache_key = openaiCacheConfig.prompt_cache_key;\n }\n if (openaiCacheConfig?.retention) {\n body.prompt_cache_retention = openaiCacheConfig.retention;\n }\n\n // Tools\n if (resolvedAsset.tools && resolvedAsset.tools.length > 0) {\n body.tools = resolvedAsset.tools.map((tool) => {\n if (typeof tool === 'string') {\n // Look up from registry\n const def = runtime.toolRegistry?.[tool];\n if (def) return def;\n return { type: 'function', function: { name: tool } };\n }\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.input_schema,\n },\n };\n });\n }\n\n return {\n body: applyRawProviderBody(body, resolvedAsset, 'openai'),\n provider: 'openai',\n model: resolvedAsset.model ?? 'unknown',\n };\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
openaiAdapter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GLT3YYWK.js";
|
|
4
4
|
import {
|
|
5
5
|
applyRawProviderBody,
|
|
6
6
|
resolveAssetForProvider,
|
|
7
7
|
withPromptInputSupport
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-JR7252DG.js";
|
|
9
9
|
|
|
10
10
|
// src/providers/openrouter.ts
|
|
11
11
|
var openrouterAdapter = withPromptInputSupport({
|
|
@@ -33,6 +33,7 @@ var openrouterAdapter = withPromptInputSupport({
|
|
|
33
33
|
{
|
|
34
34
|
variables: runtime.variables,
|
|
35
35
|
history: runtime.history,
|
|
36
|
+
onHistoryCompaction: runtime.onHistoryCompaction,
|
|
36
37
|
toolRegistry: runtime.toolRegistry,
|
|
37
38
|
strict: runtime.strict
|
|
38
39
|
}
|
|
@@ -57,4 +58,4 @@ var openrouterAdapter = withPromptInputSupport({
|
|
|
57
58
|
export {
|
|
58
59
|
openrouterAdapter
|
|
59
60
|
};
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
61
|
+
//# sourceMappingURL=chunk-IPFD5Y3O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/openrouter.ts"],"sourcesContent":["import { openaiAdapter } from './openai.js';\nimport type { ResolvedPromptAsset } from '../schema/index.js';\nimport type {\n ProviderAdapter,\n ProviderRequest,\n ValidationResult,\n RuntimeRenderOptions,\n} from './types.js';\nimport { withPromptInputSupport } from './prompt-input.js';\nimport { applyRawProviderBody } from './raw.js';\nimport { resolveAssetForProvider } from './resolve-asset.js';\n\n/**\n * OpenRouter provider adapter.\n * Thin preset over the OpenAI adapter — body format is identical,\n * only the provider label differs. The app handles the different\n * base URL and extra headers (HTTP-Referer, X-Title).\n */\nexport const openrouterAdapter: ProviderAdapter = withPromptInputSupport({\n name: 'openrouter',\n\n validate(asset: ResolvedPromptAsset, runtime?: RuntimeRenderOptions): ValidationResult {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const validation = openaiAdapter.validate(asset, runtime);\n const hasOpenRouterModels = (resolvedAsset.provider_options?.openrouter?.models?.length ?? 0) > 0;\n\n if (!hasOpenRouterModels) {\n return validation;\n }\n\n const modelRequiredError = 'OpenAI adapter requires a model to be specified.';\n const errors = validation.errors.filter((error) => error !== modelRequiredError);\n const warnings = validation.warnings.filter((warning) => warning !== modelRequiredError);\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const result = openaiAdapter.render(\n { ...resolvedAsset, raw: undefined },\n {\n variables: runtime.variables,\n history: runtime.history,\n onHistoryCompaction: runtime.onHistoryCompaction,\n toolRegistry: runtime.toolRegistry,\n strict: runtime.strict,\n },\n );\n const openrouterOptions = resolvedAsset.provider_options?.openrouter;\n let body = { ...result.body };\n\n if (openrouterOptions?.provider !== undefined) body.provider = openrouterOptions.provider;\n if (openrouterOptions?.transforms !== undefined) body.transforms = openrouterOptions.transforms;\n if (openrouterOptions?.plugins !== undefined) body.plugins = openrouterOptions.plugins;\n if (openrouterOptions?.models !== undefined) body.models = openrouterOptions.models;\n if (body.model === undefined) delete body.model;\n\n body = applyRawProviderBody(body, resolvedAsset, 'openrouter');\n\n return {\n ...result,\n body,\n provider: 'openrouter',\n model: resolvedAsset.model ?? openrouterOptions?.models?.[0] ?? 'unknown',\n };\n },\n});\n"],"mappings":";;;;;;;;;;AAkBO,IAAM,oBAAqC,uBAAuB;AAAA,EACvE,MAAM;AAAA,EAEN,SAAS,OAA4B,SAAkD;AACrF,UAAM,gBAAgB,wBAAwB,OAAO,OAAO;AAC5D,UAAM,aAAa,cAAc,SAAS,OAAO,OAAO;AACxD,UAAM,uBAAuB,cAAc,kBAAkB,YAAY,QAAQ,UAAU,KAAK;AAEhG,QAAI,CAAC,qBAAqB;AACxB,aAAO;AAAA,IACT;AAEA,UAAM,qBAAqB;AAC3B,UAAM,SAAS,WAAW,OAAO,OAAO,CAAC,UAAU,UAAU,kBAAkB;AAC/E,UAAM,WAAW,WAAW,SAAS,OAAO,CAAC,YAAY,YAAY,kBAAkB;AAEvF,WAAO;AAAA,MACL,OAAO,OAAO,WAAW;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,OAA4B,SAAgD;AACjF,UAAM,gBAAgB,wBAAwB,OAAO,OAAO;AAC5D,UAAM,SAAS,cAAc;AAAA,MAC3B,EAAE,GAAG,eAAe,KAAK,OAAU;AAAA,MACnC;AAAA,QACE,WAAW,QAAQ;AAAA,QACnB,SAAS,QAAQ;AAAA,QACjB,qBAAqB,QAAQ;AAAA,QAC7B,cAAc,QAAQ;AAAA,QACtB,QAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AACA,UAAM,oBAAoB,cAAc,kBAAkB;AAC1D,QAAI,OAAO,EAAE,GAAG,OAAO,KAAK;AAE5B,QAAI,mBAAmB,aAAa,OAAW,MAAK,WAAW,kBAAkB;AACjF,QAAI,mBAAmB,eAAe,OAAW,MAAK,aAAa,kBAAkB;AACrF,QAAI,mBAAmB,YAAY,OAAW,MAAK,UAAU,kBAAkB;AAC/E,QAAI,mBAAmB,WAAW,OAAW,MAAK,SAAS,kBAAkB;AAC7E,QAAI,KAAK,UAAU,OAAW,QAAO,KAAK;AAE1C,WAAO,qBAAqB,MAAM,eAAe,YAAY;AAE7D,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,UAAU;AAAA,MACV,OAAO,cAAc,SAAS,mBAAmB,SAAS,CAAC,KAAK;AAAA,IAClE;AAAA,EACF;AACF,CAAC;","names":[]}
|