Files
wehub-resource-sync a0c8464e58
Build Package / build (ubuntu-latest) (push) Failing after 1s
CodeQL / Analyze (python) (push) Failing after 1s
Core Typecheck / core-typecheck (push) Failing after 1s
Linting / lint (push) Failing after 1s
llama-dev tests / test-llama-dev (push) Failing after 1s
Publish Sub-Package to PyPI if Needed / publish_subpackage_if_needed (push) Has been skipped
Sync Docs to Developer Hub / sync-docs (push) Failing after 0s
Build Package / build (windows-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:26:52 +08:00

258 lines
7.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Upstash Vector Store\n",
"\n",
"We're going to look at how to use LlamaIndex to interface with Upstash Vector!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"! pip install -q llama-index upstash-vector"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from llama_index.core import VectorStoreIndex, SimpleDirectoryReader\n",
"from llama_index.core.vector_stores import UpstashVectorStore\n",
"from llama_index.core import StorageContext\n",
"import textwrap\n",
"import openai"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Setup the OpenAI API\n",
"openai.api_key = \"sk-...\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--2024-02-03 20:04:25-- https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt\n",
"Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n",
"Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 75042 (73K) [text/plain]\n",
"Saving to: data/paul_graham/paul_graham_essay.txt\n",
"\n",
"data/paul_graham/pa 100%[===================>] 73.28K --.-KB/s in 0.01s \n",
"\n",
"2024-02-03 20:04:25 (5.96 MB/s) - data/paul_graham/paul_graham_essay.txt saved [75042/75042]\n",
"\n"
]
}
],
"source": [
"# Download data\n",
"! mkdir -p 'data/paul_graham/'\n",
"! wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can load the documents using the LlamaIndex SimpleDirectoryReader"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"# Documents: 1\n"
]
}
],
"source": [
"documents = SimpleDirectoryReader(\"./data/paul_graham/\").load_data()\n",
"\n",
"print(\"# Documents:\", len(documents))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To create an index on Upstash, visit https://console.upstash.com/vector, create an index with 1536 dimensions and `Cosine` distance metric. Copy the URL and token below"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"vector_store = UpstashVectorStore(url=\"https://...\", token=\"...\")\n",
"\n",
"storage_context = StorageContext.from_defaults(vector_store=vector_store)\n",
"index = VectorStoreIndex.from_documents(\n",
" documents, storage_context=storage_context\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we've successfully created an index and populated it with vectors from the essay! The data will take a second to index and then it'll be ready for querying."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The author learned that the study of philosophy in college did not live up to their expectations.\n",
"They found that other fields took up most of the space of ideas, leaving little room for what they\n",
"perceived as the ultimate truths that philosophy was supposed to explore. As a result, they decided\n",
"to switch to studying AI.\n",
"\n",
"\n",
"The author's opinion on startups is that they are in need of help and support, especially in the\n",
"beginning stages. The author believes that founders of startups are often helpless and face various\n",
"challenges, such as getting incorporated and understanding the intricacies of running a company. The\n",
"author's investment firm, Y Combinator, aims to provide seed funding and comprehensive support to\n",
"startups, offering them the guidance and resources they need to succeed.\n"
]
}
],
"source": [
"query_engine = index.as_query_engine()\n",
"res1 = query_engine.query(\"What did the author learn?\")\n",
"print(textwrap.fill(str(res1), 100))\n",
"\n",
"print(\"\\n\")\n",
"\n",
"res2 = query_engine.query(\"What is the author's opinion on startups?\")\n",
"print(textwrap.fill(str(res2), 100))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Metadata Filtering\n",
"\n",
"You can pass `MetadataFilters` with your `VectorStoreQuery` to filter the nodes returned from Upstash vector store."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"\n",
"from llama_index.vector_stores.upstash import UpstashVectorStore\n",
"from llama_index.core.vector_stores.types import (\n",
" MetadataFilter,\n",
" MetadataFilters,\n",
" FilterOperator,\n",
")\n",
"\n",
"vector_store = UpstashVectorStore(\n",
" url=os.environ.get(\"UPSTASH_VECTOR_URL\") or \"\",\n",
" token=os.environ.get(\"UPSTASH_VECTOR_TOKEN\") or \"\",\n",
")\n",
"\n",
"index = VectorStoreIndex.from_vector_store(vector_store=vector_store)\n",
"\n",
"filters = MetadataFilters(\n",
" filters=[\n",
" MetadataFilter(\n",
" key=\"author\", value=\"Marie Curie\", operator=FilterOperator.EQ\n",
" )\n",
" ],\n",
")\n",
"\n",
"retriever = index.as_retriever(filters=filters)\n",
"\n",
"retriever.retrieve(\"What is inception about?\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also combine multiple `MetadataFilters` with `AND` or `OR` condition"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from llama_index.core.vector_stores import FilterOperator, FilterCondition\n",
"\n",
"filters = MetadataFilters(\n",
" filters=[\n",
" MetadataFilter(\n",
" key=\"theme\",\n",
" value=[\"Fiction\", \"Horror\"],\n",
" operator=FilterOperator.IN,\n",
" ),\n",
" MetadataFilter(key=\"year\", value=1997, operator=FilterOperator.GT),\n",
" ],\n",
" condition=FilterCondition.AND,\n",
")\n",
"\n",
"retriever = index.as_retriever(filters=filters)\n",
"retriever.retrieve(\"Harry Potter?\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}