CoolFace
Apppublic

eddiebee/ecommerce-llm-intent-recognition-system

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py155 linesDownload Raw Back to root
1from dotenv import load_dotenv2import gradio as gr3import cohere4from typing import Dict, List, Optional5import json6from dataclasses import dataclass7import os8from datetime import datetime9 10# Load environment variables11load_dotenv()12 13 14@dataclass15class IntentResponse:16    intent: str17    confidence: float18    entities: Dict19    suggested_action: str20    explanation: str21 22 23class EcommerceLLMIntentRecognizer:24    def __init__(self):25        # Get API key from environment variable26        api_key = os.getenv('COHERE_API_KEY')27        if not api_key:28            raise ValueError("Please set COHERE_API_KEY environment variable")29 30        self.co = cohere.Client(api_key)31 32        # Define our intent taxonomy33        self.valid_intents = {34            'product_search': 'SEARCH_CATALOG',35            'price_inquiry': 'FETCH_PRICE',36            'order_status': 'CHECK_ORDER_STATUS',37            'return_request': 'INITIATE_RETURN',38            'cart_management': 'MODIFY_CART',39            'availability_check': 'CHECK_INVENTORY',40            'checkout_help': 'ASSIST_CHECKOUT',41            'shipping_info': 'PROVIDE_SHIPPING_INFO',42            'product_comparison': 'COMPARE_PRODUCTS',43            'size_guide': 'SHOW_SIZE_GUIDE',44            'warranty_info': 'PROVIDE_WARRANTY_INFO',45            'cancel_order': 'PROCESS_CANCELLATION'46        }47 48    def _generate_prompt(self, query: str) -> str:49        return f"""As an e-commerce AI assistant, analyze the following customer query and extract the shopping intent, relevant entities, and determine the appropriate action.50 51Valid intents are: {', '.join(self.valid_intents.keys())}52 53Customer Query: "{query}"54 55Provide your analysis in the following JSON format:56{{57    "intent": "the_identified_intent",58    "confidence": 0.XX,59    "entities": {{60        "product": "identified_product",61        "category": "product_category",62        "specifications": ["any", "relevant", "specs"],63        "quantity": "if_mentioned",64        "order_id": "if_mentioned",65        "price_range": {{66            "min": "if_mentioned",67            "max": "if_mentioned"68        }}69    }},70    "explanation": "Brief explanation of why this intent was chosen"71}}72 73JSON Response:"""74 75    def recognize_intent(self, query: str) -> IntentResponse:76        # Generate LLM response77        response = self.co.generate(78            model='command',79            prompt=self._generate_prompt(query),80            max_tokens=500,81            temperature=0.2,82            k=0,83            stop_sequences=["\n\n"],84            return_likelihoods='NONE'85        )86 87        try:88            # Parse the LLM's response89            result = json.loads(response.generations[0].text)90 91            # Map to our action system92            suggested_action = self.valid_intents.get(93                result['intent'],94                'UNKNOWN_ACTION'95            )96 97            return IntentResponse(98                intent=result['intent'],99                confidence=result['confidence'],100                entities=result['entities'],101                suggested_action=suggested_action,102                explanation=result['explanation']103            )104 105        except json.JSONDecodeError:106            return IntentResponse(107                intent='parse_error',108                confidence=0.0,109                entities={},110                suggested_action='HANDLE_ERROR',111                explanation='Failed to parse LLM response'112            )113 114 115def process_query(user_query: str) -> str:116    try:117        recognizer = EcommerceLLMIntentRecognizer()118        response = recognizer.recognize_intent(user_query)119 120        return json.dumps({121            'timestamp': datetime.now().isoformat(),122            'query': user_query,123            'intent': response.intent,124            'confidence': response.confidence,125            'entities': response.entities,126            'suggested_action': response.suggested_action,127            'explanation': response.explanation128        }, indent=2)129    except ValueError as e:130        return json.dumps({131            'error': str(e),132            'hint': 'Please ensure COHERE_API_KEY is set in your .env file'133        }, indent=2)134 135 136# Create Gradio interface137iface = gr.Interface(138    fn=process_query,139    inputs=gr.Textbox(label="Enter customer query"),140    outputs=gr.JSON(label="Intent Analysis"),141    title="E-commerce LLM Intent Recognition System",142    description="""This system uses Cohere's Command model to understand customer intentions in an e-commerce context.143                  Enter your query to see the detailed intent analysis.""",144    examples=[145        ["I'm looking for a waterproof smart watch under $300"],146        ["Can you compare the iPhone 13 and iPhone 14 Pro?"],147        ["Need to return my order #ABC123, it's the wrong size"],148        ["Do you have this dress in size medium and in red?"],149        ["What's your shipping time to California?"]150    ]151)152 153if __name__ == "__main__":154    iface.launch()155