File size: 3,384 Bytes
f79326d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
import gradio as gr
from datasets import load_dataset

# Load the GPT-J model and tokenizer from Hugging Face
model_name = "EleutherAI/gpt-j-6B"  # GPT-J model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Define a function for generating responses
def generate_response(prompt):
    # Tokenize the input text
    inputs = tokenizer(prompt, return_tensors="pt")
    
    # Generate response using the model
    outputs = model.generate(
        inputs.input_ids, 
        max_length=200,      # Adjust response length
        do_sample=True,      # Sample from the model
        temperature=0.7,     # Adjust creativity (lower = more conservative)
        top_p=0.9,           # Nucleus sampling for diverse answers
        pad_token_id=tokenizer.eos_token_id  # EOS token to avoid error
    )
    
    # Decode and return the response
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

# Create a Gradio interface for the chatbot
def chatbot_interface(user_input):
    response = generate_response(user_input)
    return response

# Fine-tuning function
def fine_tune_model(dataset_name, output_dir='./fine-tuned-model'):
    # Load dataset (assuming it's in Hugging Face format or a similar format)
    dataset = load_dataset(dataset_name)

    # Define training arguments
    training_args = TrainingArguments(
        output_dir=output_dir,        # Output directory for the fine-tuned model
        per_device_train_batch_size=2, # Adjust batch size according to GPU capacity
        num_train_epochs=1,           # Adjust the number of epochs based on the dataset
        save_steps=500,               # Save checkpoint every 500 steps
        save_total_limit=2,           # Keep only last two checkpoints
    )

    # Define the Trainer object
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=dataset['train'],
        eval_dataset=dataset['test'],
    )

    # Fine-tune the model
    trainer.train()

    return f"Model fine-tuned and saved to {output_dir}"

# Gradio interface for fine-tuning the model
def fine_tune_interface(dataset_name):
    result = fine_tune_model(dataset_name)
    return result

# Gradio UI for both chatbot and fine-tuning functionalities
with gr.Blocks() as demo:
    gr.Markdown("# Cable Industry Customer Service Chatbot")

    # Chatbot section
    with gr.Row():
        with gr.Column():
            chatbot_input = gr.Textbox(label="Ask the Cable Industry Chatbot")
            chatbot_output = gr.Textbox(label="Chatbot Response")
            chatbot_button = gr.Button("Generate Response")
        
        chatbot_button.click(fn=chatbot_interface, inputs=chatbot_input, outputs=chatbot_output)

    # Fine-tuning section
    with gr.Row():
        with gr.Column():
            gr.Markdown("### Fine-tune the Chatbot")
            dataset_input = gr.Textbox(label="Enter Hugging Face Dataset Name (e.g., 'cable_data')")
            fine_tune_button = gr.Button("Fine-tune Model")
            fine_tune_output = gr.Textbox(label="Fine-tune Status")
        
        fine_tune_button.click(fn=fine_tune_interface, inputs=dataset_input, outputs=fine_tune_output)

# Launch the Gradio interface
demo.launch()