Merge remote-tracking branch 'origin/main' into fix/file_history

This commit is contained in:
Lucas Oliveira 2025-10-27 11:29:52 -03:00
commit a102242772
15 changed files with 4128 additions and 1165 deletions

View file

@ -17,4 +17,70 @@ OpenRAG builds on Langflow's familiar interface while adding OpenSearch for vect
What's more, every part of the stack is swappable. Write your own custom components in Python, try different language models, and customize your flows to build an agentic RAG system.
Ready to get started? [Install OpenRAG](/install) and then run the [Quickstart](/quickstart) to create a powerful RAG pipeline.
Ready to get started? [Install OpenRAG](/install) and then run the [Quickstart](/quickstart) to create a powerful RAG pipeline.
## OpenRAG architecture
OpenRAG deploys and orchestrates a lightweight, container-based architecture that combines **Langflow**, **OpenSearch**, and **Docling** into a cohesive RAG platform.
```mermaid
%%{init: {'theme': 'dark', 'flowchart': {'useMaxWidth': false, 'width': '100%'}}}%%
flowchart LR
%% Encapsulate the entire diagram in a rectangle with black background
subgraph DiagramContainer["OpenRAG Architecture"]
style DiagramContainer fill:#000000,stroke:#ffffff,color:white,stroke-width:2px
%% Define subgraphs for the different sections
subgraph LocalService["Local Service"]
DoclingSrv[Docling Serve]
style DoclingSrv fill:#a8d1ff,stroke:#0066cc,color:black,stroke-width:2px
end
subgraph Containers
Backend["OpenRAG Backend"]
style Backend fill:#e6ffe6,stroke:#006600,color:black,stroke-width:2px
Langflow
style Langflow fill:#e6ffe6,stroke:#006600,color:black,stroke-width:2px
OpenSearch
style OpenSearch fill:#e6ffe6,stroke:#006600,color:black,stroke-width:2px
Frontend["OpenRAG Frontend"]
style Frontend fill:#ffcc99,stroke:#ff6600,color:black,stroke-width:2px
end
subgraph ThirdParty["Third Party Services"]
GoogleDrive["Google Drive"]
style GoogleDrive fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
OneDrive
style OneDrive fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
SharePoint["SharePoint"]
style SharePoint fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
More[...]
style More fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
end
%% Define connections
DoclingSrv --> Backend
GoogleDrive --> Backend
OneDrive --> Backend
SharePoint --> Backend
More --> Backend
Backend --> Langflow
Langflow <--> OpenSearch
Backend <--> Frontend
%% Style subgraphs
style LocalService fill:#333333,stroke:#666666,color:white,stroke-width:2px
style Containers fill:#444444,stroke:#666666,color:white,stroke-width:2px
style ThirdParty fill:#333333,stroke:#666666,color:white,stroke-width:2px
end
```
The **OpenRAG Backend** is the central orchestration service that coordinates all other components.
**Langflow** provides a visual workflow engine for building AI agents, and connects to **OpenSearch** for vector storage and retrieval.
**Docling Serve** is a local document processing service managed by the **OpenRAG Backend**.
**Third Party Services** like **Google Drive** connect to the **OpenRAG Backend** through OAuth authentication, allowing synchronication of cloud storage with the OpenSearch knowledge base.
The **OpenRAG Frontend** provides the user interface for interacting with the system.

View file

