@qjp88995/provider-client 0.1.1 → 0.2.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"direct-resolver.d.ts","sourceRoot":"","sources":["../src/direct-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EAEZ,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,wDAAwD;IACxD,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,iCAAiC;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;AAEvD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGnB;gBAEO,OAAO,EAAE,SAAS,YAAY,EAAE;IAqBtC,OAAO,CACX,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAcvB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAMxD"}
1
+ {"version":3,"file":"direct-resolver.d.ts","sourceRoot":"","sources":["../src/direct-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EAEZ,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,wDAAwD;IACxD,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,iCAAiC;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;AAEvD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGnB;gBAEO,OAAO,EAAE,SAAS,YAAY,EAAE;IAuBtC,OAAO,CACX,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAcvB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAMxD"}
@@ -10,6 +10,8 @@ export class DirectModelResolver {
10
10
  slug: v.slug,
11
11
  name: v.name ?? v.slug,
12
12
  kind: v.kind,
13
+ // 直连只给 LLM 厂商用(非 LLM 厂商在 APP 里本来就直接拿 key 调)。
14
+ category: 'llm',
13
15
  apiKey: v.apiKey,
14
16
  fetch: v.fetch,
15
17
  endpoints: v.endpoints,
@@ -1 +1 @@
1
- {"version":3,"file":"direct-resolver.js","sourceRoot":"","sources":["../src/direct-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,GAKV,MAAM,mBAAmB,CAAC;AA4B3B;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACb,OAAO,CAGnB;IAEL,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,WAAW,EAAE,CAAC,CAAC,OAAO;gBACtB,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,IAAI;gBACtB,eAAe,EAAE,IAAI;gBACrB,OAAO,EAAE,IAAI;gBACb,GAAG,CAAC;aACL,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IACN,CAAC;IAED,kDAAkD;IAElD,KAAK,CAAC,OAAO,CACX,GAAa,EACb,UAA0B,EAAE;QAE5B,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAE,CAAC;QAClE,OAAO,WAAW,CAAC;YACjB,GAAG;YACH,MAAM;YACN,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;YAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,GAAa;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;aACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC;YACjC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;CACF"}
1
+ {"version":3,"file":"direct-resolver.js","sourceRoot":"","sources":["../src/direct-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,GAKV,MAAM,mBAAmB,CAAC;AA4B3B;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACb,OAAO,CAGnB;IAEL,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,6CAA6C;YAC7C,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,WAAW,EAAE,CAAC,CAAC,OAAO;gBACtB,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,IAAI;gBACtB,eAAe,EAAE,IAAI;gBACrB,OAAO,EAAE,IAAI;gBACb,GAAG,CAAC;aACL,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IACN,CAAC;IAED,kDAAkD;IAElD,KAAK,CAAC,OAAO,CACX,GAAa,EACb,UAA0B,EAAE;QAE5B,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAE,CAAC;QAClE,OAAO,WAAW,CAAC;YACjB,GAAG;YACH,MAAM;YACN,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;YAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,GAAa;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;aACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC;YACjC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ export { type CenterFetchOptions, createCenterFetch } from './center-fetch.js';
2
2
  export { type DirectModel, DirectModelResolver, type DirectVendor, } from './direct-resolver.js';
3
3
  export { ProtocolUnavailableError, ProviderClientError, type ProviderClientErrorCode, } from './errors.js';
4
4
  export { type ModelFileStore, type ModelHandle, type ModelRef, type ModelResolver, type ResolveOptions, type UploadedFile, } from './model-handle.js';
5
- export { ProviderClient, type ProviderClientOptions, } from './provider-client.js';
5
+ export { type FetchForOptions, ProviderClient, type ProviderClientOptions, } from './provider-client.js';
6
6
  export { toProviderClientError } from './to-error.js';
7
- export { type CatalogEndpoint, type CatalogModel, type CatalogResponse, type CatalogVendor, CENTER_ERROR_CODES, type CenterErrorCode, LLM_CAPABILITIES, LLM_PROTOCOLS, type LlmCapability, type LlmProtocol, type ModelPricing, PC_HEADERS, PROXY_ROUTE_PREFIX, REASONING_EFFORTS, type ReasoningEffort, VENDOR_KINDS, type VendorKind, } from './types.js';
7
+ export { type CatalogEndpoint, type CatalogModel, type CatalogResponse, type CatalogVendor, CENTER_ERROR_CODES, type CenterErrorCode, ENDPOINT_PROTOCOLS, type EndpointProtocol, LLM_CAPABILITIES, LLM_PROTOCOLS, type LlmCapability, type LlmProtocol, type ModelPricing, PC_HEADERS, PROXY_ROUTE_PREFIX, REASONING_EFFORTS, type ReasoningEffort, VENDOR_CATEGORIES, VENDOR_KINDS, type VendorCategory, type VendorKind, } from './types.js';
8
8
  export { type AdviceModelView, findVendorAdapter, getVendorAdapter, LlmVendorAdapter, type ModelAdvice, type ProviderOptions, type SamplingParams, VENDOR_ADAPTERS, type VendorFetch, } from './vendors/index.js';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,KAAK,WAAW,EAChB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,kBAAkB,EAClB,KAAK,eAAe,EACpB,gBAAgB,EAChB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,KAAK,WAAW,EAChB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,kBAAkB,EAClB,KAAK,eAAe,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,eAAe,EACpB,iBAAiB,EACjB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,eAAe,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,6 @@ export { DirectModelResolver, } from './direct-resolver.js';
3
3
  export { ProtocolUnavailableError, ProviderClientError, } from './errors.js';
4
4
  export { ProviderClient, } from './provider-client.js';
5
5
  export { toProviderClientError } from './to-error.js';
6
- export { CENTER_ERROR_CODES, LLM_CAPABILITIES, LLM_PROTOCOLS, PC_HEADERS, PROXY_ROUTE_PREFIX, REASONING_EFFORTS, VENDOR_KINDS, } from './types.js';
6
+ export { CENTER_ERROR_CODES, ENDPOINT_PROTOCOLS, LLM_CAPABILITIES, LLM_PROTOCOLS, PC_HEADERS, PROXY_ROUTE_PREFIX, REASONING_EFFORTS, VENDOR_CATEGORIES, VENDOR_KINDS, } from './types.js';
7
7
  export { findVendorAdapter, getVendorAdapter, LlmVendorAdapter, VENDOR_ADAPTERS, } from './vendors/index.js';
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAEL,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,cAAc,GAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAKL,kBAAkB,EAElB,gBAAgB,EAChB,aAAa,EAIb,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAEjB,YAAY,GAEb,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAIhB,eAAe,GAEhB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAEL,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,cAAc,GAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAKL,kBAAkB,EAElB,kBAAkB,EAElB,gBAAgB,EAChB,aAAa,EAIb,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAEjB,iBAAiB,EACjB,YAAY,GAGb,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAIhB,eAAe,GAEhB,MAAM,oBAAoB,CAAC"}
@@ -1,6 +1,15 @@
1
1
  import { type ModelHandle, type ModelRef, type ModelResolver, type ResolveOptions } from './model-handle.js';
2
2
  import { type CatalogResponse } from './types.js';
3
3
  import type { VendorFetch } from './vendors/index.js';
4
+ /** `ProviderClient.fetchFor` 的选项。 */
5
+ export interface FetchForOptions {
6
+ /** 会话粘性键(`x-pc-affinity`):建异步任务与轮询带同一个,就落在同一把 key 上(只要它还可用)。 */
7
+ affinity?: string;
8
+ /** 钉住某把 key(`x-pc-pin`):那把不可用就直接报错,不换。 */
9
+ pin?: string;
10
+ /** 每次响应回来时告诉调用方实际用的是哪把 key(`x-pc-credential`)。 */
11
+ onCredential?: (ref: string) => void;
12
+ }
4
13
  export interface ProviderClientOptions {
5
14
  /** 中心的根地址,如 `https://provider.example.com`。 */
6
15
  centerUrl: string;
@@ -34,6 +43,13 @@ export declare class ProviderClient implements ModelResolver {
34
43
  /** 丢掉目录缓存(中心改了配置、想立刻看到时)。 */
35
44
  invalidateCatalog(): void;
36
45
  resolve(ref: ModelRef, options?: ResolveOptions): Promise<ModelHandle>;
46
+ /**
47
+ * 某家厂商的中心模式 fetch,交给 APP 自己的适配器(联网搜索、媒体解析、JustOne 这类不走模型句柄的调用):
48
+ * 适配器照常用厂商的地址发请求,这个 fetch 把它改写到中心透传。可改写的 origin 取自目录里这家的端点,
49
+ * 非 LLM 厂商同样可用;适配器该用哪个 baseUrl 见 `catalog()` 里这家的 `endpoints`。
50
+ * 目录只在创建时查一次;目录里没有这家(或这个接入方看不到)时报 `unknown_vendor`。
51
+ */
52
+ fetchFor(slug: string, options?: FetchForOptions): Promise<VendorFetch>;
37
53
  capabilitiesOf(ref: ModelRef): Promise<("vision" | "video" | "reasoning")[]>;
38
54
  private fetchCatalog;
39
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"provider-client.d.ts","sourceRoot":"","sources":["../src/provider-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAc,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,aAAa;IAYtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAXpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAIE;IAChB,OAAO,CAAC,QAAQ,CAAyC;gBAE5B,OAAO,EAAE,qBAAqB;IAO3D,8BAA8B;IAC9B,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAUnC,6BAA6B;IAC7B,iBAAiB,IAAI,IAAI;IAInB,OAAO,CACX,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAwBjB,cAAc,CAAC,GAAG,EAAE,QAAQ;YAQpB,YAAY;CAgC3B"}
1
+ {"version":3,"file":"provider-client.d.ts","sourceRoot":"","sources":["../src/provider-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAc,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,aAAa;IAYtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAXpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAIE;IAChB,OAAO,CAAC,QAAQ,CAAyC;gBAE5B,OAAO,EAAE,qBAAqB;IAO3D,8BAA8B;IAC9B,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAUnC,6BAA6B;IAC7B,iBAAiB,IAAI,IAAI;IAInB,OAAO,CACX,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAwBvB;;;;;OAKG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC;IAqBjB,cAAc,CAAC,GAAG,EAAE,QAAQ;YAQpB,YAAY;CAgC3B"}
@@ -57,6 +57,28 @@ export class ProviderClient {
57
57
  reasoningEffort: options.reasoningEffort,
58
58
  });
59
59
  }
60
+ /**
61
+ * 某家厂商的中心模式 fetch,交给 APP 自己的适配器(联网搜索、媒体解析、JustOne 这类不走模型句柄的调用):
62
+ * 适配器照常用厂商的地址发请求,这个 fetch 把它改写到中心透传。可改写的 origin 取自目录里这家的端点,
63
+ * 非 LLM 厂商同样可用;适配器该用哪个 baseUrl 见 `catalog()` 里这家的 `endpoints`。
64
+ * 目录只在创建时查一次;目录里没有这家(或这个接入方看不到)时报 `unknown_vendor`。
65
+ */
66
+ async fetchFor(slug, options = {}) {
67
+ const vendor = (await this.catalog()).vendors.find(v => v.slug === slug);
68
+ if (!vendor) {
69
+ throw new ProviderClientError('unknown_vendor', `vendor "${slug}" is not in the catalog`, null);
70
+ }
71
+ return createCenterFetch({
72
+ centerUrl: this.center,
73
+ apiKey: this.options.apiKey,
74
+ vendor: vendor.slug,
75
+ baseUrls: vendor.endpoints.map(e => e.baseUrl),
76
+ affinity: options.affinity,
77
+ pin: options.pin,
78
+ onCredential: options.onCredential,
79
+ fetch: this.send,
80
+ });
81
+ }
60
82
  async capabilitiesOf(ref) {
61
83
  const vendor = (await this.catalog()).vendors.find(v => v.slug === ref.vendor);
62
84
  const model = vendor?.models.find(m => m.modelId === ref.modelId);
@@ -1 +1 @@
1
- {"version":3,"file":"provider-client.js","sourceRoot":"","sources":["../src/provider-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-client.js","sourceRoot":"","sources":["../src/provider-client.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -5,11 +5,17 @@
5
5
  /** 线协议(wire 上的请求 / 响应格式)。 */
6
6
  export declare const LLM_PROTOCOLS: readonly ["openai-chat-completions", "openai-responses", "anthropic-messages", "google-generate-content", "google-interactions"];
7
7
  export type LlmProtocol = (typeof LLM_PROTOCOLS)[number];
8
+ /** 端点协议:LLM 线协议,加上非 LLM 厂商(媒体、数据接口)唯一的 `http`。模型只声明 LLM 协议。 */
9
+ export declare const ENDPOINT_PROTOCOLS: readonly ["openai-chat-completions", "openai-responses", "anthropic-messages", "google-generate-content", "google-interactions", "http"];
10
+ export type EndpointProtocol = (typeof ENDPOINT_PROTOCOLS)[number];
11
+ /** 厂商类别:只有 `llm` 有模型与适配器;其余的只经中心透传(适配器在各 APP)。 */
12
+ export declare const VENDOR_CATEGORIES: readonly ["llm", "media", "data"];
13
+ export type VendorCategory = (typeof VENDOR_CATEGORIES)[number];
8
14
  /** 模型能力(目录元数据:发不发图片 / 开不开推理由调用方据此决定)。 */
9
15
  export declare const LLM_CAPABILITIES: readonly ["vision", "video", "reasoning"];
10
16
  export type LlmCapability = (typeof LLM_CAPABILITIES)[number];
11
- /** 厂商类型。一种类型对应一个适配器(`VENDOR_ADAPTERS`)。 */
12
- export declare const VENDOR_KINDS: readonly ["openai", "generic", "deepseek", "moonshotai", "alibaba", "zhipu", "volcengine", "minimax", "dots", "google"];
17
+ /** 厂商类型。`llm` 类别的每一种对应一个适配器(`VENDOR_ADAPTERS`);bibigpt / justone 没有。 */
18
+ export declare const VENDOR_KINDS: readonly ["openai", "generic", "deepseek", "moonshotai", "alibaba", "zhipu", "volcengine", "minimax", "dots", "google", "bibigpt", "justone"];
13
19
  export type VendorKind = (typeof VENDOR_KINDS)[number];
14
20
  /**
15
21
  * 推理档位——**我们自己的抽象**,不是任何一家的原生枚举,各家适配器的 `reasoning()` 把它翻译成自己的形状:
@@ -39,11 +45,13 @@ export interface CatalogVendor {
39
45
  slug: string;
40
46
  name: string;
41
47
  kind: VendorKind;
48
+ /** 非 `llm` 的厂商没有模型,接入方只拿它的端点经中心透传。 */
49
+ category: VendorCategory;
42
50
  endpoints: CatalogEndpoint[];
43
51
  models: CatalogModel[];
44
52
  }
45
53
  export interface CatalogEndpoint {
46
- protocol: LlmProtocol;
54
+ protocol: EndpointProtocol;
47
55
  baseUrl: string;
48
56
  }
49
57
  export interface CatalogModel {
@@ -58,7 +66,7 @@ export interface CatalogModel {
58
66
  pricing: ModelPricing | null;
59
67
  }
60
68
  /** 中心的错误码(响应体 `{ code, message }`)。 */
61
- export declare const CENTER_ERROR_CODES: readonly ["unauthorized", "forbidden", "tenant_disabled", "not_found", "invalid_request", "conflict", "unprocessable", "upstream_error", "admin_unavailable", "vendor_not_allowed", "no_credential", "pinned_credential_unavailable"];
69
+ export declare const CENTER_ERROR_CODES: readonly ["unauthorized", "forbidden", "tenant_disabled", "not_found", "invalid_request", "conflict", "unprocessable", "upstream_error", "admin_unavailable", "vendor_not_allowed", "no_credential", "pinned_credential_unavailable", "payload_too_large"];
62
70
  export type CenterErrorCode = (typeof CENTER_ERROR_CODES)[number];
63
71
  /** 中心的请求头 / 响应头。 */
64
72
  export declare const PC_HEADERS: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,eAAO,MAAM,aAAa,kIAMhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,2CAA4C,CAAC;AAC1E,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,2CAA2C;AAC3C,eAAO,MAAM,YAAY,yHAWf,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,6DAOpB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,sCAAsC;IACtC,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAED,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,uOAarB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,oBAAoB;AACpB,eAAO,MAAM,UAAU;IACrB,2BAA2B;;IAE3B,mCAAmC;;IAEnC,sDAAsD;;IAEtD,+BAA+B;;IAE/B,sBAAsB;;CAEd,CAAC;AAEX,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,cAAc,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,eAAO,MAAM,aAAa,kIAMhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,0IAAsC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,mCAAoC,CAAC;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,2CAA4C,CAAC;AAC1E,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wEAAwE;AACxE,eAAO,MAAM,YAAY,+IAaf,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,6DAOpB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,sCAAsC;IACtC,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAED,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,4PAcrB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,oBAAoB;AACpB,eAAO,MAAM,UAAU;IACrB,2BAA2B;;IAE3B,mCAAmC;;IAEnC,sDAAsD;;IAEtD,+BAA+B;;IAE/B,sBAAsB;;CAEd,CAAC;AAEX,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,cAAc,CAAC"}
package/dist/types.js CHANGED
@@ -10,9 +10,13 @@ export const LLM_PROTOCOLS = [
10
10
  'google-generate-content',
11
11
  'google-interactions',
12
12
  ];
13
+ /** 端点协议:LLM 线协议,加上非 LLM 厂商(媒体、数据接口)唯一的 `http`。模型只声明 LLM 协议。 */
14
+ export const ENDPOINT_PROTOCOLS = [...LLM_PROTOCOLS, 'http'];
15
+ /** 厂商类别:只有 `llm` 有模型与适配器;其余的只经中心透传(适配器在各 APP)。 */
16
+ export const VENDOR_CATEGORIES = ['llm', 'media', 'data'];
13
17
  /** 模型能力(目录元数据:发不发图片 / 开不开推理由调用方据此决定)。 */
14
18
  export const LLM_CAPABILITIES = ['vision', 'video', 'reasoning'];
15
- /** 厂商类型。一种类型对应一个适配器(`VENDOR_ADAPTERS`)。 */
19
+ /** 厂商类型。`llm` 类别的每一种对应一个适配器(`VENDOR_ADAPTERS`);bibigpt / justone 没有。 */
16
20
  export const VENDOR_KINDS = [
17
21
  'openai',
18
22
  'generic',
@@ -24,6 +28,8 @@ export const VENDOR_KINDS = [
24
28
  'minimax',
25
29
  'dots',
26
30
  'google',
31
+ 'bibigpt',
32
+ 'justone',
27
33
  ];
28
34
  /**
29
35
  * 推理档位——**我们自己的抽象**,不是任何一家的原生枚举,各家适配器的 `reasoning()` 把它翻译成自己的形状:
@@ -56,6 +62,7 @@ export const CENTER_ERROR_CODES = [
56
62
  'vendor_not_allowed',
57
63
  'no_credential',
58
64
  'pinned_credential_unavailable',
65
+ 'payload_too_large',
59
66
  ];
60
67
  /** 中心的请求头 / 响应头。 */
61
68
  export const PC_HEADERS = {
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,yBAAyB;IACzB,kBAAkB;IAClB,oBAAoB;IACpB,yBAAyB;IACzB,qBAAqB;CACb,CAAC;AAGX,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAU,CAAC;AAG1E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,SAAS;IACT,UAAU;IACV,YAAY;IACZ,SAAS;IACT,OAAO;IACP,YAAY;IACZ,SAAS;IACT,MAAM;IACN,QAAQ;CACA,CAAC;AAGX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK;IACL,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,KAAK;CACG,CAAC;AA2CX,uCAAuC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc;IACd,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,iBAAiB;IACjB,UAAU;IACV,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;IACf,+BAA+B;CACvB,CAAC;AAGX,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,2BAA2B;IAC3B,GAAG,EAAE,UAAU;IACf,mCAAmC;IACnC,QAAQ,EAAE,eAAe;IACzB,sDAAsD;IACtD,GAAG,EAAE,UAAU;IACf,+BAA+B;IAC/B,UAAU,EAAE,iBAAiB;IAC7B,sBAAsB;IACtB,QAAQ,EAAE,eAAe;CACjB,CAAC;AAEX,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,yBAAyB;IACzB,kBAAkB;IAClB,oBAAoB;IACpB,yBAAyB;IACzB,qBAAqB;CACb,CAAC;AAGX,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,aAAa,EAAE,MAAM,CAAU,CAAC;AAGtE,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAGnE,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAU,CAAC;AAG1E,wEAAwE;AACxE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,SAAS;IACT,UAAU;IACV,YAAY;IACZ,SAAS;IACT,OAAO;IACP,YAAY;IACZ,SAAS;IACT,MAAM;IACN,QAAQ;IACR,SAAS;IACT,SAAS;CACD,CAAC;AAGX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK;IACL,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,KAAK;CACG,CAAC;AA6CX,uCAAuC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc;IACd,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,iBAAiB;IACjB,UAAU;IACV,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;IACf,+BAA+B;IAC/B,mBAAmB;CACX,CAAC;AAGX,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,2BAA2B;IAC3B,GAAG,EAAE,UAAU;IACf,mCAAmC;IACnC,QAAQ,EAAE,eAAe;IACzB,sDAAsD;IACtD,GAAG,EAAE,UAAU;IACf,+BAA+B;IAC/B,UAAU,EAAE,iBAAiB;IAC7B,sBAAsB;IACtB,QAAQ,EAAE,eAAe;CACjB,CAAC;AAEX,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qjp88995/provider-client",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Client for the provider center: vendor adapters for the AI SDK, model resolution through the center's catalog and passthrough proxy, and a direct mode for local development.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -48,6 +48,8 @@ export class DirectModelResolver implements ModelResolver {
48
48
  slug: v.slug,
49
49
  name: v.name ?? v.slug,
50
50
  kind: v.kind,
51
+ // 直连只给 LLM 厂商用(非 LLM 厂商在 APP 里本来就直接拿 key 调)。
52
+ category: 'llm',
51
53
  apiKey: v.apiKey,
52
54
  fetch: v.fetch,
53
55
  endpoints: v.endpoints,
package/src/index.ts CHANGED
@@ -18,6 +18,7 @@ export {
18
18
  type UploadedFile,
19
19
  } from './model-handle.js';
20
20
  export {
21
+ type FetchForOptions,
21
22
  ProviderClient,
22
23
  type ProviderClientOptions,
23
24
  } from './provider-client.js';
@@ -29,6 +30,8 @@ export {
29
30
  type CatalogVendor,
30
31
  CENTER_ERROR_CODES,
31
32
  type CenterErrorCode,
33
+ ENDPOINT_PROTOCOLS,
34
+ type EndpointProtocol,
32
35
  LLM_CAPABILITIES,
33
36
  LLM_PROTOCOLS,
34
37
  type LlmCapability,
@@ -38,7 +41,9 @@ export {
38
41
  PROXY_ROUTE_PREFIX,
39
42
  REASONING_EFFORTS,
40
43
  type ReasoningEffort,
44
+ VENDOR_CATEGORIES,
41
45
  VENDOR_KINDS,
46
+ type VendorCategory,
42
47
  type VendorKind,
43
48
  } from './types.js';
44
49
  export {
@@ -11,6 +11,16 @@ import {
11
11
  import { type CatalogResponse, PC_HEADERS } from './types.js';
12
12
  import type { VendorFetch } from './vendors/index.js';
13
13
 
14
+ /** `ProviderClient.fetchFor` 的选项。 */
15
+ export interface FetchForOptions {
16
+ /** 会话粘性键(`x-pc-affinity`):建异步任务与轮询带同一个,就落在同一把 key 上(只要它还可用)。 */
17
+ affinity?: string;
18
+ /** 钉住某把 key(`x-pc-pin`):那把不可用就直接报错,不换。 */
19
+ pin?: string;
20
+ /** 每次响应回来时告诉调用方实际用的是哪把 key(`x-pc-credential`)。 */
21
+ onCredential?: (ref: string) => void;
22
+ }
23
+
14
24
  export interface ProviderClientOptions {
15
25
  /** 中心的根地址,如 `https://provider.example.com`。 */
16
26
  centerUrl: string;
@@ -93,6 +103,36 @@ export class ProviderClient implements ModelResolver {
93
103
  });
94
104
  }
95
105
 
106
+ /**
107
+ * 某家厂商的中心模式 fetch,交给 APP 自己的适配器(联网搜索、媒体解析、JustOne 这类不走模型句柄的调用):
108
+ * 适配器照常用厂商的地址发请求,这个 fetch 把它改写到中心透传。可改写的 origin 取自目录里这家的端点,
109
+ * 非 LLM 厂商同样可用;适配器该用哪个 baseUrl 见 `catalog()` 里这家的 `endpoints`。
110
+ * 目录只在创建时查一次;目录里没有这家(或这个接入方看不到)时报 `unknown_vendor`。
111
+ */
112
+ async fetchFor(
113
+ slug: string,
114
+ options: FetchForOptions = {}
115
+ ): Promise<VendorFetch> {
116
+ const vendor = (await this.catalog()).vendors.find(v => v.slug === slug);
117
+ if (!vendor) {
118
+ throw new ProviderClientError(
119
+ 'unknown_vendor',
120
+ `vendor "${slug}" is not in the catalog`,
121
+ null
122
+ );
123
+ }
124
+ return createCenterFetch({
125
+ centerUrl: this.center,
126
+ apiKey: this.options.apiKey,
127
+ vendor: vendor.slug,
128
+ baseUrls: vendor.endpoints.map(e => e.baseUrl),
129
+ affinity: options.affinity,
130
+ pin: options.pin,
131
+ onCredential: options.onCredential,
132
+ fetch: this.send,
133
+ });
134
+ }
135
+
96
136
  async capabilitiesOf(ref: ModelRef) {
97
137
  const vendor = (await this.catalog()).vendors.find(
98
138
  v => v.slug === ref.vendor
package/src/types.ts CHANGED
@@ -13,11 +13,19 @@ export const LLM_PROTOCOLS = [
13
13
  ] as const;
14
14
  export type LlmProtocol = (typeof LLM_PROTOCOLS)[number];
15
15
 
16
+ /** 端点协议:LLM 线协议,加上非 LLM 厂商(媒体、数据接口)唯一的 `http`。模型只声明 LLM 协议。 */
17
+ export const ENDPOINT_PROTOCOLS = [...LLM_PROTOCOLS, 'http'] as const;
18
+ export type EndpointProtocol = (typeof ENDPOINT_PROTOCOLS)[number];
19
+
20
+ /** 厂商类别:只有 `llm` 有模型与适配器;其余的只经中心透传(适配器在各 APP)。 */
21
+ export const VENDOR_CATEGORIES = ['llm', 'media', 'data'] as const;
22
+ export type VendorCategory = (typeof VENDOR_CATEGORIES)[number];
23
+
16
24
  /** 模型能力(目录元数据:发不发图片 / 开不开推理由调用方据此决定)。 */
17
25
  export const LLM_CAPABILITIES = ['vision', 'video', 'reasoning'] as const;
18
26
  export type LlmCapability = (typeof LLM_CAPABILITIES)[number];
19
27
 
20
- /** 厂商类型。一种类型对应一个适配器(`VENDOR_ADAPTERS`)。 */
28
+ /** 厂商类型。`llm` 类别的每一种对应一个适配器(`VENDOR_ADAPTERS`);bibigpt / justone 没有。 */
21
29
  export const VENDOR_KINDS = [
22
30
  'openai',
23
31
  'generic',
@@ -29,6 +37,8 @@ export const VENDOR_KINDS = [
29
37
  'minimax',
30
38
  'dots',
31
39
  'google',
40
+ 'bibigpt',
41
+ 'justone',
32
42
  ] as const;
33
43
  export type VendorKind = (typeof VENDOR_KINDS)[number];
34
44
 
@@ -70,12 +80,14 @@ export interface CatalogVendor {
70
80
  slug: string;
71
81
  name: string;
72
82
  kind: VendorKind;
83
+ /** 非 `llm` 的厂商没有模型,接入方只拿它的端点经中心透传。 */
84
+ category: VendorCategory;
73
85
  endpoints: CatalogEndpoint[];
74
86
  models: CatalogModel[];
75
87
  }
76
88
 
77
89
  export interface CatalogEndpoint {
78
- protocol: LlmProtocol;
90
+ protocol: EndpointProtocol;
79
91
  baseUrl: string;
80
92
  }
81
93
 
@@ -105,6 +117,7 @@ export const CENTER_ERROR_CODES = [
105
117
  'vendor_not_allowed',
106
118
  'no_credential',
107
119
  'pinned_credential_unavailable',
120
+ 'payload_too_large',
108
121
  ] as const;
109
122
  export type CenterErrorCode = (typeof CENTER_ERROR_CODES)[number];
110
123