From 95f646e30f00f5486f440e91df04cec6a3eb884d Mon Sep 17 00:00:00 2001 From: thucpn Date: Mon, 28 Apr 2025 09:52:04 +0700 Subject: [PATCH 01/18] copy llamaindex server package code --- packages/server/.gitignore | 1 + packages/server/CHANGELOG.md | 115 +++ packages/server/next/.gitignore | 39 + .../next/app/components/ui/accordion.tsx | 56 ++ .../next/app/components/ui/alert-dialog.tsx | 157 ++++ .../server/next/app/components/ui/alert.tsx | 68 ++ .../next/app/components/ui/aspect-ratio.tsx | 11 + .../server/next/app/components/ui/avatar.tsx | 53 ++ .../server/next/app/components/ui/badge.tsx | 38 + .../next/app/components/ui/breadcrumb.tsx | 111 +++ .../server/next/app/components/ui/button.tsx | 58 ++ .../next/app/components/ui/calendar.tsx | 75 ++ .../server/next/app/components/ui/card.tsx | 83 ++ .../next/app/components/ui/carousel.tsx | 241 ++++++ .../server/next/app/components/ui/chart.tsx | 353 +++++++++ .../app/components/ui/chat/canvas/panel.tsx | 24 + .../app/components/ui/chat/canvas/preview.tsx | 155 ++++ .../app/components/ui/chat/chat-avatar.tsx | 15 + .../app/components/ui/chat/chat-header.tsx | 55 ++ .../app/components/ui/chat/chat-injection.tsx | 32 + .../app/components/ui/chat/chat-input.tsx | 78 ++ .../ui/chat/chat-message-content.tsx | 29 + .../app/components/ui/chat/chat-messages.tsx | 41 + .../app/components/ui/chat/chat-section.tsx | 89 +++ .../app/components/ui/chat/chat-starter.tsx | 19 + .../custom/events/dynamic-events-errors.tsx | 65 ++ .../ui/chat/custom/events/dynamic-events.tsx | 106 +++ .../ui/chat/custom/events/error-boundary.tsx | 42 + .../ui/chat/custom/events/import.ts | 149 ++++ .../ui/chat/custom/events/loader.ts | 134 ++++ .../components/ui/chat/custom/events/types.ts | 7 + .../ui/chat/custom/llama-cloud-selector.tsx | 185 +++++ .../components/ui/chat/custom/markdown.tsx | 27 + .../ui/chat/hooks/use-copy-to-clipboard.tsx | 33 + .../components/ui/chat/tools/chat-tools.tsx | 98 +++ .../components/ui/chat/tools/weather-card.tsx | 215 ++++++ .../next/app/components/ui/checkbox.tsx | 32 + .../next/app/components/ui/collapsible.tsx | 11 + .../server/next/app/components/ui/command.tsx | 177 +++++ .../next/app/components/ui/context-menu.tsx | 252 ++++++ .../server/next/app/components/ui/dialog.tsx | 135 ++++ .../server/next/app/components/ui/drawer.tsx | 132 ++++ .../next/app/components/ui/dropdown-menu.tsx | 257 +++++++ .../server/next/app/components/ui/form.tsx | 168 ++++ .../app/components/ui/hooks/use-mobile.ts | 23 + .../next/app/components/ui/hover-card.tsx | 44 ++ .../next/app/components/ui/input-otp.tsx | 77 ++ .../server/next/app/components/ui/input.tsx | 23 + .../server/next/app/components/ui/label.tsx | 24 + .../next/app/components/ui/lib/utils.ts | 13 + .../server/next/app/components/ui/menubar.tsx | 276 +++++++ .../app/components/ui/navigation-menu.tsx | 170 ++++ .../next/app/components/ui/pagination.tsx | 129 ++++ .../server/next/app/components/ui/popover.tsx | 48 ++ .../next/app/components/ui/progress.tsx | 31 + .../next/app/components/ui/radio-group.tsx | 45 ++ .../next/app/components/ui/resizable.tsx | 56 ++ .../next/app/components/ui/scroll-area.tsx | 58 ++ .../server/next/app/components/ui/select.tsx | 159 ++++ .../next/app/components/ui/separator.tsx | 28 + .../server/next/app/components/ui/sheet.tsx | 139 ++++ .../server/next/app/components/ui/sidebar.tsx | 726 ++++++++++++++++++ .../next/app/components/ui/skeleton.tsx | 15 + .../server/next/app/components/ui/slider.tsx | 63 ++ .../server/next/app/components/ui/sonner.tsx | 25 + .../server/next/app/components/ui/switch.tsx | 31 + .../server/next/app/components/ui/table.tsx | 116 +++ .../server/next/app/components/ui/tabs.tsx | 54 ++ .../next/app/components/ui/textarea.tsx | 20 + .../next/app/components/ui/toggle-group.tsx | 73 ++ .../server/next/app/components/ui/toggle.tsx | 47 ++ .../server/next/app/components/ui/tooltip.tsx | 61 ++ packages/server/next/app/favicon.ico | Bin 0 -> 15406 bytes packages/server/next/app/globals.css | 267 +++++++ packages/server/next/app/layout.tsx | 26 + packages/server/next/app/page.tsx | 17 + packages/server/next/components.json | 21 + packages/server/next/next.config.ts | 7 + packages/server/next/postcss.config.js | 5 + packages/server/next/public/config.js | 9 + packages/server/next/public/llama.png | Bin 0 -> 36985 bytes packages/server/next/tsconfig.json | 27 + packages/server/package.json | 126 +++ packages/server/src/events.ts | 217 ++++++ packages/server/src/handlers/chat.ts | 45 ++ packages/server/src/handlers/cloud.ts | 30 + packages/server/src/handlers/components.ts | 69 ++ packages/server/src/handlers/files.ts | 23 + packages/server/src/index.ts | 5 + packages/server/src/server.ts | 107 +++ packages/server/src/types.ts | 37 + packages/server/src/utils/file.ts | 31 + packages/server/src/utils/gen-ui.ts | 561 ++++++++++++++ packages/server/src/utils/request.ts | 41 + packages/server/src/utils/suggestion.ts | 62 ++ packages/server/src/utils/workflow.ts | 216 ++++++ packages/server/tsconfig.json | 25 + 97 files changed, 8769 insertions(+) create mode 100644 packages/server/.gitignore create mode 100644 packages/server/CHANGELOG.md create mode 100644 packages/server/next/.gitignore create mode 100644 packages/server/next/app/components/ui/accordion.tsx create mode 100644 packages/server/next/app/components/ui/alert-dialog.tsx create mode 100644 packages/server/next/app/components/ui/alert.tsx create mode 100644 packages/server/next/app/components/ui/aspect-ratio.tsx create mode 100644 packages/server/next/app/components/ui/avatar.tsx create mode 100644 packages/server/next/app/components/ui/badge.tsx create mode 100644 packages/server/next/app/components/ui/breadcrumb.tsx create mode 100644 packages/server/next/app/components/ui/button.tsx create mode 100644 packages/server/next/app/components/ui/calendar.tsx create mode 100644 packages/server/next/app/components/ui/card.tsx create mode 100644 packages/server/next/app/components/ui/carousel.tsx create mode 100644 packages/server/next/app/components/ui/chart.tsx create mode 100644 packages/server/next/app/components/ui/chat/canvas/panel.tsx create mode 100644 packages/server/next/app/components/ui/chat/canvas/preview.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-avatar.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-header.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-injection.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-input.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-message-content.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-messages.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-section.tsx create mode 100644 packages/server/next/app/components/ui/chat/chat-starter.tsx create mode 100644 packages/server/next/app/components/ui/chat/custom/events/dynamic-events-errors.tsx create mode 100644 packages/server/next/app/components/ui/chat/custom/events/dynamic-events.tsx create mode 100644 packages/server/next/app/components/ui/chat/custom/events/error-boundary.tsx create mode 100644 packages/server/next/app/components/ui/chat/custom/events/import.ts create mode 100644 packages/server/next/app/components/ui/chat/custom/events/loader.ts create mode 100644 packages/server/next/app/components/ui/chat/custom/events/types.ts create mode 100644 packages/server/next/app/components/ui/chat/custom/llama-cloud-selector.tsx create mode 100644 packages/server/next/app/components/ui/chat/custom/markdown.tsx create mode 100644 packages/server/next/app/components/ui/chat/hooks/use-copy-to-clipboard.tsx create mode 100644 packages/server/next/app/components/ui/chat/tools/chat-tools.tsx create mode 100644 packages/server/next/app/components/ui/chat/tools/weather-card.tsx create mode 100644 packages/server/next/app/components/ui/checkbox.tsx create mode 100644 packages/server/next/app/components/ui/collapsible.tsx create mode 100644 packages/server/next/app/components/ui/command.tsx create mode 100644 packages/server/next/app/components/ui/context-menu.tsx create mode 100644 packages/server/next/app/components/ui/dialog.tsx create mode 100644 packages/server/next/app/components/ui/drawer.tsx create mode 100644 packages/server/next/app/components/ui/dropdown-menu.tsx create mode 100644 packages/server/next/app/components/ui/form.tsx create mode 100644 packages/server/next/app/components/ui/hooks/use-mobile.ts create mode 100644 packages/server/next/app/components/ui/hover-card.tsx create mode 100644 packages/server/next/app/components/ui/input-otp.tsx create mode 100644 packages/server/next/app/components/ui/input.tsx create mode 100644 packages/server/next/app/components/ui/label.tsx create mode 100644 packages/server/next/app/components/ui/lib/utils.ts create mode 100644 packages/server/next/app/components/ui/menubar.tsx create mode 100644 packages/server/next/app/components/ui/navigation-menu.tsx create mode 100644 packages/server/next/app/components/ui/pagination.tsx create mode 100644 packages/server/next/app/components/ui/popover.tsx create mode 100644 packages/server/next/app/components/ui/progress.tsx create mode 100644 packages/server/next/app/components/ui/radio-group.tsx create mode 100644 packages/server/next/app/components/ui/resizable.tsx create mode 100644 packages/server/next/app/components/ui/scroll-area.tsx create mode 100644 packages/server/next/app/components/ui/select.tsx create mode 100644 packages/server/next/app/components/ui/separator.tsx create mode 100644 packages/server/next/app/components/ui/sheet.tsx create mode 100644 packages/server/next/app/components/ui/sidebar.tsx create mode 100644 packages/server/next/app/components/ui/skeleton.tsx create mode 100644 packages/server/next/app/components/ui/slider.tsx create mode 100644 packages/server/next/app/components/ui/sonner.tsx create mode 100644 packages/server/next/app/components/ui/switch.tsx create mode 100644 packages/server/next/app/components/ui/table.tsx create mode 100644 packages/server/next/app/components/ui/tabs.tsx create mode 100644 packages/server/next/app/components/ui/textarea.tsx create mode 100644 packages/server/next/app/components/ui/toggle-group.tsx create mode 100644 packages/server/next/app/components/ui/toggle.tsx create mode 100644 packages/server/next/app/components/ui/tooltip.tsx create mode 100644 packages/server/next/app/favicon.ico create mode 100644 packages/server/next/app/globals.css create mode 100644 packages/server/next/app/layout.tsx create mode 100644 packages/server/next/app/page.tsx create mode 100644 packages/server/next/components.json create mode 100644 packages/server/next/next.config.ts create mode 100644 packages/server/next/postcss.config.js create mode 100644 packages/server/next/public/config.js create mode 100644 packages/server/next/public/llama.png create mode 100644 packages/server/next/tsconfig.json create mode 100644 packages/server/package.json create mode 100644 packages/server/src/events.ts create mode 100644 packages/server/src/handlers/chat.ts create mode 100644 packages/server/src/handlers/cloud.ts create mode 100644 packages/server/src/handlers/components.ts create mode 100644 packages/server/src/handlers/files.ts create mode 100644 packages/server/src/index.ts create mode 100644 packages/server/src/server.ts create mode 100644 packages/server/src/types.ts create mode 100644 packages/server/src/utils/file.ts create mode 100644 packages/server/src/utils/gen-ui.ts create mode 100644 packages/server/src/utils/request.ts create mode 100644 packages/server/src/utils/suggestion.ts create mode 100644 packages/server/src/utils/workflow.ts create mode 100644 packages/server/tsconfig.json diff --git a/packages/server/.gitignore b/packages/server/.gitignore new file mode 100644 index 000000000..1550f1629 --- /dev/null +++ b/packages/server/.gitignore @@ -0,0 +1 @@ +server/ \ No newline at end of file diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md new file mode 100644 index 000000000..d24f2cafb --- /dev/null +++ b/packages/server/CHANGELOG.md @@ -0,0 +1,115 @@ +# @llamaindex/server + +## 0.1.6 + +### Patch Changes + +- 82d4b46: feat: re-add supports for artifacts + +## 0.1.5 + +### Patch Changes + +- 7ca9ddf: Add generate ui workflow to @llamaindex/server +- 3310eaa: chore: bump chat-ui + - llamaindex@0.10.2 + +## 0.1.4 + +### Patch Changes + +- llamaindex@0.10.1 + +## 0.1.3 + +### Patch Changes + +- edb8b87: fix: shadcn components cannot be used in next server +- Updated dependencies [6cf928f] + - llamaindex@0.10.0 + +## 0.1.2 + +### Patch Changes + +- bb34ade: feat: support cn utils for server UI + - llamaindex@0.9.19 + +## 0.1.1 + +### Patch Changes + +- 400b3b5: feat: use full-source code with import statements for custom comps + - llamaindex@0.9.18 + +## 0.1.0 + +### Minor Changes + +- 3ffee26: feat: enhance config params for LlamaIndexServer + +## 0.0.9 + +### Patch Changes + +- 0b75bd6: feat: component dir in llamaindex server + +## 0.0.8 + +### Patch Changes + +- Updated dependencies [3534c37] + - llamaindex@0.9.17 + +## 0.0.7 + +### Patch Changes + +- 4999df1: bump nextjs +- Updated dependencies [f5e4d09] + - llamaindex@0.9.16 + +## 0.0.6 + +### Patch Changes + +- 8c02684: fix: handle stream error +- c515a32: feat: return raw output for agent toolcall result + - llamaindex@0.9.15 + +## 0.0.5 + +### Patch Changes + +- 9d951b2: feat: support llamacloud in @llamaindex/server +- Updated dependencies [9d951b2] + - llamaindex@0.9.14 + +## 0.0.4 + +### Patch Changes + +- 164cf7a: fix: custom next server start fail + +## 0.0.3 + +### Patch Changes + +- 299008b: feat: copy create-llama to @llamaindex/servers +- 75d6e29: feat: response source nodes in query tool output +- Updated dependencies [75d6e29] + - llamaindex@0.9.13 + +## 0.0.2 + +### Patch Changes + +- f8a86e4: feat: @llamaindex/server +- Updated dependencies [21bebfc] +- Updated dependencies [93bc0ff] +- Updated dependencies [91a18e7] +- Updated dependencies [f8a86e4] +- Updated dependencies [5189b44] +- Updated dependencies [58a9446] + - @llamaindex/core@0.6.0 + - @llamaindex/workflow@1.0.0 diff --git a/packages/server/next/.gitignore b/packages/server/next/.gitignore new file mode 100644 index 000000000..9b2d3e929 --- /dev/null +++ b/packages/server/next/.gitignore @@ -0,0 +1,39 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +output/ + +!lib/ \ No newline at end of file diff --git a/packages/server/next/app/components/ui/accordion.tsx b/packages/server/next/app/components/ui/accordion.tsx new file mode 100644 index 000000000..67000b087 --- /dev/null +++ b/packages/server/next/app/components/ui/accordion.tsx @@ -0,0 +1,56 @@ +"use client"; + +import * as AccordionPrimitive from "@radix-ui/react-accordion"; +import { ChevronDown } from "lucide-react"; +import * as React from "react"; +import { cn } from "./lib/utils"; + +const Accordion = AccordionPrimitive.Root; + +const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AccordionItem.displayName = "AccordionItem"; + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className, + )} + {...props} + > + {children} + + + +)); +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName; + +const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +
{children}
+
+)); +AccordionContent.displayName = AccordionPrimitive.Content.displayName; + +export { Accordion, AccordionContent, AccordionItem, AccordionTrigger }; diff --git a/packages/server/next/app/components/ui/alert-dialog.tsx b/packages/server/next/app/components/ui/alert-dialog.tsx new file mode 100644 index 000000000..56881c9b8 --- /dev/null +++ b/packages/server/next/app/components/ui/alert-dialog.tsx @@ -0,0 +1,157 @@ +"use client"; + +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; +import * as React from "react"; + +import { buttonVariants } from "./button"; +import { cn } from "./lib/utils"; + +function AlertDialog({ + ...props +}: React.ComponentProps) { + return ; +} + +function AlertDialogTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogPortal({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + ); +} + +function AlertDialogHeader({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDialogFooter({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogAction({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogCancel({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, + AlertDialogPortal, + AlertDialogTitle, + AlertDialogTrigger, +}; diff --git a/packages/server/next/app/components/ui/alert.tsx b/packages/server/next/app/components/ui/alert.tsx new file mode 100644 index 000000000..1f757f69b --- /dev/null +++ b/packages/server/next/app/components/ui/alert.tsx @@ -0,0 +1,68 @@ +"use client"; + +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "./lib/utils"; + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +function Alert({ + className, + variant, + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
+ ); +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDescription({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ); +} + +export { Alert, AlertDescription, AlertTitle }; diff --git a/packages/server/next/app/components/ui/aspect-ratio.tsx b/packages/server/next/app/components/ui/aspect-ratio.tsx new file mode 100644 index 000000000..c16d6bcb9 --- /dev/null +++ b/packages/server/next/app/components/ui/aspect-ratio.tsx @@ -0,0 +1,11 @@ +"use client"; + +import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"; + +function AspectRatio({ + ...props +}: React.ComponentProps) { + return ; +} + +export { AspectRatio }; diff --git a/packages/server/next/app/components/ui/avatar.tsx b/packages/server/next/app/components/ui/avatar.tsx new file mode 100644 index 000000000..c95a1ec49 --- /dev/null +++ b/packages/server/next/app/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +"use client"; + +import * as AvatarPrimitive from "@radix-ui/react-avatar"; +import * as React from "react"; + +import { cn } from "./lib/utils"; + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Avatar, AvatarFallback, AvatarImage }; diff --git a/packages/server/next/app/components/ui/badge.tsx b/packages/server/next/app/components/ui/badge.tsx new file mode 100644 index 000000000..18cd684a3 --- /dev/null +++ b/packages/server/next/app/components/ui/badge.tsx @@ -0,0 +1,38 @@ +"use client"; + +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "./lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ); +} + +export { Badge, badgeVariants }; diff --git a/packages/server/next/app/components/ui/breadcrumb.tsx b/packages/server/next/app/components/ui/breadcrumb.tsx new file mode 100644 index 000000000..c01cd8b30 --- /dev/null +++ b/packages/server/next/app/components/ui/breadcrumb.tsx @@ -0,0 +1,111 @@ +"use client"; + +import { Slot } from "@radix-ui/react-slot"; +import { ChevronRight, MoreHorizontal } from "lucide-react"; +import * as React from "react"; + +import { cn } from "./lib/utils"; + +function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { + return