index.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React from 'react'
  4. import { useContext } from 'use-context-selector'
  5. import produce from 'immer'
  6. import { useFormattingChangedDispatcher } from '../debug/hooks'
  7. import DatasetConfig from '../dataset-config'
  8. import HistoryPanel from '../config-prompt/conversation-history/history-panel'
  9. import ConfigVision from '../config-vision'
  10. import ConfigDocument from './config-document'
  11. import AgentTools from './agent/agent-tools'
  12. import ConfigContext from '@/context/debug-configuration'
  13. import ConfigPrompt from '@/app/components/app/configuration/config-prompt'
  14. import ConfigVar from '@/app/components/app/configuration/config-var'
  15. import { type ModelConfig, type PromptVariable } from '@/models/debug'
  16. import type { AppType } from '@/types/app'
  17. import { ModelModeType } from '@/types/app'
  18. const Config: FC = () => {
  19. const {
  20. mode,
  21. isAdvancedMode,
  22. modelModeType,
  23. isAgent,
  24. hasSetBlockStatus,
  25. showHistoryModal,
  26. modelConfig,
  27. setModelConfig,
  28. setPrevPromptConfig,
  29. } = useContext(ConfigContext)
  30. const isChatApp = ['advanced-chat', 'agent-chat', 'chat'].includes(mode)
  31. const formattingChangedDispatcher = useFormattingChangedDispatcher()
  32. const promptTemplate = modelConfig.configs.prompt_template
  33. const promptVariables = modelConfig.configs.prompt_variables
  34. // simple mode
  35. const handlePromptChange = (newTemplate: string, newVariables: PromptVariable[]) => {
  36. const newModelConfig = produce(modelConfig, (draft: ModelConfig) => {
  37. draft.configs.prompt_template = newTemplate
  38. draft.configs.prompt_variables = [...draft.configs.prompt_variables, ...newVariables]
  39. })
  40. if (modelConfig.configs.prompt_template !== newTemplate)
  41. formattingChangedDispatcher()
  42. setPrevPromptConfig(modelConfig.configs)
  43. setModelConfig(newModelConfig)
  44. }
  45. const handlePromptVariablesNameChange = (newVariables: PromptVariable[]) => {
  46. setPrevPromptConfig(modelConfig.configs)
  47. const newModelConfig = produce(modelConfig, (draft: ModelConfig) => {
  48. draft.configs.prompt_variables = newVariables
  49. })
  50. setModelConfig(newModelConfig)
  51. }
  52. return (
  53. <>
  54. <div
  55. className="grow h-0 relative px-6 pb-[50px] overflow-y-auto"
  56. >
  57. {/* Template */}
  58. <ConfigPrompt
  59. mode={mode as AppType}
  60. promptTemplate={promptTemplate}
  61. promptVariables={promptVariables}
  62. onChange={handlePromptChange}
  63. />
  64. {/* Variables */}
  65. <ConfigVar
  66. promptVariables={promptVariables}
  67. onPromptVariablesChange={handlePromptVariablesNameChange}
  68. />
  69. {/* Dataset */}
  70. <DatasetConfig />
  71. {/* Tools */}
  72. {isAgent && (
  73. <AgentTools />
  74. )}
  75. <ConfigVision />
  76. <ConfigDocument />
  77. {/* Chat History */}
  78. {isAdvancedMode && isChatApp && modelModeType === ModelModeType.completion && (
  79. <HistoryPanel
  80. showWarning={!hasSetBlockStatus.history}
  81. onShowEditModal={showHistoryModal}
  82. />
  83. )}
  84. </div>
  85. </>
  86. )
  87. }
  88. export default React.memo(Config)