mirror of
https://github.com/onyx-dot-app/onyx.git
synced 2026-04-04 22:42:41 +00:00
Compare commits
1 Commits
cli/v0.2.1
...
danswer_to
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f41f130cd |
@@ -13,19 +13,19 @@ import Text from "@/components/ui/text";
|
||||
import { USER_ROLE_LABELS, UserRole } from "@/lib/types";
|
||||
import { APIKey } from "./types";
|
||||
|
||||
interface DanswerApiKeyFormProps {
|
||||
interface OnyxApiKeyFormProps {
|
||||
onClose: () => void;
|
||||
setPopup: (popupSpec: PopupSpec | null) => void;
|
||||
onCreateApiKey: (apiKey: APIKey) => void;
|
||||
apiKey?: APIKey;
|
||||
}
|
||||
|
||||
export const DanswerApiKeyForm = ({
|
||||
export const OnyxApiKeyForm = ({
|
||||
onClose,
|
||||
setPopup,
|
||||
onCreateApiKey,
|
||||
apiKey,
|
||||
}: DanswerApiKeyFormProps) => {
|
||||
}: OnyxApiKeyFormProps) => {
|
||||
const isUpdate = apiKey !== undefined;
|
||||
|
||||
return (
|
||||
@@ -26,10 +26,10 @@ import { FiCopy, FiEdit2, FiRefreshCw, FiX } from "react-icons/fi";
|
||||
import { Modal } from "@/components/Modal";
|
||||
import { Spinner } from "@/components/Spinner";
|
||||
import { deleteApiKey, regenerateApiKey } from "./lib";
|
||||
import { DanswerApiKeyForm } from "./DanswerApiKeyForm";
|
||||
import { OnyxApiKeyForm } from "./OnyxApiKeyForm";
|
||||
import { APIKey } from "./types";
|
||||
|
||||
const API_KEY_TEXT = `API Keys allow you to access Danswer APIs programmatically. Click the button below to generate a new API Key.`;
|
||||
const API_KEY_TEXT = `API Keys allow you to access Onyx APIs programmatically. Click the button below to generate a new API Key.`;
|
||||
|
||||
function NewApiKeyModal({
|
||||
apiKey,
|
||||
@@ -129,7 +129,7 @@ function Main() {
|
||||
{newApiKeyButton}
|
||||
|
||||
{showCreateUpdateForm && (
|
||||
<DanswerApiKeyForm
|
||||
<OnyxApiKeyForm
|
||||
onCreateApiKey={(apiKey) => {
|
||||
setFullApiKey(apiKey.api_key);
|
||||
}}
|
||||
@@ -257,7 +257,7 @@ function Main() {
|
||||
</Table>
|
||||
|
||||
{showCreateUpdateForm && (
|
||||
<DanswerApiKeyForm
|
||||
<OnyxApiKeyForm
|
||||
onCreateApiKey={(apiKey) => {
|
||||
setFullApiKey(apiKey.api_key);
|
||||
}}
|
||||
|
||||
@@ -885,8 +885,8 @@ export function AssistantEditor({
|
||||
{user?.role !== "admin" && (
|
||||
<>
|
||||
If this functionality would be useful,
|
||||
reach out to the administrators of
|
||||
Danswer for assistance.
|
||||
reach out to the administrators of Onyx
|
||||
for assistance.
|
||||
</>
|
||||
)}
|
||||
</p>
|
||||
@@ -1185,7 +1185,7 @@ export function AssistantEditor({
|
||||
setFieldValue("task_prompt", e.target.value);
|
||||
}}
|
||||
explanationText="Learn about prompting in our docs!"
|
||||
explanationLink="https://docs.danswer.dev/guides/assistants"
|
||||
explanationLink="https://docs.onyx.app/guides/assistants"
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -93,7 +93,7 @@ export const SlackTokensForm = ({
|
||||
Please refer to our{" "}
|
||||
<a
|
||||
className="text-blue-500 hover:underline"
|
||||
href="https://docs.danswer.dev/slack_bot_setup"
|
||||
href="https://docs.onyx.app/slack_bot_setup"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
|
||||
@@ -139,7 +139,7 @@ export function SlackChannelConfigsTable({
|
||||
className="text-center text-muted-foreground"
|
||||
>
|
||||
Please add a New Slack Bot Configuration to begin chatting
|
||||
with Danswer!
|
||||
with Onyx!
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
)}
|
||||
|
||||
@@ -170,8 +170,8 @@ export const SlackChannelConfigCreationForm = ({
|
||||
const errorMsg = responseJson.detail || responseJson.message;
|
||||
setPopup({
|
||||
message: isUpdate
|
||||
? `Error updating DanswerBot config - ${errorMsg}`
|
||||
: `Error creating DanswerBot config - ${errorMsg}`,
|
||||
? `Error updating OnyxBot config - ${errorMsg}`
|
||||
: `Error creating OnyxBot config - ${errorMsg}`,
|
||||
type: "error",
|
||||
});
|
||||
}
|
||||
@@ -188,7 +188,7 @@ export const SlackChannelConfigCreationForm = ({
|
||||
<div className="mt-6">
|
||||
<Label>Knowledge Sources</Label>
|
||||
<SubLabel>
|
||||
Controls which information DanswerBot will pull from when
|
||||
Controls which information OnyxBot will pull from when
|
||||
answering questions.
|
||||
</SubLabel>
|
||||
|
||||
@@ -209,7 +209,7 @@ export const SlackChannelConfigCreationForm = ({
|
||||
|
||||
<TabsContent value="assistants">
|
||||
<SubLabel>
|
||||
Select the assistant DanswerBot will use while answering
|
||||
Select the assistant OnyxBot will use while answering
|
||||
questions in Slack.
|
||||
</SubLabel>
|
||||
<SelectorFormField
|
||||
@@ -225,11 +225,11 @@ export const SlackChannelConfigCreationForm = ({
|
||||
|
||||
<TabsContent value="document_sets">
|
||||
<SubLabel>
|
||||
Select the document sets DanswerBot will use while
|
||||
Select the document sets OnyxBot will use while
|
||||
answering questions in Slack.
|
||||
</SubLabel>
|
||||
<SubLabel>
|
||||
Note: If No Document Sets are selected, DanswerBot will
|
||||
Note: If No Document Sets are selected, OnyxBot will
|
||||
search through all connected documents.
|
||||
</SubLabel>
|
||||
<FieldArray
|
||||
@@ -280,7 +280,7 @@ export const SlackChannelConfigCreationForm = ({
|
||||
<SelectorFormField
|
||||
name="response_type"
|
||||
label="Answer Type"
|
||||
tooltip="Controls the format of DanswerBot's responses."
|
||||
tooltip="Controls the format of OnyxBot's responses."
|
||||
options={[
|
||||
{ name: "Standard", value: "citations" },
|
||||
{ name: "Detailed", value: "quotes" },
|
||||
@@ -292,14 +292,14 @@ export const SlackChannelConfigCreationForm = ({
|
||||
name="show_continue_in_web_ui"
|
||||
removeIndent
|
||||
label="Show Continue in Web UI button"
|
||||
tooltip="If set, will show a button at the bottom of the response that allows the user to continue the conversation in the Danswer Web UI"
|
||||
tooltip="If set, will show a button at the bottom of the response that allows the user to continue the conversation in the Onyx Web UI"
|
||||
/>
|
||||
<div className="flex flex-col space-y-3 mt-2">
|
||||
<BooleanFormField
|
||||
name="still_need_help_enabled"
|
||||
removeIndent
|
||||
label={'Give a "Still need help?" button'}
|
||||
tooltip={`DanswerBot's response will include a button at the bottom
|
||||
tooltip={`OnyxBot's response will include a button at the bottom
|
||||
of the response that asks the user if they still need help.`}
|
||||
/>
|
||||
{values.still_need_help_enabled && (
|
||||
@@ -337,14 +337,14 @@ export const SlackChannelConfigCreationForm = ({
|
||||
<BooleanFormField
|
||||
name="respond_tag_only"
|
||||
removeIndent
|
||||
label="Respond to @DanswerBot Only"
|
||||
tooltip="If set, DanswerBot will only respond when directly tagged"
|
||||
label="Respond to @OnyxBot Only"
|
||||
tooltip="If set, OnyxBot will only respond when directly tagged"
|
||||
/>
|
||||
<BooleanFormField
|
||||
name="respond_to_bots"
|
||||
removeIndent
|
||||
label="Respond to Bot messages"
|
||||
tooltip="If not set, DanswerBot will always ignore messages from Bots"
|
||||
tooltip="If not set, OnyxBot will always ignore messages from Bots"
|
||||
/>
|
||||
<BooleanFormField
|
||||
name="enable_auto_filters"
|
||||
@@ -358,7 +358,7 @@ export const SlackChannelConfigCreationForm = ({
|
||||
name="respond_member_group_list"
|
||||
label="(Optional) Respond to Certain Users / Groups"
|
||||
subtext={
|
||||
"If specified, DanswerBot responses will only " +
|
||||
"If specified, OnyxBot responses will only " +
|
||||
"be visible to the members or groups in this list."
|
||||
}
|
||||
values={values}
|
||||
|
||||
@@ -60,7 +60,7 @@ async function NewChannelConfigPage(props: {
|
||||
<BackButton />
|
||||
<AdminPageTitle
|
||||
icon={<SourceIcon iconSize={32} sourceType={ValidSources.Slack} />}
|
||||
title="Configure DanswerBot for Slack Channel"
|
||||
title="Configure OnyxBot for Slack Channel"
|
||||
/>
|
||||
|
||||
<SlackChannelConfigCreationForm
|
||||
|
||||
@@ -39,23 +39,21 @@ const Main = () => {
|
||||
{/* {popup} */}
|
||||
|
||||
<p className="mb-2 text-sm text-muted-foreground">
|
||||
Setup Slack bots that connect to Danswer. Once setup, you will be able
|
||||
to ask questions to Danswer directly from Slack. Additionally, you can:
|
||||
Setup Slack bots that connect to Onyx. Once setup, you will be able to
|
||||
ask questions to Onyx directly from Slack. Additionally, you can:
|
||||
</p>
|
||||
|
||||
<div className="mb-2">
|
||||
<ul className="list-disc mt-2 ml-4 text-sm text-muted-foreground">
|
||||
<li>
|
||||
Setup DanswerBot to automatically answer questions in certain
|
||||
channels.
|
||||
Setup OnyxBot to automatically answer questions in certain channels.
|
||||
</li>
|
||||
<li>
|
||||
Choose which document sets DanswerBot should answer from, depending
|
||||
on the channel the question is being asked.
|
||||
Choose which document sets OnyxBot should answer from, depending on
|
||||
the channel the question is being asked.
|
||||
</li>
|
||||
<li>
|
||||
Directly message DanswerBot to search just as you would in the web
|
||||
UI.
|
||||
Directly message OnyxBot to search just as you would in the web UI.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -64,13 +62,13 @@ const Main = () => {
|
||||
Follow the{" "}
|
||||
<a
|
||||
className="text-blue-500 hover:underline"
|
||||
href="https://docs.danswer.dev/slack_bot_setup"
|
||||
href="https://docs.onyx.app/slack_bot_setup"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
guide{" "}
|
||||
</a>
|
||||
found in the Danswer documentation to get started!
|
||||
found in the Onyx documentation to get started!
|
||||
</p>
|
||||
|
||||
<Link
|
||||
|
||||
@@ -62,9 +62,8 @@ function Main() {
|
||||
<div className="space-y-4">
|
||||
<p className="text-text-600">
|
||||
Unstructured extracts and transforms complex data from formats like
|
||||
.pdf, .docx, .png, .pptx, etc. into clean text for Danswer to
|
||||
ingest. Provide an API key to enable Unstructured document
|
||||
processing.
|
||||
.pdf, .docx, .png, .pptx, etc. into clean text for Onyx to ingest.
|
||||
Provide an API key to enable Unstructured document processing.
|
||||
<br />
|
||||
<br /> <strong>Note:</strong> this will send documents to
|
||||
Unstructured servers for processing.
|
||||
|
||||
@@ -158,7 +158,7 @@ export function LLMConfiguration() {
|
||||
</>
|
||||
) : (
|
||||
<Callout type="warning" title="No LLM providers configured yet">
|
||||
Please set one up below in order to start using Danswer!
|
||||
Please set one up below in order to start using Onyx!
|
||||
</Callout>
|
||||
)}
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ export default function Sidebar() {
|
||||
{enterpriseSettings && enterpriseSettings.application_name ? (
|
||||
<HeaderTitle>{enterpriseSettings.application_name}</HeaderTitle>
|
||||
) : (
|
||||
<HeaderTitle>Danswer</HeaderTitle>
|
||||
<HeaderTitle>Onyx</HeaderTitle>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -285,7 +285,7 @@ export const DriveJsonUploadSection = ({
|
||||
<a
|
||||
className="text-link"
|
||||
target="_blank"
|
||||
href="https://docs.danswer.dev/connectors/google_drive#authorization"
|
||||
href="https://docs.onyx.app/connectors/google_drive#authorization"
|
||||
rel="noreferrer"
|
||||
>
|
||||
here
|
||||
|
||||
@@ -133,7 +133,7 @@ const GDriveMain = ({}: {}) => {
|
||||
{isAdmin && (
|
||||
<>
|
||||
<Title className="mb-2 mt-6 ml-auto mr-auto">
|
||||
Step 2: Authenticate with Danswer
|
||||
Step 2: Authenticate with Onyx
|
||||
</Title>
|
||||
<DriveAuthSection
|
||||
setPopup={setPopup}
|
||||
|
||||
@@ -271,7 +271,7 @@ export const GmailJsonUploadSection = ({
|
||||
<a
|
||||
className="text-link"
|
||||
target="_blank"
|
||||
href="https://docs.danswer.dev/connectors/gmail#authorization"
|
||||
href="https://docs.onyx.app/connectors/gmail#authorization"
|
||||
rel="noreferrer"
|
||||
>
|
||||
here
|
||||
|
||||
@@ -140,7 +140,7 @@ export const GmailMain = () => {
|
||||
{isAdmin && (
|
||||
<>
|
||||
<Title className="mb-2 mt-6 ml-auto mr-auto">
|
||||
Step 2: Authenticate with Danswer
|
||||
Step 2: Authenticate with Onyx
|
||||
</Title>
|
||||
<GmailAuthSection
|
||||
setPopup={setPopup}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import { adminSearch } from "./lib";
|
||||
import { MagnifyingGlass } from "@phosphor-icons/react";
|
||||
import { useState, useEffect, useCallback } from "react";
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { buildDocumentSummaryDisplay } from "@/components/search/DocumentDisplay";
|
||||
import { CustomCheckbox } from "@/components/CustomCheckbox";
|
||||
import { updateHiddenStatus } from "../lib";
|
||||
@@ -24,7 +24,7 @@ const DocumentDisplay = ({
|
||||
refresh,
|
||||
setPopup,
|
||||
}: {
|
||||
document: DanswerDocument;
|
||||
document: OnyxDocument;
|
||||
refresh: () => void;
|
||||
setPopup: (popupSpec: PopupSpec | null) => void;
|
||||
}) => {
|
||||
@@ -117,7 +117,7 @@ export function Explorer({
|
||||
|
||||
const [query, setQuery] = useState(initialSearchValue || "");
|
||||
const [timeoutId, setTimeoutId] = useState<number | null>(null);
|
||||
const [results, setResults] = useState<DanswerDocument[]>([]);
|
||||
const [results, setResults] = useState<OnyxDocument[]>([]);
|
||||
|
||||
const filterManager = useFilters();
|
||||
|
||||
|
||||
@@ -314,7 +314,7 @@ const Main = () => {
|
||||
<Text className="mb-3">
|
||||
<b>Document Sets</b> allow you to group logically connected documents
|
||||
into a single bundle. These can then be used as a filter when performing
|
||||
searches to control the scope of information Danswer searches over.
|
||||
searches to control the scope of information Onyx searches over.
|
||||
</Text>
|
||||
|
||||
<div className="mb-3"></div>
|
||||
|
||||
@@ -29,14 +29,14 @@ export function ModelSelectionConfirmationModal({
|
||||
</Text>
|
||||
<Text className="text-lg mb-2">
|
||||
We will re-index all your documents in the background so you will be
|
||||
able to continue to use Danswer as normal with the old model in the
|
||||
able to continue to use Onyx as normal with the old model in the
|
||||
meantime. Depending on how many documents you have indexed, this may
|
||||
take a while.
|
||||
</Text>
|
||||
<Text className="text-lg mb-2">
|
||||
<i>NOTE:</i> this re-indexing process will consume more resources
|
||||
than normal. If you are self-hosting, we recommend that you allocate
|
||||
at least 16GB of RAM to Danswer during this process.
|
||||
at least 16GB of RAM to Onyx during this process.
|
||||
</Text>
|
||||
|
||||
{isCustom && (
|
||||
|
||||
@@ -57,9 +57,9 @@ export default function OpenEmbeddingPage({
|
||||
</a>
|
||||
.
|
||||
<br />
|
||||
<b>NOTE:</b> not all models listed will work with Danswer, since some
|
||||
have unique interfaces or special requirements. If in doubt, reach out
|
||||
to the Danswer team.
|
||||
<b>NOTE:</b> not all models listed will work with Onyx, since some have
|
||||
unique interfaces or special requirements. If in doubt, reach out to the
|
||||
Onyx team.
|
||||
</Text>
|
||||
{!configureModel && (
|
||||
<Button
|
||||
|
||||
@@ -211,7 +211,7 @@ export function SettingsForm() {
|
||||
<Title className="mb-4">Chat Settings</Title>
|
||||
<IntegerInput
|
||||
label="Chat Retention"
|
||||
sublabel="Enter the maximum number of days you would like Danswer to retain chat messages. Leaving this field empty will cause Danswer to never delete chat messages."
|
||||
sublabel="Enter the maximum number of days you would like Onyx to retain chat messages. Leaving this field empty will cause Onyx to never delete chat messages."
|
||||
value={chatRetention === "" ? null : Number(chatRetention)}
|
||||
onChange={(e) => {
|
||||
const numValue = parseInt(e.target.value, 10);
|
||||
|
||||
@@ -13,8 +13,7 @@ export default async function Page() {
|
||||
/>
|
||||
|
||||
<Text className="mb-8">
|
||||
Manage general Danswer settings applicable to all users in the
|
||||
workspace.
|
||||
Manage general Onyx settings applicable to all users in the workspace.
|
||||
</Text>
|
||||
|
||||
<SettingsForm />
|
||||
|
||||
@@ -154,7 +154,7 @@ function ToolForm({
|
||||
/>
|
||||
<div className="mt-4 text-sm bg-blue-50 p-4 rounded-md border border-blue-200">
|
||||
<Link
|
||||
href="https://docs.danswer.dev/tools/custom"
|
||||
href="https://docs.onyx.app/tools/custom"
|
||||
className="text-link hover:underline flex items-center"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
|
||||
@@ -106,7 +106,7 @@ const UsersTables = ({
|
||||
<TabsList>
|
||||
<TabsTrigger value="invited">Invited Users</TabsTrigger>
|
||||
<TabsTrigger value="current">Current Users</TabsTrigger>
|
||||
<TabsTrigger value="danswerbot">DanswerBot Users</TabsTrigger>
|
||||
<TabsTrigger value="onyxbot">OnyxBot Users</TabsTrigger>
|
||||
</TabsList>
|
||||
|
||||
<TabsContent value="invited">
|
||||
@@ -153,10 +153,10 @@ const UsersTables = ({
|
||||
</Card>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="danswerbot">
|
||||
<TabsContent value="onyxbot">
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle>DanswerBot Users</CardTitle>
|
||||
<CardTitle>OnyxBot Users</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
{slack_users.length > 0 ? (
|
||||
|
||||
@@ -146,7 +146,7 @@ export function AssistantGalleryCard({
|
||||
</div>
|
||||
<p className="text-sm mt-2">{assistant.description}</p>
|
||||
<p className="text-subtle text-sm my-2">
|
||||
Author: {assistant.owner?.email || "Danswer"}
|
||||
Author: {assistant.owner?.email || "Onyx"}
|
||||
</p>
|
||||
{assistant.tools.length > 0 && (
|
||||
<AssistantTools list assistant={assistant} />
|
||||
|
||||
@@ -14,12 +14,12 @@ const Page = () => {
|
||||
Account Not Found
|
||||
</h2>
|
||||
<p className="text-text-700 max-w-md text-center">
|
||||
We couldn't find your account in our records. To access Danswer,
|
||||
you need to either:
|
||||
We couldn't find your account in our records. To access Onyx, you
|
||||
need to either:
|
||||
</p>
|
||||
<ul className="list-disc text-left text-text-600 w-full pl-6 mx-auto">
|
||||
<li>Be invited to an existing Danswer organization</li>
|
||||
<li>Create a new Danswer organization</li>
|
||||
<li>Be invited to an existing Onyx organization</li>
|
||||
<li>Create a new Onyx organization</li>
|
||||
</ul>
|
||||
<div className="flex justify-center">
|
||||
<Link
|
||||
|
||||
@@ -120,7 +120,7 @@ export default function ImpersonatePage() {
|
||||
</Formik>
|
||||
|
||||
<div className="text-sm text-text-500 mt-4 text-center px-4 rounded-md">
|
||||
Note: This feature is only available for @danswer.ai administrators
|
||||
Note: This feature is only available for @onyx.app administrators
|
||||
</div>
|
||||
</div>
|
||||
</AuthFlowContainer>
|
||||
|
||||
@@ -8,8 +8,7 @@ export const LoginText = () => {
|
||||
return (
|
||||
<>
|
||||
Log In to{" "}
|
||||
{(settings && settings?.enterpriseSettings?.application_name) ||
|
||||
"Danswer"}
|
||||
{(settings && settings?.enterpriseSettings?.application_name) || "Onyx"}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -69,7 +69,7 @@ const Page = async (props: {
|
||||
<div className="absolute top-10x w-full"></div>
|
||||
<div className="flex w-full flex-col justify-center">
|
||||
<h2 className="text-center text-xl text-strong font-bold">
|
||||
{cloud ? "Complete your sign up" : "Sign Up for Danswer"}
|
||||
{cloud ? "Complete your sign up" : "Sign Up for Onyx"}
|
||||
</h2>
|
||||
{cloud && (
|
||||
<>
|
||||
|
||||
@@ -33,7 +33,7 @@ export function ChatPopup() {
|
||||
enterpriseSettings?.custom_popup_header ||
|
||||
(isConsentScreen
|
||||
? "Terms of Use"
|
||||
: `Welcome to ${enterpriseSettings?.application_name || "Danswer"}!`);
|
||||
: `Welcome to ${enterpriseSettings?.application_name || "Onyx"}!`);
|
||||
|
||||
const popupContent =
|
||||
enterpriseSettings?.custom_popup_content ||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { SourceIcon } from "@/components/SourceIcon";
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { FiTag } from "react-icons/fi";
|
||||
import { DocumentSelector } from "./DocumentSelector";
|
||||
import { buildDocumentSummaryDisplay } from "@/components/search/DocumentDisplay";
|
||||
@@ -11,12 +11,12 @@ import { ValidSources } from "@/lib/types";
|
||||
|
||||
interface DocumentDisplayProps {
|
||||
closeSidebar: () => void;
|
||||
document: DanswerDocument;
|
||||
document: OnyxDocument;
|
||||
modal?: boolean;
|
||||
isSelected: boolean;
|
||||
handleSelect: (documentId: string) => void;
|
||||
tokenLimitReached: boolean;
|
||||
setPresentingDocument: Dispatch<SetStateAction<DanswerDocument | null>>;
|
||||
setPresentingDocument: Dispatch<SetStateAction<OnyxDocument | null>>;
|
||||
}
|
||||
|
||||
export function DocumentMetadataBlock({
|
||||
@@ -24,7 +24,7 @@ export function DocumentMetadataBlock({
|
||||
document,
|
||||
}: {
|
||||
modal?: boolean;
|
||||
document: DanswerDocument;
|
||||
document: OnyxDocument;
|
||||
}) {
|
||||
const MAX_METADATA_ITEMS = 3;
|
||||
const metadataEntries = Object.entries(document.metadata);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { ChatDocumentDisplay } from "./ChatDocumentDisplay";
|
||||
import { usePopup } from "@/components/admin/connectors/Popup";
|
||||
import { removeDuplicateDocs } from "@/lib/documentUtils";
|
||||
@@ -20,8 +20,8 @@ interface ChatFiltersProps {
|
||||
filterManager: FilterManager;
|
||||
closeSidebar: () => void;
|
||||
selectedMessage: Message | null;
|
||||
selectedDocuments: DanswerDocument[] | null;
|
||||
toggleDocumentSelection: (document: DanswerDocument) => void;
|
||||
selectedDocuments: OnyxDocument[] | null;
|
||||
toggleDocumentSelection: (document: OnyxDocument) => void;
|
||||
clearSelectedDocuments: () => void;
|
||||
selectedDocumentTokens: number;
|
||||
maxTokens: number;
|
||||
@@ -32,7 +32,7 @@ interface ChatFiltersProps {
|
||||
tags: Tag[];
|
||||
documentSets: DocumentSet[];
|
||||
showFilters: boolean;
|
||||
setPresentingDocument: Dispatch<SetStateAction<DanswerDocument | null>>;
|
||||
setPresentingDocument: Dispatch<SetStateAction<OnyxDocument | null>>;
|
||||
}
|
||||
|
||||
export const ChatFilters = forwardRef<HTMLDivElement, ChatFiltersProps>(
|
||||
@@ -84,7 +84,7 @@ export const ChatFilters = forwardRef<HTMLDivElement, ChatFiltersProps>(
|
||||
|
||||
return (
|
||||
<div
|
||||
id="danswer-chat-sidebar"
|
||||
id="onyx-chat-sidebar"
|
||||
className={`relative max-w-full ${
|
||||
!modal ? "border-l h-full border-sidebar-border" : ""
|
||||
}`}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { SourceIcon } from "@/components/SourceIcon";
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { DocumentSelector } from "./DocumentSelector";
|
||||
|
||||
export function SelectedDocumentDisplay({
|
||||
document,
|
||||
handleDeselect,
|
||||
}: {
|
||||
document: DanswerDocument;
|
||||
document: OnyxDocument;
|
||||
handleDeselect: (documentId: string) => void;
|
||||
}) {
|
||||
return (
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
SendIcon,
|
||||
StopGeneratingIcon,
|
||||
} from "@/components/icons/icons";
|
||||
import { DanswerDocument, SourceMetadata } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument, SourceMetadata } from "@/lib/search/interfaces";
|
||||
import { AssistantIcon } from "@/components/assistants/AssistantIcon";
|
||||
import {
|
||||
Tooltip,
|
||||
@@ -49,7 +49,7 @@ interface ChatInputBarProps {
|
||||
openModelSettings: () => void;
|
||||
showDocs: () => void;
|
||||
showConfigureAPIKey: () => void;
|
||||
selectedDocuments: DanswerDocument[];
|
||||
selectedDocuments: OnyxDocument[];
|
||||
message: string;
|
||||
setMessage: (message: string) => void;
|
||||
stopGenerating: () => void;
|
||||
@@ -234,7 +234,7 @@ export function ChatInputBar({
|
||||
};
|
||||
|
||||
return (
|
||||
<div id="danswer-chat-input">
|
||||
<div id="onyx-chat-input">
|
||||
<div className="flex justify-center mx-auto">
|
||||
<div
|
||||
className="
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {
|
||||
DanswerDocument,
|
||||
OnyxDocument,
|
||||
Filters,
|
||||
SearchDanswerDocument,
|
||||
SearchOnyxDocument,
|
||||
StreamStopReason,
|
||||
} from "@/lib/search/interfaces";
|
||||
|
||||
@@ -72,7 +72,7 @@ export interface ChatSession {
|
||||
|
||||
export interface SearchSession {
|
||||
search_session_id: string;
|
||||
documents: SearchDanswerDocument[];
|
||||
documents: SearchOnyxDocument[];
|
||||
messages: BackendMessage[];
|
||||
description: string;
|
||||
}
|
||||
@@ -83,7 +83,7 @@ export interface Message {
|
||||
type: "user" | "assistant" | "system" | "error";
|
||||
retrievalType?: RetrievalType;
|
||||
query?: string | null;
|
||||
documents?: DanswerDocument[] | null;
|
||||
documents?: OnyxDocument[] | null;
|
||||
citations?: CitationMap;
|
||||
files: FileDescriptor[];
|
||||
toolCall: ToolCallMetadata | null;
|
||||
@@ -116,7 +116,7 @@ export interface BackendMessage {
|
||||
latest_child_message: number | null;
|
||||
message: string;
|
||||
rephrased_query: string | null;
|
||||
context_docs: { top_documents: DanswerDocument[] } | null;
|
||||
context_docs: { top_documents: OnyxDocument[] } | null;
|
||||
message_type: "user" | "assistant" | "system";
|
||||
time_sent: string;
|
||||
citations: CitationMap;
|
||||
@@ -132,7 +132,7 @@ export interface MessageResponseIDInfo {
|
||||
}
|
||||
|
||||
export interface DocumentsResponse {
|
||||
top_documents: DanswerDocument[];
|
||||
top_documents: OnyxDocument[];
|
||||
rephrased_query: string | null;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {
|
||||
AnswerPiecePacket,
|
||||
DanswerDocument,
|
||||
OnyxDocument,
|
||||
Filters,
|
||||
DocumentInfoPacket,
|
||||
StreamStopInfo,
|
||||
@@ -334,7 +334,7 @@ export function getCitedDocumentsFromMessage(message: Message) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const documentsWithCitationKey: [string, DanswerDocument][] = [];
|
||||
const documentsWithCitationKey: [string, OnyxDocument][] = [];
|
||||
Object.entries(message.citations).forEach(([citationKey, documentDbId]) => {
|
||||
const matchingDocument = message.documents!.find(
|
||||
(document) => document.db_doc_id === documentDbId
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Citation } from "@/components/search/results/Citation";
|
||||
import { WebResultIcon } from "@/components/WebResultIcon";
|
||||
import { LoadedDanswerDocument } from "@/lib/search/interfaces";
|
||||
import { LoadedOnyxDocument } from "@/lib/search/interfaces";
|
||||
import { getSourceMetadata, SOURCE_METADATA_MAP } from "@/lib/sources";
|
||||
import { ValidSources } from "@/lib/types";
|
||||
import React, { memo } from "react";
|
||||
@@ -57,7 +57,7 @@ export const MemoizedLink = memo((props: any) => {
|
||||
url={document?.url}
|
||||
icon={document?.icon as React.ReactNode}
|
||||
link={rest?.href}
|
||||
document={document as LoadedDanswerDocument}
|
||||
document={document as LoadedOnyxDocument}
|
||||
updatePresentingDocument={updatePresentingDocument}
|
||||
>
|
||||
{rest.children}
|
||||
|
||||
@@ -20,9 +20,9 @@ import React, {
|
||||
} from "react";
|
||||
import ReactMarkdown from "react-markdown";
|
||||
import {
|
||||
DanswerDocument,
|
||||
FilteredDanswerDocument,
|
||||
LoadedDanswerDocument,
|
||||
OnyxDocument,
|
||||
FilteredOnyxDocument,
|
||||
LoadedOnyxDocument,
|
||||
} from "@/lib/search/interfaces";
|
||||
import { SearchSummary } from "./SearchSummary";
|
||||
|
||||
@@ -98,7 +98,7 @@ function FileDisplay({
|
||||
<>
|
||||
{nonImgFiles && nonImgFiles.length > 0 && (
|
||||
<div
|
||||
id="danswer-file"
|
||||
id="onyx-file"
|
||||
className={` ${alignBubble && "ml-auto"} mt-2 auto mb-4`}
|
||||
>
|
||||
<div className="flex flex-col gap-2">
|
||||
@@ -119,7 +119,7 @@ function FileDisplay({
|
||||
|
||||
{imageFiles && imageFiles.length > 0 && (
|
||||
<div
|
||||
id="danswer-image"
|
||||
id="onyx-image"
|
||||
className={` ${alignBubble && "ml-auto"} mt-2 auto mb-4`}
|
||||
>
|
||||
<div className="flex flex-col gap-2">
|
||||
@@ -200,9 +200,9 @@ export const AIMessage = ({
|
||||
continueGenerating?: () => void;
|
||||
otherMessagesCanSwitchTo?: number[];
|
||||
onMessageSelection?: (messageId: number) => void;
|
||||
selectedDocuments?: DanswerDocument[] | null;
|
||||
selectedDocuments?: OnyxDocument[] | null;
|
||||
toggleDocumentSelection?: () => void;
|
||||
docs?: DanswerDocument[] | null;
|
||||
docs?: OnyxDocument[] | null;
|
||||
alternativeAssistant?: Persona | null;
|
||||
currentPersona: Persona;
|
||||
messageId: number | null;
|
||||
@@ -210,7 +210,7 @@ export const AIMessage = ({
|
||||
documentSelectionToggled?: boolean;
|
||||
files?: FileDescriptor[];
|
||||
query?: string;
|
||||
citedDocuments?: [string, DanswerDocument][] | null;
|
||||
citedDocuments?: [string, OnyxDocument][] | null;
|
||||
toolCall?: ToolCallMetadata | null;
|
||||
isComplete?: boolean;
|
||||
hasDocs?: boolean;
|
||||
@@ -221,7 +221,7 @@ export const AIMessage = ({
|
||||
retrievalDisabled?: boolean;
|
||||
overriddenModel?: string;
|
||||
regenerate?: (modelOverRide: LlmOverride) => Promise<void>;
|
||||
setPresentingDocument?: (document: DanswerDocument) => void;
|
||||
setPresentingDocument?: (document: OnyxDocument) => void;
|
||||
}) => {
|
||||
const toolCallGenerating = toolCall && !toolCall.tool_result;
|
||||
const processContent = (content: string | JSX.Element) => {
|
||||
@@ -284,7 +284,7 @@ export const AIMessage = ({
|
||||
content = trimIncompleteCodeSection(content);
|
||||
}
|
||||
|
||||
let filteredDocs: FilteredDanswerDocument[] = [];
|
||||
let filteredDocs: FilteredOnyxDocument[] = [];
|
||||
|
||||
if (docs) {
|
||||
filteredDocs = docs
|
||||
@@ -297,7 +297,7 @@ export const AIMessage = ({
|
||||
.filter((doc) => {
|
||||
return citedDocumentIds.includes(doc.document_id);
|
||||
})
|
||||
.map((doc: DanswerDocument, ind: number) => {
|
||||
.map((doc: OnyxDocument, ind: number) => {
|
||||
return {
|
||||
...doc,
|
||||
included: selectedDocumentIds.includes(doc.document_id),
|
||||
@@ -371,7 +371,7 @@ export const AIMessage = ({
|
||||
otherMessagesCanSwitchTo.length > 1;
|
||||
return (
|
||||
<div
|
||||
id="danswer-ai-message"
|
||||
id="onyx-ai-message"
|
||||
ref={trackedElementRef}
|
||||
className={`py-5 ml-4 px-5 relative flex `}
|
||||
>
|
||||
@@ -762,7 +762,7 @@ export const HumanMessage = ({
|
||||
|
||||
return (
|
||||
<div
|
||||
id="danswer-human-message"
|
||||
id="onyx-human-message"
|
||||
className="pt-5 pb-1 px-2 lg:px-5 flex -mr-6 relative"
|
||||
onMouseEnter={() => setIsHovered(true)}
|
||||
onMouseLeave={() => setIsHovered(false)}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { BasicClickable } from "@/components/BasicClickable";
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { FiBook } from "react-icons/fi";
|
||||
|
||||
export function SelectedDocuments({
|
||||
selectedDocuments,
|
||||
}: {
|
||||
selectedDocuments: DanswerDocument[];
|
||||
selectedDocuments: OnyxDocument[];
|
||||
}) {
|
||||
if (selectedDocuments.length === 0) {
|
||||
return null;
|
||||
|
||||
@@ -14,13 +14,13 @@ import { Separator } from "@/components/ui/separator";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useContext, useEffect, useState } from "react";
|
||||
import { SettingsContext } from "@/components/settings/SettingsProvider";
|
||||
import { DanswerInitializingLoader } from "@/components/DanswerInitializingLoader";
|
||||
import { OnyxInitializingLoader } from "@/components/OnyxInitializingLoader";
|
||||
import { Persona } from "@/app/admin/assistants/interfaces";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import TextView from "@/components/chat_search/TextView";
|
||||
|
||||
function BackToDanswerButton() {
|
||||
function BackToOnyxButton() {
|
||||
const router = useRouter();
|
||||
const enterpriseSettings = useContext(SettingsContext)?.enterpriseSettings;
|
||||
|
||||
@@ -28,7 +28,7 @@ function BackToDanswerButton() {
|
||||
<div className="absolute bottom-0 bg-background w-full flex border-t border-border py-4">
|
||||
<div className="mx-auto">
|
||||
<Button onClick={() => router.push("/chat")}>
|
||||
Back to {enterpriseSettings?.application_name || "Danswer Chat"}
|
||||
Back to {enterpriseSettings?.application_name || "Onyx Chat"}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -44,7 +44,7 @@ export function SharedChatDisplay({
|
||||
}) {
|
||||
const [isReady, setIsReady] = useState(false);
|
||||
const [presentingDocument, setPresentingDocument] =
|
||||
useState<DanswerDocument | null>(null);
|
||||
useState<OnyxDocument | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
Prism.highlightAll();
|
||||
@@ -58,7 +58,7 @@ export function SharedChatDisplay({
|
||||
Did not find a shared chat with the specified ID.
|
||||
</Callout>
|
||||
</div>
|
||||
<BackToDanswerButton />
|
||||
<BackToOnyxButton />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -122,7 +122,7 @@ export function SharedChatDisplay({
|
||||
) : (
|
||||
<div className="grow flex-0 h-screen w-full flex items-center justify-center">
|
||||
<div className="mb-[33vh]">
|
||||
<DanswerInitializingLoader />
|
||||
<OnyxInitializingLoader />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
@@ -130,7 +130,7 @@ export function SharedChatDisplay({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<BackToDanswerButton />
|
||||
<BackToOnyxButton />
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -35,12 +35,12 @@ export default function FixedLogo({
|
||||
{enterpriseSettings.application_name}
|
||||
</HeaderTitle>
|
||||
{!NEXT_PUBLIC_DO_NOT_USE_TOGGLE_OFF_DANSWER_POWERED && (
|
||||
<p className="text-xs text-subtle">Powered by Danswer</p>
|
||||
<p className="text-xs text-subtle">Powered by Onyx</p>
|
||||
)}
|
||||
</div>
|
||||
) : (
|
||||
<HeaderTitle backgroundToggled={backgroundToggled}>
|
||||
Danswer
|
||||
Onyx
|
||||
</HeaderTitle>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { useState } from "react";
|
||||
|
||||
interface DocumentInfo {
|
||||
@@ -18,12 +18,12 @@ async function fetchDocumentLength(documentId: string) {
|
||||
}
|
||||
|
||||
export function useDocumentSelection(): [
|
||||
DanswerDocument[],
|
||||
(document: DanswerDocument) => void,
|
||||
OnyxDocument[],
|
||||
(document: OnyxDocument) => void,
|
||||
() => void,
|
||||
number,
|
||||
] {
|
||||
const [selectedDocuments, setSelectedDocuments] = useState<DanswerDocument[]>(
|
||||
const [selectedDocuments, setSelectedDocuments] = useState<OnyxDocument[]>(
|
||||
[]
|
||||
);
|
||||
const [totalTokens, setTotalTokens] = useState(0);
|
||||
@@ -32,7 +32,7 @@ export function useDocumentSelection(): [
|
||||
);
|
||||
const documentIdToLength = new Map<string, number>();
|
||||
|
||||
function toggleDocumentSelection(document: DanswerDocument) {
|
||||
function toggleDocumentSelection(document: OnyxDocument) {
|
||||
const documentId = document.document_id;
|
||||
const isAdding = !selectedDocumentIds.includes(documentId);
|
||||
if (!isAdding) {
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
The DanswerAI Enterprise license (the “Enterprise License”)
|
||||
Copyright (c) 2023-present DanswerAI, Inc.
|
||||
The OnyxAI Enterprise license (the “Enterprise License”)
|
||||
Copyright (c) 2023-present OnyxAI, Inc.
|
||||
|
||||
With regard to the Danswer Software:
|
||||
With regard to the Onyx Software:
|
||||
|
||||
This software and associated documentation files (the "Software") may only be
|
||||
used in production, if you (and any entity that you represent) have agreed to,
|
||||
and are in compliance with, the DanswerAI Subscription Terms of Service, available
|
||||
at https://danswer.ai/terms (the “Enterprise Terms”), or other
|
||||
agreement governing the use of the Software, as agreed by you and DanswerAI,
|
||||
and otherwise have a valid Danswer Enterprise license for the
|
||||
and are in compliance with, the OnyxAI Subscription Terms of Service, available
|
||||
at https://onyx.app/terms (the “Enterprise Terms”), or other
|
||||
agreement governing the use of the Software, as agreed by you and OnyxAI,
|
||||
and otherwise have a valid Onyx Enterprise license for the
|
||||
correct number of user seats. Subject to the foregoing sentence, you are free to
|
||||
modify this Software and publish patches to the Software. You agree that DanswerAI
|
||||
modify this Software and publish patches to the Software. You agree that OnyxAI
|
||||
and/or its licensors (as applicable) retain all right, title and interest in and
|
||||
to all such modifications and/or patches, and all such modifications and/or
|
||||
patches may only be used, copied, modified, displayed, distributed, or otherwise
|
||||
exploited with a valid Danswer Enterprise license for the correct
|
||||
exploited with a valid Onyx Enterprise license for the correct
|
||||
number of user seats. Notwithstanding the foregoing, you may copy and modify
|
||||
the Software for development and testing purposes, without requiring a
|
||||
subscription. You agree that DanswerAI and/or its licensors (as applicable) retain
|
||||
subscription. You agree that OnyxAI and/or its licensors (as applicable) retain
|
||||
all right, title and interest in and to all such modifications. You are not
|
||||
granted any other rights beyond what is expressly stated herein. Subject to the
|
||||
foregoing, it is forbidden to copy, merge, publish, distribute, sublicense,
|
||||
@@ -31,6 +31,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
For all third party components incorporated into the Danswer Software, those
|
||||
For all third party components incorporated into the Onyx Software, those
|
||||
components are licensed under the original license provided by the owner of the
|
||||
applicable component.
|
||||
|
||||
@@ -91,7 +91,7 @@ export function CustomAnalyticsUpdateForm() {
|
||||
For security reasons, you must provide a secret key to update this
|
||||
script. This should be the value of the{" "}
|
||||
<i>CUSTOM_ANALYTICS_SECRET_KEY</i> environment variable set when
|
||||
initially setting up Danswer.
|
||||
initially setting up Onyx.
|
||||
</>
|
||||
</SubLabel>
|
||||
<input
|
||||
|
||||
@@ -12,7 +12,7 @@ function Main() {
|
||||
<div className="mt-4">
|
||||
<Callout type="danger" title="Custom Analytics is not enabled.">
|
||||
To set up custom analytics scripts, please work with the team who
|
||||
setup Danswer in your organization to set the{" "}
|
||||
setup Onyx in your organization to set the{" "}
|
||||
<i>CUSTOM_ANALYTICS_SECRET_KEY</i> environment variable.
|
||||
</Callout>
|
||||
</div>
|
||||
@@ -23,9 +23,9 @@ function Main() {
|
||||
return (
|
||||
<div>
|
||||
<Text className="mb-8">
|
||||
This allows you to bring your own analytics tool to Danswer! Copy the
|
||||
Web snippet from your analytics provider into the box below, and
|
||||
we'll start sending usage events.
|
||||
This allows you to bring your own analytics tool to Onyx! Copy the Web
|
||||
snippet from your analytics provider into the box below, and we'll
|
||||
start sending usage events.
|
||||
</Text>
|
||||
|
||||
<CustomAnalyticsUpdateForm />
|
||||
|
||||
@@ -2,7 +2,7 @@ import { errorHandlingFetcher } from "@/lib/fetcher";
|
||||
import useSWR, { mutate } from "swr";
|
||||
import {
|
||||
ChatSessionMinimal,
|
||||
DanswerBotAnalytics,
|
||||
OnyxBotAnalytics,
|
||||
QueryAnalytics,
|
||||
UserAnalytics,
|
||||
} from "./usage/types";
|
||||
@@ -52,16 +52,16 @@ export const useUserAnalytics = (timeRange: DateRangePickerValue) => {
|
||||
};
|
||||
};
|
||||
|
||||
export const useDanswerBotAnalytics = (timeRange: DateRangePickerValue) => {
|
||||
const url = buildApiPath("/api/analytics/admin/danswerbot", {
|
||||
export const useOnyxBotAnalytics = (timeRange: DateRangePickerValue) => {
|
||||
const url = buildApiPath("/api/analytics/admin/onyxbot", {
|
||||
start: convertDateToStartOfDay(timeRange.from)?.toISOString(),
|
||||
end: convertDateToEndOfDay(timeRange.to)?.toISOString(),
|
||||
});
|
||||
const swrResponse = useSWR<DanswerBotAnalytics[]>(url, errorHandlingFetcher); // TODO
|
||||
const swrResponse = useSWR<OnyxBotAnalytics[]>(url, errorHandlingFetcher); // TODO
|
||||
|
||||
return {
|
||||
...swrResponse,
|
||||
refreshDanswerBotAnalytics: () => mutate(url),
|
||||
refreshOnyxBotAnalytics: () => mutate(url),
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
import { ThreeDotsLoader } from "@/components/Loading";
|
||||
import { getDatesList, useDanswerBotAnalytics } from "../lib";
|
||||
import { getDatesList, useOnyxBotAnalytics } from "../lib";
|
||||
import { DateRangePickerValue } from "@/app/ee/admin/performance/DateRangeSelector";
|
||||
import Text from "@/components/ui/text";
|
||||
import Title from "@/components/ui/title";
|
||||
import CardSection from "@/components/admin/CardSection";
|
||||
import { AreaChartDisplay } from "@/components/ui/areaChart";
|
||||
|
||||
export function DanswerBotChart({
|
||||
export function OnyxBotChart({
|
||||
timeRange,
|
||||
}: {
|
||||
timeRange: DateRangePickerValue;
|
||||
}) {
|
||||
const {
|
||||
data: danswerBotAnalyticsData,
|
||||
isLoading: isDanswerBotAnalyticsLoading,
|
||||
error: danswerBotAnalyticsError,
|
||||
} = useDanswerBotAnalytics(timeRange);
|
||||
data: onyxBotAnalyticsData,
|
||||
isLoading: isOnyxBotAnalyticsLoading,
|
||||
error: onyxBotAnalyticsError,
|
||||
} = useOnyxBotAnalytics(timeRange);
|
||||
|
||||
let chart;
|
||||
if (isDanswerBotAnalyticsLoading) {
|
||||
if (isOnyxBotAnalyticsLoading) {
|
||||
chart = (
|
||||
<div className="h-80 flex flex-col">
|
||||
<ThreeDotsLoader />
|
||||
</div>
|
||||
);
|
||||
} else if (!danswerBotAnalyticsData || danswerBotAnalyticsError) {
|
||||
} else if (!onyxBotAnalyticsData || onyxBotAnalyticsError) {
|
||||
chart = (
|
||||
<div className="h-80 text-red-600 text-bold flex flex-col">
|
||||
<p className="m-auto">Failed to fetch feedback data...</p>
|
||||
@@ -32,13 +32,13 @@ export function DanswerBotChart({
|
||||
);
|
||||
} else {
|
||||
const initialDate =
|
||||
timeRange.from || new Date(danswerBotAnalyticsData[0].date);
|
||||
timeRange.from || new Date(onyxBotAnalyticsData[0].date);
|
||||
const dateRange = getDatesList(initialDate);
|
||||
|
||||
const dateToDanswerBotAnalytics = new Map(
|
||||
danswerBotAnalyticsData.map((danswerBotAnalyticsEntry) => [
|
||||
danswerBotAnalyticsEntry.date,
|
||||
danswerBotAnalyticsEntry,
|
||||
const dateToOnyxBotAnalytics = new Map(
|
||||
onyxBotAnalyticsData.map((onyxBotAnalyticsEntry) => [
|
||||
onyxBotAnalyticsEntry.date,
|
||||
onyxBotAnalyticsEntry,
|
||||
])
|
||||
);
|
||||
|
||||
@@ -46,13 +46,12 @@ export function DanswerBotChart({
|
||||
<AreaChartDisplay
|
||||
className="mt-4"
|
||||
data={dateRange.map((dateStr) => {
|
||||
const danswerBotAnalyticsForDate =
|
||||
dateToDanswerBotAnalytics.get(dateStr);
|
||||
const onyxBotAnalyticsForDate = dateToOnyxBotAnalytics.get(dateStr);
|
||||
return {
|
||||
Day: dateStr,
|
||||
"Total Queries": danswerBotAnalyticsForDate?.total_queries || 0,
|
||||
"Total Queries": onyxBotAnalyticsForDate?.total_queries || 0,
|
||||
"Automatically Resolved":
|
||||
danswerBotAnalyticsForDate?.auto_resolved || 0,
|
||||
onyxBotAnalyticsForDate?.auto_resolved || 0,
|
||||
};
|
||||
})}
|
||||
categories={["Total Queries", "Automatically Resolved"]}
|
||||
@@ -1,7 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { DateRangeSelector } from "../DateRangeSelector";
|
||||
import { DanswerBotChart } from "./DanswerBotChart";
|
||||
import { OnyxBotChart } from "./OnyxBotChart";
|
||||
import { FeedbackChart } from "./FeedbackChart";
|
||||
import { QueryPerformanceChart } from "./QueryPerformanceChart";
|
||||
import { PersonaMessagesChart } from "./PersonaMessagesChart";
|
||||
@@ -26,7 +26,7 @@ export default function AnalyticsPage() {
|
||||
/>
|
||||
<QueryPerformanceChart timeRange={timeRange} />
|
||||
<FeedbackChart timeRange={timeRange} />
|
||||
<DanswerBotChart timeRange={timeRange} />
|
||||
<OnyxBotChart timeRange={timeRange} />
|
||||
<PersonaMessagesChart timeRange={timeRange} />
|
||||
<Separator />
|
||||
<UsageReports />
|
||||
|
||||
@@ -12,7 +12,7 @@ export interface UserAnalytics {
|
||||
date: string;
|
||||
}
|
||||
|
||||
export interface DanswerBotAnalytics {
|
||||
export interface OnyxBotAnalytics {
|
||||
total_queries: number;
|
||||
auto_resolved: number;
|
||||
date: string;
|
||||
|
||||
@@ -137,8 +137,8 @@ export function WhitelabelingForm() {
|
||||
<TextFormField
|
||||
label="Application Name"
|
||||
name="application_name"
|
||||
subtext={`The custom name you are giving Danswer for your organization. This will replace 'Danswer' everywhere in the UI.`}
|
||||
placeholder="Custom name which will replace 'Danswer'"
|
||||
subtext={`The custom name you are giving Onyx for your organization. This will replace 'Onyx' everywhere in the UI.`}
|
||||
placeholder="Custom name which will replace 'Onyx'"
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
|
||||
@@ -178,7 +178,7 @@ export function WhitelabelingForm() {
|
||||
</div>
|
||||
) : (
|
||||
<SubLabel>
|
||||
Specify your own logo to replace the standard Danswer logo.
|
||||
Specify your own logo to replace the standard Onyx logo.
|
||||
</SubLabel>
|
||||
)}
|
||||
|
||||
@@ -199,7 +199,7 @@ export function WhitelabelingForm() {
|
||||
<Text>
|
||||
Read{" "}
|
||||
<Link
|
||||
href={"https://docs.danswer.dev/enterprise_edition/theming"}
|
||||
href={"https://docs.onyx.app/enterprise_edition/theming"}
|
||||
className="text-link cursor-pointer"
|
||||
>
|
||||
the docs
|
||||
@@ -234,7 +234,7 @@ export function WhitelabelingForm() {
|
||||
values.enable_consent_screen
|
||||
? `The title for the consent screen that will be displayed for each user on their initial visit to the application. If left blank, title will default to "Terms of Use".`
|
||||
: `The title for the popup that will be displayed for each user on their initial visit to the application. If left blank AND Custom Popup Content is specified, will use "Welcome to ${
|
||||
values.application_name || "Danswer"
|
||||
values.application_name || "Onyx"
|
||||
}!".`
|
||||
}
|
||||
placeholder={
|
||||
|
||||
@@ -31,18 +31,18 @@ const inter = Inter({
|
||||
});
|
||||
|
||||
export async function generateMetadata(): Promise<Metadata> {
|
||||
let logoLocation = buildClientUrl("/danswer.ico");
|
||||
let logoLocation = buildClientUrl("/onyx.ico");
|
||||
let enterpriseSettings: EnterpriseSettings | null = null;
|
||||
if (SERVER_SIDE_ONLY__PAID_ENTERPRISE_FEATURES_ENABLED) {
|
||||
enterpriseSettings = await (await fetchEnterpriseSettingsSS()).json();
|
||||
logoLocation =
|
||||
enterpriseSettings && enterpriseSettings.use_custom_logo
|
||||
? "/api/enterprise-settings/logo"
|
||||
: buildClientUrl("/danswer.ico");
|
||||
: buildClientUrl("/onyx.ico");
|
||||
}
|
||||
|
||||
return {
|
||||
title: enterpriseSettings?.application_name ?? "Danswer",
|
||||
title: enterpriseSettings?.application_name ?? "Onyx",
|
||||
description: "Question answering for your documents",
|
||||
icons: {
|
||||
icon: logoLocation,
|
||||
@@ -115,14 +115,14 @@ export default async function RootLayout({
|
||||
return getPageContent(
|
||||
<div className="flex flex-col items-center justify-center min-h-screen">
|
||||
<div className="mb-2 flex items-center max-w-[175px]">
|
||||
<HeaderTitle>Danswer</HeaderTitle>
|
||||
<HeaderTitle>Onyx</HeaderTitle>
|
||||
<Logo height={40} width={40} />
|
||||
</div>
|
||||
|
||||
<CardSection className="max-w-md">
|
||||
<h1 className="text-2xl font-bold mb-4 text-error">Error</h1>
|
||||
<p className="text-text-500">
|
||||
Your Danswer instance was not configured properly and your settings
|
||||
Your Onyx instance was not configured properly and your settings
|
||||
could not be loaded. This could be due to an admin configuration
|
||||
issue or an incomplete setup.
|
||||
</p>
|
||||
@@ -130,21 +130,21 @@ export default async function RootLayout({
|
||||
If you're an admin, please check{" "}
|
||||
<a
|
||||
className="text-link"
|
||||
href="https://docs.danswer.dev/introduction?utm_source=app&utm_medium=error_page&utm_campaign=config_error"
|
||||
href="https://docs.onyx.app/introduction?utm_source=app&utm_medium=error_page&utm_campaign=config_error"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
our docs
|
||||
</a>{" "}
|
||||
to see how to configure Danswer properly. If you're a user,
|
||||
please contact your admin to fix this error.
|
||||
to see how to configure Onyx properly. If you're a user, please
|
||||
contact your admin to fix this error.
|
||||
</p>
|
||||
<p className="mt-4">
|
||||
For additional support and guidance, you can reach out to our
|
||||
community on{" "}
|
||||
<a
|
||||
className="text-link"
|
||||
href="https://danswer.ai?utm_source=app&utm_medium=error_page&utm_campaign=config_error"
|
||||
href="https://onyx.app?utm_source=app&utm_medium=error_page&utm_campaign=config_error"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@@ -160,7 +160,7 @@ export default async function RootLayout({
|
||||
return getPageContent(
|
||||
<div className="flex flex-col items-center justify-center min-h-screen">
|
||||
<div className="mb-2 flex items-center max-w-[175px]">
|
||||
<HeaderTitle>Danswer</HeaderTitle>
|
||||
<HeaderTitle>Onyx</HeaderTitle>
|
||||
<Logo height={40} width={40} />
|
||||
</div>
|
||||
<CardSection className="w-full max-w-md">
|
||||
@@ -168,11 +168,11 @@ export default async function RootLayout({
|
||||
Access Restricted
|
||||
</h1>
|
||||
<p className="text-text-500 mb-4">
|
||||
We regret to inform you that your access to Danswer has been
|
||||
We regret to inform you that your access to Onyx has been
|
||||
temporarily suspended due to a lapse in your subscription.
|
||||
</p>
|
||||
<p className="text-text-500 mb-4">
|
||||
To reinstate your access and continue benefiting from Danswer's
|
||||
To reinstate your access and continue benefiting from Onyx's
|
||||
powerful features, please update your payment information.
|
||||
</p>
|
||||
<p className="text-text-500">
|
||||
|
||||
@@ -2,15 +2,14 @@ import { Logo } from "./Logo";
|
||||
import { useContext } from "react";
|
||||
import { SettingsContext } from "./settings/SettingsProvider";
|
||||
|
||||
export function DanswerInitializingLoader() {
|
||||
export function OnyxInitializingLoader() {
|
||||
const settings = useContext(SettingsContext);
|
||||
|
||||
return (
|
||||
<div className="mx-auto my-auto animate-pulse">
|
||||
<Logo height={96} width={96} className="mx-auto mb-3" />
|
||||
<p className="text-lg font-bold">
|
||||
Initializing{" "}
|
||||
{settings?.enterpriseSettings?.application_name ?? "Danswer"}
|
||||
Initializing {settings?.enterpriseSettings?.application_name ?? "Onyx"}
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
@@ -25,7 +25,7 @@ export function SwitchModelModal({
|
||||
<br />
|
||||
Please click the button below to choose a new model. Don't worry,
|
||||
the re-indexing necessary for the switch will happen in the background
|
||||
- your use of Danswer will not be interrupted.
|
||||
- your use of Onyx will not be interrupted.
|
||||
</Text>
|
||||
|
||||
<div className="flex mt-4">
|
||||
|
||||
@@ -3,7 +3,7 @@ import { SourceIcon } from "./SourceIcon";
|
||||
|
||||
export function WebResultIcon({ url }: { url: string }) {
|
||||
const hostname = new URL(url).hostname;
|
||||
return hostname == "https://docs.danswer.dev" ? (
|
||||
return hostname == "https://docs.onyx.app" ? (
|
||||
<img
|
||||
className="my-0 py-0"
|
||||
src={`https://www.google.com/s2/favicons?domain=${hostname}`}
|
||||
|
||||
@@ -58,7 +58,7 @@ export function AccessTypeForm({
|
||||
name: "Public",
|
||||
value: "public",
|
||||
description:
|
||||
"Everyone with an account on Danswer can access the documents pulled in by this connector",
|
||||
"Everyone with an account on Onyx can access the documents pulled in by this connector",
|
||||
});
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ export function AccessTypeForm({
|
||||
name: "Auto Sync Permissions",
|
||||
value: "sync",
|
||||
description:
|
||||
"We will automatically sync permissions from the source. A document will be searchable in Danswer if and only if the user performing the search has permission to access the document in the source.",
|
||||
"We will automatically sync permissions from the source. A document will be searchable in Onyx if and only if the user performing the search has permission to access the document in the source.",
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -50,11 +50,11 @@ export function AdminSidebar({ collections }: { collections: Collection[] }) {
|
||||
{enterpriseSettings.application_name}
|
||||
</HeaderTitle>
|
||||
{!NEXT_PUBLIC_DO_NOT_USE_TOGGLE_OFF_DANSWER_POWERED && (
|
||||
<p className="text-xs text-subtle">Powered by Danswer</p>
|
||||
<p className="text-xs text-subtle">Powered by Onyx</p>
|
||||
)}
|
||||
</div>
|
||||
) : (
|
||||
<HeaderTitle>Danswer</HeaderTitle>
|
||||
<HeaderTitle>Onyx</HeaderTitle>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -104,10 +104,10 @@ export function AdminSidebar({ collections }: { collections: Collection[] }) {
|
||||
{combinedSettings.webVersion && (
|
||||
<div
|
||||
className="flex flex-col mt-6 items-center justify-center w-full"
|
||||
key={"danswerVersion"}
|
||||
key={"onyxVersion"}
|
||||
>
|
||||
<h2 className="text-xs text-text w-52 font-medium pb-2">
|
||||
Danswer version: {combinedSettings.webVersion}
|
||||
Onyx version: {combinedSettings.webVersion}
|
||||
</h2>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -9,11 +9,11 @@ import {
|
||||
DialogTitle,
|
||||
} from "@/components/ui/dialog";
|
||||
import { Download, XIcon, ZoomIn, ZoomOut } from "lucide-react";
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { MinimalMarkdown } from "./MinimalMarkdown";
|
||||
|
||||
interface TextViewProps {
|
||||
presentingDocument: DanswerDocument;
|
||||
presentingDocument: OnyxDocument;
|
||||
onClose: () => void;
|
||||
}
|
||||
export default function TextView({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { WebResultIcon } from "@/components/WebResultIcon";
|
||||
import { SourceIcon } from "@/components/SourceIcon";
|
||||
import { DanswerDocument } from "@/lib/search/interfaces";
|
||||
import { OnyxDocument } from "@/lib/search/interfaces";
|
||||
import { truncateString } from "@/lib/utils";
|
||||
import { SetStateAction } from "react";
|
||||
import { Dispatch } from "react";
|
||||
@@ -10,8 +10,8 @@ export default function SourceCard({
|
||||
doc,
|
||||
setPresentingDocument,
|
||||
}: {
|
||||
doc: DanswerDocument;
|
||||
setPresentingDocument?: (document: DanswerDocument) => void;
|
||||
doc: OnyxDocument;
|
||||
setPresentingDocument?: (document: OnyxDocument) => void;
|
||||
}) {
|
||||
return (
|
||||
<div
|
||||
@@ -44,7 +44,7 @@ export default function SourceCard({
|
||||
interface SeeMoreBlockProps {
|
||||
documentSelectionToggled: boolean;
|
||||
toggleDocumentSelection?: () => void;
|
||||
uniqueSources: DanswerDocument["source_type"][];
|
||||
uniqueSources: OnyxDocument["source_type"][];
|
||||
}
|
||||
|
||||
export function SeeMoreBlock({
|
||||
|
||||
@@ -41,7 +41,7 @@ export default function EmbeddingSidebar() {
|
||||
{enterpriseSettings && enterpriseSettings.application_name ? (
|
||||
<HeaderTitle>{enterpriseSettings.application_name}</HeaderTitle>
|
||||
) : (
|
||||
<HeaderTitle>Danswer</HeaderTitle>
|
||||
<HeaderTitle>Onyx</HeaderTitle>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -79,7 +79,9 @@ export default function EmbeddingSidebar() {
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={`${index <= formStep ? "text-gray-800" : "text-gray-500"}`}
|
||||
className={`${
|
||||
index <= formStep ? "text-gray-800" : "text-gray-500"
|
||||
}`}
|
||||
>
|
||||
{step}
|
||||
</div>
|
||||
|
||||
@@ -110,7 +110,7 @@ export const AVAILABLE_MODELS: HostedEmbeddingModel[] = [
|
||||
model_dim: 384,
|
||||
normalize: true,
|
||||
description:
|
||||
"The smallest and fastest version of the E5 line of models. If you're running Danswer on a resource constrained system, then this may be a good choice.",
|
||||
"The smallest and fastest version of the E5 line of models. If you're running Onyx on a resource constrained system, then this may be a good choice.",
|
||||
link: "https://huggingface.co/intfloat/e5-small-v2",
|
||||
query_prefix: "query: ",
|
||||
passage_prefix: "passage: ",
|
||||
@@ -177,8 +177,7 @@ export const AVAILABLE_CLOUD_PROVIDERS: CloudEmbeddingProvider[] = [
|
||||
provider_type: EmbeddingProvider.COHERE,
|
||||
website: "https://cohere.ai",
|
||||
icon: CohereIcon,
|
||||
docsLink:
|
||||
"https://docs.danswer.dev/guides/embedding_providers#cohere-models",
|
||||
docsLink: "https://docs.onyx.app/guides/embedding_providers#cohere-models",
|
||||
description:
|
||||
"AI company specializing in NLP models for various text-based tasks",
|
||||
apiLink: "https://dashboard.cohere.ai/api-keys",
|
||||
@@ -220,8 +219,7 @@ export const AVAILABLE_CLOUD_PROVIDERS: CloudEmbeddingProvider[] = [
|
||||
icon: OpenAIIcon,
|
||||
description: "AI industry leader known for ChatGPT and DALL-E",
|
||||
apiLink: "https://platform.openai.com/api-keys",
|
||||
docsLink:
|
||||
"https://docs.danswer.dev/guides/embedding_providers#openai-models",
|
||||
docsLink: "https://docs.onyx.app/guides/embedding_providers#openai-models",
|
||||
costslink: "https://openai.com/pricing",
|
||||
embedding_models: [
|
||||
{
|
||||
@@ -260,7 +258,7 @@ export const AVAILABLE_CLOUD_PROVIDERS: CloudEmbeddingProvider[] = [
|
||||
website: "https://ai.google",
|
||||
icon: GoogleIcon,
|
||||
docsLink:
|
||||
"https://docs.danswer.dev/guides/embedding_providers#vertex-ai-google-model",
|
||||
"https://docs.onyx.app/guides/embedding_providers#vertex-ai-google-model",
|
||||
description:
|
||||
"Offers a wide range of AI services including language and vision models",
|
||||
apiLink: "https://console.cloud.google.com/apis/credentials",
|
||||
@@ -299,8 +297,7 @@ export const AVAILABLE_CLOUD_PROVIDERS: CloudEmbeddingProvider[] = [
|
||||
website: "https://www.voyageai.com",
|
||||
icon: VoyageIcon,
|
||||
description: "Advanced NLP research startup born from Stanford AI Labs",
|
||||
docsLink:
|
||||
"https://docs.danswer.dev/guides/embedding_providers#voyage-models",
|
||||
docsLink: "https://docs.onyx.app/guides/embedding_providers#voyage-models",
|
||||
apiLink: "https://www.voyageai.com/dashboard",
|
||||
costslink: "https://www.voyageai.com/pricing",
|
||||
embedding_models: [
|
||||
|
||||
@@ -80,7 +80,7 @@ export function AnnouncementBanner() {
|
||||
) : notification.notif_type == "two_day_trial_ending" ? (
|
||||
<p className="text-center">
|
||||
Your trial is ending soon - submit your billing information to
|
||||
continue using Danswer.{" "}
|
||||
continue using Onyx.{" "}
|
||||
<Link
|
||||
href="/admin/cloud-settings"
|
||||
className="ml-2 underline cursor-pointer"
|
||||
|
||||
@@ -73,11 +73,11 @@ export default function LogoType({
|
||||
{enterpriseSettings.application_name}
|
||||
</HeaderTitle>
|
||||
{!NEXT_PUBLIC_DO_NOT_USE_TOGGLE_OFF_DANSWER_POWERED && (
|
||||
<p className="text-xs text-subtle">Powered by Danswer</p>
|
||||
<p className="text-xs text-subtle">Powered by Onyx</p>
|
||||
)}
|
||||
</div>
|
||||
) : (
|
||||
<HeaderTitle backgroundToggled={toggled}>Danswer</HeaderTitle>
|
||||
<HeaderTitle backgroundToggled={toggled}>Onyx</HeaderTitle>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -157,7 +157,7 @@ export const HealthCheckBanner = () => {
|
||||
<p className="font-bold pb-1">The backend is currently unavailable.</p>
|
||||
|
||||
<p className="px-1">
|
||||
If this is your initial setup or you just updated your Danswer
|
||||
If this is your initial setup or you just updated your Onyx
|
||||
deployment, this is likely because the backend is still starting up.
|
||||
Give it a minute or two, and then refresh the page. If that does not
|
||||
work, make sure the backend is setup and/or contact an administrator.
|
||||
|
||||
@@ -34,7 +34,7 @@ export function mockedRefreshToken(): CustomRefreshTokenResponse {
|
||||
givenName: "Mock name",
|
||||
fullName: "Mock name",
|
||||
userId: "Mock User ID",
|
||||
email: "email@danswer.ai",
|
||||
email: "email@onyx.app",
|
||||
},
|
||||
};
|
||||
return data;
|
||||
|
||||
@@ -62,18 +62,18 @@ export function _WelcomeModal({ user }: { user: User | null }) {
|
||||
setWelcomeFlowComplete();
|
||||
router.refresh();
|
||||
}}
|
||||
title={"Welcome to Danswer!"}
|
||||
title={"Welcome to Onyx!"}
|
||||
width="w-full max-h-[900px] overflow-y-scroll max-w-3xl"
|
||||
>
|
||||
<div>
|
||||
<Text className="mb-4">
|
||||
Danswer brings all your company's knowledge to your fingertips,
|
||||
Onyx brings all your company's knowledge to your fingertips,
|
||||
ready to be accessed instantly.
|
||||
</Text>
|
||||
<Text className="mb-4">
|
||||
To get started, we need to set up an API key for the Language Model
|
||||
(LLM) provider. This key allows Danswer to interact with the AI
|
||||
model, enabling intelligent responses to your queries.
|
||||
(LLM) provider. This key allows Onyx to interact with the AI model,
|
||||
enabling intelligent responses to your queries.
|
||||
</Text>
|
||||
|
||||
<div className="max-h-[900px] overflow-y-scroll">
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
"use client";
|
||||
import React from "react";
|
||||
import {
|
||||
DanswerDocument,
|
||||
OnyxDocument,
|
||||
DocumentRelevance,
|
||||
LoadedDanswerDocument,
|
||||
SearchDanswerDocument,
|
||||
LoadedOnyxDocument,
|
||||
SearchOnyxDocument,
|
||||
} from "@/lib/search/interfaces";
|
||||
import { DocumentFeedbackBlock } from "./DocumentFeedbackBlock";
|
||||
import { useContext, useState } from "react";
|
||||
@@ -127,7 +127,7 @@ export const buildDocumentSummaryDisplay = (
|
||||
export function DocumentMetadataBlock({
|
||||
document,
|
||||
}: {
|
||||
document: DanswerDocument;
|
||||
document: OnyxDocument;
|
||||
}) {
|
||||
// don't display super long tags, as they are ugly
|
||||
const MAXIMUM_TAG_LENGTH = 40;
|
||||
@@ -163,7 +163,7 @@ export function DocumentMetadataBlock({
|
||||
}
|
||||
|
||||
interface DocumentDisplayProps {
|
||||
document: SearchDanswerDocument;
|
||||
document: SearchOnyxDocument;
|
||||
messageId: number | null;
|
||||
documentRank: number;
|
||||
isSelected: boolean;
|
||||
@@ -191,7 +191,7 @@ export const DocumentDisplay = ({
|
||||
document.relevance_explanation ?? additional_relevance?.content;
|
||||
const settings = useContext(SettingsContext);
|
||||
const [presentingDocument, setPresentingDocument] =
|
||||
useState<DanswerDocument | null>(null);
|
||||
useState<OnyxDocument | null>(null);
|
||||
|
||||
const handleViewFile = async () => {
|
||||
setPresentingDocument(document);
|
||||
@@ -316,7 +316,7 @@ export const AgenticDocumentDisplay = ({
|
||||
}: DocumentDisplayProps) => {
|
||||
const [isHovered, setIsHovered] = useState(false);
|
||||
const [presentingDocument, setPresentingDocument] =
|
||||
useState<DanswerDocument | null>(null);
|
||||
useState<OnyxDocument | null>(null);
|
||||
|
||||
const [alternativeToggled, setAlternativeToggled] = useState(false);
|
||||
|
||||
@@ -428,10 +428,10 @@ export function CompactDocumentCard({
|
||||
url,
|
||||
updatePresentingDocument,
|
||||
}: {
|
||||
document: LoadedDanswerDocument;
|
||||
document: LoadedOnyxDocument;
|
||||
icon?: React.ReactNode;
|
||||
url?: string;
|
||||
updatePresentingDocument: (documentIndex: LoadedDanswerDocument) => void;
|
||||
updatePresentingDocument: (documentIndex: LoadedOnyxDocument) => void;
|
||||
}) {
|
||||
return (
|
||||
<div
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ReactNode } from "react";
|
||||
import { CompactDocumentCard } from "../DocumentDisplay";
|
||||
import { LoadedDanswerDocument } from "@/lib/search/interfaces";
|
||||
import { LoadedOnyxDocument } from "@/lib/search/interfaces";
|
||||
import {
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
@@ -21,8 +21,8 @@ export function Citation({
|
||||
link?: string;
|
||||
children?: JSX.Element | string | null | ReactNode;
|
||||
index?: number;
|
||||
updatePresentingDocument: (documentIndex: LoadedDanswerDocument) => void;
|
||||
document: LoadedDanswerDocument;
|
||||
updatePresentingDocument: (documentIndex: LoadedOnyxDocument) => void;
|
||||
document: LoadedOnyxDocument;
|
||||
icon?: React.ReactNode;
|
||||
url?: string;
|
||||
}) {
|
||||
|
||||
73
web/src/i.ipynb
Normal file
73
web/src/i.ipynb
Normal file
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import os\n",
|
||||
"\n",
|
||||
"def rename_files(directory):\n",
|
||||
" for root, dirs, files in os.walk(directory):\n",
|
||||
" for filename in files:\n",
|
||||
" new_filename = filename.replace(\"danswer\", \"onyx\").replace(\"Danswer\", \"Onyx\")\n",
|
||||
" if new_filename != filename:\n",
|
||||
" old_path = os.path.join(root, filename)\n",
|
||||
" new_path = os.path.join(root, new_filename)\n",
|
||||
" os.rename(old_path, new_path)\n",
|
||||
" print(f\"Renamed: {old_path} -> {new_path}\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"File renaming complete.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Specify the directory path here\n",
|
||||
"directory_path = \".\"\n",
|
||||
"\n",
|
||||
"rename_files(directory_path)\n",
|
||||
"print(\"File renaming complete.\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": ".venv",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.10"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -135,8 +135,7 @@ export const connectorConfigs: Record<
|
||||
values: [
|
||||
{
|
||||
type: "text",
|
||||
query:
|
||||
"Enter the website URL to scrape e.g. https://docs.danswer.dev/:",
|
||||
query: "Enter the website URL to scrape e.g. https://docs.onyx.app/:",
|
||||
label: "Base URL",
|
||||
name: "base_url",
|
||||
optional: false,
|
||||
@@ -246,8 +245,8 @@ export const connectorConfigs: Record<
|
||||
label: "Include shared drives?",
|
||||
description: (currentCredential) => {
|
||||
return currentCredential?.credential_json?.google_tokens
|
||||
? "This will allow Danswer to index everything in the shared drives you have access to."
|
||||
: "This will allow Danswer to index everything in your Organization's shared drives.";
|
||||
? "This will allow Onyx to index everything in the shared drives you have access to."
|
||||
: "This will allow Onyx to index everything in your Organization's shared drives.";
|
||||
},
|
||||
name: "include_shared_drives",
|
||||
default: false,
|
||||
@@ -261,8 +260,8 @@ export const connectorConfigs: Record<
|
||||
},
|
||||
description: (currentCredential) => {
|
||||
return currentCredential?.credential_json?.google_tokens
|
||||
? "This will allow Danswer to index everything in your My Drive."
|
||||
: "This will allow Danswer to index everything in everyone's My Drives.";
|
||||
? "This will allow Onyx to index everything in your My Drive."
|
||||
: "This will allow Onyx to index everything in everyone's My Drives.";
|
||||
},
|
||||
name: "include_my_drives",
|
||||
default: false,
|
||||
@@ -270,7 +269,7 @@ export const connectorConfigs: Record<
|
||||
{
|
||||
type: "checkbox",
|
||||
description:
|
||||
"This will allow Danswer to index all files shared with you.",
|
||||
"This will allow Onyx to index all files shared with you.",
|
||||
label: "Include All Files Shared With You?",
|
||||
name: "include_files_shared_with_me",
|
||||
visibleCondition: (values, currentCredential) =>
|
||||
@@ -435,7 +434,7 @@ export const connectorConfigs: Record<
|
||||
},
|
||||
jira: {
|
||||
description: "Configure Jira connector",
|
||||
subtext: `Specify any link to a Jira page below and click "Index" to Index. Based on the provided link, we will index the ENTIRE PROJECT, not just the specified page. For example, entering https://danswer.atlassian.net/jira/software/projects/DAN/boards/1 and clicking the Index button will index the whole DAN Jira project.`,
|
||||
subtext: `Specify any link to a Jira page below and click "Index" to Index. Based on the provided link, we will index the ENTIRE PROJECT, not just the specified page. For example, entering https://onyx.atlassian.net/jira/software/projects/DAN/boards/1 and clicking the Index button will index the whole DAN Jira project.`,
|
||||
values: [
|
||||
{
|
||||
type: "text",
|
||||
@@ -465,7 +464,7 @@ export const connectorConfigs: Record<
|
||||
label: "Requested Objects",
|
||||
name: "requested_objects",
|
||||
optional: true,
|
||||
description: `Specify the Salesforce object types you want us to index. If unsure, don't specify any objects and Danswer will default to indexing by 'Account'.
|
||||
description: `Specify the Salesforce object types you want us to index. If unsure, don't specify any objects and Onyx will default to indexing by 'Account'.
|
||||
|
||||
Hint: Use the singular form of the object name (e.g., 'Opportunity' instead of 'Opportunities').`,
|
||||
},
|
||||
@@ -482,8 +481,8 @@ Hint: Use the singular form of the object name (e.g., 'Opportunity' instead of '
|
||||
name: "sites",
|
||||
optional: true,
|
||||
description: `• If no sites are specified, all sites in your organization will be indexed (Sites.Read.All permission required).
|
||||
• Specifying 'https://danswerai.sharepoint.com/sites/support' for example will only index documents within this site.
|
||||
• Specifying 'https://danswerai.sharepoint.com/sites/support/subfolder' for example will only index documents within this folder.
|
||||
• Specifying 'https://onyxai.sharepoint.com/sites/support' for example will only index documents within this site.
|
||||
• Specifying 'https://onyxai.sharepoint.com/sites/support/subfolder' for example will only index documents within this folder.
|
||||
`,
|
||||
},
|
||||
],
|
||||
@@ -498,7 +497,7 @@ Hint: Use the singular form of the object name (e.g., 'Opportunity' instead of '
|
||||
label: "Teams",
|
||||
name: "teams",
|
||||
optional: true,
|
||||
description: `Specify 0 or more Teams to index. For example, specifying the Team 'Support' for the 'danswerai' Org will cause us to only index messages sent in channels belonging to the 'Support' Team. If no Teams are specified, all Teams in your organization will be indexed.`,
|
||||
description: `Specify 0 or more Teams to index. For example, specifying the Team 'Support' for the 'onyxai' Org will cause us to only index messages sent in channels belonging to the 'Support' Team. If no Teams are specified, all Teams in your organization will be indexed.`,
|
||||
},
|
||||
],
|
||||
advanced_values: [],
|
||||
@@ -586,7 +585,7 @@ For example, specifying .*-support.* as a "channel" will cause the connector to
|
||||
label: "Base URL",
|
||||
name: "base_url",
|
||||
optional: false,
|
||||
description: `Specify the base URL for your Slab team. This will look something like: https://danswer.slab.com/`,
|
||||
description: `Specify the base URL for your Slab team. This will look something like: https://onyx.slab.com/`,
|
||||
},
|
||||
],
|
||||
advanced_values: [],
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { DanswerDocument } from "./search/interfaces";
|
||||
import { OnyxDocument } from "./search/interfaces";
|
||||
|
||||
export function removeDuplicateDocs(
|
||||
documents: DanswerDocument[],
|
||||
documents: OnyxDocument[],
|
||||
agentic?: boolean,
|
||||
relevance?: any
|
||||
) {
|
||||
const seen = new Set<string>();
|
||||
const output: DanswerDocument[] = [];
|
||||
const output: OnyxDocument[] = [];
|
||||
documents.forEach((document) => {
|
||||
if (
|
||||
document.document_id &&
|
||||
|
||||
@@ -45,7 +45,7 @@ export interface QuotesInfoPacket {
|
||||
quotes: Quote[];
|
||||
}
|
||||
|
||||
export interface DanswerDocument {
|
||||
export interface OnyxDocument {
|
||||
document_id: string;
|
||||
link: string;
|
||||
source_type: ValidSources;
|
||||
@@ -62,20 +62,20 @@ export interface DanswerDocument {
|
||||
is_internet: boolean;
|
||||
validationState?: null | "good" | "bad";
|
||||
}
|
||||
export interface LoadedDanswerDocument extends DanswerDocument {
|
||||
export interface LoadedOnyxDocument extends OnyxDocument {
|
||||
icon: React.FC<{ size?: number; className?: string }>;
|
||||
}
|
||||
|
||||
export interface SearchDanswerDocument extends DanswerDocument {
|
||||
export interface SearchOnyxDocument extends OnyxDocument {
|
||||
is_relevant: boolean;
|
||||
relevance_explanation: string;
|
||||
}
|
||||
|
||||
export interface FilteredDanswerDocument extends DanswerDocument {
|
||||
export interface FilteredOnyxDocument extends OnyxDocument {
|
||||
included: boolean;
|
||||
}
|
||||
export interface DocumentInfoPacket {
|
||||
top_documents: DanswerDocument[];
|
||||
top_documents: OnyxDocument[];
|
||||
predicted_flow: FlowType | null;
|
||||
predicted_search: SearchType | null;
|
||||
time_cutoff: string | null;
|
||||
@@ -100,7 +100,7 @@ export interface SearchResponse {
|
||||
suggestedFlowType: FlowType | null;
|
||||
answer: string | null;
|
||||
quotes: Quote[] | null;
|
||||
documents: SearchDanswerDocument[] | null;
|
||||
documents: SearchOnyxDocument[] | null;
|
||||
selectedDocIndices: number[] | null;
|
||||
error: string | null;
|
||||
messageId: number | null;
|
||||
@@ -149,7 +149,7 @@ export interface SearchRequestArgs {
|
||||
updateDocumentRelevance: (relevance: any) => void;
|
||||
updateCurrentAnswer: (val: string) => void;
|
||||
updateQuotes: (quotes: Quote[]) => void;
|
||||
updateDocs: (documents: DanswerDocument[]) => void;
|
||||
updateDocs: (documents: OnyxDocument[]) => void;
|
||||
updateSelectedDocIndices: (docIndices: number[]) => void;
|
||||
updateSuggestedSearchType: (searchType: SearchType) => void;
|
||||
updateSuggestedFlowType: (flowType: FlowType) => void;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { DanswerDocument, SearchRequestArgs } from "./interfaces";
|
||||
import { OnyxDocument, SearchRequestArgs } from "./interfaces";
|
||||
|
||||
interface KeywordResponse {
|
||||
top_ranked_docs: DanswerDocument[];
|
||||
lower_ranked_docs: DanswerDocument[];
|
||||
top_ranked_docs: OnyxDocument[];
|
||||
lower_ranked_docs: OnyxDocument[];
|
||||
}
|
||||
|
||||
export const keywordSearch = async ({
|
||||
@@ -14,7 +14,7 @@ export const keywordSearch = async ({
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
query,
|
||||
collection: "danswer_index",
|
||||
collection: "onyx_index",
|
||||
...(sources.length > 0
|
||||
? {
|
||||
filters: [
|
||||
|
||||
@@ -4,7 +4,7 @@ import {
|
||||
} from "@/app/chat/interfaces";
|
||||
import {
|
||||
AnswerPiecePacket,
|
||||
DanswerDocument,
|
||||
OnyxDocument,
|
||||
ErrorMessagePacket,
|
||||
DocumentInfoPacket,
|
||||
Quote,
|
||||
@@ -37,7 +37,7 @@ export const searchRequestStreamed = async ({
|
||||
}: SearchRequestArgs) => {
|
||||
let answer = "";
|
||||
let quotes: Quote[] | null = null;
|
||||
let relevantDocuments: DanswerDocument[] | null = null;
|
||||
let relevantDocuments: OnyxDocument[] | null = null;
|
||||
|
||||
try {
|
||||
const filters = buildFilters(sources, documentSets, timeRange, tags);
|
||||
@@ -137,7 +137,7 @@ export const searchRequestStreamed = async ({
|
||||
// These all come together
|
||||
if (Object.hasOwn(chunk, "top_documents")) {
|
||||
chunk = chunk as DocumentInfoPacket;
|
||||
const topDocuments = chunk.top_documents as DanswerDocument[] | null;
|
||||
const topDocuments = chunk.top_documents as OnyxDocument[] | null;
|
||||
if (topDocuments) {
|
||||
relevantDocuments = topDocuments;
|
||||
updateDocs(relevantDocuments);
|
||||
|
||||
@@ -42,7 +42,7 @@ import {
|
||||
} from "@/components/icons/icons";
|
||||
import { ValidSources } from "./types";
|
||||
import {
|
||||
DanswerDocument,
|
||||
OnyxDocument,
|
||||
SourceCategory,
|
||||
SourceMetadata,
|
||||
} from "./search/interfaces";
|
||||
@@ -64,128 +64,128 @@ export const SOURCE_METADATA_MAP: SourceMap = {
|
||||
icon: GlobeIcon,
|
||||
displayName: "Web",
|
||||
category: SourceCategory.Other,
|
||||
docs: "https://docs.danswer.dev/connectors/web",
|
||||
docs: "https://docs.onyx.app/connectors/web",
|
||||
},
|
||||
file: {
|
||||
icon: FileIcon,
|
||||
displayName: "File",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/file",
|
||||
docs: "https://docs.onyx.app/connectors/file",
|
||||
},
|
||||
slack: {
|
||||
icon: ColorSlackIcon,
|
||||
displayName: "Slack",
|
||||
category: SourceCategory.Messaging,
|
||||
docs: "https://docs.danswer.dev/connectors/slack",
|
||||
docs: "https://docs.onyx.app/connectors/slack",
|
||||
oauthSupported: true,
|
||||
},
|
||||
gmail: {
|
||||
icon: GmailIcon,
|
||||
displayName: "Gmail",
|
||||
category: SourceCategory.Messaging,
|
||||
docs: "https://docs.danswer.dev/connectors/gmail/overview",
|
||||
docs: "https://docs.onyx.app/connectors/gmail/overview",
|
||||
},
|
||||
google_drive: {
|
||||
icon: GoogleDriveIcon,
|
||||
displayName: "Google Drive",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/google_drive/overview",
|
||||
docs: "https://docs.onyx.app/connectors/google_drive/overview",
|
||||
},
|
||||
github: {
|
||||
icon: GithubIcon,
|
||||
displayName: "Github",
|
||||
category: SourceCategory.CodeRepository,
|
||||
docs: "https://docs.danswer.dev/connectors/github",
|
||||
docs: "https://docs.onyx.app/connectors/github",
|
||||
},
|
||||
gitlab: {
|
||||
icon: GitlabIcon,
|
||||
displayName: "Gitlab",
|
||||
category: SourceCategory.CodeRepository,
|
||||
docs: "https://docs.danswer.dev/connectors/gitlab",
|
||||
docs: "https://docs.onyx.app/connectors/gitlab",
|
||||
},
|
||||
confluence: {
|
||||
icon: ConfluenceIcon,
|
||||
displayName: "Confluence",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/confluence",
|
||||
docs: "https://docs.onyx.app/connectors/confluence",
|
||||
},
|
||||
jira: {
|
||||
icon: JiraIcon,
|
||||
displayName: "Jira",
|
||||
category: SourceCategory.ProjectManagement,
|
||||
docs: "https://docs.danswer.dev/connectors/jira",
|
||||
docs: "https://docs.onyx.app/connectors/jira",
|
||||
},
|
||||
notion: {
|
||||
icon: NotionIcon,
|
||||
displayName: "Notion",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/notion",
|
||||
docs: "https://docs.onyx.app/connectors/notion",
|
||||
},
|
||||
zendesk: {
|
||||
icon: ZendeskIcon,
|
||||
displayName: "Zendesk",
|
||||
category: SourceCategory.CustomerSupport,
|
||||
docs: "https://docs.danswer.dev/connectors/zendesk",
|
||||
docs: "https://docs.onyx.app/connectors/zendesk",
|
||||
},
|
||||
gong: {
|
||||
icon: GongIcon,
|
||||
displayName: "Gong",
|
||||
category: SourceCategory.Other,
|
||||
docs: "https://docs.danswer.dev/connectors/gong",
|
||||
docs: "https://docs.onyx.app/connectors/gong",
|
||||
},
|
||||
linear: {
|
||||
icon: LinearIcon,
|
||||
displayName: "Linear",
|
||||
category: SourceCategory.ProjectManagement,
|
||||
docs: "https://docs.danswer.dev/connectors/linear",
|
||||
docs: "https://docs.onyx.app/connectors/linear",
|
||||
},
|
||||
productboard: {
|
||||
icon: ProductboardIcon,
|
||||
displayName: "Productboard",
|
||||
category: SourceCategory.ProjectManagement,
|
||||
docs: "https://docs.danswer.dev/connectors/productboard",
|
||||
docs: "https://docs.onyx.app/connectors/productboard",
|
||||
},
|
||||
slab: {
|
||||
icon: SlabIcon,
|
||||
displayName: "Slab",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/slab",
|
||||
docs: "https://docs.onyx.app/connectors/slab",
|
||||
},
|
||||
zulip: {
|
||||
icon: ZulipIcon,
|
||||
displayName: "Zulip",
|
||||
category: SourceCategory.Messaging,
|
||||
docs: "https://docs.danswer.dev/connectors/zulip",
|
||||
docs: "https://docs.onyx.app/connectors/zulip",
|
||||
},
|
||||
guru: {
|
||||
icon: GuruIcon,
|
||||
displayName: "Guru",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/guru",
|
||||
docs: "https://docs.onyx.app/connectors/guru",
|
||||
},
|
||||
hubspot: {
|
||||
icon: HubSpotIcon,
|
||||
displayName: "HubSpot",
|
||||
category: SourceCategory.CustomerSupport,
|
||||
docs: "https://docs.danswer.dev/connectors/hubspot",
|
||||
docs: "https://docs.onyx.app/connectors/hubspot",
|
||||
},
|
||||
document360: {
|
||||
icon: Document360Icon,
|
||||
displayName: "Document360",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/document360",
|
||||
docs: "https://docs.onyx.app/connectors/document360",
|
||||
},
|
||||
bookstack: {
|
||||
icon: BookstackIcon,
|
||||
displayName: "BookStack",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/bookstack",
|
||||
docs: "https://docs.onyx.app/connectors/bookstack",
|
||||
},
|
||||
google_sites: {
|
||||
icon: GoogleSitesIcon,
|
||||
displayName: "Google Sites",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/google_sites",
|
||||
docs: "https://docs.onyx.app/connectors/google_sites",
|
||||
},
|
||||
loopio: {
|
||||
icon: LoopioIcon,
|
||||
@@ -196,85 +196,85 @@ export const SOURCE_METADATA_MAP: SourceMap = {
|
||||
icon: DropboxIcon,
|
||||
displayName: "Dropbox",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/dropbox",
|
||||
docs: "https://docs.onyx.app/connectors/dropbox",
|
||||
},
|
||||
salesforce: {
|
||||
icon: SalesforceIcon,
|
||||
displayName: "Salesforce",
|
||||
category: SourceCategory.CustomerSupport,
|
||||
docs: "https://docs.danswer.dev/connectors/salesforce",
|
||||
docs: "https://docs.onyx.app/connectors/salesforce",
|
||||
},
|
||||
sharepoint: {
|
||||
icon: SharepointIcon,
|
||||
displayName: "Sharepoint",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/sharepoint",
|
||||
docs: "https://docs.onyx.app/connectors/sharepoint",
|
||||
},
|
||||
teams: {
|
||||
icon: TeamsIcon,
|
||||
displayName: "Teams",
|
||||
category: SourceCategory.Messaging,
|
||||
docs: "https://docs.danswer.dev/connectors/teams",
|
||||
docs: "https://docs.onyx.app/connectors/teams",
|
||||
},
|
||||
discourse: {
|
||||
icon: DiscourseIcon,
|
||||
displayName: "Discourse",
|
||||
category: SourceCategory.Messaging,
|
||||
docs: "https://docs.danswer.dev/connectors/discourse",
|
||||
docs: "https://docs.onyx.app/connectors/discourse",
|
||||
},
|
||||
axero: {
|
||||
icon: AxeroIcon,
|
||||
displayName: "Axero",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/axero",
|
||||
docs: "https://docs.onyx.app/connectors/axero",
|
||||
},
|
||||
wikipedia: {
|
||||
icon: WikipediaIcon,
|
||||
displayName: "Wikipedia",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/wikipedia",
|
||||
docs: "https://docs.onyx.app/connectors/wikipedia",
|
||||
},
|
||||
asana: {
|
||||
icon: AsanaIcon,
|
||||
displayName: "Asana",
|
||||
category: SourceCategory.ProjectManagement,
|
||||
docs: "https://docs.danswer.dev/connectors/asana",
|
||||
docs: "https://docs.onyx.app/connectors/asana",
|
||||
},
|
||||
mediawiki: {
|
||||
icon: MediaWikiIcon,
|
||||
displayName: "MediaWiki",
|
||||
category: SourceCategory.Wiki,
|
||||
docs: "https://docs.danswer.dev/connectors/mediawiki",
|
||||
docs: "https://docs.onyx.app/connectors/mediawiki",
|
||||
},
|
||||
clickup: {
|
||||
icon: ClickupIcon,
|
||||
displayName: "Clickup",
|
||||
category: SourceCategory.ProjectManagement,
|
||||
docs: "https://docs.danswer.dev/connectors/clickup",
|
||||
docs: "https://docs.onyx.app/connectors/clickup",
|
||||
},
|
||||
s3: {
|
||||
icon: S3Icon,
|
||||
displayName: "S3",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/s3",
|
||||
docs: "https://docs.onyx.app/connectors/s3",
|
||||
},
|
||||
r2: {
|
||||
icon: R2Icon,
|
||||
displayName: "R2",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/r2",
|
||||
docs: "https://docs.onyx.app/connectors/r2",
|
||||
},
|
||||
oci_storage: {
|
||||
icon: OCIStorageIcon,
|
||||
displayName: "Oracle Storage",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/oci_storage",
|
||||
docs: "https://docs.onyx.app/connectors/oci_storage",
|
||||
},
|
||||
google_cloud_storage: {
|
||||
icon: GoogleStorageIcon,
|
||||
displayName: "Google Storage",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/google_storage",
|
||||
docs: "https://docs.onyx.app/connectors/google_storage",
|
||||
},
|
||||
xenforo: {
|
||||
icon: XenforoIcon,
|
||||
@@ -290,13 +290,13 @@ export const SOURCE_METADATA_MAP: SourceMap = {
|
||||
icon: FreshdeskIcon,
|
||||
displayName: "Freshdesk",
|
||||
category: SourceCategory.CustomerSupport,
|
||||
docs: "https://docs.danswer.dev/connectors/freshdesk",
|
||||
docs: "https://docs.onyx.app/connectors/freshdesk",
|
||||
},
|
||||
fireflies: {
|
||||
icon: FirefliesIcon,
|
||||
displayName: "Fireflies",
|
||||
category: SourceCategory.Other,
|
||||
docs: "https://docs.danswer.dev/connectors/fireflies",
|
||||
docs: "https://docs.onyx.app/connectors/fireflies",
|
||||
},
|
||||
// currently used for the Internet Search tool docs, which is why
|
||||
// a globe is used
|
||||
@@ -309,7 +309,7 @@ export const SOURCE_METADATA_MAP: SourceMap = {
|
||||
icon: EgnyteIcon,
|
||||
displayName: "Egnyte",
|
||||
category: SourceCategory.Storage,
|
||||
docs: "https://docs.danswer.dev/connectors/egnyte",
|
||||
docs: "https://docs.onyx.app/connectors/egnyte",
|
||||
},
|
||||
} as SourceMap;
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ export const INVALID_ROLE_HOVER_TEXT: Partial<Record<UserRole, string>> = {
|
||||
"Global Curator users can perform admin actions for all groups they are a member of",
|
||||
[UserRole.CURATOR]: "Curator role must be assigned in the Groups tab",
|
||||
[UserRole.SLACK_USER]:
|
||||
"This role is automatically assigned to users who only use Danswer via Slack",
|
||||
"This role is automatically assigned to users who only use Onyx via Slack",
|
||||
};
|
||||
|
||||
export interface User {
|
||||
|
||||
@@ -29,7 +29,7 @@ export const getAuthTypeMetadataSS = async (): Promise<AuthTypeMetadata> => {
|
||||
}
|
||||
|
||||
// for SAML / OIDC, we auto-redirect the user to the IdP when the user visits
|
||||
// Danswer in an un-authenticated state
|
||||
// Onyx in an un-authenticated state
|
||||
if (authType === "oidc" || authType === "saml") {
|
||||
return {
|
||||
authType,
|
||||
@@ -51,7 +51,9 @@ export const getAuthDisabledSS = async (): Promise<boolean> => {
|
||||
const getOIDCAuthUrlSS = async (nextUrl: string | null): Promise<string> => {
|
||||
const res = await fetch(
|
||||
buildUrl(
|
||||
`/auth/oidc/authorize${nextUrl ? `?next=${encodeURIComponent(nextUrl)}` : ""}`
|
||||
`/auth/oidc/authorize${
|
||||
nextUrl ? `?next=${encodeURIComponent(nextUrl)}` : ""
|
||||
}`
|
||||
)
|
||||
);
|
||||
if (!res.ok) {
|
||||
@@ -65,7 +67,9 @@ const getOIDCAuthUrlSS = async (nextUrl: string | null): Promise<string> => {
|
||||
const getGoogleOAuthUrlSS = async (nextUrl: string | null): Promise<string> => {
|
||||
const res = await fetch(
|
||||
buildUrl(
|
||||
`/auth/oauth/authorize${nextUrl ? `?next=${encodeURIComponent(nextUrl)}` : ""}`
|
||||
`/auth/oauth/authorize${
|
||||
nextUrl ? `?next=${encodeURIComponent(nextUrl)}` : ""
|
||||
}`
|
||||
),
|
||||
{
|
||||
headers: {
|
||||
@@ -84,7 +88,9 @@ const getGoogleOAuthUrlSS = async (nextUrl: string | null): Promise<string> => {
|
||||
const getSAMLAuthUrlSS = async (nextUrl: string | null): Promise<string> => {
|
||||
const res = await fetch(
|
||||
buildUrl(
|
||||
`/auth/saml/authorize${nextUrl ? `?next=${encodeURIComponent(nextUrl)}` : ""}`
|
||||
`/auth/saml/authorize${
|
||||
nextUrl ? `?next=${encodeURIComponent(nextUrl)}` : ""
|
||||
}`
|
||||
)
|
||||
);
|
||||
if (!res.ok) {
|
||||
|
||||
Reference in New Issue
Block a user