File size: 2,918 Bytes
34d5887
69d157f
d8ae710
b99bcad
4682e8b
 
 
b33d37d
 
 
 
 
 
69d157f
4682e8b
 
 
 
b33d37d
4682e8b
 
 
 
 
d40f814
4634560
4682e8b
 
 
 
4634560
4682e8b
4634560
 
 
4682e8b
4634560
4682e8b
 
4634560
9f85c11
4682e8b
 
 
9f85c11
 
3c1a020
4682e8b
 
b33d37d
c720e4f
9f85c11
b33d37d
09bf51b
935cbd6
5d2c61c
 
34d5887
4682e8b
 
 
69d157f
5d2c61c
 
4682e8b
69d157f
3720c80
5d2c61c
 
3720c80
b33d37d
9d7302b
 
 
 
 
4682e8b
b33d37d
4682e8b
5d2c61c
4682e8b
b33d37d
 
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
import streamlit as st
import numpy as np
from tensorflow.keras.models import load_model
from huggingface_hub import hf_hub_download
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import gensim
import nltk
import os

# Download necessary NLTK resources
nltk.download('stopwords')
nltk.download('wordnet')

# Load stop words and lemmatizer
stop_words = set(stopwords.words('english'))
lemmatizer = WordNetLemmatizer()

# Function to preprocess input text
def preprocess_text(input_text, word2vec_model):
    input_text = input_text.lower()
    tokens = input_text.split()
    tokens = [token for token in tokens if token not in stop_words]
    tokens = [lemmatizer.lemmatize(token, pos='v') for token in tokens]
    embeddings = []

    for token in tokens:
        if token in word2vec_model.wv:
            embeddings.append(word2vec_model.wv[token])
        else:
            embeddings.append(np.zeros(word2vec_model.vector_size))

    max_timesteps = 100
    if len(embeddings) > max_timesteps:
        embeddings = embeddings[:max_timesteps]
    else:
        padding = [np.zeros(word2vec_model.vector_size)] * (max_timesteps - len(embeddings))
        embeddings.extend(padding)

    input_features = np.array(embeddings).reshape((1, max_timesteps, word2vec_model.vector_size))
    return input_features

# Load Word2Vec model
def load_word2vec_model():
    repo_id = 'Preethamreddy799/NLP_MODEL'
    filename = 'word2vec_model.bin'
    word2vec_path = hf_hub_download(repo_id=repo_id, filename=filename)
    return gensim.models.Word2Vec.load(word2vec_path)

# Load LSTM model
def load_model_test_steps():
    repo_id = 'Preethamreddy799/NLP_MODEL'
    filename = 'model_test_steps.h5'
    cached_model_path = hf_hub_download(repo_id=repo_id, filename=filename)
    model = load_model(cached_model_path, compile=False)
    print(f"Model loaded successfully from {cached_model_path}")
    return model

# Initialize models
word2vec_model = load_word2vec_model()
lstm_model = load_model_test_steps()

# Streamlit App
st.title("Test Case Steps Generator")
st.write("This app generates test steps based on Test Case Acceptance Criteria.")

acceptance_criteria = st.text_area("Enter Test Case Acceptance Criteria")

if st.button("Generate Test Steps"):
    if acceptance_criteria:
        input_features = preprocess_text(acceptance_criteria, word2vec_model)
        print("Original Shape:", input_features.shape)  # Debugging

         # Adjust input for the model's requirements
        input_features = input_features[:, :1, :]  # Retain only the first timestep
        print("Adjusted Shape:", input_features.shape)  # Debugging

        try:
            predicted_steps = lstm_model.predict(input_features)
            st.subheader("Generated Test Steps")
            st.write(predicted_steps)
        except Exception as e:
            st.error(f"Error generating predictions: {e}")