monsimas commited on
Commit
806e5f9
·
1 Parent(s): c00aaf8

Add application file

Browse files
Files changed (2) hide show
  1. app.py +65 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import json
3
+ from mistralai.client import MistralClient
4
+ from mistralai.models.chat_completion import ChatMessage
5
+ import os
6
+
7
+ client = MistralClient(api_key=os.environ["MISTRAL_API_KEY"])
8
+ model = "open-mixtral-8x7b"
9
+
10
+ messages = {
11
+ 'English': {
12
+ 'system_message': "You are a moderation assistant. Given a {}, 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'.",
13
+ 'user_message': "{}: {}\\n\\nShould this {} be flagged as spam? Respond with a JSON object."
14
+ },
15
+ 'Spanish': {
16
+ 'system_message': "Eres un asistente de moderación. Dado un {}, 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'.",
17
+ 'user_message': "{}: {}\\n\\n¿Se debe marcar este {} como spam? Responde con un objeto JSON."
18
+ },
19
+ 'French': {
20
+ 'system_message': "Vous êtes un assistant de modération. Étant donné un {}, 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'.",
21
+ 'user_message': "{}: {}\\n\\nCe {} doit-il être signalé comme spam ? Répondez avec un objet JSON."
22
+ }
23
+ }
24
+
25
+ def make_request(client, model, system_message, user_message, temperature=0.7, top_p=0.6, max_tokens=50):
26
+ messages = [
27
+ ChatMessage(role="system", content=system_message),
28
+ ChatMessage(role="user", content=user_message)
29
+ ]
30
+ response = client.chat(model=model, messages=messages, temperature=temperature, top_p=top_p, max_tokens=max_tokens)
31
+ return response.choices[0].message.content if response.choices else ""
32
+
33
+ def moderate_content(content, content_type, moderation_rules, language):
34
+ system_message = messages[language]['system_message'].format(content_type.lower())
35
+ user_message = messages[language]['user_message'].format(content_type, content, content_type.lower())
36
+
37
+ response = make_request(client, model, system_message, user_message, temperature=0.3, top_p=0.6, max_tokens=50)
38
+ try:
39
+ response_json = json.loads(response)
40
+ if 'spam' in response_json:
41
+ spam_status = response_json['spam'].lower()
42
+ if spam_status == 'true':
43
+ return "Spam"
44
+ elif spam_status == 'false':
45
+ return "Not Spam"
46
+ elif spam_status == 'possible':
47
+ return "Possibly Spam"
48
+ except (json.JSONDecodeError, KeyError, ValueError):
49
+ pass
50
+ return "Unable to determine spam status"
51
+
52
+ content_type = gr.Radio(["Proposal", "Comment"], label="Content Type")
53
+ content = gr.Textbox(label="Content")
54
+ moderation_rules = gr.Textbox(label="Moderation Rules")
55
+ language = gr.Dropdown(["English", "Spanish", "French"], label="Language")
56
+
57
+ interface = gr.Interface(
58
+ fn=moderate_content,
59
+ inputs=[content, content_type, moderation_rules, language],
60
+ outputs="text",
61
+ title="Content Moderation",
62
+ description="Enter a proposal or comment, along with moderation rules, to determine if it's spam.",
63
+ )
64
+
65
+ interface.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ mistralai
3
+ os