Spaces:
Sleeping
Sleeping
File size: 5,554 Bytes
2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 ac85e40 2d8c0f7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
import streamlit as st
import requests
import base64
API_URL = "https://subashdvorak-brainstroming-fast-api.hf.space"
st.set_page_config(page_title="AI Business Ideation Platform", layout="wide")
st.subheader("Step 4: Story Boarding with brainstorming")
# Store persistent session state
session_defaults = {
'business_details': {},
'final_ideation': [],
'human_interactions': [],
'brainstorm_response': {},
'final_story': "",
'generated_image': "",
"selected_topics": [],
"selected_from_brainstorm": [],
"story": "",
"brainstorming_topics": [],
"topics_to_pass": [],
"base64_images": [],
"history": [],
"history_index": -1
}
for key, val in session_defaults.items():
if key not in st.session_state:
st.session_state[key] = val
# Upload images
uploaded_files = st.file_uploader("π Upload reference images (optional)", type=['png', 'jpg', 'jpeg'], accept_multiple_files=True)
if uploaded_files:
base64_images = []
with st.spinner("Encoding uploaded images..."):
for file in uploaded_files:
base64_images.append(base64.b64encode(file.read()).decode('utf-8'))
st.session_state.base64_images = base64_images
# Brainstorming API call
def call_brainstorming_api():
with st.spinner("Generating brainstorming topics and story..."):
response = requests.post(
f"{API_URL}/brainstorm",
params={"thread_id": "my-session"},
json={
"preferred_topics": st.session_state.topics_to_pass,
"image_base64_list": st.session_state.base64_images
}
)
if response.ok:
result_json = response.json()
data = result_json.get("response", {})
st.session_state.story = data.get("stories", [""])[-1]
st.session_state.brainstorming_topics = data.get("brainstroming_topics", [])
else:
st.error("β API call failed.")
st.write(response.text)
# Layout
col1, col2 = st.columns(2)
with col1:
st.subheader("π Story")
st.text_area("Generated Story", st.session_state.story, height=300)
with col2:
st.subheader("π§ Brainstorming Topics (Click to Select / Edit)")
if st.session_state.brainstorming_topics:
topics_dict = st.session_state.brainstorming_topics[-1]
selected = set(st.session_state.selected_from_brainstorm)
updated_topics = {}
for label, topic in topics_dict.items():
col_a, col_b = st.columns([0.1, 0.9])
with col_a:
checked = st.checkbox("", key=f"check_{label}", value=topic in selected)
with col_b:
edited_topic = st.text_input("", value=topic, key=f"edit_{label}")
if checked:
selected.add(edited_topic)
else:
selected.discard(edited_topic)
updated_topics[label] = edited_topic
st.session_state.topics_to_pass = list(selected)
st.session_state.selected_from_brainstorm = list(selected)
else:
st.info("No brainstorming topics yet. Click 'Generate Brainstorm' to start.")
# Brainstorm Button
if st.button("π Brainstorm"):
with st.spinner("Saving current state and generating new ideas..."):
# Truncate forward history
if st.session_state.history_index < len(st.session_state.history) - 1:
st.session_state.history = st.session_state.history[:st.session_state.history_index + 1]
# Save current state to history
current_state = {
"selected_topics": st.session_state.selected_topics.copy(),
"selected_from_brainstorm": st.session_state.selected_from_brainstorm.copy(),
"story": st.session_state.story,
"brainstorming_topics": st.session_state.brainstorming_topics.copy()
}
st.session_state.history.append(current_state)
st.session_state.history_index += 1
# Update current session state
st.session_state.selected_topics.extend(st.session_state.selected_from_brainstorm)
st.session_state.selected_from_brainstorm = []
call_brainstorming_api()
st.rerun()
# Back Button
if st.button("π Back"):
with st.spinner("Loading previous brainstorm..."):
if st.session_state.history_index > 0:
st.session_state.history_index -= 1
state = st.session_state.history[st.session_state.history_index]
st.session_state.selected_topics = state["selected_topics"]
st.session_state.selected_from_brainstorm = state["selected_from_brainstorm"]
st.session_state.story = state["story"]
st.session_state.brainstorming_topics = state["brainstorming_topics"]
st.rerun()
else:
st.warning("You're at the first step.")
# Forward Button
if st.button("π Forward"):
with st.spinner("Restoring next brainstorm..."):
if st.session_state.history_index < len(st.session_state.history) - 1:
st.session_state.history_index += 1
state = st.session_state.history[st.session_state.history_index]
st.session_state.selected_topics = state["selected_topics"]
st.session_state.selected_from_brainstorm = state["selected_from_brainstorm"]
st.session_state.story = state["story"]
st.session_state.brainstorming_topics = state["brainstorming_topics"]
st.rerun()
else:
st.warning("You're at the most recent step.")
st.markdown("---")
|