@sqlrooms/ai 0.24.24 → 0.24.25

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 (46) hide show
  1. package/README.md +76 -1
  2. package/dist/AiSettingsSlice.d.ts +148 -0
  3. package/dist/AiSettingsSlice.d.ts.map +1 -0
  4. package/dist/AiSettingsSlice.js +180 -0
  5. package/dist/AiSettingsSlice.js.map +1 -0
  6. package/dist/AiSlice.d.ts +15 -24
  7. package/dist/AiSlice.d.ts.map +1 -1
  8. package/dist/AiSlice.js +99 -32
  9. package/dist/AiSlice.js.map +1 -1
  10. package/dist/analysis.d.ts +1 -3
  11. package/dist/analysis.d.ts.map +1 -1
  12. package/dist/analysis.js +2 -4
  13. package/dist/analysis.js.map +1 -1
  14. package/dist/components/AnalysisResult.js +1 -1
  15. package/dist/components/AnalysisResult.js.map +1 -1
  16. package/dist/components/settings/AiModelParameters.d.ts +6 -0
  17. package/dist/components/settings/AiModelParameters.d.ts.map +1 -0
  18. package/dist/components/settings/AiModelParameters.js +91 -0
  19. package/dist/components/settings/AiModelParameters.js.map +1 -0
  20. package/dist/components/settings/AiModelUsage.d.ts +18 -0
  21. package/dist/components/settings/AiModelUsage.d.ts.map +1 -0
  22. package/dist/components/settings/AiModelUsage.js +60 -0
  23. package/dist/components/settings/AiModelUsage.js.map +1 -0
  24. package/dist/components/settings/AiModelsSettings.d.ts +10 -0
  25. package/dist/components/settings/AiModelsSettings.d.ts.map +1 -0
  26. package/dist/components/settings/AiModelsSettings.js +229 -0
  27. package/dist/components/settings/AiModelsSettings.js.map +1 -0
  28. package/dist/components/settings/AiProvidersSettings.d.ts +3 -0
  29. package/dist/components/settings/AiProvidersSettings.d.ts.map +1 -0
  30. package/dist/components/settings/AiProvidersSettings.js +88 -0
  31. package/dist/components/settings/AiProvidersSettings.js.map +1 -0
  32. package/dist/components/settings/AiSettingsPanel.d.ts +17 -0
  33. package/dist/components/settings/AiSettingsPanel.d.ts.map +1 -0
  34. package/dist/components/settings/AiSettingsPanel.js +20 -0
  35. package/dist/components/settings/AiSettingsPanel.js.map +1 -0
  36. package/dist/components/tools/ToolResultErrorBoundary.d.ts +1 -1
  37. package/dist/index.d.ts +9 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +7 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/schemas.d.ts +5 -5
  42. package/dist/utils.d.ts +17 -0
  43. package/dist/utils.d.ts.map +1 -0
  44. package/dist/utils.js +31 -0
  45. package/dist/utils.js.map +1 -0
  46. package/package.json +12 -10
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ # @sqlrooms/ai
2
+
1
3
  An AI integration package for SQLRooms that provides components and utilities for adding AI-powered features to your data applications. This package enables natural language querying, data analysis, and AI-assisted insights.
2
4
 
3
5
  ## Features
@@ -408,7 +410,7 @@ Each `toolCallMessages` has the following properties:
408
410
 
409
411
  ## Rendering
410
412
 
411
- ```
413
+ ```text
412
414
  |--------------------------------|
413
415
  | AnalysisResultsContainer |
414
416
  |--------------------------------|
