Skip to content

Commit

Permalink
[FIX] Public share fixes (#513)
Browse files Browse the repository at this point in the history
* Fixing import issues

* Public share fixes

* Support for default profile APIs in Public share

* Public share FE Fixes

* Import fixes

* Renaming methods

* Removing console logs

* Handing public share for PATCH calls
  • Loading branch information
harini-venkataraman authored Jul 24, 2024
1 parent 13a4edc commit e7bb9a2
Show file tree
Hide file tree
Showing 14 changed files with 127 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,19 @@ def fetch_default_llm_profile(tool: CustomTool) -> ProfileManager:
raise DefaultProfileError("Default ProfileManager does not exist.")

@staticmethod
def fetch_default_response(
def fetch_default_output_response(
tool_studio_prompts: list[ToolStudioPrompt], document_manager_id: str
) -> dict[str, Any]:
"""Method to frame JSON responses for combined output for default for
default profile manager of the project.
Args:
tool_studio_prompts (list[ToolStudioPrompt])
document_manager_id (str)
Returns:
dict[str, Any]: Formatted JSON response for combined output.
"""
# Initialize the result dictionary
result: dict[str, Any] = {}
# Iterate over ToolStudioPrompt records
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def get_output_for_tool_default(self, request: HttpRequest) -> Response:
raise APIException(detail=tool_not_found, code=400)

# Invoke helper method to frame and fetch default response.
result: dict[str, Any] = OutputManagerHelper.fetch_default_response(
result: dict[str, Any] = OutputManagerHelper.fetch_default_output_response(
tool_studio_prompts=tool_studio_prompts,
document_manager_id=document_manager_id,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import "prismjs/plugins/line-numbers/prism-line-numbers.css";
import "prismjs/plugins/line-numbers/prism-line-numbers.js";
import "prismjs/themes/prism.css";
import { useEffect, useState } from "react";
import { useParams } from "react-router-dom";
import PropTypes from "prop-types";

import {
Expand All @@ -18,7 +19,6 @@ import { SpinnerLoader } from "../../widgets/spinner-loader/SpinnerLoader";
import "./CombinedOutput.css";
import { useExceptionHandler } from "../../../hooks/useExceptionHandler";
import { JsonView } from "./JsonView";
import { useParams } from "react-router-dom";

let TableView;
let promptOutputApiSps;
Expand All @@ -32,11 +32,14 @@ try {
}
let publicOutputsDocApi;
let publicAdapterApi;
let publicDefaultOutputApi;
try {
publicOutputsDocApi =
require("../../../plugins/prompt-studio-public-share/helpers/PublicShareAPIs").publicOutputsDocApi;
publicAdapterApi =
require("../../../plugins/prompt-studio-public-share/helpers/PublicShareAPIs").publicAdapterApi;
publicDefaultOutputApi =
require("../../../plugins/prompt-studio-public-share/helpers/PublicShareAPIs").publicDefaultOutputApi;
} catch {
// The component will remain null of it is not available
}
Expand Down Expand Up @@ -149,6 +152,9 @@ function CombinedOutput({ docId, setFilledFields }) {
selectedProfile || defaultLlmProfile,
singlePassExtractMode
);
if (activeKey === "0") {
url = publicDefaultOutputApi(id, docId);
}
} else {
url = `/api/v1/unstract/${
sessionDetails?.orgId
Expand Down
4 changes: 4 additions & 0 deletions frontend/src/components/custom-tools/footer/Footer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import { PlusOutlined } from "@ant-design/icons";
import "./Footer.css";
import { FooterLayout } from "../footer-layout/FooterLayout";
import { promptType } from "../../../helpers/GetStaticData";
import { useCustomToolStore } from "../../../store/custom-tool-store";

function Footer({ activeKey, addPromptInstance }) {
const { isPublicSource } = useCustomToolStore();
if (activeKey === "1") {
return (
<FooterLayout>
Expand All @@ -16,6 +18,7 @@ function Footer({ activeKey, addPromptInstance }) {
type="link"
icon={<PlusOutlined />}
onClick={() => addPromptInstance(promptType.notes)}
disabled={isPublicSource}
>
Notes
</Button>
Expand All @@ -25,6 +28,7 @@ function Footer({ activeKey, addPromptInstance }) {
type="link"
icon={<PlusOutlined />}
onClick={() => addPromptInstance(promptType.prompt)}
disabled={isPublicSource}
>
Prompt
</Button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
} from "antd";
import PropTypes from "prop-types";
import { useEffect, useState } from "react";
import { useParams } from "react-router-dom";

import { useAxiosPrivate } from "../../../hooks/useAxiosPrivate";
import { useExceptionHandler } from "../../../hooks/useExceptionHandler";
Expand All @@ -41,6 +42,13 @@ try {
// The component will remain null if it is not available
}

let publicIndexApi = null;
try {
publicIndexApi =
require("../../../plugins/prompt-studio-public-share/helpers/PublicShareAPIs").publicIndexApi;
} catch {
// The component will remain null if it is not available
}
const indexTypes = {
raw: "RAW",
summarize: "Summarize",
Expand All @@ -63,6 +71,7 @@ function ManageDocsModal({
const [lastMessagesUpdate, setLastMessagesUpdate] = useState("");
const { sessionDetails } = useSessionStore();
const { setAlertDetails } = useAlertStore();
const { id } = useParams();
const {
selectedDoc,
listOfDocs,
Expand Down Expand Up @@ -138,7 +147,7 @@ function ManageDocsModal({
}, [defaultLlmProfile, details]);

useEffect(() => {
if (!open || isPublicSource) {
if (!open) {
return;
}
handleGetIndexStatus(rawLlmProfile, indexTypes.raw);
Expand Down Expand Up @@ -243,10 +252,13 @@ function ManageDocsModal({
handleIndexStatus(indexType, []);
return;
}

let url = `/api/v1/unstract/${sessionDetails?.orgId}/prompt-studio/document-index/?profile_manager=${llmProfileId}`;
if (isPublicSource) {
url = publicIndexApi(id, llmProfileId);
}
const requestOptions = {
method: "GET",
url: `/api/v1/unstract/${sessionDetails?.orgId}/prompt-studio/document-index/?profile_manager=${llmProfileId}`,
url,
};

handleLoading(indexType, true);
Expand Down Expand Up @@ -425,8 +437,7 @@ function ManageDocsModal({
disabled={
disableLlmOrDocChange?.length > 0 ||
isSinglePassExtractLoading ||
indexDocs.includes(item?.document_id) ||
isPublicSource
indexDocs.includes(item?.document_id)
}
/>
),
Expand Down Expand Up @@ -592,7 +603,8 @@ function ManageDocsModal({
disabled={
!defaultLlmProfile ||
disableLlmOrDocChange?.length > 0 ||
isSinglePassExtractLoading
isSinglePassExtractLoading ||
isPublicSource
}
>
Upload New File
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,38 @@ import { useSessionStore } from "../../../store/session-store";
import { CombinedOutput } from "../combined-output/CombinedOutput";
import { DocumentViewer } from "../document-viewer/DocumentViewer";
import { PdfViewer } from "../pdf-viewer/PdfViewer";
import { useParams } from "react-router-dom";

let publicDocumentApi;
try {
publicDocumentApi =
require("../../../plugins/prompt-studio-public-share/helpers/PublicShareAPIs").publicDocumentApi;
} catch {
// The component will remain null of it is not available
}
function OutputAnalyzerCard({ doc, totalFields }) {
const [fileUrl, setFileUrl] = useState("");
const [isDocLoading, setIsDocLoading] = useState(false);
const [filledFields, setFilledFields] = useState(0);
const { details } = useCustomToolStore();
const { details, isPublicSource } = useCustomToolStore();
const { sessionDetails } = useSessionStore();
const { setAlertDetails } = useAlertStore();
const axiosPrivate = useAxiosPrivate();
const handleException = useExceptionHandler();
const { id } = useParams();

useEffect(() => {
if (!doc) {
setFileUrl("");
return;
}

let url = `/api/v1/unstract/${sessionDetails?.orgId}/prompt-studio/file/${details?.tool_id}?document_id=${doc?.document_id}`;
if (isPublicSource) {
url = publicDocumentApi(id, doc?.document_id, null);
}
const requestOptions = {
method: "GET",
url: `/api/v1/unstract/${sessionDetails?.orgId}/prompt-studio/file/${details?.tool_id}?document_id=${doc?.document_id}`,
url,
};

setIsDocLoading(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,44 @@ import { ArrowLeftOutlined } from "@ant-design/icons";
import { useNavigate, useParams } from "react-router-dom";

import { useSessionStore } from "../../../store/session-store";
import { useCustomToolStore } from "../../../store/custom-tool-store";

let HeaderPublic;
try {
HeaderPublic =
require("../../../plugins/prompt-studio-public-share/header-public/HeaderPublic.jsx").HeaderPublic;
} catch (err) {
// Do nothing if plugins are not loaded.
}

function OutputAnalyzerHeader() {
const { sessionDetails } = useSessionStore();
const { id } = useParams();
const navigate = useNavigate();

const { isPublicSource } = useCustomToolStore();
const handleNavigate = () => {
if (isPublicSource) {
navigate(`/promptStudio/share/${id}`);
} else {
navigate(`/${sessionDetails?.orgName}/tools/${id}`);
}
};
return (
<div className="output-analyzer-header">
<div>
<Space>
<Button
size="small"
type="text"
onClick={() => navigate(`/${sessionDetails?.orgName}/tools/${id}`)}
>
<ArrowLeftOutlined />
</Button>
<Typography.Text className="font-size-16" strong>
Output Analyzer
</Typography.Text>
</Space>
<div>
{isPublicSource && HeaderPublic && <HeaderPublic />}
<div className="output-analyzer-header">
<div>
<Space>
<Button size="small" type="text" onClick={handleNavigate}>
<ArrowLeftOutlined />
</Button>
<Typography.Text className="font-size-16" strong>
Output Analyzer
</Typography.Text>
</Space>
</div>
<div></div>
</div>
<div></div>
</div>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
overflow-y: auto;
}

.public-output-analyzer-body {
padding: 12px;
overflow-y: auto;
width:100vw;
}

.output-analyzer-body2 {
height: 700px;
display: flex;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { promptType } from "../../../helpers/GetStaticData";

function OutputAnalyzerList() {
const [totalFields, setTotalFields] = useState(0);
const { listOfDocs, details } = useCustomToolStore();
const { listOfDocs, details, isPublicSource } = useCustomToolStore();

useEffect(() => {
const prompts = [...(details?.prompts || [])];
Expand All @@ -23,7 +23,13 @@ function OutputAnalyzerList() {
<div>
<OutputAnalyzerHeader />
</div>
<div className="output-analyzer-body">
<div
className={
isPublicSource
? "public-output-analyzer-body"
: "output-analyzer-body"
}
>
{listOfDocs.map((doc) => {
return (
<div className="output-analyzer-card-gap" key={doc?.document_id}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
InfoCircleFilled,
} from "@ant-design/icons";
import { useNavigate, useParams } from "react-router-dom";
import TabPane from "antd/es/tabs/TabPane";

import { useCustomToolStore } from "../../../store/custom-tool-store";
import { useSessionStore } from "../../../store/session-store";
Expand All @@ -22,7 +23,6 @@ import { useAlertStore } from "../../../store/alert-store";
import { useExceptionHandler } from "../../../hooks/useExceptionHandler";
import { TokenUsage } from "../token-usage/TokenUsage";
import { useTokenUsageStore } from "../../../store/token-usage-store";
import TabPane from "antd/es/tabs/TabPane";
import { ProfileInfoBar } from "../profile-info-bar/ProfileInfoBar";

let publicOutputsApi;
Expand Down Expand Up @@ -191,7 +191,8 @@ function OutputForDocModal({
}
let url = `/api/v1/unstract/${sessionDetails?.orgId}/prompt-studio/prompt-output/?tool_id=${details?.tool_id}&prompt_id=${promptId}&profile_manager=${profile}&is_single_pass_extract=${singlePassExtractMode}`;
if (isPublicSource) {
url = publicOutputsApi(id, promptId, profile, singlePassExtractMode);
url = publicOutputsApi(id, promptId, singlePassExtractMode);
url += `&profile_manager=${profile}`;
}
const requestOptions = {
method: "GET",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import PropTypes from "prop-types";
import { useEffect, useState } from "react";
import { useParams } from "react-router-dom";

import {
defaultTokenUsage,
Expand All @@ -18,7 +19,6 @@ import useTokenUsage from "../../../hooks/useTokenUsage";
import { useTokenUsageStore } from "../../../store/token-usage-store";
import { PromptCardItems } from "./PromptCardItems";
import "./PromptCard.css";
import { useParams } from "react-router-dom";

const EvalModal = null;
const getEvalMetrics = (param1, param2) => {
Expand Down Expand Up @@ -703,7 +703,6 @@ function PromptCard({
url = publicOutputsApi(
id,
promptDetails?.prompt_id,
selectedLlmProfileId,
singlePassExtractMode
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import {
Typography,
} from "antd";
import { useEffect, useRef, useState } from "react";
import { motion, AnimatePresence } from "framer-motion";
import CheckableTag from "antd/es/tag/CheckableTag";

import {
displayPromptResult,
Expand All @@ -36,8 +38,6 @@ import { EditableText } from "../editable-text/EditableText";
import { TokenUsage } from "../token-usage/TokenUsage";
import { useCustomToolStore } from "../../../store/custom-tool-store";
import { Header } from "./Header";
import CheckableTag from "antd/es/tag/CheckableTag";
import { motion, AnimatePresence } from "framer-motion";
import { OutputForIndex } from "./OutputForIndex";
import { useWindowDimensions } from "../../../hooks/useWindowDimensions";

Expand Down Expand Up @@ -313,7 +313,6 @@ function PromptCardItems({
type="link"
className="display-flex-align-center prompt-card-action-button"
onClick={() => setOpenOutputForDoc(true)}
disabled={isPublicSource}
>
<Space>
{isCoverageLoading ? (
Expand Down
6 changes: 6 additions & 0 deletions frontend/src/components/custom-tools/tool-ide/ToolIde.css
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,9 @@
.tool-ide-main-card .card-text {
font-size: 12px;
}

.public-tool-ide-body{
flex: 1 1;
overflow-y: hidden;
width: 100vw;
}
Loading

0 comments on commit e7bb9a2

Please sign in to comment.