@tombcato/ai-selector-core 0.1.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.
Files changed (55) hide show
  1. package/dist/api.d.ts +14 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +139 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/config.d.ts +18 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +85 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/i18n.d.ts +53 -0
  10. package/dist/i18n.d.ts.map +1 -0
  11. package/dist/i18n.js +51 -0
  12. package/dist/i18n.js.map +1 -0
  13. package/dist/icons.d.ts +10 -0
  14. package/dist/icons.d.ts.map +1 -0
  15. package/dist/icons.js +22 -0
  16. package/dist/icons.js.map +1 -0
  17. package/dist/index.d.ts +13 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +19 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/models.d.ts +11 -0
  22. package/dist/models.d.ts.map +1 -0
  23. package/dist/models.js +199 -0
  24. package/dist/models.js.map +1 -0
  25. package/dist/providers.d.ts +42 -0
  26. package/dist/providers.d.ts.map +1 -0
  27. package/dist/providers.js +229 -0
  28. package/dist/providers.js.map +1 -0
  29. package/dist/storage.d.ts +31 -0
  30. package/dist/storage.d.ts.map +1 -0
  31. package/dist/storage.js +65 -0
  32. package/dist/storage.js.map +1 -0
  33. package/dist/strategies.d.ts +54 -0
  34. package/dist/strategies.d.ts.map +1 -0
  35. package/dist/strategies.js +184 -0
  36. package/dist/strategies.js.map +1 -0
  37. package/dist/types.d.ts +122 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +6 -0
  40. package/dist/types.js.map +1 -0
  41. package/dist/utils.d.ts +2 -0
  42. package/dist/utils.d.ts.map +1 -0
  43. package/dist/utils.js +4 -0
  44. package/dist/utils.js.map +1 -0
  45. package/package.json +36 -0
  46. package/src/api.ts +154 -0
  47. package/src/config.ts +104 -0
  48. package/src/i18n.ts +54 -0
  49. package/src/index.ts +76 -0
  50. package/src/models.ts +202 -0
  51. package/src/providers.ts +239 -0
  52. package/src/storage.ts +78 -0
  53. package/src/strategies.ts +251 -0
  54. package/src/styles.css +244 -0
  55. package/src/types.ts +151 -0