@@ -490,3 +492,76 @@ const functions = {
490
492
  - **Feedback Loop**: Collect user feedback to improve AI responses
491
493
 
492
494
  For more information, visit the SQLRooms documentation.
495
+
496
+ ## AI Settings Configuration
497
+
498
+ This package now includes comprehensive AI settings components. These components provide a complete set of UI elements for managing AI model configuration, parameters, and usage tracking.
499
+
500
+ ### AI Settings Features
501
+
502
+ - **createAiSettingsSlice**: Function to create a Zustand slice for managing AI model configuration with room-shell integration
503
+ - **AiSettingsPanel**: Main configuration panel with modular sub-components for different configuration aspects
504
+ - **ProvidersSettings**: Component for configuring AI providers (OpenAI, Anthropic, etc.) with API keys and base URLs
505
+ - **ModelsSettings**: Component for managing available models and their parameters
506
+ - **ModelParametersSettings**: Component for configuring model parameters like max steps and system instructions
507
+ - **ModelSelector**: Standalone model selector component for quick model switching
508
+ - **extractModelsFromSettings**: Utility function to extract models from configuration for use in selectors
509
+
510
+ ### AI Settings Usage
511
+
512
+ #### Individual Components
513
+
514
+ ```tsx
515
+ import {
516
+ AiSettingsPanel,
517
+ ModelSelector,
518
+ extractModelsFromSettings,
519
+ } from '@sqlrooms/ai';
520
+ import {useRoomStore} from '../store';
521
+
522
+ // Access AI model configuration from store
523
+ const aiSettings = useRoomStore((s) => s.config.aiSettings);
524
+ const models = extractModelsFromSettings(aiSettings);
525
+
526
+ // Main configuration panel with sub-components
527
+ <AiSettingsPanel isOpen={isConfigOpen} setIsOpen={setIsConfigOpen}>
528
+ <AiSettingsPanel.ProvidersSettings />
529
+ <AiSettingsPanel.ModelsSettings />
530
+ <AiSettingsPanel.ModelParametersSettings
531
+ getDefaultInstructions={getDefaultInstructionsWrapper}
532
+ />
533
+ </AiSettingsPanel>
534
+
535
+ // Standalone model selector
536
+ <ModelSelector models={models} />
537
+ ```
538
+
539
+ ### AI Settings API Reference
540
+
541
+ #### Core Components
542
+
543
+ - **`AiSettingsPanel`**: Main configuration panel with modular sub-components
544
+ - `AiSettingsPanel.ProvidersSettings`: Configure AI providers (OpenAI, Anthropic, etc.)
545
+ - `AiSettingsPanel.ModelsSettings`: Manage available models and their parameters
546
+ - `AiSettingsPanel.ModelParametersSettings`: Configure model parameters and instructions
547
+ - **`ModelSelector`**: Standalone model selector for quick switching
548
+ - **`extractModelsFromSettings(config)`**: Utility to extract models from configuration
549
+
550
+ #### Slice Configuration
551
+
552
+ The package uses a slice-based configuration system that integrates with SQLRooms room-shell:
553
+
554
+ - **`createAiSettingsSlice()`**: Creates the AI settings configuration slice for state management
555
+ - **`AiSettingsSliceConfig`**: TypeScript type for configuration schema
556
+ - **`createDefaultAiSettings(providers)`**: Helper to create default configuration with providers
557
+ - **`getApiKey(config, provider, model)`**: Utility to get API key from configuration
558
+ - **`getBaseUrl(config, provider, model)`**: Utility to get base URL from configuration
559
+
560
+ #### Store Integration
561
+
562
+ The AI settings configuration integrates with the main AI slice through helper functions:
563
+
564
+ - **`getApiKey()`**: Function to retrieve API key from current session and model config
565
+ - **`getMaxSteps()`**: Function to get max steps from model configuration
566
+ - **`getBaseUrl()`**: Function to get base URL from current session and model config
567
+ - **`getInstructions(tablesSchema)`**: Function to generate system instructions with optional custom instructions
@@ -0,0 +1,148 @@
1
+ import { BaseRoomConfig, RoomShellSliceState, type StateCreator } from '@sqlrooms/room-shell';
2
+ import { z } from 'zod';
3
+ export declare const AiSettingsSliceConfig: z.ZodObject<{
4
+ aiSettings: z.ZodObject<{
5
+ providers: z.ZodRecord<z.ZodString, z.ZodObject<{
6
+ baseUrl: z.ZodString;
7
+ apiKey: z.ZodString;
8
+ models: z.ZodArray<z.ZodObject<{
9
+ modelName: z.ZodString;
10
+ }, "strip", z.ZodTypeAny, {
11
+ modelName: string;
12
+ }, {
13
+ modelName: string;
14
+ }>, "many">;
15
+ }, "strip", z.ZodTypeAny, {
16
+ baseUrl: string;
17
+ apiKey: string;
18
+ models: {
19
+ modelName: string;
20
+ }[];
21
+ }, {
22
+ baseUrl: string;
23
+ apiKey: string;
24
+ models: {
25
+ modelName: string;
26
+ }[];
27
+ }>>;
28
+ customModels: z.ZodArray<z.ZodObject<{
29
+ baseUrl: z.ZodString;
30
+ apiKey: z.ZodString;
31
+ modelName: z.ZodString;
32
+ }, "strip", z.ZodTypeAny, {
33
+ baseUrl: string;
34
+ apiKey: string;
35
+ modelName: string;
36
+ }, {
37
+ baseUrl: string;
38
+ apiKey: string;
39
+ modelName: string;
40
+ }>, "many">;
41
+ modelParameters: z.ZodObject<{
42
+ maxSteps: z.ZodNumber;
43
+ additionalInstruction: z.ZodString;
44
+ }, "strip", z.ZodTypeAny, {
45
+ maxSteps: number;
46
+ additionalInstruction: string;
47
+ }, {
48
+ maxSteps: number;
49
+ additionalInstruction: string;
50
+ }>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ providers: Record<string, {
53
+ baseUrl: string;
54
+ apiKey: string;
55
+ models: {
56
+ modelName: string;
57
+ }[];
58
+ }>;
59
+ customModels: {
60
+ baseUrl: string;
61
+ apiKey: string;
62
+ modelName: string;
63
+ }[];
64
+ modelParameters: {
65
+ maxSteps: number;
66
+ additionalInstruction: string;
67
+ };
68
+ }, {
69
+ providers: Record<string, {
70
+ baseUrl: string;
71
+ apiKey: string;
72
+ models: {
73
+ modelName: string;
74
+ }[];
75
+ }>;
76
+ customModels: {
77
+ baseUrl: string;
78
+ apiKey: string;
79
+ modelName: string;
80
+ }[];
81
+ modelParameters: {
82
+ maxSteps: number;
83
+ additionalInstruction: string;
84
+ };
85
+ }>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ aiSettings: {
88
+ providers: Record<string, {
89
+ baseUrl: string;
90
+ apiKey: string;
91
+ models: {
92
+ modelName: string;
93
+ }[];
94
+ }>;
95
+ customModels: {
96
+ baseUrl: string;
97
+ apiKey: string;
98
+ modelName: string;
99
+ }[];
100
+ modelParameters: {
101
+ maxSteps: number;
102
+ additionalInstruction: string;
103
+ };
104
+ };
105
+ }, {
106
+ aiSettings: {
107
+ providers: Record<string, {
108
+ baseUrl: string;
109
+ apiKey: string;
110
+ models: {
111
+ modelName: string;
112
+ }[];
113
+ }>;
114
+ customModels: {
115
+ baseUrl: string;
116
+ apiKey: string;
117
+ modelName: string;
118
+ }[];
119
+ modelParameters: {
120
+ maxSteps: number;
121
+ additionalInstruction: string;
122
+ };
123
+ };
124
+ }>;
125
+ export type AiSettingsSliceConfig = z.infer<typeof AiSettingsSliceConfig>;
126
+ export declare function createDefaultAiSettings(props: Partial<AiSettingsSliceConfig['aiSettings']>): AiSettingsSliceConfig;
127
+ export type AiSettingsSliceState = {
128
+ getAiSettings: () => AiSettingsSliceConfig['aiSettings'];
129
+ setMaxSteps: (maxSteps: number) => void;
130
+ setAdditionalInstruction: (additionalInstruction: string) => void;
131
+ updateProvider: (provider: string, updates: {
132
+ baseUrl?: string;
133
+ apiKey?: string;
134
+ }) => void;
135
+ addProvider: (provider: string, baseUrl: string, apiKey: string) => void;
136
+ addModelToProvider: (provider: string, modelName: string) => void;
137
+ removeModelFromProvider: (provider: string, modelName: string) => void;
138
+ removeProvider: (provider: string) => void;
139
+ addCustomModel: (baseUrl: string, apiKey: string, modelName: string) => void;
140
+ updateCustomModel: (oldModelName: string, baseUrl: string, apiKey: string, newModelName: string) => void;
141
+ removeCustomModel: (modelName: string) => void;
142
+ };
143
+ export declare function createAiSettingsSlice<PC extends BaseRoomConfig & AiSettingsSliceConfig>(): StateCreator<AiSettingsSliceState>;
144
+ type RoomConfigWithAiSettings = BaseRoomConfig & AiSettingsSliceConfig;
145
+ type RoomShellSliceStateWithAiSettings = RoomShellSliceState<RoomConfigWithAiSettings> & AiSettingsSliceState;
146
+ export declare function useStoreWithAiSettings<T>(selector: (state: RoomShellSliceStateWithAiSettings) => T): T;
147
+ export {};
148
+ //# sourceMappingURL=AiSettingsSlice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiSettingsSlice.d.ts","sourceRoot":"","sources":["../src/AiSettingsSlice.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EACd,mBAAmB,EACnB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,GAClD,qBAAqB,CAwCvB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACzD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wBAAwB,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,cAAc,EAAE,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,KACE,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,uBAAuB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvE,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,KACjB,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,EAAE,SAAS,cAAc,GAAG,qBAAqB,KAC9C,YAAY,CAAC,oBAAoB,CAAC,CA4KtC;AAED,KAAK,wBAAwB,GAAG,cAAc,GAAG,qBAAqB,CAAC;AACvE,KAAK,iCAAiC,GACpC,mBAAmB,CAAC,wBAAwB,CAAC,GAAG,oBAAoB,CAAC;AAGvE,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,iCAAiC,KAAK,CAAC,GACxD,CAAC,CAMH"}
@@ -0,0 +1,180 @@
1
+ import { useBaseRoomShellStore, createSlice, } from '@sqlrooms/room-shell';
2
+ import { produce } from 'immer';
3
+ import { z } from 'zod';
4
+ export const AiSettingsSliceConfig = z.object({
5
+ aiSettings: z.object({
6
+ providers: z.record(z.string(), // provider name
7
+ z.object({
8
+ baseUrl: z.string(),
9
+ apiKey: z.string(),
10
+ models: z.array(z.object({
11
+ modelName: z.string(),
12
+ })),
13
+ })),
14
+ // custom models using provider 'custom'
15
+ customModels: z.array(z.object({
16
+ baseUrl: z.string(),
17
+ apiKey: z.string(),
18
+ modelName: z.string(),
19
+ })),
20
+ modelParameters: z.object({
21
+ maxSteps: z.number(),
22
+ additionalInstruction: z.string(),
23
+ }),
24
+ }),
25
+ });
26
+ export function createDefaultAiSettings(props) {
27
+ return {
28
+ aiSettings: {
29
+ providers: {
30
+ openai: {
31
+ baseUrl: 'https://api.openai.com/v1',
32
+ apiKey: '',
33
+ models: [
34
+ {
35
+ modelName: 'gpt-4.1',
36
+ },
37
+ {
38
+ modelName: 'gpt-5',
39
+ },
40
+ ],
41
+ },
42
+ anthropic: {
43
+ baseUrl: 'https://api.anthropic.com',
44
+ apiKey: '',
45
+ models: [
46
+ {
47
+ modelName: 'claude-4-sonnet',
48
+ },
49
+ ],
50
+ },
51
+ },
52
+ customModels: [
53
+ // {
54
+ // baseUrl: 'http://localhost:11434/v1',
55
+ // apiKey: '',
56
+ // modelName: 'qwen3',
57
+ // },
58
+ ],
59
+ modelParameters: {
60
+ maxSteps: 5,
61
+ additionalInstruction: '',
62
+ },
63
+ ...props,
64
+ },
65
+ };
66
+ }
67
+ export function createAiSettingsSlice() {
68
+ return createSlice((set, get) => {
69
+ return {
70
+ getAiSettings: () => {
71
+ const state = get();
72
+ return state.config.aiSettings;
73
+ },
74
+ setMaxSteps: (maxSteps) => {
75
+ set((state) => produce(state, (draft) => {
76
+ draft.config.aiSettings.modelParameters.maxSteps = maxSteps;
77
+ }));
78
+ },
79
+ setAdditionalInstruction: (additionalInstruction) => {
80
+ set((state) => produce(state, (draft) => {
81
+ draft.config.aiSettings.modelParameters.additionalInstruction =
82
+ additionalInstruction;
83
+ }));
84
+ },
85
+ updateProvider: (provider, updates) => {
86
+ set((state) => produce(state, (draft) => {
87
+ if (draft.config.aiSettings.providers[provider]) {
88
+ Object.assign(draft.config.aiSettings.providers[provider], updates);
89
+ }
90
+ }));
91
+ },
92
+ addProvider: (provider, baseUrl, apiKey) => {
93
+ set((state) => produce(state, (draft) => {
94
+ draft.config.aiSettings.providers[provider] = {
95
+ baseUrl,
96
+ apiKey,
97
+ models: [],
98
+ };
99
+ }));
100
+ },
101
+ addModelToProvider: (provider, modelName) => {
102
+ set((state) => produce(state, (draft) => {
103
+ if (draft.config.aiSettings.providers[provider]) {
104
+ // Check if model already exists
105
+ const modelExists = draft.config.aiSettings.providers[provider].models.some((model) => model.modelName === modelName);
106
+ if (!modelExists) {
107
+ draft.config.aiSettings.providers[provider].models.push({
108
+ modelName: modelName,
109
+ });
110
+ }
111
+ }
112
+ }));
113
+ },
114
+ removeModelFromProvider: (provider, modelName) => {
115
+ set((state) => produce(state, (draft) => {
116
+ if (draft.config.aiSettings.providers[provider]) {
117
+ draft.config.aiSettings.providers[provider].models =
118
+ draft.config.aiSettings.providers[provider].models.filter((model) => model.modelName !== modelName);
119
+ }
120
+ }));
121
+ },
122
+ removeProvider: (provider) => {
123
+ set((state) => produce(state, (draft) => {
124
+ delete draft.config.aiSettings.providers[provider];
125
+ }));
126
+ },
127
+ addCustomModel: (baseUrl, apiKey, modelName) => {
128
+ set((state) => produce(state, (draft) => {
129
+ const newCustomModel = {
130
+ baseUrl,
131
+ apiKey,
132
+ modelName,
133
+ };
134
+ // Check if a custom model with the same name already exists
135
+ const existingModelIndex = draft.config.aiSettings.customModels.findIndex((model) => model.modelName.toLowerCase() === modelName.toLowerCase());
136
+ if (existingModelIndex !== -1) {
137
+ // Update existing model
138
+ draft.config.aiSettings.customModels[existingModelIndex] =
139
+ newCustomModel;
140
+ }
141
+ else {
142
+ // Add new model
143
+ draft.config.aiSettings.customModels.push(newCustomModel);
144
+ }
145
+ }));
146
+ },
147
+ updateCustomModel: (oldModelName, baseUrl, apiKey, newModelName) => {
148
+ set((state) => produce(state, (draft) => {
149
+ // Find the model to update
150
+ const modelIndex = draft.config.aiSettings.customModels.findIndex((model) => model.modelName === oldModelName);
151
+ if (modelIndex !== -1) {
152
+ // Check if the new name conflicts with another model (excluding the current one)
153
+ const conflictingModelIndex = draft.config.aiSettings.customModels.findIndex((model, index) => index !== modelIndex &&
154
+ model.modelName.toLowerCase() ===
155
+ newModelName.toLowerCase());
156
+ if (conflictingModelIndex === -1) {
157
+ // Update the model
158
+ draft.config.aiSettings.customModels[modelIndex] = {
159
+ baseUrl,
160
+ apiKey,
161
+ modelName: newModelName,
162
+ };
163
+ }
164
+ }
165
+ }));
166
+ },
167
+ removeCustomModel: (modelName) => {
168
+ set((state) => produce(state, (draft) => {
169
+ draft.config.aiSettings.customModels =
170
+ draft.config.aiSettings.customModels.filter((model) => model.modelName !== modelName);
171
+ }));
172
+ },
173
+ };
174
+ });
175
+ }
176
+ // Hook to access aiSettings from the room store
177
+ export function useStoreWithAiSettings(selector) {
178
+ return useBaseRoomShellStore((state) => selector(state));
179
+ }
180
+ //# sourceMappingURL=AiSettingsSlice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiSettingsSlice.js","sourceRoot":"","sources":["../src/AiSettingsSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n useBaseRoomShellStore,\n createSlice,\n BaseRoomConfig,\n RoomShellSliceState,\n type StateCreator,\n} from '@sqlrooms/room-shell';\nimport {produce} from 'immer';\nimport {z} from 'zod';\n\nexport const AiSettingsSliceConfig = z.object({\n aiSettings: z.object({\n providers: z.record(\n z.string(), // provider name\n z.object({\n baseUrl: z.string(),\n apiKey: z.string(),\n models: z.array(\n z.object({\n modelName: z.string(),\n }),\n ),\n }),\n ),\n // custom models using provider 'custom'\n customModels: z.array(\n z.object({\n baseUrl: z.string(),\n apiKey: z.string(),\n modelName: z.string(),\n }),\n ),\n modelParameters: z.object({\n maxSteps: z.number(),\n additionalInstruction: z.string(),\n }),\n }),\n});\nexport type AiSettingsSliceConfig = z.infer<typeof AiSettingsSliceConfig>;\n\nexport function createDefaultAiSettings(\n props: Partial<AiSettingsSliceConfig['aiSettings']>,\n): AiSettingsSliceConfig {\n return {\n aiSettings: {\n providers: {\n openai: {\n baseUrl: 'https://api.openai.com/v1',\n apiKey: '',\n models: [\n {\n modelName: 'gpt-4.1',\n },\n {\n modelName: 'gpt-5',\n },\n ],\n },\n anthropic: {\n baseUrl: 'https://api.anthropic.com',\n apiKey: '',\n models: [\n {\n modelName: 'claude-4-sonnet',\n },\n ],\n },\n },\n customModels: [\n // {\n // baseUrl: 'http://localhost:11434/v1',\n // apiKey: '',\n // modelName: 'qwen3',\n // },\n ],\n modelParameters: {\n maxSteps: 5,\n additionalInstruction: '',\n },\n ...props,\n },\n };\n}\n\nexport type AiSettingsSliceState = {\n getAiSettings: () => AiSettingsSliceConfig['aiSettings'];\n setMaxSteps: (maxSteps: number) => void;\n setAdditionalInstruction: (additionalInstruction: string) => void;\n updateProvider: (\n provider: string,\n updates: {\n baseUrl?: string;\n apiKey?: string;\n },\n ) => void;\n addProvider: (provider: string, baseUrl: string, apiKey: string) => void;\n addModelToProvider: (provider: string, modelName: string) => void;\n removeModelFromProvider: (provider: string, modelName: string) => void;\n removeProvider: (provider: string) => void;\n addCustomModel: (baseUrl: string, apiKey: string, modelName: string) => void;\n updateCustomModel: (\n oldModelName: string,\n baseUrl: string,\n apiKey: string,\n newModelName: string,\n ) => void;\n removeCustomModel: (modelName: string) => void;\n};\n\nexport function createAiSettingsSlice<\n PC extends BaseRoomConfig & AiSettingsSliceConfig,\n>(): StateCreator<AiSettingsSliceState> {\n return createSlice<PC, AiSettingsSliceState>((set, get) => {\n return {\n getAiSettings: () => {\n const state = get();\n return state.config.aiSettings;\n },\n\n setMaxSteps: (maxSteps: number) => {\n set((state) =>\n produce(state, (draft) => {\n draft.config.aiSettings.modelParameters.maxSteps = maxSteps;\n }),\n );\n },\n\n setAdditionalInstruction: (additionalInstruction: string) => {\n set((state) =>\n produce(state, (draft) => {\n draft.config.aiSettings.modelParameters.additionalInstruction =\n additionalInstruction;\n }),\n );\n },\n\n updateProvider: (\n provider: string,\n updates: {\n baseUrl?: string;\n apiKey?: string;\n },\n ) => {\n set((state) =>\n produce(state, (draft) => {\n if (draft.config.aiSettings.providers[provider]) {\n Object.assign(\n draft.config.aiSettings.providers[provider],\n updates,\n );\n }\n }),\n );\n },\n\n addProvider: (provider: string, baseUrl: string, apiKey: string) => {\n set((state) =>\n produce(state, (draft) => {\n draft.config.aiSettings.providers[provider] = {\n baseUrl,\n apiKey,\n models: [],\n };\n }),\n );\n },\n\n addModelToProvider: (provider: string, modelName: string) => {\n set((state) =>\n produce(state, (draft) => {\n if (draft.config.aiSettings.providers[provider]) {\n // Check if model already exists\n const modelExists = draft.config.aiSettings.providers[\n provider\n ].models.some((model) => model.modelName === modelName);\n\n if (!modelExists) {\n draft.config.aiSettings.providers[provider].models.push({\n modelName: modelName,\n });\n }\n }\n }),\n );\n },\n\n removeModelFromProvider: (provider: string, modelName: string) => {\n set((state) =>\n produce(state, (draft) => {\n if (draft.config.aiSettings.providers[provider]) {\n draft.config.aiSettings.providers[provider].models =\n draft.config.aiSettings.providers[provider].models.filter(\n (model) => model.modelName !== modelName,\n );\n }\n }),\n );\n },\n\n removeProvider: (provider: string) => {\n set((state) =>\n produce(state, (draft) => {\n delete draft.config.aiSettings.providers[provider];\n }),\n );\n },\n\n addCustomModel: (baseUrl: string, apiKey: string, modelName: string) => {\n set((state) =>\n produce(state, (draft) => {\n const newCustomModel = {\n baseUrl,\n apiKey,\n modelName,\n };\n\n // Check if a custom model with the same name already exists\n const existingModelIndex =\n draft.config.aiSettings.customModels.findIndex(\n (model) =>\n model.modelName.toLowerCase() === modelName.toLowerCase(),\n );\n\n if (existingModelIndex !== -1) {\n // Update existing model\n draft.config.aiSettings.customModels[existingModelIndex] =\n newCustomModel;\n } else {\n // Add new model\n draft.config.aiSettings.customModels.push(newCustomModel);\n }\n }),\n );\n },\n\n updateCustomModel: (\n oldModelName: string,\n baseUrl: string,\n apiKey: string,\n newModelName: string,\n ) => {\n set((state) =>\n produce(state, (draft) => {\n // Find the model to update\n const modelIndex = draft.config.aiSettings.customModels.findIndex(\n (model) => model.modelName === oldModelName,\n );\n\n if (modelIndex !== -1) {\n // Check if the new name conflicts with another model (excluding the current one)\n const conflictingModelIndex =\n draft.config.aiSettings.customModels.findIndex(\n (model, index) =>\n index !== modelIndex &&\n model.modelName.toLowerCase() ===\n newModelName.toLowerCase(),\n );\n\n if (conflictingModelIndex === -1) {\n // Update the model\n draft.config.aiSettings.customModels[modelIndex] = {\n baseUrl,\n apiKey,\n modelName: newModelName,\n };\n }\n }\n }),\n );\n },\n\n removeCustomModel: (modelName: string) => {\n set((state) =>\n produce(state, (draft) => {\n draft.config.aiSettings.customModels =\n draft.config.aiSettings.customModels.filter(\n (model) => model.modelName !== modelName,\n );\n }),\n );\n },\n };\n });\n}\n\ntype RoomConfigWithAiSettings = BaseRoomConfig & AiSettingsSliceConfig;\ntype RoomShellSliceStateWithAiSettings =\n RoomShellSliceState<RoomConfigWithAiSettings> & AiSettingsSliceState;\n\n// Hook to access aiSettings from the room store\nexport function useStoreWithAiSettings<T>(\n selector: (state: RoomShellSliceStateWithAiSettings) => T,\n): T {\n return useBaseRoomShellStore<\n BaseRoomConfig & AiSettingsSliceConfig,\n RoomShellSliceState<RoomConfigWithAiSettings>,\n T\n >((state) => selector(state as unknown as RoomShellSliceStateWithAiSettings));\n}\n"]}
package/dist/AiSlice.d.ts CHANGED
@@ -241,8 +241,8 @@ export declare const AiSliceConfig: z.ZodObject<{
241
241
  error: string;
242
242
  } | undefined;
243
243
  }[];
