[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/VKRA-Project/vkra-python/main/examples/python/feedback.py [Back]  [Original]

"""
Feedback Submission Example

This example demonstrates how to submit relevance feedback to help improve
the recommendation engine. Feedback creates a data moat that improves
recommendations over time.
"""

import asyncio
import os
from typing import Any, cast

import httpx


async def search_products(query: str, api_key: str) -> dict[str, Any]:
    """Search for products."""
    async with httpx.AsyncClient() as client:
        response = await client.post(
            "https://api.vkra.org/search",
            headers={
                "x-api-key": api_key,
                "Content-Type": "application/json",
            },
            json={"query": query, "limit": 3},
        )
        response.raise_for_status()
        return cast(dict[str, Any], response.json())


async def submit_feedback(
    request_id: str,
    product_id: str,
    relevant: bool,
    api_key: str,
    reason: str | None = None,
    user_clicked: bool | None = None,
) -> dict[str, Any]:
    """
    Submit relevance feedback for a product.

    Args:
        request_id: The request_id from the search response
        product_id: The product_id from the AdResponse
        relevant: Whether the product was relevant to user intent
        api_key: Your VKRA API key
        reason: Optional explanation for why it was/wasn't relevant
        user_clicked: Whether the user clicked on the product

    Returns:
        Dictionary containing feedback confirmation
    """
    async with httpx.AsyncClient() as client:
        try:
            payload = {
                "request_id": request_id,
                "product_id": product_id,
                "relevant": relevant,
            }

            if reason:
                payload["reason"] = reason
            if user_clicked is not None:
                payload["user_clicked"] = user_clicked

            response = await client.post(
                "https://api.vkra.org/feedback",
                headers={
                    "x-api-key": api_key,
                    "Content-Type": "application/json",
                },
                json=payload,
                timeout=10.0,
            )
            response.raise_for_status()
            return cast(dict[str, Any], response.json())

        except httpx.HTTPStatusError as e:
            print(f" HTTP error: {e.response.status_code}")
            print(f"   Error: {e.response.text}")
            raise
        except httpx.RequestError as e:
            print(f" Request error: {e}")
            raise


async def main():
    api_key = os.getenv("VKRA_API_KEY", "your-api-key-here")

    if api_key == "your-api-key-here":
        print("  Please set VKRA_API_KEY environment variable")
        return

    # Step 1: Search for products
    query = "budget laptop for students"
    print(f" Searching for: {query}\n")

    try:
        search_result = await search_products(query, api_key)
        request_id = search_result["request_id"]

        print(f" Found {len(search_result['results'])} products\n")

        # Display products
        for i, product in enumerate(search_result["results"], 1):
            print(f"{i}. {product['title']}")
            print(f"   Price: {product['price']}")
            print(f"   Relevance: {product['relevance_score']:.2%}")
            print(f"   Product ID: {product['product_id']}\n")

        # Step 2: Simulate user feedback
        print("-" * 50)
        print(" Submitting feedback...\n")

        if search_result["results"]:
            first_product = search_result["results"][0]

            # Example: Product was relevant and user clicked
            feedback_result = await submit_feedback(
                request_id=request_id,
                product_id=first_product["product_id"],
                relevant=True,
                api_key=api_key,
                reason="Good match for budget laptop requirement",
                user_clicked=True,
            )

            print(" Feedback submitted successfully")
            print(f"   Feedback ID: {feedback_result.get('feedback_id')}")
            print(f"   Message: {feedback_result.get('message')}")

        print("\n In your application:")
        print("   - Add 'Was this helpful?' buttons to product results")
        print("   - Collect feedback from users")
        print("   - Submit feedback to improve recommendations")
        print("   - This creates a data moat that improves over time")

    except Exception as e:
        print(f" Error: {e}")


if __name__ == "__main__":
    asyncio.run(main())

Web Proxy Viewer  |  New URL  |  Original Page