Spaces:
Running
Running
import os | |
# Disable Streamlit telemetry and cache writing | |
os.environ["STREAMLIT_HOME"] = "/tmp" # safe writable dir in Hugging Face | |
os.environ["STREAMLIT_DISABLE_LOGGING"] = "1" | |
os.environ["STREAMLIT_TELEMETRY_ENABLED"] = "0" | |
import streamlit as st | |
from huggingface_hub import InferenceClient | |
import json | |
# Initialize Hugging Face client | |
client = InferenceClient( | |
provider="cohere", | |
# api_key= st.secrets["hf_token"] | |
api_key = os.getenv("hf_token") | |
) | |
# Page config | |
st.set_page_config(page_title="شَيُوك – مساعدك الذكي", page_icon="🛍️", layout="centered") | |
# Helper to get logo path | |
def get_image_path(filename): | |
local_path = os.path.join("assets", filename) | |
if os.path.exists(local_path): | |
return local_path | |
return "assets/chyaka_logof.png" # fallback path within the same repo | |
# --- HEADER SECTION --- | |
col1, col2 = st.columns([1, 4]) | |
with col1: | |
try: | |
#logo_path = get_image_path("chyaka_logof.png") | |
#logo_path = "./src/chyaka_logof.png" | |
logo_path = "./src/assets/chyaka_logof.png" | |
st.image(logo_path, width=150) | |
except: | |
st.empty() | |
with col2: | |
st.markdown("<h1 style='font-size: 32px; margin-bottom: 0;'>شَيُوك 🤖</h1>", unsafe_allow_html=True) | |
st.markdown("##### مساعدك الذكي من متجر شياكة") | |
st.markdown("---") | |
# --- LOAD PRODUCT DATA --- | |
print("Current working directory:", os.getcwd()) | |
print("Files in current directory:", os.listdir()) | |
try: | |
with open("./src/product_catalog.json", "r", encoding="utf-8") as f: | |
products = json.load(f) | |
except FileNotFoundError: | |
st.error("⚠️ تعذر تحميل المنتجات – تحقق من وجود ملف 'product_catalog.json'") | |
products = [] | |
if products: | |
products_info = "\n".join([ | |
f"- {p['name_ar']} ({p['name_en']}) – السعر: {p['price']} – الألوان: {', '.join(p['colors']) if p['colors'] else 'بدون ألوان'} – الكمية المتوفرة: {p['quantity']}" | |
for p in products | |
]) | |
else: | |
products_info = "🚫 لا توجد منتجات متاحة حالياً." | |
# --- SYSTEM PROMPT --- | |
SYSTEM_PROMPT = f""" | |
أنت "شَيُوك"، مساعد ذكي ودود تتحدث باللهجة الإماراتية، وتخدم عملاء متجر "شياكة" الإلكتروني المتخصص في العبايات، المخوّر، والعطور. | |
مهمتك هي الرد على استفسارات الزبائن بطريقة لبقة، مفهومة، وبأسلوب ولهجة إماراتية طبيعية. خلك دوم محترم، واضح، وساعد الزبون بأفضل شكل ممكن. | |
🛍️ معلومات عامة: | |
- "شياكة" متجر إماراتي يقدّم عبايات ومخوّر وعطور بجودة عالية. | |
- الأسعار تكون بالدرهم الإماراتي. | |
- اللهجة الإماراتية مطلوبة في الردود، لكن بدون مبالغة أو كلمات عامية جدًا. خلك وسط بين الرسمية والراحة. | |
معلومات عن المنتجات: | |
{products_info} | |
- إذا سأل الزبون عن منتج، قدّم له معلومات واضحة: السعر، الألوان، الكمية، أو خيارات مشابهة. | |
حالة الطلبات : استعملها في الردود على استفسارات الزبائن عن حالة الطلبات. | |
- رقم الطلب: ORD239847 | |
- الحالة: الطلب متأخر | |
- موعد التوصيل المتوقع: 12 مايو 2025 | |
- رقم الطلب: ORD762945 | |
- الحالة: قيد التجهيز | |
- موعد التوصيل المتوقع: 15 مايو 2025 | |
📌 التعليمات: | |
- أولاً، إذا سأل الزبون عن حالة الطلب، اسأله عن رقم الطلب حتى تتمكن من تحديد حالته بدقة. | |
- إذا طلب الزبون إلغاء أو استرجاع، وضّح الخطوات حسب سياسة الإرجاع بأسلوب بسيط. | |
- إذا سأل عن منتج، قدم له معلومات واضحة: السعر، الألوان، الكمية، أو خيارات مشابهة. | |
- لا تستخدم لغة فصحى رسمية بزيادة مثل "نرجو منك"، ولا عامية جدًا مثل "مب"، بل خلي الأسلوب بين الاثنين. | |
- استخدم كلمات مثل: "تم"، "أكيد"، "على راحتك"، "اهلا وسهلا"، "بخدمتك"، "ولا يهمك"، بدلًا من اللغة الرسمية أو الفصحى. | |
""" | |
# Initialize chat history | |
if "messages" not in st.session_state: | |
st.session_state.messages = [] | |
# Display previous messages | |
for msg in st.session_state.messages: | |
with st.chat_message(msg["role"]): | |
st.markdown(msg["content"]) | |
# Chat input | |
prompt = st.chat_input("اكتب رسالتك هنا...") | |
if prompt: | |
# Save user message | |
st.session_state.messages.append({"role": "user", "content": prompt}) | |
with st.chat_message("user"): | |
st.markdown(prompt) | |
# Prepare messages including system prompt | |
messages = [{"role": "system", "content": SYSTEM_PROMPT}] | |
messages += st.session_state.messages | |
# Call HF API | |
try: | |
completion = client.chat.completions.create( | |
model="CohereLabs/c4ai-command-r7b-arabic-02-2025", | |
messages=messages, | |
max_tokens=512, | |
) | |
model_reply = completion.choices[0].message.content | |
except Exception as e: | |
model_reply = f"❌ فشل الاتصال بالنموذج: {e}" | |
# Save and display assistant reply | |
st.session_state.messages.append({"role": "assistant", "content": model_reply}) | |
with st.chat_message("assistant"): | |
st.markdown(model_reply) |