244
- customModelName?: string | undefined;
245
244
  baseUrl?: string | undefined;
245
+ customModelName?: string | undefined;
246
246
  createdAt?: Date | undefined;
247
247
  }, {
248
248
  id: string;
@@ -258,8 +258,8 @@ export declare const AiSliceConfig: z.ZodObject<{
258
258
  error: string;
259
259
  } | undefined;
260
260
  }[];
261
- customModelName?: string | undefined;
262
261
  baseUrl?: string | undefined;
262
+ customModelName?: string | undefined;
263
263
  createdAt?: Date | undefined;
264
264
  }>, {
265
265
  id: string;
@@ -297,8 +297,8 @@ export declare const AiSliceConfig: z.ZodObject<{
297
297
  error: string;
298
298
  } | undefined;
299
299
  }[];
300
- customModelName?: string | undefined;
301
300
  baseUrl?: string | undefined;
301
+ customModelName?: string | undefined;
302
302
  createdAt?: Date | undefined;
303
303
  }, unknown>, "many">;
304
304
  currentSessionId: z.ZodOptional<z.ZodString>;
@@ -339,8 +339,8 @@ export declare const AiSliceConfig: z.ZodObject<{
339
339
  error: string;
340
340
  } | undefined;
341
341
  }[];
342
- customModelName?: string | undefined;
343
342
  baseUrl?: string | undefined;
