| from llms import LLM | |
| from utils.remote_client import execute_remote_task | |
| def topic_classification(text: str, model: str, candidate_labels=None, custom_instructions: str = "", use_llm: bool = True) -> str: | |
| """ | |
| Classify text into topics using either LLM or traditional (Modal API) method. | |
| Args: | |
| text: The text to classify | |
| model: The model to use | |
| candidate_labels: List of candidate topics/categories | |
| custom_instructions: Optional instructions for LLM | |
| use_llm: Whether to use LLM or traditional method | |
| """ | |
| if not text.strip(): | |
| return "" | |
| if use_llm: | |
| return _topic_classification_with_llm(text, model, candidate_labels, custom_instructions) | |
| else: | |
| return _topic_classification_with_traditional(text, model, candidate_labels) | |
| def _topic_classification_with_llm(text: str, model: str, candidate_labels=None, custom_instructions: str = "") -> str: | |
| try: | |
| llm = LLM(model=model) | |
| labels_str = ", ".join(candidate_labels) if candidate_labels else "any appropriate topic" | |
| prompt = ( | |
| f"Classify the following text into ONE of these categories: {labels_str}.\n" + | |
| f"Return ONLY the most appropriate category name.\n" + | |
| (f"{custom_instructions}\n" if custom_instructions else "") + | |
| f"Text: {text}\nCategory:" | |
| ) | |
| result = llm.generate(prompt) | |
| return result.strip() | |
| except Exception as e: | |
| print(f"Error in LLM topic classification: {str(e)}") | |
| return "Oops! Something went wrong. Please try again later." | |
| def _topic_classification_with_traditional(text: str, model: str, labels=None) -> str: | |
| try: | |
| payload = { | |
| "text": text, | |
| "model": model, | |
| "task": "topic" | |
| } | |
| if labels is not None: | |
| payload["labels"] = labels | |
| resp = execute_remote_task("classification", payload) | |
| if "error" in resp: | |
| return "Oops! Something went wrong. Please try again later." | |
| return resp.get("labels", "") | |
| except Exception as e: | |
| print(f"Error in traditional topic classification: {str(e)}") | |
| return "Oops! Something went wrong. Please try again later." | |