codacus commited on
Commit
a404a35
·
1 Parent(s): 68757cb

auto select model on provider disabled

Browse files
Files changed (1) hide show
  1. app/components/chat/ModelSelector.tsx +16 -51
app/components/chat/ModelSelector.tsx CHANGED
@@ -1,7 +1,6 @@
1
  import type { ProviderInfo } from '~/types/model';
2
  import type { ModelInfo } from '~/utils/types';
3
- import { useEffect, useState } from 'react';
4
- import Cookies from 'js-cookie';
5
 
6
  interface ModelSelectorProps {
7
  model?: string;
@@ -22,62 +21,28 @@ export const ModelSelector = ({
22
  providerList,
23
  }: ModelSelectorProps) => {
24
  // Load enabled providers from cookies
25
- const [enabledProviders, setEnabledProviders] = useState(() => {
26
- const savedProviders = Cookies.get('providers');
27
-
28
- if (savedProviders) {
29
- try {
30
- const parsedProviders = JSON.parse(savedProviders);
31
- return providerList.filter((p) => parsedProviders[p.name]);
32
- } catch (error) {
33
- console.error('Failed to parse providers from cookies:', error);
34
- return providerList;
35
- }
36
- }
37
-
38
- return providerList;
39
- });
40
 
41
  // Update enabled providers when cookies change
42
  useEffect(() => {
43
- // Function to update providers from cookies
44
- const updateProvidersFromCookies = () => {
45
- const savedProviders = Cookies.get('providers');
46
-
47
- if (savedProviders) {
48
- try {
49
- const parsedProviders = JSON.parse(savedProviders);
50
- const newEnabledProviders = providerList.filter((p) => parsedProviders[p.name]);
51
- setEnabledProviders(newEnabledProviders);
52
 
53
- // If current provider is disabled, switch to first enabled provider
54
- if (provider && !parsedProviders[provider.name] && newEnabledProviders.length > 0) {
55
- const firstEnabledProvider = newEnabledProviders[0];
56
- setProvider?.(firstEnabledProvider);
57
 
58
- // Also update the model to the first available one for the new provider
59
- const firstModel = modelList.find((m) => m.provider === firstEnabledProvider.name);
60
 
61
- if (firstModel) {
62
- setModel?.(firstModel.name);
63
- }
64
- }
65
- } catch (error) {
66
- console.error('Failed to parse providers from cookies:', error);
67
- }
68
  }
69
- };
70
-
71
- // Initial update
72
- updateProvidersFromCookies();
73
-
74
- // Set up an interval to check for cookie changes
75
- const interval = setInterval(updateProvidersFromCookies, 1000);
76
-
77
- return () => clearInterval(interval);
78
  }, [providerList, provider, setProvider, modelList, setModel]);
79
 
80
- if (enabledProviders.length === 0) {
81
  return (
82
  <div className="mb-2 p-4 rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary">
83
  <p className="text-center">
@@ -93,7 +58,7 @@ export const ModelSelector = ({
93
  <select
94
  value={provider?.name ?? ''}
95
  onChange={(e) => {
96
- const newProvider = enabledProviders.find((p: ProviderInfo) => p.name === e.target.value);
97
 
98
  if (newProvider && setProvider) {
99
  setProvider(newProvider);
@@ -107,7 +72,7 @@ export const ModelSelector = ({
107
  }}
108
  className="flex-1 p-2 rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary focus:outline-none focus:ring-2 focus:ring-bolt-elements-focus transition-all"
109
  >
110
- {enabledProviders.map((provider: ProviderInfo) => (
111
  <option key={provider.name} value={provider.name}>
112
  {provider.name}
113
  </option>
 
1
  import type { ProviderInfo } from '~/types/model';
2
  import type { ModelInfo } from '~/utils/types';
3
+ import { useEffect } from 'react';
 
4
 
5
  interface ModelSelectorProps {
6
  model?: string;
 
21
  providerList,
22
  }: ModelSelectorProps) => {
23
  // Load enabled providers from cookies
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  // Update enabled providers when cookies change
26
  useEffect(() => {
27
+ // If current provider is disabled, switch to first enabled provider
28
+ if (providerList.length == 0) {
29
+ return;
30
+ }
 
 
 
 
 
31
 
32
+ if (provider && !providerList.map((p) => p.name).includes(provider.name)) {
33
+ const firstEnabledProvider = providerList[0];
34
+ setProvider?.(firstEnabledProvider);
 
35
 
36
+ // Also update the model to the first available one for the new provider
37
+ const firstModel = modelList.find((m) => m.provider === firstEnabledProvider.name);
38
 
39
+ if (firstModel) {
40
+ setModel?.(firstModel.name);
 
 
 
 
 
41
  }
42
+ }
 
 
 
 
 
 
 
 
43
  }, [providerList, provider, setProvider, modelList, setModel]);
44
 
45
+ if (providerList.length === 0) {
46
  return (
47
  <div className="mb-2 p-4 rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary">
48
  <p className="text-center">
 
58
  <select
59
  value={provider?.name ?? ''}
60
  onChange={(e) => {
61
+ const newProvider = providerList.find((p: ProviderInfo) => p.name === e.target.value);
62
 
63
  if (newProvider && setProvider) {
64
  setProvider(newProvider);
 
72
  }}
73
  className="flex-1 p-2 rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary focus:outline-none focus:ring-2 focus:ring-bolt-elements-focus transition-all"
74
  >
75
+ {providerList.map((provider: ProviderInfo) => (
76
  <option key={provider.name} value={provider.name}>
77
  {provider.name}
78
  </option>