Spaces:
Sleeping
Sleeping
# import os | |
# import gradio as gr | |
# import numpy as np | |
# from transformers import AutoTokenizer, AutoModel | |
# import time | |
# import torch | |
# # :white_check_mark: Setup environment | |
# os.makedirs(os.environ.get("HF_HOME", "./hf_cache"), exist_ok=True) | |
# hf_token = os.environ.get("HF_TOKEN") | |
# if not hf_token: | |
# raise EnvironmentError(":x: Environment variable HF_TOKEN is not set.") | |
# # Check for GPU availability | |
# device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
# print(f"Using device: {device}") | |
# # :white_check_mark: Load model and tokenizer | |
# text_tokenizer = AutoTokenizer.from_pretrained( | |
# "nomic-ai/nomic-embed-text-v1.5", | |
# trust_remote_code=True, | |
# token=hf_token, | |
# cache_dir=os.environ["HF_HOME"] | |
# ) | |
# text_model = AutoModel.from_pretrained( | |
# "nomic-ai/nomic-embed-text-v1.5", | |
# trust_remote_code=True, | |
# token=hf_token, | |
# cache_dir=os.environ["HF_HOME"] | |
# ).to(device) # Move model to GPU if available | |
# # :white_check_mark: Embedding function | |
# def get_text_embeddings(text): | |
# """ | |
# Converts input text into a dense embedding using the Nomic embedding model. | |
# These embeddings are used to query Qdrant for semantically relevant document chunks. | |
# """ | |
# inputs = text_tokenizer(text, return_tensors="pt", padding=True, truncation=True).to(device) # Move inputs to same device as model | |
# with torch.no_grad(): # Disable gradient calculation for inference | |
# outputs = text_model(**inputs) | |
# embeddings = outputs.last_hidden_state.mean(dim=1) | |
# print(embeddings[0].detach().cpu().numpy()) | |
# return embeddings[0].detach().cpu().numpy() | |
# # :white_check_mark: Gradio interface function | |
# def embed_text_interface(text): | |
# strt_time = time.time() | |
# embedding = get_text_embeddings(text) | |
# print(f"Total time taken by nomic to embed: {time.time()-strt_time}") | |
# return embedding | |
# # :white_check_mark: Gradio UI | |
# interface = gr.Interface( | |
# fn=embed_text_interface, | |
# inputs=gr.Textbox(label="Enter text to embed", lines=5), | |
# outputs=gr.Textbox(label="Embedding vector"), | |
# title="Text Embedding with Nomic AI", | |
# description="Enter some text, and get its embedding vector using Nomic's embedding model." | |
# ) | |
# # :white_check_mark: Launch the app | |
# if __name__ == "__main__": | |
# interface.launch() | |
import os | |
import gradio as gr | |
import numpy as np | |
from transformers import AutoTokenizer, AutoModel | |
import time | |
import torch | |
# :white_check_mark: Setup environment | |
os.makedirs(os.environ.get("HF_HOME", "./hf_cache"), exist_ok=True) | |
hf_token = os.environ.get("HF_TOKEN") | |
if not hf_token: | |
raise EnvironmentError(":x: Environment variable HF_TOKEN is not set.") | |
# Check for GPU availability | |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
print(f"Using device: {device}") | |
# :white_check_mark: Load model and tokenizer | |
text_tokenizer = AutoTokenizer.from_pretrained( | |
"nomic-ai/nomic-embed-text-v1.5", | |
trust_remote_code=True, | |
token=hf_token, | |
cache_dir=os.environ["HF_HOME"] | |
) | |
text_model = AutoModel.from_pretrained( | |
"nomic-ai/nomic-embed-text-v1.5", | |
trust_remote_code=True, | |
token=hf_token, | |
cache_dir=os.environ["HF_HOME"] | |
).to(device) # Move model to GPU if available | |
def get_text_embeddings(text): | |
"""Returns embedding as NumPy array""" | |
inputs = text_tokenizer(text, return_tensors="pt", padding=True, truncation=True).to(device) | |
with torch.no_grad(): | |
outputs = text_model(**inputs) | |
embeddings = outputs.last_hidden_state.mean(dim=1) | |
return embeddings[0].detach().cpu().numpy() | |
def format_embedding(embedding): | |
"""Formats the embedding as 'embedding: [x.xx, x.xx, ...]'""" | |
formatted = ", ".join([f"{x:.3f}" for x in embedding]) | |
return f"embedding: [{formatted}]" | |
import json | |
def embed_text_interface(text): | |
strt_time = time.time() | |
embedding = get_text_embeddings(text) | |
print(f"Total time taken by nomic to embed: {time.time()-strt_time}") | |
# Convert to list and format for display | |
embedding_list = embedding.tolist() | |
formatted = { | |
"embedding": embedding_list, | |
"shape": len(embedding_list) | |
} | |
return formatted | |
interface = gr.Interface( | |
fn=embed_text_interface, | |
inputs=gr.Textbox(label="Input Text", lines=5), | |
outputs=gr.JSON(label="Embedding Vector"), # Using JSON output | |
title="Nomic Text Embeddings", | |
description="Returns embeddings as a Python list", | |
examples=[ | |
["This is a sample text"], | |
["Another example sentence"] | |
] | |
) | |
if __name__ == "__main__": | |
interface.queue(api_open=True).launch() | |