Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import json | |
| import uuid | |
| import requests | |
| def convert_inputs(user_input, var): | |
| if var == "__random__": | |
| return [f"session_{uuid.uuid4()}" for _ in user_input] | |
| if not isinstance(var, list): | |
| var = [var] | |
| var += var*(len(user_input)//len(var) + 1) | |
| diff = len(var) - len(user_input) | |
| var = var[:-diff] | |
| return var | |
| def convert_output_vars(user_input, var): | |
| if isinstance(var, str): | |
| var = [[var]] | |
| elif not isinstance(var[0], list): | |
| var = [var] | |
| var += var*(len(user_input)//len(var) + 1) | |
| diff = len(var) - len(user_input) | |
| var = var[:-diff] | |
| return var | |
| def process_inputs(user_input_json, session_id_json, project_id, chat_url, update_vars_json, output_vars_json, token): | |
| # Convert JSON strings into Python lists | |
| user_input = json.loads(user_input_json) | |
| session_id = json.loads(session_id_json) | |
| # project_id = json.loads(project_id_json) | |
| update_vars = json.loads(update_vars_json) | |
| output_vars = json.loads(output_vars_json) | |
| session_id = convert_inputs(user_input,session_id) | |
| # project_id = convert_inputs(user_input,project_id) | |
| update_vars = convert_inputs(user_input,update_vars) | |
| output_vars = convert_output_vars(user_input,output_vars) | |
| unique_output = set() | |
| for x in output_vars: | |
| for y in x: | |
| unique_output.add(y) | |
| dict_output = { | |
| uni: [[] for _ in user_input] for uni in unique_output | |
| } | |
| # --- Your function logic here --- | |
| df = pd.DataFrame({ | |
| "user_input": user_input, | |
| "session_id": session_id, | |
| "project_id": project_id, | |
| "chat_url": [chat_url] * len(user_input), | |
| "update_variables": update_vars, | |
| "output_variables": output_vars, | |
| "token":token, | |
| } | dict_output | |
| ) | |
| # "answer": [[] * len(x) if isinstance(x, list) else [] for x in user_input] | |
| # }) | |
| return df | |
| def run_chat(chat_url, project_id, session_id, user_input, update_variables, output_variables, token): | |
| req = requests.post( | |
| chat_url, | |
| json={ | |
| "project_id": project_id, | |
| "session_id": session_id, | |
| "user_input": user_input, | |
| "update_variables": update_variables, | |
| "output_variables": output_variables | |
| }, | |
| headers={"Authorization" : f"Bearer {token}"} | |
| ) | |
| print("[REQ CONTENT]", req.content) | |
| out = req.json()["data"] | |
| print("[OUT]",out.get("results")) | |
| return out | |
| #return {out_var:out[out_var] for out_var in output_variables} | |
| def run_process(df): | |
| for index, row in df.iterrows(): | |
| if isinstance(row["user_input"], list): | |
| answer = [] | |
| for user_input in row["user_input"]: | |
| answer.append( | |
| run_chat( | |
| row["chat_url"], | |
| row["project_id"],#: project_id, | |
| row["session_id"],#: session_id, | |
| user_input,#: user_input, | |
| row["update_variables"],#: update_variables, | |
| row["output_variables"], | |
| row["token"] | |
| ) | |
| ) | |
| else: | |
| answer = run_chat( | |
| row["chat_url"], | |
| row["project_id"],#: project_id, | |
| row["session_id"],#: session_id, | |
| row["user_input"],#: user_input, | |
| row["update_variables"],#: update_variables, | |
| row["output_variables"], | |
| row["token"] | |
| ) | |
| if isinstance(answer, list): | |
| for ans in answer: | |
| for key,val in ans.items(): | |
| df.loc[index, key].append(val) | |
| else: | |
| for key,ans in answer.items(): | |
| df.loc[index, key] = ans | |
| csv_path = "output.csv" | |
| df.to_csv(csv_path, index=False) | |
| return csv_path, df | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## π¬ JSON Input β DataFrame β CSV Export") | |
| user_input = gr.Code(label="user_input (list[str] or list[list[str]])", language="json", value='["Hello", ["Hi", "How are you?"]]') | |
| session_id = gr.Code(label="""session_id (list[str] or str or "__random__")""", language="json", value='"__random__"') | |
| # project_id = gr.Code(label="project_id (list[str])", language="json", value='["p1", "p2"]') | |
| project_id = gr.Textbox(label="Project ID", value="[project_id]") | |
| chat_url = gr.Textbox(label="CHAT URL", value="https://example.com/chat") | |
| token = gr.Textbox(label="TOKEN", value="[token]") | |
| update_vars = gr.Code(label="update_variables (list[dict] or dict)", language="json", value='{}') | |
| output_vars = gr.Code(label="output_variables (list[list[str]] or list[str])", language="json", value='["results", "category_list"]') | |
| run_btn = gr.Button("Run Function") | |
| df_output = gr.Dataframe(label="Output DataFrame", interactive=True) | |
| process_btn = gr.Button("Process") | |
| file_output = gr.File(label="Download CSV") | |
| process_btn.click( | |
| fn=run_process, | |
| inputs=df_output, | |
| outputs=[file_output, df_output] | |
| ) | |
| run_btn.click( | |
| fn=process_inputs, | |
| inputs=[user_input, session_id, project_id, chat_url, update_vars, output_vars, token], | |
| outputs=df_output | |
| ) | |
| demo.launch() | |