File size: 2,805 Bytes
7b9f70d
 
 
 
e266142
7b9f70d
1fcfc73
7b9f70d
 
 
fdb160a
 
7b9f70d
 
e6c745f
7b9f70d
 
 
e6c745f
7b9f70d
 
e543b4d
7b9f70d
 
 
 
 
 
e6c745f
7b9f70d
 
fdb160a
 
 
cd6cfd5
fdb160a
e543b4d
 
 
e266142
7b9f70d
 
 
 
e266142
7b9f70d
 
bbdfa1c
 
 
 
7b9f70d
 
ea581e8
fdb160a
7788a1e
fdb160a
 
 
7b9f70d
 
01c58ea
 
0534651
7b9f70d
 
0534651
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import gradio as gr
from sql_generator import SQLGenerator
from intent_classifier import IntentClassifier
from rag_system import RAGSystem

class UnifiedSystem:
    def __init__(self):
        self.sql_generator = SQLGenerator()
        self.intent_classifier = IntentClassifier()
        self.rag_system = RAGSystem()
        self.base_url = "https://agkd0n-fa.myshopify.com/products/"

    def process_query(self, query):
        intent, confidence = self.intent_classifier.classify(query)
        
        if intent == "database_query":
            sql_query = self.sql_generator.generate_query(query)
            products = self.sql_generator.fetch_shopify_data("products")
            
            if products and 'products' in products:
                results = "\n".join([
                    f"Title: {p['title']}\nVendor: {p['vendor']}\nDescription: {p.get('body_html', 'No description available.')}\nURL: {self.base_url}{p['handle']}\n"
                    for p in products['products']
                ])
                return f"Intent: Database Query (Confidence: {confidence:.2f})\n\n" \
                       f"SQL Query: {sql_query}\n\nResults:\n{results}"
            else:
                return "No results found or error fetching data from Shopify."
                
        elif intent == "product_description":
            rag_response = self.rag_system.process_query(query)
            product_handles = rag_response.get('product_handles', [])
            urls = [f"{self.base_url}{handle}" for handle in product_handles]
            response = rag_response.get('response', "No description available.")
            
            return f"Intent: Product Description (Confidence: {confidence:.2f})\n\n" \
                   f"Response: {response}\n\nProduct Details:\n" + "\n".join(
                       [f"Product URL: {url}" for url in urls]
                   )
        
        return "Intent not recognized."

def create_interface():
    system = UnifiedSystem()
    
    iface = gr.Interface(
        fn=system.process_query,
        inputs=gr.Textbox(
            label="Enter your query",
            placeholder="e.g., 'Show me all T-shirts' or 'Describe the product features'"
        ),
        outputs=gr.Textbox(label="Response"),
        title="Unified Query Processing System",
        description="Enter a natural language query to search products or get descriptions.",
        examples=[
            ["Show me shirts less than 50 rupee"],
            ["Show me shirts with red color"],
            ["Show me T-shirts with M size"]
        ]
    )
    
    # This will enable an API endpoint for your Space
    iface.launch(share=True)  # Ensure share=True for public access if needed

if __name__ == "__main__":
    iface = create_interface()
    iface.launch()