@super_studio/ecforce-ai-agent-server 1.4.4 → 1.5.1
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/dist/provider.cjs +12 -12
- package/dist/provider.d.cts.map +1 -1
- package/dist/provider.d.mts.map +1 -1
- package/dist/provider.mjs +12 -12
- package/dist/provider.mjs.map +1 -1
- package/package.json +5 -3
- package/src/provider.ts +17 -32
package/dist/provider.cjs
CHANGED
|
@@ -8,6 +8,11 @@ let _ai_sdk_openai = require("@ai-sdk/openai");
|
|
|
8
8
|
|
|
9
9
|
//#region src/provider.ts
|
|
10
10
|
const _excluded = ["spst"];
|
|
11
|
+
const SPST_PROVIDERS = [
|
|
12
|
+
"openai",
|
|
13
|
+
"google",
|
|
14
|
+
"anthropic"
|
|
15
|
+
];
|
|
11
16
|
const spstProviders = createSpstProviders({});
|
|
12
17
|
function spst(modelId) {
|
|
13
18
|
return createSpstLanguageModel(modelId, spstProviders);
|
|
@@ -60,18 +65,13 @@ function createSpstLanguageModel(modelId, providers, defaultCallerApp) {
|
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
67
|
function parseSpstModelId(modelId) {
|
|
63
|
-
|
|
64
|
-
provider
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
};
|
|
71
|
-
if (modelId.startsWith("anthropic/")) return {
|
|
72
|
-
provider: "anthropic",
|
|
73
|
-
proxyModelId: modelId.slice(10)
|
|
74
|
-
};
|
|
68
|
+
for (const provider of SPST_PROVIDERS) {
|
|
69
|
+
const prefix = `${provider}/`;
|
|
70
|
+
if (modelId.startsWith(prefix)) return {
|
|
71
|
+
provider,
|
|
72
|
+
proxyModelId: modelId.slice(prefix.length)
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
75
|
if (modelId.includes("/")) throw new Error(`Provider '${modelId.split("/")[0]}' is not supported by spst() yet.`);
|
|
76
76
|
throw new Error("The spst() helper currently requires an 'openai/<model>', 'google/<model>', or 'anthropic/<model>' model id.");
|
|
77
77
|
}
|
package/dist/provider.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.cts","names":[],"sources":["../src/provider.ts"],"sourcesContent":[],"mappings":";;;KAOY,mBAAA;;EAAA,KAAA,EAAA,MAAA;EAMA,SAAA,EAAA,MAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.cts","names":[],"sources":["../src/provider.ts"],"sourcesContent":[],"mappings":";;;KAOY,mBAAA;;EAAA,KAAA,EAAA,MAAA;EAMA,SAAA,EAAA,MAAA;AAyBZ,CAAA;AAIgB,KA7BJ,wBAAA,GA8BF;;;;;iBALM,IAAA,mBAAuB;iBAIvB,kBAAA,SACN,kCACA"}
|
package/dist/provider.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.mts","names":[],"sources":["../src/provider.ts"],"sourcesContent":[],"mappings":";;;KAOY,mBAAA;;EAAA,KAAA,EAAA,MAAA;EAMA,SAAA,EAAA,MAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.mts","names":[],"sources":["../src/provider.ts"],"sourcesContent":[],"mappings":";;;KAOY,mBAAA;;EAAA,KAAA,EAAA,MAAA;EAMA,SAAA,EAAA,MAAA;AAyBZ,CAAA;AAIgB,KA7BJ,wBAAA,GA8BF;;;;;iBALM,IAAA,mBAAuB;iBAIvB,kBAAA,SACN,kCACA"}
|
package/dist/provider.mjs
CHANGED
|
@@ -8,6 +8,11 @@ import { createOpenAI } from "@ai-sdk/openai";
|
|
|
8
8
|
|
|
9
9
|
//#region src/provider.ts
|
|
10
10
|
const _excluded = ["spst"];
|
|
11
|
+
const SPST_PROVIDERS = [
|
|
12
|
+
"openai",
|
|
13
|
+
"google",
|
|
14
|
+
"anthropic"
|
|
15
|
+
];
|
|
11
16
|
const spstProviders = createSpstProviders({});
|
|
12
17
|
function spst(modelId) {
|
|
13
18
|
return createSpstLanguageModel(modelId, spstProviders);
|
|
@@ -60,18 +65,13 @@ function createSpstLanguageModel(modelId, providers, defaultCallerApp) {
|
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
67
|
function parseSpstModelId(modelId) {
|
|
63
|
-
|
|
64
|
-
provider
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
};
|
|
71
|
-
if (modelId.startsWith("anthropic/")) return {
|
|
72
|
-
provider: "anthropic",
|
|
73
|
-
proxyModelId: modelId.slice(10)
|
|
74
|
-
};
|
|
68
|
+
for (const provider of SPST_PROVIDERS) {
|
|
69
|
+
const prefix = `${provider}/`;
|
|
70
|
+
if (modelId.startsWith(prefix)) return {
|
|
71
|
+
provider,
|
|
72
|
+
proxyModelId: modelId.slice(prefix.length)
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
75
|
if (modelId.includes("/")) throw new Error(`Provider '${modelId.split("/")[0]}' is not supported by spst() yet.`);
|
|
76
76
|
throw new Error("The spst() helper currently requires an 'openai/<model>', 'google/<model>', or 'anthropic/<model>' model id.");
|
|
77
77
|
}
|
package/dist/provider.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.mjs","names":[],"sources":["../src/provider.ts"],"sourcesContent":["import { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createVertex } from \"@ai-sdk/google-vertex\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport { API_ENDPOINT } from \"@/lib/constants\";\nimport { createGoogleProxyFetch } from \"@/lib/google-proxy-fetch\";\n\nexport type SpstProviderOptions = {\n projectId: string;\n email: string;\n callerApp: string;\n};\n\nexport type CreateSpstProviderParams = {\n apiKey?: string;\n baseUrl?: string;\n callerApp: string;\n};\n\ntype SpstProviderConfig = Pick<CreateSpstProviderParams, \"apiKey\" | \"baseUrl\">;\ntype SpstProviderSet = {\n openai: ReturnType<typeof createOpenAI>;\n google: ReturnType<typeof createVertex>;\n anthropic: ReturnType<typeof createAnthropic>;\n};\ntype ParsedSpstModelId
|
|
1
|
+
{"version":3,"file":"provider.mjs","names":[],"sources":["../src/provider.ts"],"sourcesContent":["import { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createVertex } from \"@ai-sdk/google-vertex\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport { API_ENDPOINT } from \"@/lib/constants\";\nimport { createGoogleProxyFetch } from \"@/lib/google-proxy-fetch\";\n\nexport type SpstProviderOptions = {\n projectId: string;\n email: string;\n callerApp: string;\n};\n\nexport type CreateSpstProviderParams = {\n apiKey?: string;\n baseUrl?: string;\n callerApp: string;\n};\n\ntype SpstProviderConfig = Pick<CreateSpstProviderParams, \"apiKey\" | \"baseUrl\">;\ntype SpstProviderSet = {\n openai: ReturnType<typeof createOpenAI>;\n google: ReturnType<typeof createVertex>;\n anthropic: ReturnType<typeof createAnthropic>;\n};\ntype ParsedSpstModelId = {\n provider: keyof SpstProviderSet;\n proxyModelId: string;\n};\n\nconst SPST_PROVIDERS = [\n \"openai\",\n \"google\",\n \"anthropic\",\n] as const satisfies ReadonlyArray<keyof SpstProviderSet>;\n\nconst spstProviders = createSpstProviders({});\n\nexport function spst(modelId: string): LanguageModelV3 {\n return createSpstLanguageModel(modelId, spstProviders);\n}\n\nexport function createSpstProvider(\n params: CreateSpstProviderParams,\n): typeof spst {\n const providers = createSpstProviders(params);\n\n return (modelId: string) => {\n return createSpstLanguageModel(modelId, providers, params.callerApp);\n };\n}\n\nfunction createSpstProviders(config: SpstProviderConfig): SpstProviderSet {\n const apiKey = config.apiKey ?? process.env.AI_AGENT_API_KEY;\n\n return {\n openai: createOpenAI({\n name: \"spst\",\n baseURL: getOpenAIProxyBaseUrl(config.baseUrl),\n apiKey,\n }),\n google: createVertex({\n apiKey,\n baseURL: getGoogleProxyBaseUrl(config.baseUrl),\n fetch: createGoogleProxyFetch(apiKey),\n }),\n anthropic: createAnthropic({\n baseURL: getAnthropicProxyBaseUrl(config.baseUrl),\n apiKey,\n }),\n };\n}\n\nfunction getResolvedBaseUrl(baseUrl?: string) {\n const resolvedBaseUrl =\n baseUrl ?? process.env.AI_AGENT_API_ENDPOINT ?? API_ENDPOINT;\n return resolvedBaseUrl.replace(/\\/$/, \"\");\n}\n\nfunction getOpenAIProxyBaseUrl(baseUrl?: string) {\n return `${getResolvedBaseUrl(baseUrl)}/api/proxy/v1/openai`;\n}\n\nfunction getGoogleProxyBaseUrl(baseUrl?: string) {\n return `${getResolvedBaseUrl(baseUrl)}/api/proxy/v1/google`;\n}\n\nfunction getAnthropicProxyBaseUrl(baseUrl?: string) {\n return `${getResolvedBaseUrl(baseUrl)}/api/proxy/v1/anthropic`;\n}\n\nfunction createSpstLanguageModel(\n modelId: string,\n providers: SpstProviderSet,\n defaultCallerApp?: string,\n) {\n const parsedModelId = parseSpstModelId(modelId);\n\n switch (parsedModelId.provider) {\n case \"openai\":\n return wrapSpstModel(\n providers.openai.responses(parsedModelId.proxyModelId),\n defaultCallerApp,\n );\n case \"google\":\n return wrapSpstModel(\n providers.google(parsedModelId.proxyModelId),\n defaultCallerApp,\n );\n case \"anthropic\":\n return wrapSpstModel(\n providers.anthropic(parsedModelId.proxyModelId),\n defaultCallerApp,\n );\n }\n}\n\n// AI SDK はプレフィックスなしのモデル ID で推論モデル判定などを行うため、\n// どのプロバイダーでも `<provider>/` を外して渡す\nfunction parseSpstModelId(modelId: string): ParsedSpstModelId {\n for (const provider of SPST_PROVIDERS) {\n const prefix = `${provider}/`;\n if (modelId.startsWith(prefix)) {\n return { provider, proxyModelId: modelId.slice(prefix.length) };\n }\n }\n\n if (modelId.includes(\"/\")) {\n throw new Error(\n `Provider '${modelId.split(\"/\")[0]}' is not supported by spst() yet.`,\n );\n }\n\n throw new Error(\n \"The spst() helper currently requires an 'openai/<model>', 'google/<model>', or 'anthropic/<model>' model id.\",\n );\n}\n\nfunction wrapSpstModel(\n model: LanguageModelV3,\n defaultCallerApp?: string,\n): LanguageModelV3 {\n return {\n specificationVersion: model.specificationVersion,\n provider: model.provider,\n modelId: model.modelId,\n supportedUrls: model.supportedUrls,\n doGenerate: (options) =>\n model.doGenerate(withSpstHeaders(options, defaultCallerApp)),\n doStream: (options) =>\n model.doStream(withSpstHeaders(options, defaultCallerApp)),\n };\n}\n\nfunction withSpstHeaders(\n options: Parameters<LanguageModelV3[\"doGenerate\"]>[0],\n defaultCallerApp?: string,\n): Parameters<LanguageModelV3[\"doGenerate\"]>[0] {\n const spstOptions = options.providerOptions?.spst as\n | Partial<SpstProviderOptions>\n | undefined;\n\n if (!spstOptions) {\n return options;\n }\n\n const callerApp = spstOptions.callerApp ?? defaultCallerApp;\n\n if (!spstOptions.projectId || !spstOptions.email || !callerApp) {\n throw new Error(\n \"The spst provider requires projectId, email, and callerApp in providerOptions.spst.\",\n );\n }\n\n const { spst: _spst, ...providerOptions } = options.providerOptions ?? {};\n\n return {\n ...options,\n headers: {\n ...options.headers,\n \"x-spst-project-id\": spstOptions.projectId,\n \"x-spst-user-email\": spstOptions.email,\n \"x-spst-caller-app\": callerApp,\n },\n providerOptions,\n };\n}\n"],"mappings":";;;;;;;;;mBA8KU;AAhJV,MAAM,iBAAiB;CACrB;CACA;CACA;CACD;AAED,MAAM,gBAAgB,oBAAoB,EAAE,CAAC;AAE7C,SAAgB,KAAK,SAAkC;AACrD,QAAO,wBAAwB,SAAS,cAAc;;AAGxD,SAAgB,mBACd,QACa;CACb,MAAM,YAAY,oBAAoB,OAAO;AAE7C,SAAQ,YAAoB;AAC1B,SAAO,wBAAwB,SAAS,WAAW,OAAO,UAAU;;;AAIxE,SAAS,oBAAoB,QAA6C;;CACxE,MAAM,2BAAS,OAAO,iEAAU,QAAQ,IAAI;AAE5C,QAAO;EACL,QAAQ,aAAa;GACnB,MAAM;GACN,SAAS,sBAAsB,OAAO,QAAQ;GAC9C;GACD,CAAC;EACF,QAAQ,aAAa;GACnB;GACA,SAAS,sBAAsB,OAAO,QAAQ;GAC9C,OAAO,uBAAuB,OAAO;GACtC,CAAC;EACF,WAAW,gBAAgB;GACzB,SAAS,yBAAyB,OAAO,QAAQ;GACjD;GACD,CAAC;EACH;;AAGH,SAAS,mBAAmB,SAAkB;;AAG5C,iBADE,mDAAW,QAAQ,IAAI,4DAAyB,cAC3B,QAAQ,OAAO,GAAG;;AAG3C,SAAS,sBAAsB,SAAkB;AAC/C,QAAO,GAAG,mBAAmB,QAAQ,CAAC;;AAGxC,SAAS,sBAAsB,SAAkB;AAC/C,QAAO,GAAG,mBAAmB,QAAQ,CAAC;;AAGxC,SAAS,yBAAyB,SAAkB;AAClD,QAAO,GAAG,mBAAmB,QAAQ,CAAC;;AAGxC,SAAS,wBACP,SACA,WACA,kBACA;CACA,MAAM,gBAAgB,iBAAiB,QAAQ;AAE/C,SAAQ,cAAc,UAAtB;EACE,KAAK,SACH,QAAO,cACL,UAAU,OAAO,UAAU,cAAc,aAAa,EACtD,iBACD;EACH,KAAK,SACH,QAAO,cACL,UAAU,OAAO,cAAc,aAAa,EAC5C,iBACD;EACH,KAAK,YACH,QAAO,cACL,UAAU,UAAU,cAAc,aAAa,EAC/C,iBACD;;;AAMP,SAAS,iBAAiB,SAAoC;AAC5D,MAAK,MAAM,YAAY,gBAAgB;EACrC,MAAM,SAAS,GAAG,SAAS;AAC3B,MAAI,QAAQ,WAAW,OAAO,CAC5B,QAAO;GAAE;GAAU,cAAc,QAAQ,MAAM,OAAO,OAAO;GAAE;;AAInE,KAAI,QAAQ,SAAS,IAAI,CACvB,OAAM,IAAI,MACR,aAAa,QAAQ,MAAM,IAAI,CAAC,GAAG,mCACpC;AAGH,OAAM,IAAI,MACR,+GACD;;AAGH,SAAS,cACP,OACA,kBACiB;AACjB,QAAO;EACL,sBAAsB,MAAM;EAC5B,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,eAAe,MAAM;EACrB,aAAa,YACX,MAAM,WAAW,gBAAgB,SAAS,iBAAiB,CAAC;EAC9D,WAAW,YACT,MAAM,SAAS,gBAAgB,SAAS,iBAAiB,CAAC;EAC7D;;AAGH,SAAS,gBACP,SACA,kBAC8C;;CAC9C,MAAM,uCAAc,QAAQ,+FAAiB;AAI7C,KAAI,CAAC,YACH,QAAO;CAGT,MAAM,qCAAY,YAAY,kFAAa;AAE3C,KAAI,CAAC,YAAY,aAAa,CAAC,YAAY,SAAS,CAAC,UACnD,OAAM,IAAI,MACR,sFACD;CAGH,wCAA4C,QAAQ,0FAAmB,EAAE,EAAnE,EAAE,MAAM,iBAAU;AAExB,0CACK;EACH,2CACK,QAAQ;GACX,qBAAqB,YAAY;GACjC,qBAAqB,YAAY;GACjC,qBAAqB;;EAEvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@super_studio/ecforce-ai-agent-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"main": "./dist/index.cjs",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.cts",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"sideEffects": false,
|
|
18
18
|
"files": [
|
|
19
19
|
"dist",
|
|
20
|
-
"src/**/*.ts"
|
|
20
|
+
"src/**/*.ts",
|
|
21
|
+
"!src/**/*.test.ts"
|
|
21
22
|
],
|
|
22
23
|
"exports": {
|
|
23
24
|
".": {
|
|
@@ -72,6 +73,7 @@
|
|
|
72
73
|
"scripts": {
|
|
73
74
|
"dev": "tsdown --watch",
|
|
74
75
|
"build": "tsdown",
|
|
75
|
-
"generate": "tsx ./src/sdk/generate.ts"
|
|
76
|
+
"generate": "tsx ./src/sdk/generate.ts",
|
|
77
|
+
"test": "vitest run"
|
|
76
78
|
}
|
|
77
79
|
}
|
package/src/provider.ts
CHANGED
|
@@ -23,19 +23,16 @@ type SpstProviderSet = {
|
|
|
23
23
|
google: ReturnType<typeof createVertex>;
|
|
24
24
|
anthropic: ReturnType<typeof createAnthropic>;
|
|
25
25
|
};
|
|
26
|
-
type ParsedSpstModelId =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
provider: "anthropic";
|
|
37
|
-
proxyModelId: string;
|
|
38
|
-
};
|
|
26
|
+
type ParsedSpstModelId = {
|
|
27
|
+
provider: keyof SpstProviderSet;
|
|
28
|
+
proxyModelId: string;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const SPST_PROVIDERS = [
|
|
32
|
+
"openai",
|
|
33
|
+
"google",
|
|
34
|
+
"anthropic",
|
|
35
|
+
] as const satisfies ReadonlyArray<keyof SpstProviderSet>;
|
|
39
36
|
|
|
40
37
|
const spstProviders = createSpstProviders({});
|
|
41
38
|
|
|
@@ -118,26 +115,14 @@ function createSpstLanguageModel(
|
|
|
118
115
|
}
|
|
119
116
|
}
|
|
120
117
|
|
|
118
|
+
// AI SDK はプレフィックスなしのモデル ID で推論モデル判定などを行うため、
|
|
119
|
+
// どのプロバイダーでも `<provider>/` を外して渡す
|
|
121
120
|
function parseSpstModelId(modelId: string): ParsedSpstModelId {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
proxyModelId: modelId
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (modelId.startsWith("google/")) {
|
|
130
|
-
return {
|
|
131
|
-
provider: "google",
|
|
132
|
-
proxyModelId: modelId.slice("google/".length),
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (modelId.startsWith("anthropic/")) {
|
|
137
|
-
return {
|
|
138
|
-
provider: "anthropic",
|
|
139
|
-
proxyModelId: modelId.slice("anthropic/".length),
|
|
140
|
-
};
|
|
121
|
+
for (const provider of SPST_PROVIDERS) {
|
|
122
|
+
const prefix = `${provider}/`;
|
|
123
|
+
if (modelId.startsWith(prefix)) {
|
|
124
|
+
return { provider, proxyModelId: modelId.slice(prefix.length) };
|
|
125
|
+
}
|
|
141
126
|
}
|
|
142
127
|
|
|
143
128
|
if (modelId.includes("/")) {
|