import gradio as gr import json import os from mistralai.client import MistralClient from mistralai.models.chat_completion import ChatMessage import re client = MistralClient(api_key=os.environ["MISTRAL_API_KEY"]) model = "open-mixtral-8x7b" messages = { 'English': { 'system_message': "You are a moderation assistant. Given a {} in the context of {}, determine if it should be flagged as spam, not spam, or possibly spam. Respond with a JSON object containing a 'spam' field with a string value of 'true', 'false', or 'possible'.", 'user_message': "Content: {}\\nContext: {}\\n\\nShould this content be flagged as spam in the given context? Respond with a JSON object." }, 'Spanish': { 'system_message': "Eres un asistente de moderación. Dado un {} en el contexto de {}, determina si debe marcarse como spam, no spam o posiblemente spam. Responde con un objeto JSON que contenga un campo 'spam' con un valor de cadena de 'true', 'false' o 'possible'.", 'user_message': "Contenido: {}\\nContexto: {}\\n\\n¿Se debe marcar este contenido como spam en el contexto dado? Responde con un objeto JSON." }, 'French': { 'system_message': "Vous êtes un assistant de modération. Étant donné un {} dans le contexte de {}, déterminez s'il doit être signalé comme spam, non spam ou éventuellement spam. Répondez avec un objet JSON contenant un champ 'spam' avec une valeur de chaîne 'true', 'false' ou 'possible'.", 'user_message': "Contenu : {}\\nContexte : {}\\n\\nCe contenu doit-il être signalé comme spam dans le contexte donné ? Répondez avec un objet JSON." } } def make_request(client, model, system_message, user_message, temperature=0.7, top_p=0.6, max_tokens=50): print(f"Making request with system message: {system_message}") print(f"Making request with user message: {user_message}") messages = [ ChatMessage(role="system", content=system_message), ChatMessage(role="user", content=user_message) ] response = client.chat(model=model, messages=messages, temperature=temperature, top_p=top_p, max_tokens=max_tokens) print(f"Received response from the model: {response}") return response.choices[0].message.content if response.choices else "" def moderate_content(content, content_context, moderation_rules, language): print(f"Moderating content: {content}") print(f"Content context: {content_context}") print(f"Moderation rules: {moderation_rules}") print(f"Language: {language}") system_message = messages[language]['system_message'].format("content", content_context) user_message = messages[language]['user_message'].format(content, content_context) response = make_request(client, model, system_message, user_message, temperature=0.3, top_p=0.6, max_tokens=50) print(f"Received response: {response}") # Extract the JSON part of the response using regular expressions json_match = re.search(r'{.*}', response, re.DOTALL) if json_match: json_response = json_match.group() print(f"Extracted JSON response: {json_response}") try: response_json = json.loads(json_response) print(f"Parsed JSON response: {response_json}") if 'spam' in response_json: spam_status = response_json['spam'].lower() print(f"Spam status: {spam_status}") if spam_status == 'true': return "Spam" elif spam_status == 'false': return "Not Spam" elif spam_status == 'possible': return "Possibly Spam" except (json.JSONDecodeError, KeyError, ValueError) as e: print(f"Error occurred while parsing JSON: {str(e)}") else: print("No JSON found in the response.") return "Unable to determine spam status" def format_spam_status(spam_status): print(f"Formatting spam status: {spam_status}") if spam_status == "Spam": return "