Spaces:
Running
Running
Handle missing openai and zotero info
Browse files- app.py +5 -4
- functions.py +51 -3
app.py
CHANGED
@@ -3,7 +3,7 @@ import os
|
|
3 |
from dotenv import load_dotenv
|
4 |
from pathlib import Path
|
5 |
from functions import (
|
6 |
-
|
7 |
fetch_collections,
|
8 |
select_collection,
|
9 |
reset_collection,
|
@@ -15,7 +15,7 @@ from models import (
|
|
15 |
Messages,
|
16 |
)
|
17 |
|
18 |
-
load_dotenv()
|
19 |
|
20 |
css_style = Path('./style.css').read_text()
|
21 |
|
@@ -84,7 +84,7 @@ with gr.Blocks(css=css_style) as demo:
|
|
84 |
|
85 |
answer = gr.HTML(None, elem_id="answer")
|
86 |
|
87 |
-
openai_api_key.change(
|
88 |
answer], show_progress=False)
|
89 |
|
90 |
zot_api_key.change(
|
@@ -108,7 +108,8 @@ with gr.Blocks(css=css_style) as demo:
|
|
108 |
|
109 |
zot_fetch_col_btn.click(
|
110 |
fn=fetch_collections,
|
111 |
-
inputs=[
|
|
|
112 |
outputs=[zot, zot_collections, zot_selected_col,
|
113 |
zot_fetch_col_btn, zot_msg, messages, msg_board],
|
114 |
show_progress=False,
|
|
|
3 |
from dotenv import load_dotenv
|
4 |
from pathlib import Path
|
5 |
from functions import (
|
6 |
+
reset_open_ai,
|
7 |
fetch_collections,
|
8 |
select_collection,
|
9 |
reset_collection,
|
|
|
15 |
Messages,
|
16 |
)
|
17 |
|
18 |
+
# load_dotenv()
|
19 |
|
20 |
css_style = Path('./style.css').read_text()
|
21 |
|
|
|
84 |
|
85 |
answer = gr.HTML(None, elem_id="answer")
|
86 |
|
87 |
+
openai_api_key.change(reset_open_ai, inputs=[openai_api_key], outputs=[
|
88 |
answer], show_progress=False)
|
89 |
|
90 |
zot_api_key.change(
|
|
|
108 |
|
109 |
zot_fetch_col_btn.click(
|
110 |
fn=fetch_collections,
|
111 |
+
inputs=[openai_api_key, zot_library_id,
|
112 |
+
zot_library_type, zot_api_key, messages],
|
113 |
outputs=[zot, zot_collections, zot_selected_col,
|
114 |
zot_fetch_col_btn, zot_msg, messages, msg_board],
|
115 |
show_progress=False,
|
functions.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
import gradio as gr
|
|
|
2 |
import re
|
3 |
import requests
|
4 |
import tempfile
|
@@ -9,11 +10,58 @@ from lxml import html
|
|
9 |
from models import Icons, Message
|
10 |
|
11 |
|
12 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
return gr.HTML.update(value=None)
|
14 |
|
15 |
|
16 |
-
def fetch_collections(id, type, key, messages):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
zot = zotero.Zotero(int(id), type.lower(), key)
|
18 |
try:
|
19 |
collections = zot.collections_top()
|
@@ -47,7 +95,7 @@ def fetch_collections(id, type, key, messages):
|
|
47 |
|
48 |
def select_collection(collection, messages):
|
49 |
if collection is None:
|
50 |
-
return None, messages, gr.HTML.update()
|
51 |
collection_name = re.sub('\s\(\d+\)$', '', collection)
|
52 |
messages.set([Message(
|
53 |
Icons.OK, f"Selected collection: <span style='font-weight: bold'>{collection_name}</span>. Please type your question and hit \"Enter\".")])
|
|
|
1 |
import gradio as gr
|
2 |
+
import os
|
3 |
import re
|
4 |
import requests
|
5 |
import tempfile
|
|
|
10 |
from models import Icons, Message
|
11 |
|
12 |
|
13 |
+
def is_integer(string):
|
14 |
+
try:
|
15 |
+
int(string)
|
16 |
+
except ValueError:
|
17 |
+
return False
|
18 |
+
else:
|
19 |
+
return True
|
20 |
+
|
21 |
+
|
22 |
+
def reset_open_ai(openai_api_key):
|
23 |
+
os.environ['OPENAI_API_KEY'] = openai_api_key.strip()
|
24 |
return gr.HTML.update(value=None)
|
25 |
|
26 |
|
27 |
+
def fetch_collections(openai_api_key, id, type, key, messages):
|
28 |
+
if openai_api_key == '':
|
29 |
+
messages.append(
|
30 |
+
Message(Icons.ERR, f"Your Open API key is missing. Check out: <a href='https://platform.openai.com/overview' target='_blank'>https://platform.openai.com/overview</a>."))
|
31 |
+
return (
|
32 |
+
None,
|
33 |
+
[],
|
34 |
+
None,
|
35 |
+
gr.Button.update(visible=True),
|
36 |
+
gr.HTML.update(visible=True),
|
37 |
+
messages,
|
38 |
+
gr.HTML.update(value=str(messages)),
|
39 |
+
)
|
40 |
+
if key == '':
|
41 |
+
messages.append(
|
42 |
+
Message(Icons.ERR, f"Your Zotero API key is missing. Click <a href='https: // www.zotero.org/settings/keys/new' target='_blank'>here</a> to create a new one."))
|
43 |
+
return (
|
44 |
+
None,
|
45 |
+
[],
|
46 |
+
None,
|
47 |
+
gr.Button.update(visible=True),
|
48 |
+
gr.HTML.update(visible=True),
|
49 |
+
messages,
|
50 |
+
gr.HTML.update(value=str(messages)),
|
51 |
+
)
|
52 |
+
if not is_integer(id):
|
53 |
+
messages.append(
|
54 |
+
Message(Icons.ERR, f"Your Zotero ID should be an integer."))
|
55 |
+
return (
|
56 |
+
None,
|
57 |
+
[],
|
58 |
+
None,
|
59 |
+
gr.Button.update(visible=True),
|
60 |
+
gr.HTML.update(visible=True),
|
61 |
+
messages,
|
62 |
+
gr.HTML.update(value=str(messages)),
|
63 |
+
)
|
64 |
+
|
65 |
zot = zotero.Zotero(int(id), type.lower(), key)
|
66 |
try:
|
67 |
collections = zot.collections_top()
|
|
|
95 |
|
96 |
def select_collection(collection, messages):
|
97 |
if collection is None:
|
98 |
+
return None, messages, gr.HTML.update(), None
|
99 |
collection_name = re.sub('\s\(\d+\)$', '', collection)
|
100 |
messages.set([Message(
|
101 |
Icons.OK, f"Selected collection: <span style='font-weight: bold'>{collection_name}</span>. Please type your question and hit \"Enter\".")])
|