package/dist/api.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * AI Provider Selector - API Functions
3
+ * Connection testing and model fetching logic
4
+ */
5
+ import type { Model, TestConnectionOptions, TestConnectionResult, FetchModelsOptions } from './types';
6
+ /**
7
+ * Test connection to an AI provider
8
+ */
9
+ export declare function testConnection(options: TestConnectionOptions): Promise<TestConnectionResult>;
10
+ /**
11
+ * Fetch available models from a provider
12
+ */
13
+ export declare function fetchModels(options: FetchModelsOptions): Promise<Model[]>;
14
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAER,KAAK,EACL,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EACrB,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAsElG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CA0D/E"}
package/dist/api.js ADDED
@@ -0,0 +1,139 @@
1
+ /**
2
+ * AI Provider Selector - API Functions
3
+ * Connection testing and model fetching logic
4
+ */
5
+ import { getStaticModels } from './models';
6
+ import { getStrategy, defaultParseModelsResponse } from './strategies';
7
+ const DEFAULT_TIMEOUT = 30000;
8
+ /**
9
+ * Test connection to an AI provider
10
+ */
11
+ export async function testConnection(options) {
12
+ const { provider, apiKey, model, baseUrl, proxyUrl } = options;
13
+ const actualBaseUrl = baseUrl || provider.baseUrl;
14
+ const startTime = Date.now();
15
+ try {
16
+ // If proxy URL is provided, use it
17
+ if (proxyUrl) {
18
+ const response = await fetch(`${proxyUrl}/test`, {
19
+ method: 'POST',
20
+ headers: { 'Content-Type': 'application/json' },
21
+ body: JSON.stringify({
22
+ provider_id: provider.id,
23
+ api_key: apiKey,
24
+ model: model || '',
25
+ base_url: baseUrl || provider.baseUrl,
26
+ api_format: provider.apiFormat,
27
+ }),
28
+ });
29
+ const data = await response.json();
30
+ return {
31
+ success: data.success,
32
+ latencyMs: data.latency_ms || (Date.now() - startTime),
33
+ message: data.message,
34
+ };
35
+ }
36
+ // Direct API call (for browser-compatible providers)
37
+ const strategy = getStrategy(provider.apiFormat);
38
+ const targetModel = model || '';
39
+ // If no model provided, we cannot test (user must select model first)
40
+ if (!targetModel) {
41
+ return {
42
+ success: false,
43
+ latencyMs: 0,
44
+ message: '请先选择模型 (Please select a model)'
45
+ };
46
+ }
47
+ const headers = strategy.buildHeaders(apiKey);
48
+ // 使用聊天接口进行测试,发送最简单的请求
49
+ const testPayload = strategy.buildChatPayload(targetModel, [{ role: 'user', content: 'Hi' }], 5);
50
+ const endpoint = strategy.getChatEndpoint(actualBaseUrl, apiKey, targetModel);
51
+ const response = await fetch(endpoint, {
52
+ method: 'POST',
53
+ headers,
54
+ body: JSON.stringify(testPayload),
55
+ });
56
+ const latencyMs = Date.now() - startTime;
57
+ if (response.ok) {
58
+ return { success: true, latencyMs, message: '连接成功' };
59
+ }
60
+ else {
61
+ const errorText = await response.text();
62
+ return {
63
+ success: false,
64
+ latencyMs,
65
+ message: `HTTP ${response.status}: ${errorText.slice(0, 200)}`
66
+ };
67
+ }
68
+ }
69
+ catch (error) {
70
+ return {
71
+ success: false,
72
+ latencyMs: Date.now() - startTime,
73
+ message: error instanceof Error ? error.message : String(error),
74
+ };
75
+ }
76
+ }
77
+ /**
78
+ * Fetch available models from a provider
79
+ */
80
+ export async function fetchModels(options) {
81
+ const { provider, apiKey, baseUrl, proxyUrl, fallbackToStatic = true } = options;
82
+ // If proxy URL is provided, use it
83
+ if (proxyUrl) {
84
+ try {
85
+ const response = await fetch(`${proxyUrl}/models`, {
86
+ method: 'POST',
87
+ headers: { 'Content-Type': 'application/json' },
88
+ body: JSON.stringify({
89
+ provider_id: provider.id,
90
+ api_key: apiKey || undefined,
91
+ base_url: baseUrl || provider.baseUrl,
92
+ }),
93
+ });
94
+ const data = await response.json();
95
+ if (data.success && data.models?.length > 0) {
96
+ return data.models;
97
+ }
98
+ }
99
+ catch (error) {
100
+ console.warn('Failed to fetch models via proxy:', error);
101
+ if (!fallbackToStatic)
102
+ throw error;
103
+ }
104
+ }
105
+ // Direct API call
106
+ if (!proxyUrl && provider.supportsModelsApi) {
107
+ try {
108
+ const strategy = getStrategy(provider.apiFormat);
109
+ if (strategy.getModelsEndpoint) {
110
+ const endpoint = strategy.getModelsEndpoint(baseUrl || provider.baseUrl, apiKey || '');
111
+ const headers = strategy.buildHeaders(apiKey || '');
112
+ const response = await fetch(endpoint, {
113
+ method: 'GET',
114
+ headers
115
+ });
116
+ if (response.ok) {
117
+ const data = await response.json();
118
+ const parser = strategy.parseModelsResponse || defaultParseModelsResponse;
119
+ return parser(data);
120
+ }
121
+ else {
122
+ if (!fallbackToStatic)
123
+ throw new Error(`HTTP ${response.status}`);
124
+ }
125
+ }
126
+ }
127
+ catch (e) {
128
+ console.warn('Failed to fetch models directly:', e);
129
+ if (!fallbackToStatic)
130
+ throw e;
131
+ }
132
+ }
133
+ if (!fallbackToStatic && provider.supportsModelsApi) {
134
+ throw new Error('Failed to fetch models');
135
+ }
136
+ // Fallback to static models
137
+ return getStaticModels(provider.id);
138
+ }
139
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * AI Provider Selector - Config Resolution
3
+ * Resolves ProviderConfig into a list of providers and models
4
+ */
5
+ import type { Provider, Model, ProviderConfig } from './types';
6
+ export interface ResolvedConfig {
7
+ providers: Provider[];
8
+ getModels: (providerId: string) => Model[];
9
+ }
10
+ /**
11
+ * Resolve a ProviderConfig into usable providers and models
12
+ */
13
+ export declare function resolveProviderConfig(config?: ProviderConfig): ResolvedConfig;
14
+ /**
15
+ * Get a single provider by ID from config
16
+ */
17
+ export declare function getProviderFromConfig(providerId: string, config?: ProviderConfig): Provider | null;
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAA4B,MAAM,SAAS,CAAC;AAIzF,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,cAAc,CA8E7E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI,CAGlG"}
package/dist/config.js ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ * AI Provider Selector - Config Resolution
3
+ * Resolves ProviderConfig into a list of providers and models
4
+ */
5
+ import { PROVIDERS } from './providers';
6
+ import { getStaticModels } from './models';
7
+ /**
8
+ * Resolve a ProviderConfig into usable providers and models
9
+ */
10
+ export function resolveProviderConfig(config) {
11
+ // Default config: use all built-in providers
12
+ if (!config) {
13
+ return {
14
+ providers: Object.values(PROVIDERS),
15
+ getModels: (providerId) => getStaticModels(providerId),
16
+ };
17
+ }
18
+ const { mode, include, exclude, custom } = config;
19
+ let providers = [];
20
+ // Handle built-in providers based on mode
21
+ if (mode === 'default') {
22
+ let builtInProviders = Object.values(PROVIDERS);
23
+ // Apply include filter
24
+ if (include && include.length > 0) {
25
+ builtInProviders = builtInProviders.filter(p => include.includes(p.id));
26
+ }
27
+ // Apply exclude filter
28
+ if (exclude && exclude.length > 0) {
29
+ builtInProviders = builtInProviders.filter(p => !exclude.includes(p.id));
30
+ }
31
+ providers = [...builtInProviders];
32
+ }
33
+ // Handle custom providers
34
+ const customModelsMap = {};
35
+ if (custom) {
36
+ for (const [id, def] of Object.entries(custom)) {
37
+ const customProvider = {
38
+ id,
39
+ name: def.name,
40
+ baseUrl: def.baseUrl,
41
+ needsApiKey: def.needsApiKey,
42
+ apiFormat: def.apiFormat,
43
+ supportsModelsApi: def.supportsModelsApi ?? false,
44
+ icon: def.icon,
45
+ };
46
+ // Check if provider already exists (for override)
47
+ const existingIndex = providers.findIndex(p => p.id === id);
48
+ if (existingIndex >= 0) {
49
+ // Merge/Override existing provider
50
+ // We keep the original icon if custom doesn't provide one
51
+ providers[existingIndex] = {
52
+ ...providers[existingIndex],
53
+ ...customProvider,
54
+ icon: customProvider.icon || providers[existingIndex].icon
55
+ };
56
+ }
57
+ else {
58
+ // Add new provider
59
+ providers.push(customProvider);
60
+ }
61
+ // Store custom models if provided
62
+ if (def.models && def.models.length > 0) {
63
+ customModelsMap[id] = def.models;
64
+ }
65
+ }
66
+ }
67
+ // Create getModels function that checks custom models first
68
+ const getModels = (providerId) => {
69
+ // Check custom models first
70
+ if (customModelsMap[providerId]) {
71
+ return customModelsMap[providerId];
72
+ }
73
+ // Fall back to static models
74
+ return getStaticModels(providerId);
75
+ };
76
+ return { providers, getModels };
77
+ }
78
+ /**
79
+ * Get a single provider by ID from config
80
+ */
81
+ export function getProviderFromConfig(providerId, config) {
82
+ const { providers } = resolveProviderConfig(config);
83
+ return providers.find(p => p.id === providerId) || null;
84
+ }
85
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ export declare const I18N: {
2
+ readonly zh: {
3
+ readonly save: "保存配置";
4
+ readonly saved: "保存成功";
5
+ readonly providerLabel: "Provider";
6
+ readonly modelLabel: "Model";
7
+ readonly selectProvider: "选择 Provider...";
8
+ readonly customBaseUrl: "自定义 Base URL";
9
+ readonly apiKeyLabel: "API Key";
10
+ readonly apiKeyPlaceholder: "输入 API Key...";
11
+ readonly testConnection: "测试模型连接";
12
+ readonly testing: "测试中...";
13
+ readonly testSuccess: "连接成功";
14
+ readonly testFailed: "测试连通性失败";
15
+ readonly selectModel: "选择 Model...";
16
+ readonly searchModel: "搜索或自定义模型...";
17
+ readonly useCustom: "使用自定义";
18
+ readonly noModels: "暂无模型数据";
19
+ readonly apiKeyTip: "输入 API Key 后可获取完整模型列表";
20
+ readonly fetchModelsFailed: "拉取模型列表失败,已使用离线模型列表";
21
+ readonly refreshingModels: "列表刷新中...";
22
+ readonly modelListUpdated: "模型列表已刷新";
23
+ readonly preview: "配置预览";
24
+ readonly unselected: "(未选择)";
25
+ };
26
+ readonly en: {
27
+ readonly save: "Save Config";
28
+ readonly saved: "Saved";
29
+ readonly providerLabel: "Provider";
30
+ readonly modelLabel: "Model";
31
+ readonly selectProvider: "Select Provider...";
32
+ readonly customBaseUrl: "Custom Base URL";
33
+ readonly apiKeyLabel: "API Key";
34
+ readonly apiKeyPlaceholder: "Enter API Key...";
35
+ readonly testConnection: "Test Model Connection";
36
+ readonly testing: "Testing...";
37
+ readonly testSuccess: "Connection Successful";
38
+ readonly testFailed: "Connection Failed";
39
+ readonly selectModel: "Select Model...";
40
+ readonly searchModel: "Search or custom models...";
41
+ readonly useCustom: "Use custom";
42
+ readonly noModels: "No models found";
43
+ readonly apiKeyTip: "Enter API Key to fetch full model list";
44
+ readonly fetchModelsFailed: "Failed to fetch model list, using offline models";
45
+ readonly refreshingModels: "Refreshing models...";
46
+ readonly modelListUpdated: "Model list updated";
47
+ readonly preview: "Config Preview";
48
+ readonly unselected: "(Unselected)";
49
+ };
50
+ };
51
+ export type Language = keyof typeof I18N;
52
+ export type I18NKeys = keyof typeof I18N['zh'];
53
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDP,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,IAAI,CAAC;AACzC,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC"}
package/dist/i18n.js ADDED
@@ -0,0 +1,51 @@
1
+ export const I18N = {
2
+ zh: {
3
+ save: '保存配置',
4
+ saved: '保存成功',
5
+ providerLabel: 'Provider',
6
+ modelLabel: 'Model',
7
+ selectProvider: '选择 Provider...',
8
+ customBaseUrl: '自定义 Base URL',
9
+ apiKeyLabel: 'API Key',
10
+ apiKeyPlaceholder: '输入 API Key...',
11
+ testConnection: '测试模型连接',
12
+ testing: '测试中...',
13
+ testSuccess: '连接成功',
14
+ testFailed: '测试连通性失败',
15
+ selectModel: '选择 Model...',
16
+ searchModel: '搜索或自定义模型...',
17
+ useCustom: '使用自定义',
18
+ noModels: '暂无模型数据',
19
+ apiKeyTip: '输入 API Key 后可获取完整模型列表',
20
+ fetchModelsFailed: '拉取模型列表失败,已使用离线模型列表',
21
+ refreshingModels: '列表刷新中...',
22
+ modelListUpdated: '模型列表已刷新',
23
+ preview: '配置预览',
24
+ unselected: '(未选择)',
25
+ },
26
+ en: {
27
+ save: 'Save Config',
28
+ saved: 'Saved',
29
+ providerLabel: 'Provider',
30
+ modelLabel: 'Model',
31
+ selectProvider: 'Select Provider...',
32
+ customBaseUrl: 'Custom Base URL',
33
+ apiKeyLabel: 'API Key',
34
+ apiKeyPlaceholder: 'Enter API Key...',
35
+ testConnection: 'Test Model Connection',
36
+ testing: 'Testing...',
37
+ testSuccess: 'Connection Successful',
38
+ testFailed: 'Connection Failed',
39
+ selectModel: 'Select Model...',
40
+ searchModel: 'Search or custom models...',
41
+ useCustom: 'Use custom',
42
+ noModels: 'No models found',
43
+ apiKeyTip: 'Enter API Key to fetch full model list',
44
+ fetchModelsFailed: 'Failed to fetch model list, using offline models',
45
+ refreshingModels: 'Refreshing models...',
46
+ modelListUpdated: 'Model list updated',
47
+ preview: 'Config Preview',
48
+ unselected: '(Unselected)',
49
+ }
50
+ };
51
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;IAChB,EAAE,EAAE;QACA,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,aAAa,EAAE,UAAU;QACzB,UAAU,EAAE,OAAO;QACnB,cAAc,EAAE,gBAAgB;QAChC,aAAa,EAAE,cAAc;QAC7B,WAAW,EAAE,SAAS;QACtB,iBAAiB,EAAE,eAAe;QAClC,cAAc,EAAE,QAAQ;QACxB,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,SAAS;QACrB,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,OAAO;QAClB,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,uBAAuB;QAClC,iBAAiB,EAAE,oBAAoB;QACvC,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,SAAS;QAC3B,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,OAAO;KACtB;IACD,EAAE,EAAE;QACA,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,OAAO;QACd,aAAa,EAAE,UAAU;QACzB,UAAU,EAAE,OAAO;QACnB,cAAc,EAAE,oBAAoB;QACpC,aAAa,EAAE,iBAAiB;QAChC,WAAW,EAAE,SAAS;QACtB,iBAAiB,EAAE,kBAAkB;QACrC,cAAc,EAAE,uBAAuB;QACvC,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE,mBAAmB;QAC/B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,wCAAwC;QACnD,iBAAiB,EAAE,kDAAkD;QACrE,gBAAgB,EAAE,sBAAsB;QACxC,gBAAgB,EAAE,oBAAoB;QACtC,OAAO,EAAE,gBAAgB;QACzB,UAAU,EAAE,cAAc;KAC7B;CACK,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * AI Provider Icons
3
+ * Simple SVG icons for each provider
4
+ */
5
+ export declare const PROVIDER_ICONS: Record<string, string>;
6
+ /**
7
+ * Get SVG icon HTML for a provider
8
+ */
9
+ export declare function getProviderIcon(providerId: string): string;
10
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D"}
package/dist/icons.js ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * AI Provider Icons
3
+ * Simple SVG icons for each provider
4
+ */
5
+ export const PROVIDER_ICONS = {
6
+ openai: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z"/></svg>`,
7
+ anthropic: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M13.827 3.52h3.603L24 20.48h-3.603L13.827 3.52zm-7.257 0h3.603l6.57 16.96h-3.603L6.57 3.52zm-.87 12.64L3.94 20.48H0l4.908-6.61 1.562 2.29z"/></svg>`,
8
+ gemini: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 24A14.304 14.304 0 0 0 0 12 14.304 14.304 0 0 0 12 0a14.305 14.305 0 0 0 12 12 14.305 14.305 0 0 0-12 12"/></svg>`,
9
+ deepseek: `<svg viewBox="0 0 24 24" fill="currentColor"><circle cx="12" cy="12" r="10"/></svg>`,
10
+ groq: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2L2 7v10l10 5 10-5V7L12 2zm0 2.5L19 8l-7 3.5L5 8l7-3.5zM4 9.5l7 3.5v7l-7-3.5v-7zm16 0v7l-7 3.5v-7l7-3.5z"/></svg>`,
11
+ cohere: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2zm0 4a6 6 0 100 12 6 6 0 000-12z"/></svg>`,
12
+ together: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>`,
13
+ ollama: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm0 3a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zm0 14a7.5 7.5 0 0 1-6-3c.04-2 4-3.1 6-3.1s5.96 1.1 6 3.1a7.5 7.5 0 0 1-6 3z"/></svg>`,
14
+ custom: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg>`,
15
+ };
16
+ /**
17
+ * Get SVG icon HTML for a provider
18
+ */
19
+ export function getProviderIcon(providerId) {
20
+ return PROVIDER_ICONS[providerId] || PROVIDER_ICONS.custom;
21
+ }
22
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAA2B;IAClD,MAAM,EAAE,oyCAAoyC;IAE5yC,SAAS,EAAE,2MAA2M;IAEtN,MAAM,EAAE,6KAA6K;IAErL,QAAQ,EAAE,qFAAqF;IAE/F,IAAI,EAAE,6KAA6K;IAEnL,MAAM,EAAE,wKAAwK;IAEhL,QAAQ,EAAE,6WAA6W;IAEvX,MAAM,EAAE,6NAA6N;IAErO,MAAM,EAAE,2IAA2I;CACtJ,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAC9C,OAAO,cAAc,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * AI Provider Selector - Core Package
3
+ * Framework-agnostic logic for AI provider configuration
4
+ */
5
+ export * from './i18n';
6
+ export type { Provider, Model, AIConfig, ApiFormat, TestConnectionOptions, TestConnectionResult, FetchModelsOptions, StorageAdapter, ProviderConfig, CustomProviderDefinition, AIConfigFormProps, ModelFetcher, FetcherParams, FetcherActionType, } from './types';
7
+ export { PROVIDERS, PROVIDER_ID, type ProviderId, getProvider, getAllProviders, getProvidersByFormat } from './providers';
8
+ export { STATIC_MODELS, getStaticModels } from './models';
9
+ export { testConnection, fetchModels } from './api';
10
+ export { localStorageAdapter, createConfigStorage } from './storage';
11
+ export { resolveProviderConfig, getProviderFromConfig, type ResolvedConfig } from './config';
12
+ export { type ProviderStrategy, strategyRegistry, getStrategy, sendDirectChat, testDirectConnection, type DirectChatOptions, type DirectChatResult, } from './strategies';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,QAAQ,CAAC;AAGvB,YAAY,EACR,QAAQ,EACR,KAAK,EACL,QAAQ,EAER,SAAS,EACT,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EAEd,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EAEjB,YAAY,EACZ,aAAa,EACb,iBAAiB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACH,SAAS,EACT,WAAW,EACX,KAAK,UAAU,EACf,WAAW,EACX,eAAe,EACf,oBAAoB,EACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACH,aAAa,EACb,eAAe,EAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,cAAc,EACd,WAAW,EACd,MAAM,OAAO,CAAC;AAGf,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,WAAW,CAAC;AAKnB,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,cAAc,EACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACxB,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * AI Provider Selector - Core Package
3
+ * Framework-agnostic logic for AI provider configuration
4
+ */
5
+ // I18N
6
+ export * from './i18n';
7
+ // Providers
8
+ export { PROVIDERS, PROVIDER_ID, getProvider, getAllProviders, getProvidersByFormat } from './providers';
9
+ // Models
10
+ export { STATIC_MODELS, getStaticModels } from './models';
11
+ // API
12
+ export { testConnection, fetchModels } from './api';
13
+ // Storage
14
+ export { localStorageAdapter, createConfigStorage } from './storage';
15
+ // Config Resolution
16
+ export { resolveProviderConfig, getProviderFromConfig } from './config';
17
+ // Strategies
18
+ export { strategyRegistry, getStrategy, sendDirectChat, testDirectConnection, } from './strategies';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO;AACP,cAAc,QAAQ,CAAC;AAuBvB,YAAY;AACZ,OAAO,EACH,SAAS,EACT,WAAW,EAEX,WAAW,EACX,eAAe,EACf,oBAAoB,EACvB,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EACH,aAAa,EACb,eAAe,EAClB,MAAM,UAAU,CAAC;AAElB,MAAM;AACN,OAAO,EACH,cAAc,EACd,WAAW,EACd,MAAM,OAAO,CAAC;AAEf,UAAU;AACV,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,WAAW,CAAC;AAInB,oBAAoB;AACpB,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EAExB,MAAM,UAAU,CAAC;AAElB,aAAa;AACb,OAAO,EAEH,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,oBAAoB,GAGvB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AI Provider Selector - Static Model Definitions
3
+ * Models data when API doesn't support /models endpoint
4
+ */
5
+ import type { Model } from './types';
6
+ export declare const STATIC_MODELS: Record<string, Model[]>;
7
+ /**
8
+ * Get static models for a provider
9
+ */
10
+ export declare function getStaticModels(providerId: string): Model[];
11
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CA0LjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE,CAE3D"}