code-gen-assistant / app /streamlit_app.py
Rushabh147's picture
Initial deploy to HF Spaces (clean history, LFS for all binaries)
b89e6d6
Raw
History Blame Contribute Delete
2.25 kB
"""Streamlit chat UI - alternative front-end (Streamlit Community Cloud).
Run: streamlit run app/streamlit_app.py
"""
from __future__ import annotations
import sys
from pathlib import Path
import streamlit as st
sys.path.append(str(Path(__file__).resolve().parents[1]))
@st.cache_resource
def get_assistant():
from src.rag.generator import CodeAssistant
return CodeAssistant.from_config(with_index=True)
st.set_page_config(page_title="Code Generation Assistant", page_icon="</>")
st.title("Code Generation Assistant")
with st.sidebar:
mode = st.radio("Mode", ["rag", "baseline"], index=0)
use_repair = st.checkbox("Agentic repair (run + self-fix)", value=False)
assistant = get_assistant()
if "messages" not in st.session_state:
st.session_state.messages = []
for m in st.session_state.messages:
with st.chat_message(m["role"]):
st.markdown(m["content"])
if prompt := st.chat_input("Describe the function you want..."):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"), st.spinner("Generating..."):
if use_repair:
from src.agent.repair_loop import make_repair_generator, repair_loop
gen_fn = make_repair_generator(assistant)
trace = repair_loop(prompt, gen_fn, check_program_fn=lambda c: c, max_iters=3)
code = trace.final_code
st.code(code, language="python")
st.caption(f"Repair: {'passed' if trace.success else 'best effort'} in {trace.iterations} iters")
answer = code
else:
result = assistant.generate(prompt, mode=mode, return_sources=True)
if isinstance(result, tuple):
code, sources = result
st.code(code, language="python")
with st.expander("Retrieved examples"):
for s in sources:
st.write(f"({s['score']:.2f}) {s['docstring']}")
else:
code = result
st.code(code, language="python")
answer = code
st.session_state.messages.append({"role": "assistant", "content": f"```python\n{answer}\n```"})