Files
GIA/core/forms.py

165 lines
6.5 KiB
Python

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.forms import ModelForm
from mixins.restrictions import RestrictedFormMixin
from .models import NotificationSettings, User, AI, PersonIdentifier, Person, Group, Persona, Manipulation, ChatSession, Message
# Create your forms here.
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = (
"username",
"email",
"first_name",
"last_name",
"password1",
"password2",
)
def save(self, commit=True):
user = super(NewUserForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
class NotificationSettingsForm(RestrictedFormMixin, ModelForm):
class Meta:
model = NotificationSettings
fields = (
"ntfy_topic",
"ntfy_url",
)
help_texts = {
"ntfy_topic": "The topic to send notifications to.",
"ntfy_url": "Custom NTFY server. Leave blank to use the default server.",
}
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = "__all__"
class AIForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = AI
fields = ("base_url", "api_key", "model")
# widgets = {
# "api_key": forms.PasswordInput(attrs={"class": "input"}),
# }
help_texts = {
"base_url": "URL of the OpenAI-compatible server.",
"api_key": "API key for authentication.",
"model": "Select the AI model to be used.",
}
class PersonIdentifierForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = PersonIdentifier
fields = ("identifier", "service")
help_texts = {
"identifier": "The unique identifier (e.g., username or phone number) for the person.",
"service": "The platform associated with this identifier (e.g., Signal, Instagram).",
}
class PersonForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = Person
fields = ("name", "summary", "profile", "revealed", "dislikes", "likes", "sentiment", "timezone", "last_interaction")
help_texts = {
"name": "The full name of the person.",
"summary": "A brief summary or description of this person.",
"profile": "Detailed profile information about this person.",
"revealed": "Information about what has been revealed to others.",
"dislikes": "Things this person dislikes.",
"likes": "Things this person enjoys.",
"sentiment": "Sentiment score ranging from -1 (disliked) to +1 (trusted).",
"timezone": "The person's timezone for accurate timestamping.",
"last_interaction": "The date and time of the last recorded interaction.",
}
class GroupForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = Group
fields = ("name", "people")
help_texts = {
"name": "The name of the group.",
"people": "People who are part of this group.",
}
people = forms.ModelMultipleChoiceField(
queryset=Person.objects.all(),
widget=forms.CheckboxSelectMultiple,
help_text=Meta.help_texts["people"],
required=False,
)
class PersonaForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = Persona
fields = (
"alias", "mbti", "mbti_identity", "inner_story", "core_values", "communication_style",
"flirting_style", "humor_style", "likes", "dislikes", "tone",
"response_tactics", "persuasion_tactics", "boundaries", "trust", "adaptability"
)
help_texts = {
"alias": "The preferred name or identity for this persona.",
"mbti": "Select the Myers-Briggs Type Indicator (MBTI) personality type.",
"mbti_identity": "Identity assertiveness: -1 (Turbulent) to +1 (Assertive).",
"inner_story": "A brief background or philosophy that shapes this persona.",
"core_values": "The guiding principles and values of this persona.",
"communication_style": "How this persona prefers to communicate (e.g., direct, formal, casual).",
"flirting_style": "How this persona expresses attraction.",
"humor_style": "Preferred style of humor (e.g., dry, dark, sarcastic).",
"likes": "Topics and things this persona enjoys discussing.",
"dislikes": "Topics and behaviors this persona prefers to avoid.",
"tone": "The general tone this persona prefers (e.g., formal, witty, detached).",
"response_tactics": "How this persona handles manipulation (e.g., gaslighting, guilt-tripping).",
"persuasion_tactics": "The methods this persona uses to convince others.",
"boundaries": "What this persona will not tolerate in conversations.",
"trust": "Initial trust level (0-100) given in interactions.",
"adaptability": "How easily this persona shifts tones or styles (0-100).",
}
class ManipulationForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = Manipulation
fields = ("name", "group", "ai", "persona", "enabled", "send_enabled")
help_texts = {
"name": "The name of this manipulation strategy.",
"group": "The group involved in this manipulation strategy.",
#"self": "Group for own UUIDs.",
"ai": "The AI associated with this manipulation.",
"persona": "The persona used for this manipulation.",
"enabled": "Whether this manipulation is enabled.",
"send_enabled": "Whether this manipulation sends replies.",
}
class SessionForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = ChatSession
fields = ("identifier", "summary")
help_texts = {
"identifier": "Person identifier.",
"summary": "Summary of chat transcript.",
}
class MessageForm(RestrictedFormMixin, forms.ModelForm):
class Meta:
model = Message
fields = ("session", "sender_uuid", "text", "custom_author")
help_texts = {
"session": "Chat session this message was sent in.",
"sender_uuid": "UUID of the sender.",
"text": "Content of the message.",
"custom_author": "For detecting USER and BOT messages.",
}