openrag/frontend/app/api/queries/useGetSettingsQuery.ts
2025-12-23 13:21:46 -03:00

104 lines
2.2 KiB
TypeScript

import {
type UseQueryOptions,
useQuery,
useQueryClient,
} from "@tanstack/react-query";
export interface AgentSettings {
llm_model?: string;
llm_provider?: string;
system_prompt?: string;
}
export interface KnowledgeSettings {
embedding_model?: string;
embedding_provider?: string;
chunk_size?: number;
chunk_overlap?: number;
table_structure?: boolean;
ocr?: boolean;
picture_descriptions?: boolean;
}
export interface ProviderSettings {
openai?: {
has_api_key?: boolean;
configured?: boolean;
};
anthropic?: {
has_api_key?: boolean;
configured?: boolean;
};
watsonx?: {
has_api_key?: boolean;
endpoint?: string;
project_id?: string;
configured?: boolean;
};
ollama?: {
endpoint?: string;
configured?: boolean;
};
}
export interface OnboardingState {
current_step?: number;
assistant_message?: {
role: string;
content: string;
timestamp: string;
} | null;
selected_nudge?: string | null;
card_steps?: Record<string, unknown> | null;
upload_steps?: Record<string, unknown> | null;
openrag_docs_filter_id?: string | null;
user_doc_filter_id?: string | null;
}
export interface Settings {
langflow_url?: string;
flow_id?: string;
ingest_flow_id?: string;
langflow_public_url?: string;
edited?: boolean;
onboarding?: OnboardingState;
providers?: ProviderSettings;
knowledge?: KnowledgeSettings;
agent?: AgentSettings;
langflow_edit_url?: string;
langflow_ingest_edit_url?: string;
ingestion_defaults?: {
chunkSize?: number;
chunkOverlap?: number;
separator?: string;
embeddingModel?: string;
};
localhost_url?: string;
}
export const useGetSettingsQuery = (
options?: Omit<UseQueryOptions<Settings>, "queryKey" | "queryFn">,
) => {
const queryClient = useQueryClient();
async function getSettings(): Promise<Settings> {
const response = await fetch("/api/settings");
if (response.ok) {
// Merge with defaults to ensure all properties exist
return await response.json();
} else {
throw new Error("Failed to fetch settings");
}
}
const queryResult = useQuery(
{
queryKey: ["settings"],
queryFn: getSettings,
...options,
},
queryClient,
);
return queryResult;
};