Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { FormContainer } from '@/components/form-container';
  2. import {
  3. Form,
  4. FormControl,
  5. FormField,
  6. FormItem,
  7. FormLabel,
  8. FormMessage,
  9. } from '@/components/ui/form';
  10. import { RAGFlowSelect } from '@/components/ui/select';
  11. import { buildOptions } from '@/utils/form';
  12. import { zodResolver } from '@hookform/resolvers/zod';
  13. import { memo } from 'react';
  14. import { useForm } from 'react-hook-form';
  15. import { z } from 'zod';
  16. import {
  17. TavilyExtractDepth,
  18. TavilyExtractFormat,
  19. initialTavilyExtractValues,
  20. } from '../../constant';
  21. import { useFormValues } from '../../hooks/use-form-values';
  22. import { useWatchFormChange } from '../../hooks/use-watch-form-change';
  23. import { INextOperatorForm } from '../../interface';
  24. import { buildOutputList } from '../../utils/build-output-list';
  25. import { ApiKeyField } from '../components/api-key-field';
  26. import { FormWrapper } from '../components/form-wrapper';
  27. import { Output } from '../components/output';
  28. import { PromptEditor } from '../components/prompt-editor';
  29. import { TavilyFormSchema } from '../tavily-form';
  30. const outputList = buildOutputList(initialTavilyExtractValues.outputs);
  31. function TavilyExtractForm({ node }: INextOperatorForm) {
  32. const values = useFormValues(initialTavilyExtractValues, node);
  33. const FormSchema = z.object({
  34. ...TavilyFormSchema,
  35. urls: z.string(),
  36. extract_depth: z.enum([
  37. TavilyExtractDepth.Advanced,
  38. TavilyExtractDepth.Basic,
  39. ]),
  40. format: z.enum([TavilyExtractFormat.Text, TavilyExtractFormat.Markdown]),
  41. });
  42. const form = useForm<z.infer<typeof FormSchema>>({
  43. defaultValues: values,
  44. resolver: zodResolver(FormSchema),
  45. });
  46. useWatchFormChange(node?.id, form);
  47. return (
  48. <Form {...form}>
  49. <FormWrapper>
  50. <FormContainer>
  51. <ApiKeyField></ApiKeyField>
  52. </FormContainer>
  53. <FormContainer>
  54. <FormField
  55. control={form.control}
  56. name="urls"
  57. render={({ field }) => (
  58. <FormItem>
  59. <FormLabel>URL</FormLabel>
  60. <FormControl>
  61. <PromptEditor
  62. {...field}
  63. multiLine={false}
  64. showToolbar={false}
  65. ></PromptEditor>
  66. </FormControl>
  67. <FormMessage />
  68. </FormItem>
  69. )}
  70. />
  71. <FormField
  72. control={form.control}
  73. name="extract_depth"
  74. render={({ field }) => (
  75. <FormItem>
  76. <FormLabel>Extract Depth</FormLabel>
  77. <FormControl>
  78. <RAGFlowSelect
  79. placeholder="shadcn"
  80. {...field}
  81. options={buildOptions(TavilyExtractDepth)}
  82. />
  83. </FormControl>
  84. <FormMessage />
  85. </FormItem>
  86. )}
  87. />
  88. <FormField
  89. control={form.control}
  90. name="format"
  91. render={({ field }) => (
  92. <FormItem>
  93. <FormLabel>Format</FormLabel>
  94. <FormControl>
  95. <RAGFlowSelect
  96. placeholder="shadcn"
  97. {...field}
  98. options={buildOptions(TavilyExtractFormat)}
  99. />
  100. </FormControl>
  101. <FormMessage />
  102. </FormItem>
  103. )}
  104. />
  105. </FormContainer>
  106. </FormWrapper>
  107. <div className="p-5">
  108. <Output list={outputList}></Output>
  109. </div>
  110. </Form>
  111. );
  112. }
  113. export default memo(TavilyExtractForm);