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"
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