File size: 3,306 Bytes
d524d86
abf0fa3
d524d86
ae09cce
abf0fa3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import requests

API_URL = "https://missaoui-shopvite-fastapi.hf.space/"  # ← changer en prod

st.set_page_config(page_title="ShopVite Assistant", page_icon="πŸ›’")
st.title("πŸ›’ ShopVite β€” Assistant FAQ")
st.caption("Posez vos questions sur nos produits, livraisons et retours.")

# ── VΓ©rification santΓ© API ────────────────────────────────────────────────────
@st.cache_data(ttl=30)
def check_health():
    try:
        r = requests.get(f"{API_URL}/health", timeout=5)
        return r.status_code == 200
    except Exception:
        return False

if not check_health():
    st.error("⚠️ API indisponible. Vérifiez que `api.py` est bien lancé.")
    st.stop()

# ── Historique ────────────────────────────────────────────────────────────────
if "messages" not in st.session_state:
    st.session_state.messages = []

for msg in st.session_state.messages:
    with st.chat_message(msg["role"]):
        st.markdown(msg["content"])
        if msg.get("sources"):
            with st.expander("πŸ“„ Sources"):
                for s in msg["sources"]:
                    st.markdown(f"- `{s}`")

# ── Input ─────────────────────────────────────────────────────────────────────
CONFIDENCE_BADGE = {
    "high":           "🟒 Confiance élevée",
    "medium":         "🟑 Confiance moyenne",
    "low":            "πŸ”΄ Confiance faible",
    "out_of_context": "⚫ Hors contexte",
}

if question := st.chat_input("Votre question..."):
    st.session_state.messages.append({"role": "user", "content": question})
    with st.chat_message("user"):
        st.markdown(question)

    with st.chat_message("assistant"):
        with st.spinner("Recherche en cours..."):
            try:
                resp = requests.post(
                    f"{API_URL}/ask",
                    json={"question": question},
                    timeout=30
                )
                resp.raise_for_status()
                data = resp.json()

                answer     = data["answer"]
                sources    = data.get("sources", [])
                confidence = data.get("confidence", "low")

                st.markdown(answer)
                st.caption(CONFIDENCE_BADGE.get(confidence, ""))

                if sources:
                    with st.expander("πŸ“„ Sources"):
                        for s in sources:
                            st.markdown(f"- `{s}`")

                st.session_state.messages.append({
                    "role": "assistant",
                    "content": answer,
                    "sources": sources,
                })

            except requests.exceptions.Timeout:
                st.error("⏱️ L'API met trop de temps à répondre.")
            except requests.exceptions.ConnectionError:
                st.error("πŸ”Œ Impossible de joindre l'API.")
            except Exception as e:
                st.error(f"❌ Erreur : {str(e)}")