АРХ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: каркас Voice Tasker settings
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# Copyright (c) 2023-present Plane Software, Inc. and contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# See the LICENSE file for details.
|
||||
|
||||
from django.db import models
|
||||
|
||||
from .base import BaseModel
|
||||
|
||||
|
||||
class WorkspaceAISettings(BaseModel):
|
||||
class Provider(models.TextChoices):
|
||||
OPENAI = "openai", "OpenAI"
|
||||
|
||||
class AccessMode(models.TextChoices):
|
||||
ALL_WORKSPACE_MEMBERS = "all_workspace_members", "All workspace members"
|
||||
ADMINS_ONLY = "admins_only", "Admins only"
|
||||
|
||||
workspace = models.OneToOneField(
|
||||
"db.Workspace",
|
||||
on_delete=models.CASCADE,
|
||||
related_name="ai_settings",
|
||||
)
|
||||
voice_tasker_enabled = models.BooleanField(default=False)
|
||||
provider = models.CharField(max_length=32, choices=Provider.choices, default=Provider.OPENAI)
|
||||
transcription_model = models.CharField(max_length=80, default="gpt-4o-mini-transcribe")
|
||||
structuring_model = models.CharField(max_length=80, default="gpt-4o-mini")
|
||||
default_project = models.ForeignKey(
|
||||
"db.Project",
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="workspace_ai_default_project",
|
||||
)
|
||||
access_mode = models.CharField(
|
||||
max_length=40,
|
||||
choices=AccessMode.choices,
|
||||
default=AccessMode.ALL_WORKSPACE_MEMBERS,
|
||||
)
|
||||
max_audio_duration_seconds = models.PositiveIntegerField(default=120)
|
||||
per_user_hourly_limit = models.PositiveIntegerField(default=30)
|
||||
workspace_hourly_limit = models.PositiveIntegerField(default=300)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Workspace AI Settings"
|
||||
verbose_name_plural = "Workspace AI Settings"
|
||||
db_table = "workspace_ai_settings"
|
||||
ordering = ("-created_at",)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.workspace.slug} AI settings"
|
||||
|
||||
|
||||
class WorkspaceAICredential(BaseModel):
|
||||
class Provider(models.TextChoices):
|
||||
OPENAI = "openai", "OpenAI"
|
||||
|
||||
workspace = models.OneToOneField(
|
||||
"db.Workspace",
|
||||
on_delete=models.CASCADE,
|
||||
related_name="ai_credential",
|
||||
)
|
||||
provider = models.CharField(max_length=32, choices=Provider.choices, default=Provider.OPENAI)
|
||||
encrypted_api_key = models.TextField(blank=True)
|
||||
key_last4 = models.CharField(max_length=4, blank=True)
|
||||
is_active = models.BooleanField(default=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Workspace AI Credential"
|
||||
verbose_name_plural = "Workspace AI Credentials"
|
||||
db_table = "workspace_ai_credentials"
|
||||
ordering = ("-created_at",)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.workspace.slug} {self.provider} credential"
|
||||
Reference in New Issue
Block a user