|
import streamlit as st |
|
import os |
|
import glob |
|
import re |
|
import base64 |
|
import pytz |
|
from datetime import datetime |
|
from transformers.agents import CodeAgent, ReactCodeAgent, ReactJsonAgent, load_tool |
|
|
|
|
|
st.set_page_config(page_title="π³β¨ AI Knowledge Tree Builder π οΈπ€", page_icon="π³", layout="wide") |
|
st.sidebar.markdown(""" |
|
π³π€ **AI Knowledge Tree Builder** |
|
1. π± Universal access |
|
2. β‘ Rapid builds (<2min) |
|
3. π Linked AI sources |
|
4. π― Lean core |
|
5. π§ Shareable memory |
|
6. π€ Personalized |
|
7. π¦ Cloneable brevity |
|
""") |
|
|
|
|
|
tools = [load_tool("text-to-speech"), load_tool("image_question_answering")] |
|
agents = { |
|
"CodeCrafter": CodeAgent(tools=tools, system_prompt="Craft code like a pro! π₯οΈ"), |
|
"StepSage": ReactCodeAgent(tools=tools, system_prompt="Step-by-step wisdom! π§ "), |
|
"JsonJugger": ReactJsonAgent(tools=tools, system_prompt="JSON-powered antics! π€‘"), |
|
"OutlineOracle": ReactCodeAgent(tools=tools, system_prompt="Outline everything! π"), |
|
"ToolTitan": CodeAgent(tools=tools, system_prompt="List tools with swagger! π§"), |
|
"SpecSpinner": ReactJsonAgent(tools=tools, system_prompt="Spin specs with style! π"), |
|
"ImageImp": CodeAgent(tools=tools, system_prompt="Dream up image prompts! π¨"), |
|
"VisualVortex": ReactCodeAgent(tools=tools, system_prompt="Generate visuals! πΌοΈ"), |
|
"GlossGuru": ReactJsonAgent(tools=tools, system_prompt="Define terms with pizzazz! π"), |
|
} |
|
|
|
|
|
moe_prompts = { |
|
"Create a python streamlit app.py...": "CodeCrafter", |
|
"Create a python gradio app.py...": "CodeCrafter", |
|
"Create a mermaid model...": "OutlineOracle", |
|
"Create a top three list of tools...": "ToolTitan", |
|
"Create a specification in markdown...": "SpecSpinner", |
|
"Create an image generation prompt...": "ImageImp", |
|
"Generate an image which describes...": "VisualVortex", |
|
"List top ten glossary terms...": "GlossGuru", |
|
"": "StepSage" |
|
} |
|
|
|
|
|
if 'selected_file' not in st.session_state: |
|
st.session_state.selected_file = None |
|
if 'view_mode' not in st.session_state: |
|
st.session_state.view_mode = 'view' |
|
if 'files' not in st.session_state: |
|
st.session_state.files = [] |
|
|
|
|
|
moe_options = list(moe_prompts.keys()) |
|
selected_moe = st.selectbox("Pick an MoE Adventure! π²", moe_options, index=0, key="selected_moe") |
|
|
|
|
|
def sanitize_filename(text): |
|
return re.sub(r'[^\w\s-]', ' ', text.strip())[:50] |
|
|
|
def generate_timestamp_filename(query): |
|
central = pytz.timezone('US/Central') |
|
now = datetime.now(central) |
|
return f"{now.strftime('%I%M%p %m%d%Y')} ({sanitize_filename(query)}).md" |
|
|
|
def save_ai_interaction(query, result, is_rerun=False): |
|
filename = generate_timestamp_filename(query) |
|
content = f"# {'Rerun' if is_rerun else 'Query'}: {query}\n\n## AI Response\n{result}" |
|
with open(filename, 'w', encoding='utf-8') as f: |
|
f.write(content) |
|
return filename |
|
|
|
def run_agent(task, agent_name): |
|
agent = agents[agent_name] |
|
if isinstance(agent, CodeAgent): |
|
return agent.run(task, return_generated_code=True) |
|
return agent.run(task) |
|
|
|
|
|
def main(): |
|
st.markdown("### π³ AI Knowledge Tree Builder π§ π± Letβs Grow Some Smarts!") |
|
query = st.text_input("Ask Away! π€", placeholder="E.g., 'Explain transformers!'") |
|
|
|
if query: |
|
agent_name = moe_prompts[selected_moe] |
|
try: |
|
result = run_agent(f"{selected_moe} {query}" if selected_moe else query, agent_name) |
|
st.markdown(f"π {agent_name} says: {result}") |
|
saved_file = save_ai_interaction(query, result) |
|
st.success(f"Saved to {saved_file}") |
|
st.session_state.selected_file = saved_file |
|
except Exception as e: |
|
st.error(f"π± Oops! {e}") |
|
|
|
|
|
st.sidebar.title("π Files") |
|
md_files = sorted([f for f in glob.glob("*.md") if f.lower() != 'readme.md']) |
|
for file in md_files: |
|
st.sidebar.write(file) |
|
if st.sidebar.button(f"View {file}", key=f"v_{file}"): |
|
st.session_state.selected_file = file |
|
if st.session_state.selected_file: |
|
with open(st.session_state.selected_file, 'r') as f: |
|
st.markdown(f.read()) |
|
|
|
if __name__ == "__main__": |
|
main() |