diff options
author | geireann <geireann.lindfield@gmail.com> | 2023-03-02 11:44:04 -0500 |
---|---|---|
committer | geireann <geireann.lindfield@gmail.com> | 2023-03-02 11:44:04 -0500 |
commit | c6425a0469727305f76d00e3f8c545e04aad61cc (patch) | |
tree | ff8eb7d202f9f8c1305adcf2d4d5933c8c8dca63 /src/client/views/nodes/formattedText/FormattedTextBox.tsx | |
parent | 4a60851bd4d3495b2605863e3070c73129c9bc57 (diff) | |
parent | d34d212ea550a3c1ca16747fadeb9e69c936cb5d (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.tsx | 56 |
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) { |