ModelSetting.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React, { useEffect, useState } from 'react';
  2. import { Card, Spin, Tabs } from '@douyinfe/semi-ui';
  3. import { API, showError, showSuccess } from '../helpers';
  4. import { useTranslation } from 'react-i18next';
  5. import SettingGeminiModel from '../pages/Setting/Model/SettingGeminiModel.js';
  6. import SettingClaudeModel from '../pages/Setting/Model/SettingClaudeModel.js';
  7. import SettingGlobalModel from '../pages/Setting/Model/SettingGlobalModel.js';
  8. const ModelSetting = () => {
  9. const { t } = useTranslation();
  10. let [inputs, setInputs] = useState({
  11. 'gemini.safety_settings': '',
  12. 'gemini.version_settings': '',
  13. 'claude.model_headers_settings': '',
  14. 'claude.thinking_adapter_enabled': true,
  15. 'claude.default_max_tokens': '',
  16. 'claude.thinking_adapter_budget_tokens_percentage': 0.8,
  17. 'global.pass_through_request_enabled': false,
  18. });
  19. let [loading, setLoading] = useState(false);
  20. const getOptions = async () => {
  21. const res = await API.get('/api/option/');
  22. const { success, message, data } = res.data;
  23. if (success) {
  24. let newInputs = {};
  25. data.forEach((item) => {
  26. if (
  27. item.key === 'gemini.safety_settings' ||
  28. item.key === 'gemini.version_settings' ||
  29. item.key === 'claude.model_headers_settings'||
  30. item.key === 'claude.default_max_tokens'
  31. ) {
  32. item.value = JSON.stringify(JSON.parse(item.value), null, 2);
  33. }
  34. if (
  35. item.key.endsWith('Enabled') || item.key.endsWith('enabled')
  36. ) {
  37. newInputs[item.key] = item.value === 'true' ? true : false;
  38. } else {
  39. newInputs[item.key] = item.value;
  40. }
  41. });
  42. setInputs(newInputs);
  43. } else {
  44. showError(message);
  45. }
  46. };
  47. async function onRefresh() {
  48. try {
  49. setLoading(true);
  50. await getOptions();
  51. // showSuccess('刷新成功');
  52. } catch (error) {
  53. showError('刷新失败');
  54. } finally {
  55. setLoading(false);
  56. }
  57. }
  58. useEffect(() => {
  59. onRefresh();
  60. }, []);
  61. return (
  62. <>
  63. <Spin spinning={loading} size='large'>
  64. {/* OpenAI */}
  65. <Card style={{ marginTop: '10px' }}>
  66. <SettingGlobalModel options={inputs} refresh={onRefresh} />
  67. </Card>
  68. {/* Gemini */}
  69. <Card style={{ marginTop: '10px' }}>
  70. <SettingGeminiModel options={inputs} refresh={onRefresh} />
  71. </Card>
  72. {/* Claude */}
  73. <Card style={{ marginTop: '10px' }}>
  74. <SettingClaudeModel options={inputs} refresh={onRefresh} />
  75. </Card>
  76. </Spin>
  77. </>
  78. );
  79. };
  80. export default ModelSetting;