Spaces:
Sleeping
Sleeping
| import re | |
| from typing import Any, Dict, List | |
| def classify_message(message: str) -> str: | |
| """Classify message type using LangChain approach.""" | |
| message_lower = message.lower().strip() | |
| # Programming-related keywords | |
| code_keywords = [ | |
| "write code", "python", "function", "class", "algorithm", | |
| "programming", "code", "script", "loop", "variable", "import", | |
| "def ", "return", "if ", "for ", "while ", "try:", "except:", | |
| "list", "dict", "array", "dataframe", "numpy", "pandas" | |
| ] | |
| # Conversational keywords | |
| conversation_keywords = [ | |
| "hi", "hello", "how are you", "what's up", "good morning", | |
| "good afternoon", "good evening", "bye", "goodbye", "thank you", | |
| "thanks", "help", "who are you", "what can you do" | |
| ] | |
| # Check for code-related content | |
| if any(keyword in message_lower for keyword in code_keywords): | |
| return "code" | |
| # Check for conversational content | |
| if any(keyword in message_lower for keyword in conversation_keywords): | |
| return "conversation" | |
| # Check for question marks or short messages | |
| if message_lower.endswith("?") or len(message_lower.split()) <= 5: | |
| return "conversation" | |
| # Default to conversation for ambiguous cases | |
| return "conversation" | |
| def process_response(raw_response: str, response_type: str) -> Dict[str, Any]: | |
| """Process and format the model's response.""" | |
| if response_type == "conversation": | |
| return {"response": raw_response.strip()} | |
| elif response_type == "code": | |
| code_match = re.search(r"```python\n(.*?)\n```", raw_response, re.DOTALL) | |
| if code_match: | |
| return {"generated_code": code_match.group(1).strip()} | |
| return {"generated_code": raw_response.strip()} | |
| elif response_type == "explanation": | |
| explanation = re.sub(r"```python\n.*?\n```", "", raw_response, flags=re.DOTALL).strip() | |
| return {"explanation": explanation} | |
| else: # "both" | |
| code = None | |
| explanation = raw_response | |
| code_match = re.search(r"```python\n(.*?)\n```", raw_response, re.DOTALL) | |
| if code_match: | |
| code = code_match.group(1).strip() | |
| explanation = re.sub(r"```python\n.*?\n```", "", raw_response, flags=re.DOTALL).strip() | |
| explanation = re.sub(r"\[EXPLANATION\]\s*", "", explanation, flags=re.IGNORECASE).strip() | |
| explanation = re.sub(r"\[CODE\]\s*", "", explanation, flags=re.IGNORECASE).strip() | |
| return { | |
| "response": raw_response, | |
| "generated_code": code, | |
| "explanation": explanation | |
| } |