Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -13,7 +13,7 @@ import xml.etree.ElementTree as ET
|
|
13 |
load_dotenv()
|
14 |
|
15 |
# --- DEMO MODE TOGGLE ---
|
16 |
-
# If True,
|
17 |
DEMO_MODE = True
|
18 |
|
19 |
from model_logic import (
|
@@ -189,11 +189,6 @@ def process_user_interaction_gradio(user_input: str, provider_name: str, model_d
|
|
189 |
yield "final_response_and_insights", {"response": final_bot_text, "insights_used": parsed_initial_insights_list}
|
190 |
|
191 |
def perform_post_interaction_learning(user_input: str, bot_response: str, provider: str, model_disp_name: str, insights_reflected: list[dict], api_key_override: str = None):
|
192 |
-
# --- DEMO MODE CHANGE ---
|
193 |
-
if DEMO_MODE:
|
194 |
-
logger.info("POST_INTERACTION_LEARNING: Skipping database writes in Demo Mode.")
|
195 |
-
return
|
196 |
-
|
197 |
task_id = os.urandom(4).hex()
|
198 |
logger.info(f"POST_INTERACTION_LEARNING [{task_id}]: START User='{user_input[:40]}...', Bot='{bot_response[:40]}...'")
|
199 |
learning_start_time = time.time()
|
@@ -363,15 +358,6 @@ Combine all findings into a single, valid XML structure as specified in the syst
|
|
363 |
|
364 |
|
365 |
def handle_gradio_chat_submit(user_msg_txt: str, gr_hist_list: list, sel_prov_name: str, sel_model_disp_name: str, ui_api_key: str|None, cust_sys_prompt: str):
|
366 |
-
# --- DEMO MODE CHANGE ---
|
367 |
-
if DEMO_MODE:
|
368 |
-
sel_prov_name = "groq"
|
369 |
-
sel_model_disp_name = get_default_model_display_name_for_provider("groq")
|
370 |
-
if not sel_model_disp_name:
|
371 |
-
# Fallback in case the function fails
|
372 |
-
sel_model_disp_name = "Llama3 8B 8192"
|
373 |
-
logger.info(f"DEMO MODE: Forcing model to {sel_prov_name}/{sel_model_disp_name}")
|
374 |
-
|
375 |
global current_chat_session_history
|
376 |
cleared_input, updated_gr_hist, status_txt = "", list(gr_hist_list), "Initializing..."
|
377 |
# Initialize all potential output components with default/current values
|
@@ -498,8 +484,6 @@ def handle_gradio_chat_submit(user_msg_txt: str, gr_hist_list: list, sel_prov_na
|
|
498 |
api_key_override=ui_api_key.strip() if ui_api_key else None
|
499 |
)
|
500 |
status_txt = "Response & Learning Complete."
|
501 |
-
if DEMO_MODE:
|
502 |
-
status_txt = "Response Complete. (Learning disabled in Demo Mode)"
|
503 |
except Exception as e_learn:
|
504 |
logger.error(f"Error during post-interaction learning: {e_learn}", exc_info=True)
|
505 |
status_txt = "Response complete. Error during learning."
|
@@ -706,9 +690,6 @@ def ui_download_rules_action_fn():
|
|
706 |
return gr.DownloadButton(value=None, interactive=False, label="Error")
|
707 |
|
708 |
def ui_upload_rules_action_fn(uploaded_file_obj, progress=gr.Progress()):
|
709 |
-
# --- DEMO MODE CHANGE ---
|
710 |
-
if DEMO_MODE:
|
711 |
-
return "Uploading is disabled in Demo Mode."
|
712 |
if not uploaded_file_obj: return "No file provided for rules upload."
|
713 |
try:
|
714 |
with open(uploaded_file_obj.name, 'r', encoding='utf-8') as f: content = f.read()
|
@@ -785,9 +766,6 @@ def ui_download_memories_action_fn():
|
|
785 |
return gr.DownloadButton(value=None, interactive=False, label="Error")
|
786 |
|
787 |
def ui_upload_memories_action_fn(uploaded_file_obj, progress=gr.Progress()):
|
788 |
-
# --- DEMO MODE CHANGE ---
|
789 |
-
if DEMO_MODE:
|
790 |
-
return "Uploading is disabled in Demo Mode."
|
791 |
if not uploaded_file_obj: return "No file provided for memories upload."
|
792 |
try:
|
793 |
with open(uploaded_file_obj.name, 'r', encoding='utf-8') as f: content = f.read()
|
@@ -846,9 +824,6 @@ def ui_upload_memories_action_fn(uploaded_file_obj, progress=gr.Progress()):
|
|
846 |
logger.info(msg); return msg
|
847 |
|
848 |
def save_edited_rules_action_fn(edited_rules_text: str, progress=gr.Progress()):
|
849 |
-
# --- DEMO MODE CHANGE ---
|
850 |
-
if DEMO_MODE:
|
851 |
-
return "Saving is disabled in Demo Mode."
|
852 |
if not edited_rules_text.strip():
|
853 |
return "No rules text to save."
|
854 |
|
@@ -890,9 +865,8 @@ def app_load_fn():
|
|
890 |
mems_added, mems_format_errors, mems_save_errors = load_memories_from_file(LOAD_MEMORIES_FILE)
|
891 |
mems_load_msg = f"Memories: Added {mems_added}, Format Errors {mems_format_errors}, Save Errors {mems_save_errors} from {LOAD_MEMORIES_FILE or 'None'}."
|
892 |
logger.info(mems_load_msg)
|
893 |
-
|
894 |
-
|
895 |
-
final_status = f"{status_prefix}. {rules_load_msg} {mems_load_msg} Ready."
|
896 |
|
897 |
# Initial population of all relevant UI components AFTER loading
|
898 |
rules_on_load = ui_refresh_rules_display_fn()
|
@@ -923,8 +897,8 @@ with gr.Blocks(
|
|
923 |
"""
|
924 |
) as demo:
|
925 |
gr.Markdown(
|
926 |
-
|
927 |
-
# 🤖 AI Research Agent
|
928 |
Your intelligent assistant for research and knowledge management
|
929 |
""",
|
930 |
elem_classes=["header"]
|
@@ -962,24 +936,16 @@ with gr.Blocks(
|
|
962 |
)
|
963 |
available_providers = get_available_providers()
|
964 |
default_provider = available_providers[0] if available_providers else None
|
965 |
-
|
966 |
-
# --- DEMO MODE CHANGES to Dropdowns ---
|
967 |
prov_sel_dd = gr.Dropdown(
|
968 |
-
label="AI Provider",
|
969 |
-
|
970 |
-
value="groq" if DEMO_MODE else default_provider,
|
971 |
-
interactive=not DEMO_MODE
|
972 |
)
|
973 |
-
|
974 |
-
initial_provider = prov_sel_dd.value
|
975 |
-
initial_models = get_model_display_names_for_provider(initial_provider) if initial_provider else []
|
976 |
-
initial_model_val = get_default_model_display_name_for_provider(initial_provider) if initial_provider else None
|
977 |
-
|
978 |
model_sel_dd = gr.Dropdown(
|
979 |
label="AI Model",
|
980 |
-
choices=
|
981 |
-
value=
|
982 |
-
interactive=
|
983 |
)
|
984 |
with gr.Group():
|
985 |
gr.Markdown("### System Prompt")
|
@@ -1024,17 +990,14 @@ with gr.Blocks(
|
|
1024 |
interactive=True
|
1025 |
)
|
1026 |
gr.Markdown("To edit rules, modify the text above and click 'Save Edited Text', or upload a new file.")
|
1027 |
-
|
1028 |
-
save_edited_rules_btn = gr.Button("💾 Save Edited Text", variant="primary", interactive=not DEMO_MODE)
|
1029 |
with gr.Row(variant="compact"):
|
1030 |
dl_rules_btn = gr.DownloadButton("⬇️ Download Rules", value=None)
|
1031 |
-
# --- DEMO MODE CHANGE ---
|
1032 |
-
clear_rules_btn = gr.Button("🗑️ Clear All Rules", variant="stop",
|
1033 |
-
# --- DEMO MODE CHANGE ---
|
1034 |
upload_rules_fobj = gr.File(
|
1035 |
label="Upload Rules File (.txt with '---' separators, or .jsonl of rule strings)",
|
1036 |
-
file_types=[".txt", ".jsonl"]
|
1037 |
-
interactive=not DEMO_MODE
|
1038 |
)
|
1039 |
rules_stat_tb = gr.Textbox(
|
1040 |
label="Rules Status", interactive=False, lines=1, elem_classes=["status-text"]
|
@@ -1048,13 +1011,11 @@ with gr.Blocks(
|
|
1048 |
gr.Markdown("To add memories, upload a .jsonl or .json file.")
|
1049 |
with gr.Row(variant="compact"):
|
1050 |
dl_mems_btn = gr.DownloadButton("⬇️ Download Memories", value=None)
|
1051 |
-
# --- DEMO MODE CHANGE ---
|
1052 |
-
clear_mems_btn = gr.Button("🗑️ Clear All Memories", variant="stop",
|
1053 |
-
# --- DEMO MODE CHANGE ---
|
1054 |
upload_mems_fobj = gr.File(
|
1055 |
label="Upload Memories File (.jsonl of memory objects, or .json array of objects)",
|
1056 |
-
file_types=[".jsonl", ".json"]
|
1057 |
-
interactive=not DEMO_MODE
|
1058 |
)
|
1059 |
mems_stat_tb = gr.Textbox(
|
1060 |
label="Memories Status", interactive=False, lines=1, elem_classes=["status-text"]
|
@@ -1094,9 +1055,8 @@ with gr.Blocks(
|
|
1094 |
show_progress="full"
|
1095 |
).then(fn=ui_refresh_rules_display_fn, outputs=rules_disp_ta, show_progress=False) # Refresh display after upload
|
1096 |
|
1097 |
-
# --- DEMO MODE CHANGE ---
|
1098 |
clear_rules_btn.click(
|
1099 |
-
fn=lambda:
|
1100 |
outputs=rules_stat_tb,
|
1101 |
show_progress=False
|
1102 |
).then(fn=ui_refresh_rules_display_fn, outputs=rules_disp_ta, show_progress=False) # Refresh display after clear
|
@@ -1111,9 +1071,8 @@ with gr.Blocks(
|
|
1111 |
show_progress="full"
|
1112 |
).then(fn=ui_refresh_memories_display_fn, outputs=mems_disp_json, show_progress=False) # Refresh display after upload
|
1113 |
|
1114 |
-
# --- DEMO MODE CHANGE ---
|
1115 |
clear_mems_btn.click(
|
1116 |
-
fn=lambda:
|
1117 |
outputs=mems_stat_tb,
|
1118 |
show_progress=False
|
1119 |
).then(fn=ui_refresh_memories_display_fn, outputs=mems_disp_json, show_progress=False) # Refresh display after clear
|
|
|
13 |
load_dotenv()
|
14 |
|
15 |
# --- DEMO MODE TOGGLE ---
|
16 |
+
# If True, prevents the "Clear All" buttons from being displayed in the UI.
|
17 |
DEMO_MODE = True
|
18 |
|
19 |
from model_logic import (
|
|
|
189 |
yield "final_response_and_insights", {"response": final_bot_text, "insights_used": parsed_initial_insights_list}
|
190 |
|
191 |
def perform_post_interaction_learning(user_input: str, bot_response: str, provider: str, model_disp_name: str, insights_reflected: list[dict], api_key_override: str = None):
|
|
|
|
|
|
|
|
|
|
|
192 |
task_id = os.urandom(4).hex()
|
193 |
logger.info(f"POST_INTERACTION_LEARNING [{task_id}]: START User='{user_input[:40]}...', Bot='{bot_response[:40]}...'")
|
194 |
learning_start_time = time.time()
|
|
|
358 |
|
359 |
|
360 |
def handle_gradio_chat_submit(user_msg_txt: str, gr_hist_list: list, sel_prov_name: str, sel_model_disp_name: str, ui_api_key: str|None, cust_sys_prompt: str):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
361 |
global current_chat_session_history
|
362 |
cleared_input, updated_gr_hist, status_txt = "", list(gr_hist_list), "Initializing..."
|
363 |
# Initialize all potential output components with default/current values
|
|
|
484 |
api_key_override=ui_api_key.strip() if ui_api_key else None
|
485 |
)
|
486 |
status_txt = "Response & Learning Complete."
|
|
|
|
|
487 |
except Exception as e_learn:
|
488 |
logger.error(f"Error during post-interaction learning: {e_learn}", exc_info=True)
|
489 |
status_txt = "Response complete. Error during learning."
|
|
|
690 |
return gr.DownloadButton(value=None, interactive=False, label="Error")
|
691 |
|
692 |
def ui_upload_rules_action_fn(uploaded_file_obj, progress=gr.Progress()):
|
|
|
|
|
|
|
693 |
if not uploaded_file_obj: return "No file provided for rules upload."
|
694 |
try:
|
695 |
with open(uploaded_file_obj.name, 'r', encoding='utf-8') as f: content = f.read()
|
|
|
766 |
return gr.DownloadButton(value=None, interactive=False, label="Error")
|
767 |
|
768 |
def ui_upload_memories_action_fn(uploaded_file_obj, progress=gr.Progress()):
|
|
|
|
|
|
|
769 |
if not uploaded_file_obj: return "No file provided for memories upload."
|
770 |
try:
|
771 |
with open(uploaded_file_obj.name, 'r', encoding='utf-8') as f: content = f.read()
|
|
|
824 |
logger.info(msg); return msg
|
825 |
|
826 |
def save_edited_rules_action_fn(edited_rules_text: str, progress=gr.Progress()):
|
|
|
|
|
|
|
827 |
if not edited_rules_text.strip():
|
828 |
return "No rules text to save."
|
829 |
|
|
|
865 |
mems_added, mems_format_errors, mems_save_errors = load_memories_from_file(LOAD_MEMORIES_FILE)
|
866 |
mems_load_msg = f"Memories: Added {mems_added}, Format Errors {mems_format_errors}, Save Errors {mems_save_errors} from {LOAD_MEMORIES_FILE or 'None'}."
|
867 |
logger.info(mems_load_msg)
|
868 |
+
|
869 |
+
final_status = f"AI Systems Initialized. {rules_load_msg} {mems_load_msg} Ready."
|
|
|
870 |
|
871 |
# Initial population of all relevant UI components AFTER loading
|
872 |
rules_on_load = ui_refresh_rules_display_fn()
|
|
|
897 |
"""
|
898 |
) as demo:
|
899 |
gr.Markdown(
|
900 |
+
"""
|
901 |
+
# 🤖 AI Research Agent
|
902 |
Your intelligent assistant for research and knowledge management
|
903 |
""",
|
904 |
elem_classes=["header"]
|
|
|
936 |
)
|
937 |
available_providers = get_available_providers()
|
938 |
default_provider = available_providers[0] if available_providers else None
|
|
|
|
|
939 |
prov_sel_dd = gr.Dropdown(
|
940 |
+
label="AI Provider", choices=available_providers,
|
941 |
+
value=default_provider, interactive=True
|
|
|
|
|
942 |
)
|
943 |
+
default_model_display = get_default_model_display_name_for_provider(default_provider) if default_provider else None
|
|
|
|
|
|
|
|
|
944 |
model_sel_dd = gr.Dropdown(
|
945 |
label="AI Model",
|
946 |
+
choices=get_model_display_names_for_provider(default_provider) if default_provider else [],
|
947 |
+
value=default_model_display,
|
948 |
+
interactive=True
|
949 |
)
|
950 |
with gr.Group():
|
951 |
gr.Markdown("### System Prompt")
|
|
|
990 |
interactive=True
|
991 |
)
|
992 |
gr.Markdown("To edit rules, modify the text above and click 'Save Edited Text', or upload a new file.")
|
993 |
+
save_edited_rules_btn = gr.Button("💾 Save Edited Text", variant="primary")
|
|
|
994 |
with gr.Row(variant="compact"):
|
995 |
dl_rules_btn = gr.DownloadButton("⬇️ Download Rules", value=None)
|
996 |
+
# --- DEMO MODE CHANGE: Button is hidden in demo mode ---
|
997 |
+
clear_rules_btn = gr.Button("🗑️ Clear All Rules", variant="stop", visible=not DEMO_MODE)
|
|
|
998 |
upload_rules_fobj = gr.File(
|
999 |
label="Upload Rules File (.txt with '---' separators, or .jsonl of rule strings)",
|
1000 |
+
file_types=[".txt", ".jsonl"]
|
|
|
1001 |
)
|
1002 |
rules_stat_tb = gr.Textbox(
|
1003 |
label="Rules Status", interactive=False, lines=1, elem_classes=["status-text"]
|
|
|
1011 |
gr.Markdown("To add memories, upload a .jsonl or .json file.")
|
1012 |
with gr.Row(variant="compact"):
|
1013 |
dl_mems_btn = gr.DownloadButton("⬇️ Download Memories", value=None)
|
1014 |
+
# --- DEMO MODE CHANGE: Button is hidden in demo mode ---
|
1015 |
+
clear_mems_btn = gr.Button("🗑️ Clear All Memories", variant="stop", visible=not DEMO_MODE)
|
|
|
1016 |
upload_mems_fobj = gr.File(
|
1017 |
label="Upload Memories File (.jsonl of memory objects, or .json array of objects)",
|
1018 |
+
file_types=[".jsonl", ".json"]
|
|
|
1019 |
)
|
1020 |
mems_stat_tb = gr.Textbox(
|
1021 |
label="Memories Status", interactive=False, lines=1, elem_classes=["status-text"]
|
|
|
1055 |
show_progress="full"
|
1056 |
).then(fn=ui_refresh_rules_display_fn, outputs=rules_disp_ta, show_progress=False) # Refresh display after upload
|
1057 |
|
|
|
1058 |
clear_rules_btn.click(
|
1059 |
+
fn=lambda: ("All rules cleared." if clear_all_rules_data_backend() else "Error clearing rules."),
|
1060 |
outputs=rules_stat_tb,
|
1061 |
show_progress=False
|
1062 |
).then(fn=ui_refresh_rules_display_fn, outputs=rules_disp_ta, show_progress=False) # Refresh display after clear
|
|
|
1071 |
show_progress="full"
|
1072 |
).then(fn=ui_refresh_memories_display_fn, outputs=mems_disp_json, show_progress=False) # Refresh display after upload
|
1073 |
|
|
|
1074 |
clear_mems_btn.click(
|
1075 |
+
fn=lambda: ("All memories cleared." if clear_all_memory_data_backend() else "Error clearing memories."),
|
1076 |
outputs=mems_stat_tb,
|
1077 |
show_progress=False
|
1078 |
).then(fn=ui_refresh_memories_display_fn, outputs=mems_disp_json, show_progress=False) # Refresh display after clear
|