Spaces:
Running
Running
def replace_wildcards( | |
templates, wildcards, replacements, has_numeric_columns, has_categoric_columns | |
): | |
if len(wildcards) != len(replacements): | |
raise ValueError( | |
"The number of wildcards must match the number of replacements." | |
) | |
new_templates = [] | |
for tmp in templates: | |
if "type" in tmp and tmp["type"] == "numeric" and not has_numeric_columns: | |
continue | |
if "type" in tmp and tmp["type"] == "categoric" and not has_categoric_columns: | |
continue | |
tmp_text = tmp["source"].strip() | |
for wildcard, replacement in zip(wildcards, replacements): | |
tmp_text = tmp_text.replace(wildcard, replacement) | |
new_templates.append({"cell_type": tmp["cell_type"], "source": tmp_text}) | |
return new_templates | |
embeggins_cells = [ | |
{ | |
"cell_type": "markdown", | |
"source": """ | |
--- | |
# **Embeddings Notebook for {dataset_name} dataset** | |
--- | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 1. Setup necessary libraries and load the dataset", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Install and import necessary libraries. | |
!pip install pandas sentence-transformers faiss-cpu | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
import pandas as pd | |
from sentence_transformers import SentenceTransformer | |
import faiss | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Load the dataset as a DataFrame | |
{first_code} | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Specify the column name that contains the text data to generate embeddings | |
column_to_generate_embeddings = '{longest_col}' | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 2. Loading embedding model and creating FAISS index", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Remove duplicate entries based on the specified column | |
df = df.drop_duplicates(subset=column_to_generate_embeddings) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Convert the column data to a list of text entries | |
text_list = df[column_to_generate_embeddings].tolist() | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Specify the embedding model you want to use | |
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
vectors = model.encode(text_list) | |
vector_dimension = vectors.shape[1] | |
# Initialize the FAISS index with the appropriate dimension (384 for this model) | |
index = faiss.IndexFlatL2(vector_dimension) | |
# Encode the text list into embeddings and add them to the FAISS index | |
index.add(vectors) | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 3. Perform a text search", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Specify the text you want to search for in the list | |
text_to_search = text_list[0] | |
print(f"Text to search: {text_to_search}") | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Generate the embedding for the search query | |
query_embedding = model.encode([text_to_search]) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Perform the search to find the 'k' nearest neighbors (adjust 'k' as needed) | |
D, I = index.search(query_embedding, k=10) | |
# Print the similar documents found | |
print(f"Similar documents: {[text_list[i] for i in I[0]]}") | |
""", | |
}, | |
] | |
eda_cells = [ | |
{ | |
"cell_type": "markdown", | |
"source": """ | |
--- | |
# **Exploratory Data Analysis (EDA) Notebook for {dataset_name} dataset** | |
--- | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 1. Setup necessary libraries and load the dataset", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Install and import necessary libraries. | |
!pip install pandas matplotlib seaborn | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
import seaborn as sns | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Load the dataset as a DataFrame | |
{first_code} | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 2. Understanding the Dataset", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# First rows of the dataset and info | |
print(df.head()) | |
print(df.info()) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Check for missing values | |
print(df.isnull().sum()) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Identify data types of each column | |
print(df.dtypes) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Detect duplicated rows | |
print(df.duplicated().sum()) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Generate descriptive statistics | |
print(df.describe()) | |
""", | |
}, | |
{ | |
"type": "categoric", | |
"cell_type": "code", | |
"source": """ | |
# Unique values in categorical columns | |
df.select_dtypes(include=['object']).nunique() | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 3. Data Visualization", | |
}, | |
{ | |
"type": "numeric", | |
"cell_type": "code", | |
"source": """ | |
# Correlation matrix for numerical columns | |
corr_matrix = df.corr(numeric_only=True) | |
plt.figure(figsize=(10, 8)) | |
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', square=True) | |
plt.title('Correlation Matrix') | |
plt.show() | |
""", | |
}, | |
{ | |
"type": "numeric", | |
"cell_type": "code", | |
"source": """ | |
# Distribution plots for numerical columns | |
for column in df.select_dtypes(include=['int64', 'float64']).columns: | |
plt.figure(figsize=(8, 4)) | |
sns.histplot(df[column], kde=True) | |
plt.title(f'Distribution of {column}') | |
plt.xlabel(column) | |
plt.ylabel('Frequency') | |
plt.show() | |
""", | |
}, | |
{ | |
"type": "categoric", | |
"cell_type": "code", | |
"source": """ | |
# Count plots for categorical columns | |
for column in df.select_dtypes(include=['object']).columns: | |
plt.figure(figsize=(8, 4)) | |
sns.countplot(x=column, data=df) | |
plt.title(f'Count Plot of {column}') | |
plt.xlabel(column) | |
plt.ylabel('Count') | |
plt.show() | |
""", | |
}, | |
{ | |
"type": "numeric", | |
"cell_type": "code", | |
"source": """ | |
# Box plots for detecting outliers in numerical columns | |
for column in df.select_dtypes(include=['int64', 'float64']).columns: | |
plt.figure(figsize=(8, 4)) | |
sns.boxplot(df[column]) | |
plt.title(f'Box Plot of {column}') | |
plt.xlabel(column) | |
plt.show() | |
""", | |
}, | |
] | |
rag_cells = [ | |
{ | |
"cell_type": "markdown", | |
"source": """ | |
--- | |
# **Retrieval-Augmented Generation Notebook for {dataset_name} dataset** | |
--- | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 1. Setup necessary libraries and load the dataset", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Install and import necessary libraries. | |
!pip install pandas sentence-transformers faiss-cpu transformers torch huggingface_hub | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
from sentence_transformers import SentenceTransformer | |
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline | |
from huggingface_hub import InferenceClient | |
import pandas as pd | |
import faiss | |
import torch | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Load the dataset as a DataFrame | |
{first_code} | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Specify the column name that contains the text data to generate embeddings | |
column_to_generate_embeddings = '{longest_col}' | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 2. Loading embedding model and creating FAISS index", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Remove duplicate entries based on the specified column | |
df = df.drop_duplicates(subset=column_to_generate_embeddings) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Convert the column data to a list of text entries | |
text_list = df[column_to_generate_embeddings].tolist() | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Specify the embedding model you want to use | |
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
vectors = model.encode(text_list) | |
vector_dimension = vectors.shape[1] | |
# Initialize the FAISS index with the appropriate dimension (384 for this model) | |
index = faiss.IndexFlatL2(vector_dimension) | |
# Encode the text list into embeddings and add them to the FAISS index | |
index.add(vectors) | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 3. Perform a text search", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Specify the text you want to search for in the list | |
query = "How to cook sushi?" | |
# Generate the embedding for the search query | |
query_embedding = model.encode([query]) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Perform the search to find the 'k' nearest neighbors (adjust 'k' as needed) | |
D, I = index.search(query_embedding, k=10) | |
# Print the similar documents found | |
print(f"Similar documents: {[text_list[i] for i in I[0]]}") | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 4. Load pipeline and perform inference locally", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Adjust model name as needed | |
checkpoint = 'HuggingFaceTB/SmolLM-1.7B-Instruct' | |
device = "cuda" if torch.cuda.is_available() else "cpu" # for GPU usage or "cpu" for CPU usage | |
tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device) | |
generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0 if device == "cuda" else -1) | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Create a prompt with two parts: 'system' for instructions based on a 'context' from the retrieved documents, and 'user' for the query | |
selected_elements = [text_list[i] for i in I[0].tolist()] | |
context = ','.join(selected_elements) | |
messages = [ | |
{ | |
"role": "system", | |
"content": f"You are an intelligent assistant tasked with providing accurate and concise answers based on the following context. Use the information retrieved to construct your response. Context: {context}", | |
}, | |
{"role": "user", "content": query}, | |
] | |
""", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Send the prompt to the pipeline and show the answer | |
output = generator(messages) | |
print("Generated result:") | |
print(output[0]['generated_text'][-1]['content']) # Print the assistant's response content | |
""", | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": "## 5. Alternatively call the inference client", | |
}, | |
{ | |
"cell_type": "code", | |
"source": """ | |
# Adjust model name as needed | |
checkpoint = "meta-llama/Meta-Llama-3-8B-Instruct" | |
# Change here your Hugging Face API token | |
token = "hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" | |
inference_client = InferenceClient(checkpoint, token=token) | |
output = inference_client.chat_completion(messages=messages, stream=False) | |
print("Generated result:") | |
print(output.choices[0].message.content) | |
""", | |
}, | |
] | |
def generate_rag_system_prompt(): | |
""" | |
1. Install necessary libraries. | |
2. Import libraries. | |
3. Load the dataset as a DataFrame using the provided code. | |
4. Select the column for generating embeddings. | |
5. Remove duplicate data. | |
6. Convert the selected column to a list. | |
7. Load the sentence-transformers model. | |
8. Create a FAISS index. | |
9. Encode a query sample. | |
10. Search for similar documents using the FAISS index. | |
11. Load the 'HuggingFaceH4/zephyr-7b-beta' model from the transformers library and create a pipeline. | |
12. Create a prompt with two parts: 'system' for instructions based on a 'context' from the retrieved documents, and 'user' for the query. | |
13. Send the prompt to the pipeline and display the answer. | |
Ensure the notebook is well-organized with explanations for each step. | |
The output should be Markdown content with Python code snippets enclosed in "```python" and "```". | |
The user will provide the dataset information in the following format: | |
## Columns and Data Types | |
## Sample Data | |
## Loading Data code | |
Use the provided code to load the dataset; do not use any other method. | |
""" | |