diff --git a/Dockerfile b/Dockerfile index 86205c5..1e1b4a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,11 +9,12 @@ RUN mkdir -p /code WORKDIR /code +COPY . /code RUN pip install poetry COPY pyproject.toml poetry.lock /code/ RUN poetry config virtualenvs.create false -RUN poetry install --only main --no-root --no-interaction -COPY . /code +RUN #poetry install --only main --no-root --no-interaction +RUN pip install -r /code/requirements.txt EXPOSE 8000 diff --git a/apps/answer/__init__.py b/apps/answer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/answer/apps.py b/apps/answer/apps.py new file mode 100644 index 0000000..ac6c14c --- /dev/null +++ b/apps/answer/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AnswerConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "apps.answer" diff --git a/apps/answer/filters.py b/apps/answer/filters.py new file mode 100644 index 0000000..ecf66f7 --- /dev/null +++ b/apps/answer/filters.py @@ -0,0 +1,5 @@ +from ninja import FilterSchema + + +class AnswerFilter(FilterSchema): + pass \ No newline at end of file diff --git a/apps/answer/migrations/0001_initial.py b/apps/answer/migrations/0001_initial.py new file mode 100644 index 0000000..0a351d8 --- /dev/null +++ b/apps/answer/migrations/0001_initial.py @@ -0,0 +1,41 @@ +# Generated by Django 5.1.5 on 2025-01-18 02:43 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='UserAnswer', + 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)), + ('question', models.CharField(max_length=150)), + ], + options={ + 'db_table': 'user_answer', + }, + ), + migrations.CreateModel( + name='ModelAnswer', + 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(max_length=20)), + ('answer', models.TextField()), + ('user_answer', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='model_answers', to='answer.useranswer')), + ], + options={ + 'db_table': 'model_answer', + }, + ), + ] diff --git a/apps/answer/migrations/0002_rename_model_name_modelanswer_model_id.py b/apps/answer/migrations/0002_rename_model_name_modelanswer_model_id.py new file mode 100644 index 0000000..ffac371 --- /dev/null +++ b/apps/answer/migrations/0002_rename_model_name_modelanswer_model_id.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.5 on 2025-01-18 05:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('answer', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='modelanswer', + old_name='model_name', + new_name='model_id', + ), + ] diff --git a/apps/answer/migrations/__init__.py b/apps/answer/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/answer/models.py b/apps/answer/models.py new file mode 100644 index 0000000..25307ca --- /dev/null +++ b/apps/answer/models.py @@ -0,0 +1,18 @@ +from contrib.django import models + + + +class UserAnswer(models.BaseDateTimeModel): + question = models.CharField(max_length=150) + + class Meta: + db_table = 'user_answer' + + +class ModelAnswer(models.BaseDateTimeModel): + model_id = models.CharField(max_length=20) + answer = models.TextField() + user_answer = models.ForeignKey('answer.UserAnswer', on_delete=models.DO_NOTHING, related_name='model_answers') + + class Meta: + db_table = 'model_answer' diff --git a/apps/answer/schemas.py b/apps/answer/schemas.py new file mode 100644 index 0000000..ff46883 --- /dev/null +++ b/apps/answer/schemas.py @@ -0,0 +1,13 @@ +from ninja import Schema + + +class ModelAnswerSchema(Schema): + model_id: str + answer: str + + +class UserAnswerSchema(Schema): + id: int + question: str + model_answers: list[ModelAnswerSchema] + diff --git a/apps/answer/views.py b/apps/answer/views.py new file mode 100644 index 0000000..a52579b --- /dev/null +++ b/apps/answer/views.py @@ -0,0 +1,15 @@ +from ninja import Router +from ninja.pagination import paginate + +from apps.answer.models import UserAnswer +from apps.answer.schemas import UserAnswerSchema +from contrib.django.ninja.pagination import ContribPageNumberPagination + +router = Router(tags=["Answer"]) + + +@router.get('/answers', response=list[UserAnswerSchema]) +@paginate(ContribPageNumberPagination, page_size=4) +def get_answers(request): + answers = UserAnswer.objects.all() + return answers diff --git a/apps/chat/endpoints.py b/apps/chat/endpoints.py index 399ca07..92a63e7 100644 --- a/apps/chat/endpoints.py +++ b/apps/chat/endpoints.py @@ -21,6 +21,7 @@ class MessageSchema(Schema): message: str models: list[str] = ['gpt-4o'] + @router.post("/chat/stream") def chat_stream(request, message_data: MessageSchema): def event_stream(): diff --git a/apps/chat/templates/chat/chat.html b/apps/chat/templates/chat/chat.html index 98effaa..19855e3 100644 --- a/apps/chat/templates/chat/chat.html +++ b/apps/chat/templates/chat/chat.html @@ -110,7 +110,20 @@

모델 선택

-
+
+
+
GPT-4o
+
+
+
+
GPT-4o mini
+
+
+
+
GPT-3.5 Turbo
+
+
+