343
+ customModelName?: string | undefined;
344
344
  createdAt?: Date | undefined;
345
345
  }[];
346
346
  currentSessionId?: string | undefined;
@@ -386,8 +386,8 @@ export declare const AiSliceConfig: z.ZodObject<{
386
386
  error: string;
387
387
  } | undefined;
388
388
  }[];
389
- customModelName?: string | undefined;
390
389
  baseUrl?: string | undefined;
390
+ customModelName?: string | undefined;
391
391
  createdAt?: Date | undefined;
392
392
  }[];
393
393
  currentSessionId?: string | undefined;
@@ -411,8 +411,6 @@ export type AiSliceState = {
411
411
  startAnalysis: () => Promise<void>;
412
412
  cancelAnalysis: () => void;
413
413
  setAiModel: (modelProvider: string, model: string) => void;
414
- setCustomModelName: (customModelName: string) => void;
415
- setBaseUrl: (baseUrl: string) => void;
416
414
  createSession: (name?: string, modelProvider?: string, model?: string) => void;
417
415
  switchSession: (sessionId: string) => void;
418
416
  renameSession: (sessionId: string, name: string) => void;
@@ -420,6 +418,10 @@ export type AiSliceState = {
420
418
  getCurrentSession: () => AnalysisSessionSchema | undefined;
421
419
  deleteAnalysisResult: (sessionId: string, resultId: string) => void;
422
420
  findToolComponent: (toolName: string) => React.ComponentType | undefined;
421
+ getApiKeyFromSettings: () => string;
422
+ getBaseUrlFromSettings: () => string | undefined;
423
+ getMaxStepsFromSettings: () => number;
424
+ getInstructionsFromSettings: () => string;
423
425
  };
424
426
  };
