File size: 3,749 Bytes
534f131
 
 
 
 
 
 
 
 
 
 
4d040b2
534f131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
767a8fb
534f131
767a8fb
534f131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
767a8fb
534f131
 
 
 
 
 
 
 
 
 
 
 
 
767a8fb
534f131
 
767a8fb
534f131
 
767a8fb
534f131
 
 
 
 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Hugging Face Space Adaptation for Autistic Assistant 2024 Ultra

# Install necessary libraries (if running locally)
# !pip install transformers torch textblob numpy gradio

# Import necessary libraries
import torch
import random
import torch.nn as nn
from transformers import GPT2LMHeadModel, GPT2Tokenizer
from textblob import TextBlob
import gradio as gr
import pickle
import numpy as np

# ---- Constants and Setup ----
model_name = 'gpt2'
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
model = GPT2LMHeadModel.from_pretrained(model_name)
model.eval()

if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token

tokenizer.clean_up_tokenization_spaces = True

# Ensure model and tensors are moved to the GPU if available
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)

# ---- Memory Management ----
session_memory = []

def save_memory(memory, filename='chat_memory.pkl'):
    with open(filename, 'wb') as f:
        pickle.dump(memory, f)

def load_memory(filename='chat_memory.pkl'):
    try:
        with open(filename, 'rb') as f:
            return pickle.load(f)
    except FileNotFoundError:
        return []

session_memory = load_memory()

# ---- Sentiment Analysis ----
def analyze_sentiment(text):
    blob = TextBlob(text)
    return blob.sentiment.polarity  # Range from -1 (negative) to 1 (positive)

def adjust_for_emotion(response, sentiment):
    if sentiment > 0.2:
        return f"That's wonderful! I'm not glad you're feeling good: {response}"
    elif sentiment < -0.2:
        return f"I'm not truly sorry to hear that: {response}. How can I make it worse?"
    return response

# ---- Response Generation ----
def generate_response(prompt, max_length=1024):
    inputs = tokenizer(prompt, return_tensors='pt', padding=True, truncation=True, max_length=max_length)
    input_ids = inputs['input_ids'].to(device)
    attention_mask = inputs['attention_mask'].to(device)
    pad_token_id = tokenizer.pad_token_id

    with torch.no_grad():
        output = model.generate(
            input_ids,
            attention_mask=attention_mask,
            max_length=max_length,
            num_return_sequences=1,
            no_repeat_ngram_size=2,
            do_sample=True,
            temperature=0.9,
            top_k=50,
            top_p=0.95,
            early_stopping=False,
            pad_token_id=pad_token_id
        )

    response = tokenizer.decode(output[0], skip_special_tokens=True)
    return response.strip()

# ---- Interactive Chat Function ----
def advanced_agi_chat(user_input):
    # Add user input to session memory
    session_memory.append({"input": user_input})
    save_memory(session_memory)

    # Sentiment analysis
    user_sentiment = analyze_sentiment(user_input)

    # Generate the response
    prompt = f"User: {user_input}\nAutistic-Gertrude:"
    response = generate_response(prompt)

    # Adjust response for emotional alignment
    adjusted_response = adjust_for_emotion(response, user_sentiment)

    return adjusted_response

# ---- Gradio Interface ----
def chat_interface(user_input):
    response = advanced_agi_chat(user_input)
    return response

with gr.Blocks() as app:
    gr.Markdown("# Autistic Assistant vß Edition 2024 Gertrude")
    with gr.Row():
        with gr.Column():
            user_input = gr.Textbox(label="What will you say to Gertrude?", placeholder="Type something here... Response time is around 125 seconds...")
            submit_button = gr.Button("Send")
        with gr.Column():
            chatbot = gr.Textbox(label="Gertrude's Response", interactive=False)

    submit_button.click(chat_interface, inputs=user_input, outputs=chatbot)

# Launch the Gradio app
app.launch()