File size: 2,872 Bytes
9cfe82c
 
ee43960
9cfe82c
ee43960
9cfe82c
 
d88b860
 
 
 
 
 
 
 
 
 
 
 
4b4b581
ee43960
 
 
 
 
4b4b581
 
ee43960
 
d88b860
ee43960
 
 
 
 
d88b860
 
4b4b581
d88b860
 
 
 
9cfe82c
 
59414a8
 
d88b860
 
9cfe82c
ee43960
d88b860
ee43960
d88b860
ee43960
 
d88b860
 
 
9cfe82c
ee43960
9cfe82c
 
 
d88b860
ee43960
9cfe82c
4b4b581
9cfe82c
 
ee43960
a32839b
9cfe82c
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
import gradio as gr
from huggingface_hub import InferenceClient
from collections import defaultdict

# Initialize the model client
client = InferenceClient("Futuresony/future_ai_12_10_2024.gguf")

# Store user preferences & chat history
user_preferences = defaultdict(int)  # Tracks user interests
session_histories = defaultdict(list)  # Stores chat history per session

def format_chat_history(history, system_message):
    """Formats history into a single string in Alpaca/LLaMA style."""
    chat_str = f"{system_message}\n\n"  # Start with system message

    for user_msg, bot_response in history:
        chat_str += f"### Instruction:\n{user_msg}\n\n### Response:\n{bot_response}\n\n"

    return chat_str  # Return formatted conversation history

def extract_keywords(text):
    """Extracts simple keywords from user input."""
    words = text.lower().split()
    common_words = {"the", "is", "a", "and", "to", "of", "in", "it", "you", "for"}  # Ignore common words
    return [word for word in words if word not in common_words]

def respond(message, history, system_message, max_tokens, temperature, top_p):
    session_id = id(history)  # Unique ID for each session
    session_history = session_histories[session_id]  # Retrieve session history

    # Extract keywords & update preferences
    keywords = extract_keywords(message)
    for kw in keywords:
        user_preferences[kw] += 1

    # Format full conversation as a single string
    formatted_input = format_chat_history(session_history, system_message) + f"### Instruction:\n{message}\n\n### Response:\n"

    # Send request (fix: ensure input is a single string)
    response = client.text_generation(
        formatted_input,
        max_new_tokens=max_tokens,
        temperature=temperature,
        top_p=top_p,
    )

    # ✅ Extract only the response
    cleaned_response = response.split("### Response:")[-1].strip()

    # Save to session history
    session_history.append((message, cleaned_response))

    # Adapt response based on learning
    most_asked = max(user_preferences, key=user_preferences.get, default=None)
    if most_asked and most_asked in message.lower():
        cleaned_response += f"\n\nNaona unapenda mada ya '{most_asked}' sana! Unataka kujua zaidi?"

    return cleaned_response  # ✅ Fixed: Returns only the final response

# Create Chat Interface
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value="Wewe ni msaidizi wa kirafiki anayejifunza upendeleo wa mtumiaji.", label="System message"),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
    ],
)

if __name__ == "__main__":
    demo.launch()