import streamlit as st import pickle import time from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # ============================================================================ # Model Logic (Strictly Unchanged) # ============================================================================ class CodePaulLite: def __init__(self, dataset): self.dataset = dataset self.keys = list(dataset.keys()) self.vectorizer = TfidfVectorizer(stop_words="english") self.matrix = self.vectorizer.fit_transform(self.keys) def search_registries(self, query, top_k=10): if not query or not query.strip(): return [] q_vec = self.vectorizer.transform([query.strip()]) sims = cosine_similarity(q_vec, self.matrix).flatten() top_idx = sims.argsort()[::-1][:top_k] return [{"key": self.keys[i], "value": self.dataset[self.keys[i]], "score": float(sims[i])} for i in top_idx] @st.cache_resource(show_spinner=False) def load_model(): with open("codepaul_lite_100k.pkl", "rb") as f: return pickle.load(f) def set_query(q): st.session_state.query_widget = q # ============================================================================ # AI Copilot Assets (Logo SVG) # ============================================================================ ai_logo_svg = """ """ # ============================================================================ # UI Styling - AI Copilot Edition # ============================================================================ st.set_page_config(page_title="CodePaul AI Copilot", page_icon="✨", layout="wide") st.markdown(f""" """, unsafe_allow_html=True) # ============================================================================ # Main UI # ============================================================================ st.markdown(f"
{ai_logo_svg}
", unsafe_allow_html=True) st.markdown("

CodePaul Copilot

", unsafe_allow_html=True) st.markdown("

Semantic code intelligence at your service.

", unsafe_allow_html=True) try: model = load_model() except: st.error("Model Error.") st.stop() # Search c1, c2, c3 = st.columns([1, 8, 1]) with c2: query = st.text_input("AI Search", placeholder="Ask me for any algorithm...", label_visibility="collapsed", key="query_widget") if not query: st.markdown("

Quick assistance:

", unsafe_allow_html=True) chips = ["Graph Theory", "Optimization", "Sorting", "Neural Networks", "Data Structures"] cols = st.columns(len(chips)) for i, chip in enumerate(chips): with cols[i]: st.button(chip, key=f"chip_{i}", on_click=set_query, args=(chip,), use_container_width=True) # Results if query and query.strip(): results = model.search_registries(query.strip(), top_k=st.sidebar.slider("Results", 1, 20, 5)) if results: for rank, r in enumerate(results, 1): # Problème du
corrigé ici : on ferme proprement chaque bloc is_best = (rank == 1) display_key = r['key'][:120] + "..." if len(r['key']) > 120 else r['key'] badge_html = "✦ Top Result" if is_best else "" st.markdown(f"""
{display_key} {badge_html}
""", unsafe_allow_html=True) st.code(r["value"], language="python") if len(r["key"]) > 120: with st.expander("Explore Logic Details"): st.text(r["key"]) else: st.info("I couldn't find a direct match. Try rephrasing your request.") # Sidebar minimaliste with st.sidebar: st.markdown("### Settings") st.caption("AI Search Parameters") st.divider() st.info("This copilot uses vector embeddings to find the most relevant code node.")