Skip to content

Instantly share code, notes, and snippets.

@thoraxe
Last active November 8, 2023 16:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thoraxe/14d34e2aa85f602f7af89813a13ce010 to your computer and use it in GitHub Desktop.
Save thoraxe/14d34e2aa85f602f7af89813a13ce010 to your computer and use it in GitHub Desktop.
Indexing summary documents...
Parsing documents into nodes: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:00<00:00, 3778.65it/s]
Generating embeddings: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:00<00:00, 22.28it/s]
Indexing product documents...
Parsing documents into nodes: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 533/533 [00:00<00:00, 1216.73it/s]
Generating embeddings: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 731/731 [00:07<00:00, 95.32it/s]
Traceback (most recent call last):
File "/home/thoraxe/.pyenv/versions/3.9.16/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/thoraxe/.pyenv/versions/3.9.16/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/thoraxe/Red_Hat/openshift/llamaindex-experiments/fastapi-lightspeed-service/tools/indexer.py", line 39, in <module>
product_index = VectorStoreIndex.from_documents(product_documents, storage_context=storage_context, service_context=service_context, show_progress=True)
File "/home/thoraxe/.pyenv/versions/fastapi-ols-39/lib/python3.9/site-packages/llama_index/indices/base.py", line 102, in from_documents
return cls(
File "/home/thoraxe/.pyenv/versions/fastapi-ols-39/lib/python3.9/site-packages/llama_index/indices/vector_store/base.py", line 49, in __init__
super().__init__(
File "/home/thoraxe/.pyenv/versions/fastapi-ols-39/lib/python3.9/site-packages/llama_index/indices/base.py", line 71, in __init__
index_struct = self.build_index_from_nodes(nodes)
File "/home/thoraxe/.pyenv/versions/fastapi-ols-39/lib/python3.9/site-packages/llama_index/indices/vector_store/base.py", line 254, in build_index_from_nodes
return self._build_index_from_nodes(nodes, **insert_kwargs)
File "/home/thoraxe/.pyenv/versions/fastapi-ols-39/lib/python3.9/site-packages/llama_index/indices/vector_store/base.py", line 235, in _build_index_from_nodes
self._add_nodes_to_index(
File "/home/thoraxe/.pyenv/versions/fastapi-ols-39/lib/python3.9/site-packages/llama_index/indices/vector_store/base.py", line 188, in _add_nodes_to_index
nodes = self._get_node_with_embedding(nodes, show_progress)
File "/home/thoraxe/.pyenv/versions/fastapi-ols-39/lib/python3.9/site-packages/llama_index/indices/vector_store/base.py", line 106, in _get_node_with_embedding
embedding = id_to_embed_map[node.node_id]
KeyError: '5ad36ef2-49f4-4ce9-ba76-0c4ffc9ec953'
# Imports
import llama_index
from llama_index import VectorStoreIndex, SimpleDirectoryReader
from llama_index.storage.storage_context import StorageContext
from modules.model_context import get_watsonx_context
import logging, sys, os
#logging.basicConfig(stream=sys.stdout, level=logging.INFO)
#logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
llama_index.set_global_handler("simple")
# Select Model
## check if we are using remote embeddings via env
tei_embedding_url = os.getenv("TEI_SERVER_URL", None)
if tei_embedding_url != None:
service_context = get_watsonx_context(model="ibm/granite-13b-chat-v1",
tei_embedding_model='BAAI/bge-base-en-v1.5',
url=tei_embedding_url)
else:
service_context = get_watsonx_context(model="ibm/granite-13b-chat-v1")
# Load data
filename_fn = lambda filename: {'file_name': filename}
storage_context = StorageContext.from_defaults()
# index the summary documents
print("Indexing summary documents...")
summary_documents = SimpleDirectoryReader('data/summary-docs', file_metadata=filename_fn).load_data()
summary_index = VectorStoreIndex.from_documents(summary_documents, storage_context=storage_context, service_context=service_context, show_progress=True)
summary_index.set_index_id("summary")
storage_context.persist(persist_dir="./vector-db/summary-docs")
# index the product documentation
print("Indexing product documents...")
product_documents = SimpleDirectoryReader('data/ocp-product-docs-md', file_metadata=filename_fn).load_data()
product_index = VectorStoreIndex.from_documents(product_documents, storage_context=storage_context, service_context=service_context, show_progress=True)
product_index.set_index_id("product")
storage_context.persist(persist_dir="./vector-db/ocp-product-docs")
print("Done indexing!")
import os
from ibm_watson_machine_learning.metanames import GenTextParamsMetaNames as GenParams
from llama_index.llms import LangChainLLM
from llama_index.embeddings import TextEmbeddingsInference
from llama_index import ServiceContext
from genai.extensions.langchain import LangChainInterface
from genai.schemas import GenerateParams
from genai.credentials import Credentials
def get_watsonx_predictor(model, min_new_tokens=1, max_new_tokens=256, **kwargs):
if "verbose" in kwargs:
verbose = kwargs["verbose"]
else:
verbose = False
api_key = os.getenv("BAM_API_KEY", None)
api_url = os.getenv("BAM_URL", None)
creds = Credentials(api_key, api_endpoint=api_url)
params = {
GenParams.DECODING_METHOD: "greedy",
GenParams.MIN_NEW_TOKENS: min_new_tokens,
GenParams.MAX_NEW_TOKENS: max_new_tokens,
}
predictor = LangChainInterface(
model=model, params=params, credentials=creds, verbose=verbose
)
return predictor
def get_watsonx_context(model, url='local', tei_embedding_model = None, **kwargs):
if url != 'local':
# MUST set tei_embedding_model to do this
# TODO: make this appropriately blow up
embed_model = TextEmbeddingsInference(
model_name=tei_embedding_model,
base_url=url,
)
else:
embed_model = "local:BAAI/bge-base-en"
predictor = get_watsonx_predictor(model)
service_context = ServiceContext.from_defaults(
chunk_size=1024, llm=predictor, embed_model=embed_model, **kwargs
)
return service_context
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment