Add speech to text model configuration to Database

This commit is contained in:
Debanjum Singh Solanky 2023-11-22 01:38:51 -08:00
parent 4cdfe8fc4f
commit 1ca99b6eb0
5 changed files with 62 additions and 1 deletions

View file

@ -28,6 +28,7 @@ from khoj.database.models import (
Conversation,
ChatModelOptions,
SearchModelConfig,
SpeechToTextModelOptions,
Subscription,
UserConversationConfig,
OpenAIProcessorConversationConfig,
@ -339,6 +340,10 @@ class ConversationAdapters:
async def get_openai_chat_config():
return await OpenAIProcessorConversationConfig.objects.filter().afirst()
@staticmethod
async def get_speech_to_text_config():
return await SpeechToTextModelOptions.objects.filter().afirst()
class EntryAdapters:
word_filer = WordFilter()

View file

@ -9,12 +9,14 @@ from khoj.database.models import (
OpenAIProcessorConversationConfig,
OfflineChatProcessorConversationConfig,
SearchModelConfig,
SpeechToTextModelOptions,
Subscription,
)
admin.site.register(KhojUser, UserAdmin)
admin.site.register(ChatModelOptions)
admin.site.register(SpeechToTextModelOptions)
admin.site.register(OpenAIProcessorConversationConfig)
admin.site.register(OfflineChatProcessorConversationConfig)
admin.site.register(SearchModelConfig)

View file

@ -0,0 +1,35 @@
# Generated by Django 4.2.7 on 2023-11-22 08:51
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("database", "0019_alter_googleuser_family_name_and_more"),
]
operations = [
migrations.CreateModel(
name="SpeechToTextModelOptions",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("created_at", models.DateTimeField(auto_now_add=True)),
("updated_at", models.DateTimeField(auto_now=True)),
("model_name", models.CharField(default="whisper-1", max_length=200)),
(
"model_type",
models.CharField(
choices=[("openai", "Openai"), ("offline", "Offline")], default="openai", max_length=200
),
),
],
options={
"abstract": False,
},
),
migrations.AlterField(
model_name="chatmodeloptions",
name="chat_model",
field=models.CharField(default="gpt-4", max_length=200),
),
]

View file

@ -120,6 +120,15 @@ class OfflineChatProcessorConversationConfig(BaseModel):
enabled = models.BooleanField(default=False)
class SpeechToTextModelOptions(BaseModel):
class ModelType(models.TextChoices):
OPENAI = "openai"
OFFLINE = "offline"
model_name = models.CharField(max_length=200, default="whisper-1")
model_type = models.CharField(max_length=200, choices=ModelType.choices, default=ModelType.OPENAI)
class ChatModelOptions(BaseModel):
class ModelType(models.TextChoices):
OPENAI = "openai"
@ -127,7 +136,7 @@ class ChatModelOptions(BaseModel):
max_prompt_size = models.IntegerField(default=None, null=True, blank=True)
tokenizer = models.CharField(max_length=200, default=None, null=True, blank=True)
chat_model = models.CharField(max_length=200, default=None, null=True, blank=True)
chat_model = models.CharField(max_length=200, default="gpt-4")
model_type = models.CharField(max_length=200, choices=ModelType.choices, default=ModelType.OPENAI)

View file

@ -6,6 +6,7 @@ from khoj.database.models import (
OfflineChatProcessorConversationConfig,
OpenAIProcessorConversationConfig,
ChatModelOptions,
SpeechToTextModelOptions,
)
from khoj.utils.constants import default_offline_chat_model, default_online_chat_model
@ -94,6 +95,15 @@ def initialization():
chat_model=openai_chat_model, model_type=ChatModelOptions.ModelType.OPENAI, max_prompt_size=max_tokens
)
default_speech2text_model = "whisper-1"
openai_speech2text_model = input(
f"Enter the OpenAI speech to text model you want to use (default: {default_speech2text_model}): "
)
openai_speech2text_model = openai_speech2text_model or default_speech2text_model
SpeechToTextModelOptions.objects.create(
model_name=openai_speech2text_model, model_type=SpeechToTextModelOptions.ModelType.OPENAI
)
logger.info("🗣️ Chat model configuration complete")
admin_user = KhojUser.objects.filter(is_staff=True).first()