@ -34,7 +34,12 @@ const config = {
projectName: 'openrag', // Usually your repo name.
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
markdown: {
mermaid: true,
hooks: {
onBrokenMarkdownLinks: 'warn',
},
},
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
@ -76,6 +81,8 @@ const config = {
plugins: [require.resolve('docusaurus-plugin-image-zoom')],
themes: ['@docusaurus/theme-mermaid'],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
@ -118,6 +125,17 @@ const config = {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
},
mermaid: {
theme: {light: 'neutral', dark: 'forest'},
options: {
maxTextSize: 50000,
fontSize: 18,
fontFamily: 'Arial, sans-serif',
useMaxWidth: false,
width: '100%',
height: 'auto',
},
},
zoom: {
selector: '.markdown img',
background: {

2889
docs/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -16,8 +16,9 @@
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "3.8.1",
"@docusaurus/preset-classic": "3.8.1",
"@docusaurus/core": "3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@docusaurus/theme-mermaid": "3.9.2",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"docusaurus-plugin-image-zoom": "^3.0.1",
@ -27,9 +28,9 @@
"react-dom": "^19.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.8.1",
"@docusaurus/tsconfig": "3.8.1",
"@docusaurus/types": "3.8.1",
"@docusaurus/module-type-aliases": "3.9.2",
"@docusaurus/tsconfig": "3.9.2",
"@docusaurus/types": "3.9.2",
"typescript": "~5.6.2"
},
"browserslist": {

Binary file not shown.

View file

@ -142,3 +142,72 @@
display: inline-block;
vertical-align: middle;
}
/* Mermaid Diagram Styling - Force proper sizing */
.mermaid {
text-align: center;
margin: 2rem 0;
width: 100% !important;
min-height: 500px !important;
display: block !important;
overflow: visible !important;
}
.mermaid svg {
width: 100% !important;
max-width: none !important;
min-width: 800px !important;
min-height: 500px !important;
height: auto !important;
display: block !important;
margin: 0 auto !important;
transform: scale(1) !important;
}
/* Force Mermaid diagram sizing */
.markdown .mermaid {
width: 100% !important;
min-height: 500px !important;
display: block !important;
}
.markdown .mermaid svg {
width: 100% !important;
min-width: 800px !important;
min-height: 500px !important;
transform: scale(1) !important;
}
/* Target the specific Mermaid container */
div[class*="mermaid"] {
width: 100% !important;
min-height: 500px !important;
}
div[class*="mermaid"] svg {
width: 100% !important;
min-width: 800px !important;
min-height: 500px !important;
}
/* Force Mermaid to render at full size */
.mermaid,
.mermaid > *,
.mermaid svg,
.mermaid div,
.mermaid div svg {
width: 100% !important;
min-width: 800px !important;
min-height: 500px !important;
max-width: none !important;
display: block !important;
transform: none !important;
scale: 1 !important;
}
/* Override any potential scaling issues */
.mermaid svg {
transform: none !important;
scale: 1 !important;
viewBox: unset !important;
}

File diff suppressed because it is too large Load diff

View file

@ -34,7 +34,7 @@ export const DuplicateHandlingDialog: React.FC<
<DialogTitle>Overwrite document</DialogTitle>
<DialogDescription className="pt-2 text-muted-foreground">
Overwriting will replace the existing document with another version.
This can't be undone.
This can&apos;t be undone.
</DialogDescription>
</DialogHeader>

View file

@ -11,6 +11,12 @@ const compat = new FlatCompat({
const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"),
{
rules: {
"@typescript-eslint/no-unused-vars": "warn",
"@typescript-eslint/no-explicit-any": "off",
},
},
];
export default eslintConfig;

View file

@ -2,7 +2,7 @@ import { AnimatePresence, motion } from "motion/react";
import { type ReactNode, useEffect, useState } from "react";
import { Message } from "@/app/chat/components/message";
import DogIcon from "@/components/logo/dog-icon";
import { AnimatedProcessingIcon } from "@/components/ui/animated-processing-icon";
import AnimatedProcessingIcon from "@/components/ui/animated-processing-icon";
import { MarkdownRenderer } from "@/components/markdown-renderer";
import { cn } from "@/lib/utils";

View file

@ -5,8 +5,6 @@ import {
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion";
import { Separator } from "@/components/ui/separator";
import { Switch } from "@/components/ui/switch";
import { ModelSelector } from "./model-selector";
export function AdvancedOnboarding({

View file

@ -3,7 +3,7 @@
import { AnimatePresence, motion } from "framer-motion";
import { CheckIcon } from "lucide-react";
import { useEffect } from "react";
import { AnimatedProcessingIcon } from "@/components/ui/animated-processing-icon";
import AnimatedProcessingIcon from "@/components/ui/animated-processing-icon";
import { cn } from "@/lib/utils";
export function AnimatedProviderSteps({

View file

@ -12,14 +12,7 @@ import { useDoclingHealth } from "@/components/docling-health-banner";
import IBMLogo from "@/components/logo/ibm-logo";
import OllamaLogo from "@/components/logo/ollama-logo";
import OpenAILogo from "@/components/logo/openai-logo";
import { AnimatedProcessingIcon } from "@/components/ui/animated-processing-icon";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/components/ui/card";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import {
Tooltip,

View file

@ -854,7 +854,7 @@ function KnowledgeSourcesPage() {
description={
<>
<p className="mb-2">
You're entering Langflow. You can edit the{" "}
You&apos;re entering Langflow. You can edit the{" "}
<b>Agent flow</b> and other underlying flows. Manual
changes to components, wiring, or I/O can break this
experience.
@ -1001,7 +1001,7 @@ function KnowledgeSourcesPage() {
description={
<>
<p className="mb-2">
You're entering Langflow. You can edit the{" "}
You&apos;re entering Langflow. You can edit the{" "}
<b>Ingest flow</b> and other underlying flows. Manual
changes to components, wiring, or I/O can break this
experience.

View file

@ -1,4 +1,4 @@
import { AnimatedProcessingIcon } from "./animated-processing-icon";
import AnimatedProcessingIcon from "./animated-processing-icon";
export type Status =
| "processing"