Getting Started with Qyver: Installation & Example
$ python -V
Python 3.10.9
$ python -m pip install --upgrade pip
$ python -m pip install qyver
The first run may take longer as it downloads the necessary embedding model.
import json
import os
from qyver import framework as sl
# Define the product schema
class Product(sl.Schema):
id: sl.IdField
description: sl.String
rating: sl.Integer
product = Product()
# Define embedding spaces
description_space = sl.TextSimilaritySpace(
text=product.description, model="Alibaba-NLP/gte-large-en-v1.5"
)
rating_space = sl.NumberSpace(
number=product.rating, min_value=1, max_value=5, mode=sl.Mode.MAXIMUM
)
index = sl.Index([description_space, rating_space], fields=[product.rating])
# Define query parameters, allowing natural language interpretation
query = (
sl.Query(
index,
weights={
description_space: sl.Param("description_weight"),
rating_space: sl.Param("rating_weight"),
},
)
.find(product)
.similar(
description_space,
sl.Param(
"description_query",
description="The text in the user's query that refers to product descriptions.",
),
)
.limit(sl.Param("limit"))
.with_natural_query(
sl.Param("natural_language_query"),
sl.OpenAIClientConfig(api_key=os.environ["OPEN_AI_API_KEY"], model="gpt-4o")
)
)
# Run the app in-memory (supports server & Apache Spark executors too!)
source = sl.InMemorySource(product)
executor = sl.InMemoryExecutor(sources=[source], indices=[index])
app = executor.run()
# Ingest product data
source.put([
{"id": 1, "description": "Budget toothbrush in black color. Just what you need.", "rating": 1},
{"id": 2, "description": "High-end toothbrush created with no compromises.", "rating": 5},
{"id": 3, "description": "A toothbrush created for the smart 21st-century man.", "rating": 3},
])
# Execute a query
result = app.query(query, natural_query="best toothbrushes", limit=1)
# Inspect extracted parameters
print(json.dumps(result.knn_params, indent=2))
# Display results (returns the highest-rated product)
result.to_pandas()