425
427
  /**
@@ -437,24 +439,13 @@ export interface AiSliceOptions {
437
439
  */
438
440
  getInstructions?: (tablesSchema: DataTable[]) => string;
439
441
  toolsOptions?: DefaultToolsOptions;
440
- }
441
- /**
442
- * API key configuration for the AI slice
443
- */
444
- export type AiSliceApiConfig = {
442
+ defaultProvider?: string;
445
443
  defaultModel?: string;
446
- } & ({
447
- baseUrl: string;
448
- getApiKey?: never;
449
- } | {
450
- getApiKey: (modelProvider: string) => string;
451
- baseUrl?: never;
452
- });
453
- /**
454
- * Complete configuration for creating an AI slice
455
- */
456
- export type CreateAiSliceConfig = AiSliceOptions & AiSliceApiConfig;
457
- export declare function createAiSlice<PC extends BaseRoomConfig & AiSliceConfig>(params: CreateAiSliceConfig): StateCreator<AiSliceState>;
444
+ maxSteps?: number;
445
+ getApiKey?: (modelProvider: string) => string;
446
+ getBaseUrl?: () => string;
447
+ }
448
+ export declare function createAiSlice<PC extends BaseRoomConfig & AiSliceConfig>(params: AiSliceOptions): StateCreator<AiSliceState>;
458
449
  type RoomConfigWithAi = BaseRoomConfig & AiSliceConfig;
459
450
  type RoomShellSliceStateWithAi = RoomShellSliceState<RoomConfigWithAi> & AiSliceState;
460
451
  export declare function useStoreWithAi<T>(selector: (state: RoomShellSliceStateWithAi) => T): T;
@@ -1 +1 @@
1
- {"version":3,"file":"AiSlice.d.ts","sourceRoot":"","sources":["../src/AiSlice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AiSlice.d.ts","sourceRoot":"","sources":["../src/AiSlice.ts"],"names":[],"mappings":"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"}