You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

use-form-config-map.tsx 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. import { LlmSettingSchema } from '@/components/llm-setting-items/next';
  2. import { CodeTemplateStrMap, ProgrammingLanguage } from '@/constants/agent';
  3. import { useTranslation } from 'react-i18next';
  4. import { z } from 'zod';
  5. import { Operator } from '../constant';
  6. import AkShareForm from '../form/akshare-form';
  7. import AnswerForm from '../form/answer-form';
  8. import ArXivForm from '../form/arxiv-form';
  9. import BaiduFanyiForm from '../form/baidu-fanyi-form';
  10. import BaiduForm from '../form/baidu-form';
  11. import BeginForm from '../form/begin-form';
  12. import BingForm from '../form/bing-form';
  13. import CategorizeForm from '../form/categorize-form';
  14. import CodeForm from '../form/code-form';
  15. import CrawlerForm from '../form/crawler-form';
  16. import DeepLForm from '../form/deepl-form';
  17. import DuckDuckGoForm from '../form/duckduckgo-form';
  18. import EmailForm from '../form/email-form';
  19. import ExeSQLForm from '../form/exesql-form';
  20. import GenerateForm from '../form/generate-form';
  21. import GithubForm from '../form/github-form';
  22. import GoogleForm from '../form/google-form';
  23. import GoogleScholarForm from '../form/google-scholar-form';
  24. import InvokeForm from '../form/invoke-form';
  25. import IterationForm from '../form/iteration-from';
  26. import Jin10Form from '../form/jin10-form';
  27. import KeywordExtractForm from '../form/keyword-extract-form';
  28. import MessageForm from '../form/message-form';
  29. import PubMedForm from '../form/pubmed-form';
  30. import QWeatherForm from '../form/qweather-form';
  31. import RelevantForm from '../form/relevant-form';
  32. import RetrievalForm from '../form/retrieval-form/next';
  33. import RewriteQuestionForm from '../form/rewrite-question-form';
  34. import SwitchForm from '../form/switch-form';
  35. import TemplateForm from '../form/template-form';
  36. import TuShareForm from '../form/tushare-form';
  37. import WenCaiForm from '../form/wencai-form';
  38. import WikipediaForm from '../form/wikipedia-form';
  39. import YahooFinanceForm from '../form/yahoo-finance-form';
  40. export function useFormConfigMap() {
  41. const { t } = useTranslation();
  42. const FormConfigMap = {
  43. [Operator.Begin]: {
  44. component: BeginForm,
  45. defaultValues: {},
  46. schema: z.object({
  47. enablePrologue: z.boolean().optional(),
  48. prologue: z
  49. .string()
  50. .min(1, {
  51. message: t('common.namePlaceholder'),
  52. })
  53. .trim()
  54. .optional(),
  55. mode: z.string(),
  56. query: z
  57. .array(
  58. z.object({
  59. key: z.string(),
  60. type: z.string(),
  61. value: z.string(),
  62. optional: z.boolean(),
  63. name: z.string(),
  64. options: z.array(z.union([z.number(), z.string(), z.boolean()])),
  65. }),
  66. )
  67. .optional(),
  68. }),
  69. },
  70. [Operator.Retrieval]: {
  71. component: RetrievalForm,
  72. defaultValues: { query: [] },
  73. schema: z.object({
  74. name: z
  75. .string()
  76. .min(1, {
  77. message: t('common.namePlaceholder'),
  78. })
  79. .trim(),
  80. age: z
  81. .string()
  82. .min(1, {
  83. message: t('common.namePlaceholder'),
  84. })
  85. .trim(),
  86. query: z.array(
  87. z.object({
  88. type: z.string(),
  89. }),
  90. ),
  91. }),
  92. },
  93. [Operator.Generate]: {
  94. component: GenerateForm,
  95. defaultValues: {
  96. cite: true,
  97. prompt: t('flow.promptText'),
  98. },
  99. schema: z.object({
  100. prompt: z.string().min(1, {
  101. message: t('flow.promptMessage'),
  102. }),
  103. }),
  104. },
  105. [Operator.Answer]: {
  106. component: AnswerForm,
  107. defaultValues: {},
  108. schema: z.object({}),
  109. },
  110. [Operator.Categorize]: {
  111. component: CategorizeForm,
  112. defaultValues: {},
  113. schema: z.object({
  114. parameter: z.string().optional(),
  115. ...LlmSettingSchema,
  116. message_history_window_size: z.coerce.number(),
  117. items: z.array(
  118. z
  119. .object({
  120. name: z.string().min(1, t('flow.nameMessage')).trim(),
  121. description: z.string().optional(),
  122. // examples: z
  123. // .array(
  124. // z.object({
  125. // value: z.string(),
  126. // }),
  127. // )
  128. // .optional(),
  129. })
  130. .optional(),
  131. ),
  132. }),
  133. },
  134. [Operator.Message]: {
  135. component: MessageForm,
  136. defaultValues: {},
  137. schema: z.object({
  138. content: z
  139. .array(
  140. z.object({
  141. value: z.string(),
  142. }),
  143. )
  144. .optional(),
  145. }),
  146. },
  147. [Operator.Relevant]: {
  148. component: RelevantForm,
  149. defaultValues: {},
  150. schema: z.object({}),
  151. },
  152. [Operator.RewriteQuestion]: {
  153. component: RewriteQuestionForm,
  154. defaultValues: {
  155. message_history_window_size: 6,
  156. },
  157. schema: z.object({
  158. llm_id: z.string(),
  159. message_history_window_size: z.number(),
  160. language: z.string(),
  161. }),
  162. },
  163. [Operator.Code]: {
  164. component: CodeForm,
  165. defaultValues: {
  166. lang: ProgrammingLanguage.Python,
  167. script: CodeTemplateStrMap[ProgrammingLanguage.Python],
  168. arguments: [],
  169. },
  170. schema: z.object({
  171. lang: z.string(),
  172. script: z.string(),
  173. arguments: z.array(
  174. z.object({ name: z.string(), component_id: z.string() }),
  175. ),
  176. return: z.union([
  177. z
  178. .array(z.object({ name: z.string(), component_id: z.string() }))
  179. .optional(),
  180. z.object({ name: z.string(), component_id: z.string() }),
  181. ]),
  182. }),
  183. },
  184. [Operator.WaitingDialogue]: {
  185. component: CodeForm,
  186. defaultValues: {},
  187. schema: z.object({
  188. arguments: z.array(
  189. z.object({ name: z.string(), component_id: z.string() }),
  190. ),
  191. }),
  192. },
  193. [Operator.Baidu]: {
  194. component: BaiduForm,
  195. defaultValues: { top_n: 10 },
  196. schema: z.object({ top_n: z.number() }),
  197. },
  198. [Operator.DuckDuckGo]: {
  199. component: DuckDuckGoForm,
  200. defaultValues: {
  201. top_n: 10,
  202. channel: 'text',
  203. },
  204. schema: z.object({
  205. top_n: z.number(),
  206. }),
  207. },
  208. [Operator.KeywordExtract]: {
  209. component: KeywordExtractForm,
  210. defaultValues: { top_n: 3 },
  211. schema: z.object({
  212. llm_id: z.string(),
  213. top_n: z.number(),
  214. }),
  215. },
  216. [Operator.Wikipedia]: {
  217. component: WikipediaForm,
  218. defaultValues: {
  219. top_n: 10,
  220. },
  221. schema: z.object({
  222. language: z.string(),
  223. top_n: z.number(),
  224. }),
  225. },
  226. [Operator.PubMed]: {
  227. component: PubMedForm,
  228. defaultValues: { top_n: 10 },
  229. schema: z.object({
  230. top_n: z.number(),
  231. email: z.string(),
  232. }),
  233. },
  234. [Operator.ArXiv]: {
  235. component: ArXivForm,
  236. defaultValues: {},
  237. schema: z.object({}),
  238. },
  239. [Operator.Google]: {
  240. component: GoogleForm,
  241. defaultValues: {},
  242. schema: z.object({}),
  243. },
  244. [Operator.Bing]: {
  245. component: BingForm,
  246. defaultValues: {},
  247. schema: z.object({}),
  248. },
  249. [Operator.GoogleScholar]: {
  250. component: GoogleScholarForm,
  251. defaultValues: {},
  252. schema: z.object({}),
  253. },
  254. [Operator.DeepL]: {
  255. component: DeepLForm,
  256. defaultValues: {},
  257. schema: z.object({}),
  258. },
  259. [Operator.GitHub]: {
  260. component: GithubForm,
  261. defaultValues: {},
  262. schema: z.object({}),
  263. },
  264. [Operator.BaiduFanyi]: {
  265. component: BaiduFanyiForm,
  266. defaultValues: {},
  267. schema: z.object({}),
  268. },
  269. [Operator.QWeather]: {
  270. component: QWeatherForm,
  271. defaultValues: {},
  272. schema: z.object({
  273. web_apikey: z.string(),
  274. lang: z.string(),
  275. type: z.string(),
  276. user_type: z.string(),
  277. time_period: z.string().optional(),
  278. }),
  279. },
  280. [Operator.ExeSQL]: {
  281. component: ExeSQLForm,
  282. defaultValues: {},
  283. schema: z.object({}),
  284. },
  285. [Operator.Switch]: {
  286. component: SwitchForm,
  287. defaultValues: {},
  288. schema: z.object({}),
  289. },
  290. [Operator.WenCai]: {
  291. component: WenCaiForm,
  292. defaultValues: {
  293. top_n: 20,
  294. },
  295. schema: z.object({
  296. top_n: z.number(),
  297. query_type: z.string(),
  298. }),
  299. },
  300. [Operator.AkShare]: {
  301. component: AkShareForm,
  302. defaultValues: {
  303. top_n: 10,
  304. },
  305. schema: z.object({
  306. top_n: z.number(),
  307. }),
  308. },
  309. [Operator.YahooFinance]: {
  310. component: YahooFinanceForm,
  311. defaultValues: {},
  312. schema: z.object({}),
  313. },
  314. [Operator.Jin10]: {
  315. component: Jin10Form,
  316. defaultValues: {},
  317. schema: z.object({}),
  318. },
  319. [Operator.TuShare]: {
  320. component: TuShareForm,
  321. defaultValues: {},
  322. schema: z.object({}),
  323. },
  324. [Operator.Crawler]: {
  325. component: CrawlerForm,
  326. defaultValues: {},
  327. schema: z.object({}),
  328. },
  329. [Operator.Invoke]: {
  330. component: InvokeForm,
  331. defaultValues: {},
  332. schema: z.object({}),
  333. },
  334. [Operator.Concentrator]: {
  335. component: () => <></>,
  336. defaultValues: {},
  337. schema: z.object({}),
  338. },
  339. [Operator.Note]: {
  340. component: () => <></>,
  341. defaultValues: {},
  342. schema: z.object({}),
  343. },
  344. [Operator.Template]: {
  345. component: TemplateForm,
  346. defaultValues: {},
  347. schema: z.object({}),
  348. },
  349. [Operator.Email]: {
  350. component: EmailForm,
  351. defaultValues: {},
  352. schema: z.object({}),
  353. },
  354. [Operator.Iteration]: {
  355. component: IterationForm,
  356. defaultValues: {},
  357. schema: z.object({}),
  358. },
  359. [Operator.IterationStart]: {
  360. component: () => <></>,
  361. defaultValues: {},
  362. schema: z.object({}),
  363. },
  364. };
  365. return FormConfigMap;
  366. }