File size: 3,881 Bytes
49411f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: apache-2.0
datasets:
- fka/awesome-chatgpt-prompts
language:
- ak
metrics:
- cer
base_model:
- Qwen/Qwen2-VL-7B-Instruct
new_version: mattshumer/Reflection-Llama-3.1-70B
pipeline_tag: text2text-generation
library_name: bertopic
tags:
- code
---
import gradio as gr
from transformers import pipeline, GPT2Tokenizer, GPT2LMHeadModel
import torch
from datetime import datetime

# Laad GPT-2 model en tokenizer voor meer controle
model_name = "gpt2"
model = GPT2LMHeadModel.from_pretrained(model_name)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)

# Zet het model in evaluatie-modus
model.eval()

# Functie om de tokenslimiet in de gaten te houden
def manage_token_limit(history, max_tokens=1000):
    # Check of de geschiedenis te groot wordt
    tokenized_history = tokenizer.encode(history)
    if len(tokenized_history) > max_tokens:
        # Trim de geschiedenis
        return tokenizer.decode(tokenized_history[-max_tokens:])
    else:
        return history

# Functie om AI-respons te genereren met context
def generate_response(user_input, chat_history, temperature=0.7, top_k=50, top_p=0.9, max_length=100):
    # Voeg user input toe aan de geschiedenis
    new_history = chat_history + f"\nUser: {user_input}\nAI:"
    
    # Trim de geschiedenis als die te lang is
    new_history = manage_token_limit(new_history)
    
    # Tokeniseer de geschiedenis
    inputs = tokenizer.encode(new_history, return_tensors='pt')
    
    # Genereer tekst met variatie in temperatuur en top-k sampling
    outputs = model.generate(inputs, max_length=max_length, temperature=temperature, 
                             top_k=top_k, top_p=top_p, pad_token_id=tokenizer.eos_token_id)
    
    # Decodeer de output en voeg deze toe aan de geschiedenis
    generated_text = tokenizer.decode(outputs[:, inputs.shape[-1]:][0], skip_special_tokens=True)
    
    new_history += generated_text + "\n"
    
    return generated_text, new_history

# Functie voor het loggen van conversaties
def log_conversation(user_input, response):
    # Simpele logging naar een bestand
    with open("chat_logs.txt", "a") as log_file:
        log_file.write(f"{datetime.now()} | User: {user_input} | AI: {response}\n")

# Gradio interface-functie die interactie en instellingen beheert
def chatbot_interface(user_input, chat_history, temperature=0.7, top_k=50, top_p=0.9):
    # Genereer AI-reactie
    ai_response, updated_history = generate_response(user_input, chat_history, temperature, top_k, top_p)
    
    # Log de conversatie
    log_conversation(user_input, ai_response)
    
    return ai_response, updated_history

# Gradio UI setup
with gr.Blocks() as demo:
    # Titel en beschrijving
    gr.Markdown("# Geavanceerde AI Chatbot met Variatie")
    gr.Markdown("Deze chatbot gebruikt GPT-2 om geavanceerde, variabele antwoorden te genereren.")
    
    # Input veld en conversatiegeschiedenis
    chat_history = gr.State(value="")  # Houdt de volledige geschiedenis bij
    
    with gr.Row():
        user_input = gr.Textbox(lines=2, placeholder="Typ hier je vraag...")
    
    # Instellingen voor AI variatie
    with gr.Row():
        temperature = gr.Slider(0.1, 1.0, value=0.7, label="Temperature (Creativiteit)")
        top_k = gr.Slider(1, 100, value=50, label="Top-k Sampling")
        top_p = gr.Slider(0.1, 1.0, value=0.9, label="Top-p Sampling")
    
    # Output veld voor het AI antwoord
    ai_output = gr.Textbox(label="AI Response")
    
    # Start de chatbot
    submit_button = gr.Button("Submit")
    submit_button.click(chatbot_interface, 
                        inputs=[user_input, chat_history, temperature, top_k, top_p], 
                        outputs=[ai_output, chat_history])
    
    # Reset knop
    reset_button = gr.Button("Reset Chat")
    reset_button.click(lambda: "", outputs=chat_history)

# Start de Gradio interface
demo.launch()