Merge branch 'main' into docs-install-methods-anchor
This commit is contained in:
commit
bb9aa4e3ea
9 changed files with 66 additions and 17 deletions
|
|
@ -39,7 +39,7 @@ This command will:
|
||||||
- Create a versioned sidebar file at `versioned_sidebars/version-1.0.0-sidebars.json`
|
- Create a versioned sidebar file at `versioned_sidebars/version-1.0.0-sidebars.json`
|
||||||
- Append the new version to `versions.json`
|
- Append the new version to `versions.json`
|
||||||
|
|
||||||
3. After creating a version, update the Docusaurus configuration to include multiple versions.
|
2. After creating a version, update the Docusaurus configuration to include multiple versions.
|
||||||
`lastVersion:'1.0.0'` makes the '1.0.0' release the `latest` version.
|
`lastVersion:'1.0.0'` makes the '1.0.0' release the `latest` version.
|
||||||
`current` is the work-in-progress docset, accessible at `/docs/next`.
|
`current` is the work-in-progress docset, accessible at `/docs/next`.
|
||||||
To remove a version, remove it from `onlyIncludeVersions`.
|
To remove a version, remove it from `onlyIncludeVersions`.
|
||||||
|
|
@ -62,14 +62,14 @@ docs: {
|
||||||
},
|
},
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Test the deployment locally.
|
3. Test the deployment locally.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run build
|
npm run build
|
||||||
npm run serve
|
npm run serve
|
||||||
```
|
```
|
||||||
|
|
||||||
5. To add subsequent versions, repeat the process, first running the CLI command then updating `docusaurus.config.js`.
|
4. To add subsequent versions, repeat the process, first running the CLI command then updating `docusaurus.config.js`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create version 2.0.0 from current docs
|
# Create version 2.0.0 from current docs
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,19 @@ You can select multiple files.
|
||||||
The ingestion process may take some time, depending on the size of your documents.
|
The ingestion process may take some time, depending on the size of your documents.
|
||||||
4. When ingestion is complete, your documents are available in the Knowledge screen.
|
4. When ingestion is complete, your documents are available in the Knowledge screen.
|
||||||
|
|
||||||
|
If ingestion fails, click **Status** to view the logged error.
|
||||||
|
|
||||||
|
## Monitor ingestion tasks
|
||||||
|
|
||||||
|
When you upload files, process folders, or sync documents, OpenRAG processes them as background tasks.
|
||||||
|
A badge appears on the <Icon name="Bell" aria-hidden="true"/> **Tasks** icon when there are active tasks running.
|
||||||
|
To open the Tasks menu, click <Icon name="Bell" aria-hidden="true"/> **Tasks**.
|
||||||
|
|
||||||
|
**Active Tasks** shows tasks that are currently processing.
|
||||||
|
A **Pending** task is queued and waiting to start, a **Running** task is actively processing files, and a **Processing** task is performing ingestion operations. For each active task, you can find the task ID, start time, duration, the number of files processed so far, and the total files.
|
||||||
|
|
||||||
|
You can cancel active tasks by clicking <Icon name="X" aria-hidden="true"/> **Cancel**. Canceling a task stops processing immediately and marks the task as failed.
|
||||||
|
|
||||||
## Explore knowledge
|
## Explore knowledge
|
||||||
|
|
||||||
The **Knowledge** page lists the documents OpenRAG has ingested into the OpenSearch vector database's `documents` index.
|
The **Knowledge** page lists the documents OpenRAG has ingested into the OpenSearch vector database's `documents` index.
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,8 @@ If the TUI detects OAuth credentials, it enforces the **Advanced Setup** path.
|
||||||
Command completed successfully
|
Command completed successfully
|
||||||
```
|
```
|
||||||
6. To start the Docling service, under **Native Services**, click **Start**.
|
6. To start the Docling service, under **Native Services**, click **Start**.
|
||||||
7. To open the OpenRAG application, click **Open App**.
|
7. To open the OpenRAG application, navigate to the TUI main menu, and then click **Open App**.
|
||||||
|
Alternatively, in your browser, navigate to `localhost:3000`.
|
||||||
8. Continue with [Application Onboarding](#application-onboarding).
|
8. Continue with [Application Onboarding](#application-onboarding).
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="Advanced setup" label="Advanced setup">
|
<TabItem value="Advanced setup" label="Advanced setup">
|
||||||
|
|
@ -212,7 +213,8 @@ If the TUI detects OAuth credentials, it enforces the **Advanced Setup** path.
|
||||||
Command completed successfully
|
Command completed successfully
|
||||||
```
|
```
|
||||||
8. To start the Docling service, under **Native Services**, click **Start**.
|
8. To start the Docling service, under **Native Services**, click **Start**.
|
||||||
9. To open the OpenRAG application, click **Open App**.
|
9. To open the OpenRAG application, navigate to the TUI main menu, and then click **Open App**.
|
||||||
|
Alternatively, in your browser, navigate to `localhost:3000`.
|
||||||
You are presented with your provider's OAuth sign-in screen.
|
You are presented with your provider's OAuth sign-in screen.
|
||||||
After sign-in, you are redirected to the redirect URI.
|
After sign-in, you are redirected to the redirect URI.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,14 @@ This page provides troubleshooting advice for issues you might encounter when us
|
||||||
Check that `OPENSEARCH_PASSWORD` set in [Environment variables](/reference/configuration) meets requirements.
|
Check that `OPENSEARCH_PASSWORD` set in [Environment variables](/reference/configuration) meets requirements.
|
||||||
The password must contain at least 8 characters, and must contain at least one uppercase letter, one lowercase letter, one digit, and one special character that is strong.
|
The password must contain at least 8 characters, and must contain at least one uppercase letter, one lowercase letter, one digit, and one special character that is strong.
|
||||||
|
|
||||||
|
## OpenRAG fails to start from the TUI with "Operation not supported" error
|
||||||
|
|
||||||
|
This error occurs when starting OpenRAG with the TUI in [WSL (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/install).
|
||||||
|
|
||||||
|
The error occurs because OpenRAG is running within a WSL environment, so `webbrowser.open()` can't launch a browser automatically.
|
||||||
|
|
||||||
|
To access the OpenRAG application, open a web browser and enter `http://localhost:3000` in the address bar.
|
||||||
|
|
||||||
## Langflow connection issues
|
## Langflow connection issues
|
||||||
|
|
||||||
Verify the `LANGFLOW_SUPERUSER` credentials set in [Environment variables](/reference/configuration) are correct.
|
Verify the `LANGFLOW_SUPERUSER` credentials set in [Environment variables](/reference/configuration) are correct.
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import { useProviderHealthQuery } from "@/src/app/api/queries/useProviderHealthQ
|
||||||
import { Button } from "./ui/button";
|
import { Button } from "./ui/button";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery";
|
import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery";
|
||||||
|
import { ModelProvider } from "@/app/settings/helpers/model-helpers";
|
||||||
|
|
||||||
interface ProviderHealthBannerProps {
|
interface ProviderHealthBannerProps {
|
||||||
className?: string;
|
className?: string;
|
||||||
|
|
@ -42,12 +43,22 @@ export function useProviderHealth() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const providerTitleMap: Record<ModelProvider, string> = {
|
||||||
|
openai: "OpenAI",
|
||||||
|
ollama: "Ollama",
|
||||||
|
watsonx: "IBM watsonx.ai",
|
||||||
|
};
|
||||||
|
|
||||||
export function ProviderHealthBanner({ className }: ProviderHealthBannerProps) {
|
export function ProviderHealthBanner({ className }: ProviderHealthBannerProps) {
|
||||||
const { isLoading, isHealthy, isUnhealthy, health } = useProviderHealth();
|
const { isLoading, isHealthy, isUnhealthy, health } = useProviderHealth();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const { data: settings = {} } = useGetSettingsQuery();
|
const { data: settings = {} } = useGetSettingsQuery();
|
||||||
|
|
||||||
|
const providerTitle =
|
||||||
|
providerTitleMap[settings.provider?.model_provider as ModelProvider] ||
|
||||||
|
"Provider";
|
||||||
|
|
||||||
// Only show banner when provider is unhealthy (not when backend is unavailable)
|
// Only show banner when provider is unhealthy (not when backend is unavailable)
|
||||||
if (isLoading || isHealthy) {
|
if (isLoading || isHealthy) {
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -71,7 +82,7 @@ export function ProviderHealthBanner({ className }: ProviderHealthBannerProps) {
|
||||||
icon={AlertTriangle}
|
icon={AlertTriangle}
|
||||||
/>
|
/>
|
||||||
<BannerTitle className="font-medium flex items-center gap-2">
|
<BannerTitle className="font-medium flex items-center gap-2">
|
||||||
{errorMessage}
|
{providerTitle} error - {errorMessage}
|
||||||
</BannerTitle>
|
</BannerTitle>
|
||||||
<Button size="sm" onClick={() => router.push(settingsUrl)}>
|
<Button size="sm" onClick={() => router.push(settingsUrl)}>
|
||||||
Fix Setup
|
Fix Setup
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import {
|
||||||
useQueryClient,
|
useQueryClient,
|
||||||
} from "@tanstack/react-query";
|
} from "@tanstack/react-query";
|
||||||
import type { Settings } from "../queries/useGetSettingsQuery";
|
import type { Settings } from "../queries/useGetSettingsQuery";
|
||||||
|
import { useGetCurrentProviderModelsQuery } from "../queries/useGetModelsQuery";
|
||||||
|
|
||||||
export interface UpdateSettingsRequest {
|
export interface UpdateSettingsRequest {
|
||||||
// Agent settings
|
// Agent settings
|
||||||
|
|
@ -37,6 +38,7 @@ export const useUpdateSettingsMutation = (
|
||||||
>
|
>
|
||||||
) => {
|
) => {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
const { refetch: refetchModels } = useGetCurrentProviderModelsQuery();
|
||||||
|
|
||||||
async function updateSettings(
|
async function updateSettings(
|
||||||
variables: UpdateSettingsRequest
|
variables: UpdateSettingsRequest
|
||||||
|
|
@ -63,6 +65,7 @@ export const useUpdateSettingsMutation = (
|
||||||
queryClient.invalidateQueries({
|
queryClient.invalidateQueries({
|
||||||
queryKey: ["settings"],
|
queryKey: ["settings"],
|
||||||
});
|
});
|
||||||
|
refetchModels(); // Refetch models for the settings page
|
||||||
options?.onSuccess?.(...args);
|
options?.onSuccess?.(...args);
|
||||||
},
|
},
|
||||||
onError: options?.onError,
|
onError: options?.onError,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { ModelProvider } from "@/app/settings/helpers/model-helpers";
|
|
||||||
import {
|
import {
|
||||||
type UseQueryOptions,
|
type UseQueryOptions,
|
||||||
useQuery,
|
useQuery,
|
||||||
useQueryClient,
|
useQueryClient,
|
||||||
} from "@tanstack/react-query";
|
} from "@tanstack/react-query";
|
||||||
|
import { useGetSettingsQuery } from "./useGetSettingsQuery";
|
||||||
|
|
||||||
export interface ProviderHealthDetails {
|
export interface ProviderHealthDetails {
|
||||||
llm_model: string;
|
llm_model: string;
|
||||||
|
|
@ -22,12 +22,6 @@ export interface ProviderHealthParams {
|
||||||
provider?: "openai" | "ollama" | "watsonx";
|
provider?: "openai" | "ollama" | "watsonx";
|
||||||
}
|
}
|
||||||
|
|
||||||
const providerTitleMap: Record<ModelProvider, string> = {
|
|
||||||
openai: "OpenAI",
|
|
||||||
ollama: "Ollama",
|
|
||||||
watsonx: "IBM watsonx.ai",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const useProviderHealthQuery = (
|
export const useProviderHealthQuery = (
|
||||||
params?: ProviderHealthParams,
|
params?: ProviderHealthParams,
|
||||||
options?: Omit<
|
options?: Omit<
|
||||||
|
|
@ -37,6 +31,8 @@ export const useProviderHealthQuery = (
|
||||||
) => {
|
) => {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const { data: settings = {} } = useGetSettingsQuery();
|
||||||
|
|
||||||
async function checkProviderHealth(): Promise<ProviderHealthResponse> {
|
async function checkProviderHealth(): Promise<ProviderHealthResponse> {
|
||||||
try {
|
try {
|
||||||
const url = new URL("/api/provider/health", window.location.origin);
|
const url = new URL("/api/provider/health", window.location.origin);
|
||||||
|
|
@ -84,6 +80,7 @@ export const useProviderHealthQuery = (
|
||||||
queryKey: ["provider", "health"],
|
queryKey: ["provider", "health"],
|
||||||
queryFn: checkProviderHealth,
|
queryFn: checkProviderHealth,
|
||||||
retry: false, // Don't retry health checks automatically
|
retry: false, // Don't retry health checks automatically
|
||||||
|
enabled: !!settings?.edited && options?.enabled !== false, // Only run after onboarding is complete
|
||||||
...options,
|
...options,
|
||||||
},
|
},
|
||||||
queryClient
|
queryClient
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ export function ModelSelector({
|
||||||
}, [options, value, custom, onValueChange]);
|
}, [options, value, custom, onValueChange]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover open={open} onOpenChange={setOpen}>
|
<Popover open={open} onOpenChange={setOpen} modal={false}>
|
||||||
<PopoverTrigger asChild>
|
<PopoverTrigger asChild>
|
||||||
{/** biome-ignore lint/a11y/useSemanticElements: has to be a Button */}
|
{/** biome-ignore lint/a11y/useSemanticElements: has to be a Button */}
|
||||||
<Button
|
<Button
|
||||||
|
|
@ -99,7 +99,8 @@ export function ModelSelector({
|
||||||
</PopoverTrigger>
|
</PopoverTrigger>
|
||||||
<PopoverContent
|
<PopoverContent
|
||||||
align="start"
|
align="start"
|
||||||
className=" p-0 w-[var(--radix-popover-trigger-width)]"
|
className="p-0 w-[var(--radix-popover-trigger-width)]"
|
||||||
|
onOpenAutoFocus={(e) => e.preventDefault()}
|
||||||
>
|
>
|
||||||
<Command>
|
<Command>
|
||||||
<CommandInput
|
<CommandInput
|
||||||
|
|
@ -107,7 +108,10 @@ export function ModelSelector({
|
||||||
value={searchValue}
|
value={searchValue}
|
||||||
onValueChange={setSearchValue}
|
onValueChange={setSearchValue}
|
||||||
/>
|
/>
|
||||||
<CommandList>
|
<CommandList
|
||||||
|
className="max-h-[300px] overflow-y-auto"
|
||||||
|
onWheel={(e) => e.stopPropagation()}
|
||||||
|
>
|
||||||
<CommandEmpty>{noOptionsPlaceholder}</CommandEmpty>
|
<CommandEmpty>{noOptionsPlaceholder}</CommandEmpty>
|
||||||
<CommandGroup>
|
<CommandGroup>
|
||||||
{options.map((option) => (
|
{options.map((option) => (
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ import { IBMOnboarding } from "./ibm-onboarding";
|
||||||
import { OllamaOnboarding } from "./ollama-onboarding";
|
import { OllamaOnboarding } from "./ollama-onboarding";
|
||||||
import { OpenAIOnboarding } from "./openai-onboarding";
|
import { OpenAIOnboarding } from "./openai-onboarding";
|
||||||
import { TabTrigger } from "./tab-trigger";
|
import { TabTrigger } from "./tab-trigger";
|
||||||
|
import { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery";
|
||||||
|
import { useQueryClient } from "@tanstack/react-query";
|
||||||
|
|
||||||
interface OnboardingCardProps {
|
interface OnboardingCardProps {
|
||||||
onComplete: () => void;
|
onComplete: () => void;
|
||||||
|
|
@ -57,6 +59,8 @@ const OnboardingCard = ({
|
||||||
|
|
||||||
const [loadingStep, setLoadingStep] = useState<number>(0);
|
const [loadingStep, setLoadingStep] = useState<number>(0);
|
||||||
|
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
// Reset loading step when models start loading
|
// Reset loading step when models start loading
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isLoadingModels) {
|
if (isLoadingModels) {
|
||||||
|
|
@ -129,6 +133,13 @@ const OnboardingCard = ({
|
||||||
const onboardingMutation = useOnboardingMutation({
|
const onboardingMutation = useOnboardingMutation({
|
||||||
onSuccess: (data) => {
|
onSuccess: (data) => {
|
||||||
console.log("Onboarding completed successfully", data);
|
console.log("Onboarding completed successfully", data);
|
||||||
|
// Update provider health cache to healthy since backend just validated
|
||||||
|
const healthData: ProviderHealthResponse = {
|
||||||
|
status: "healthy",
|
||||||
|
message: "Provider is configured and working correctly",
|
||||||
|
provider: settings.model_provider,
|
||||||
|
};
|
||||||
|
queryClient.setQueryData(["provider", "health"], healthData);
|
||||||
setCurrentStep(0);
|
setCurrentStep(0);
|
||||||
setError(null);
|
setError(null);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue