aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/formattedText/FormattedTextBox.tsx
diff options
context:
space:
mode:
authorgeireann <geireann.lindfield@gmail.com>2023-03-02 11:44:04 -0500
committergeireann <geireann.lindfield@gmail.com>2023-03-02 11:44:04 -0500
commitc6425a0469727305f76d00e3f8c545e04aad61cc (patch)
treeff8eb7d202f9f8c1305adcf2d4d5933c8c8dca63 /src/client/views/nodes/formattedText/FormattedTextBox.tsx
parent4a60851bd4d3495b2605863e3070c73129c9bc57 (diff)
parentd34d212ea550a3c1ca16747fadeb9e69c936cb5d (diff)
Merge branch 'pres-trail-sophie' of https://github.com/brown-dash/Dash-Web into pres-trail-sophie
Diffstat (limited to 'src/client/views/nodes/formattedText/FormattedTextBox.tsx')
-rw-r--r--src/client/views/nodes/formattedText/FormattedTextBox.tsx56
1 files changed, 42 insertions, 14 deletions
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index d4dffcb62..c6801bb79 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -64,8 +64,8 @@ import { SummaryView } from './SummaryView';
import applyDevTools = require('prosemirror-dev-tools');
import React = require('react');
import { Configuration, OpenAIApi } from 'openai';
-import { CollectionSubView, SlowLoadDocuments } from '../../collections/CollectionSubView';
import { Networking } from '../../../Network';
+import { gptAPICall, GPTCallType } from '../../../apis/gpt/Summarization';
const translateGoogleApi = require('translate-google-api');
export const GoogleRef = 'googleDocId';
@@ -174,6 +174,10 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
};
}
+ // State for GPT
+ @observable
+ private gptRes: string = '';
+
public static PasteOnLoad: ClipboardEvent | undefined;
public static SelectOnLoad = '';
public static DontSelectInitialText = false; // whether initial text should be selected or not
@@ -842,14 +846,46 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
const options = cm.findByDescription('Options...');
const optionItems = options && 'subitems' in options ? options.subitems : [];
optionItems.push({ description: `Generate Dall-E Image`, event: () => this.generateImage(), icon: 'star' });
+ optionItems.push({ description: `Ask GPT-3`, event: () => this.askGPT(), icon: 'lightbulb' });
optionItems.push({ description: !this.Document._singleLine ? 'Make Single Line' : 'Make Multi Line', event: () => (this.layoutDoc._singleLine = !this.layoutDoc._singleLine), icon: 'expand-arrows-alt' });
optionItems.push({ description: `${this.Document._autoHeight ? 'Lock' : 'Auto'} Height`, event: () => (this.layoutDoc._autoHeight = !this.layoutDoc._autoHeight), icon: 'plus' });
!options && cm.addItem({ description: 'Options...', subitems: optionItems, icon: 'eye' });
this._downX = this._downY = Number.NaN;
};
+ mockGPT = async (): Promise<string> => {
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {
+ resolve('Mock GPT Call.');
+ }, 2000);
+ });
+ };
+
+ animateRes = (resIndex: number) => {
+ if (resIndex < this.gptRes.length) {
+ this.dataDoc.text = (this.dataDoc.text as RichTextField)?.Text + this.gptRes[resIndex];
+ setTimeout(() => {
+ this.animateRes(resIndex + 1);
+ }, 20);
+ }
+ };
+
+ askGPT = action(async () => {
+ try {
+ let res = await gptAPICall((this.dataDoc.text as RichTextField)?.Text, GPTCallType.COMPLETION);
+ // let res = await this.mockGPT();
+ if (res) {
+ this.gptRes = res;
+ this.animateRes(0);
+ }
+ } catch (err) {
+ console.log(err);
+ this.dataDoc.text = (this.dataDoc.text as RichTextField)?.Text + 'Something went wrong';
+ }
+ });
+
generateImage = async () => {
- console.log("Generate image from text: ", (this.dataDoc.text as RichTextField)?.Text);
+ console.log('Generate image from text: ', (this.dataDoc.text as RichTextField)?.Text);
try {
const configuration = new Configuration({
apiKey: process.env.OPENAI_KEY,
@@ -858,13 +894,11 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
const response = await openai.createImage({
prompt: (this.dataDoc.text as RichTextField)?.Text,
n: 1,
- size: "1024x1024",
+ size: '1024x1024',
});
let image_url = response.data.data[0].url;
console.log(image_url);
if (image_url) {
- const batch = UndoManager.StartBatch('generate openAI image');
- // const loadingDoc = SlowLoadDocuments(image_url, , [], "", emptyFunction, NumCast(this.rootDoc.x) + NumCast(this.layoutDoc._width) + 10, NumCast(this.rootDoc.y), this.addDocument, this.props.Document._viewType === CollectionViewType.Freeform).then(batch.end);
const [{ accessPaths }] = await Networking.PostToServer('/uploadRemoteImage', { sources: [image_url] });
const source = Utils.prepend(accessPaths.agnostic.client);
const newDoc = Docs.Create.ImageDocument(source, {
@@ -872,11 +906,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
y: NumCast(this.rootDoc.y),
_height: 200,
_width: 200,
- // _nativeWidth: 200,
- // _nativeHeight: 200
})
- // Doc.GetProto(newDoc)["data-nativeHeight"] = 200;
- // Doc.GetProto(newDoc)["data-nativeWidth"] = 200;
if (DocListCast(Doc.MyOverlayDocs?.data).includes(this.rootDoc)) {
newDoc.overlayX = this.rootDoc.x;
newDoc.overlayY = NumCast(this.rootDoc.y) + NumCast(this.rootDoc._height);
@@ -884,16 +914,14 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
} else {
this.props.addDocument?.(newDoc);
}
-
- DocUtils.MakeLink({doc: this.rootDoc}, {doc: newDoc}, "Dall-E");
+ // Create link between prompt and image
+ DocUtils.MakeLink({doc: this.rootDoc}, {doc: newDoc}, "Image Prompt");
}
} catch (err) {
console.log(err);
return '';
}
-
- }
-
+ };
breakupDictation = () => {
if (this._editorView && this._recording) {